LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
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