LSST Applications  21.0.0+04719a4bac,21.0.0-1-ga51b5d4+f5e6047307,21.0.0-11-g2b59f77+a9c1acf22d,21.0.0-11-ga42c5b2+86977b0b17,21.0.0-12-gf4ce030+76814010d2,21.0.0-13-g1721dae+760e7a6536,21.0.0-13-g3a573fe+768d78a30a,21.0.0-15-g5a7caf0+f21cbc5713,21.0.0-16-g0fb55c1+b60e2d390c,21.0.0-19-g4cded4ca+71a93a33c0,21.0.0-2-g103fe59+bb20972958,21.0.0-2-g45278ab+04719a4bac,21.0.0-2-g5242d73+3ad5d60fb1,21.0.0-2-g7f82c8f+8babb168e8,21.0.0-2-g8f08a60+06509c8b61,21.0.0-2-g8faa9b5+616205b9df,21.0.0-2-ga326454+8babb168e8,21.0.0-2-gde069b7+5e4aea9c2f,21.0.0-2-gecfae73+1d3a86e577,21.0.0-2-gfc62afb+3ad5d60fb1,21.0.0-25-g1d57be3cd+e73869a214,21.0.0-3-g357aad2+ed88757d29,21.0.0-3-g4a4ce7f+3ad5d60fb1,21.0.0-3-g4be5c26+3ad5d60fb1,21.0.0-3-g65f322c+e0b24896a3,21.0.0-3-g7d9da8d+616205b9df,21.0.0-3-ge02ed75+a9c1acf22d,21.0.0-4-g591bb35+a9c1acf22d,21.0.0-4-g65b4814+b60e2d390c,21.0.0-4-gccdca77+0de219a2bc,21.0.0-4-ge8a399c+6c55c39e83,21.0.0-5-gd00fb1e+05fce91b99,21.0.0-6-gc675373+3ad5d60fb1,21.0.0-64-g1122c245+4fb2b8f86e,21.0.0-7-g04766d7+cd19d05db2,21.0.0-7-gdf92d54+04719a4bac,21.0.0-8-g5674e7b+d1bd76f71f,master-gac4afde19b+a9c1acf22d,w.2021.13
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