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
Classes | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Static Protected Member Functions | Related Functions | List of all members
lsst::afw::image::FilterLabel Class Referencefinal

A group of labels for a filter in an exposure or coadd. More...

#include <FilterLabel.h>

Inheritance diagram for lsst::afw::image::FilterLabel:
lsst::afw::table::io::PersistableFacade< FilterLabel > lsst::afw::typehandling::Storable lsst::afw::table::io::Persistable

Classes

class  Factory
 

Public Member Functions

 FilterLabel (FilterLabel const &)
 
 FilterLabel (FilterLabel &&) noexcept
 
FilterLabeloperator= (FilterLabel const &)
 
FilterLabeloperator= (FilterLabel &&) noexcept
 
 ~FilterLabel () noexcept
 
bool hasBandLabel () const noexcept
 Return whether the filter label names a band. More...
 
std::string getBandLabel () const
 Return the band label. More...
 
bool hasPhysicalLabel () const noexcept
 Return whether the filter label names a physical filter. More...
 
std::string getPhysicalLabel () const
 Return the physical filter label. More...
 
std::size_t hash_value () const noexcept override
 Return a hash of this object. More...
 
std::string toString () const override
 Return a string representation of this object. More...
 
std::shared_ptr< StorablecloneStorable () const override
 Create a new object that is a copy of this one. More...
 
bool equals (Storable const &other) const noexcept override
 
bool isPersistable () const noexcept override
 All filter labels are always persistable. More...
 
virtual bool equals (Storable const &other) const noexcept
 Compare this object to another Storable. More...
 
void writeFits (std::string const &fileName, std::string const &mode="w") const
 Write the object to a regular FITS file. More...
 
void writeFits (fits::MemFileManager &manager, std::string const &mode="w") const
 Write the object to a FITS image in memory. More...
 
void writeFits (fits::Fits &fitsfile) const
 Write the object to an already-open FITS object. More...
 
bool operator== (FilterLabel const &rhs) const noexcept
 Filter labels compare equal if their components are equal. More...
 
bool operator!= (FilterLabel const &rhs) const noexcept
 Filter labels compare equal if their components are equal. More...
 

Static Public Member Functions

static std::shared_ptr< FilterLabelreadFits (fits::Fits &fitsfile)
 Read an object from an already open FITS object. More...
 
static std::shared_ptr< FilterLabelreadFits (std::string const &fileName, int hdu=fits::DEFAULT_HDU)
 Read an object from a regular FITS file. More...
 
static std::shared_ptr< FilterLabelreadFits (fits::MemFileManager &manager, int hdu=fits::DEFAULT_HDU)
 Read an object from a FITS file in memory. More...
 
static std::shared_ptr< FilterLabeldynamicCast (std::shared_ptr< Persistable > const &ptr)
 Dynamically cast a shared_ptr. More...
 
static FilterLabel fromBandPhysical (std::string const &band, std::string const &physical)
 Construct a FilterLabel from specific inputs. More...
 
static FilterLabel fromBand (std::string const &band)
 Construct a FilterLabel from specific inputs. More...
 
static FilterLabel fromPhysical (std::string const &physical)
 Construct a FilterLabel from specific inputs. More...
 

Protected Types

using OutputArchiveHandle = io::OutputArchiveHandle
 

Protected Member Functions

std::string getPersistenceName () const noexcept override
 Return the unique name used to persist this object and look up its factory. More...
 
std::string getPythonModule () const noexcept override
 Return the fully-qualified Python module that should be imported to guarantee that its factory is registered. More...
 
void write (table::io::OutputArchiveHandle &handle) const override
 Write the object to one or more catalogs. More...
 

Static Protected Member Functions

template<class T >
static bool singleClassEquals (T const &lhs, Storable const &rhs)
 Test if a Storable is of a particular class and equal to another object. More...
 

Related Functions

(Note that these are not member functions.)

std::ostreamoperator<< (std::ostream &os, Storable const &storable)
 Output operator for Storable. More...
 

Detailed Description

A group of labels for a filter in an exposure or coadd.

This class provides only identifiers for filters. Other filter information can be retrieved from an Exposure object or a Butler repository.

FilterLabel does not expose a public constructor in C++, except for copy and move constructors. You can create a FilterLabel by calling one of the from* factory methods, or (in Python) through a keyword-only constructor.

