ATLAS Offline Software
Loading...
Searching...
No Matches
AlignModule.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 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
33
34class MsgStream;
35class AlgTool;
36
37namespace Trk {
38
39 class TrkDetElementBase;
40 class AlignTrack;
41 class AlignPar;
42
43 void decomposeTransform(const Amg::Transform3D& transform, double* values);
44
45 class AlignModule : public AthMessaging {
46
47 public:
48
50 // enums/typedefs
52
56
58
60 typedef std::vector<const TrkDetElementBase*> DetElementCollection;
61 typedef std::vector<Identifier> IdentifierCollection;
62 typedef std::vector<Amg::Transform3D> TransformCollection;
63
65 // constructors/destructor
67
69 AlignModule(const AlgTool* algtool,
70 const Amg::Transform3D& globalToAlignXform=Amg::Transform3D::Identity(),
71 const std::string& name="");
72
73 AlignModule() = delete; // don't allow constructor without IMessageSvc
74
76 AlignModule(const AlignModule & rhs) = delete;
77
79 AlignModule & operator=(const AlignModule & rhs) = delete;
80
81 virtual ~AlignModule();
82
84 // public methods
86
88 void setName(const std::string& name) { m_name=name; }
89 const std::string& name() const { return m_name; }
90
94
96 void setIdentifier(Identifier identifier) { m_identifier = identifier; }
97 Identifier identify() const { return m_identifier; }
98
100 unsigned int identify32() const { return m_identifier.get_identifier32().get_compact(); }
101
103 // alignment transforms
105
108
112
119
121 void setAlignParShift(const AlignPar* alignPar) const;
122
123 //
124 // methods dealing with detector elements
125 //
126
129
132
134 const std::vector<Amg::Transform3D>* alignModuleToDetElementTransforms(AlignModule::DetectorType detType) { return m_alignModuleToDetElementTransforms[detType]; }
135
137 const Amg::Transform3D *
139 const TrkDetElementBase* det,
140 const Identifier id=Identifier()) const;
141
145 const TrkDetElementBase* det,
146 const Amg::Transform3D &transform,
148
149 //
150 // methods used for numerical derivatives
151 //
152
155 void setNChamberShifts(int nShifts) { m_nChamberShifts = nShifts; }
156 int nChamberShifts() const { return m_nChamberShifts; }
157
160 void setChi2VAlignParamArray(double** chi2VAlignParam) { m_chi2VAlignParam = chi2VAlignParam; }
161 double** chi2VAlignParamArray() const { return m_chi2VAlignParam; }
162
164 void setChi2VAlignParamXArray(double** chi2VAlignParamX) { m_chi2VAlignParamX = chi2VAlignParamX; }
165 double** chi2VAlignParamXArray() const { return m_chi2VAlignParamX; }
166
168 void setChi2VAlignParamArrayMeasType(int measType, double** chi2VAlignParam) { m_chi2VAlignParamMeasType[measType]=chi2VAlignParam; }
169 double** chi2VAlignParamArrayMeasType(int measType) const { return m_chi2VAlignParamMeasType[measType]; }
170
171 //
172 // miscellaneous methods
173 //
174
176 void addTrack(int ntracks=1) { m_ntracks+=ntracks; }
177 int nTracks() const { return m_ntracks; }
178 void setNTracks(int ntracks) { m_ntracks=ntracks; }
179
182 double trackChi2() const { return m_trackchi2; }
184
186 void addHit(int nhits=1) { m_nhits+=nhits; }
187 int nHits() const { return m_nhits; }
188 void setNHits(int nhits) { m_nhits=nhits; }
189
192 void addNDoF(int nDoF) { m_nDoF+=nDoF; }
193 int nDoF() const { return m_nDoF; }
194 void setNDoF(int nDoF) { m_nDoF=nDoF; }
195
197 static Amg::Vector3D centerOfGravity(const std::vector<DetElementCollection*>&);
199
202
205
209
210
211
212 protected:
213
214 std::vector<DetElementCollection*> m_detelements;
215 std::vector<IdentifierCollection*> m_detIdentifiers;
216
217 // vector of parameters and transforms for individual detectors
218 std::vector<std::vector<Amg::Transform3D>* > m_alignModuleToDetElementTransforms;
219
220 private:
221
222
223 // private variables
224 Amg::Transform3D m_globalToAlignFrameTransform ; // transform to go from global frame to alignment frame
226 Amg::Vector3D m_globalToAlignFrameTranslation ; //actually a vector not a point
227
228
229 // chi2 vs. align parameters
234
235 std::string m_name;
238
239 int m_ntracks; // number of tracks going through module
240 int m_nhits; // number of hits in the module
241
242 double m_trackchi2; // chi2 of tracks going through module
243 int m_nDoF; // number of degrees of freedom for tracks going through module
244
245 }; // end class
246
247
249 std::string detTypeStr(AlignModule::DetectorType detType);
250
252 MsgStream& operator << (MsgStream& sl, const AlignModule& alignModule);
253
254
255} // end namespace
256
257#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
AlignModule(const AlgTool *algtool, const Amg::Transform3D &globalToAlignXform=Amg::Transform3D::Identity(), const std::string &name="")
constructor creates MsgStream with output level of parent tool and AlignModule for name.
virtual ~AlignModule()
double ** m_chi2VAlignParamX
int nChamberShifts() const
double ** chi2VAlignParamArrayMeasType(int measType) const
void setIdHash(IdentifierHash id)
Definition AlignModule.h:93
AlignModule & operator=(const AlignModule &rhs)=delete
forbid assignment
std::vector< const TrkDetElementBase * > DetElementCollection
typedefs to contain detector element pointers and transforms
Definition AlignModule.h:60
std::vector< Amg::Transform3D > TransformCollection
Definition AlignModule.h:62
Identifier identify() const
Definition AlignModule.h:97
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:96
void setChi2VAlignParamXArray(double **chi2VAlignParamX)
sets the values of chamber shifts in array
const std::string & name() const
Definition AlignModule.h:89
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:88
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.
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:61
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:54
IdentifierHash identifyHash() const
Set and return index of module, used by alignment classes to keep track of order of align module.
Definition AlignModule.h:92
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)