lsst.gauss2d.fit
g199a45376c+7362695278
Toggle main menu visibility
Loading...
Searching...
No Matches
data.h
1
#ifndef LSST_GAUSS2D_FIT_DATA_H
2
#define LSST_GAUSS2D_FIT_DATA_H
3
4
#include <memory>
5
#include <stdexcept>
6
#include <vector>
7
8
#include "channel.h"
9
#include "chromatic.h"
10
#include "observation.h"
11
#include "param_defs.h"
12
#include "parametric.h"
13
14
namespace
lsst::gauss2d::fit {
15
16
/*
17
A Data is a collection of Observations that a consistent Model can be
18
generated for.
19
*/
31
template
<
typename
T,
typename
I,
typename
M>
32
class
Data
:
public
Chromatic
,
public
Parametric
{
33
public
:
34
using
Observation =
lsst::gauss2d::fit::Observation<T, I, M>
;
35
using
ObservationCRef = std::reference_wrapper<const Observation>;
36
42
explicit
Data
(std::vector<std::shared_ptr<const Observation>> observations) {
43
_observations.reserve(observations.size());
44
_observation_ptrs.reserve(observations.size());
45
46
for
(
const
auto
& observation : observations) {
47
if
(observation ==
nullptr
)
throw
std::invalid_argument(
"Can't store null Observation"
);
48
const
auto
& channel = observation->get_channel();
49
if
(_channels.find(channel) == _channels.end()) {
50
_channels_ordered.push_back(channel);
51
_channels.insert(channel);
52
}
53
_observations.push_back(ObservationCRef(*observation));
54
_observation_ptrs.push_back(observation);
55
}
56
}
57
58
inline
auto
at(
size_t
i)
const
{
return
_observations.at(i); }
59
inline
auto
begin()
const
{
return
_observations.begin(); }
60
inline
auto
end()
const
{
return
_observations.end(); }
61
62
inline
auto
cbegin()
const
{
return
_observations.begin(); }
63
inline
auto
cend()
const
{
return
_observations.end(); }
64
65
std::vector<std::reference_wrapper<const Channel>>
get_channels
()
const override
{
66
return
_channels_ordered;
67
}
68
69
ParamRefs&
get_parameters
(ParamRefs& params,
ParamFilter
* filter =
nullptr
)
const override
{
70
for
(
const
Observation& exp : *
this
) exp.
get_parameters
(params, filter);
71
return
params;
72
}
73
ParamCRefs&
get_parameters_const
(ParamCRefs& params,
ParamFilter
* filter =
nullptr
)
const override
{
74
for
(
auto
exp_it = this->cbegin(); exp_it != this->cend(); ++exp_it) {
75
(*exp_it).get().get_parameters_const(params, filter);
76
}
77
return
params;
78
}
79
81
size_t
size
()
const
{
return
_observations.size(); }
82
83
std::string repr(
bool
name_keywords =
false
,
84
std::string_view namespace_separator = Object::CC_NAMESPACE_SEPARATOR)
const override
{
85
std::string str = std::string(
"Data("
) + (name_keywords ?
"observations=["
:
"["
);
86
for
(
auto
exp_it = this->cbegin(); exp_it != this->cend(); ++exp_it) {
87
str += (*exp_it).get().repr(name_keywords, namespace_separator) +
","
;
88
}
89
str +=
"]);"
;
90
return
str;
91
}
92
std::string str()
const override
{
93
std::string str =
"Data(observations=["
;
94
for
(
auto
exp_it = this->cbegin(); exp_it != this->cend(); ++exp_it) {
95
str += (*exp_it).get().str() +
","
;
96
}
97
str +=
"])"
;
98
return
str;
99
}
100
101
private
:
102
// This could be unordered, but std::hash<std::string> won't take const strings
103
std::set<std::reference_wrapper<const Channel>> _channels = {};
104
std::vector<std::reference_wrapper<const Channel>> _channels_ordered = {};
105
std::vector<std::shared_ptr<const Observation>> _observation_ptrs = {};
106
std::vector<ObservationCRef> _observations = {};
107
};
108
109
}
// namespace lsst::gauss2d::fit
110
111
#endif
lsst::gauss2d::fit::Chromatic
Definition
chromatic.h:8
lsst::gauss2d::fit::Data::Data
Data(std::vector< std::shared_ptr< const Observation > > observations)
Definition
data.h:42
lsst::gauss2d::fit::Data::get_parameters
ParamRefs & get_parameters(ParamRefs ¶ms, ParamFilter *filter=nullptr) const override
Definition
data.h:69
lsst::gauss2d::fit::Data::get_parameters_const
ParamCRefs & get_parameters_const(ParamCRefs ¶ms, ParamFilter *filter=nullptr) const override
Same as get_parameters(), but for const refs.
Definition
data.h:73
lsst::gauss2d::fit::Data::get_channels
std::vector< std::reference_wrapper< const Channel > > get_channels() const override
Get the set of channels this instance is applicable for.
Definition
data.h:65
lsst::gauss2d::fit::Data::size
size_t size() const
Get the number of member Observation.
Definition
data.h:81
lsst::gauss2d::fit::Observation
An observed single-channel image with an associated variance and mask.
Definition
observation.h:35
lsst::gauss2d::fit::Observation::get_parameters
ParamRefs & get_parameters(ParamRefs ¶ms, ParamFilter *filter=nullptr) const override
Definition
observation.h:85
lsst::gauss2d::fit::Parametric
Definition
parametric.h:13
lsst::gauss2d::fit::ParamFilter
Definition
param_filter.h:17
include
lsst
gauss2d
fit
data.h
Generated by
1.17.0