ATLAS Offline Software
Loading...
Searching...
No Matches
AlignModule.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TRKALIGNEVENT_ALIGNMODULE_H
6#define TRKALIGNEVENT_ALIGNMODULE_H
7
9
10
12#include "Identifier/Identifier.h"
15
16#include <vector>
17#include <string>
18#include <string_view>
19
34
35class MsgStream;
36class AlgTool;
37
38namespace Trk {
39
40 class TrkDetElementBase;
41 class AlignTrack;
42 class AlignPar;
43
44 void decomposeTransform(const Amg::Transform3D& transform, double* values);
45
46 class AlignModule : public AthMessaging {
47
48 public:
49
51 // enums/typedefs
53
57
59
61 typedef std::vector<const TrkDetElementBase*> DetElementCollection;
62 typedef std::vector<Identifier> IdentifierCollection;
63 typedef std::vector<Amg::Transform3D> TransformCollection;
64
66 // constructors/destructor
68
70 AlignModule(const AlgTool* algtool,
71 const Amg::Transform3D& globalToAlignXform=Amg::Transform3D::Identity(),
72 std::string_view name="");
73
74 AlignModule() = delete; // don't allow constructor without IMessageSvc
75
77 AlignModule(const AlignModule & rhs) = delete;
78
80 AlignModule & operator=(const AlignModule & rhs) = delete;
81
82 virtual ~AlignModule();
83
85 // public methods
87
89 void setName(const std::string& name) { m_name=name; }
90 const std::string& name() const { return m_name; }
91
95
97 void setIdentifier(Identifier identifier) { m_identifier = identifier; }
98 Identifier identify() const { return m_identifier; }
99
101 unsigned int identify32() const { return m_identifier.get_identifier32().get_compact(); }
102
104 // alignment transforms
106
109
113
120
122 void setAlignParShift(const AlignPar* alignPar) const;
123
124 //
125 // methods dealing with detector elements
126 //
127
130
133
135 const std::vector<Amg::Transform3D>* alignModuleToDetElementTransforms(AlignModule::DetectorType detType) { return m_alignModuleToDetElementTransforms[detType]; }
136
138 const Amg::Transform3D *
140 const TrkDetElementBase* det,
141 const Identifier id=Identifier()) const;
142
146 const TrkDetElementBase* det,
147 const Amg::Transform3D &transform,
149
150 //
151 // methods used for numerical derivatives
152 //
153
156 void setNChamberShifts(int nShifts) { m_nChamberShifts = nShifts; }
157 int nChamberShifts() const { return m_nChamberShifts; }
158
161 void setChi2VAlignParamArray(double** chi2VAlignParam) { m_chi2VAlignParam = chi2VAlignParam; }
162 double** chi2VAlignParamArray() const { return m_chi2VAlignParam; }
163
165 void setChi2VAlignParamXArray(double** chi2VAlignParamX) { m_chi2VAlignParamX = chi2VAlignParamX; }
166 double** chi2VAlignParamXArray() const { return m_chi2VAlignParamX; }
167
169 void setChi2VAlignParamArrayMeasType(int measType, double** chi2VAlignParam) { m_chi2VAlignParamMeasType[measType]=chi2VAlignParam; }
170 double** chi2VAlignParamArrayMeasType(int measType) const { return m_chi2VAlignParamMeasType[measType]; }
171
172 //
173 // miscellaneous methods
174 //
175
177 void addTrack(int ntracks=1) { m_ntracks+=ntracks; }
178 int nTracks() const { return m_ntracks; }
179 void setNTracks(int ntracks) { m_ntracks=ntracks; }
180
183 double trackChi2() const { return m_trackchi2; }
185
187 void addHit(int nhits=1) { m_nhits+=nhits; }
188 int nHits() const { return m_nhits; }
189 void setNHits(int nhits) { m_nhits=nhits; }
190
193 void addNDoF(int nDoF) { m_nDoF+=nDoF; }
194 int nDoF() const { return m_nDoF; }
195 void setNDoF(int nDoF) { m_nDoF=nDoF; }
196
198 static Amg::Vector3D centerOfGravity(const std::vector<DetElementCollection*>&);
200
203
206
210
211
212
213 protected:
214
215 std::vector<DetElementCollection*> m_detelements;
216 std::vector<IdentifierCollection*> m_detIdentifiers;
217
218 // vector of parameters and transforms for individual detectors
219 std::vector<std::vector<Amg::Transform3D>* > m_alignModuleToDetElementTransforms;
220
221 private:
222
223
224 // private variables
225 Amg::Transform3D m_globalToAlignFrameTransform ; // transform to go from global frame to alignment frame
227 Amg::Vector3D m_globalToAlignFrameTranslation ; //actually a vector not a point
228
229
230 // chi2 vs. align parameters
235
236 std::string m_name;
239
240 int m_ntracks; // number of tracks going through module
241 int m_nhits; // number of hits in the module
242
243 double m_trackchi2; // chi2 of tracks going through module
244 int m_nDoF; // number of degrees of freedom for tracks going through module
245
246 }; // end class
247
248
250 std::string detTypeStr(AlignModule::DetectorType detType);
251
253 MsgStream& operator << (MsgStream& sl, const AlignModule& alignModule);
254
255
256} // end namespace
257
258#endif // TRKALIGNEVENT_ALIGNMODULE_H
AlignPar contains all the information related to an alignment parameter of a particular align module ...
AlignTrack is a generalization of a Trk::Track, used as the basic object to contain track information...
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
This is a "hash" representation of an Identifier.
const std::vector< Amg::Transform3D > * alignModuleToDetElementTransforms(AlignModule::DetectorType detType)
returns align module to detector element transforms
void shiftSurface(TrkDetElementBase *, Identifier) const
int nTracks() const
virtual ~AlignModule()
double ** m_chi2VAlignParamX
int nChamberShifts() const
double ** chi2VAlignParamArrayMeasType(int measType) const
void setIdHash(IdentifierHash id)
Definition AlignModule.h:94
AlignModule & operator=(const AlignModule &rhs)=delete
forbid assignment
std::vector< const TrkDetElementBase * > DetElementCollection
typedefs to contain detector element pointers and transforms
Definition AlignModule.h:61
std::vector< Amg::Transform3D > TransformCollection
Definition AlignModule.h:63
Identifier identify() const
Definition AlignModule.h:98
void setGlobalFrameToAlignFrameTransform(const Amg::Transform3D &t)
set global to alignment frame transforms
void setIdentifier(Identifier identifier)
Set and return identifier of module.
Definition AlignModule.h:97
void setChi2VAlignParamXArray(double **chi2VAlignParamX)
sets the values of chamber shifts in array
const std::string & name() const
Definition AlignModule.h:90
void setNHits(int nhits)
double ** m_chi2VAlignParam
double ** chi2VAlignParamArray() const
Amg::Transform3D m_globalToAlignFrameTransform
IdentifierHash m_idHash
void setNChamberShifts(int nShifts)
Used only for numerical derivatives.
const IdentifierCollection * identifierCollection(AlignModule::DetectorType detType) const
returns collection of Identifiers
double ** chi2VAlignParamXArray() const
void addTrack(int ntracks=1)
Increments and returns number of tracks passing through align module.
int nHits() const
void setName(const std::string &name)
Set and return name of align module (i.e.
Definition AlignModule.h:89
std::string m_name
void resetAlignModuleToDetElementTransforms()
Reset align module to detector element transforms based on the AlignModuleToGlobal transform and the ...
std::vector< IdentifierCollection * > m_detIdentifiers
double trackChi2() const
Amg::Vector3D m_globalToAlignFrameTranslation
void setAlignParShift(const AlignPar *alignPar) const
set values for a set of alignment parameters and errors
void restoreSurfaces(TrkDetElementBase *) const
Amg::Transform3D calculateAlignModuleToGlobal() const
Calculates Align to Global transform based on the TrkDetElementBase in the alignmodule.
int nDoF() const
unsigned int identify32() const
returns 32-bit compact identifier
const Amg::Vector3D & globalToAlignFrameTranslation() const
void addHit(int nhits=1)
Increments and returns number of hits in align module.
AlignModule(const AlgTool *algtool, const Amg::Transform3D &globalToAlignXform=Amg::Transform3D::Identity(), std::string_view name="")
constructor creates MsgStream with output level of parent tool and AlignModule for name.
void addDetElement(AlignModule::DetectorType detType, const TrkDetElementBase *det, const Amg::Transform3D &transform, Identifier id=Identifier())
used to add a detector element to the align module with a align frame to detector element local frame...
void setNDoF(int nDoF)
const Amg::RotationMatrix3D & globalToAlignFrameRotation() const
returns global to alignment frame transforms
Amg::RotationMatrix3D m_globalToAlignFrameRotation
std::vector< Identifier > IdentifierCollection
Definition AlignModule.h:62
const Amg::Transform3D * alignModuleToDetElementTransform(AlignModule::DetectorType detType, const TrkDetElementBase *det, const Identifier id=Identifier()) const
returns AlignModule to DetElement transform for a detector element
void setTrackChi2(double chi2)
AlignModule(const AlignModule &rhs)=delete
forbid copy constructor
TransformParameters
enum to keep track of transformation coordinates
Definition AlignModule.h:55
IdentifierHash identifyHash() const
Set and return index of module, used by alignment classes to keep track of order of align module.
Definition AlignModule.h:93
const DetElementCollection * detElementCollection(AlignModule::DetectorType detType) const
returns collection of detector elements
std::vector< std::vector< Amg::Transform3D > * > m_alignModuleToDetElementTransforms
std::vector< DetElementCollection * > m_detelements
void addTrackChi2(double chi2)
Increments and returns chi2 of tracks passing through align module.
Amg::Vector3D centerOfGravity() const
void setChi2VAlignParamArray(double **chi2VAlignParam)
Used only for numerical derivatives to get chi2 as a function of alignment parameters.
Identifier m_identifier
double *** m_chi2VAlignParamMeasType
void setNTracks(int ntracks)
void addNDoF(int nDoF)
Increments and returns number of degrees of freedom for tracks passing through align module.
void setChi2VAlignParamArrayMeasType(int measType, double **chi2VAlignParam)
vector of arrays of chamber shifts and chi2, one for each type of TrackState::MeasurementType
AlignModule()=delete
const Amg::Transform3D & globalFrameToAlignFrame() const
returns global frame to alignment frame
This is the base class for all tracking detector elements with read-out relevant information.
double chi2(TH1 *h0, TH1 *h1)
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition TgcBase.h:6
Definition HitInfo.h:33
Ensure that the ATLAS eigen extensions are properly loaded.
std::string detTypeStr(AlignModule::DetectorType detType)
returns the detector type
MsgStream & operator<<(MsgStream &sl, const AlignModule &alignModule)
overload of << operator for MsgStream for debug output
void decomposeTransform(const Amg::Transform3D &transform, double *values)