LSSTApplications  20.0.0
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;
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
lsst::afw::detection::FootprintControl::isIsotropic
std::pair< bool, bool > isIsotropic() const
Return <isSet, Value> for isotropic grows.
Definition: FootprintCtrl.h:87
lsst::afw::detection::HeavyFootprintCtrl::SET
@ SET
Definition: FootprintCtrl.h:103
lsst::afw::detection::FootprintControl::FootprintControl
FootprintControl(bool left, bool right, bool up, bool down)
Definition: FootprintCtrl.h:51
lsst::afw::detection::HeavyFootprintCtrl::HeavyFootprintCtrl
HeavyFootprintCtrl(HeavyFootprintCtrl &&)=default
lsst::afw::detection::HeavyFootprintCtrl::ModifySource
ModifySource
Definition: FootprintCtrl.h:101
lsst::afw::detection::FootprintControl::~FootprintControl
~FootprintControl()=default
lsst::afw::detection::HeavyFootprintCtrl
A control object for HeavyFootprints.
Definition: FootprintCtrl.h:99
lsst::afw::detection::FootprintControl::operator=
FootprintControl & operator=(FootprintControl const &)=default
std::pair
lsst::afw
Definition: imageAlgorithm.dox:1
lsst::afw::detection::HeavyFootprintCtrl::HeavyFootprintCtrl
HeavyFootprintCtrl(HeavyFootprintCtrl const &)=default
val
ImageT val
Definition: CR.cc:146
lsst::afw::detection::HeavyFootprintCtrl::getModifySource
ModifySource getModifySource() const
Definition: FootprintCtrl.h:115
lsst::afw::detection::HeavyFootprintCtrl::getVarianceVal
double getVarianceVal() const
Definition: FootprintCtrl.h:122
lsst::afw::detection::HeavyFootprintCtrl::setVarianceVal
void setVarianceVal(double varianceVal)
Definition: FootprintCtrl.h:123
lsst::afw::detection::FootprintControl
A Control Object for Footprints, controlling e.g.
Definition: FootprintCtrl.h:34
lsst::afw::detection::FootprintControl::FootprintControl
FootprintControl(bool circular, bool isotropic=false)
Definition: FootprintCtrl.h:44
lsst::afw::detection::HeavyFootprintCtrl::operator=
HeavyFootprintCtrl & operator=(HeavyFootprintCtrl &&)=default
DEFINE_ACCESSORS
#define DEFINE_ACCESSORS(NAME, UNAME)
Definition: FootprintCtrl.h:64
lsst::afw::detection::FootprintControl::FootprintControl
FootprintControl(FootprintControl const &)=default
lsst::afw::detection::HeavyFootprintCtrl::setMaskVal
void setMaskVal(long maskVal)
Definition: FootprintCtrl.h:121
lsst::afw::detection::HeavyFootprintCtrl::getImageVal
double getImageVal() const
Definition: FootprintCtrl.h:118
lsst
A base class for image defects.
Definition: imageAlgorithm.dox:1
lsst::afw::detection::HeavyFootprintCtrl::getMaskVal
long getMaskVal() const
Definition: FootprintCtrl.h:120
lsst::afw::detection::HeavyFootprintCtrl::HeavyFootprintCtrl
HeavyFootprintCtrl(ModifySource modifySource=NONE)
Definition: FootprintCtrl.h:106
lsst::afw::detection::HeavyFootprintCtrl::operator=
HeavyFootprintCtrl & operator=(HeavyFootprintCtrl const &)=default
lsst::afw::detection::HeavyFootprintCtrl::NONE
@ NONE
Definition: FootprintCtrl.h:102
lsst::afw::detection::FootprintControl::operator=
FootprintControl & operator=(FootprintControl &&)=default
lsst::afw::detection::HeavyFootprintCtrl::setModifySource
void setModifySource(ModifySource modifySource)
Definition: FootprintCtrl.h:116
lsst::afw::detection::HeavyFootprintCtrl::~HeavyFootprintCtrl
~HeavyFootprintCtrl()=default
lsst::afw::detection::FootprintControl::growIsotropic
void growIsotropic(bool val)
Set whether Footprint should be grown isotropically.
Definition: FootprintCtrl.h:81
std::make_pair
T make_pair(T... args)
lsst::afw::detection::FootprintControl::FootprintControl
FootprintControl(FootprintControl &&)=default
lsst::afw::detection::FootprintControl::FootprintControl
FootprintControl()
Definition: FootprintCtrl.h:42
lsst::afw::detection::HeavyFootprintCtrl::setImageVal
void setImageVal(double imageVal)
Definition: FootprintCtrl.h:119