SourceXtractorPlusPlus  0.10
Please provide a description of the project.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
30 namespace SourceXtractor {
31 
32 static auto logger = Elements::Logging::getLogger("FlexibleModelFitting");
33 
35  if (property_id == PropertyId::create<FlexibleModelFitting>()) {
36  return std::make_shared<FlexibleModelFittingTask>(m_least_squares_engine, m_max_iterations,
38  } else {
39  return nullptr;
40  }
41 }
42 
45 }
46 
48  auto& model_fitting_config = manager.getConfiguration<ModelFittingConfig>();
49 
50  for (auto const& i : model_fitting_config.getParameters()) {
51  m_parameters.push_back(i.second);
52  }
53 
54  m_frames = model_fitting_config.getFrames();
55 
56  for (auto const& p : model_fitting_config.getPriors()) {
57  m_priors.push_back(p.second);
58  }
59 
60  m_least_squares_engine = model_fitting_config.getLeastSquaresEngine();
61  m_max_iterations = model_fitting_config.getMaxIterations();
62  m_modified_chi_squared_scale = model_fitting_config.getModifiedChiSquaredScale();
63 
64  logger.info() << "Using engine " << m_least_squares_engine << " with "
65  << m_max_iterations << " maximum number of iterations";
66 
67  m_outputs = model_fitting_config.getOutputs();
68 }
69 
71  for (auto& p : m_outputs) {
72  std::string name = p.first;
73  std::vector<int> properties = p.second;
74  if (properties.size() == 1) {
75  registry.registerColumnConverter<FlexibleModelFitting, double>(name,
76  [properties](const FlexibleModelFitting& prop) {
77  return prop.getParameterValue(properties[0]);
78  }
79  );
80  registry.registerColumnConverter<FlexibleModelFitting, double>(name+"_err",
81  [properties](const FlexibleModelFitting& prop) {
82  return prop.getParameterSigma(properties[0]);
83  }
84  );
85  } else {
87  [properties](const FlexibleModelFitting& prop) {
88  std::vector<double> result;
89  for (int id : properties) {
90  result.push_back(prop.getParameterValue(id));
91  }
92  return result;
93  }
94  );
96  [properties](const FlexibleModelFitting& prop) {
97  std::vector<double> result;
98  for (int id : properties) {
99  result.push_back(prop.getParameterSigma(id));
100  }
101  return result;
102  }
103  );
104  }
105  }
106 }
107 
108 }
std::shared_ptr< Task > createTask(const PropertyId &property_id) const override
Returns a Task producing a Property corresponding to the given PropertyId.
static Elements::Logging logger
void configure(Euclid::Configuration::ConfigManager &manager) override
Method which should initialize the object.
std::vector< std::shared_ptr< FlexibleModelFittingFrame > > m_frames
void info(const std::string &logMessage)
STL class.
T push_back(T...args)
std::vector< std::pair< std::string, std::vector< int > > > m_outputs
std::vector< std::shared_ptr< FlexibleModelFittingParameter > > m_parameters
std::vector< std::shared_ptr< FlexibleModelFittingPrior > > m_priors
T size(T...args)
Identifier used to set and retrieve properties.
Definition: PropertyId.h:40
static Logging getLogger(const std::string &name="")
void registerColumnConverter(std::string column_name, ColumnConverter< PropertyType, OutType > converter, std::string column_unit="", std::string column_description="")
void reportConfigDependencies(Euclid::Configuration::ConfigManager &manager) const override
Registers all the Configuration dependencies.