ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
MuonSpectrometer
MuonDetDescr
MuonNSWAsBuilt
src
Element.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
MuonNSWAsBuilt/Element.h
"
6
#include <list>
7
8
using namespace
NswAsBuilt
;
9
10
//===============================================================================
11
Element::Element
(std::unique_ptr<ElementModel> deformationModel)
12
:
m_deformationModel
(
std
::move(deformationModel))
13
,
m_nominalPar
(
m_deformationModel
->nParameters())
14
,
m_correctedPar
(
m_deformationModel
->nParameters())
15
{ }
16
17
18
//===============================================================================
19
Element::ParameterVector
&
Element::parameterVector
(
ParameterClass
iclass)
20
{
21
return
(iclass ==
ParameterClass::CORRECTION
) ?
m_correctedPar
:
m_nominalPar
;
22
}
23
24
25
//===============================================================================
26
const
Element::ParameterVector
&
Element::parameterVector
(
ParameterClass
iclass)
const
27
{
28
return
(iclass ==
ParameterClass::CORRECTION
) ?
m_correctedPar
:
m_nominalPar
;
29
}
30
31
32
//===============================================================================
33
void
Element::transform
(
ParameterClass
iclass,
const
VectorSetRef
& local)
const
34
{
35
m_deformationModel
->transform(
parameterVector
(iclass), local);
36
}
37
38
39
//===============================================================================
40
void
Element::transformToFrame
(
ParameterClass
iclass,
const
VectorSetRef
& local,
const
Element
* frame)
const
41
{
42
const
Element
* el =
this
;
43
while
((el!=
nullptr
) && (el!=frame)) {
44
el->transform(iclass, local);
45
el = el->m_mother;
46
}
47
}
48
49
50
//===============================================================================
51
void
Element::cacheTransforms
()
52
{
53
m_deformationModel
->cacheTransform(
m_correctedPar
);
54
m_deformationModel
->cacheTransform(
m_nominalPar
);
55
}
56
57
58
//===============================================================================
59
double
Element::getParameter
(
ParameterClass
iclass,
ipar_t
ipar)
const
60
{
61
const
auto
& parvec =
parameterVector
(iclass).
parameters
;
62
if
(ipar>=parvec.size()) {
63
throw
std::runtime_error(
"Element::getParameter: Parameter exceeds parvec size "
+std::to_string(ipar));
64
}
65
return
parvec[ipar];
66
}
67
68
69
//===============================================================================
70
void
Element::setParameter
(
ParameterClass
iclass,
ipar_t
ipar,
double
value)
71
{
72
auto
& parvec =
parameterVector
(iclass).
parameters
;
73
if
(ipar>=parvec.size()) {
74
throw
std::runtime_error(
"Element::setParameter: Parameter exceeds parvec size "
+std::to_string(ipar));
75
}
76
parvec[ipar] = value;
77
parameterVector
(iclass).
transformCacheValid
=
false
;
78
}
79
80
81
//===============================================================================
82
void
Element::setParametersFromMap
(
ParameterClass
iclass,
const
std::map<std::string, double>& values)
83
{
84
for
(
const
auto
& p : values) {
85
setParameter
(iclass,
m_deformationModel
->getParameterIndex(p.first), p.second);
86
}
87
m_deformationModel
->cacheTransform(
parameterVector
(iclass));
88
}
89
90
91
//===============================================================================
92
Element
*
Element::addDaughter
(std::unique_ptr<Element> daughter)
93
{
94
if
(daughter->m_mother) {
95
throw
std::runtime_error(
"Element has a defined mother already"
);
96
}
97
daughter->m_mother =
this
;
98
m_daughters
.push_back(std::move(daughter));
99
return
m_daughters
.back().get();
100
}
101
102
103
//===============================================================================
104
void
Element::traverseTree
(
const
std::function<
void
(
Element
&)>& callback)
105
{
106
struct
tree_t {
107
using
iter = daughterVec_t::iterator;
108
tree_t(iter it_, iter end_):
109
it{it_},end{end_}{}
110
iter it;
111
iter end;
112
};
113
std::list<tree_t> dtree;
114
callback(*
this
);
115
dtree.emplace_back(
m_daughters
.begin(),
m_daughters
.end());
116
while
(!dtree.empty()) {
117
auto
& it = dtree.back().it;
118
if
(it != dtree.back().end) {
119
Element
& el = **it;
120
callback(el);
121
dtree.emplace_back(el.m_daughters.begin(), el.m_daughters.end());
122
++it;
123
}
else
{
124
dtree.pop_back();
125
}
126
}
127
}
128
Element.h
NswAsBuilt::Element::traverseTree
void traverseTree(const std::function< void(Element &)> &callback)
Definition
Element.cxx:104
NswAsBuilt::Element::m_correctedPar
ParameterVector m_correctedPar
Definition
Element.h:113
NswAsBuilt::Element::m_nominalPar
ParameterVector m_nominalPar
Definition
Element.h:112
NswAsBuilt::Element::VectorSetRef
ElementModel::VectorSetRef VectorSetRef
Definition
Element.h:57
NswAsBuilt::Element::setParametersFromMap
void setParametersFromMap(ParameterClass iclass, const std::map< std::string, double > &values)
Definition
Element.cxx:82
NswAsBuilt::Element::Element
Element(std::unique_ptr< ElementModel > deformationModel)
Definition
Element.cxx:11
NswAsBuilt::Element::m_deformationModel
std::unique_ptr< ElementModel > m_deformationModel
Definition
Element.h:111
NswAsBuilt::Element::setParameter
void setParameter(ParameterClass iclass, ipar_t ipar, double value)
Definition
Element.cxx:70
NswAsBuilt::Element::addDaughter
Element * addDaughter(std::unique_ptr< Element > daughter)
Definition
Element.cxx:92
NswAsBuilt::Element::m_daughters
daughterVec_t m_daughters
Definition
Element.h:115
NswAsBuilt::Element::cacheTransforms
void cacheTransforms()
Definition
Element.cxx:51
NswAsBuilt::Element::transform
void transform(ParameterClass iclass, const VectorSetRef &local) const
Definition
Element.cxx:33
NswAsBuilt::Element::transformToFrame
void transformToFrame(ParameterClass iclass, const VectorSetRef &local, const Element *frame) const
Definition
Element.cxx:40
NswAsBuilt::Element::parameterVector
ParameterVector & parameterVector(ParameterClass iclass)
Definition
Element.cxx:19
NswAsBuilt::Element::ParameterVector
ElementModel::ParameterVector ParameterVector
Definition
Element.h:54
NswAsBuilt::Element::ParameterClass
ParameterClass
Definition
Element.h:63
NswAsBuilt::Element::ParameterClass::CORRECTION
@ CORRECTION
Definition
Element.h:65
NswAsBuilt::Element::getParameter
double getParameter(ParameterClass iclass, ipar_t ipar) const
Definition
Element.cxx:59
NswAsBuilt::Element::ipar_t
ElementModel::ipar_t ipar_t
Definition
Element.h:55
NswAsBuilt
Definition
CathodeBoardElement.h:12
std
STL namespace.
NswAsBuilt::ElementModel::ParameterVector::parameters
std::vector< double > parameters
Definition
ElementModel.h:45
NswAsBuilt::ElementModel::ParameterVector::transformCacheValid
bool transformCacheValid
Definition
ElementModel.h:47
Generated on
for ATLAS Offline Software by
1.17.0