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
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
ItemVariant const * other
Definition: Schema.cc:56
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