SourceXtractorPlusPlus  0.16
Please provide a description of the project.
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 
32 
33 namespace SourceXtractor {
34 
35 static auto logger = Elements::Logging::getLogger("FlexibleModelFitting");
36 
38  if (property_id == PropertyId::create<FlexibleModelFitting>()) {
40  return std::make_shared<FlexibleModelFittingIterativeTask>(m_least_squares_engine, m_max_iterations,
43  } else {
44  return std::make_shared<FlexibleModelFittingTask>(m_least_squares_engine, m_max_iterations,
46  }
47  } else {
48  return nullptr;
49  }
50 }
51 
54 }
55 
57  auto& model_fitting_config = manager.getConfiguration<ModelFittingConfig>();
58  auto& sampling_config = manager.getConfiguration<SamplingConfig>();
59 
60  for (auto const& i : model_fitting_config.getParameters()) {
61  m_parameters.push_back(i.second);
62  }
63 
64  m_frames = model_fitting_config.getFrames();
65 
66  for (auto const& p : model_fitting_config.getPriors()) {
67  m_priors.push_back(p.second);
68  }
69 
70  m_least_squares_engine = model_fitting_config.getLeastSquaresEngine();
71  m_max_iterations = model_fitting_config.getMaxIterations();
72  m_modified_chi_squared_scale = model_fitting_config.getModifiedChiSquaredScale();
73  m_use_iterative_fitting = model_fitting_config.getUseIterativeFitting();
74  m_meta_iterations = model_fitting_config.getMetaIterations();
75  m_deblend_factor = model_fitting_config.getDeblendFactor();
76  m_meta_iteration_stop = model_fitting_config.getMetaIterationStop();
77 
78  std::string approach;
80  approach = "iterative";
81  } else {
82  approach = "classic";
83  }
84 
85  logger.info() << "Using engine " << m_least_squares_engine << " with the "
86  << approach << " implementation and "
87  << m_max_iterations << " maximum number of iterations";
88 
89  m_outputs = model_fitting_config.getOutputs();
90 
91  m_scale_factor = sampling_config.getScaleFactor();
92  m_max_fit_size = sampling_config.getMaxFitSize();
93 }
94 
96  for (auto& p : m_outputs) {
97  std::string name = p.first;
98  std::vector<int> properties = p.second;
99  if (properties.size() == 1) {
100  registry.registerColumnConverter<FlexibleModelFitting, double>(name,
101  [properties](const FlexibleModelFitting& prop) {
102  return prop.getParameterValue(properties[0]);
103  }
104  );
105  registry.registerColumnConverter<FlexibleModelFitting, double>(name+"_err",
106  [properties](const FlexibleModelFitting& prop) {
107  return prop.getParameterSigma(properties[0]);
108  }
109  );
110  } else {
112  [properties](const FlexibleModelFitting& prop) {
113  std::vector<double> result;
114  for (int id : properties) {
115  result.push_back(prop.getParameterValue(id));
116  }
117  return result;
118  }
119  );
121  [properties](const FlexibleModelFitting& prop) {
122  std::vector<double> result;
123  for (int id : properties) {
124  result.push_back(prop.getParameterSigma(id));
125  }
126  return result;
127  }
128  );
129  }
130  }
131 }
132 
133 }
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
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 auto logger
Definition: WCS.cpp:44
T push_back(T... args)
T size(T... args)