ATLAS Offline Software
sTgcReadoutGeomTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 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 #include<CxxUtils/bitscan.h>
18 
19 #include <GeoModelRead/ReadGeoModel.h>
22 
24 
25 #ifndef SIMULATIONBASE
26 # include "Acts/Surfaces/TrapezoidBounds.hpp"
27 #endif
28 
29 using namespace CxxUtils;
30 using namespace ActsTrk;
31 
32 namespace MuonGMR4 {
33 
36 
37 
38 sTgcReadoutGeomTool::sTgcReadoutGeomTool(const std::string& type,
39  const std::string& name,
40  const IInterface* parent)
41  : base_class{type, name, parent} {}
42 
44  sTgcShape result{};
45  if (shape->typeID() == GeoTrd::getClassTypeID()) {
46  const GeoTrd* trd = static_cast<const GeoTrd*>(shape);
47  result.longWidth = trd->getXHalfLength1();
48  result.shortWidth = trd->getXHalfLength2();
49  result.halfHeight = trd->getYHalfLength1();
50  result.thickness = trd->getZHalfLength();
51  } else if (shape->typeID() == GeoSimplePolygonBrep::getClassTypeID()) {
52  const GeoSimplePolygonBrep* poly = static_cast<const GeoSimplePolygonBrep*>(shape);
53  std::vector<Amg::Vector2D> polyEdges = m_geoUtilTool->polygonEdges(*poly);
54  result.thickness = poly->getDZ() * Gaudi::Units::mm;
55  if (polyEdges.size() == 4) {
56  result.longWidth = 0.5 * (polyEdges[0].x() - polyEdges[1].x()) * Gaudi::Units::mm;
57  result.shortWidth = 0.5 * (polyEdges[3].x() - polyEdges[2].x()) * Gaudi::Units::mm;
58  result.halfHeight = 0.5 * (polyEdges[0].y() - polyEdges[3].y()) * Gaudi::Units::mm;
59  } else if (polyEdges.size() == 6) {
60  result.longWidth = 0.5 * (polyEdges[0].x() - polyEdges[1].x()) * Gaudi::Units::mm;
61  result.shortWidth = 0.5 * (polyEdges[4].x() - polyEdges[3].x()) * Gaudi::Units::mm;
62  result.halfHeight = 0.5 * (polyEdges[0].y() - polyEdges[4].y()) * Gaudi::Units::mm;
63  result.yCutOut = (polyEdges[1].y() - polyEdges[2].y()) * Gaudi::Units::mm;
64  }
65  } else {
66  ATH_MSG_FATAL("Unknown shape type "<<shape->type());
67  throw std::runtime_error("Invalid shape to extract sTGC parameters");
68  }
69  return result;
70 }
71 
73  ATH_MSG_VERBOSE("Load dimensions of "<<m_idHelperSvc->toString(define.detElId)
74  <<std::endl<<std::endl<<m_geoUtilTool->dumpVolume(define.physVol));
75  const GeoShape* shape = m_geoUtilTool->extractShape(define.physVol);
76  if (!shape) {
77  ATH_MSG_FATAL("Failed to deduce a valid shape for "<<m_idHelperSvc->toString(define.detElId));
78  return StatusCode::FAILURE;
79  }
80  ATH_MSG_DEBUG("Extracted shape "<<m_geoUtilTool->dumpShape(shape));
82  sTgcShape modPars = extractParameters(shape);
83 
84  define.sHalfChamberLength = modPars.shortWidth;
85  define.lHalfChamberLength = modPars.longWidth;
86  define.halfChamberHeight = modPars.halfHeight;
87  define.halfChamberTck = modPars.thickness;
88  define.yCutout = modPars.yCutOut;
89 
90  ATH_MSG_DEBUG("chamber length (L/S) is: " << 2*define.lHalfChamberLength << "/"
91  << 2*define.sHalfChamberLength << " chamber height is: "
92  << 2*define.halfChamberHeight << " chamber thickness is: " << 2*define.halfChamberTck << " yCutout value is: " << define.yCutout);
93 
95  std::vector<physVolWithTrans> allGasGaps = m_geoUtilTool->findAllLeafNodesByName(define.physVol, "sTgcGas");
96  if (allGasGaps.empty()) {
97  ATH_MSG_FATAL("The volume "<<m_idHelperSvc->toStringDetEl(define.detElId)<<" does not have any children 'sTgcGas'"
98  <<std::endl<<m_geoUtilTool->dumpVolume(define.physVol));
99  return StatusCode::FAILURE;
100  }
101 
103  define.numLayers = allGasGaps.size();
104  ATH_MSG_VERBOSE("The number of gasGaps are: " << define.numLayers);
105  FactoryCache::ParamBookTable::const_iterator parBookItr = factoryCache.parameterBook.find(define.chambDesign);
106  if (parBookItr == factoryCache.parameterBook.end()) {
107  ATH_MSG_FATAL("The chamber "<<define.chambDesign<<" is not part of the WSTGC table");
108  return StatusCode::FAILURE;
109  }
110 
111  const wSTGCTable& paramBook{parBookItr->second};
112 
113  define.gasTck = paramBook.gasTck;
115  unsigned int gasGap{0};
116  for (physVolWithTrans& gapVol : allGasGaps) {
117  StripDesignPtr stripDesign = std::make_unique<StripDesign>();
118  WireDesignPtr wireGroupDesign = std::make_unique<WireGroupDesign>();
119  PadDesignPtr padDesign = std::make_unique<PadDesign>();
120 
121  sTgcShape gapPars = extractParameters(m_geoUtilTool->extractShape(gapVol.volume));
122 
124  double firstStripPos = -gapPars.halfHeight + paramBook.firstStripPitch[gasGap] - 0.5 * paramBook.stripPitch;
125  define.firstStripPitch = paramBook.firstStripPitch;
126  ATH_MSG_DEBUG("FirstStripPos is: " << Amg::toString(firstStripPos, 2) << " and the half height is: " << gapPars.halfHeight);
127 
129  unsigned int numWireGroups = paramBook.numWireGroups[gasGap];
131  double firstWirePos = paramBook.firstWirePos[gasGap];
132 
133  if(gapPars.yCutOut) {
135  stripDesign->defineDiamond(gapPars.shortWidth, gapPars.longWidth, gapPars.halfHeight, paramBook.yCutoutCathode);
136  ATH_MSG_VERBOSE("The yCutout of the active area is: " << gapPars.yCutOut);
137  stripDesign->defineStripLayout(Amg::Vector2D{firstStripPos, 0.},
138  paramBook.stripPitch, paramBook.stripWidth, paramBook.numStrips);
139  ATH_MSG_VERBOSE("Created new diamond strip design "<<(*stripDesign));
141  wireGroupDesign->defineDiamond(0.5*paramBook.sPadLength, 0.5*paramBook.lPadLength, gapPars.halfHeight, paramBook.yCutoutCathode);
142  wireGroupDesign->flipTrapezoid();
143  wireGroupDesign->defineStripLayout(Amg::Vector2D{firstWirePos, 0.},
144  paramBook.wirePitch,
145  paramBook.wireWidth,
146  numWireGroups);
147  ATH_MSG_VERBOSE("Created new diamond wireGroup design "<<(*wireGroupDesign));
148 
150  padDesign->defineDiamond(0.5*paramBook.sPadLength, 0.5*paramBook.lPadLength, gapPars.halfHeight, paramBook.yCutoutCathode);
151  padDesign->flipTrapezoid();
152  ATH_MSG_VERBOSE("Created new diamond pad design "<<(*padDesign));
153  }
154  else if (!gapPars.yCutOut) {
156  stripDesign->defineTrapezoid(gapPars.shortWidth, gapPars.longWidth, gapPars.halfHeight);
157  stripDesign->defineStripLayout(Amg::Vector2D{firstStripPos, 0.},
158  paramBook.stripPitch, paramBook.stripWidth, paramBook.numStrips);
159  ATH_MSG_VERBOSE("Created new strip design "<<(*stripDesign));
160 
162  wireGroupDesign->defineTrapezoid(0.5*paramBook.sPadLength, 0.5*paramBook.lPadLength, gapPars.halfHeight);
163  wireGroupDesign->flipTrapezoid();
164  wireGroupDesign->defineStripLayout(Amg::Vector2D{firstWirePos, 0.},
165  paramBook.wirePitch,
166  paramBook.wireWidth,
167  numWireGroups);
168  ATH_MSG_VERBOSE("Created new wireGroup design "<<(*wireGroupDesign));
169 
171  padDesign->defineTrapezoid(0.5*paramBook.sPadLength, 0.5*paramBook.lPadLength, gapPars.halfHeight);
172  padDesign->flipTrapezoid();
173  ATH_MSG_VERBOSE("Created new pad design "<<(*padDesign));
174  }
175 
177  wireGroupDesign->declareGroup(paramBook.firstWireGroupWidth[gasGap]);
178  for (uint wireGr=2; wireGr<numWireGroups; wireGr++){
179  wireGroupDesign->declareGroup(paramBook.wireGroupWidth);
180  }
181  unsigned int lastWireGroup = (paramBook.numWires[gasGap] - wireGroupDesign->nAllWires());
182  wireGroupDesign->declareGroup(lastWireGroup);
183  wireGroupDesign->defineWireCutout(paramBook.wireCutout[gasGap]);
184 
186  double beamlineRadius = (define.physVol->getAbsoluteTransform() * gapVol.transform).translation().perp();
187  padDesign->defineBeamlineRadius(beamlineRadius);
188  ATH_MSG_DEBUG("The beamline radius is: " << beamlineRadius);
189  padDesign->definePadRow(paramBook.firstPadPhiDivision[gasGap],
190  paramBook.numPadPhi[gasGap],
191  paramBook.anglePadPhi,
192  paramBook.PadPhiShift[gasGap]);
193  padDesign->definePadColumn(paramBook.firstPadHeight[gasGap],
194  paramBook.numPadEta[gasGap],
195  paramBook.padHeight[gasGap]);
196 
205  ++gasGap;
207  stripDesign = (*factoryCache.stripDesigns.emplace(stripDesign).first);
208  StripLayer stripLayer(gapVol.transform * Amg::getRotateZ3D(-90. * Gaudi::Units::deg)
209  * Amg::getRotateY3D(180* Gaudi::Units::deg), stripDesign,
211  ATH_MSG_VERBOSE("Added new diamond strip layer at "<< stripLayer);
212  define.stripLayers.push_back(std::move(stripLayer));
213 
215  wireGroupDesign = (*factoryCache.wireGroupDesigns.emplace(wireGroupDesign).first);
216  StripLayer wireGroupLayer(gapVol.transform * Amg::getRotateY3D(180* Gaudi::Units::deg),
217  wireGroupDesign, sTgcReadoutElement::createHash(gasGap,
218  sTgcIdHelper::Wire, 0));
219  ATH_MSG_VERBOSE("Added new diamond wireGroup layer at "<<wireGroupLayer);
220  define.wireGroupLayers.push_back(std::move(wireGroupLayer));
221 
223  padDesign = (*factoryCache.padDesigns.emplace(padDesign).first);
224  StripLayer padLayer(gapVol.transform * Amg::getRotateY3D(180* Gaudi::Units::deg),
226  sTgcIdHelper::Pad, 0));
227  ATH_MSG_VERBOSE("Added new diamond pad layer at "<<padLayer);
228  define.padLayers.push_back(std::move(padLayer));
229  }
230  return StatusCode::SUCCESS;
231 }
232 
234  ATH_CHECK(m_geoDbTagSvc.retrieve());
235  ATH_CHECK(m_idHelperSvc.retrieve());
236  ATH_CHECK(m_geoUtilTool.retrieve());
237 
238  GeoModelIO::ReadGeoModel* sqliteReader = m_geoDbTagSvc->getSqliteReader();
239  if (!sqliteReader) {
240  ATH_MSG_FATAL("Error, the tool works exclusively from sqlite geometry inputs");
241  return StatusCode::FAILURE;
242  }
243 
244  FactoryCache facCache{};
245  ATH_CHECK(readParameterBook(facCache));
246 
247  const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
248  // Get the list of full phys volumes from SQLite, and create detector elements
249 
250  physNodeMap mapFPV = sqliteReader->getPublishedNodes<std::string, GeoFullPhysVol*>("Muon");
251 #ifndef SIMULATIONBASE
252  SurfaceBoundSetPtr<Acts::TrapezoidBounds> layerBounds = std::make_shared<SurfaceBoundSet<Acts::TrapezoidBounds>>();
253 #endif
254 
255  for (auto& [key, pv] : mapFPV) {
259  std::vector<std::string> key_tokens = tokenize(key, "_");
260  if (key_tokens.size() != 5 ||
261  key_tokens[0].find("sTGC") == std::string::npos)
262  continue;
263  ATH_MSG_DEBUG("Key is: "<<key);
264  bool isValid{false};
265  const std::string stName = key_tokens[1][1] == 'L' ? "STL" : "STS";
266  const int stEta = atoi(key_tokens[2]);
267  const int stPhi = atoi(key_tokens[3]);
268  const int ml = atoi(key_tokens[4]);
269 
270  defineArgs define{};
271 #ifndef SIMULATIONBASE
272  define.layerBounds = layerBounds;
273 #endif
274  //Need identifier to get multilayer, the following constants don't matter.
275  define.detElId = idHelper.channelID(stName, stEta, stPhi, ml, 1, sTgcIdHelper::sTgcChannelTypes::Strip, 1, isValid);
276  if (!isValid) {
277  ATH_MSG_FATAL("Failed to build a good identifier out of " << key);
278  return StatusCode::FAILURE;
279  }
281  define.physVol = pv;
282  define.chambDesign = "sTGC_" + key_tokens[1];
283  define.alignTransform = m_geoUtilTool->findAlignableTransform(define.physVol);
284  ATH_MSG_VERBOSE("Key "<<key<<" lead to the identifier "<<m_idHelperSvc->toStringDetEl(define.detElId));
285  ATH_CHECK(loadDimensions(define, facCache));
286  std::unique_ptr<sTgcReadoutElement> readoutEle = std::make_unique<sTgcReadoutElement>(std::move(define));
287  ATH_CHECK(mgr.addsTgcReadoutElement(std::move(readoutEle)));
288  }
289  return StatusCode::SUCCESS;
290 }
292  ServiceHandle<IRDBAccessSvc> accessSvc(m_geoDbTagSvc->getParamSvcName(), name());
293  ATH_CHECK(accessSvc.retrieve());
294  IRDBRecordset_ptr paramTable = accessSvc->getRecordsetPtr("WSTGC", "");
295  if (paramTable->size() == 0) {
296  ATH_MSG_FATAL("Empty parameter book table found");
297  return StatusCode::FAILURE;
298  }
299  ATH_MSG_VERBOSE("Found the " << paramTable->nodeName() << " ["
300  << paramTable->tagName() << "] table with "
301  << paramTable->size() << " records");
302  for (const IRDBRecord_ptr& record : *paramTable) {
303  // parameterBook pars{};
304  const std::string key = record-> getString("WSTGC_TYPE");
305  wSTGCTable& parBook = cache.parameterBook[key];
306  parBook.numStrips = record->getInt("nStrips");
307  parBook.stripPitch = record->getDouble("stripPitch");
308  parBook.stripWidth = record->getDouble("stripWidth");
309  parBook.firstStripPitch = tokenizeDouble(record->getString("firstStripWidth"), ";");
310 
311  parBook.numWires = tokenizeInt(record->getString("nWires"), ";");
312  parBook.firstWireGroupWidth = tokenizeInt(record->getString("firstWireGroup"), ";");
313  parBook.numWireGroups = tokenizeInt(record->getString("nWireGroups"), ";");
314  parBook.wireCutout = tokenizeDouble(record->getString("wireCutout"), ";");
315  parBook.wirePitch = record->getDouble("wirePitch");
316  parBook.wireWidth = record->getDouble("wireWidth");
317  parBook.wireGroupWidth = record->getInt("wireGroupWidth");
318  parBook.firstWirePos = tokenizeDouble(record->getString("firstWire"), ";");
319 
320  parBook.numPadEta = tokenizeInt(record->getString("nPadH"), ";");
321  parBook.numPadPhi = tokenizeInt(record->getString("nPadPhi"), ";");
322  parBook.firstPadHeight = tokenizeDouble(record->getString("firstPadH"), ";");
323  parBook.padHeight = tokenizeDouble(record->getString("padH"), ";");
324  parBook.PadPhiShift = tokenizeInt(record->getString("PadPhiShift"), ";");
325  parBook.anglePadPhi = record->getDouble("anglePadPhi");
326  parBook.firstPadPhiDivision = tokenizeDouble(record->getString("firstPadPhiDivision"), ";");
327  parBook.lPadLength = record->getDouble("lPadWidth");
328  parBook.sPadLength = record->getDouble("sPadWidth");
329 
330  parBook.yCutout = record->getDouble("yCutout");
331  parBook.yCutoutCathode = record->getDouble("yCutoutCathode");
332  parBook.gasTck = record->getDouble("gasTck");
333  parBook.lFrameWidth = record->getDouble("ylFrame");
334  parBook.sFrameWidth = record->getDouble("ysFrame");
335 
336  ATH_MSG_DEBUG("Parameters of the chamber " << key << " are: "
337  << " numStrips: " << parBook.numStrips
338  << " stripPitch: " << parBook.stripPitch
339  << " stripWidth: " << parBook.stripWidth
340  << " FirstStripPitch: "<< parBook.firstStripPitch
341  << " numWires: " << parBook.numWires
342  << " firstWireGroupWidth: " << parBook.firstWireGroupWidth
343  << " numWireGroups: " << parBook.numWireGroups
344  << " wireCutout: " << parBook.wireCutout
345  << " wirePitch: " << parBook.wirePitch
346  << " wireWidth: " << parBook.wireWidth
347  << " wireGroupWidth: " << parBook.wireGroupWidth
348  << " firstWirePosition: " << parBook.firstWirePos
349  << " Pads in Eta: " << parBook.numPadEta
350  << " Pads in Phi: " << parBook.numPadPhi
351  << " firstPadHeight: " << parBook.firstPadHeight
352  << " padHeight: " << parBook.padHeight
353  << " PadPhiShift: " << parBook.PadPhiShift
354  << " anglePadPhi: " << parBook.anglePadPhi
355  << " firstPadPhiDivision: " << parBook.firstPadPhiDivision
356  << " lPadLength: " << parBook.lPadLength
357  << " sPadLength: " << parBook.sPadLength
358  << " yCutout: " << parBook.yCutout
359  << " yCutoutCathode: " << parBook.yCutoutCathode
360  << " gasGapTck: " << parBook.gasTck
361  << " lFrameWidth: " << parBook.lFrameWidth
362  << " sFrameWidth: " << parBook.sFrameWidth);
363  }
364  return StatusCode::SUCCESS;
365 }
366 } // 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:49
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:43
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:63
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:233
MuonGMR4::sTgcReadoutElement::defineArgs
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:80
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:47
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:291
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:620
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
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)
Definition: LegendrePoly.h:116
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:20
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:66
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:43
MuonGMR4::sTgcReadoutGeomTool::loadDimensions
StatusCode loadDimensions(sTgcReadoutElement::defineArgs &args, FactoryCache &factory)
Loads the chamber dimensions from GeoModel.
Definition: sTgcReadoutGeomTool.cxx:72
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:67
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:228
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:55
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
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
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:57
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:54
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:61
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
bitscan.h
Bit scanning functions.
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:65
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:37
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:45