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

An element model implementing the deformations used for the NSW sTGC as-built parameters. More...

#include <ElementModelSTGC.h>

Inheritance diagram for NswAsBuilt::ElementModelSTGC:
Collaboration diagram for NswAsBuilt::ElementModelSTGC:

Public Types

enum  parameter_t {
  X =0 , Y =1 , Z =2 , THX =3 ,
  THY =4 , THZ =5 , ROT =6 , OFF =7 ,
  SCL =8 , NPAR =9
}
using ipar_t = unsigned int
using VectorSet = Eigen::Matrix<double, 3, Eigen::Dynamic, Eigen::ColMajor|Eigen::AutoAlign, 3, 5>
using VectorSetRef = Eigen::Ref<VectorSet>

Public Member Functions

 ElementModelSTGC (double lenX, double lenY, Amg::Vector3D defo0)
 ElementModelSTGC ()=delete
virtual int nParameters () const override
 The number of parameters used.
virtual void transform (const ParameterVector &parvec, VectorSetRef local) const override
 Transform a set of vectors expressed in local frame, stored in a matrix.
virtual void cacheTransform (ParameterVector &parvec) const override
 Cache the rigid component of this deformation model.
virtual ipar_t getParameterIndex (const std::string &parname) const override
virtual std::string getParameterName (ipar_t ipar) const override

Private Member Functions

void applyDeformation (const ParameterVector &parvec, Eigen::Ref< Amg::Vector3D > local) const
void applyDeformation2 (const ParameterVector &parvec, VectorSetRef local) const
Amg::Vector3D stgcScale (double scl, const Amg::Vector3D &d0) const
Amg::Vector3D stgcNonPar (double npar, const Amg::Vector3D &d0) const

Static Private Member Functions

static Amg::Vector3D stgcOffset (double off)
static Amg::Vector3D stgcRotation (double rot, const Amg::Vector3D &d0)

Private Attributes

double m_lenY {0.}
double m_lenX {0.}
Amg::Vector3D m_defo0 {Amg::Vector3D::Zero()}

Detailed Description

An element model implementing the deformations used for the NSW sTGC as-built parameters.

The first 6 parameters represent the rigid component of the transform (a 3D translation and 3 Euler angles to be applied in the order ZYX)

The following parameters are providing deformations, in accordance with the: 4-parameter alingment model implemented for the sTGC quadruplets:

dy = off + rot*x + scl*y + npar*x*y

For more information check https://cds.cern.ch/record/2688394?ln=en

Definition at line 26 of file ElementModelSTGC.h.

Member Typedef Documentation

◆ ipar_t

using NswAsBuilt::ElementModel::ipar_t = unsigned int
inherited

Definition at line 35 of file ElementModel.h.

◆ VectorSet

using NswAsBuilt::ElementModel::VectorSet = Eigen::Matrix<double, 3, Eigen::Dynamic, Eigen::ColMajor|Eigen::AutoAlign, 3, 5>
inherited

Definition at line 36 of file ElementModel.h.

◆ VectorSetRef

using NswAsBuilt::ElementModel::VectorSetRef = Eigen::Ref<VectorSet>
inherited

Definition at line 37 of file ElementModel.h.

Member Enumeration Documentation

◆ parameter_t

Constructor & Destructor Documentation

◆ ElementModelSTGC() [1/2]

ElementModelSTGC::ElementModelSTGC ( double lenX,
double lenY,
Amg::Vector3D defo0 )

Definition at line 11 of file ElementModelSTGC.cxx.

12 : m_lenY(lenY),m_lenX(lenX),
13 m_defo0(std::move(defo0))
14{
15}

◆ ElementModelSTGC() [2/2]

NswAsBuilt::ElementModelSTGC::ElementModelSTGC ( )
delete

Member Function Documentation

◆ applyDeformation()

void ElementModelSTGC::applyDeformation ( const ParameterVector & parvec,
Eigen::Ref< Amg::Vector3D > local ) const
private

Definition at line 110 of file ElementModelSTGC.cxx.

