LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
LSST Data Management Base Package
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
lsst::gauss2d::fit::Channel Class Reference

An observational channel, usually representing some range of wavelengths of light. More...

#include <channel.h>

Inheritance diagram for lsst::gauss2d::fit::Channel:
lsst::gauss2d::Object lsst::gauss2d::fit::Channel::Shared_enabler

Classes

struct  Shared_enabler
 

Public Types

typedef std::map< std::string, std::shared_ptr< const Channel > > Registry
 

Public Member Functions

 Channel (const Channel &)=delete
 
Channeloperator= (const Channel &)=delete
 
std::string repr (bool name_keywords=false, std::string_view namespace_separator=Object::CC_NAMESPACE_SEPARATOR) const override
 Return a full, callable string representation of this.
 
std::string str () const override
 Return a brief, human-readable string representation of this.
 
const bool operator< (const Channel &c) const
 
const bool operator== (const Channel &c) const
 
const bool operator!= (const Channel &c) const
 

Static Public Member Functions

static void erase (std::string name)
 Delete a channel with a given name.
 
static const std::shared_ptr< const Channelfind_channel (std::string name)
 Find a channel with the given name.
 
static const std::shared_ptr< const Channelget_channel (std::string name)
 Get a channel with the given name, creating it if it doesn't exist.
 
static std::vector< std::shared_ptr< const Channel > > get_channels ()
 
static const std::shared_ptr< const ChannelNONE_PTR ()
 
static const ChannelNONE ()
 
static std::shared_ptr< Channelmake (std::string name)
 Construct a new Channel.
 
static const std::shared_ptr< const Channelmake_const (std::string name)
 Same as make(), but creating a new Channel.
 
static std::string_view null_str (const std::string_view &namespace_separator)
 

Public Attributes

const std::string name
 

Static Public Attributes

static const std::string NAME_NONE = "None"
 
static constexpr std::string_view CC_NAMESPACE_SEPARATOR = "::"
 The C++ namespace separator.
 
static constexpr std::string_view NULL_STR_GENERAL = "None"
 
static constexpr std::string_view PY_NAMESPACE_SEPARATOR = "."
 

Detailed Description

An observational channel, usually representing some range of wavelengths of light.

A Channel is a distinguishing property of an Observation, allowing IntegralModels to define integrals in distinct regions of some parameter space. Channels can represent a physical object such as a filter or more abstract definitions like wavelength/frequency ranges, generic labels like ABC, something inbetween like RGB, or anything else users prefer.

Note
Channels are compared and sorted alphabetically.

Definition at line 29 of file channel.h.

Member Typedef Documentation

◆ Registry

Definition at line 31 of file channel.h.

Constructor & Destructor Documentation

◆ Channel()

lsst::gauss2d::fit::Channel::Channel ( const Channel & )
delete

Member Function Documentation

◆ erase()

void lsst::gauss2d::fit::Channel::erase ( std::string name)
static

Delete a channel with a given name.

Parameters
nameThe name of the channel to delete
Exceptions
std::invalid_argumentIf the channel is the default (NAME_NONE) or non-existent
std::runtime_errorIf the channel is referenced by any other objects

Definition at line 51 of file channel.cc.

51 {
52 if (name == NAME_NONE) throw std::invalid_argument("Can't erase the " + NAME_NONE + " Channel");
54 if (channel == nullptr) throw std::invalid_argument("Can't erase non-existent Channel name=" + name);
55 size_t use_count = channel.use_count();
56 if (use_count < 2) {
57 throw std::logic_error("Failed erasing " + channel->str()
58 + " with unexpected use_count=" + std::to_string(use_count));
59 } else if (use_count == 2) {
60 _registry.erase(name);
61 } else {
62 throw std::runtime_error("Can't erase " + channel->str()
63 + " with use_count=" + std::to_string(use_count));
64 }
65}
static const std::string NAME_NONE
Definition channel.h:64
static const std::shared_ptr< const Channel > get_channel(std::string name)
Get a channel with the given name, creating it if it doesn't exist.
Definition channel.cc:74
T erase(T... args)
T to_string(T... args)

◆ find_channel()

const std::shared_ptr< const Channel > lsst::gauss2d::fit::Channel::find_channel ( std::string name)
static

Find a channel with the given name.

Parameters
nameThe name of the channel to find
Returns
The Channel is if it exists, or nullptr otherwise

Definition at line 67 of file channel.cc.

67 {
68 if (name == NAME_NONE) return NONE_PTR();
69 auto channel = _registry.find(name);
70 auto found = channel == _registry.end() ? nullptr : channel->second;
71 return found;
72}
static const std::shared_ptr< const Channel > NONE_PTR()
Definition channel.cc:106
T end(T... args)
T find(T... args)

◆ get_channel()

const std::shared_ptr< const Channel > lsst::gauss2d::fit::Channel::get_channel ( std::string name)
static

Get a channel with the given name, creating it if it doesn't exist.

Parameters
nameThe name of the channel to get
Returns
The Channel with the given name (created if non-existent)

Definition at line 74 of file channel.cc.

