LSST Applications g00d0e8bbd7+8c5ae1fdc5,g013ef56533+603670b062,g083dd6704c+2e189452a7,g199a45376c+0ba108daf9,g1c5cce2383+bc9f6103a4,g1fd858c14a+cd69ed4fc1,g210f2d0738+c4742f2e9e,g262e1987ae+612fa42d85,g29ae962dfc+83d129e820,g2cef7863aa+aef1011c0b,g35bb328faa+8c5ae1fdc5,g3fd5ace14f+5eaa884f2a,g47891489e3+e32160a944,g53246c7159+8c5ae1fdc5,g5b326b94bb+dcc56af22d,g64539dfbff+c4742f2e9e,g67b6fd64d1+e32160a944,g74acd417e5+c122e1277d,g786e29fd12+668abc6043,g87389fa792+8856018cbb,g88cb488625+47d24e4084,g89139ef638+e32160a944,g8d7436a09f+d14b4ff40a,g8ea07a8fe4+b212507b11,g90f42f885a+e1755607f3,g97be763408+34be90ab8c,g98df359435+ec1fa61bf1,ga2180abaac+8c5ae1fdc5,ga9e74d7ce9+43ac651df0,gbf99507273+8c5ae1fdc5,gc2a301910b+c4742f2e9e,gca7fc764a6+e32160a944,gd7ef33dd92+e32160a944,gdab6d2f7ff+c122e1277d,gdb1e2cdc75+1b18322db8,ge410e46f29+e32160a944,ge41e95a9f2+c4742f2e9e,geaed405ab2+0d91c11c6d,w.2025.44
LSST Data Management Base Package
Loading...
Searching...
No Matches
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
28namespace lsst {
29namespace afw {
30namespace 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
41public:
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;
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 }
86
87 std::pair<bool, bool> isIsotropic() const { return makePairFromTBool(_isotropic); }
88
89#undef DEFINE_ACCESSORS
90private:
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
100public:
105
106 explicit HeavyFootprintCtrl(ModifySource modifySource = NONE)
107 : _modifySource(modifySource), _imageVal(0.0), _maskVal(0), _varianceVal(0.0) {}
108
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
125private:
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)
void growIsotropic(bool val)
Set whether Footprint should be grown isotropically.
FootprintControl & operator=(FootprintControl const &)=default
FootprintControl & operator=(FootprintControl &&)=default
std::pair< bool, bool > isIsotropic() const
Return <isSet, Value> for isotropic grows.
FootprintControl(FootprintControl &&)=default
FootprintControl(bool left, bool right, bool up, bool down)
FootprintControl(bool circular, bool isotropic=false)
FootprintControl(FootprintControl const &)=default
HeavyFootprintCtrl(HeavyFootprintCtrl const &)=default
HeavyFootprintCtrl & operator=(HeavyFootprintCtrl &&)=default
void setVarianceVal(double varianceVal)
HeavyFootprintCtrl(HeavyFootprintCtrl &&)=default
HeavyFootprintCtrl(ModifySource modifySource=NONE)
HeavyFootprintCtrl & operator=(HeavyFootprintCtrl const &)=default
void setModifySource(ModifySource modifySource)
T make_pair(T... args)