110 {
111 // Applies the deformation to the set of local vectors given as argument
112 // This old-style implementation is the reference implementation
114 local = local
115 + stgcOffset(parvec[OFF])
116 + stgcRotation(parvec[ROT], d0)
117 + stgcScale(parvec[SCL], d0)
118 + stgcNonPar(parvec[NPAR], d0)
119 ;
120}
static Amg::Vector3D stgcOffset(double off)
static Amg::Vector3D stgcRotation(double rot, const Amg::Vector3D &d0)
Amg::Vector3D stgcNonPar(double npar, const Amg::Vector3D &d0) const
Amg::Vector3D stgcScale(double scl, const Amg::Vector3D &d0) const
Eigen::Matrix< double, 3, 1 > Vector3D

◆ applyDeformation2()

void ElementModelSTGC::applyDeformation2 ( const ParameterVector & parvec,
VectorSetRef local ) const
private

Definition at line 122 of file ElementModelSTGC.cxx.

122 {
123 // Applies the deformation to the set of local vectors given as argument
124 // This implementation uses Eigen-style algebra (does the same as the method applyDeformation above, but benefits from Eigen's optimizations)
125
126 // Temporaries allocated on the stack
127 // d0 = local - defo0
128 VectorSet d0 = local.colwise() - m_defo0;
129
130 double off = parvec[OFF];
131 double rot = parvec[ROT];
132 double scl = parvec[SCL]/m_lenY;
133 double npar = parvec[NPAR]/(m_lenX*m_lenY);
134
135 // OFF:
136 local.array().colwise() += Eigen::Array3d{0. ,off, 0.};
137
138 // ROT
139 local.topRows<2>().array() += d0.topRows<2>().array().colwise().reverse().colwise() * Eigen::Array2d{0., rot};
140
141 // SCL:
142 local.array() += d0.array().colwise() * Eigen::Array3d{0., scl, 0.};
143
144 // NPAR:
145 local.topRows<2>().array() += (d0.topRows<2>().array().colwise().reverse() * d0.topRows<2>().array()).colwise() * Eigen::Array2d{0., npar};
146}
Eigen::Matrix< double, 3, Eigen::Dynamic, Eigen::ColMajor|Eigen::AutoAlign, 3, 5 > VectorSet

◆ cacheTransform()

void ElementModelSTGC::cacheTransform ( ParameterVector & parvec) const
overridevirtual

Cache the rigid component of this deformation model.

Cache the rigid component of this deformation model Add rotation and offset obtained from the sTGC fit.

Implements NswAsBuilt::ElementModel.

Definition at line 45 of file ElementModelSTGC.cxx.

45 {
46 const auto& pars = parvec.parameters;
47 parvec.transformCache
48 = Eigen::Translation3d(pars[X], pars[Y], pars[Z])
49 * Eigen::AngleAxisd(pars[THZ], Eigen::Vector3d::UnitZ())
50 * Eigen::AngleAxisd(pars[THY], Eigen::Vector3d::UnitY())
51 * Eigen::AngleAxisd(pars[THX], Eigen::Vector3d::UnitX());
52 parvec.transformCacheValid = true;
53}

◆ getParameterIndex()

ElementModelSTGC::ipar_t ElementModelSTGC::getParameterIndex ( const std::string & parname) const
overridevirtual

Implements NswAsBuilt::ElementModel.

Definition at line 58 of file ElementModelSTGC.cxx.

58 {
59 if (parname == "x") return parameter_t::X;
60 if (parname == "y") return parameter_t::Y;
61 if (parname == "z") return parameter_t::Z;
62 if (parname == "thx") return parameter_t::THX;
63 if (parname == "thy") return parameter_t::THY;
64 if (parname == "thz") return parameter_t::THZ;
65 if (parname == "rot") return parameter_t::ROT;
66 if (parname == "off") return parameter_t::OFF;
67 if (parname == "scl") return parameter_t::SCL;
68 if (parname == "npar") return parameter_t::NPAR;
69 throw std::runtime_error("Invalid parameter name "+parname);
70}

◆ getParameterName()

std::string ElementModelSTGC::getParameterName ( ipar_t ipar) const
overridevirtual

