LSST Applications  21.0.0-147-g0e635eb1+1acddb5be5,22.0.0+052faf71bd,22.0.0+1ea9a8b2b2,22.0.0+6312710a6c,22.0.0+729191ecac,22.0.0+7589c3a021,22.0.0+9f079a9461,22.0.1-1-g7d6de66+b8044ec9de,22.0.1-1-g87000a6+536b1ee016,22.0.1-1-g8e32f31+6312710a6c,22.0.1-10-gd060f87+016f7cdc03,22.0.1-12-g9c3108e+df145f6f68,22.0.1-16-g314fa6d+c825727ab8,22.0.1-19-g93a5c75+d23f2fb6d8,22.0.1-19-gb93eaa13+aab3ef7709,22.0.1-2-g8ef0a89+b8044ec9de,22.0.1-2-g92698f7+9f079a9461,22.0.1-2-ga9b0f51+052faf71bd,22.0.1-2-gac51dbf+052faf71bd,22.0.1-2-gb66926d+6312710a6c,22.0.1-2-gcb770ba+09e3807989,22.0.1-20-g32debb5+b8044ec9de,22.0.1-23-gc2439a9a+fb0756638e,22.0.1-3-g496fd5d+09117f784f,22.0.1-3-g59f966b+1e6ba2c031,22.0.1-3-g849a1b8+f8b568069f,22.0.1-3-gaaec9c0+c5c846a8b1,22.0.1-32-g5ddfab5d3+60ce4897b0,22.0.1-4-g037fbe1+64e601228d,22.0.1-4-g8623105+b8044ec9de,22.0.1-5-g096abc9+d18c45d440,22.0.1-5-g15c806e+57f5c03693,22.0.1-7-gba73697+57f5c03693,master-g6e05de7fdc+c1283a92b8,master-g72cdda8301+729191ecac,w.2021.39
LSST Data Management Base Package
FilterLabel.h
Go to the documentation of this file.
1 /*
2  * This file is part of afw.
3  *
4  * Developed for the LSST Data Management System.
5  * This product includes software developed by the LSST Project
6  * (https://www.lsst.org).
7  * See the COPYRIGHT file at the top-level directory of this distribution
8  * for details of code ownership.
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program. If not, see <https://www.gnu.org/licenses/>.
22  */
23 
24 #ifndef LSST_AFW_IMAGE_FILTERLABEL_H
25 #define LSST_AFW_IMAGE_FILTERLABEL_H
26 
27 #include <memory>
28 #include <string>
29 
30 #include "lsst/afw/table/io/Persistable.h" // Needed for PersistableFacade
32 
33 namespace lsst {
34 namespace afw {
35 namespace image {
36 
37 #ifndef DOXYGEN
38 class FilterLabel;
39 namespace impl {
40 // Needed for some esoteric tests; do not use elsewhere!
41 FilterLabel makeTestFilterLabel(bool, std::string const &, bool, std::string const &);
42 } // namespace impl
43 #endif
44 
59 public:
66  static FilterLabel fromBand(std::string const &band);
71  FilterLabel(FilterLabel &&) noexcept;
72  FilterLabel &operator=(FilterLabel const &); // Only way to modify a FilterLabel
73  FilterLabel &operator=(FilterLabel &&) noexcept;
74  ~FilterLabel() noexcept;
75 
77  bool hasBandLabel() const noexcept;
78 
87  std::string getBandLabel() const;
88 
90  bool hasPhysicalLabel() const noexcept;
91 
100  std::string getPhysicalLabel() const;
101 
111  bool operator==(FilterLabel const &rhs) const noexcept;
112  bool operator!=(FilterLabel const &rhs) const noexcept { return !(*this == rhs); }
115  // Storable support
116 
118  std::size_t hash_value() const noexcept override;
120  std::string toString() const override;
122  std::shared_ptr<Storable> cloneStorable() const override;
123  bool equals(Storable const &other) const noexcept override { return singleClassEquals(*this, other); }
124 
125  // Persistable support
126 
128  bool isPersistable() const noexcept override { return true; }
129 
130 protected:
131  // Persistable support
132 
133  std::string getPersistenceName() const noexcept override;
134  std::string getPythonModule() const noexcept override;
135  void write(table::io::OutputArchiveHandle &handle) const override;
136 
137 private:
138  FilterLabel(bool hasBand, std::string const &band, bool hasPhysical, std::string const &physical);
139 #ifndef DOXYGEN
140  // Needed for some esoteric tests; do not use elsewhere!
141  friend FilterLabel impl::makeTestFilterLabel(bool, std::string const &, bool, std::string const &);
142 #endif
143 
144  // A separate boolean leads to easier implementations (at the cost of more
145  // memory) than a unique_ptr<string>.
146  // _band and _physical are part of the object state iff _hasBand and _hasPhysical, respectively
147  // Class invariant: at least one of _hasBand, _hasPhysical is true
148  bool _hasBand, _hasPhysical;
149  std::string _band, _physical;
150 
151  // Persistable support
152 
153  class Factory;
154  static Factory factory;
155 };
156 
163 
164 } // namespace image
165 } // namespace afw
166 } // namespace lsst
167 
168 namespace std {
169 template <>
170 struct hash<lsst::afw::image::FilterLabel> {
173  size_t operator()(argument_type const &obj) const noexcept { return obj.hash_value(); }
174 };
175 } // namespace std
176 
177 #endif
OptionalString physical
Definition: FilterLabel.cc:214
OptionalString band
Definition: FilterLabel.cc:213
A group of labels for a filter in an exposure or coadd.
Definition: FilterLabel.h:58
std::string getBandLabel() const
Return the band label.
Definition: FilterLabel.cc:87
bool isPersistable() const noexcept override
All filter labels are always persistable.
Definition: FilterLabel.h:128
std::string getPersistenceName() const noexcept override
Return the unique name used to persist this object and look up its factory.
Definition: FilterLabel.cc:232
bool equals(Storable const &other) const noexcept override
Definition: FilterLabel.h:123
bool hasBandLabel() const noexcept
Return whether the filter label names a band.
Definition: FilterLabel.cc:85
static FilterLabel fromBand(std::string const &band)
Construct a FilterLabel from specific inputs.
Definition: FilterLabel.cc:72
FilterLabel(FilterLabel &&) noexcept
std::string getPythonModule() const noexcept override
Return the fully-qualified Python module that should be imported to guarantee that its factory is reg...
Definition: FilterLabel.cc:233
bool hasPhysicalLabel() const noexcept
Return whether the filter label names a physical filter.
Definition: FilterLabel.cc:96
void write(table::io::OutputArchiveHandle &handle) const override
Write the object to one or more catalogs.
Definition: FilterLabel.cc:235
std::string toString() const override
Return a string representation of this object.
Definition: FilterLabel.cc:137
std::size_t hash_value() const noexcept override
Return a hash of this object.
Definition: FilterLabel.cc:126
std::shared_ptr< Storable > cloneStorable() const override
Create a new object that is a copy of this one.
Definition: FilterLabel.cc:156
std::string getPhysicalLabel() const
Return the physical filter label.
Definition: FilterLabel.cc:98
static FilterLabel fromBandPhysical(std::string const &band, std::string const &physical)
Construct a FilterLabel from specific inputs.
Definition: FilterLabel.cc:68
FilterLabel(FilterLabel const &)
static FilterLabel fromPhysical(std::string const &physical)
Construct a FilterLabel from specific inputs.
Definition: FilterLabel.cc:74
A CRTP facade class for subclasses of Persistable.
Definition: Persistable.h:176
io::OutputArchiveHandle OutputArchiveHandle
Definition: Persistable.h:108
Interface supporting iteration over heterogenous containers.
Definition: Storable.h:58
static bool singleClassEquals(T const &lhs, Storable const &rhs)
Test if a Storable is of a particular class and equal to another object.
Definition: Storable.h:151
FilterLabel makeTestFilterLabel(bool hasBand, std::string const &band, bool hasPhysical, std::string const &physical)
Definition: FilterLabel.cc:53
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
std::string getDatabaseFilterLabel(std::string const &filterLabel)
Remap special characters, etc.
Definition: FilterLabel.cc:45
class[[deprecated("Removed with no replacement (but see lsst::afw::image::TransmissionCurve). Will be " "removed after v22.")]] FilterProperty final
Describe the properties of a Filter (e.g.
Definition: Filter.h:53
A base class for image defects.
STL namespace.
size_t operator()(argument_type const &obj) const noexcept
Definition: FilterLabel.h:173