SourceXtractorPlusPlus
0.10
Please provide a description of the project.
SEImplementation
SEImplementation
Plugin
FlexibleModelFitting
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
30
#include "
ModelFitting/Engine/EngineParameterManager.h
"
31
#include "
SEFramework/Source/SourceInterface.h
"
32
#include "
SEImplementation/Plugin/FlexibleModelFitting/FlexibleModelFittingParameter.h
"
33
34
namespace
SourceXtractor
{
35
36
// Needed to store the source in a reference_wrapper
37
inline
bool
operator<
(
std::reference_wrapper<const SourceInterface>
a,
std::reference_wrapper<const SourceInterface>
b) {
38
return
&a.
get
() < &b.
get
();
39
}
40
41
class
FlexibleModelFittingParameter;
42
43
class
FlexibleModelFittingParameterManager
{
44
45
public
:
46
47
FlexibleModelFittingParameterManager
() :
m_current_parameter_index
(0) {}
48
virtual
~FlexibleModelFittingParameterManager
() {}
49
50
51
std::shared_ptr<ModelFitting::BasicParameter>
getParameter
(
52
const
SourceInterface
& source,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter)
const
{
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
59
void
addParameter
(
const
SourceInterface
& source,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter,
60
std::shared_ptr<ModelFitting::BasicParameter>
engine_parameter) {
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
72
void
clearAccessCheck
() {
73
m_accessed_params
.clear();
74
}
75
76
bool
isParamAccessed
(
const
SourceInterface
& source,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter)
const
{
77
auto
key =
std::make_tuple
(
std::cref
(source), parameter);
78
return
m_accessed_params
.count(key) > 0;
79
}
80
81
int
getParameterIndex
(
std::shared_ptr<ModelFitting::BasicParameter>
engine_parameter)
const
{
82
return
m_parameter_indices
.
at
(engine_parameter);
83
}
84
85
int
getParameterIndex
(
const
SourceInterface
& source,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter)
const
{
86
return
getParameterIndex
(
getParameter
(source, parameter));
87
}
88
89
private
:
90
std::map<std::tuple<std::reference_wrapper<const SourceInterface>
,
std::shared_ptr<const FlexibleModelFittingParameter>
>,
std::shared_ptr<ModelFitting::BasicParameter>
>
m_params
;
91
mutable
std::set<std::tuple<std::reference_wrapper<const SourceInterface>
,
std::shared_ptr<const FlexibleModelFittingParameter>
>>
m_accessed_params
;
92
93
// remember the order of the parameters for model fitting (used to retrieve sigma)
94
int
m_current_parameter_index
;
95
std::map<std::shared_ptr<ModelFitting::BasicParameter>
,
int
>
m_parameter_indices
;
96
97
// Propagate access to dependees
98
void
followDependencies
(
const
SourceInterface
& source,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter)
const
{
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
Generated by
1.8.17