Loading [MathJax]/extensions/tex2jax.js
LSST Applications g04a91732dc+a777afbe81,g07dc498a13+7e3c5f68a2,g12483e3c20+0145ec33cd,g1409bbee79+7e3c5f68a2,g1a7e361dbc+7e3c5f68a2,g1fd858c14a+9f35e23ec3,g31cf31e263+9c59251d59,g35bb328faa+fcb1d3bbc8,g3ad4f90e5c+0145ec33cd,g3bd4b5ce2c+9e43d17133,g4e0f332c67+5d362be553,g53246c7159+fcb1d3bbc8,g5477a8d5ce+d2270fb7b7,g60b5630c4e+0145ec33cd,g623d845a50+0145ec33cd,g6f0c2978f1+a406a63c6f,g75b6c65c88+d54b601591,g78460c75b0+2f9a1b4bcd,g786e29fd12+cf7ec2a62a,g7b71ed6315+fcb1d3bbc8,g8852436030+4639f750a5,g89139ef638+7e3c5f68a2,g9125e01d80+fcb1d3bbc8,g95236ca021+f7a31438ed,g989de1cb63+7e3c5f68a2,g9f33ca652e+2d6fa11d35,gaaedd4e678+7e3c5f68a2,gabe3b4be73+1e0a283bba,gb1101e3267+4a428ef779,gb4a253aaf5+0122250889,gb58c049af0+f03b321e39,gc99c83e5f0+76d20ab76d,gcf25f946ba+4639f750a5,gd0fa69b896+890c3b4faa,gd6cbbdb0b4+c8606af20c,gde0f65d7ad+c2b4c879fb,ge278dab8ac+932305ba37,gfba249425e+fcb1d3bbc8,w.2025.07
LSST Data Management Base Package
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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)