Not all of a FilterLabel object's labels need be defined, but at least one is guaranteed to be present.

Definition at line 58 of file FilterLabel.h.

Member Typedef Documentation

◆ OutputArchiveHandle

using lsst::afw::table::io::Persistable::OutputArchiveHandle = io::OutputArchiveHandle
protectedinherited

Definition at line 108 of file Persistable.h.

Constructor & Destructor Documentation

◆ FilterLabel() [1/2]

lsst::afw::image::FilterLabel::FilterLabel ( FilterLabel const &  )
default

◆ FilterLabel() [2/2]

lsst::afw::image::FilterLabel::FilterLabel ( FilterLabel &&  )
defaultnoexcept

◆ ~FilterLabel()

lsst::afw::image::FilterLabel::~FilterLabel ( )
defaultnoexcept

Member Function Documentation

◆ cloneStorable()

std::shared_ptr< typehandling::Storable > lsst::afw::image::FilterLabel::cloneStorable ( ) const
overridevirtual

Create a new object that is a copy of this one.

Reimplemented from lsst::afw::typehandling::Storable.

Definition at line 156 of file FilterLabel.cc.

156  {
157  return std::make_shared<FilterLabel>(*this);
158 }

◆ dynamicCast()

Dynamically cast a shared_ptr.

Dynamically cast a shared pointer and raise on failure.

You must provide an explicit template instantiation in the .cc file for each class that inherits from PersistableFacade. Designed to work around RTTI issues on macOS with hidden symbols;

Exceptions
lsst::pex::exceptions::LogicErrorif the cast fails

param[in] ptr The pointer to be cast.

Returns
The cast pointer.
Exceptions
lsst::pex::exceptions::TypeErrorIf the dynamic cast fails.

Definition at line 218 of file Persistable.cc.

18  {
19  auto result = std::dynamic_pointer_cast<T>(ptr);
20  if (!result) {
21  throw LSST_EXCEPT(pex::exceptions::TypeError, "Dynamic pointer cast failed");
22  }
23  return result;
24 }
py::object result
Definition: _schema.cc:429
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
uint64_t * ptr
Definition: RangeSet.cc:88

◆ equals() [1/2]

bool lsst::afw::typehandling::Storable::equals ( Storable const &  other) const
virtualnoexceptinherited

Compare this object to another Storable.

Subclasses that implement equality comparison must override this method to give results consistent with operator== for all inputs that are accepted by both.

Returns
This implementation returns whether the two objects are the same.
Warning
This method compares an object to any type of Storable, although cross-class comparisons should usually return false. If cross-class comparisons are valid, implementers should take care that they are symmetric and will give the same result no matter what the compile-time types of the left- and right-hand sides are.
See also
singleClassEquals
Note
When called on Python classes, this method delegates to __eq__ if it exists.

Reimplemented in lsst::afw::image::VisitInfo, lsst::afw::image::PhotoCalib, lsst::afw::geom::SkyWcs, lsst::afw::geom::polygon::Polygon, and lsst::afw::typehandling::StorableHelper< Base >.

Definition at line 48 of file Storable.cc.

48 { return this == &other; }

◆ equals() [2/2]

bool lsst::afw::image::FilterLabel::equals ( Storable const &  other) const
inlineoverridenoexcept

Definition at line 123 of file FilterLabel.h.

123 { return singleClassEquals(*this, other); }
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

◆ fromBand()

FilterLabel lsst::afw::image::FilterLabel::fromBand ( std::string const &  band)
static

Construct a FilterLabel from specific inputs.

Definition at line 72 of file FilterLabel.cc.

72 { return FilterLabel(true, band, false, ""s); }
OptionalString band
Definition: FilterLabel.cc:213
FilterLabel(FilterLabel const &)

◆ fromBandPhysical()

FilterLabel lsst::afw::image::FilterLabel::fromBandPhysical ( std::string const &  band,
std::string const &  physical 
)
static

Construct a FilterLabel from specific inputs.

Definition at line 68 of file FilterLabel.cc.

68  {
69  return FilterLabel(true, band, true, physical);
70 }
OptionalString physical
Definition: FilterLabel.cc:214

◆ fromPhysical()

FilterLabel lsst::afw::image::FilterLabel::fromPhysical ( std::string const &  physical)
static

Construct a FilterLabel from specific inputs.

Definition at line 74 of file FilterLabel.cc.

