ATLAS Offline Software
MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef MUONREADOUTGEOMETRY_STGCREADOUTELEMENT_H
6 #define MUONREADOUTGEOMETRY_STGCREADOUTELEMENT_H
7 
8 #include <string>
9 #include <utility>
10 
18 
19 
20 namespace MuonGMR4 {
21  class ReadoutGeomCnvAlg;
22 }
23 
24 namespace MuonGM {
31  public:
33 
35  sTgcReadoutElement(GeoVFullPhysVol* pv,
36  const std::string& stName,
37  int zi, int fi, int mL, MuonDetectorManager* mgr);
38 
41 
43  virtual bool containsId(const Identifier& id) const override final;
44 
47  virtual double distanceToReadout(const Amg::Vector2D& pos, const Identifier& id) const override final;
48 
51  virtual int stripNumber(const Amg::Vector2D& pos, const Identifier& id) const override final;
52 
55  double channelPitch(const Identifier& id) const;
56 
59  virtual bool stripPosition(const Identifier& id, Amg::Vector2D& pos) const override final;
60 
61  bool stripGlobalPosition(const Identifier& id, Amg::Vector3D& gpos) const;
62 
64  int padNumber(const Amg::Vector2D& pos, const Identifier& id) const;
65 
67  int wireNumber(const Amg::Vector2D& pos, const Identifier& id) const;
68 
72  double wirePitch(int gas_gap = 1) const;
73 
75  double positionFirstWire(const Identifier& id) const;
76 
78  int numberOfWires(const Identifier& id) const;
79 
81  bool padPosition(const Identifier& id, Amg::Vector2D& pos) const;
82 
84  bool padGlobalPosition(const Identifier& id, Amg::Vector3D& gpos) const;
85 
87  bool padCorners(const Identifier& id, std::array<Amg::Vector2D,4>& corners) const;
88 
90  bool padGlobalCorners(const Identifier& id, std::array<Amg::Vector3D, 4>& gcorners) const;
91 
95  bool isEtaZero(const Identifier& id, const Amg::Vector2D& localPosition) const;
96 
98  virtual int numberOfLayers(bool) const override final;
99 
101  virtual int numberOfStrips(const Identifier& layerId) const override final;
102  virtual int numberOfStrips(int, bool measuresPhi) const override final;
103 
105  int numberOfPads(const Identifier& layerId) const;
106 
109  int maxPadNumber(const Identifier& layerId) const;
110 
115  virtual bool spacePointPosition(const Identifier& phiId, const Identifier& etaId, Amg::Vector2D& pos) const override final;
116 
120  virtual bool spacePointPosition(const Identifier& phiId, const Identifier& etaId, Amg::Vector3D& pos) const override final;
121 
125  void spacePointPosition(const Amg::Vector2D& phiPos, const Amg::Vector2D& etaPos, Amg::Vector2D& pos) const;
126 
133  void spacePointPosition(const Identifier& layerId, double locXpos, double locYpos, Amg::Vector3D& pos) const;
134 
137 
139  virtual void fillCache() override final;
140 
142  virtual int surfaceHash(const Identifier& id) const override final;
143 
145  int surfaceHash(int gasGap, int channelType) const;
146 
148  virtual int layerHash(const Identifier& id) const override;
149 
151  // int layerHash( int gasGap) const; // does not fit in the scheme ( layer hash needs to follow surface hash )
152 
154  virtual int boundaryHash(const Identifier& id) const override final;
155 
157  virtual bool measuresPhi(const Identifier& id) const override final;
158 
160  void initDesign(double thickness);
161 
164 
166  const MuonChannelDesign* getDesign(int gasGap, int channelType) const;
167 
171 
174 
176  void setChamberLayer(int ml) { m_ml = ml; }
177 
178  // double getSectorOpeningAngle(bool isLargeSector);
179 
182  const Amg::Transform3D& getDelta() const { return m_delta; }
183  void setDelta(const ALinePar& aline);
184 
186  void setBLinePar(const BLinePar& bLine);
187 
189  void posOnDefChamber(Amg::Vector3D& locPosML) const;
190 
191  bool has_ALines() const { return (m_ALinePar != nullptr); }
192  bool has_BLines() const { return (m_BLinePar != nullptr); }
193  const ALinePar* getALinePar() const { return m_ALinePar; }
194  const BLinePar* getBLinePar() const { return m_BLinePar; }
195  void clearALinePar();
196  void clearBLinePar() { m_BLinePar = nullptr; }
197 
198  // Amdb local (szt) to global coord
199  virtual Amg::Vector3D AmdbLRSToGlobalCoords(const Amg::Vector3D& x) const override final { return AmdbLRSToGlobalTransform()*x; }
201  // Global to Amdb local (szt) coord
202  virtual Amg::Vector3D GlobalToAmdbLRSCoords(const Amg::Vector3D& x) const override final { return GlobalToAmdbLRSTransform()*x; }
203  virtual Amg::Transform3D GlobalToAmdbLRSTransform() const override final { return AmdbLRSToGlobalTransform().inverse(); }
204 
205  static double triggerBandIdToRadius(bool isLarge, int triggerBand);
206 
207  private:
208 
209  void initDesignFromSQLite(double thickness);
210 
211  void initDesignFromAGDD(double thickness);
212 
214  std::array<MuonChannelDesign,4> m_phiDesign{};
215  std::array<MuonChannelDesign,4> m_etaDesign{};
216  std::array<MuonPadDesign,4> m_padDesign{};
217 
218  static constexpr int m_nlayers{4};
219  int m_ml{0};
220  double m_offset{0.};
221 
222  bool m_diamondShape{false};
223  const ALinePar* m_ALinePar{nullptr};
224  const BLinePar* m_BLinePar{nullptr};
225  Amg::Transform3D m_delta{Amg::Transform3D::Identity()};
226 
227  // transforms (RE->layer)
228  std::array<Amg::Transform3D, 4> m_Xlg{make_array<Amg::Transform3D, 4>(Amg::Transform3D::Identity())};
229 
230 
231  // The radial positions of the trigger bands cannot be derived from the readout geometry, therefore hard-coding them for now
232  //Position of Band IDs for Large sectors
233  static constexpr std::array<double, 94> LBANDIDSP = {
234  10, 10, 10, 10, 10, 10, 1156.72, 1187.98, 1231.87, 1271.34, 1312.87, 1354.56, 1396.38, 1438.07,
235  1479.73, 1521.44, 1563.11, 1604.8, 1646.48, 1688.02, 1729.84, 1771.51, 1813.2, 1854.89, 1896.57, 1938.26, 1979.93, 2021.61,
236  2063.14, 2104.98, 2146.55, 2181.64, 2209.01, 2251.65, 2282.54, 2313.27, 2356.24, 2396.73, 2438.29, 2480.09, 2521.75, 2563.46,
237  2605.11, 2646.85, 2688.48, 2730.19, 2771.86, 2813.41, 2855.21, 2896.93, 2938.61, 2980.26, 3021.95, 3063.63, 3105.31, 3146.98,
238  3188.85, 3230.37, 3272.05, 3313.77, 3353.77, 3376.19, 3426.09, 3464.49, 3506.78, 3563.91, 3589.03, 3626.17, 3667.84, 3709.56,
239  3751.33, 3792.92, 3834.58, 3876.27, 3917.9, 3959.62, 4001.29, 4043.03, 4084.66, 4126.39, 4168.05, 4209.74, 4251.38, 4293.16,
240  4334.72, 4376.47, 4417.54, 4459.75, 4496.31, 4543.27, 4584.77, 4626.47, 4668.25, 4701.14
241  };
242 
243  //Position of Band IDs for Small Sector
244  static constexpr std::array<double, 92> SBANDIDSP = {
245  10.0, 10.0, 958.077, 998.248, 1037.405, 1076.535, 1115.69, 1154.82, 1193.97, 1233.135, 1272.265, 1311.395,
246  1350.59, 1389.705, 1428.865, 1468.01, 1507.175, 1546.305, 1585.435, 1624.58, 1663.71, 1702.895, 1742.055,
247  1781.165, 1820.315, 1859.44, 1898.575, 1937.75, 1976.885, 2016.04, 2055.15, 2094.345, 2136.125, 2172.61,
248  2217.68, 2255.125, 2316.115, 2348.91, 2388.06, 2427.245, 2466.385, 2505.515, 2544.69, 2583.8, 2622.99,
249  2662.115, 2701.31, 2740.395, 2779.55, 2818.715, 2857.905, 2897.0, 2936.185, 2975.315, 3014.47, 3053.615,
250  3092.775, 3131.895, 3171.075, 3210.225, 3249.375, 3288.485, 3317.74, 3347.075, 3396.65, 3440.175, 3475.575,
251  3540.81, 3581.97, 3621.13, 3660.285, 3699.41, 3738.535, 3777.73, 3816.89, 3856.055, 3895.105, 3934.3, 3974.34,
252  4012.565, 4051.71, 4090.865, 4130.04, 4169.145, 4208.285, 4247.55, 4286.65, 4320.075, 4364.84, 4404.12, 4443.14, 4482.29
253  };
254 
255  };
256 
257  inline int sTgcReadoutElement::surfaceHash(const Identifier& id) const {
259  }
260 
261  inline int sTgcReadoutElement::surfaceHash(int gasGap, int channelType) const {
262  return (gasGap - 1) * 3 + (2 - channelType); // assumes channelType=2 (wires), 1(strips), 0(pads)
263  }
264 
265  inline int sTgcReadoutElement::layerHash(const Identifier& id) const {
266  return surfaceHash(id); // don't have a choice here : rewrite MuonClusterReadoutElement first
267  }
268 
269  inline int sTgcReadoutElement::boundaryHash(const Identifier& id) const {
270  int iphi = m_idHelper.channelType(id) != sTgcIdHelper::sTgcChannelTypes::Strip; // wires and pads have locX oriented along phi
271  if (std::abs(getStationEta()) < 3) iphi += 2 * (m_idHelper.gasGap(id) - 1);
272  return iphi;
273  }
274 
275  inline bool sTgcReadoutElement::measuresPhi(const Identifier& id) const {
276  return (m_idHelper.channelType(id) != sTgcIdHelper::sTgcChannelTypes::Strip);
277  }
278 
280  if (m_idHelper.channelType(id) == sTgcIdHelper::sTgcChannelTypes::Strip) return &(m_etaDesign[m_idHelper.gasGap(id) - 1]);
281  if (m_idHelper.channelType(id) == sTgcIdHelper::sTgcChannelTypes::Wire) return &(m_phiDesign[m_idHelper.gasGap(id) - 1]);
282  return nullptr;
283  }
284 
286  if (m_idHelper.channelType(id) == sTgcIdHelper::sTgcChannelTypes::Pad) return &(m_padDesign[m_idHelper.gasGap(id) - 1]);
287  return nullptr;
288  }
289 
291  if (m_idHelper.channelType(id) == sTgcIdHelper::sTgcChannelTypes::Pad) return &(m_padDesign[m_idHelper.gasGap(id) - 1]);
292  return nullptr;
293  }
294 
295  inline const MuonChannelDesign* sTgcReadoutElement::getDesign(int gasGap, int channelType) const {
296  if (channelType == 1) return &(m_etaDesign[gasGap - 1]);
297  if (channelType == 2) return &(m_phiDesign[gasGap - 1]);
298  return 0;
299  }
300 
301  inline const MuonPadDesign* sTgcReadoutElement::getPadDesign(int gasGap) const { return &(m_padDesign[gasGap - 1]); }
302 
303  inline double sTgcReadoutElement::distanceToReadout(const Amg::Vector2D& pos, const Identifier& id) const {
304  const MuonChannelDesign* design = getDesign(id);
305  if (!design) return -10000.;
306  return design->distanceToReadout(pos);
307  }
308 
309  inline int sTgcReadoutElement::stripNumber(const Amg::Vector2D& pos, const Identifier& id) const {
310  if (m_idHelper.channelType(id) == sTgcIdHelper::sTgcChannelTypes::Pad) return padNumber(pos, id);
311 
312  const MuonChannelDesign* design = getDesign(id);
313  if (!design) {
314  ATH_MSG_WARNING("Cannot associate the strip number for "<<Amg::toString(pos)<<" in layer "
315  <<idHelperSvc()->toStringGasGap(id));
316  return -1;
317  }
318  return design->channelNumber(pos);
319  }
320 
322  if (m_idHelper.channelType(id) == sTgcIdHelper::sTgcChannelTypes::Pad) return padPosition(id, pos);
323 
324  const MuonChannelDesign* design = getDesign(id);
325  if (!design) {
326  ATH_MSG_WARNING("Cannot determine the strip postion for "<<idHelperSvc()->toString(id));
327  return false;
328  }
329  return design->center(m_idHelper.channel(id), pos);
330  }
331 
334  if (!stripPosition(id, lpos)) return false;
335  surface(id).localToGlobal(lpos, Amg::Vector3D::Zero(), gpos);
336  return true;
337  }
338 
340  const MuonPadDesign* design = getPadDesign(id);
341  if (!design){
342  ATH_MSG_WARNING("Cannot determine the pad position for "<<idHelperSvc()->toString(id));
343  return false;
344  }
345  int padEta = m_idHelper.padEta(id);
346  int padPhi = m_idHelper.padPhi(id);
347 
348  return design->channelPosition(std::make_pair(padEta, padPhi), pos);
349  }
350 
351  inline bool sTgcReadoutElement::padGlobalPosition(const Identifier& id, Amg::Vector3D& gpos) const {
353  if (!padPosition(id, lpos)) return false;
354  surface(id).localToGlobal(lpos, Amg::Vector3D::Zero(), gpos);
355  return true;
356  }
357 
358  inline bool sTgcReadoutElement::padCorners(const Identifier& id, std::array<Amg::Vector2D, 4>& corners) const {
359  const MuonPadDesign* design = getPadDesign(id);
360  if (!design) {
361  ATH_MSG_WARNING("Cannot find the pad corners for "<<idHelperSvc()->toString(id));
362  return false;
363  }
364  int padEta = m_idHelper.padEta(id);
365  int padPhi = m_idHelper.padPhi(id);
366 
367  return design->channelCorners(std::make_pair(padEta, padPhi), corners);
368  }
369 
370  inline bool sTgcReadoutElement::padGlobalCorners(const Identifier& id, std::array<Amg::Vector3D, 4>& gcorners) const {
371  std::array<Amg::Vector2D,4> lcorners{make_array<Amg::Vector2D, 4>(Amg::Vector2D::Zero())};
372  if (!padCorners(id, lcorners)) {
373  return false;
374  }
375  for (size_t c = 0; c < lcorners.size() ; ++c) {
376  surface(id).localToGlobal(lcorners[c], Amg::Vector3D::Zero(), gcorners[c]);
377  }
378  return true;
379  }
380 
381  // This function returns true if we are in the eta 0 region of QL1/QS1
382  inline bool sTgcReadoutElement::isEtaZero(const Identifier& id, const Amg::Vector2D& localPosition) const {
383  // False if not a QL1 or QS1 quadruplet
384  if (std::abs(m_idHelper.stationEta(id)) != 1) return false;
385  const MuonChannelDesign* wireDesign = (m_idHelper.channelType(id) == sTgcIdHelper::sTgcChannelTypes::Wire) ?
386  getDesign(id) :
389  m_idHelper.gasGap(id),
390  sTgcIdHelper::sTgcChannelTypes::Wire,
391  1));
392  if (!wireDesign) {
393  ATH_MSG_WARNING("Cannot determine whether the pos "<<Amg::toString(localPosition)<<" is etaZero() for "
394  <<idHelperSvc()->toString(id));
395  return false;
396  }
397 
398  // Require the x coordinate for strips, and the y coordinate for wires and pads
399  double lpos = (m_idHelper.channelType(id) == sTgcIdHelper::sTgcChannelTypes::Strip) ?
400  localPosition.x() : localPosition.y();
401  if (lpos < 0.5 * wireDesign->xSize() - wireDesign->wireCutout) return true;
402 
403  return false;
404  }
405 
406  inline int sTgcReadoutElement::numberOfLayers(bool) const { return m_nlayers; }
407 
408  inline int sTgcReadoutElement::numberOfStrips(const Identifier& layerId) const {
409  return numberOfStrips(m_idHelper.gasGap(layerId) - 1,
410  m_idHelper.channelType(layerId) == sTgcIdHelper::sTgcChannelTypes::Wire);
411  }
412 
413  inline int sTgcReadoutElement::numberOfStrips(int lay, bool measPhi) const {
414  if (lay > -1 && lay < m_nlayers) { return !measPhi ? m_etaDesign[lay].nch : m_phiDesign[lay].nGroups; }
415  return -1;
416  }
417 
418  inline int sTgcReadoutElement::numberOfPads(const Identifier& layerId) const {
419  const MuonPadDesign* design = getPadDesign(layerId);
420  if (!design) {
421  ATH_MSG_WARNING("no pad design found when trying to get the number of pads "<<idHelperSvc()->toString(layerId));
422  return 0;
423  }
424  return design->nPadColumns * design->nPadH;
425  }
426 
427  inline int sTgcReadoutElement::maxPadNumber(const Identifier& layerId) const {
428  const MuonPadDesign* design = getPadDesign(layerId);
429  if (!design) {
430  ATH_MSG_WARNING("no pad design found when trying to get the largest pad number "<<idHelperSvc()->toString(layerId));
431  return 0;
432  }
433  return (design->nPadColumns - 1) * m_idHelper.padEtaMax() + design->nPadH;
434  }
435 
436  inline bool sTgcReadoutElement::spacePointPosition(const Identifier& phiId, const Identifier& etaId, Amg::Vector2D& pos) const {
438  if (!stripPosition(phiId, phiPos) || !stripPosition(etaId, etaPos)) return false;
439  spacePointPosition(phiPos, etaPos, pos);
440  return true;
441  }
442 
443  inline bool sTgcReadoutElement::spacePointPosition(const Identifier& phiId, const Identifier& etaId, Amg::Vector3D& pos) const {
445  spacePointPosition(phiId, etaId, lpos);
446  surface(phiId).localToGlobal(lpos, pos, pos);
447  return true;
448  }
449 
450  inline void sTgcReadoutElement::spacePointPosition(const Amg::Vector2D& phiPos, const Amg::Vector2D& etaPos, Amg::Vector2D& pos) const {
451  pos[0] = phiPos.x();
452  pos[1] = etaPos.x();
453  }
454 
455 
456  inline double sTgcReadoutElement::triggerBandIdToRadius(bool isLarge, int triggerBand) {
457  if(isLarge){
458  return LBANDIDSP[triggerBand];
459  } else {
460  return SBANDIDSP[triggerBand];
461  }
462  };
463 
464 } // namespace MuonGM
465 
466 #endif // MUONREADOUTGEOMETRY_STGCREADOUTELEMENT_H
MuonGM::sTgcReadoutElement::padCorners
bool padCorners(const Identifier &id, std::array< Amg::Vector2D, 4 > &corners) const
pad corners
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:358
MuonGM::sTgcReadoutElement::initDesignFromAGDD
void initDesignFromAGDD(double thickness)
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:272
sTgcIdHelper::multilayer
int multilayer(const Identifier &id) const
Definition: sTgcIdHelper.cxx:1017
MuonGM::MuonPadDesign
Parameters defining the design of the readout sTGC pads.
Definition: MuonPadDesign.h:40
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
MuonGM
Ensure that the Athena extensions are properly loaded.
Definition: GeoMuonHits.h:27
Muon::IMuonIdHelperSvc::stgcIdHelper
virtual const sTgcIdHelper & stgcIdHelper() const =0
access to TgcIdHelper
MuonGM::MuonReadoutElement::absTransform
const Amg::Transform3D & absTransform() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:210
MuonGM::MuonPadDesign::channelPosition
bool channelPosition(const std::pair< int, int > &pad, Amg::Vector2D &pos) const
calculate local channel position for a given channel number
Definition: MuonPadDesign.cxx:112
sTgcIdHelper.h
MuonGM::sTgcReadoutElement::m_ALinePar
const ALinePar * m_ALinePar
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:223
MuonGM::sTgcReadoutElement::sTgcReadoutElement
sTgcReadoutElement(GeoVFullPhysVol *pv, const std::string &stName, int zi, int fi, int mL, MuonDetectorManager *mgr)
constructor
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:58
MuonGM::sTgcReadoutElement::numberOfStrips
virtual int numberOfStrips(const Identifier &layerId) const override final
number of strips per layer
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:408
MuonGM::sTgcReadoutElement::wireNumber
int wireNumber(const Amg::Vector2D &pos, const Identifier &id) const
wire number corresponding to local position
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:642
MuonGM::sTgcReadoutElement::getDelta
const Amg::Transform3D & getDelta() const
read A-line parameters and include the chamber rotation/translation in the local-to-global (ATLAS) re...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:182
ALinePar
Definition: ALinePar.h:15
MuonGM::MuonChannelDesign::channelNumber
int channelNumber(const Amg::Vector2D &pos) const
calculate local channel number, range 1=nstrips like identifiers. Returns -1 if out of range
Definition: MuonChannelDesign.h:198
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
sTgcIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channelType, int channel) const
Definition: sTgcIdHelper.cxx:886
MuonGM::sTgcReadoutElement::m_BLinePar
const BLinePar * m_BLinePar
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:224
MuonGM::sTgcReadoutElement::measuresPhi
virtual bool measuresPhi(const Identifier &id) const override final
returns whether the current identifier corresponds to a phi measurement
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:275
MuonGM::sTgcReadoutElement::m_delta
Amg::Transform3D m_delta
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:225
MuonGM::sTgcReadoutElement::getDesign
const MuonChannelDesign * getDesign(const Identifier &id) const
returns the MuonChannelDesign class for the given identifier
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:279
MuonGM::sTgcReadoutElement::AmdbLRSToGlobalCoords
virtual Amg::Vector3D AmdbLRSToGlobalCoords(const Amg::Vector3D &x) const override final
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:199
MuonGM::sTgcReadoutElement::initDesign
void initDesign(double thickness)
initialize the design classes for this readout element
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:423
MuonGM::MuonChannelDesign::wireCutout
double wireCutout
Definition: MuonChannelDesign.h:41
MuonGM::MuonChannelDesign::distanceToReadout
double distanceToReadout(const Amg::Vector2D &pos) const
distance to readout
Definition: MuonChannelDesign.h:190
MuonGM::sTgcReadoutElement::isEtaZero
bool isEtaZero(const Identifier &id, const Amg::Vector2D &localPosition) const
is eta=0 of QL1 or QS1? Support for Strip and Pad cathodes is valid when the Strip,...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:382
MuonGM::sTgcReadoutElement::has_ALines
bool has_ALines() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:191
MuonGM::sTgcReadoutElement::maxPadNumber
int maxPadNumber(const Identifier &layerId) const
Get largest pad number, which is different to the number of pads in a gas volume due to the pad numbe...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:427
MuonGM::sTgcReadoutElement::numberOfWires
int numberOfWires(const Identifier &id) const
Get the total number of wires (single wires) of a chamber.
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:680
MuonGM::sTgcReadoutElement::numberOfPads
int numberOfPads(const Identifier &layerId) const
Get the number of pad per layer.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:418
MuonGM::sTgcReadoutElement::spacePointPosition
virtual bool spacePointPosition(const Identifier &phiId, const Identifier &etaId, Amg::Vector2D &pos) const override final
space point position for a given pair of phi and eta identifiers The LocalPosition is expressed in th...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:436
MuonGM::sTgcReadoutElement::m_offset
double m_offset
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:220
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
MuonGM::sTgcReadoutElement::getBLinePar
const BLinePar * getBLinePar() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:194
MuonGM::sTgcReadoutElement::m_padDesign
std::array< MuonPadDesign, 4 > m_padDesign
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:216
x
#define x
MuonGM::sTgcReadoutElement::initDesignFromSQLite
void initDesignFromSQLite(double thickness)
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:77
MuonGM::sTgcReadoutElement::triggerBandIdToRadius
static double triggerBandIdToRadius(bool isLarge, int triggerBand)
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:456
MuonGM::MuonClusterReadoutElement::surface
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
Definition: MuonClusterReadoutElement.h:123
MuonGM::sTgcReadoutElement::fillCache
virtual void fillCache() override final
function to fill tracking cache
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:455
MuonGM::sTgcReadoutElement::padGlobalCorners
bool padGlobalCorners(const Identifier &id, std::array< Amg::Vector3D, 4 > &gcorners) const
pad global corners
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:370
MuonGM::sTgcReadoutElement::stripPosition
virtual bool stripPosition(const Identifier &id, Amg::Vector2D &pos) const override final
strip position - should be renamed to channel position If the strip number is outside the range of va...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:321
MuonGM::sTgcReadoutElement::padNumber
int padNumber(const Amg::Vector2D &pos, const Identifier &id) const
pad number corresponding to local position
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:600
MuonGM::MuonPadDesign::nPadH
int nPadH
Definition: MuonPadDesign.h:68
MuonGM::MuonReadoutElement::idHelperSvc
const Muon::IMuonIdHelperSvc * idHelperSvc() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:136
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
MuonGM::sTgcReadoutElement::has_BLines
bool has_BLines() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:192
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
MuonGMR4
The ReadoutGeomCnvAlg converts the Run4 Readout geometry build from the GeoModelXML into the legacy M...
Definition: MdtCalibInput.h:20
sTgcIdHelper::channel
int channel(const Identifier &id) const override
Definition: sTgcIdHelper.cxx:1027
MuonGM::sTgcReadoutElement::GlobalToAmdbLRSTransform
virtual Amg::Transform3D GlobalToAmdbLRSTransform() const override final
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:203
MuonGM::sTgcReadoutElement::padGlobalPosition
bool padGlobalPosition(const Identifier &id, Amg::Vector3D &gpos) const
pad global position
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:351
MuonGM::sTgcReadoutElement::surfaceHash
virtual int surfaceHash(const Identifier &id) const override final
returns the hash to be used to look up the surface and transform in the MuonClusterReadoutElement tra...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:257
MuonGM::sTgcReadoutElement::LBANDIDSP
static constexpr std::array< double, 94 > LBANDIDSP
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:233
MuonGM::sTgcReadoutElement::m_diamondShape
bool m_diamondShape
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:222
MuonGM::sTgcReadoutElement::posOnDefChamber
void posOnDefChamber(Amg::Vector3D &locPosML) const
transform a position (in chamber-frame coordinates) to the deformed-chamber geometry
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:747
MuonGM::sTgcReadoutElement
An sTgcReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station c...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:30
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
sTgcIdHelper::gasGap
int gasGap(const Identifier &id) const override
get the hashes
Definition: sTgcIdHelper.cxx:1020
MuonGM::sTgcReadoutElement::padPosition
bool padPosition(const Identifier &id, Amg::Vector2D &pos) const
pad position
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:339
MuonGM::sTgcReadoutElement::setDelta
void setDelta(const ALinePar &aline)
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:716
MuonClusterReadoutElement.h
BLinePar
Definition: BLinePar.h:14
MuonGM::sTgcReadoutElement::setChamberLayer
void setChamberLayer(int ml)
set methods only to be used by MuonGeoModel
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:176
MuonGM::sTgcReadoutElement::channelPitch
double channelPitch(const Identifier &id) const
Channel pitch.
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:578
MuonGM::sTgcReadoutElement::clearALinePar
void clearALinePar()
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:732
MuonGM::sTgcReadoutElement::m_Xlg
std::array< Amg::Transform3D, 4 > m_Xlg
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:228
MuonGM::MuonChannelDesign::center
bool center(int channel, Amg::Vector2D &pos) const
STRIPS ONLY: Returns the center on the strip.
Definition: MuonChannelDesign.h:484
MuonGM::sTgcReadoutElement::containsId
virtual bool containsId(const Identifier &id) const override final
function to be used to check whether a given Identifier is contained in the readout element
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:556
sTgcIdHelper::padEtaMax
static int padEtaMax()
Definition: sTgcIdHelper.cxx:1056
MuonGM::sTgcReadoutElement::SBANDIDSP
static constexpr std::array< double, 92 > SBANDIDSP
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:244
MuonPadDesign.h
MuonGM::sTgcReadoutElement::numberOfLayers
virtual int numberOfLayers(bool) const override final
number of layers in phi/eta projection
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:406
MuonGM::sTgcReadoutElement::AmdbLRSToGlobalTransform
virtual Amg::Transform3D AmdbLRSToGlobalTransform() const override final
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:200
MuonGM::sTgcReadoutElement::m_nlayers
static constexpr int m_nlayers
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:218
MuonGM::sTgcReadoutElement::stripGlobalPosition
bool stripGlobalPosition(const Identifier &id, Amg::Vector3D &gpos) const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:332
MuonGM::sTgcReadoutElement::m_idHelper
const sTgcIdHelper & m_idHelper
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:213
sTgcIdHelper
Definition: sTgcIdHelper.h:55
MuonIdHelper::stationEta
int stationEta(const Identifier &id) const
Definition: MuonIdHelper.cxx:805
MuonGM::MuonPadDesign::nPadColumns
int nPadColumns
Definition: MuonPadDesign.h:69
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonDetectorManager.h
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
MuonGMR4::ReadoutGeomCnvAlg
Definition: ReadoutGeomCnvAlg.h:32
MuonChannelDesign.h
MuonGM::MuonClusterReadoutElement
Definition: MuonClusterReadoutElement.h:21
MuonGM::MuonChannelDesign
Definition: MuonChannelDesign.h:24
MuonGM::sTgcReadoutElement::stripNumber
virtual int stripNumber(const Amg::Vector2D &pos, const Identifier &id) const override final
strip number corresponding to local position.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:309
sTgcIdHelper::padPhi
int padPhi(const Identifier &id) const
Definition: sTgcIdHelper.cxx:679
MuonGM::sTgcReadoutElement::m_phiDesign
std::array< MuonChannelDesign, 4 > m_phiDesign
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:214
MuonGM::sTgcReadoutElement::getALinePar
const ALinePar * getALinePar() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:193
MuonGM::MuonPadDesign::channelCorners
bool channelCorners(const std::pair< int, int > &pad, CornerArray &corners) const
Definition: MuonPadDesign.cxx:157
MuonGM::MuonDetectorManager
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:50
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
MuonGM::sTgcReadoutElement::boundaryHash
virtual int boundaryHash(const Identifier &id) const override final
returns the hash to be used to look up the normal and center in the MuonClusterReadoutElement trackin...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:269
MuonGM::sTgcReadoutElement::setBLinePar
void setBLinePar(const BLinePar &bLine)
read B-line (chamber-deformation) parameters
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:741
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
MuonGM::sTgcReadoutElement::positionFirstWire
double positionFirstWire(const Identifier &id) const
Get the local position of the first wire of the chamber corresponding to the identifier.
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:663
python.changerun.pv
pv
Definition: changerun.py:81
GeoPrimitivesToStringConverter.h
checkFileSG.fi
fi
Definition: checkFileSG.py:65
MuonGM::sTgcReadoutElement::m_ml
int m_ml
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:219
sTgcIdHelper::padEta
int padEta(const Identifier &id) const
Definition: sTgcIdHelper.cxx:669
MuonGM::sTgcReadoutElement::GlobalToAmdbLRSCoords
virtual Amg::Vector3D GlobalToAmdbLRSCoords(const Amg::Vector3D &x) const override final
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:202
MuonGM::sTgcReadoutElement::m_etaDesign
std::array< MuonChannelDesign, 4 > m_etaDesign
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:215
MuonGM::sTgcReadoutElement::getPadDesign
const MuonPadDesign * getPadDesign(const Identifier &id) const
returns the MuonChannelDesign class for the given identifier
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:285
MuonGM::sTgcReadoutElement::wirePitch
double wirePitch(int gas_gap=1) const
single wire pitch.
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:653
MuonGM::sTgcReadoutElement::localToGlobalCoords
Amg::Vector3D localToGlobalCoords(const Amg::Vector3D &locPos, Identifier id) const
simHit local (SD) To Global position - to be used by MuonGeoAdaprors only
Definition: MuonDetDescr/MuonReadoutGeometry/src/sTgcReadoutElement.cxx:697
Trk::PlaneSurface::localToGlobal
virtual void localToGlobal(const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const override final
Specified for PlaneSurface: LocalToGlobal method without dynamic memory allocation.
Definition: PlaneSurface.cxx:204
MuonGM::sTgcReadoutElement::clearBLinePar
void clearBLinePar()
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:196
MuonGM::sTgcReadoutElement::~sTgcReadoutElement
~sTgcReadoutElement()
destructor
MuonGM::sTgcReadoutElement::distanceToReadout
virtual double distanceToReadout(const Amg::Vector2D &pos, const Identifier &id) const override final
distance to readout.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:303
MuonGM::sTgcReadoutElement::layerHash
virtual int layerHash(const Identifier &id) const override
returns the hash to be used to look up the normal and center in the MuonClusterReadoutElement trackin...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:265
sTgcIdHelper::channelType
int channelType(const Identifier &id) const
Definition: sTgcIdHelper.cxx:1022
python.compressB64.c
def c
Definition: compressB64.py:93
IGeoDbTagSvc.h
MuonGM::MuonReadoutElement::getStationEta
int getStationEta() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:193
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
Identifier
Definition: IdentifierFieldParser.cxx:14