Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
sTgcReadoutGeomTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "sTgcReadoutGeomTool.h"
6 
7 #include <GaudiKernel/SystemOfUnits.h>
10 
12 #include <GeoModelKernel/GeoFullPhysVol.h>
13 #include <GeoModelKernel/GeoPhysVol.h>
14 #include <GeoModelKernel/GeoTrd.h>
15 #include <GeoModelKernel/GeoSimplePolygonBrep.h>
17 
18 #include <GeoModelRead/ReadGeoModel.h>
21 
23 
24 #ifndef SIMULATIONBASE
25 # include "Acts/Surfaces/TrapezoidBounds.hpp"
26 #endif
27 
28 using namespace CxxUtils;
29 using namespace ActsTrk;
30 
31 namespace MuonGMR4 {
32 
35 
36 
37 sTgcReadoutGeomTool::sTgcReadoutGeomTool(const std::string& type,
38  const std::string& name,
39  const IInterface* parent)
40  : base_class{type, name, parent} {}
41 
43  sTgcShape result{};
44  if (shape->typeID() == GeoTrd::getClassTypeID()) {
45  const GeoTrd* trd = static_cast<const GeoTrd*>(shape);
46  result.longWidth = trd->getXHalfLength1();
47  result.shortWidth = trd->getXHalfLength2();
48  result.halfHeight = trd->getYHalfLength1();
49  result.thickness = trd->getZHalfLength();
50  } else if (shape->typeID() == GeoSimplePolygonBrep::getClassTypeID()) {
51  const GeoSimplePolygonBrep* poly = static_cast<const GeoSimplePolygonBrep*>(shape);
52  std::vector<Amg::Vector2D> polyEdges = m_geoUtilTool->polygonEdges(*poly);
53  result.thickness = poly->getDZ() * Gaudi::Units::mm;
54  if (polyEdges.size() == 4) {
55  result.longWidth = 0.5 * (polyEdges[0].x() - polyEdges[1].x()) * Gaudi::Units::mm;
56  result.shortWidth = 0.5 * (polyEdges[3].x() - polyEdges[2].x()) * Gaudi::Units::mm;
57  result.halfHeight = 0.5 * (polyEdges[0].y() - polyEdges[3].y()) * Gaudi::Units::mm;
58  } else if (polyEdges.size() == 6) {
59  result.longWidth = 0.5 * (polyEdges[0].x() - polyEdges[1].x()) * Gaudi::Units::mm;
60  result.shortWidth = 0.5 * (polyEdges[4].x() - polyEdges[3].x()) * Gaudi::Units::mm;
61  result.halfHeight = 0.5 * (polyEdges[0].y() - polyEdges[4].y()) * Gaudi::Units::mm;
62  result.yCutOut = (polyEdges[1].y() - polyEdges[2].y()) * Gaudi::Units::mm;
63  }
64  } else {
65  ATH_MSG_FATAL("Unknown shape type "<<shape->type());
66  throw std::runtime_error("Invalid shape to extract sTGC parameters");
67  }
68  return result;
69 }
70 
72  ATH_MSG_VERBOSE("Load dimensions of "<<m_idHelperSvc->toString(define.detElId)
73  <<std::endl<<std::endl<<m_geoUtilTool->dumpVolume(define.physVol));
74  const GeoShape* shape = m_geoUtilTool->extractShape(define.physVol);
75  if (!shape) {
76  ATH_MSG_FATAL("Failed to deduce a valid shape for "<<m_idHelperSvc->toString(define.detElId));
77  return StatusCode::FAILURE;
78  }
79  ATH_MSG_DEBUG("Extracted shape "<<m_geoUtilTool->dumpShape(shape));
81  sTgcShape modPars = extractParameters(shape);
82 
83  define.sHalfChamberLength = modPars.shortWidth;
84  define.lHalfChamberLength = modPars.longWidth;
85  define.halfChamberHeight = modPars.halfHeight;
86  define.halfChamberTck = modPars.thickness;
87  define.yCutout = modPars.yCutOut;
88 
89  ATH_MSG_DEBUG("chamber length (L/S) is: " << 2*define.lHalfChamberLength << "/"
90  << 2*define.sHalfChamberLength << " chamber height is: "
91  << 2*define.halfChamberHeight << " chamber thickness is: " << 2*define.halfChamberTck << " yCutout value is: " << define.yCutout);
92 
94  std::vector<physVolWithTrans> allGasGaps = m_geoUtilTool->findAllLeafNodesByName(define.physVol, "sTgcGas");
95  if (allGasGaps.empty()) {
96  ATH_MSG_FATAL("The volume "<<m_idHelperSvc->toStringDetEl(define.detElId)<<" does not have any children 'sTgcGas'"
97  <<std::endl<<m_geoUtilTool->dumpVolume(define.physVol));
98  return StatusCode::FAILURE;
99  }
100 
102  define.numLayers = allGasGaps.size();
103  ATH_MSG_VERBOSE("The number of gasGaps are: " << define.numLayers);
104  FactoryCache::ParamBookTable::const_iterator parBookItr = factoryCache.parameterBook.find(define.chambDesign);
105  if (parBookItr == factoryCache.parameterBook.end()) {
106  ATH_MSG_FATAL("The chamber "<<define.chambDesign<<" is not part of the WSTGC table");
107  return StatusCode::FAILURE;
108  }
109 
110  const wSTGCTable& paramBook{parBookItr->second};
111 
112  define.gasTck = paramBook.gasTck;
114  unsigned int gasGap{0};
115  for (physVolWithTrans& gapVol : allGasGaps) {
116  StripDesignPtr stripDesign = std::make_unique<StripDesign>();
117  WireDesignPtr wireGroupDesign = std::make_unique<WireGroupDesign>();
118  PadDesignPtr padDesign = std::make_unique<PadDesign>();
119 
120  sTgcShape gapPars = extractParameters(m_geoUtilTool->extractShape(gapVol.volume));
121 
123  double firstStripPos = -gapPars.halfHeight + paramBook.firstStripPitch[gasGap] - 0.5 * paramBook.stripPitch;
124  define.firstStripPitch = paramBook.firstStripPitch;
125  ATH_MSG_DEBUG("FirstStripPos for stripPitch: " << paramBook.firstStripPitch[gasGap] << " is: " << Amg::toString(firstStripPos, 2) << " and the half height is: " << gapPars.halfHeight);
126 
128  unsigned int numWireGroups = paramBook.numWireGroups[gasGap];
130  double firstWirePos = paramBook.firstWirePos[gasGap];
131 
132  if(gapPars.yCutOut) {
134  stripDesign->defineDiamond(gapPars.shortWidth, gapPars.longWidth, gapPars.halfHeight + 0.001, paramBook.yCutoutCathode);
135  ATH_MSG_VERBOSE("The yCutout of the active area is: " << gapPars.yCutOut);
136  stripDesign->defineStripLayout(Amg::Vector2D{firstStripPos, 0.},
137  paramBook.stripPitch, paramBook.stripWidth, paramBook.numStrips);
138  ATH_MSG_VERBOSE("Created new diamond strip design "<<(*stripDesign));
140  wireGroupDesign->defineDiamond(0.5*paramBook.sPadLength, 0.5*paramBook.lPadLength, gapPars.halfHeight, paramBook.yCutoutCathode);
141  wireGroupDesign->flipTrapezoid();
142  wireGroupDesign->defineStripLayout(Amg::Vector2D{firstWirePos, 0.},
143  paramBook.wirePitch,
144  paramBook.wireWidth,
145  numWireGroups);
146  ATH_MSG_VERBOSE("Created new diamond wireGroup design "<<(*wireGroupDesign));
147 
149  padDesign->defineDiamond(0.5*paramBook.sPadLength, 0.5*paramBook.lPadLength, gapPars.halfHeight, paramBook.yCutoutCathode);
150  padDesign->flipTrapezoid();
151  ATH_MSG_VERBOSE("Created new diamond pad design "<<(*padDesign));
152  }
153  else if (!gapPars.yCutOut) {
155  stripDesign->defineTrapezoid(gapPars.shortWidth, gapPars.longWidth, gapPars.halfHeight + 0.01);
156  stripDesign->defineStripLayout(Amg::Vector2D{firstStripPos, 0.},
157  paramBook.stripPitch, paramBook.stripWidth, paramBook.numStrips);
158  ATH_MSG_VERBOSE("Created new strip design "<<(*stripDesign));
159 
161  wireGroupDesign->defineTrapezoid(0.5*paramBook.sPadLength, 0.5*paramBook.lPadLength, gapPars.halfHeight);
162  wireGroupDesign->flipTrapezoid();
163  wireGroupDesign->defineStripLayout(Amg::Vector2D{firstWirePos, 0.},
164  paramBook.wirePitch,
165  paramBook.wireWidth,
166  numWireGroups);
167  ATH_MSG_VERBOSE("Created new wireGroup design "<<(*wireGroupDesign));
168 
170  padDesign->defineTrapezoid(0.5*paramBook.sPadLength, 0.5*paramBook.lPadLength, gapPars.halfHeight);
171  padDesign->flipTrapezoid();
172  ATH_MSG_VERBOSE("Created new pad design "<<(*padDesign));
173  }
174 
176  wireGroupDesign->declareGroup(paramBook.firstWireGroupWidth[gasGap]);
177  for (uint wireGr=2; wireGr<numWireGroups; wireGr++){
178  wireGroupDesign->declareGroup(paramBook.wireGroupWidth);
179  }
180  unsigned int lastWireGroup = (paramBook.numWires[gasGap] - wireGroupDesign->nAllWires());
181  wireGroupDesign->declareGroup(lastWireGroup);
182  wireGroupDesign->defineWireCutout(paramBook.wireCutout[gasGap]);
183 
185  double beamlineRadius = (define.physVol->getAbsoluteTransform() * gapVol.transform).translation().perp();
186  padDesign->defineBeamlineRadius(beamlineRadius);
187  ATH_MSG_DEBUG("The beamline radius is: " << beamlineRadius);
188  padDesign->definePadRow(paramBook.firstPadPhiDivision[gasGap],
189  paramBook.numPadPhi[gasGap],
190  paramBook.anglePadPhi,
191  paramBook.PadPhiShift[gasGap]);
192  padDesign->definePadColumn(paramBook.firstPadHeight[gasGap],
193  paramBook.numPadEta[gasGap],
194  paramBook.padHeight[gasGap]);
195 
204  ++gasGap;
206  stripDesign = (*factoryCache.stripDesigns.emplace(stripDesign).first);
207  StripLayer stripLayer(gapVol.transform * Amg::getRotateZ3D(-90. * Gaudi::Units::deg)
208  * Amg::getRotateY3D(180* Gaudi::Units::deg), stripDesign,
210  ATH_MSG_VERBOSE("Added new diamond strip layer at "<< stripLayer);
211  define.stripLayers.push_back(std::move(stripLayer));
212 
214  wireGroupDesign = (*factoryCache.wireGroupDesigns.emplace(wireGroupDesign).first);
215  StripLayer wireGroupLayer(gapVol.transform * Amg::getRotateY3D(180* Gaudi::Units::deg),
216  wireGroupDesign, sTgcReadoutElement::createHash(gasGap,
217  sTgcIdHelper::Wire, 0));
218  ATH_MSG_VERBOSE("Added new diamond wireGroup layer at "<<wireGroupLayer);
219  define.wireGroupLayers.push_back(std::move(wireGroupLayer));
220 
222  padDesign = (*factoryCache.padDesigns.emplace(padDesign).first);
223  StripLayer padLayer(gapVol.transform * Amg::getRotateY3D(180* Gaudi::Units::deg),
225  sTgcIdHelper::Pad, 0));
226  ATH_MSG_VERBOSE("Added new diamond pad layer at "<<padLayer);
227  define.padLayers.push_back(std::move(padLayer));
228  }
229  return StatusCode::SUCCESS;
230 }
231 
233  ATH_CHECK(m_geoDbTagSvc.retrieve());
234  ATH_CHECK(m_idHelperSvc.retrieve());
235  ATH_CHECK(m_geoUtilTool.retrieve());
236 
237  GeoModelIO::ReadGeoModel* sqliteReader = m_geoDbTagSvc->getSqliteReader();
238  if (!sqliteReader) {
239  ATH_MSG_FATAL("Error, the tool works exclusively from sqlite geometry inputs");
240  return StatusCode::FAILURE;
241  }
242 
243  FactoryCache facCache{};
244  ATH_CHECK(readParameterBook(facCache));
245 
246  const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
247  // Get the list of full phys volumes from SQLite, and create detector elements
248 
249  physNodeMap mapFPV = sqliteReader->getPublishedNodes<std::string, GeoFullPhysVol*>("Muon");
250 #ifndef SIMULATIONBASE
251  SurfaceBoundSetPtr<Acts::TrapezoidBounds> layerBounds = std::make_shared<SurfaceBoundSet<Acts::TrapezoidBounds>>();
252 #endif
253 
254  for (auto& [key, pv] : mapFPV) {
258  std::vector<std::string> key_tokens = tokenize(key, "_");
259  if (key_tokens.size() != 5 ||
260  key_tokens[0].find("sTGC") == std::string::npos)
261  continue;
262  ATH_MSG_DEBUG("Key is: "<<key);
263  bool isValid{false};
264  const std::string stName = key_tokens[1][1] == 'L' ? "STL" : "STS";
265  const int stEta = atoi(key_tokens[2]);
266  const int stPhi = atoi(key_tokens[3]);
267  const int ml = atoi(key_tokens[4]);
268 
269  defineArgs define{};
270 #ifndef SIMULATIONBASE
271  define.layerBounds = layerBounds;
272 #endif
273  //Need identifier to get multilayer, the following constants don't matter.
274  define.detElId = idHelper.channelID(stName, stEta, stPhi, ml, 1, sTgcIdHelper::sTgcChannelTypes::Strip, 1, isValid);
275  if (!isValid) {
276  ATH_MSG_FATAL("Failed to build a good identifier out of " << key);
277  return StatusCode::FAILURE;
278  }
280  define.physVol = pv;
281  define.chambDesign = "sTGC_" + key_tokens[1];
282  define.alignTransform = m_geoUtilTool->findAlignableTransform(define.physVol);
283  ATH_MSG_VERBOSE("Key "<<key<<" lead to the identifier "<<m_idHelperSvc->toStringDetEl(define.detElId));
284  ATH_CHECK(loadDimensions(define, facCache));
285  std::unique_ptr<sTgcReadoutElement> readoutEle = std::make_unique<sTgcReadoutElement>(std::move(define));
286  ATH_CHECK(mgr.addsTgcReadoutElement(std::move(readoutEle)));
287  }
288  return StatusCode::SUCCESS;
289 }
291  ServiceHandle<IRDBAccessSvc> accessSvc(m_geoDbTagSvc->getParamSvcName(), name());
292  ATH_CHECK(accessSvc.retrieve());
293  IRDBRecordset_ptr paramTable = accessSvc->getRecordsetPtr("WSTGC", "");
294  if (paramTable->size() == 0) {
295  ATH_MSG_FATAL("Empty parameter book table found");
296  return StatusCode::FAILURE;
297  }
298  ATH_MSG_VERBOSE("Found the " << paramTable->nodeName() << " ["
299  << paramTable->tagName() << "] table with "
300  << paramTable->size() << " records");
301  for (const IRDBRecord_ptr& record : *paramTable) {
302  // parameterBook pars{};
303  const std::string key = record-> getString("WSTGC_TYPE");
304  wSTGCTable& parBook = cache.parameterBook[key];
305  parBook.numStrips = record->getInt("nStrips");
306  parBook.stripPitch = record->getDouble("stripPitch");
307  parBook.stripWidth = record->getDouble("stripWidth");
308  parBook.firstStripPitch = tokenizeDouble(record->getString("firstStripWidth"), ";");
309 
310  parBook.numWires = tokenizeInt(record->getString("nWires"), ";");
311  parBook.firstWireGroupWidth = tokenizeInt(record->getString("firstWireGroup"), ";");
312  parBook.numWireGroups = tokenizeInt(record->getString("nWireGroups"), ";");
313  parBook.wireCutout = tokenizeDouble(record->getString("wireCutout"), ";");
314  parBook.wirePitch = record->getDouble("wirePitch");
315  parBook.wireWidth = record->getDouble("wireWidth");
316  parBook.wireGroupWidth = record->getInt("wireGroupWidth");
317  parBook.firstWirePos = tokenizeDouble(record->getString("firstWire"), ";");
318 
319  parBook.numPadEta = tokenizeInt(record->getString("nPadH"), ";");
320  parBook.numPadPhi = tokenizeInt(record->getString("nPadPhi"), ";");
321  parBook.firstPadHeight = tokenizeDouble(record->getString("firstPadH"), ";");
322  parBook.padHeight = tokenizeDouble(record->getString("padH"), ";");
323  parBook.PadPhiShift = tokenizeInt(record->getString("PadPhiShift"), ";");
324  parBook.anglePadPhi = record->getDouble("anglePadPhi");
325  parBook.firstPadPhiDivision = tokenizeDouble(record->getString("firstPadPhiDivision"), ";");
326  parBook.lPadLength = record->getDouble("lPadWidth");
327  parBook.sPadLength = record->getDouble("sPadWidth");
328 
329  parBook.yCutout = record->getDouble("yCutout");
330  parBook.yCutoutCathode = record->getDouble("yCutoutCathode");
331  parBook.gasTck = record->getDouble("gasTck");
332  parBook.lFrameWidth = record->getDouble("ylFrame");
333  parBook.sFrameWidth = record->getDouble("ysFrame");
334 
335  ATH_MSG_DEBUG("Parameters of the chamber " << key << " are: "
336  << " numStrips: " << parBook.numStrips
337  << " stripPitch: " << parBook.stripPitch
338  << " stripWidth: " << parBook.stripWidth
339  << " FirstStripPitch: "<< parBook.firstStripPitch
340  << " numWires: " << parBook.numWires
341  << " firstWireGroupWidth: " << parBook.firstWireGroupWidth
342  << " numWireGroups: " << parBook.numWireGroups
343  << " wireCutout: " << parBook.wireCutout
344  << " wirePitch: " << parBook.wirePitch
345  << " wireWidth: " << parBook.wireWidth
346  << " wireGroupWidth: " << parBook.wireGroupWidth
347  << " firstWirePosition: " << parBook.firstWirePos
348  << " Pads in Eta: " << parBook.numPadEta
349  << " Pads in Phi: " << parBook.numPadPhi
350  << " firstPadHeight: " << parBook.firstPadHeight
351  << " padHeight: " << parBook.padHeight
352  << " PadPhiShift: " << parBook.PadPhiShift
353  << " anglePadPhi: " << parBook.anglePadPhi
354  << " firstPadPhiDivision: " << parBook.firstPadPhiDivision
355  << " lPadLength: " << parBook.lPadLength
356  << " sPadLength: " << parBook.sPadLength
357  << " yCutout: " << parBook.yCutout
358  << " yCutoutCathode: " << parBook.yCutoutCathode
359  << " gasGapTck: " << parBook.gasTck
360  << " lFrameWidth: " << parBook.lFrameWidth
361  << " sFrameWidth: " << parBook.sFrameWidth);
362  }
363  return StatusCode::SUCCESS;
364 }
365 } // namespace MuonGMR4
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::wireWidth
double wireWidth
Definition: sTgcReadoutGeomTool.h:52
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::firstPadHeight
std::vector< double > firstPadHeight
Definition: sTgcReadoutGeomTool.h:59
GeoModel::TransientConstSharedPtr< StripDesign >
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::firstWirePos
std::vector< double > firstWirePos
Definition: sTgcReadoutGeomTool.h:54
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
MuonGMR4::sTgcReadoutElement::parameterBook::halfChamberTck
double halfChamberTck
Thickness of the chamber.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:50
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
CxxUtils::tokenizeDouble
std::vector< double > tokenizeDouble(const std::string &the_str, std::string_view delimiter)
Definition: Control/CxxUtils/Root/StringUtils.cxx:34
MuonGMR4::RpcReadoutElement::defineArgs
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:46
get_generator_info.result
result
Definition: get_generator_info.py:21
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::yCutoutCathode
double yCutoutCathode
Definition: sTgcReadoutGeomTool.h:68
MuonGMR4::sTgcReadoutGeomTool::extractParameters
sTgcShape extractParameters(const GeoShape *shape) const
Definition: sTgcReadoutGeomTool.cxx:42
MuonGMR4::MuonDetectorManager
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonDetectorManager.h:62
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
CxxUtils::tokenizeInt
std::vector< int > tokenizeInt(const std::string &the_str, std::string_view delimiter)
Definition: Control/CxxUtils/Root/StringUtils.cxx:55
MuonGMR4::sTgcReadoutElement::parameterBook::firstStripPitch
std::vector< double > firstStripPitch
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:64
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::lPadLength
double lPadLength
Definition: sTgcReadoutGeomTool.h:64
CxxUtils::tokenize
std::vector< std::string > tokenize(const std::string &the_str, std::string_view delimiters)
Splits the string into smaller substrings.
Definition: Control/CxxUtils/Root/StringUtils.cxx:15
MuonGMR4::sTgcReadoutGeomTool::sTgcShape::thickness
double thickness
Thickness of the shape along global z.
Definition: sTgcReadoutGeomTool.h:97
MuonGMR4::sTgcReadoutGeomTool::buildReadOutElements
StatusCode buildReadOutElements(MuonDetectorManager &mgr) override final
Definition: sTgcReadoutGeomTool.cxx:232
MuonGMR4::sTgcReadoutElement::defineArgs
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:81
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::padHeight
std::vector< double > padHeight
Definition: sTgcReadoutGeomTool.h:60
deg
#define deg
Definition: SbPolyhedron.cxx:17
SurfaceBoundSet.h
MuonGMR4::sTgcReadoutElement::parameterBook::lHalfChamberLength
double lHalfChamberLength
Length of the chamber on the long side.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:48
MuonGMR4::sTgcReadoutGeomTool::FactoryCache::stripDesigns
std::set< StripDesignPtr, StripDesignSorter > stripDesigns
Definition: sTgcReadoutGeomTool.h:79
sTgcIdHelper::Strip
@ Strip
Definition: sTgcIdHelper.h:190
MuonGMR4::sTgcReadoutGeomTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: sTgcReadoutGeomTool.h:30
MuonGMR4::sTgcReadoutGeomTool::readParameterBook
StatusCode readParameterBook(FactoryCache &cache)
Retrieves the auxillary tables from the database.
Definition: sTgcReadoutGeomTool.cxx:290
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
isValid
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition: AtlasPID.h:812
MuonGMR4::sTgcReadoutGeomTool::sTgcShape
Helper struct to translate the GeoModelShape into the parameters used to construct the readout elemen...
Definition: sTgcReadoutGeomTool.h:89
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::PadPhiShift
std::vector< int > PadPhiShift
Definition: sTgcReadoutGeomTool.h:61
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
MuonGMR4::sTgcReadoutGeomTool::FactoryCache::wireGroupDesigns
std::set< WireDesignPtr, WireDesignSorter > wireGroupDesigns
Definition: sTgcReadoutGeomTool.h:80
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::numPadPhi
std::vector< int > numPadPhi
Definition: sTgcReadoutGeomTool.h:58
Amg::getRotateZ3D
Amg::Transform3D getRotateZ3D(double angle)
get a rotation transformation around Z-axis
Definition: GeoPrimitivesHelpers.h:270
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::firstPadPhiDivision
std::vector< double > firstPadPhiDivision
Definition: sTgcReadoutGeomTool.h:63
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
sTgcReadoutGeomTool.h
sTgcReadoutElement.h
MuonCalib::Legendre::poly
constexpr double poly(const double x)
Evaluates the n-th Legendre polynomial at x.
Definition: LegendrePoly.h:156
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::numStrips
int numStrips
Definition: sTgcReadoutGeomTool.h:41
uint
unsigned int uint
Definition: LArOFPhaseFill.cxx:20
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::numWireGroups
std::vector< int > numWireGroups
Definition: sTgcReadoutGeomTool.h:49
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.
IRDBAccessSvc.h
Definition of the abstract IRDBAccessSvc interface.
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:19
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::numWires
std::vector< int > numWires
Definition: sTgcReadoutGeomTool.h:47
MuonGMR4::sTgcReadoutGeomTool::FactoryCache::parameterBook
ParamBookTable parameterBook
Definition: sTgcReadoutGeomTool.h:83
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
sTgcIdHelper::Wire
@ Wire
Definition: sTgcIdHelper.h:190
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:67
CxxUtils
Definition: aligned_vector.h:29
MuonDetectorManager.h
test_pyathena.parent
parent
Definition: test_pyathena.py:15
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::wirePitch
double wirePitch
Definition: sTgcReadoutGeomTool.h:51
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MuonGMR4::sTgcReadoutElement::parameterBook::halfChamberHeight
double halfChamberHeight
sTGC Chamber Details
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:44
MuonGMR4::sTgcReadoutGeomTool::loadDimensions
StatusCode loadDimensions(sTgcReadoutElement::defineArgs &args, FactoryCache &factory)
Loads the chamber dimensions from GeoModel.
Definition: sTgcReadoutGeomTool.cxx:71
IRDBRecordset_ptr
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition: IRDBAccessSvc.h:25
MuonGMR4::sTgcReadoutGeomTool::m_geoUtilTool
PublicToolHandle< IMuonGeoUtilityTool > m_geoUtilTool
Definition: sTgcReadoutGeomTool.h:35
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::firstWireGroupWidth
std::vector< int > firstWireGroupWidth
Definition: sTgcReadoutGeomTool.h:48
MuonGMR4::sTgcReadoutElement::parameterBook::padLayers
std::vector< StripLayer > padLayers
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:68
MuonGMR4::MuonReadoutElement::defineArgs::chambDesign
std::string chambDesign
chamber design name as it's occuring in the parameter book tables E.g. BMS5, RPC10,...
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonReadoutElement.h:49
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
MuonGMR4::sTgcReadoutGeomTool::m_geoDbTagSvc
ServiceHandle< IGeoDbTagSvc > m_geoDbTagSvc
Definition: sTgcReadoutGeomTool.h:33
sTgcIdHelper
Definition: sTgcIdHelper.h:55
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::wireCutout
std::vector< double > wireCutout
Definition: sTgcReadoutGeomTool.h:50
MuonGMR4::physVolWithTrans
IMuonGeoUtilityTool::physVolWithTrans physVolWithTrans
Definition: MdtReadoutGeomTool.cxx:33
Amg::getRotateY3D
Amg::Transform3D getRotateY3D(double angle)
get a rotation transformation around Y-axis
Definition: GeoPrimitivesHelpers.h:261
MuonGMR4::RpcReadoutElement::parameterBook::layerBounds
ActsTrk::SurfaceBoundSetPtr< Acts::RectangleBounds > layerBounds
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:41
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::yCutout
double yCutout
Definition: sTgcReadoutGeomTool.h:67
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
MuonGMR4::StripLayer
Definition: StripLayer.h:10
IRDBRecord.h
Definition of the abstract IRDBRecord interface.
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::gasTck
double gasTck
Definition: sTgcReadoutGeomTool.h:69
MuonGMR4::sTgcReadoutElement::parameterBook::gasTck
double gasTck
Thickness of the gas gap.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:56
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::stripPitch
double stripPitch
Definition: sTgcReadoutGeomTool.h:42
sTgcIdHelper::Pad
@ Pad
Definition: sTgcIdHelper.h:190
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::anglePadPhi
double anglePadPhi
Definition: sTgcReadoutGeomTool.h:62
GeoPrimitivesHelpers.h
MuonGMR4::sTgcReadoutGeomTool::sTgcShape::longWidth
double longWidth
Width of the module at the upper edge.
Definition: sTgcReadoutGeomTool.h:93
IRDBRecord_ptr
std::unique_ptr< IRDBRecord > IRDBRecord_ptr
Definition: IRDBRecordset.h:23
python.changerun.pv
pv
Definition: changerun.py:81
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::wireGroupWidth
int wireGroupWidth
Definition: sTgcReadoutGeomTool.h:53
MuonGMR4::sTgcReadoutElement::parameterBook::numLayers
unsigned int numLayers
Number of gas gap layers.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:58
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::firstStripPitch
std::vector< double > firstStripPitch
Definition: sTgcReadoutGeomTool.h:44
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
MuonGMR4::MuonReadoutElement::defineArgs::detElId
Identifier detElId
ATLAS identifier.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonReadoutElement.h:51
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:55
MuonGMR4::sTgcReadoutGeomTool::FactoryCache::padDesigns
std::set< PadDesignPtr, PadDesignSorter > padDesigns
Definition: sTgcReadoutGeomTool.h:81
ActsTrk::SurfaceBoundSetPtr
std::shared_ptr< SurfaceBoundSet< BoundType > > SurfaceBoundSetPtr
Aberivation to create a new SurfaceBoundSetPtr.
Definition: Tracking/Acts/ActsGeoUtils/ActsGeoUtils/Defs.h:19
MuonGMR4::sTgcReadoutGeomTool::FactoryCache
Definition: sTgcReadoutGeomTool.h:74
MuonGMR4::sTgcReadoutElement::parameterBook::yCutout
double yCutout
Diamond cutout height.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:62
MuonGMR4::sTgcReadoutGeomTool::sTgcShape::halfHeight
double halfHeight
Height of the module in radial direction.
Definition: sTgcReadoutGeomTool.h:91
IRDBRecordset.h
Definition of the abstract IRDBRecordset interface.
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::numPadEta
std::vector< int > numPadEta
Definition: sTgcReadoutGeomTool.h:57
MuonGMR4::sTgcReadoutGeomTool::sTgcShape::shortWidth
double shortWidth
Width of the module ath the bottom edge.
Definition: sTgcReadoutGeomTool.h:95
MuonGMR4::MuonReadoutElement::defineArgs::physVol
GeoIntrusivePtr< GeoVFullPhysVol > physVol
Pointer to the underlying physical volume in GeoModel.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonReadoutElement.h:45
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable
Struct to cache the relevant parameters of from the WSTGC tables.
Definition: sTgcReadoutGeomTool.h:38
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::stripWidth
double stripWidth
Definition: sTgcReadoutGeomTool.h:43
MuonGMR4::sTgcReadoutGeomTool::sTgcShape::yCutOut
double yCutOut
Cut out of the module.
Definition: sTgcReadoutGeomTool.h:99
MuonGMR4::sTgcReadoutElement::parameterBook::stripLayers
std::vector< StripLayer > stripLayers
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:66
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::sPadLength
double sPadLength
Definition: sTgcReadoutGeomTool.h:65
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::sFrameWidth
double sFrameWidth
Definition: sTgcReadoutGeomTool.h:71
MuonGMR4::defineArgs
RpcReadoutElement::defineArgs defineArgs
Definition: RpcReadoutGeomTool.cxx:33
MuonGMR4::sTgcReadoutGeomTool::wSTGCTable::lFrameWidth
double lFrameWidth
Definition: sTgcReadoutGeomTool.h:70
ServiceHandle< IRDBAccessSvc >
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
MuonGMR4::sTgcReadoutElement::parameterBook::sHalfChamberLength
double sHalfChamberLength
Length of the chamber on the short side.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:46