SourceXtractorPlusPlus  0.15
Please provide a description of the project.
FlexibleModelFittingParameterManager.h
Go to the documentation of this file.
1 
17 /*
18  * FlexibleModelFittingParameterManager.h
19  *
20  * Created on: Oct 9, 2018
21  * Author: mschefer
22  */
23 
24 #ifndef _SEIMPLEMENTATION_PLUGIN_FLEXIBLEMODELFITTING_FLEXIBLEMODELFITTINGPARAMETERMANAGER_H_
25 #define _SEIMPLEMENTATION_PLUGIN_FLEXIBLEMODELFITTING_FLEXIBLEMODELFITTINGPARAMETERMANAGER_H_
26 
27 #include <map>
28 #include <vector>
29 
33 
34 namespace SourceXtractor {
35 
36 // Needed to store the source in a reference_wrapper
38  return &a.get() < &b.get();
39 }
40 
41 class FlexibleModelFittingParameter;
42 
44 
45 public:
46 
49 
50 
53  auto key = std::make_tuple(std::cref(source), parameter);
54  m_accessed_params.insert(key);
55  followDependencies(source, parameter);
56  return m_params.at(key);
57  }
58 
61  m_params[std::make_tuple(std::cref(source), parameter)] = engine_parameter;
62 
63  if (std::dynamic_pointer_cast<const FlexibleModelFittingFreeParameter>(parameter)) {
64  m_parameter_indices[engine_parameter] = m_current_parameter_index++;
65  }
66  }
67 
68  int getParameterNb() const {
69  return m_params.size();
70  }
71 
73  m_accessed_params.clear();
74  }
75 
77  auto key = std::make_tuple(std::cref(source), parameter);
78  return m_accessed_params.count(key) > 0;
79  }
80 
82  return m_parameter_indices.at(engine_parameter);
83  }
84 
86  return getParameterIndex(getParameter(source, parameter));
87  }
88 
89 private:
92 
93  // remember the order of the parameters for model fitting (used to retrieve sigma)
96 
97  // Propagate access to dependees
99  auto dependent_parameter = std::dynamic_pointer_cast<const FlexibleModelFittingDependentParameter>(parameter).get();
100  if (dependent_parameter) {
101  for (auto &dependee : dependent_parameter->getDependees()) {
102  auto key_dependee = std::make_tuple(std::cref(source), dependee);
103  m_accessed_params.insert(key_dependee);
104  followDependencies(source, dependee);
105  }
106  }
107  }
108 };
109 
110 }
111 
112 
113 
114 #endif /* _SEIMPLEMENTATION_PLUGIN_FLEXIBLEMODELFITTING_FLEXIBLEMODELFITTINGPARAMETERMANAGER_H_ */
SourceXtractor::FlexibleModelFittingParameterManager::clearAccessCheck
void clearAccessCheck()
Definition: FlexibleModelFittingParameterManager.h:72
std::make_tuple
T make_tuple(T... args)
std::shared_ptr< ModelFitting::BasicParameter >
SourceXtractor::FlexibleModelFittingParameterManager::m_current_parameter_index
int m_current_parameter_index
Definition: FlexibleModelFittingParameterManager.h:94
SourceInterface.h
SourceXtractor::FlexibleModelFittingParameterManager::getParameterIndex
int getParameterIndex(std::shared_ptr< ModelFitting::BasicParameter > engine_parameter) const
Definition: FlexibleModelFittingParameterManager.h:81
std::reference_wrapper::get
T get(T... args)
SourceXtractor::FlexibleModelFittingParameterManager::followDependencies
void followDependencies(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition: FlexibleModelFittingParameterManager.h:98
SourceXtractor::FlexibleModelFittingParameterManager::m_params
std::map< std::tuple< std::reference_wrapper< const SourceInterface >, std::shared_ptr< const FlexibleModelFittingParameter > >, std::shared_ptr< ModelFitting::BasicParameter > > m_params
Definition: FlexibleModelFittingParameterManager.h:90
SourceXtractor::FlexibleModelFittingParameterManager
Definition: FlexibleModelFittingParameterManager.h:43
SourceXtractor::FlexibleModelFittingParameterManager::getParameterNb
int getParameterNb() const
Definition: FlexibleModelFittingParameterManager.h:68
SourceXtractor
Definition: Aperture.h:30
std::reference_wrapper
SourceXtractor::operator<
bool operator<(std::reference_wrapper< const SourceInterface > a, std::reference_wrapper< const SourceInterface > b)
Definition: FlexibleModelFittingParameterManager.h:37
SourceXtractor::FlexibleModelFittingParameterManager::getParameter
std::shared_ptr< ModelFitting::BasicParameter > getParameter(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition: FlexibleModelFittingParameterManager.h:51
std::map::at
T at(T... args)
SourceXtractor::FlexibleModelFittingParameterManager::~FlexibleModelFittingParameterManager
virtual ~FlexibleModelFittingParameterManager()
Definition: FlexibleModelFittingParameterManager.h:48
SourceXtractor::FlexibleModelFittingParameterManager::isParamAccessed
bool isParamAccessed(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition: FlexibleModelFittingParameterManager.h:76
SourceXtractor::FlexibleModelFittingParameterManager::m_parameter_indices
std::map< std::shared_ptr< ModelFitting::BasicParameter >, int > m_parameter_indices
Definition: FlexibleModelFittingParameterManager.h:95
SourceXtractor::FlexibleModelFittingParameterManager::m_accessed_params
std::set< std::tuple< std::reference_wrapper< const SourceInterface >, std::shared_ptr< const FlexibleModelFittingParameter > > > m_accessed_params
Definition: FlexibleModelFittingParameterManager.h:91
std::map
STL class.
FlexibleModelFittingParameter.h
SourceXtractor::FlexibleModelFittingParameterManager::getParameterIndex
int getParameterIndex(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition: FlexibleModelFittingParameterManager.h:85
SourceXtractor::FlexibleModelFittingParameterManager::FlexibleModelFittingParameterManager
FlexibleModelFittingParameterManager()
Definition: FlexibleModelFittingParameterManager.h:47
SourceXtractor::SourceInterface
The SourceInterface is an abstract "source" that has properties attached to it.
Definition: SourceInterface.h:46
SourceXtractor::FlexibleModelFittingParameterManager::addParameter
void addParameter(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter, std::shared_ptr< ModelFitting::BasicParameter > engine_parameter)
Definition: FlexibleModelFittingParameterManager.h:59
std::set
STL class.
std::cref
T cref(T... args)
EngineParameterManager.h