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