ATLAS Offline Software
RpcReadoutGeomTool.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 "RpcReadoutGeomTool.h"
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/GeoBox.h>
17 
18 #include <GeoModelRead/ReadGeoModel.h>
21 
23 #ifndef SIMULATIONBASE
24 # include "Acts/Surfaces/TrapezoidBounds.hpp"
25 #endif
26 
27 namespace {
28  constexpr double tolerance = 0.001 * Gaudi::Units::mm;
29 }
30 
31 using namespace CxxUtils;
32 using namespace ActsTrk;
33 
34 namespace MuonGMR4 {
35 
38 
41 struct gapVolume: public physVolWithTrans {
43  unsigned int gap,
44  unsigned int phi):
45  physVolWithTrans{std::move(physVol)},
46  gasGap{gap},
47  doubPhi{phi} {}
48  unsigned int gasGap{0};
49  unsigned int doubPhi{0};
50 
51 };
52 
53 inline bool layerSorter(const physVolWithTrans&a, const physVolWithTrans & b){
54  const Amg::Vector3D cA = a.transform.translation();
55  const Amg::Vector3D cB = b.transform.translation();
56  if (std::abs(cA.x() - cB.x()) > tolerance) return (cA.x() < cB.x());
57  return (cA.y() < cB.y());
58 }
59 
60 
61 RpcReadoutGeomTool::RpcReadoutGeomTool(const std::string& type,
62  const std::string& name,
63  const IInterface* parent)
64  : base_class{type, name, parent} {}
65 
67  FactoryCache& factoryCache) {
68 
69  ATH_MSG_VERBOSE("Load dimensions of "<<m_idHelperSvc->toString(define.detElId)
70  <<std::endl<<std::endl<<m_geoUtilTool->dumpVolume(define.physVol));
71 
72  const GeoShape* shape = m_geoUtilTool->extractShape(define.physVol);
73  if (!shape) {
74  ATH_MSG_FATAL("Failed to deduce a valid shape for "<<m_idHelperSvc->toString(define.detElId));
75  return StatusCode::FAILURE;
76  }
77  ATH_MSG_DEBUG("Extracted shape "<<m_geoUtilTool->dumpShape(shape));
79  if (shape->typeID() != GeoBox::getClassTypeID()) {
80  ATH_MSG_FATAL(__FILE__<<":"<<__LINE__<<" expect shape to be a box but it's "<<m_geoUtilTool->dumpShape(shape));
81  return StatusCode::FAILURE;
82  }
83 
84  const GeoBox* box = static_cast<const GeoBox*>(shape);
85  define.halfThickness = box->getXHalfLength() * Gaudi::Units::mm;
86  define.halfLength = box->getZHalfLength() * Gaudi::Units::mm;
87  define.halfWidth = box->getYHalfLength() * Gaudi::Units::mm;
88 
98  std::vector<physVolWithTrans> stripLayers = m_geoUtilTool->findAllLeafNodesByName(define.physVol, "bottomStripLayer");
99  if (stripLayers.empty()) {
100  ATH_MSG_FATAL("The volume "<<m_idHelperSvc->toStringDetEl(define.detElId)<<" does not have any childern 'bottomStripLayer'"
101  <<std::endl<<m_geoUtilTool->dumpVolume(define.physVol));
102  return StatusCode::FAILURE;
103  }
104  std::vector<physVolWithTrans> allGasGaps = m_geoUtilTool->findAllLeafNodesByName(define.physVol, "RpcGasGap");
105  if (allGasGaps.empty()) {
106  ATH_MSG_FATAL("The volume "<<m_idHelperSvc->toStringDetEl(define.detElId)<<" does not have any childern 'RpcGasGap'"
107  <<std::endl<<m_geoUtilTool->dumpVolume(define.physVol));
108  return StatusCode::FAILURE;
109  }
111  std::stable_sort(allGasGaps.begin(), allGasGaps.end(), layerSorter);
112  std::stable_sort(stripLayers.begin(),stripLayers.end(), layerSorter);
116  for (physVolWithTrans& stripLayer : stripLayers){
118  const Amg::Vector3D stripTrans = stripLayer.transform.translation();
119  std::vector<physVolWithTrans>::iterator closestGap = std::min_element(allGasGaps.begin(), allGasGaps.end(),
120  [&stripTrans](const physVolWithTrans& a, const physVolWithTrans& b){
121  return std::abs(stripTrans.x() - a.transform.translation().x()) <
122  std::abs(stripTrans.x() - b.transform.translation().x());
123  });
124  stripLayer.transform.translation().x() = closestGap->transform.translation().x();
125  }
126 
129  Amg::Vector3D prevGap{stripLayers[0].transform.translation()};
130  unsigned int gasGap{1}, doubletPhi{0};
131 
132  unsigned int modulePhi = m_idHelperSvc->rpcIdHelper().doubletPhi(define.detElId);
133  std::vector<gapVolume> allGapsWithIdx{};
134  const bool isAside{m_idHelperSvc->stationEta(define.detElId) > 0};
135  for (physVolWithTrans& gapVol : stripLayers) {
136  Amg::Vector3D gCen = gapVol.transform.translation();
138  if (std::abs(gCen.x() - prevGap.x()) > tolerance) {
139  ++gasGap;
140  doubletPhi = 1;
141  } else ++doubletPhi;
142  ATH_MSG_DEBUG("Gas gap at "<<Amg::toString(gCen, 2)<<" is associated with gasGap: "<<gasGap<<", doubletPhi: "<<doubletPhi);
143  prevGap = std::move(gCen);
146  doubletPhi = std::max (doubletPhi, modulePhi);
147  allGapsWithIdx.emplace_back(std::move(gapVol), gasGap, doubletPhi);
148  }
150  define.nGasGaps = gasGap;
153  define.nPanelsInPhi = modulePhi == 2 ? 1 : doubletPhi;
154  FactoryCache::ParamBookTable::const_iterator parBookItr = factoryCache.parameterBook.find(define.chambDesign);
155  if (parBookItr == factoryCache.parameterBook.end()) {
156  ATH_MSG_FATAL("The chamber "<<define.chambDesign<<" is not part of the WRPC table");
157  return StatusCode::FAILURE;
158  }
159  const wRPCTable& paramBook{parBookItr->second};
160 
161  for (gapVolume& gapVol : allGapsWithIdx) {
162  const GeoShape* gapShape = m_geoUtilTool->extractShape(gapVol.volume);
163  if (gapShape->typeID() != GeoBox::getClassTypeID()) {
164  ATH_MSG_FATAL("Failed to extract a geo shape");
165  return StatusCode::FAILURE;
166  }
167  const GeoBox* gapBox = static_cast<const GeoBox*>(gapShape);
168  ATH_MSG_DEBUG("Gas gap dimensions "<<m_geoUtilTool->dumpShape(gapBox));
169  StripDesignPtr etaDesign = std::make_unique<StripDesign>();
171  const double firstStripPosEta = -gapBox->getZHalfLength() + paramBook.firstOffSetEta;
172  etaDesign->defineStripLayout(firstStripPosEta * Amg::Vector2D::UnitX(),
173  paramBook.stripPitchEta,
174  paramBook.stripWidthEta,
175  paramBook.numEtaStrips);
177  etaDesign->defineTrapezoid(gapBox->getYHalfLength(), gapBox->getYHalfLength(), gapBox->getZHalfLength());
178  gapVol.transform = gapVol.transform * Amg::getRotateY3D( (isAside ? -90. : 90.)* Gaudi::Units::degree);
179 
180  etaDesign = (*factoryCache.stripDesigns.emplace(etaDesign).first);
181  const IdentifierHash etaHash {RpcReadoutElement::createHash(0, gapVol.gasGap, gapVol.doubPhi, false)};
182  const unsigned int etaIdx = static_cast<unsigned int>(etaHash);
183  if (etaIdx >= define.layers.size()) {
184  define.layers.resize(etaIdx + 1);
185  }
186 
187  auto etaLayer = std::make_unique<StripLayer>(gapVol.transform, etaDesign, etaHash);
188  define.layers[etaIdx] = (*factoryCache.stripLayers.emplace(std::move(etaLayer)).first);
189 
190  ATH_MSG_VERBOSE("Added new eta gap at "<<(*define.layers[etaIdx]));
191  if (!define.etaDesign) define.etaDesign = etaDesign;
192 
193  if (!paramBook.numPhiStrips) {
194  ATH_MSG_VERBOSE("Rpc readout element without phi strips");
195  continue;
196  }
197  StripDesignPtr phiDesign = std::make_unique<StripDesign>();
198  const double firstStripPosPhi = -gapBox->getYHalfLength() + paramBook.firstOffSetPhi;
199  phiDesign->defineStripLayout(firstStripPosPhi * Amg::Vector2D::UnitX(),
200  paramBook.stripPitchPhi,
201  paramBook.stripWidthPhi,
202  paramBook.numPhiStrips);
203  phiDesign->defineTrapezoid(gapBox->getZHalfLength(), gapBox->getZHalfLength(), gapBox->getYHalfLength());
205  phiDesign = (*factoryCache.stripDesigns.emplace(phiDesign).first);
206 
207  const IdentifierHash phiHash {RpcReadoutElement::createHash(0, gapVol.gasGap, gapVol.doubPhi, true)};
208  const unsigned int phiIdx = static_cast<unsigned int>(phiHash);
209  if (phiIdx >= define.layers.size()) {
210  define.layers.resize(phiIdx + 1);
211  }
212  auto phiLayer = std::make_unique<StripLayer>(gapVol.transform * Amg::getRotateZ3D(90. * Gaudi::Units::deg),
213  phiDesign, phiHash);
214  define.layers[phiIdx] = (*factoryCache.stripLayers.emplace(std::move(phiLayer)).first);
215  ATH_MSG_VERBOSE("Added new phi gap at "<<(*define.layers[phiIdx]));
216  if (!define.phiDesign) define.phiDesign = phiDesign;
217  }
218  return StatusCode::SUCCESS;
219 }
221  GeoModelIO::ReadGeoModel* sqliteReader = m_geoDbTagSvc->getSqliteReader();
222  if (!sqliteReader) {
223  ATH_MSG_FATAL("Error, the tool works exclusively from sqlite geometry inputs");
224  return StatusCode::FAILURE;
225  }
226 
227  FactoryCache facCache{};
228  ATH_CHECK(readParameterBook(facCache));
229 
230  const RpcIdHelper& idHelper{m_idHelperSvc->rpcIdHelper()};
231  // Get the list of full phys volumes from SQLite, and create detector elements
232 
234  physNodeMap mapFPV = sqliteReader->getPublishedNodes<std::string, GeoFullPhysVol*>("Muon");
235 #ifndef SIMULATIONBASE
236  SurfaceBoundSetPtr<Acts::RectangleBounds> layerBounds = std::make_shared<SurfaceBoundSet<Acts::RectangleBounds>>();
237 #endif
238  for (auto& [key, pv] : mapFPV) {
245  std::vector<std::string> key_tokens = tokenize(key, "_");
246  if (key_tokens.size() < 7 ||
247  key_tokens[1].find("RPC") == std::string::npos) {
248  continue;
249  }
250  bool isValid{false};
252  const Identifier elementID = idHelper.padID(idHelper.stationNameIndex(key_tokens[0].substr(0, 3)),
253  atoi(key_tokens[2]),
254  atoi(key_tokens[3]),
255  atoi(key_tokens[4]),
256  atoi(key_tokens[6]),
257  atoi(key_tokens[5]),
258  isValid);
259  if (!isValid) {
260  ATH_MSG_FATAL("Failed to construct the station Identifier from "<<key);
261  return StatusCode::FAILURE;
262  }
263  defineArgs define{};
264  define.physVol = pv;
265  define.chambDesign = key_tokens[1];
266  define.alignTransform = m_geoUtilTool->findAlignableTransform(define.physVol);
267  define.detElId = elementID;
268  ATH_MSG_VERBOSE("Key "<<key<<" lead to Identifier "<<m_idHelperSvc->toStringDetEl(elementID));
269  ATH_CHECK(loadDimensions(define, facCache));
270 #ifndef SIMULATIONBASE
271  define.layerBounds = layerBounds;
272 #endif
273  std::unique_ptr<RpcReadoutElement> readoutEle = std::make_unique<RpcReadoutElement>(std::move(define));
274  ATH_CHECK(mgr.addRpcReadoutElement(std::move(readoutEle)));
275  }
276  return StatusCode::SUCCESS;
277 }
279  ServiceHandle<IRDBAccessSvc> accessSvc(m_geoDbTagSvc->getParamSvcName(), name());
280  ATH_CHECK(accessSvc.retrieve());
281  IRDBRecordset_ptr paramTable = accessSvc->getRecordsetPtr("WRPC", "");
282  if (paramTable->size() == 0) {
283  ATH_MSG_FATAL("Empty parameter book table found");
284  return StatusCode::FAILURE;
285  }
286  ATH_MSG_VERBOSE("Found the " << paramTable->nodeName() << " ["
287  << paramTable->tagName() << "] table with "
288  << paramTable->size() << " records");
289 
290  for (const IRDBRecord_ptr& record : *paramTable) {
291  const std::string chambType = record->getString("WRPC_TYPE");
292  wRPCTable& parBook = cache.parameterBook[record->getString("WRPC_TYPE")];
293  parBook.stripPitchEta = record->getDouble("etaStripPitch") * Gaudi::Units::cm;
294  parBook.stripPitchPhi = record->getDouble("phiStripPitch") * Gaudi::Units::cm;
295  const double stripDeadWidth = record->getDouble("stripDeadWidth") * Gaudi::Units::cm;
296  parBook.stripWidthEta = parBook.stripPitchEta - stripDeadWidth;
297  parBook.stripWidthPhi = parBook.stripPitchPhi - stripDeadWidth;
298  parBook.numEtaStrips = record->getInt("nEtaStrips");
299  parBook.numPhiStrips = record->getInt("nPhiStrips");
300  parBook.firstOffSetPhi = record->getDouble("phiStripOffSet") * Gaudi::Units::cm +
301  0.5 * parBook.stripPitchPhi;
302  parBook.firstOffSetEta = record->getDouble("etaStripOffSet") * Gaudi::Units::cm +
303  record->getDouble("TCKSSU") * Gaudi::Units::cm +
304  0.5 * parBook.stripPitchEta;
305 
306  ATH_MSG_VERBOSE("Extracted parameters for chamber "<<chambType
307  <<", num strips (eta/phi): "<<parBook.numEtaStrips<<"/"<<parBook.numPhiStrips
308  <<", strip pitch (eta/phi) "<<parBook.stripPitchEta<<"/"<<parBook.stripPitchPhi
309  <<", strip width (eta/phi): "<<parBook.stripWidthEta<<"/"<<parBook.stripWidthPhi
310  <<", strip offset (eta/phi): "<<parBook.firstOffSetEta<<"/"<<parBook.firstOffSetPhi
311  <<", etaStripOffSet: "<<(record->getDouble("etaStripOffSet") * Gaudi::Units::cm)
312  <<", phiStripOffSet: "<<(record->getDouble("phiStripOffSet") * Gaudi::Units::cm)
313  <<", TCKSSU: "<<(record->getDouble("TCKSSU")* Gaudi::Units::cm));
314  }
315  return StatusCode::SUCCESS;
316 }
317 } // namespace MuonGMR4
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
MuonGMR4::RpcReadoutGeomTool::loadDimensions
StatusCode loadDimensions(RpcReadoutElement::defineArgs &args, FactoryCache &factory)
Loads the chamber dimensions from GeoModel.
Definition: RpcReadoutGeomTool.cxx:66
GeoModel::TransientConstSharedPtr< StripDesign >
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
MuonGMR4::RpcReadoutElement::parameterBook::halfWidth
double halfWidth
Elongation within the sector
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:29
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
MuonGMR4::RpcReadoutElement::defineArgs
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:46
MuonGMR4::RpcReadoutGeomTool::wRPCTable::stripWidthPhi
double stripWidthPhi
Phi strip width.
Definition: RpcReadoutGeomTool.h:44
MuonGMR4::MuonDetectorManager
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonDetectorManager.h:62
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
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::gapVolume::gapVolume
gapVolume(physVolWithTrans &&physVol, unsigned int gap, unsigned int phi)
Definition: RpcReadoutGeomTool.cxx:42
MuonGMR4::RpcReadoutElement::parameterBook::halfThickness
double halfThickness
Half thickness of the Rpc module.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:27
MuonGMR4::RpcReadoutGeomTool::readParameterBook
StatusCode readParameterBook(FactoryCache &cache)
Retrieves the auxillary tables from the database.
Definition: RpcReadoutGeomTool.cxx:278
MuonGMR4::RpcReadoutElement::parameterBook::layers
std::vector< StripLayerPtr > layers
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:36
deg
#define deg
Definition: SbPolyhedron.cxx:17
SurfaceBoundSet.h
MuonGMR4::RpcReadoutElement::parameterBook::nPanelsInPhi
int nPanelsInPhi
Each gas gap is usually subdivided into 2 phi panels which is actually the sector granularity of the ...
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:35
MuonGMR4::RpcReadoutGeomTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: RpcReadoutGeomTool.h:28
MuonGMR4::RpcReadoutElement::parameterBook::etaDesign
StripDesignPtr etaDesign
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:39
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
CaloSwCorrections.gap
def gap(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:212
RpcReadoutGeomTool.h
RpcIdHelper
Definition: RpcIdHelper.h:51
MuonGMR4::RpcReadoutGeomTool::FactoryCache::parameterBook
ParamBookTable parameterBook
Definition: RpcReadoutGeomTool.h:62
MuonGMR4::RpcReadoutGeomTool::FactoryCache::stripLayers
std::set< StripLayerPtr, StripLayerSorter > stripLayers
Definition: RpcReadoutGeomTool.h:61
Amg::getRotateZ3D
Amg::Transform3D getRotateZ3D(double angle)
get a rotation transformation around Z-axis
Definition: GeoPrimitivesHelpers.h:270
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
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
EventPrimitivesToStringConverter.h
MuonGMR4::RpcReadoutElement::parameterBook::phiDesign
StripDesignPtr phiDesign
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:38
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::RpcReadoutElement::parameterBook::halfLength
double halfLength
RPC panel dimensions.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:25
MuonGMR4::RpcReadoutGeomTool::wRPCTable::numEtaStrips
unsigned int numEtaStrips
Number of eta strips.
Definition: RpcReadoutGeomTool.h:50
CxxUtils
Definition: aligned_vector.h:29
MuonDetectorManager.h
MuonGMR4::RpcReadoutGeomTool::wRPCTable::firstOffSetEta
double firstOffSetEta
Offset of the first eta strip.
Definition: RpcReadoutGeomTool.h:48
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MuonGMR4::layerSorter
bool layerSorter(const physVolWithTrans &a, const physVolWithTrans &b)
Definition: RpcReadoutGeomTool.cxx:53
IRDBRecordset_ptr
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition: IRDBAccessSvc.h:25
MuonGMR4::RpcReadoutGeomTool::wRPCTable::stripPitchPhi
double stripPitchPhi
Phi strip pitch.
Definition: RpcReadoutGeomTool.h:40
tolerance
Definition: suep_shower.h:17
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
MuonGMR4::RpcReadoutGeomTool::wRPCTable::stripPitchEta
double stripPitchEta
Eta strip pitch.
Definition: RpcReadoutGeomTool.h:38
MuonGMR4::gapVolume
Helper struct to attribute the Identifier fields with the gas gap volumes.
Definition: RpcReadoutGeomTool.cxx:41
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
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
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonGMR4::RpcReadoutGeomTool::FactoryCache::stripDesigns
std::set< StripDesignPtr, StripDesignSorter > stripDesigns
Definition: RpcReadoutGeomTool.h:60
MuonGMR4::RpcReadoutGeomTool::m_geoDbTagSvc
ServiceHandle< IGeoDbTagSvc > m_geoDbTagSvc
Definition: RpcReadoutGeomTool.h:31
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
a
TList * a
Definition: liststreamerinfos.cxx:10
IRDBRecord.h
Definition of the abstract IRDBRecord interface.
MuonGMR4::RpcReadoutGeomTool::FactoryCache
Definition: RpcReadoutGeomTool.h:55
GeoPrimitivesHelpers.h
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
IRDBRecord_ptr
std::unique_ptr< IRDBRecord > IRDBRecord_ptr
Definition: IRDBRecordset.h:23
MuonGMR4::RpcReadoutGeomTool::buildReadOutElements
StatusCode buildReadOutElements(MuonDetectorManager &mgr) override final
Definition: RpcReadoutGeomTool.cxx:220
python.changerun.pv
pv
Definition: changerun.py:81
MuonGMR4::RpcReadoutGeomTool::m_geoUtilTool
PublicToolHandle< IMuonGeoUtilityTool > m_geoUtilTool
Definition: RpcReadoutGeomTool.h:33
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
createCablingJSON.doubletPhi
int doubletPhi
Definition: createCablingJSON.py:16
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
ActsTrk::SurfaceBoundSetPtr
std::shared_ptr< SurfaceBoundSet< BoundType > > SurfaceBoundSetPtr
Aberivation to create a new SurfaceBoundSetPtr.
Definition: Tracking/Acts/ActsGeoUtils/ActsGeoUtils/Defs.h:19
MuonGMR4::RpcReadoutGeomTool::wRPCTable::firstOffSetPhi
double firstOffSetPhi
Offset of the first phi strip.
Definition: RpcReadoutGeomTool.h:46
MuonGMR4::RpcReadoutElement::parameterBook::nGasGaps
unsigned int nGasGaps
The number of gas gaps (along the radial direction) in the RPC chamber (2 or 3)
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:32
IRDBRecordset.h
Definition of the abstract IRDBRecordset interface.
MuonGMR4::MuonReadoutElement::defineArgs::physVol
GeoIntrusivePtr< GeoVFullPhysVol > physVol
Pointer to the underlying physical volume in GeoModel.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonReadoutElement.h:45
python.SystemOfUnits.degree
tuple degree
Definition: SystemOfUnits.py:106
MuonGMR4::RpcReadoutGeomTool::wRPCTable::stripWidthEta
double stripWidthEta
Eta strip width.
Definition: RpcReadoutGeomTool.h:42
MuonGMR4::RpcReadoutGeomTool::wRPCTable::numPhiStrips
unsigned int numPhiStrips
Number of phi strips.
Definition: RpcReadoutGeomTool.h:52
MuonGMR4::defineArgs
RpcReadoutElement::defineArgs defineArgs
Definition: RpcReadoutGeomTool.cxx:37
ServiceHandle< IRDBAccessSvc >
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
MuonGMR4::RpcReadoutGeomTool::wRPCTable
Struct to cache the relevant parameters of from the WRPC tables.
Definition: RpcReadoutGeomTool.h:36
MuonGMR4::RpcReadoutElement::createHash
static IdentifierHash createHash(const unsigned int strip, const unsigned int gasGap, const unsigned int doubPhi, const bool measPhi)
Constructs an Identifier hash from the Identifier fields controlled by this readout element
Identifier
Definition: IdentifierFieldParser.cxx:14