74 {
75 auto channel = Channel::find_channel(name);
76 if (channel == nullptr) channel = Channel::make(name);
77 return channel;
78}
static const std::shared_ptr< const Channel > find_channel(std::string name)
Find a channel with the given name.
Definition channel.cc:67
static std::shared_ptr< Channel > make(std::string name)
Construct a new Channel.
Definition channel.cc:89

◆ get_channels()

std::vector< std::shared_ptr< const Channel > > lsst::gauss2d::fit::Channel::get_channels ( )
static

Definition at line 80 of file channel.cc.

80 {
82 for (const auto &[key, value] : _registry) {
83 vec.emplace_back(value);
84 }
86 return vec;
87}
T emplace_back(T... args)

◆ make()

std::shared_ptr< Channel > lsst::gauss2d::fit::Channel::make ( std::string name)
static

Construct a new Channel.

Parameters
nameThe name of the Channel to create
Returns
The new Channel

Definition at line 89 of file channel.cc.

89 {
90 std::shared_ptr<Channel> c = std::make_shared<Shared_enabler>(name);
91 if (name != NAME_NONE) {
92 _registry.insert({name, c});
93 }
94 return c;
95}
const std::string name
Definition channel.h:66
T insert(T... args)

◆ make_const()

const std::shared_ptr< const Channel > lsst::gauss2d::fit::Channel::make_const ( std::string name)
static

Same as make(), but creating a new Channel.

Definition at line 97 of file channel.cc.

97{ return make(name); }

◆ NONE()

const Channel & lsst::gauss2d::fit::Channel::NONE ( )
static

Definition at line 111 of file channel.cc.

111{ return *NONE_PTR(); }

◆ NONE_PTR()

const std::shared_ptr< const Channel > lsst::gauss2d::fit::Channel::NONE_PTR ( )
static

Definition at line 106 of file channel.cc.

106 {
108 return _NONE;
109}

◆ null_str()

static std::string_view lsst::gauss2d::Object::null_str ( const std::string_view & namespace_separator)
inlinestaticinherited

Definition at line 49 of file object.h.

49 {
50 return namespace_separator == CC_NAMESPACE_SEPARATOR ? "nullptr" : NULL_STR_GENERAL;
51 }
static constexpr std::string_view CC_NAMESPACE_SEPARATOR
The C++ namespace separator.
Definition object.h:45
static constexpr std::string_view NULL_STR_GENERAL
Definition object.h:46

◆ operator!=()

const bool lsst::gauss2d::fit::Channel::operator!= ( const Channel & c) const

Definition at line 49 of file channel.cc.

49{ return !(*this == c); }

◆ operator<()

const bool lsst::gauss2d::fit::Channel::operator< ( const Channel & c) const

Definition at line 45 of file channel.cc.

45{ return name < c.name; }

◆ operator=()

Channel & lsst::gauss2d::fit::Channel::operator= ( const Channel & )
delete

◆ operator==()

const bool lsst::gauss2d::fit::Channel::operator== ( const Channel & c) const

Definition at line 47 of file channel.cc.

47{ return name == c.name; }

◆ repr()

std::string lsst::gauss2d::fit::Channel::repr ( bool name_keywords = false,
std::string_view namespace_separator = Object::CC_NAMESPACE_SEPARATOR ) const
overridevirtual

Return a full, callable string representation of this.

Parameters
name_keywordsWhether to prefix arguments with "{name}=", where name is the arg name in the header (as with keyword arguments in Python).
namespace_separatorThe string to use to delimit namespaces, i.e. :: in C++ and . in Python.
Returns
A callable string representation of this, which should return an an identical object to this.
Note
The representation with name_keywords=false must be callable in C++. The representation with name_keywords=true should be callable in Python, if there are any bindings.

Implements lsst::gauss2d::Object.

Definition at line 99 of file channel.cc.

99 {
100 return type_name_str<Channel>(false, namespace_separator) + "(" + (name_keywords ? "name=" : "") + name
101 + ")";
102}

◆ str()

std::string lsst::gauss2d::fit::Channel::str ( ) const
overridevirtual

Return a brief, human-readable string representation of this.

Implements lsst::gauss2d::Object.

Definition at line 104 of file channel.cc.

104{ return type_name_str<Channel>(true) + "(name=" + name + ")"; }

Member Data Documentation

◆ CC_NAMESPACE_SEPARATOR

constexpr std::string_view lsst::gauss2d::Object::CC_NAMESPACE_SEPARATOR = "::"
staticconstexprinherited

The C++ namespace separator.

Definition at line 45 of file object.h.

◆ name

const std::string lsst::gauss2d::fit::Channel::name

Definition at line 66 of file channel.h.

◆ NAME_NONE

const std::string lsst::gauss2d::fit::Channel::NAME_NONE = "None"
inlinestatic

Definition at line 64 of file channel.h.

◆ NULL_STR_GENERAL

constexpr std::string_view lsst::gauss2d::Object::NULL_STR_GENERAL = "None"
staticconstexprinherited

Definition at line 46 of file object.h.

◆ PY_NAMESPACE_SEPARATOR

constexpr std::string_view lsst::gauss2d::Object::PY_NAMESPACE_SEPARATOR = "."
staticconstexprinherited

Definition at line 47 of file object.h.


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