SourceXtractorPlusPlus
0.16
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
54
auto
key =
std::make_tuple
(
std::cref
(source), parameter);
55
m_accessed_params
.insert(key);
56
followDependencies
(source, parameter);
57
auto
p =
m_params
.at(key);
58
return
p;
59
}
60
61
void
addParameter
(
const
SourceInterface
& source,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter,
62
std::shared_ptr<ModelFitting::BasicParameter>
engine_parameter) {
63
m_params
[
std::make_tuple
(
std::cref
(source), parameter)] = engine_parameter;
64
65
if
(std::dynamic_pointer_cast<const FlexibleModelFittingFreeParameter>(parameter)) {
66
m_parameter_indices
[engine_parameter] =
m_current_parameter_index
++;
67
}
68
}
69
70
int
getParameterNb
()
const
{
71
return
m_params
.size();
72
}
73
74
void
clearAccessCheck
() {
75
m_accessed_params
.clear();
76
}
77
78
bool
isParamAccessed
(
const
SourceInterface
& source,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter)
const
{
79
auto
key =
std::make_tuple
(
std::cref
(source), parameter);
80
return
m_accessed_params
.count(key) > 0;
81
}
82
83
int
getParameterIndex
(
std::shared_ptr<ModelFitting::BasicParameter>
engine_parameter)
const
{
84
return
m_parameter_indices
.
at
(engine_parameter);
85
}
86
87
int
getParameterIndex
(
const
SourceInterface
& source,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter)
const
{
88
return
getParameterIndex
(
getParameter
(source, parameter));
89
}
90
91
private
:
92
std::map<std::tuple<std::reference_wrapper<const SourceInterface>
,
std::shared_ptr<const FlexibleModelFittingParameter>
>,
std::shared_ptr<ModelFitting::BasicParameter>
>
m_params
;
93
mutable
std::set<std::tuple<std::reference_wrapper<const SourceInterface>
,
std::shared_ptr<const FlexibleModelFittingParameter>
>>
m_accessed_params
;
94
95
// remember the order of the parameters for model fitting (used to retrieve sigma)
96
int
m_current_parameter_index
;
97
std::map<std::shared_ptr<ModelFitting::BasicParameter>
,
int
>
m_parameter_indices
;
98
99
// Propagate access to dependees
100
void
followDependencies
(
const
SourceInterface
& source,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter)
const
{
101
auto
dependent_parameter = std::dynamic_pointer_cast<const FlexibleModelFittingDependentParameter>(parameter).get();
102
if
(dependent_parameter) {
103
for
(
auto
&dependee : dependent_parameter->getDependees()) {
104
auto
key_dependee =
std::make_tuple
(
std::cref
(source), dependee);
105
m_accessed_params
.insert(key_dependee);
106
followDependencies
(source, dependee);
107
}
108
}
109
}
110
};
111
112
}
113
114
115
116
#endif
/* _SEIMPLEMENTATION_PLUGIN_FLEXIBLEMODELFITTING_FLEXIBLEMODELFITTINGPARAMETERMANAGER_H_ */
EngineParameterManager.h
FlexibleModelFittingParameter.h
SourceInterface.h
std::map::at
T at(T... args)
SourceXtractor::FlexibleModelFittingParameterManager
Definition:
FlexibleModelFittingParameterManager.h:43
SourceXtractor::FlexibleModelFittingParameterManager::getParameterIndex
int getParameterIndex(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition:
FlexibleModelFittingParameterManager.h:87
SourceXtractor::FlexibleModelFittingParameterManager::m_current_parameter_index
int m_current_parameter_index
Definition:
FlexibleModelFittingParameterManager.h:96
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:92
SourceXtractor::FlexibleModelFittingParameterManager::getParameterNb
int getParameterNb() const
Definition:
FlexibleModelFittingParameterManager.h:70
SourceXtractor::FlexibleModelFittingParameterManager::~FlexibleModelFittingParameterManager
virtual ~FlexibleModelFittingParameterManager()
Definition:
FlexibleModelFittingParameterManager.h:48
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:93
SourceXtractor::FlexibleModelFittingParameterManager::getParameter
std::shared_ptr< ModelFitting::BasicParameter > getParameter(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition:
FlexibleModelFittingParameterManager.h:51
SourceXtractor::FlexibleModelFittingParameterManager::m_parameter_indices
std::map< std::shared_ptr< ModelFitting::BasicParameter >, int > m_parameter_indices
Definition:
FlexibleModelFittingParameterManager.h:97
SourceXtractor::FlexibleModelFittingParameterManager::getParameterIndex
int getParameterIndex(std::shared_ptr< ModelFitting::BasicParameter > engine_parameter) const
Definition:
FlexibleModelFittingParameterManager.h:83
SourceXtractor::FlexibleModelFittingParameterManager::followDependencies
void followDependencies(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition:
FlexibleModelFittingParameterManager.h:100
SourceXtractor::FlexibleModelFittingParameterManager::addParameter
void addParameter(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter, std::shared_ptr< ModelFitting::BasicParameter > engine_parameter)
Definition:
FlexibleModelFittingParameterManager.h:61
SourceXtractor::FlexibleModelFittingParameterManager::isParamAccessed
bool isParamAccessed(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition:
FlexibleModelFittingParameterManager.h:78
SourceXtractor::FlexibleModelFittingParameterManager::clearAccessCheck
void clearAccessCheck()
Definition:
FlexibleModelFittingParameterManager.h:74
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
std::reference_wrapper::get
T get(T... args)
std::make_tuple
T make_tuple(T... args)
std::map
SourceXtractor
Definition:
Aperture.h:30
SourceXtractor::operator<
bool operator<(std::reference_wrapper< const SourceInterface > a, std::reference_wrapper< const SourceInterface > b)
Definition:
FlexibleModelFittingParameterManager.h:37
std::cref
T cref(T... args)
std::reference_wrapper
std::set
std::shared_ptr< ModelFitting::BasicParameter >
Generated by
1.9.1