74  {
75  return FilterLabel(false, ""s, true, physical);
76 }

◆ getBandLabel()

std::string lsst::afw::image::FilterLabel::getBandLabel ( ) const

Return the band label.

In Python, this is replaced by the band read-only property.

Returns
The band label.
Exceptions
lsst::pex::exceptions::LogicErrorThrown if hasBandLabel() is false.

Definition at line 87 of file FilterLabel.cc.

87  {
88  // In no implementation I can think of will hasBandLabel() be an expensive test.
89  if (hasBandLabel()) {
90  return _band;
91  } else {
92  throw LSST_EXCEPT(pex::exceptions::LogicError, toString() + " has no band."s);
93  }
94 }
bool hasBandLabel() const noexcept
Return whether the filter label names a band.
Definition: FilterLabel.cc:85
std::string toString() const override
Return a string representation of this object.
Definition: FilterLabel.cc:137

◆ getPersistenceName()

std::string lsst::afw::image::FilterLabel::getPersistenceName ( ) const
overrideprotectedvirtualnoexcept

Return the unique name used to persist this object and look up its factory.

Must be less than ArchiveIndexSchema::MAX_NAME_LENGTH characters.

Reimplemented from lsst::afw::table::io::Persistable.

Definition at line 232 of file FilterLabel.cc.

232 { return _getPersistenceName(); }

◆ getPhysicalLabel()

std::string lsst::afw::image::FilterLabel::getPhysicalLabel ( ) const

Return the physical filter label.

In Python, this is replaced by the physicalLabel read-only property.

Returns
The physical filter label.
Exceptions
lsst::pex::exceptions::LogicErrorThrown if hasPhysicalLabel() is false.

Definition at line 98 of file FilterLabel.cc.

98  {
99  // In no implementation I can think of will hasBandLabel() be an expensive test.
100  if (hasPhysicalLabel()) {
101  return _physical;
102  } else {
103  throw LSST_EXCEPT(pex::exceptions::LogicError, toString() + " has no physical filter."s);
104  }
105 }
bool hasPhysicalLabel() const noexcept
Return whether the filter label names a physical filter.
Definition: FilterLabel.cc:96

◆ getPythonModule()

std::string lsst::afw::image::FilterLabel::getPythonModule ( ) const
overrideprotectedvirtualnoexcept

Return the fully-qualified Python module that should be imported to guarantee that its factory is registered.

Must be less than ArchiveIndexSchema::MAX_MODULE_LENGTH characters.

Will be ignored if empty.

Reimplemented from lsst::afw::table::io::Persistable.

Definition at line 233 of file FilterLabel.cc.

233 { return "lsst.afw.image"s; }

◆ hasBandLabel()

bool lsst::afw::image::FilterLabel::hasBandLabel ( ) const
noexcept

Return whether the filter label names a band.

Definition at line 85 of file FilterLabel.cc.

85 { return _hasBand; }

◆ hash_value()

std::size_t lsst::afw::image::FilterLabel::hash_value ( ) const
overridevirtualnoexcept

Return a hash of this object.

Reimplemented from lsst::afw::typehandling::Storable.

Definition at line 126 of file FilterLabel.cc.

126  {
127  // Do not count _name unless _hasName
128  // (_has=false, _name="A") and (_has=false, _name="B") compare equal, so must have same hash
129  return utils::hashCombine(42, _hasBand, _hasBand ? _band : ""s, _hasPhysical,
130  _hasPhysical ? _physical : ""s);
131 }
std::size_t hashCombine(std::size_t seed) noexcept
Combine hashes.
Definition: hashCombine.h:35

◆ hasPhysicalLabel()

bool lsst::afw::image::FilterLabel::hasPhysicalLabel ( ) const
noexcept

Return whether the filter label names a physical filter.

Definition at line 96 of file FilterLabel.cc.

96 { return _hasPhysical; }

◆ isPersistable()

bool lsst::afw::image::FilterLabel::isPersistable ( ) const
inlineoverridevirtualnoexcept

All filter labels are always persistable.

Reimplemented from lsst::afw::table::io::Persistable.

Definition at line 128 of file FilterLabel.h.

128 { return true; }

◆ operator!=()

bool lsst::afw::image::FilterLabel::operator!= ( FilterLabel const &  rhs) const
inlinenoexcept

Filter labels compare equal if their components are equal.

