ATLAS Offline Software
Classes | Public Member Functions | Private Member Functions | Private Attributes | List of all members
MuonGMR4::RpcReadoutGeomTool Class Reference

#include <RpcReadoutGeomTool.h>

Inheritance diagram for MuonGMR4::RpcReadoutGeomTool:
Collaboration diagram for MuonGMR4::RpcReadoutGeomTool:

Classes

struct  FactoryCache
 
struct  wRPCTable
 Struct to cache the relevant parameters of from the WRPC tables. More...
 

Public Member Functions

 RpcReadoutGeomTool (const std::string &type, const std::string &name, const IInterface *parent)
 
StatusCode buildReadOutElements (MuonDetectorManager &mgr) override final
 

Private Member Functions

StatusCode readParameterBook (FactoryCache &cache)
 Retrieves the auxillary tables from the database. More...
 
StatusCode loadDimensions (RpcReadoutElement::defineArgs &args, FactoryCache &factory)
 Loads the chamber dimensions from GeoModel. More...
 

Private Attributes

ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc
 
ServiceHandle< IGeoDbTagSvcm_geoDbTagSvc {this, "GeoDbTagSvc", "GeoDbTagSvc"}
 
PublicToolHandle< IMuonGeoUtilityToolm_geoUtilTool {this,"GeoUtilTool", "" }
 

Detailed Description

Definition at line 19 of file RpcReadoutGeomTool.h.

Constructor & Destructor Documentation

◆ RpcReadoutGeomTool()

MuonGMR4::RpcReadoutGeomTool::RpcReadoutGeomTool ( const std::string &  type,
const std::string &  name,
const IInterface *  parent 
)

Definition at line 61 of file RpcReadoutGeomTool.cxx.

64  : base_class{type, name, parent} {}

Member Function Documentation

◆ buildReadOutElements()

StatusCode MuonGMR4::RpcReadoutGeomTool::buildReadOutElements ( MuonDetectorManager mgr)
finaloverride

Retrieve the list of full physical volumes & alignable nodes and connect them together afterwards

The keys should be formatted like <STATION_NAME>_<MUON_CHAMBERTYPE>_etc. The <MUON_CHAMBERTYPE> also indicates whether we're dealing with a MDT / TGC / CSC / RPC chamber If we are dealing with a MDT chamber, then there are 3 additional properties encoded into the chamber <STATIONETA>_<STATIONPHI>_<DOUBLETR>_<DOUBLETPHI>_<DOUBLETZ>

Retrieve first the station Identifier

stationEta

stationPhi

DoubletR

DoubletZ

DoubletPhi

Definition at line 220 of file RpcReadoutGeomTool.cxx.

220  {
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 }

◆ loadDimensions()

StatusCode MuonGMR4::RpcReadoutGeomTool::loadDimensions ( RpcReadoutElement::defineArgs args,
FactoryCache factory 
)
private

Loads the chamber dimensions from GeoModel.

The half sizes of the

Rpc are made up out of 2 or 3 gasGap singlet. A singlet module is a RPC gas gap sandwiched by two strip layers. In large sectors, the gas gap may be split into two gasGaps.

    | Strip layer  |  Strip layer |    |  Strip layer  |  Strip layer |
    |           gas gap           |    |    Gas gap    |    Gas gap   | 
    | Strip layer  |  Strip layer |    |  Strip layer  |  Strip layer |

In the GeoModel world, the x-axis points in radial direction & y axis along the phi direction

The strip layers are used to express the dimensions of the strip layer. However, that's projected into the Center of the gasgap which may or maybe not be split into two --> Find the closest gas gap in x for each strip layer and overwrite the x coordinate of the strip layerof that one.

Find the closest gas Gap

Now we need to associate the gasGap volumes with the gas gap number & the doublet Phi

The volume points to a new gasgap

Rpc volumes with doubletZ = 3 have two gas gaps along phi but they're split into two distnict modules with doublePhi = 1, 2.

We know now whether we had 2 or 3 gasgaps and also whether there 2 or 1 panels in phi

Special case for the BML4 DBZ = 3 chambers. The doubletPhi is incorporated into the detector element but there's only one strip panel

Define the strip layout

Define the box layout

Next build the phi layer

Definition at line 66 of file RpcReadoutGeomTool.cxx.

67  {
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 }

◆ readParameterBook()

StatusCode MuonGMR4::RpcReadoutGeomTool::readParameterBook ( FactoryCache cache)
private

Retrieves the auxillary tables from the database.

Definition at line 278 of file RpcReadoutGeomTool.cxx.

278  {
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 }

Member Data Documentation

◆ m_geoDbTagSvc

ServiceHandle<IGeoDbTagSvc> MuonGMR4::RpcReadoutGeomTool::m_geoDbTagSvc {this, "GeoDbTagSvc", "GeoDbTagSvc"}
private

Definition at line 31 of file RpcReadoutGeomTool.h.

◆ m_geoUtilTool

PublicToolHandle<IMuonGeoUtilityTool> MuonGMR4::RpcReadoutGeomTool::m_geoUtilTool {this,"GeoUtilTool", "" }
private

Definition at line 33 of file RpcReadoutGeomTool.h.

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> MuonGMR4::RpcReadoutGeomTool::m_idHelperSvc
private
Initial value:
{this, "IdHelperSvc",
"Muon::MuonIdHelperSvc/MuonIdHelperSvc"}

Definition at line 28 of file RpcReadoutGeomTool.h.


The documentation for this class was generated from the following files:
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
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
max
#define max(a, b)
Definition: cfImp.cxx:41
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::RpcReadoutGeomTool::readParameterBook
StatusCode readParameterBook(FactoryCache &cache)
Retrieves the auxillary tables from the database.
Definition: RpcReadoutGeomTool.cxx:278
deg
#define deg
Definition: SbPolyhedron.cxx:17
MuonGMR4::RpcReadoutGeomTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: RpcReadoutGeomTool.h:28
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
isValid
bool isValid(const T &p)
Definition: AtlasPID.h:225
RpcIdHelper
Definition: RpcIdHelper.h:51
std::stable_sort
void stable_sort(std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, std::reverse_iterator< DataModel_detail::iterator< DVL > > end, Compare comp)
Specialization of stable_sort for DataVector/List.
Definition: DVL_algorithms.h:711
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
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
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::StripDesignPtr
GeoModel::TransientConstSharedPtr< StripDesign > StripDesignPtr
Definition: StripDesign.h:29
tolerance
Definition: suep_shower.h:17
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
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::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
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
IRDBRecord_ptr
std::unique_ptr< IRDBRecord > IRDBRecord_ptr
Definition: IRDBRecordset.h:23
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:11
ActsTrk::SurfaceBoundSetPtr
std::shared_ptr< SurfaceBoundSet< BoundType > > SurfaceBoundSetPtr
Aberivation to create a new SurfaceBoundSetPtr.
Definition: Tracking/Acts/ActsGeoUtils/ActsGeoUtils/Defs.h:19
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::defineArgs
RpcReadoutElement::defineArgs defineArgs
Definition: RpcReadoutGeomTool.cxx:37
ServiceHandle< IRDBAccessSvc >
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
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