LSSTApplications  17.0+124,17.0+14,17.0+73,18.0.0+37,18.0.0+80,18.0.0-4-g68ffd23+4,18.1.0-1-g0001055+12,18.1.0-1-g03d53ef+5,18.1.0-1-g1349e88+55,18.1.0-1-g2505f39+44,18.1.0-1-g5315e5e+4,18.1.0-1-g5e4b7ea+14,18.1.0-1-g7e8fceb+4,18.1.0-1-g85f8cd4+48,18.1.0-1-g8ff0b9f+4,18.1.0-1-ga2c679d+1,18.1.0-1-gd55f500+35,18.1.0-10-gb58edde+2,18.1.0-11-g0997b02+4,18.1.0-13-gfe4edf0b+12,18.1.0-14-g259bd21+21,18.1.0-19-gdb69f3f+2,18.1.0-2-g5f9922c+24,18.1.0-2-gd3b74e5+11,18.1.0-2-gfbf3545+32,18.1.0-26-g728bddb4+5,18.1.0-27-g6ff7ca9+2,18.1.0-3-g52aa583+25,18.1.0-3-g8ea57af+9,18.1.0-3-gb69f684+42,18.1.0-3-gfcaddf3+6,18.1.0-32-gd8786685a,18.1.0-4-gf3f9b77+6,18.1.0-5-g1dd662b+2,18.1.0-5-g6dbcb01+41,18.1.0-6-gae77429+3,18.1.0-7-g9d75d83+9,18.1.0-7-gae09a6d+30,18.1.0-9-gc381ef5+4,w.2019.45
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