ATLAS Offline Software
Loading...
Searching...
No Matches
MuonStation.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef MuonReadoutGeometry_MuonStation_H
6#define MuonReadoutGeometry_MuonStation_H
7
10
11#include <map>
12#include <memory>
13
14#include "GeoModelKernel/GeoAlignableTransform.h"
15#include "GeoModelKernel/GeoFullPhysVol.h"
19class BLinePar;
20class MdtAsBuiltPar;
21
22namespace MuonGM {
23
48
50
51 class MuonStation: public AthMessaging {
52 public:
53 MuonStation(std::string_view stName,
54 double Ssize, double Rsize, double Zsize,
55 double LongSsize, double LongRsize, double LongZsize,
56 int zi, int fi, bool m_descratzneg);
58
59 inline int getPhiIndex() const;
60
61 inline int getEtaIndex() const;
62
63 inline const std::string& getKey() const;
64 inline std::string getStationType() const;
65
66 inline const std::string& getStationName() const;
67
68 void setEtaPhiIndices(int eta, int phi);
69
70 inline double Rsize() const;
71 inline double Ssize() const;
72 inline double Zsize() const;
73 inline double LongRsize() const;
74 inline double LongSsize() const;
75 inline double LongZsize() const;
76 double RsizeMdtStation() const;
77 double ZsizeMdtStation() const;
78 bool endcap() const;
79 bool barrel() const;
80
81 inline double xAmdbCRO() const;
82 void setxAmdbCRO(double xpos);
83
84 void setTransform(GeoAlignableTransform* xf);
85 void setBlineFixedPointInAmdbLRS(double s0, double z0, double t0);
87
93
94 void setDelta_fromAline_forComp(int, double, double, double, double, double, double);
95 void setDelta_fromAline(double, double, double, double, double, double);
97 void addMuonReadoutElementWithAlTransf(MuonReadoutElement* a, GeoAlignableTransform* ptrsf, int jobIndex);
98
99
100 const MuonReadoutElement* getMuonReadoutElement(int jobIndex) const;
102
103
104 GeoAlignableTransform* getComponentAlTransf(int jobIndex) const;
105
106 inline int nMuonReadoutElements() const;
107 void clearCache();
108 void fillCache();
109 void refreshCache();
110 void setBline(const BLinePar* bline);
111 inline const GeoAlignableTransform* getGeoTransform() const;
112 inline Amg::Transform3D getTransform() const;
113 inline const Amg::Transform3D& getNativeToAmdbLRS() const;
115 inline const Amg::Transform3D& getNominalAmdbLRSToGlobal() const;
116 inline double getALine_tras() const;
117 inline double getALine_traz() const;
118 inline double getALine_trat() const;
119 inline double getALine_rots() const;
120 inline double getALine_rotz() const;
121 inline double getALine_rott() const;
122 inline bool hasALines() const;
123 inline bool hasBLines() const;
124 inline bool hasMdtAsBuiltParams() const;
125 const MdtAsBuiltPar* getMdtAsBuiltParams() const;
126 void setMdtAsBuiltParams(const MdtAsBuiltPar* xtomo);
127
128 void setPhysVol(const PVLink& vol);
129 PVConstLink getPhysVol() const;
130 PVLink getPhysVol();
131
132 void setMdtRsize(const double rSize);
133 void setMdtZsize(const double zSize);
134
135 private:
136 // Declaring private message stream member.
138
139 std::string m_statname{};
140 double m_Ssize{0.};
141 double m_Rsize{0.};
142 double m_Zsize{0.};
143 double m_LongSsize{0.};
144 double m_LongRsize{0.};
145 double m_LongZsize{0.};
146 double m_xAmdbCRO{0.};
147 bool m_descratzneg{false};
150 std::string m_key{};
151 GeoAlignableTransform* m_transform{nullptr};
152
153 Amg::Transform3D m_delta_amdb_frame{Amg::Transform3D::Identity()};
154 Amg::Transform3D m_native_to_amdbl{Amg::Transform3D::Identity()};
155 Amg::Transform3D m_amdbl_to_global{Amg::Transform3D::Identity()}; // nominal
156 double m_rots{0.};
157 double m_rotz{0.};
158 double m_rott{0.};
159 bool m_hasALines{false};
160 bool m_hasBLines{false};
162 const MdtAsBuiltPar* m_XTomoData{nullptr};
163
164 using pairRE_AlignTransf = std::pair<MuonReadoutElement*, GeoAlignableTransform*>;
165 std::map<int, pairRE_AlignTransf> m_REwithAlTransfInStation{};
167 PVLink m_physVol{nullptr};
168
171 };
172
175 std::string MuonStation::getStationType() const { return m_statname.substr(0, 3); }
176 const std::string& MuonStation::getStationName() const { return m_statname; }
177
178 const GeoAlignableTransform* MuonStation::getGeoTransform() const { return m_transform; }
179
180 Amg::Transform3D MuonStation::getTransform() const { return m_transform->getTransform(); }
181
182 const std::string& MuonStation::getKey() const { return m_key; }
183
184 double MuonStation::Rsize() const { return m_Rsize; }
185 double MuonStation::Ssize() const { return m_Ssize; }
186 double MuonStation::Zsize() const { return m_Zsize; }
187 double MuonStation::LongRsize() const { return m_LongRsize; }
188 double MuonStation::LongSsize() const { return m_LongSsize; }
189 double MuonStation::LongZsize() const { return m_LongZsize; }
190
191 double MuonStation::xAmdbCRO() const { return m_xAmdbCRO; }
192
194
196
198
200
201 double MuonStation::getALine_tras() const { return m_delta_amdb_frame.translation()[0]; }
202 double MuonStation::getALine_traz() const { return m_delta_amdb_frame.translation()[1]; }
203 double MuonStation::getALine_trat() const { return m_delta_amdb_frame.translation()[2]; }
204 double MuonStation::getALine_rots() const { return m_rots; }
205 double MuonStation::getALine_rotz() const { return m_rotz; }
206 double MuonStation::getALine_rott() const { return m_rott; }
207 bool MuonStation::hasALines() const { return m_hasALines; }
208 bool MuonStation::hasBLines() const { return m_hasBLines; }
209 bool MuonStation::hasMdtAsBuiltParams() const { return m_XTomoData != nullptr; }
210
211} // namespace MuonGM
212
213#endif
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
Cached value with atomic update.
static Double_t s0
static Double_t a
static Double_t t0
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
Cached value with atomic update.
Definition CachedValue.h:55
Container classifier the MDT as-built parameters See parameter description in http://atlas-muon-align...
Base class for the XxxReadoutElement, with Xxx = Mdt, Rpc, Tgc, Csc.
double Zsize() const
void setBlineFixedPointInAmdbLRS(double s0, double z0, double t0)
GeoAlignableTransform * m_transform
double getALine_trat() const
PVConstLink getPhysVol() const
Amg::Transform3D m_delta_amdb_frame
const Amg::Transform3D & getNativeToAmdbLRS() const
int getEtaIndex() const
a la AMDB
const Amg::Transform3D & getNominalAmdbLRSToGlobal() const
double xAmdbCRO() const
void setEtaPhiIndices(int eta, int phi)
a la AMDB
void updateBlineFixedPointInAmdbLRS()
double LongSsize() const
double ZsizeMdtStation() const
void setDeltaAmdbLRS(Amg::Transform3D xf)
set the delta transform in the amdb frame and update the geoModel Delta
int getPhiIndex() const
a la AMDB
double LongZsize() const
const std::string & getKey() const
bool hasBLines() const
const std::string & getStationName() const
like BMS5, T1F1, CSL1
MuonStation(std::string_view stName, double Ssize, double Rsize, double Zsize, double LongSsize, double LongRsize, double LongZsize, int zi, int fi, bool m_descratzneg)
std::string getStationType() const
like BMS, T1F, CSL
void setNominalAmdbLRSToGlobal(Amg::Transform3D xf)
void setxAmdbCRO(double xpos)
std::string m_statname
void setMdtAsBuiltParams(const MdtAsBuiltPar *xtomo)
void setDelta_fromAline(double, double, double, double, double, double)
set the delta transform in the amdb frame and update the geoModel Delta
void setMdtRsize(const double rSize)
double Ssize() const
double getALine_rott() const
int nMuonReadoutElements() const
double getALine_rots() const
Amg::Transform3D m_native_to_amdbl
const GeoAlignableTransform * getGeoTransform() const
const Amg::Vector3D & getBlineFixedPointInAmdbLRS() const
Amg::Vector3D m_BlineFixedPointInAmdbLRS
void setTransform(GeoAlignableTransform *xf)
CxxUtils::CachedValue< double > m_mdtRsize
const MdtAsBuiltPar * getMdtAsBuiltParams() const
std::map< int, pairRE_AlignTransf > m_REwithAlTransfInStation
keep track of the REs in this station
bool hasALines() const
void addMuonReadoutElementWithAlTransf(MuonReadoutElement *a, GeoAlignableTransform *ptrsf, int jobIndex)
GeoAlignableTransform * getComponentAlTransf(int jobIndex) const
void setPhysVol(const PVLink &vol)
PVLink m_physVol
Link the full physical volume associated with the station.
Amg::Transform3D getTransform() const
void setNativeToAmdbLRS(Amg::Transform3D xf)
double getALine_tras() const
double RsizeMdtStation() const
void setMdtZsize(const double zSize)
double LongRsize() const
double getALine_rotz() const
void setBline(const BLinePar *bline)
const MuonReadoutElement * getMuonReadoutElement(int jobIndex) const
CxxUtils::CachedValue< double > m_mdtZsize
Amg::Transform3D getAmdbLRSToGlobal() const
bool hasMdtAsBuiltParams() const
double getALine_traz() const
void setDelta_fromAline_forComp(int, double, double, double, double, double, double)
Amg::Transform3D m_amdbl_to_global
double Rsize() const
std::pair< MuonReadoutElement *, GeoAlignableTransform * > pairRE_AlignTransf
const MdtAsBuiltPar * m_XTomoData
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the Athena extensions are properly loaded.
Definition GeoMuonHits.h:27