Implements NswAsBuilt::ElementModel.

Definition at line 72 of file ElementModelSTGC.cxx.

72 {
73 switch (ipar) {
74 case X: return "x";
75 case Y: return "y";
76 case Z: return "z";
77 case THX: return "thx";
78 case THY: return "thy";
79 case THZ: return "thz";
80 case ROT: return "rot";
81 case OFF: return "off";
82 case SCL: return "scl";
83 case NPAR: return "npar";
84 default: throw std::runtime_error("Invalid parameter");
85 }
86}

◆ nParameters()

virtual int NswAsBuilt::ElementModelSTGC::nParameters ( ) const
inlineoverridevirtual

The number of parameters used.

Implements NswAsBuilt::ElementModel.

Definition at line 47 of file ElementModelSTGC.h.

47{ return 10; }

◆ stgcNonPar()

Amg::Vector3D ElementModelSTGC::stgcNonPar ( double npar,
const Amg::Vector3D & d0 ) const
private

Definition at line 104 of file ElementModelSTGC.cxx.

104 {
105// Non-parallelism measured by CMM/Faro at construction sites
106 double delta = npar*d0[0]*d0[1]/(m_lenX*m_lenY);
107 return Amg::Vector3D(0., delta, 0.);
108}

◆ stgcOffset()

Amg::Vector3D ElementModelSTGC::stgcOffset ( double off)
staticprivate

Definition at line 88 of file ElementModelSTGC.cxx.

88 {
89// Offset extracted from combined fit of X-ray data and by CMM/Faro measurement at construction sites
90 return off * Amg::Vector3D::UnitY();
91}

◆ stgcRotation()

Amg::Vector3D ElementModelSTGC::stgcRotation ( double rot,
const Amg::Vector3D & d0 )
staticprivate

Definition at line 93 of file ElementModelSTGC.cxx.

93 {
94// Rotation extracted from combined fit of X-ray data and by CMM/Faro measurement at construction sites
95 return -rot * d0.cross(Amg::Vector3D::UnitZ());
96}

◆ stgcScale()

Amg::Vector3D ElementModelSTGC::stgcScale ( double scl,
const Amg::Vector3D & d0 ) const
private

Definition at line 98 of file ElementModelSTGC.cxx.

98 {
99// Scale measured by CMM/Faro at construction sites
100 return d0.array() * Eigen::Array3d{0., scl/m_lenY, 0.};
101}

◆ transform()

void ElementModelSTGC::transform ( const ParameterVector & parvec,
VectorSetRef local ) const
overridevirtual

Transform a set of vectors expressed in local frame, stored in a matrix.

Implements NswAsBuilt::ElementModel.

Definition at line 20 of file ElementModelSTGC.cxx.

20 {
21
22 if (!parvec.transformCacheValid) {
23 throw std::runtime_error("Should call Element::cacheTransforms() first");
24 }
25
26 // Apply the deformation component
27
28 // old-style (reference) implementation: not optimized, provided for comparison purposes
29 // for (int i=0; i< local.cols(); ++i) {
30 // applyDeformation(parvec, local.col(i));
31 // }
32
33
34 // Eigen-style implementation: optimized
35 applyDeformation2(parvec, local);
36
37 // Apply the rigid component
38 local = (parvec.transformCache * local).eval(); // Needs eval to avoid aliasing (?)
39}
void applyDeformation2(const ParameterVector &parvec, VectorSetRef local) const

Member Data Documentation

◆ m_defo0

Amg::Vector3D NswAsBuilt::ElementModelSTGC::m_defo0 {Amg::Vector3D::Zero()}
private

Definition at line 83 of file ElementModelSTGC.h.

83{Amg::Vector3D::Zero()};

◆ m_lenX

double NswAsBuilt::ElementModelSTGC::m_lenX {0.}
private

Definition at line 82 of file ElementModelSTGC.h.

82{0.};

◆ m_lenY

double NswAsBuilt::ElementModelSTGC::m_lenY {0.}
private

Definition at line 81 of file ElementModelSTGC.h.

81{0.};

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