Note
This operation does not test whether two filters are the same. Two FilterLabels corresponding to identically-named filters on different instruments will compare equal.

Definition at line 112 of file FilterLabel.h.

112 { return !(*this == rhs); }

◆ operator=() [1/2]

FilterLabel & lsst::afw::image::FilterLabel::operator= ( FilterLabel &&  )
defaultnoexcept

◆ operator=() [2/2]

FilterLabel & lsst::afw::image::FilterLabel::operator= ( FilterLabel const &  )
default

◆ operator==()

bool lsst::afw::image::FilterLabel::operator== ( FilterLabel const &  rhs) const
noexcept

Filter labels compare equal if their components are equal.

Note
This operation does not test whether two filters are the same. Two FilterLabels corresponding to identically-named filters on different instruments will compare equal.

Definition at line 107 of file FilterLabel.cc.

107  {
108  // Do not compare name unless _hasName for both
109  if (_hasBand != rhs._hasBand) {
110  return false;
111  }
112  if (_hasBand && _band != rhs._band) {
113  return false;
114  }
115  if (_hasPhysical != rhs._hasPhysical) {
116  return false;
117  }
118  if (_hasPhysical && _physical != rhs._physical) {
119  return false;
120  }
121  return true;
122 }

◆ readFits() [1/3]

static std::shared_ptr<FilterLabel > lsst::afw::table::io::PersistableFacade< FilterLabel >::readFits ( fits::Fits fitsfile)
inlinestaticinherited

Read an object from an already open FITS object.

Parameters
[in]fitsfileFITS object to read from, already positioned at the desired HDU.

Definition at line 183 of file Persistable.h.

183  {
184  return dynamicCast(Persistable::_readFits(fitsfile));
185  }
static std::shared_ptr< FilterLabel > dynamicCast(std::shared_ptr< Persistable > const &ptr)
Dynamically cast a shared_ptr.
Definition: Persistable.cc:18

◆ readFits() [2/3]

static std::shared_ptr<FilterLabel > lsst::afw::table::io::PersistableFacade< FilterLabel >::readFits ( fits::MemFileManager manager,
int  hdu = fits::DEFAULT_HDU 
)
inlinestaticinherited

Read an object from a FITS file in memory.

Parameters
[in]managerManager for the memory to read from.
[in]hduHDU to read, where 0 is the primary. The special value of afw::fits::DEFAULT_HDU skips the primary HDU if it is empty.

Definition at line 205 of file Persistable.h.

205  {
206  return dynamicCast(Persistable::_readFits(manager, hdu));
207  }

◆ readFits() [3/3]

static std::shared_ptr<FilterLabel > lsst::afw::table::io::PersistableFacade< FilterLabel >::readFits ( std::string const &  fileName,
int  hdu = fits::DEFAULT_HDU 
)
inlinestaticinherited

Read an object from a regular FITS file.

Parameters
[in]fileNameName of the file to read.
[in]hduHDU to read, where 0 is the primary. The special value of afw::fits::DEFAULT_HDU skips the primary HDU if it is empty.

Definition at line 194 of file Persistable.h.

194  {
195  return dynamicCast(Persistable::_readFits(fileName, hdu));
196  }

◆ singleClassEquals()

template<class T >
static bool lsst::afw::typehandling::Storable::singleClassEquals ( T const &  lhs,
Storable const &  rhs 
)
inlinestaticprotectedinherited

Test if a Storable is of a particular class and equal to another object.

This method template simplifies implementations of equals that delegate to operator== without supporting cross-class comparisons.

Template Parameters
TThe class expected of the two objects to be compared.
Parameters
lhs,rhsThe objects to compare. Note that rhs need not be a T, while lhs must be.
Returns
true if rhs is a T and lhs == rhs; false otherwise.
Exception Safety
Provides the same level of exception safety as operator==. Most implementations of operator== do not throw.
Note
This method template calls operator== with both arguments of compile-time type T const&. Its use is not recommended if there would be any ambiguity as to which operator== gets picked by overload resolution.

This method template is typically called from equals as:

bool MyType::equals(Storable const& other) const noexcept {
    return singleClassEquals(*this, other);
}

Definition at line 151 of file Storable.h.

151  {
152  auto typedRhs = dynamic_cast<T const*>(&rhs);
153  if (typedRhs != nullptr) {
154  return lhs == *typedRhs;
155  } else {
156  return false;
157  }
158  }

