SourceXtractorPlusPlus 1.0.3
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
FlexibleModelFittingTaskFactory.cpp
Go to the documentation of this file.
1
17/*
18 * FlexibleModelFittingTaskFactory.cpp
19 *
20 * Created on: Sep 17, 2018
21 * Author: mschefer
22 */
23
24#include <ElementsKernel/Logging.h>
29
31
34
35namespace SourceXtractor {
36
37static auto logger = Elements::Logging::getLogger("FlexibleModelFitting");
38
53
59
61 auto& model_fitting_config = manager.getConfiguration<ModelFittingConfig>();
62 auto& sampling_config = manager.getConfiguration<SamplingConfig>();
63
64 for (auto const& i : model_fitting_config.getParameters()) {
65 m_parameters.push_back(i.second);
66 }
67
68 m_frames = model_fitting_config.getFrames();
69
70 for (auto const& p : model_fitting_config.getPriors()) {
71 m_priors.push_back(p.second);
72 }
73
74 m_least_squares_engine = model_fitting_config.getLeastSquaresEngine();
75 m_max_iterations = model_fitting_config.getMaxIterations();
76 m_modified_chi_squared_scale = model_fitting_config.getModifiedChiSquaredScale();
77 m_use_iterative_fitting = model_fitting_config.getUseIterativeFitting();
78 m_meta_iterations = model_fitting_config.getMetaIterations();
79 m_deblend_factor = model_fitting_config.getDeblendFactor();
80 m_meta_iteration_stop = model_fitting_config.getMetaIterationStop();
81 m_window_type = model_fitting_config.getWindowType();
82 m_ellipse_scale = model_fitting_config.getEllipseScale();
83
84 std::string approach;
86 approach = "iterative";
87 } else {
88 approach = "classic";
89 }
90
91 logger.info() << "Using engine " << m_least_squares_engine << " with the "
92 << approach << " implementation and "
93 << m_max_iterations << " maximum number of iterations, window type: "
94 << static_cast<int>(m_window_type);
95
96 m_outputs = model_fitting_config.getOutputs();
97
98 m_scale_factor = sampling_config.getScaleFactor();
99 m_max_fit_size = sampling_config.getMaxFitSize();
100
101 const auto& image_infos = manager.getConfiguration<MeasurementImageConfig>().getImageInfos();
102 for (const auto& info : image_infos) {
103 m_should_renormalize.push_back(info.m_psf_renormalize);
104 }
105}
106
108 for (auto& p : m_outputs) {
109 std::string name = p.first;
110 std::vector<int> properties = p.second;
111 if (properties.size() == 1) {
112 registry.registerColumnConverter<FlexibleModelFitting, double>(name,
113 [properties](const FlexibleModelFitting& prop) {
114 return prop.getParameterValue(properties[0]);
115 }
116 );
117 registry.registerColumnConverter<FlexibleModelFitting, double>(name+"_err",
118 [properties](const FlexibleModelFitting& prop) {
119 return prop.getParameterSigma(properties[0]);
120 }
121 );
122 } else {
124 [properties](const FlexibleModelFitting& prop) {
125 std::vector<double> result;
126 for (int id : properties) {
127 result.push_back(prop.getParameterValue(id));
128 }
129 return result;
130 }
131 );
133 [properties](const FlexibleModelFitting& prop) {
134 std::vector<double> result;
135 for (int id : properties) {
136 result.push_back(prop.getParameterSigma(id));
137 }
138 return result;
139 }
140 );
141 }
142 }
143}
144
145}
static Logging getLogger(const std::string &name="")
void configure(Euclid::Configuration::ConfigManager &manager) override
Method which should initialize the object.
std::vector< std::shared_ptr< FlexibleModelFittingParameter > > m_parameters
std::vector< std::pair< std::string, std::vector< int > > > m_outputs
FlexibleModelFittingIterativeTask::WindowType m_window_type
std::vector< std::shared_ptr< FlexibleModelFittingPrior > > m_priors
std::shared_ptr< Task > createTask(const PropertyId &property_id) const override
Returns a Task producing a Property corresponding to the given PropertyId.
void reportConfigDependencies(Euclid::Configuration::ConfigManager &manager) const override
Registers all the Configuration dependencies.
std::vector< std::shared_ptr< FlexibleModelFittingFrame > > m_frames
void registerColumnConverter(std::string column_name, ColumnConverter< PropertyType, OutType > converter, std::string column_unit="", std::string column_description="")
Identifier used to set and retrieve properties.
Definition PropertyId.h:40
static PropertyId create(unsigned int index=0)
Definition PropertyId.h:45
T make_shared(T... args)
static Elements::Logging logger
T push_back(T... args)
T size(T... args)