ATLAS Offline Software
Loading...
Searching...
No Matches
NswAsBuilt::Element Class Reference

Element: a node in a hierarchy of alignment frames. More...

#include <Element.h>

Collaboration diagram for NswAsBuilt::Element:

Public Types

enum class  ParameterClass { NOMINAL , CORRECTION }
using ParameterVector = ElementModel::ParameterVector
using ipar_t = ElementModel::ipar_t
using daughterVec_t = std::vector<std::unique_ptr<Element>>
using VectorSetRef = ElementModel::VectorSetRef

Public Member Functions

 Element (std::unique_ptr< ElementModel > deformationModel)
 Element ()=delete
 Element (const Element &)=delete
Elementoperator= (const Element &)=delete
double getParameter (ParameterClass iclass, ipar_t ipar) const
void setParameter (ParameterClass iclass, ipar_t ipar, double value)
void setParametersFromMap (ParameterClass iclass, const std::map< std::string, double > &values)
void transform (ParameterClass iclass, const VectorSetRef &local) const
void transformToFrame (ParameterClass iclass, const VectorSetRef &local, const Element *frame) const
void cacheTransforms ()
void setAsapId (const std::string &asapId)
const std::string & asapId () const
ElementaddDaughter (std::unique_ptr< Element > daughter)
const Elementmother () const
Elementmother ()
void traverseTree (const std::function< void(Element &)> &callback)

Private Member Functions

ParameterVectorparameterVector (ParameterClass iclass)
const ParameterVectorparameterVector (ParameterClass iclass) const

Private Attributes

std::unique_ptr< ElementModelm_deformationModel
ParameterVector m_nominalPar
ParameterVector m_correctedPar
daughterVec_t m_daughters
Elementm_mother {nullptr}
std::string m_asapId {""}

Detailed Description

Element: a node in a hierarchy of alignment frames.

The class Element is the building block for chaining alignment transformations in various coordinate systems.

Each Element has attached to it a local coordinate system. The transformation of a point in local coordinates from this Element frame to the higher-level coordinate system is achieved with the method transform. The transform method applies rigid transformation (rotations, translation) and possibly deformations.

The Elements are organized in a tree structure, representing the hierarchy of coordinate systems. Traversal of the tree may be achieved using the mother and daughter pointers, or with the method traverseTree, which applies the user-provided function to all the daughers and grand-daughters of this Element.

In this context, it is interesting to call the transform methods iteratively on all the mothers. This is achieved by the method transformToFrame.

The transformation method is handled by an external class ElementModel, which, by sub-classing, provides the deformation model of this Element. The ElementModel must be set in the constructor.

The ElementModel is parameterized by an array of model parameters, whose meaning is known only to the used ElementModel implementation. The model parameters are members of this class, and are provided in two forms: the NOMINAL parameters (meant to represent the nominal geometry), and the CORRECTION parameters (meant to represent the actually measured parameters). The choice of one or the other of the two forms is possible using the ParameterClass argument of the transform method.

Definition at line 52 of file Element.h.

Member Typedef Documentation

◆ daughterVec_t

using NswAsBuilt::Element::daughterVec_t = std::vector<std::unique_ptr<Element>>

Definition at line 56 of file Element.h.

◆ ipar_t

Definition at line 55 of file Element.h.

◆ ParameterVector

◆ VectorSetRef

Member Enumeration Documentation

◆ ParameterClass

Enumerator
NOMINAL 
CORRECTION 

Definition at line 63 of file Element.h.

63 {
64 NOMINAL,
65 CORRECTION
66 };

Constructor & Destructor Documentation

◆ Element() [1/3]

Element::Element ( std::unique_ptr< ElementModel > deformationModel)

Definition at line 11 of file Element.cxx.

12: m_deformationModel(std::move(deformationModel))
13, m_nominalPar(m_deformationModel->nParameters())
14, m_correctedPar(m_deformationModel->nParameters())
15{ }
ParameterVector m_correctedPar
Definition Element.h:113
ParameterVector m_nominalPar
Definition Element.h:112
std::unique_ptr< ElementModel > m_deformationModel
Definition Element.h:111

◆ Element() [2/3]

NswAsBuilt::Element::Element ( )
delete

◆ Element() [3/3]

NswAsBuilt::Element::Element ( const Element & )
delete