◆ toString()

std::string lsst::afw::image::FilterLabel::toString ( ) const
overridevirtual

Return a string representation of this object.

Reimplemented from lsst::afw::typehandling::Storable.

Definition at line 137 of file FilterLabel.cc.

137  {
138  std::string buffer("FilterLabel(");
139  bool comma = false;
140 
141  if (hasBandLabel()) {
142  if (comma) buffer += ", "s;
143  buffer += "band"s + "=\""s + getBandLabel() + "\""s;
144  comma = true;
145  }
146  if (hasPhysicalLabel()) {
147  if (comma) buffer += ", "s;
148  buffer += "physical"s + "=\""s + getPhysicalLabel() + "\""s;
149  comma = true;
150  }
151  buffer += ")"s;
152 
153  return buffer;
154 }
std::string getBandLabel() const
Return the band label.
Definition: FilterLabel.cc:87
std::string getPhysicalLabel() const
Return the physical filter label.
Definition: FilterLabel.cc:98

◆ write()

void lsst::afw::image::FilterLabel::write ( table::io::OutputArchiveHandle handle) const
overrideprotectedvirtual

Write the object to one or more catalogs.

The handle object passed to this function provides an interface for adding new catalogs and adding nested objects to the same archive (while checking for duplicates). See OutputArchiveHandle for more information.

Reimplemented from lsst::afw::table::io::Persistable.

Definition at line 235 of file FilterLabel.cc.

235  {
236  PersistenceHelper const &keys = PersistenceHelper::get();
237  table::BaseCatalog catalog = handle.makeCatalog(keys.schema);
238  std::shared_ptr<table::BaseRecord> record = catalog.addNew();
239 
240  record->set(keys.band, std::make_pair(_hasBand, _band));
241  record->set(keys.physical, std::make_pair(_hasPhysical, _physical));
242  handle.saveCatalog(catalog);
243 }
T make_pair(T... args)
CatalogT< BaseRecord > BaseCatalog
Definition: fwd.h:72

◆ writeFits() [1/3]

void lsst::afw::table::io::Persistable::writeFits ( fits::Fits fitsfile) const
inherited

Write the object to an already-open FITS object.

Parameters
[in]fitsfileOpen FITS object to write to.

Definition at line 18 of file Persistable.cc.

18  {
19  OutputArchive archive;
20  archive.put(this);
21  archive.writeFits(fitsfile);
22 }

◆ writeFits() [2/3]

void lsst::afw::table::io::Persistable::writeFits ( fits::MemFileManager manager,
std::string const &  mode = "w" 
) const
inherited

Write the object to a FITS image in memory.

Parameters
[in]managerName of the file to write to.
[in]modeIf "w", any existing file with the given name will be overwritten. If "a", new HDUs will be appended to an existing file.

Definition at line 29 of file Persistable.cc.

29  {
30  fits::Fits fitsfile(manager, mode, fits::Fits::AUTO_CLOSE | fits::Fits::AUTO_CHECK);
31  writeFits(fitsfile);
32 }
void writeFits(std::string const &fileName, std::string const &mode="w") const
Write the object to a regular FITS file.
Definition: Persistable.cc:24

◆ writeFits() [3/3]

void lsst::afw::table::io::Persistable::writeFits ( std::string const &  fileName,
std::string const &  mode = "w" 
) const
inherited

Write the object to a regular FITS file.

Parameters
[in]fileNameName of the file to write to.
[in]modeIf "w", any existing file with the given name will be overwritten. If "a", new HDUs will be appended to an existing file.

Definition at line 24 of file Persistable.cc.

24  {
25  fits::Fits fitsfile(fileName, mode, fits::Fits::AUTO_CLOSE | fits::Fits::AUTO_CHECK);
26  writeFits(fitsfile);
27 }

Friends And Related Function Documentation

◆ operator<<()

std::ostream & operator<< ( std::ostream os,
Storable const &  storable 
)
related

Output operator for Storable.

Parameters
osthe desired output stream
storablethe object to print
Returns
a reference to os
Exceptions
UnsupportedOperationExceptionThrown if storable does not have an implementation of Storable::toString.

Definition at line 174 of file Storable.h.

174  {
175  return os << storable.toString();
176 }
std::ostream * os
Definition: Schema.cc:557

The documentation for this class was generated from the following files: