SourceXtractorPlusPlus
0.21
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
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 "
ModelFitting/Engine/EngineParameterManager.h
"
28
#include "
SEFramework/Source/SourceInterface.h
"
29
#include "
SEImplementation/Plugin/FlexibleModelFitting/FlexibleModelFittingParameter.h
"
30
31
#include <map>
32
#include <set>
33
#include <vector>
34
35
namespace
SourceXtractor
{
36
37
// Needed to store the source in a reference_wrapper
38
inline
bool
operator<
(
std::reference_wrapper<const SourceInterface>
a,
std::reference_wrapper<const SourceInterface>
b) {
39
return
&a.get() < &b.get();
40
}
41
42
class
FlexibleModelFittingParameter;
43
44
class
FlexibleModelFittingParameterManager
{
45
46
public
:
47
48
FlexibleModelFittingParameterManager
() :
m_current_parameter_index
(0) {}
49
virtual
~FlexibleModelFittingParameterManager
() {}
50
51
52
std::shared_ptr<ModelFitting::BasicParameter>
getParameter
(
53
const
SourceInterface
&
source
,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter
)
const
{
54
55
auto
key
=
std::make_tuple
(
std::cref
(
source
),
parameter
);
56
m_accessed_params
.insert(
key
);
57
followDependencies
(
source
,
parameter
);
58
auto
p =
m_params
.at(
key
);
59
return
p;
60
}
61
62
void
addParameter
(
const
SourceInterface
&
source
,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter
,
63
std::shared_ptr<ModelFitting::BasicParameter>
engine_parameter
) {
64
m_params
[
std::make_tuple
(
std::cref
(
source
),
parameter
)] =
engine_parameter
;
65
66
if
(
std::dynamic_pointer_cast<const FlexibleModelFittingFreeParameter>
(
parameter
)) {
67
m_parameter_indices
[
engine_parameter
] =
m_current_parameter_index
++;
68
}
69
}
70
71
int
getParameterNb
()
const
{
72
return
m_params
.size();
73
}
74
75
void
clearAccessCheck
() {
76
m_accessed_params
.clear();
77
}
78
79
bool
isParamAccessed
(
const
SourceInterface
&
source
,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter
)
const
{
80
auto
key
=
std::make_tuple
(
std::cref
(
source
),
parameter
);
81
return
m_accessed_params
.count(
key
) > 0;
82
}
83
84
int
getParameterIndex
(
std::shared_ptr<ModelFitting::BasicParameter>
engine_parameter
)
const
{
85
return
m_parameter_indices
.
at
(
engine_parameter
);
86
}
87
88
int
getParameterIndex
(
const
SourceInterface
&
source
,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter
)
const
{
89
return
getParameterIndex
(
getParameter
(
source
,
parameter
));
90
}
91
92
private
:
93
std::map<std::tuple<std::reference_wrapper<const SourceInterface>
,
std::shared_ptr<const FlexibleModelFittingParameter>
>,
std::shared_ptr<ModelFitting::BasicParameter>
>
m_params
;
94
mutable
std::set<std::tuple<std::reference_wrapper<const SourceInterface>
,
std::shared_ptr<const FlexibleModelFittingParameter>
>>
m_accessed_params
;
95
96
// remember the order of the parameters for model fitting (used to retrieve sigma)
97
int
m_current_parameter_index
;
98
std::map<std::shared_ptr<ModelFitting::BasicParameter>
,
int
>
m_parameter_indices
;
99
100
// Propagate access to dependees
101
void
followDependencies
(
const
SourceInterface
&
source
,
std::shared_ptr<const FlexibleModelFittingParameter>
parameter
)
const
{
102
auto
dependent_parameter
=
std::dynamic_pointer_cast<const FlexibleModelFittingDependentParameter>
(
parameter
).get();
103
if
(
dependent_parameter
) {
104
for
(
auto
&
dependee
:
dependent_parameter
->getDependees()) {
105
auto
key_dependee
=
std::make_tuple
(
std::cref
(
source
),
dependee
);
106
m_accessed_params
.insert(
key_dependee
);
107
followDependencies
(
source
,
dependee
);
108
}
109
}
110
}
111
};
112
113
}
114
115
116
117
#endif
/* _SEIMPLEMENTATION_PLUGIN_FLEXIBLEMODELFITTING_FLEXIBLEMODELFITTINGPARAMETERMANAGER_H_ */
EngineParameterManager.h
FlexibleModelFittingParameter.h
SourceInterface.h
std::map::at
T at(T... args)
SourceXtractor::FlexibleModelFittingParameterManager
Definition
FlexibleModelFittingParameterManager.h:44
SourceXtractor::FlexibleModelFittingParameterManager::getParameterIndex
int getParameterIndex(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition
FlexibleModelFittingParameterManager.h:88
SourceXtractor::FlexibleModelFittingParameterManager::m_current_parameter_index
int m_current_parameter_index
Definition
FlexibleModelFittingParameterManager.h:97
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:93
SourceXtractor::FlexibleModelFittingParameterManager::getParameterNb
int getParameterNb() const
Definition
FlexibleModelFittingParameterManager.h:71
SourceXtractor::FlexibleModelFittingParameterManager::~FlexibleModelFittingParameterManager
virtual ~FlexibleModelFittingParameterManager()
Definition
FlexibleModelFittingParameterManager.h:49
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:94
SourceXtractor::FlexibleModelFittingParameterManager::m_parameter_indices
std::map< std::shared_ptr< ModelFitting::BasicParameter >, int > m_parameter_indices
Definition
FlexibleModelFittingParameterManager.h:98
SourceXtractor::FlexibleModelFittingParameterManager::getParameterIndex
int getParameterIndex(std::shared_ptr< ModelFitting::BasicParameter > engine_parameter) const
Definition
FlexibleModelFittingParameterManager.h:84
SourceXtractor::FlexibleModelFittingParameterManager::followDependencies
void followDependencies(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition
FlexibleModelFittingParameterManager.h:101
SourceXtractor::FlexibleModelFittingParameterManager::addParameter
void addParameter(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter, std::shared_ptr< ModelFitting::BasicParameter > engine_parameter)
Definition
FlexibleModelFittingParameterManager.h:62
SourceXtractor::FlexibleModelFittingParameterManager::isParamAccessed
bool isParamAccessed(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition
FlexibleModelFittingParameterManager.h:79
SourceXtractor::FlexibleModelFittingParameterManager::clearAccessCheck
void clearAccessCheck()
Definition
FlexibleModelFittingParameterManager.h:75
SourceXtractor::FlexibleModelFittingParameterManager::FlexibleModelFittingParameterManager
FlexibleModelFittingParameterManager()
Definition
FlexibleModelFittingParameterManager.h:48
SourceXtractor::FlexibleModelFittingParameterManager::getParameter
std::shared_ptr< ModelFitting::BasicParameter > getParameter(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition
FlexibleModelFittingParameterManager.h:52
SourceXtractor::SourceInterface
The SourceInterface is an abstract "source" that has properties attached to it.
Definition
SourceInterface.h:46
std::function
std::make_tuple
T make_tuple(T... args)
SourceXtractor
Definition
Aperture.h:30
SourceXtractor::operator<
bool operator<(std::reference_wrapper< const SourceInterface > a, std::reference_wrapper< const SourceInterface > b)
Definition
FlexibleModelFittingParameterManager.h:38
std::cref
T cref(T... args)
Generated by
1.10.0