SourceXtractorPlusPlus
0.19
SourceXtractor++, the next generation SExtractor
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
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_ */
SourceXtractor::FlexibleModelFittingParameterManager::getParameterIndex
int getParameterIndex(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition:
FlexibleModelFittingParameterManager.h:87
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:61
SourceXtractor::FlexibleModelFittingParameterManager::FlexibleModelFittingParameterManager
FlexibleModelFittingParameterManager()
Definition:
FlexibleModelFittingParameterManager.h:47
SourceXtractor::FlexibleModelFittingParameterManager::clearAccessCheck
void clearAccessCheck()
Definition:
FlexibleModelFittingParameterManager.h:74
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::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::getParameterIndex
int getParameterIndex(std::shared_ptr< ModelFitting::BasicParameter > engine_parameter) const
Definition:
FlexibleModelFittingParameterManager.h:83
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:97
std::map
STL class.
SourceXtractor::FlexibleModelFittingParameterManager::followDependencies
void followDependencies(const SourceInterface &source, std::shared_ptr< const FlexibleModelFittingParameter > parameter) const
Definition:
FlexibleModelFittingParameterManager.h:100
SourceXtractor::FlexibleModelFittingParameterManager::m_current_parameter_index
int m_current_parameter_index
Definition:
FlexibleModelFittingParameterManager.h:96
EngineParameterManager.h
SourceXtractor::FlexibleModelFittingParameterManager
Definition:
FlexibleModelFittingParameterManager.h:43
SourceXtractor::FlexibleModelFittingParameterManager::getParameterNb
int getParameterNb() const
Definition:
FlexibleModelFittingParameterManager.h:70
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:78
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:129
Generated by
1.8.5