ATLAS Offline Software
MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/sTgcReadoutElement.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
8 #include <GaudiKernel/SystemOfUnits.h>
9 
10 using namespace ActsTrk;
11 
12 namespace MuonGMR4 {
14 std::ostream& operator<<(std::ostream& ostr, const parameterBook& pars) {
15  if (pars.stripDesign) ostr<<"Strips: "<<(*pars.stripDesign)<<std::endl;
16  if (pars.wireGroupDesign) ostr<<"Wire Groups: "<<(*pars.wireGroupDesign)<<std::endl;
17  if (pars.padDesign) ostr<<"Pads: "<<(*pars.padDesign)<<std::endl;
18  return ostr;
19 }
20 
21 sTgcReadoutElement::sTgcReadoutElement(defineArgs&& args)
22  : MuonReadoutElement(std::move(args)),
23  m_pars{std::move(args)} {
24 }
25 
27 
29  ATH_MSG_DEBUG("Parameter book "<<parameterBook());
30 
32 #ifndef SIMULATIONBASE
33 
37 #endif
38 
39  if (m_pars.stripLayers.empty() || m_pars.wireGroupLayers.empty()) {
40  ATH_MSG_FATAL("The readout element "<<idHelperSvc()->toStringDetEl(identify())<<" doesn't have any layers defined");
41  return StatusCode::FAILURE;
42  }
43  for (unsigned int layer = 0; layer < m_pars.stripLayers.size(); ++layer) {
44  IdentifierHash layHash{layer};
45  if (gasGapNumber(m_pars.stripLayers[layer].hash()) != layHash) {
46  ATH_MSG_FATAL("Layer "<<m_pars.stripLayers[layer]<<" has a very strange hash. Expect "<<layer);
47  return StatusCode::FAILURE;
48  }
49  ATH_CHECK(insertTransform<sTgcReadoutElement>(m_pars.stripLayers[layer].hash()));
50 
51 #ifndef SIMULATIONBASE
52  const StripDesign& design{m_pars.stripLayers[layer].design()};
54  m_pars.layerBounds->make_bounds(design.shortHalfHeight(),
55  design.longHalfHeight(),
56  design.halfWidth(),
57  90.*Gaudi::Units::deg)));
58 #endif
59 
60  }
61  for (unsigned int layer = 0; layer < m_pars.wireGroupLayers.size(); ++layer) {
62  IdentifierHash layHash{layer};
63  if (gasGapNumber(m_pars.wireGroupLayers[layer].hash()) != layHash) {
64  ATH_MSG_FATAL("Layer "<<m_pars.wireGroupLayers[layer]<<" has a very strange hash. Expect "<<layer);
65  return StatusCode::FAILURE;
66  }
67  ATH_CHECK(insertTransform<sTgcReadoutElement>(m_pars.wireGroupLayers[layer].hash()));
68 #ifndef SIMULATIONBASE
69  const StripDesign& design{m_pars.wireGroupLayers[layer].design()};
71  m_pars.layerBounds->make_bounds(design.shortHalfHeight(),
72  design.longHalfHeight(),
73  design.halfWidth())));
74 #endif
75  }
76  for (unsigned int layer = 0; layer < m_pars.padLayers.size(); ++layer) {
77  IdentifierHash layHash{layer};
78  if (gasGapNumber(m_pars.padLayers[layer].hash()) != layHash) {
79  ATH_MSG_FATAL("Layer "<<m_pars.padLayers[layer]<<" has a very strange hash. Expect "<<layer);
80  return StatusCode::FAILURE;
81  }
82  ATH_CHECK(insertTransform<sTgcReadoutElement>(m_pars.padLayers[layer].hash()));
83 #ifndef SIMULATIONBASE
84  const StripDesign& design{m_pars.padLayers[layer].design()};
86  m_pars.layerBounds->make_bounds(design.shortHalfHeight(),
87  design.longHalfHeight(),
88  design.halfWidth())));
89 #endif
90 
91  }
92  ActsGeometryContext gctx{};
93  m_gasGapPitch = (center(gctx, createHash(1, sTgcIdHelper::sTgcChannelTypes::Strip, 0)) -
94  center(gctx, createHash(2, sTgcIdHelper::sTgcChannelTypes::Strip, 0))).mag();
95  return StatusCode::SUCCESS;
96 }
97 
98 Amg::Transform3D sTgcReadoutElement::fromGapToChamOrigin(const IdentifierHash& measHash) const{
99  unsigned int layIdx = static_cast<unsigned int>(measHash);
100  unsigned int gasGap = gasGapNumber(measHash);
101  if(chType(measHash) == ReadoutChannelType::Strip && gasGap < m_pars.stripLayers.size()) {
102  return m_pars.stripLayers[gasGap].toOrigin();
103  }
104  else if (chType(measHash) == ReadoutChannelType::Wire && gasGap < m_pars.wireGroupLayers.size()) {
105  return m_pars.wireGroupLayers[gasGap].toOrigin();
106  }
107  else if (chType(measHash) == ReadoutChannelType::Pad && gasGap < m_pars.padLayers.size()) {
108  return m_pars.padLayers[gasGap].toOrigin();
109  }
110  else {
111  unsigned int maxReadoutLayers = m_pars.stripLayers.size() + m_pars.wireGroupLayers.size() + m_pars.padLayers.size();
112  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The layer hash "<<layIdx
113  <<" is out of range. Maximum range "<< maxReadoutLayers);
114  return Amg::Transform3D::Identity();
115  }
116 }
117 
118 Amg::Vector2D sTgcReadoutElement::localChannelPosition(const IdentifierHash& measHash) const {
119  if (chType(measHash) == ReadoutChannelType::Strip) {
120  Amg::Vector2D stripCenter{Amg::Vector2D::Zero()};
121  std::optional<Amg::Vector2D> stripCenterOpt = stripDesign(measHash).center(channelNumber(measHash));
122  if (!stripCenterOpt) {
123  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The strip " << channelNumber(measHash) << " doesn't intersect with the edges of the trapezoid.");
124  return stripCenter;
125  }
126  stripCenter = std::move(*stripCenterOpt);
127  if (channelNumber(measHash) == 1 && firstStripPitch(measHash) < stripPitch(measHash)) {
128  stripCenter.x() += 0.25 * stripWidth(measHash);
129  }
130  if (channelNumber(measHash) == numStrips(measHash) && firstStripPitch(measHash) == stripPitch(measHash)) {
131  stripCenter.x() -= 0.25 * stripWidth(measHash);
132  }
133  return stripCenter;
134  }
135  else if (chType(measHash) == ReadoutChannelType::Wire) {
136  Amg::Vector2D wireGroupCenter{Amg::Vector2D::Zero()};
137  std::optional<Amg::Vector2D> wireGroupCenterOpt = wireDesign(measHash).center(channelNumber(measHash));
138  if (!wireGroupCenterOpt) {
139  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The wireGroup" << channelNumber(measHash) << "doesn't intersect with the edges of the trapezoid.");
140  return wireGroupCenter;
141  }
142  wireGroupCenter = std::move(*wireGroupCenterOpt);
143  unsigned int gasGap = gasGapNumber(measHash) + 1;
144  if (channelNumber(measHash) == 1) {
145  ATH_MSG_DEBUG("The first wiregroup width is " <<firstWireGroupWidth(gasGap));
146  ATH_MSG_DEBUG("The last wire pos is: " << wireGroupCenter.x() + ((firstWireGroupWidth(gasGap) + 1) / 2 - 1) * wirePitch(measHash) );
148  wireGroupCenter.x() = wireGroupCenter.x() + ((firstWireGroupWidth(gasGap) + 1) / 2 - 1) * wirePitch(measHash);
151  wireGroupCenter.x() = 0.5 * (wireGroupCenter.x() - 0.5 * lPadLength(measHash));
152  }
153  else if (channelNumber(measHash) == numWireGroups(gasGap)) {
154  ATH_MSG_DEBUG("The last wire center before modification is: " << wireGroupCenter.x());
155  unsigned int lastWireGroupWidth = numWires(gasGap) - firstWireGroupWidth(gasGap) - (numWireGroups(gasGap) - 2) * wireGroupWidth(gasGap);
156  ATH_MSG_DEBUG("The last wire group width is: " << lastWireGroupWidth << " and half of that is: "<< lastWireGroupWidth / 2);
158  wireGroupCenter.x() = wireGroupCenter.x() - (lastWireGroupWidth / 2 + 1) * wirePitch(measHash);
159  ATH_MSG_DEBUG("The last wire of the last second group is at: " << wireGroupCenter.x());
162  wireGroupCenter.x() = 0.5 * (wireGroupCenter.x() + 0.5 * lPadLength(measHash));
163  }
164  else {
167  wireGroupCenter.x() = wireGroupCenter.x() - wirePitch(measHash);
168  }
169  return wireGroupCenter;
170  }
171  else if (chType(measHash) == ReadoutChannelType::Pad) {
172  Amg::Vector2D padCenter{Amg::Vector2D::Zero()};
173  std::optional<Amg::Vector2D> padCenterOpt = padDesign(measHash).stripPosition(channelNumber(measHash));
174  if (!padCenterOpt) {
175  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The pad" << channelNumber(measHash) << "doesn't is not a valid pad number.");
176  return padCenter;
177  }
178  padCenter = std::move(*padCenterOpt);
179  return padCenter;
180  }
181  else {
182  ATH_MSG_FATAL(__FILE__<<":"<<__LINE__<<"Invalid channel type: " << chType(measHash));
183  return Amg::Vector2D::Zero();
184  }
185 }
186 
187 Amg::Vector3D sTgcReadoutElement::globalChannelPosition(const ActsGeometryContext& ctx, const IdentifierHash& measHash) const {
188  const IdentifierHash lHash = layerHash(measHash);
189  unsigned int layIdx = static_cast<unsigned int>(lHash);
190  unsigned int gasGap = gasGapNumber(measHash);
191  if((chType(measHash) < ReadoutChannelType::Pad || chType(measHash) > ReadoutChannelType::Wire) && gasGap < m_pars.padLayers.size()) {
192  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The channel type "<<chType(measHash)
193  <<"with the layer hash "<<layIdx<<" is invalid. Maximum range "<<m_pars.stripLayers.size());
194  return Amg::Vector3D::Zero();
195  }
196  Amg::Vector3D channelPos{Amg::Vector3D::Zero()};
197  Amg::Vector2D localChannel = localChannelPosition(measHash);
198  channelPos.block<2,1>(0,0) = std::move(localChannel);
199  return localToGlobalTrans(ctx, lHash) * channelPos;
200 }
201 
202 using localCornerArray = std::array<Amg::Vector2D, 4>;
203 using globalCornerArray = std::array<Amg::Vector3D, 4>;
204 globalCornerArray sTgcReadoutElement::globalPadCorners(const ActsGeometryContext& ctx, const IdentifierHash& measHash) const {
205  const IdentifierHash lHash = layerHash(measHash);
206  unsigned int layIdx = static_cast<unsigned int>(lHash);
207  unsigned int gasGap = gasGapNumber(measHash);
208  globalCornerArray gPadCorners{make_array<Amg::Vector3D, 4>(Amg::Vector3D::Zero())};
209  if (chType(measHash) == ReadoutChannelType::Pad && gasGap < m_pars.padLayers.size()) {
210  localCornerArray lPadCorners = localPadCorners(measHash);
211  for (unsigned int corner = 0; corner < lPadCorners.size(); ++corner) {
212  gPadCorners[corner].block<2,1>(0,0) = std::move(lPadCorners[corner]);
213  gPadCorners[corner] = localToGlobalTrans(ctx, lHash) * gPadCorners[corner];
214  }
215  return gPadCorners;
216  }
217  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The layer hash "<<layIdx
218  <<" is out of range. Maximum range "<<m_pars.padLayers.size());
219  return gPadCorners;
220 }
221 
222 Amg::Vector3D sTgcReadoutElement::chamberStripPos(const IdentifierHash& measHash) const {
223  const IdentifierHash lHash = layerHash(measHash);
224  unsigned int layIdx = static_cast<unsigned int>(lHash);
225  if (layIdx < m_pars.stripLayers.size()) {
226  return m_pars.stripLayers[layIdx].stripPosition(channelNumber(measHash));
227  }
228  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The layer hash "<<layIdx
229  <<" is out of range. Maximum range "<<m_pars.stripLayers.size());
230  return Amg::Vector3D::Zero();
231 }
232 int sTgcReadoutElement::padNumber(const Amg::Vector2D& hitPos, const IdentifierHash& measHash) const {
233  int padEta = padDesign(measHash).channelNumber(hitPos).first;
234  int padPhi = padDesign(measHash).channelNumber(hitPos).second;
235  bool is_valid{true};
236  const Identifier padID = m_idHelper.padID(identify(), multilayer(), gasGapNumber(measHash) + 1, chType(measHash),
237  padEta, padPhi, is_valid);
238  int channel = m_idHelper.channel(padID);
239  return channel;
240 }
241 
242 #ifndef SIMULATIONBASE
243 std::map<Identifier, std::shared_ptr<Acts::Surface>> sTgcReadoutElement::getSurfaces() const {
244  std::map<Identifier, std::shared_ptr<Acts::Surface>> surfaces{};
245  for (unsigned int gasGap = 1; gasGap <= numLayers(); ++gasGap) {
246  for (unsigned int ch : {ReadoutChannelType::Strip, ReadoutChannelType::Wire,
247  ReadoutChannelType::Pad}) {
248  IdentifierHash hash = createHash(gasGap,ch, 1);
249  surfaces[measurementId(hash)] = surfacePtr(layerHash(hash));
250  }
251  }
252  return surfaces;
253 }
254 #endif
255 
256 
257 Amg::Vector3D sTgcReadoutElement::leftStripEdge(const ActsGeometryContext& ctx, const IdentifierHash& measHash) const {
258  const IdentifierHash lHash = layerHash(measHash);
259  unsigned int gasGap = gasGapNumber(measHash);
260  unsigned int layIdx = static_cast<unsigned int>(lHash);
261 
262  if(chType(measHash) == ReadoutChannelType::Strip){
263  if(gasGap > m_pars.stripLayers.size()){
264  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The layer hash "<<layIdx
265  <<" is out of range. Maximum range "<<m_pars.stripLayers.size());
266  return Amg::Vector3D::Zero();
267  }
268  Amg::Vector3D stripleftEdge{Amg::Vector3D::Zero()};
269  Amg::Vector2D localstripleftEdge{Amg::Vector2D::Zero()};
270  std::optional<Amg::Vector2D> stripleftEdgeOpt = stripDesign(measHash).leftEdge(channelNumber(measHash));
271  localstripleftEdge = std::move(*stripleftEdgeOpt);
272  stripleftEdge.block<2,1>(0,0) = std::move(localstripleftEdge);
273 
274  return localToGlobalTrans(ctx, lHash)*stripleftEdge;
275 
276  }else if(chType(measHash) == ReadoutChannelType::Wire){
277  if(gasGap > m_pars.wireGroupLayers.size()){
278  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The layer hash "<<layIdx
279  <<" is out of range. Maximum range "<<m_pars.wireGroupLayers.size());
280  return Amg::Vector3D::Zero();
281 
282  }
283 
284  Amg::Vector3D wireleftEdge{Amg::Vector3D::Zero()};
285  Amg::Vector2D localwireleftEdge{Amg::Vector2D::Zero()};
286  std::optional<Amg::Vector2D> wireleftedgeOpt = wireDesign(measHash).leftEdge(channelNumber(measHash));
287  localwireleftEdge = std::move(*wireleftedgeOpt);
288  wireleftEdge.block<2,1>(0,0) = std::move(localwireleftEdge);
289 
290  return localToGlobalTrans(ctx, lHash)*wireleftEdge;
291 
292  }
293 
294  ATH_MSG_FATAL(__FILE__<<":"<<__LINE__<<" The layer hash "<<layIdx
295  <<" is not valid Type "<< chType(measHash));
296  return Amg::Vector3D::Zero();
297 
298 }
299 
300 
301 Amg::Vector3D sTgcReadoutElement::rightStripEdge(const ActsGeometryContext& ctx, const IdentifierHash& measHash) const {
302  const IdentifierHash lHash = layerHash(measHash);
303  unsigned int gasGap = gasGapNumber(measHash);
304  unsigned int layIdx = static_cast<unsigned int>(lHash);
305 
306  if(chType(measHash) == ReadoutChannelType::Strip){
307  if(gasGap > m_pars.stripLayers.size()){
308  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The layer hash "<<layIdx
309  <<" is out of range. Maximum range "<<m_pars.stripLayers.size());
310  return Amg::Vector3D::Zero();
311  }
312  Amg::Vector3D striprightEdge{Amg::Vector3D::Zero()};
313  Amg::Vector2D localstriprightEdge{Amg::Vector2D::Zero()};
314  std::optional<Amg::Vector2D> striprightEdgeOpt = stripDesign(measHash).rightEdge(channelNumber(measHash));
315  localstriprightEdge = std::move(*striprightEdgeOpt);
316  striprightEdge.block<2,1>(0,0) = std::move(localstriprightEdge);
317 
318  return localToGlobalTrans(ctx, lHash)*striprightEdge;
319 
320  }else if(chType(measHash) == ReadoutChannelType::Wire){
321  if(gasGap > m_pars.wireGroupLayers.size()){
322  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" The layer hash "<<layIdx
323  <<" is out of range. Maximum range "<<m_pars.wireGroupLayers.size());
324  return Amg::Vector3D::Zero();
325 
326  }
327 
328  Amg::Vector3D wirerightEdge{Amg::Vector3D::Zero()};
329  Amg::Vector2D localwirerightEdge{Amg::Vector2D::Zero()};
330  std::optional<Amg::Vector2D> wirerightedgeOpt = wireDesign(measHash).rightEdge(channelNumber(measHash));
331  localwirerightEdge = std::move(*wirerightedgeOpt);
332  wirerightEdge.block<2,1>(0,0) = std::move(localwirerightEdge);
333 
334  return localToGlobalTrans(ctx, lHash)*wirerightEdge;
335 
336  }
337 
338  ATH_MSG_FATAL(__FILE__<<":"<<__LINE__<<" The layer hash "<<layIdx
339  <<" is not valid Type "<< chType(measHash));
340  return Amg::Vector3D::Zero();
341 
342 
343 }
344 
345 
346 } // namespace MuonGMR4
MuonGMR4::sTgcReadoutElement::localChannelPosition
Amg::Vector2D localChannelPosition(const Identifier &measId) const
Returns the local pad/strip/wireGroup position.
MuonGMR4::sTgcReadoutElement::fromGapToChamOrigin
Amg::Transform3D fromGapToChamOrigin(const IdentifierHash &layerHash) const
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/sTgcReadoutElement.cxx:98
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
MuonGMR4::sTgcReadoutElement::multilayer
int multilayer() const
Returns the multilayer of the sTgcReadoutElement.
MuonGMR4::parameterBook
MmReadoutElement::parameterBook parameterBook
Definition: MmReadoutElement.cxx:18
MuonGMR4::sTgcReadoutElement::firstStripPitch
double firstStripPitch(const Identifier &measId) const
Gas Gaps.
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
MuonGMR4::StripDesign
Definition: StripDesign.h:30
sendEI_SPB.ch
ch
Definition: sendEI_SPB.py:35
MuonGMR4::sTgcReadoutElement::localCornerArray
std::array< Amg::Vector2D, 4 > localCornerArray
Returns an array of four 2D vectors representing corner positions of the pads.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:212
MuonGMR4::sTgcReadoutElement::padEta
unsigned int padEta(const Identifier &measId) const
Returns the Eta index of the pad for the given pad identifier.
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
AthCheckMacros.h
MuonGMR4::StripDesign::leftEdge
CheckVector2D leftEdge(int stripNumb) const
Returns the left edge of the strip (Global numbering scheme)
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
MuonGMR4::sTgcReadoutElement::globalCornerArray
std::array< Amg::Vector3D, 4 > globalCornerArray
Returns an array of four 3D vectors representing corner positions of the pads.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:216
MuonGMR4::sTgcReadoutElement::stripDesign
const StripDesign & stripDesign(const Identifier &measId) const
Retrieves the readoutElement Layer given the Identifier/Hash.
MuonGMR4::sTgcReadoutElement::defineArgs
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:79
MuonGMR4::MuonReadoutElement
The MuonReadoutElement is an abstract class representing the geometry representing the muon detector.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonReadoutElement.h:38
deg
#define deg
Definition: SbPolyhedron.cxx:17
MuonGMR4::sTgcReadoutElement::parameterBook::lHalfChamberLength
double lHalfChamberLength
Length of the chamber on the long side.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:46
MuonGMR4::MuonReadoutElement::createGeoTransform
StatusCode createGeoTransform()
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:31
MuonGMR4::sTgcReadoutElement::initElement
StatusCode initElement() override final
Element initialization.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/sTgcReadoutElement.cxx:28
MuonGMR4::sTgcReadoutElement::padNumber
unsigned int padNumber(const Identifier &measId) const
Returns the pad number in the conventional pad numbering scheme from the sequential channel number.
MuonGMR4::PadDesign::channelNumber
std::pair< int, int > channelNumber(const Amg::Vector2D &hitPos) const
Function to retrieve the pad eta and phi given a local position coordinate.
MuonGMR4::globalCornerArray
std::array< Amg::Vector3D, 4 > globalCornerArray
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/sTgcReadoutElement.cxx:203
MuonGMR4::localCornerArray
std::array< Amg::Vector2D, 4 > localCornerArray
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/sTgcReadoutElement.cxx:202
sTgcReadoutElement.h
MuonGMR4::sTgcReadoutElement::wireDesign
const WireGroupDesign & wireDesign(const Identifier &measId) const
Retrieves the readoutElement Layer given the Identifier/Hash.
MuonGMR4::sTgcReadoutElement::createHash
static IdentifierHash createHash(const unsigned int gasGap, const unsigned int channelType, const unsigned int channel, const unsigned int wireInGrp=0)
Create a measurement hash from the Identifier fields.
MuonGMR4
A muon chamber is a collection of readout elements belonging to the same station.
Definition: ChamberAssembleTool.h:16
sTgcIdHelper::channel
int channel(const Identifier &id) const override
Definition: sTgcIdHelper.cxx:1027
EventPrimitivesToStringConverter.h
MuonGMR4::sTgcReadoutElement::numWireGroups
unsigned int numWireGroups(unsigned int gasGap) const
Number of wire groups in the gas gap.
MuonGMR4::MuonReadoutElement::idHelperSvc
const Muon::IMuonIdHelperSvc * idHelperSvc() const
Returns the pointer to the muonIdHelperSvc.
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MuonGMR4::sTgcReadoutElement::parameterBook::wireGroupLayers
std::vector< StripLayer > wireGroupLayers
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:65
MuonGMR4::sTgcReadoutElement::chamberStripPos
Amg::Vector3D chamberStripPos(const IdentifierHash &measHash) const
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/sTgcReadoutElement.cxx:222
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
MuonGMR4::sTgcReadoutElement::getParameters
const parameterBook & getParameters() const
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/sTgcReadoutElement.cxx:26
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
MuonGMR4::sTgcReadoutElement::leftStripEdge
Amg::Vector3D leftStripEdge(const ActsGeometryContext &ctx, const IdentifierHash &measHash) const
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/sTgcReadoutElement.cxx:257
MuonGMR4::sTgcReadoutElement::chType
static unsigned int chType(const IdentifierHash &measHash)
Returns the channel type for a given identifierHash.
MuonGMR4::MuonReadoutElement::center
Amg::Vector3D center(const ActsGeometryContext &ctx) const
Returns the detector center (Which is the same as the detector center of the first measurement layer)
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ActsTrk::operator<<
MsgStream & operator<<(MsgStream &out, const ActsUtils::Stat &stat)
Definition: TrackToTruthAssociationAlg.cxx:25
MuonGMR4::sTgcReadoutElement::parameterBook::halfChamberHeight
double halfChamberHeight
sTGC Chamber Details
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:42
MuonGMR4::sTgcReadoutElement::measurementId
Identifier measurementId(const IdentifierHash &measHash) const override final
Converts the measurement hash back to the full Identifier.
MuonGMR4::sTgcReadoutElement::m_pars
parameterBook m_pars
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:291
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:28
MuonGMR4::sTgcReadoutElement::parameterBook::padLayers
std::vector< StripLayer > padLayers
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:66
MuonGMR4::sTgcReadoutElement::parameterBook::layerBounds
ActsTrk::SurfaceBoundSetPtr< Acts::TrapezoidBounds > layerBounds
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:73
MuonGMR4::StripDesign::center
CheckVector2D center(int stripNumb) const
Returns the bisector of the strip (Global numbering scheme)
MuonGMR4::sTgcReadoutElement::globalChannelPosition
Amg::Vector3D globalChannelPosition(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the global pad/strip/wireGroup position.
MuonGMR4::MuonReadoutElement::geoTransformHash
static IdentifierHash geoTransformHash()
Returns the hash that is associated with the surface cache holding the transformation that is placing...
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:39
sTgcIdHelper::padID
Identifier padID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channelType, int padEta, int padPhi) const
Definition: sTgcIdHelper.cxx:939
MuonGMR4::sTgcReadoutElement::gasGapNumber
static unsigned int gasGapNumber(const IdentifierHash &measHash)
Returns the gasGap (0 to 3) for a given identifierHash.
MuonGMR4::sTgcReadoutElement::m_idHelper
const sTgcIdHelper & m_idHelper
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:292
MuonGMR4::sTgcReadoutElement::wireGroupWidth
unsigned int wireGroupWidth(unsigned int gasGap) const
Number of wires in a normal wire group.
MuonGMR4::sTgcReadoutElement::rightStripEdge
Amg::Vector3D rightStripEdge(const ActsGeometryContext &ctx, const IdentifierHash &measHash) const
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/sTgcReadoutElement.cxx:301
MuonGMR4::MuonReadoutElement::identify
Identifier identify() const override final
Return the athena identifier.
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonGMR4::sTgcReadoutElement::numWires
unsigned int numWires(unsigned int gasGap) const
Number of wires in the gas gap.
MuonGMR4::sTgcReadoutElement::numLayers
unsigned int numLayers() const
Returns the number of gas gap layers.
MuonGMR4::sTgcReadoutElement::padPhi
unsigned int padPhi(const Identifier &measId) const
Returns the Phi index of the pad for the given pad identifier.
MuonGMR4::sTgcReadoutElement::padDesign
const PadDesign & padDesign(const Identifier &measId) const
Retrieves the readoutElement Layer given the Identifier/Hash.
MuonGMR4::sTgcReadoutElement::m_gasGapPitch
double m_gasGapPitch
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:294
MuonGMR4::sTgcReadoutElement::firstWireGroupWidth
unsigned int firstWireGroupWidth(unsigned int gasGap) const
Number of wires in the first wire group.
MuonGMR4::sTgcReadoutElement::stripWidth
double stripWidth(const Identifier &measId) const
Width of a strip.
CaloCondBlobAlgs_fillNoiseFromASCII.hash
dictionary hash
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:109
MuonGMR4::MuonReadoutElement::planeSurfaceFactory
StatusCode planeSurfaceFactory(const IdentifierHash &hash, std::shared_ptr< Acts::PlanarBounds > pBounds)
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:120
MuonGMR4::MuonReadoutElement::surfacePtr
std::shared_ptr< Acts::Surface > surfacePtr(const IdentifierHash &hash) const
Returns the pointer associated to a certain wire / plane.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:84
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
MuonGMR4::sTgcReadoutElement::getSurfaces
std::map< Identifier, std::shared_ptr< Acts::Surface > > getSurfaces() const override final
Returns all surfaces that are associated with the active readout planes.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/sTgcReadoutElement.cxx:243
MuonGMR4::sTgcReadoutElement::globalPadCorners
globalCornerArray globalPadCorners(const ActsGeometryContext &ctx, const Identifier &measId) const
GeoPrimitivesHelpers.h
MuonGMR4::sTgcReadoutElement::localPadCorners
localCornerArray localPadCorners(const Identifier &measId) const
MuonGMR4::sTgcReadoutElement::numStrips
unsigned int numStrips(const Identifier &measId) const
Strips Number of strips in a chamber.
MuonGMR4::MuonReadoutElement::localToGlobalTrans
const Amg::Transform3D & localToGlobalTrans(const ActsGeometryContext &ctx) const
Returns the local to global transformation into the ATLAS coordinate system.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:76
MuonGMR4::sTgcReadoutElement::parameterBook
Set of parameters to describe an sTGC chamber.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:38
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:34
MuonGMR4::sTgcReadoutElement::wirePitch
double wirePitch(const Identifier &measId) const
Wires Pitch of the wire.
MuonGMR4::StripDesign::rightEdge
CheckVector2D rightEdge(int stripNumb) const
Returns the right edge of the strip (Global numbering scheme)
MuonGMR4::PadDesign::stripPosition
Amg::Vector2D stripPosition(int stripNum) const override final
Override from stripDesign. This function will give the center of the pad by taking the sequential cha...
MuonGMR4::sTgcReadoutElement::lPadLength
double lPadLength(const Identifier &measId) const
Length of gas Gap on long side for wireGroup/Pads.
MuonGMR4::sTgcReadoutElement::layerHash
IdentifierHash layerHash(const Identifier &measId) const override final
Transforms the Identifier into a layer hash.
MuonGMR4::sTgcReadoutElement::channelNumber
static unsigned int channelNumber(const IdentifierHash &measHash)
Returns channel position for a given identifierHash.
mag
Scalar mag() const
mag method
Definition: AmgMatrixBasePlugin.h:25
python.CaloScaleNoiseConfig.args
args
Definition: CaloScaleNoiseConfig.py:80
MuonGMR4::sTgcReadoutElement::stripPitch
double stripPitch(const Identifier &measId) const
Pitch of a strip.
MuonGMR4::sTgcReadoutElement::parameterBook::stripLayers
std::vector< StripLayer > stripLayers
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:64
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
MuonGMR4::sTgcReadoutElement::parameterBook::sHalfChamberLength
double sHalfChamberLength
Length of the chamber on the short side.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:44