SourceXtractorPlusPlus
0.8
Please provide a description of the project.
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
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::getParameterIndex
int getParameterIndex(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition:
FlexibleModelFittingParameterManager.h:85
std::shared_ptr< ModelFitting::BasicParameter >
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
SourceXtractor::FlexibleModelFittingParameterManager::FlexibleModelFittingParameterManager
FlexibleModelFittingParameterManager()
Definition:
FlexibleModelFittingParameterManager.h:47
SourceXtractor::FlexibleModelFittingParameterManager::clearAccessCheck
void clearAccessCheck()
Definition:
FlexibleModelFittingParameterManager.h:72
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
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::getParameterIndex
int getParameterIndex(std::shared_ptr< ModelFitting::BasicParameter > engine_parameter) const
Definition:
FlexibleModelFittingParameterManager.h:81
std::make_tuple
T make_tuple(T...args)
SourceXtractor::FlexibleModelFittingParameterManager::m_parameter_indices
std::map< std::shared_ptr< ModelFitting::BasicParameter >, int > m_parameter_indices
Definition:
FlexibleModelFittingParameterManager.h:95
std::map
STL class.
SourceXtractor::FlexibleModelFittingParameterManager::followDependencies
void followDependencies(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition:
FlexibleModelFittingParameterManager.h:98
SourceXtractor::FlexibleModelFittingParameterManager::m_current_parameter_index
int m_current_parameter_index
Definition:
FlexibleModelFittingParameterManager.h:94
EngineParameterManager.h
SourceXtractor::FlexibleModelFittingParameterManager
Definition:
FlexibleModelFittingParameterManager.h:43
SourceXtractor::FlexibleModelFittingParameterManager::getParameterNb
int getParameterNb() const
Definition:
FlexibleModelFittingParameterManager.h:68
std::dynamic_pointer_cast
T dynamic_pointer_cast(T...args)
FlexibleModelFittingParameter.h
SourceXtractor::FlexibleModelFittingParameterManager::isParamAccessed
bool isParamAccessed(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition:
FlexibleModelFittingParameterManager.h:76
SourceInterface.h
std::reference_wrapper::get
T get(T...args)
std::set
STL class.
std::cref
T cref(T...args)
SourceXtractor::FlexibleModelFittingParameterManager::getParameter
std::shared_ptr< ModelFitting::BasicParameter > getParameter(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition:
FlexibleModelFittingParameterManager.h:51
std::reference_wrapper
SourceXtractor::FlexibleModelFittingParameterManager::~FlexibleModelFittingParameterManager
virtual ~FlexibleModelFittingParameterManager()
Definition:
FlexibleModelFittingParameterManager.h:48
SourceXtractor::SourceInterface
The SourceInterface is an abstract "source" that has properties attached to it.
Definition:
SourceInterface.h:46
SourceXtractor::FlexibleModelFittingDependentParameter
Definition:
FlexibleModelFittingParameter.h:121
Generated by
1.8.5