Member Function Documentation

◆ addDaughter()

Element * Element::addDaughter ( std::unique_ptr< Element > daughter)

Definition at line 92 of file Element.cxx.

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}
daughterVec_t m_daughters
Definition Element.h:115

◆ asapId()

const std::string & NswAsBuilt::Element::asapId ( ) const
inline

Definition at line 94 of file Element.h.

94{ return m_asapId; }
std::string m_asapId
Definition Element.h:118

◆ cacheTransforms()

void Element::cacheTransforms ( )

Definition at line 51 of file Element.cxx.

52{
53 m_deformationModel->cacheTransform(m_correctedPar);
54 m_deformationModel->cacheTransform(m_nominalPar);
55}

◆ getParameter()

double Element::getParameter ( ParameterClass iclass,
ipar_t ipar ) const

Definition at line 59 of file Element.cxx.

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}
ParameterVector & parameterVector(ParameterClass iclass)
Definition Element.cxx:19

◆ mother() [1/2]

Element * NswAsBuilt::Element::mother ( )
inline

Definition at line 99 of file Element.h.

99{ return m_mother; }
Element * m_mother
Definition Element.h:116

◆ mother() [2/2]

const Element * NswAsBuilt::Element::mother ( ) const
inline

Definition at line 98 of file Element.h.

98{ return m_mother; }

◆ operator=()

Element & NswAsBuilt::Element::operator= ( const Element & )
delete

◆ parameterVector() [1/2]

Element::ParameterVector & Element::parameterVector ( ParameterClass iclass)
private

Definition at line 19 of file Element.cxx.

◆ parameterVector() [2/2]

const Element::ParameterVector & Element::parameterVector ( ParameterClass iclass) const
private

Definition at line 26 of file Element.cxx.

27{
29}

◆ setAsapId()

void NswAsBuilt::Element::setAsapId ( const std::string & asapId)
inline

Definition at line 93 of file Element.h.

93{ m_asapId = asapId; }
const std::string & asapId() const
Definition Element.h:94

◆ setParameter()

void Element::setParameter ( ParameterClass iclass,
ipar_t ipar,
double value )

Definition at line 70 of file Element.cxx.

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;
78}

◆ setParametersFromMap()

void Element::setParametersFromMap ( ParameterClass iclass,
const std::map< std::string, double > & values )

Definition at line 82 of file Element.cxx.

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}
void setParameter(ParameterClass iclass, ipar_t ipar, double value)
Definition Element.cxx:70

◆ transform()

void Element::transform ( ParameterClass iclass,
const VectorSetRef & local ) const

Definition at line 33 of file Element.cxx.

34{
35 m_deformationModel->transform(parameterVector(iclass), local);
36}

◆ transformToFrame()

void Element::transformToFrame ( ParameterClass iclass,
const VectorSetRef & local,
const Element * frame ) const

Definition at line 40 of file Element.cxx.

41{
42 const Element* el = this;
43 while ((el!=nullptr) && (el!=frame)) {
44 el->transform(iclass, local);
45 el = el->m_mother;
46 }
47}
Element(std::unique_ptr< ElementModel > deformationModel)
Definition Element.cxx:11

◆ traverseTree()

void Element::traverseTree ( const std::function< void(Element &)> & callback)

Definition at line 104 of file Element.cxx.

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}

Member Data Documentation

◆ m_asapId

std::string NswAsBuilt::Element::m_asapId {""}
private

Definition at line 118 of file Element.h.

118{""}; // Optional string identifier (imported from ASAP)

◆ m_correctedPar

ParameterVector NswAsBuilt::Element::m_correctedPar
private

Definition at line 113 of file Element.h.

◆ m_daughters

daughterVec_t NswAsBuilt::Element::m_daughters
private

Definition at line 115 of file Element.h.

◆ m_deformationModel

std::unique_ptr<ElementModel> NswAsBuilt::Element::m_deformationModel
private

Definition at line 111 of file Element.h.

◆ m_mother

Element* NswAsBuilt::Element::m_mother {nullptr}
private

Definition at line 116 of file Element.h.

116{nullptr}; // The mother Element

◆ m_nominalPar

ParameterVector NswAsBuilt::Element::m_nominalPar
private

Definition at line 112 of file Element.h.


The documentation for this class was generated from the following files: