LSSTApplications  17.0+11,17.0+34,17.0+56,17.0+57,17.0+59,17.0+7,17.0-1-g377950a+33,17.0.1-1-g114240f+2,17.0.1-1-g4d4fbc4+28,17.0.1-1-g55520dc+49,17.0.1-1-g5f4ed7e+52,17.0.1-1-g6dd7d69+17,17.0.1-1-g8de6c91+11,17.0.1-1-gb9095d2+7,17.0.1-1-ge9fec5e+5,17.0.1-1-gf4e0155+55,17.0.1-1-gfc65f5f+50,17.0.1-1-gfc6fb1f+20,17.0.1-10-g87f9f3f+1,17.0.1-11-ge9de802+16,17.0.1-16-ga14f7d5c+4,17.0.1-17-gc79d625+1,17.0.1-17-gdae4c4a+8,17.0.1-2-g26618f5+29,17.0.1-2-g54f2ebc+9,17.0.1-2-gf403422+1,17.0.1-20-g2ca2f74+6,17.0.1-23-gf3eadeb7+1,17.0.1-3-g7e86b59+39,17.0.1-3-gb5ca14a,17.0.1-3-gd08d533+40,17.0.1-30-g596af8797,17.0.1-4-g59d126d+4,17.0.1-4-gc69c472+5,17.0.1-6-g5afd9b9+4,17.0.1-7-g35889ee+1,17.0.1-7-gc7c8782+18,17.0.1-9-gc4bbfb2+3,w.2019.22
LSSTDataManagementBasePackage
FootprintCtrl.h
Go to the documentation of this file.
1 /*
2  * LSST Data Management System
3  * Copyright 2008, 2009, 2010 LSST Corporation.
4  *
5  * This product includes software developed by the
6  * LSST Project (http://www.lsst.org/).
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the LSST License Statement and
19  * the GNU General Public License along with this program. If not,
20  * see <http://www.lsstcorp.org/LegalNotices/>.
21  */
22 #if !defined(LSST_DETECTION_FOOTPRINTCTRL_H)
23 #define LSST_DETECTION_FOOTPRINTCTRL_H
24 /*
25  * Control Footprint-related algorithms
26  */
27 
28 namespace lsst {
29 namespace afw {
30 namespace detection {
35  enum TBool { FALSE_ = false, TRUE_ = true, NONE_ }; // ternary boolean value. N.b. _XXX is reserved
36 
37  static std::pair<bool, bool> makePairFromTBool(TBool const val) {
38  return (val == NONE_) ? std::make_pair(false, false) : std::make_pair(true, val == TRUE_);
39  }
40 
41 public:
42  explicit FootprintControl()
43  : _circular(NONE_), _isotropic(NONE_), _left(NONE_), _right(NONE_), _up(NONE_), _down(NONE_) {}
44  explicit FootprintControl(bool circular, bool isotropic = false)
45  : _circular(circular ? TRUE_ : FALSE_),
46  _isotropic(isotropic ? TRUE_ : FALSE_),
47  _left(NONE_),
48  _right(NONE_),
49  _up(NONE_),
50  _down(NONE_) {}
51  explicit FootprintControl(bool left, bool right, bool up, bool down)
52  : _circular(NONE_),
53  _isotropic(NONE_),
54  _left(left ? TRUE_ : FALSE_),
55  _right(right ? TRUE_ : FALSE_),
56  _up(up ? TRUE_ : FALSE_),
57  _down(down ? TRUE_ : FALSE_) {}
58  ~FootprintControl() = default;
59  FootprintControl(FootprintControl const &) = default;
60  FootprintControl(FootprintControl &&) = default;
61  FootprintControl &operator=(FootprintControl const &) = default;
63 
64 #define DEFINE_ACCESSORS(NAME, UNAME) \
65  \
66  void grow##UNAME(bool val \
67  ) { \
68  _##NAME = val ? TRUE_ : FALSE_; \
69  } \
70  \
71  std::pair<bool, bool> is##UNAME() const { return makePairFromTBool(_##NAME); }
72 
73  DEFINE_ACCESSORS(circular, Circular)
74  // DEFINE_ACCESSORS(isotropic, Isotropic) // special, as isotropic => circular
75  DEFINE_ACCESSORS(left, Left)
76  DEFINE_ACCESSORS(right, Right)
78  DEFINE_ACCESSORS(down, Down)
79 
81  void growIsotropic(bool val
82  ) {
83  _circular = TRUE_;
84  _isotropic = val ? TRUE_ : FALSE_;
85  }
87  std::pair<bool, bool> isIsotropic() const { return makePairFromTBool(_isotropic); }
88 
89 #undef DEFINE_ACCESSORS
90 private:
91  TBool _circular; // grow in all directions ( == left & right & up & down)
92  TBool _isotropic; // go to the expense of as isotropic a grow as possible
93  TBool _left, _right, _up, _down; // grow in selected directions?
94 };
95 
100 public:
104  };
105 
106  explicit HeavyFootprintCtrl(ModifySource modifySource = NONE)
107  : _modifySource(modifySource), _imageVal(0.0), _maskVal(0), _varianceVal(0.0) {}
108 
109  ~HeavyFootprintCtrl() = default;
110  HeavyFootprintCtrl(HeavyFootprintCtrl const &) = default;
112  HeavyFootprintCtrl &operator=(HeavyFootprintCtrl const &) = default;
114 
115  ModifySource getModifySource() const { return _modifySource; }
116  void setModifySource(ModifySource modifySource) { _modifySource = modifySource; }
117 
118  double getImageVal() const { return _imageVal; }
119  void setImageVal(double imageVal) { _imageVal = imageVal; }
120  long getMaskVal() const { return _maskVal; }
121  void setMaskVal(long maskVal) { _maskVal = maskVal; }
122  double getVarianceVal() const { return _varianceVal; }
123  void setVarianceVal(double varianceVal) { _varianceVal = varianceVal; }
124 
125 private:
126  ModifySource _modifySource;
127  double _imageVal;
128  long _maskVal;
129  double _varianceVal;
130 };
131 } // namespace detection
132 } // namespace afw
133 } // namespace lsst
134 
135 #endif
void growIsotropic(bool val)
Set whether Footprint should be grown isotropically.
Definition: FootprintCtrl.h:81
A Control Object for Footprints, controlling e.g.
Definition: FootprintCtrl.h:34
A control object for HeavyFootprints.
Definition: FootprintCtrl.h:99
void setModifySource(ModifySource modifySource)
ImageT val
Definition: CR.cc:146
FootprintControl & operator=(FootprintControl const &)=default
FootprintControl(bool circular, bool isotropic=false)
Definition: FootprintCtrl.h:44
A base class for image defects.
std::pair< bool, bool > isIsotropic() const
Return <isSet, Value> for isotropic grows.
Definition: FootprintCtrl.h:87
T make_pair(T... args)
HeavyFootprintCtrl(ModifySource modifySource=NONE)
void setVarianceVal(double varianceVal)
#define DEFINE_ACCESSORS(NAME, UNAME)
Definition: FootprintCtrl.h:64
FootprintControl(bool left, bool right, bool up, bool down)
Definition: FootprintCtrl.h:51