LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
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;
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;
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
#define DEFINE_ACCESSORS(NAME, UNAME)
Definition: FootprintCtrl.h:64
A Control Object for Footprints, controlling e.g.
Definition: FootprintCtrl.h:34
void growIsotropic(bool val)
Set whether Footprint should be grown isotropically.
Definition: FootprintCtrl.h:81
FootprintControl & operator=(FootprintControl const &)=default
std::pair< bool, bool > isIsotropic() const
Return <isSet, Value> for isotropic grows.
Definition: FootprintCtrl.h:87
FootprintControl(FootprintControl &&)=default
FootprintControl & operator=(FootprintControl &&)=default
FootprintControl(bool left, bool right, bool up, bool down)
Definition: FootprintCtrl.h:51
FootprintControl(bool circular, bool isotropic=false)
Definition: FootprintCtrl.h:44
FootprintControl(FootprintControl const &)=default
A control object for HeavyFootprints.
Definition: FootprintCtrl.h:99
HeavyFootprintCtrl(HeavyFootprintCtrl const &)=default
HeavyFootprintCtrl & operator=(HeavyFootprintCtrl const &)=default
void setVarianceVal(double varianceVal)
HeavyFootprintCtrl(HeavyFootprintCtrl &&)=default
HeavyFootprintCtrl(ModifySource modifySource=NONE)
HeavyFootprintCtrl & operator=(HeavyFootprintCtrl &&)=default
void setModifySource(ModifySource modifySource)
T make_pair(T... args)
A base class for image defects.
ImageT val
Definition: CR.cc:146