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

#include <ReadoutGeomCnvAlg.h>

Inheritance diagram for MuonGMR4::ReadoutGeomCnvAlg:
Collaboration diagram for MuonGMR4::ReadoutGeomCnvAlg:

Classes

struct  ConstructionCache
 

Public Member Functions

 ~ReadoutGeomCnvAlg ()=default
 
StatusCode execute (const EventContext &ctx) const override
 
StatusCode initialize () override
 
bool isReEntrant () const override
 
 AthReentrantAlgorithm (const std::string &name, ISvcLocator *pSvcLocator)
 Constructor with parameters: More...
 
virtual StatusCode sysInitialize () override
 Override sysInitialize. More...
 
virtual bool isClonable () const override
 Specify if the algorithm is clonable. More...
 
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant. More...
 
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm. More...
 
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies. More...
 
virtual bool filterPassed (const EventContext &ctx) const
 
virtual void setFilterPassed (bool state, const EventContext &ctx) const
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
 
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed. More...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

StatusCode buildStation (const ActsGeometryContext &gctx, const Identifier &stationId, ConstructionCache &cacheObj) const
 builds a station object from readout element. More...
 
StatusCode cloneReadoutVolume (const ActsGeometryContext &gctx, const Identifier &stationId, ConstructionCache &cacheObj, GeoIntrusivePtr< GeoVFullPhysVol > &clonedPhysVol, MuonGM::MuonStation *&station) const
 Clones the fullPhysical volume of the readoutElement and embeds it into the associated station. More...
 
GeoIntrusivePtr< GeoVFullPhysVol > cloneNswWedge (const ActsGeometryContext &gctx, const MuonGMR4::MuonReadoutElement *nswRE, ConstructionCache &cacheObj) const
 Clones the fullPhysicalVolume of the
More...
 
StatusCode buildMdt (const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
 
StatusCode buildRpc (const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
 
StatusCode buildSTGC (const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
 
StatusCode buildMM (const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
 
StatusCode buildTgc (const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
 
StatusCode dumpAndCompare (const ActsGeometryContext &gctx, const MuonGMR4::RpcReadoutElement &refEle, const MuonGM::RpcReadoutElement &testEle) const
 
StatusCode dumpAndCompare (const ActsGeometryContext &gctx, const MuonGMR4::MdtReadoutElement &refEle, const MuonGM::MdtReadoutElement &testEle) const
 
StatusCode dumpAndCompare (const ActsGeometryContext &gctx, const MuonGMR4::MmReadoutElement &refEle, const MuonGM::MMReadoutElement &testEle) const
 
StatusCode dumpAndCompare (const ActsGeometryContext &gctx, const MuonGMR4::TgcReadoutElement &refEle, const MuonGM::TgcReadoutElement &testEle) const
 
StatusCode dumpAndCompare (const ActsGeometryContext &gctx, const MuonGMR4::sTgcReadoutElement &refEle, const MuonGM::sTgcReadoutElement &testEle) const
 
StatusCode checkIdCompability (const MuonGMR4::MuonReadoutElement &refEle, const MuonGM::MuonReadoutElement &testEle) const
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
 
SG::WriteCondHandleKey< MuonGM::MuonDetectorManagerm_writeKey {this, "WriteKey", "MuonDetectorManager"}
 
SG::ReadCondHandleKeyArray< ActsTrk::DetectorAlignStorem_alignStoreKeys {this, "AlignmentKeys", {}, "Alignment key"}
 
Gaudi::Property< bool > m_checkGeo {this, "checkGeo", false, "Checks the positions of the sensors"}
 
const MuonGMR4::MuonDetectorManagerm_detMgr {nullptr}
 
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks. More...
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 32 of file ReadoutGeomCnvAlg.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ ~ReadoutGeomCnvAlg()

MuonGMR4::ReadoutGeomCnvAlg::~ReadoutGeomCnvAlg ( )
default

Member Function Documentation

◆ AthReentrantAlgorithm()

AthReentrantAlgorithm::AthReentrantAlgorithm

Constructor with parameters:

Definition at line 90 of file AthReentrantAlgorithm.cxx.

22  :
24 {
25 
26  // Set up to run AthAlgorithmDHUpdate in sysInitialize before
27  // merging depedency lists. This extends the output dependency
28  // list with any symlinks implied by inheritance relations.
29  m_updateDataHandles =
30  std::make_unique<AthenaBaseComps::AthAlgorithmDHUpdate>
32  std::move (m_updateDataHandles));
33 }

◆ buildMdt()

StatusCode MuonGMR4::ReadoutGeomCnvAlg::buildMdt ( const ActsGeometryContext gctx,
ConstructionCache cacheObj 
) const
private

Access the B-Line and As-built parameters

Build the mother station

1 cm is added as safety margin to the Mdt multilayer envelope

Need to check how to obtain this parameter from the new geometry newElement->m_cutoutShift;

Determine the tube length's

Define the tube staggering

Add the readout element to the detector manager

Definition at line 632 of file ReadoutGeomCnvAlg.cxx.

632  {
634  SubDetAlignment alignItr = gctx.getStore(ActsTrk::DetectorType::Mdt);
635  const MdtAlignmentStore* alignStore = alignItr ?
636  static_cast<const MdtAlignmentStore*>(alignItr->internalAlignment.get()) : nullptr;
637 
638  const std::vector<const MuonGMR4::MdtReadoutElement*> mdtReadOuts{m_detMgr->getAllMdtReadoutElements()};
639  ATH_MSG_INFO("Copy "<<mdtReadOuts.size()<<" Mdt readout elements to the legacy system");
640  for (const MuonGMR4::MdtReadoutElement* copyMe : mdtReadOuts) {
641  const Identifier reId = copyMe->identify();
642  ATH_MSG_DEBUG("Translate "<<m_idHelperSvc->toStringDetEl(reId));
644  GeoIntrusivePtr<GeoVFullPhysVol> physVol{};
645  MuonGM::MuonStation* station{nullptr};
646  ATH_CHECK(cloneReadoutVolume(gctx,reId, cacheObj, physVol, station));
647  if (copyMe->multilayer() == 1) {
648  const MuonGMR4::MdtReadoutElement* otherRE = copyMe->complementaryRE();
649  const double height = std::max(copyMe->moduleHeight(), otherRE->moduleHeight()) -
650  (copyMe->tubePitch() - 2. * copyMe->tubeRadius());
651 
652  const double modHalTHickO{0.5*otherRE->moduleThickness()},
653  modHalfThick{-0.5*copyMe->moduleThickness()};
654 
655  const double thickness = ( (otherRE->asBuiltRefFrame()*(modHalTHickO* Amg::Vector3D::UnitX())) -
656  (copyMe->asBuiltRefFrame()*(modHalfThick* Amg::Vector3D::UnitX()))).z();
657  if (copyMe->isBarrel()) {
658  station->setMdtZsize(height);
659  station->setMdtRsize(thickness);
660  } else {
661  station->setMdtRsize(height);
662  station->setMdtZsize(thickness);
663  }
664  }
665  const MuonGMR4::MdtReadoutElement::parameterBook& pars{copyMe->getParameters()};
666  auto newElement = std::make_unique<MuonGM::MdtReadoutElement>(physVol,
667  m_idHelperSvc->stationNameString(reId),
668  cacheObj.detMgr.get());
669  newElement->setIdentifier(reId);
670  newElement->setMultilayer(copyMe->multilayer());
671  newElement->setNMdtInStation(m_idHelperSvc->mdtIdHelper().multilayerMax(reId));
672  // cppcheck-suppress invalidLifetime; ok: mgr took ownership.
673  newElement->setParentMuonStation(station);
674 
676  newElement->setLongSsize(2*pars.longHalfX - 1.*Gaudi::Units::cm);
677  newElement->setSsize(2*pars.shortHalfX - 1.*Gaudi::Units::cm);
678  newElement->setLongRsize(2*pars.halfY);
679  newElement->setRsize(2*pars.halfY);
680  newElement->setZsize(2*pars.halfHeight);
681  newElement->setLongZsize(2*pars.halfHeight);
682 
683  newElement->m_nlayers = copyMe->numLayers();
684  newElement->m_ntubesperlayer = copyMe->numTubesInLay();
685  newElement->m_deadlength = pars.deadLength;
686  newElement->m_endpluglength = pars.endPlugLength;
687  newElement->m_innerRadius = pars.tubeInnerRad;
688  newElement->m_tubeWallThickness = pars.tubeWall;
689  newElement->m_tubepitch = pars.tubePitch;
692 
694  const MuonGMR4::MdtTubeLayer& tubeLay{*pars.tubeLayers[0]};
695  unsigned int step{1};
696  double lastLength{2.*tubeLay.uncutHalfLength(1)};
697  for (unsigned tube = 0; tube < copyMe->numTubesInLay(); ++tube) {
698  const double currLength = 2.*tubeLay.uncutHalfLength(tube);
699  ATH_MSG_VERBOSE(m_idHelperSvc->toString(copyMe->identify())<< ", tube "<<tube<<", length: "<<currLength);
700  if (std::abs(lastLength - currLength) > std::numeric_limits<float>::epsilon() ||
701  tube == copyMe->numTubesInLay() -1) {
702  newElement->m_tubelength[step-1] = lastLength;
703  newElement->m_tubelength[step] = currLength;
704  if (step == 1) {
705  newElement->m_ntubesinastep = tube;
706  }
707  lastLength = currLength;
708  ++step;
709  }
710  }
711  newElement->m_nsteps = step;
712 
714  double xOffSet{pars.halfY}, yOffSet{pars.halfHeight};
715  if (newElement->barrel()) std::swap(xOffSet, yOffSet);
716  for (unsigned lay = 1; lay <= copyMe->numLayers(); ++lay) {
717  const IdentifierHash tubeHash{copyMe->measurementHash(lay, 1)};
718  const Amg::Vector3D locTube = copyMe->localTubePos(tubeHash);
719  newElement->m_firstwire_x[lay-1] = locTube.z() + xOffSet;
720  newElement->m_firstwire_y[lay-1] = locTube.x() + yOffSet;
721  }
722  MdtAlignmentStore::chamberDistortions distort = alignStore ? alignStore->getDistortion(reId) :
724 
725  if (!station->hasMdtAsBuiltParams()){
726  station->setMdtAsBuiltParams(distort.asBuilt);
727  }
728  if (!station->hasBLines()){
729  station->setBline(distort.bLine);
730  }
731  const Amg::Vector3D refPoint = copyMe->bLineReferencePoint();
732  station->setBlineFixedPointInAmdbLRS(refPoint.x(), refPoint.y(), refPoint.z());
733 
734  newElement->geoInitDone();
735  newElement->setBLinePar(distort.bLine);
736  newElement->fillCache();
737  ATH_CHECK(dumpAndCompare(gctx, *copyMe, *newElement));
739  cacheObj.detMgr->addMdtReadoutElement(std::move(newElement));
740  }
741  return StatusCode::SUCCESS;
742 }

◆ buildMM()

StatusCode MuonGMR4::ReadoutGeomCnvAlg::buildMM ( const ActsGeometryContext gctx,
ConstructionCache cacheObj 
) const
private

Loop over the gas gaps & efine the

Definition at line 476 of file ReadoutGeomCnvAlg.cxx.

476  {
477 
478  SubDetAlignment alignItr = gctx.getStore(ActsTrk::DetectorType::Mm);
479  const auto alignStore = alignItr ?
480  static_cast<const MmAlignmentStore*>(alignItr->internalAlignment.get()) : nullptr;
481 
482  const std::vector<const MuonGMR4::MmReadoutElement*> mmReadouts{m_detMgr->getAllMmReadoutElements()};
483  ATH_MSG_INFO("Copy "<<mmReadouts.size()<<" Mm readout elements to the legacy system");
484 
485  for (const MuonGMR4::MmReadoutElement* copyMe : mmReadouts) {
486  const Identifier reId = copyMe->identify();
487  GeoIntrusivePtr<GeoVFullPhysVol> physVol{cloneNswWedge(gctx, copyMe, cacheObj)};
488  auto newRE = std::make_unique<MuonGM::MMReadoutElement>(physVol,
489  m_idHelperSvc->stationNameString(reId),
490  copyMe->stationEta(),
491  copyMe->stationPhi(),
492  copyMe->multilayer(), cacheObj.detMgr.get(),
493  alignStore ? alignStore->passivation : nullptr);
495  for (unsigned int gasGap = 0; gasGap < copyMe->nGasGaps(); ++gasGap) {
496  const MuonGMR4::StripLayer& stripLayer{copyMe->stripLayer(MuonGMR4::MmReadoutElement::createHash(gasGap +1, 0))};
497  const MuonGMR4::StripDesign& designFrom{stripLayer.design()};
498 
499  newRE->m_Xlg[gasGap] = stripLayer.toOrigin() *
500  Amg::getRotateZ3D(-designFrom.stereoAngle()) *
502  ATH_MSG_VERBOSE("Layer transform "<<gasGap<<" "<<GeoTrf::toString(newRE->m_Xlg[gasGap], true));
503 
504  MuonGM::MuonChannelDesign& designTo{newRE->m_etaDesign[gasGap]};
505  designTo.defineTrapezoid(designFrom.shortHalfHeight(),
506  designFrom.longHalfHeight(),
507  designFrom.halfWidth(),
508  designFrom.stereoAngle());
510  designTo.detType = MuonGM::MuonChannelDesign::DetType::MM;
511  designTo.inputPitch = designFrom.stripPitch();
512  designTo.inputWidth = designTo.inputPitch * std::cos(designTo.stereoAngle());
513  designTo.nMissedBottomEta = designTo.nMissedBottomStereo = designFrom.firstStripNumber() - 1;
514  designTo.totalStrips = designFrom.numStrips();
515  designTo.nch = designFrom.numStrips();
516 
517  designTo.setFirstPos(designFrom.firstStripPos().x() + 0.5*designTo.inputPitch);
518  }
519 
520  newRE->fillCache();
521  if (alignStore && alignStore->getBLine(reId)) {
522  newRE->setBLinePar(*alignStore->getBLine(reId));
523  }
524  ATH_CHECK(dumpAndCompare(gctx, *copyMe, *newRE));
525  cacheObj.detMgr->addMMReadoutElement(std::move(newRE));
526  }
527  return StatusCode::SUCCESS;
528 }

◆ buildRpc()

StatusCode MuonGMR4::ReadoutGeomCnvAlg::buildRpc ( const ActsGeometryContext gctx,
ConstructionCache cacheObj 
) const
private

Define the dimensions

Hack to assign the proper strip positions for REs having doubletPhi =2 in their Identifier

Resignment in face of the rpc readout geometry. Overwrite all the parameters

Definition at line 276 of file ReadoutGeomCnvAlg.cxx.

276  {
277 
278  const std::vector<const MuonGMR4::RpcReadoutElement*> readoutEles = m_detMgr->getAllRpcReadoutElements();
279  ATH_MSG_INFO("Copy "<<readoutEles.size()<<" Rpc readout elements to the legacy system");
280  const RpcIdHelper& idHelper{m_idHelperSvc->rpcIdHelper()};
281  for (const MuonGMR4::RpcReadoutElement* copyMe : readoutEles) {
282  const Identifier reId = copyMe->identify();
283  const MuonGMR4::RpcReadoutElement::parameterBook& pars{copyMe->getParameters()};
284  GeoIntrusivePtr<GeoVFullPhysVol> physVol{};
285  MuonGM::MuonStation* station{nullptr};
286  ATH_CHECK(cloneReadoutVolume(gctx, reId, cacheObj, physVol, station));
287  auto newElement = std::make_unique<MuonGM::RpcReadoutElement>(physVol,
288  m_idHelperSvc->stationNameString(reId),
289  1, 1, false, cacheObj.detMgr.get());
290  const bool aSide{copyMe->stationEta() > 0};
291  newElement->setDoubletPhi(copyMe->doubletPhi());
292  newElement->setDoubletR(copyMe->doubletR());
293  newElement->setDoubletZ(copyMe->doubletZ());
294  newElement->setIdentifier(reId);
295  newElement->setParentMuonStation(station);
296  station->addMuonReadoutElementWithAlTransf(newElement.get(), nullptr, station->nMuonReadoutElements());
297 
299  newElement->setLongRsize(pars.halfLength);
300  newElement->setLongSsize(pars.halfWidth);
301  newElement->setLongZsize(pars.halfThickness);
302  newElement->setRsize(pars.halfLength);
303  newElement->setSsize(pars.halfWidth);
304  newElement->setZsize(pars.halfThickness);
305 
306  newElement->m_nlayers = copyMe->nGasGaps();
307  newElement->m_phistripwidth = copyMe->stripPhiWidth();
308  newElement->m_etastripwidth = copyMe->stripEtaWidth();
309  newElement->m_phistrippitch = copyMe->stripPhiPitch();
310  newElement->m_etastrippitch = (aSide > 0 ? 1. : -1.) *copyMe->stripEtaPitch();
311  newElement->m_phistriplength = copyMe->stripPhiLength();
312  newElement->m_etastriplength = copyMe->stripEtaLength();
313 
314  newElement->m_nphistripsperpanel = copyMe->nPhiStrips();
315  newElement->m_netastripsperpanel = copyMe->nEtaStrips();
316  newElement->m_nphistrippanels = copyMe->nPhiPanels();
317  newElement->m_hasDEDontop = true;
318  newElement->m_descratzneg = false;
319 
320  std::vector<Identifier> gapIds{};
321  for (unsigned int gasGap = 1; gasGap <= copyMe->nGasGaps(); ++gasGap) {
322  for (int doubPhi = copyMe->doubletPhiMax(); doubPhi >= copyMe->doubletPhi(); --doubPhi) {
323  for (bool measPhi : {false, true}) {
324  if (measPhi && copyMe->nPhiStrips()==0) continue;
325  const int channel = 1;
326  const Identifier gapId = idHelper.channelID(copyMe->identify(),
327  copyMe->doubletZ(),
328  doubPhi, gasGap, measPhi,
329  channel);
330 
331  gapIds.push_back(gapId);
332  const Amg::Vector3D locStripPos = copyMe->globalToLocalTrans(gctx) * copyMe->stripPosition(gctx, gapId);
333  ATH_MSG_VERBOSE("GasGap "<<m_idHelperSvc->toString(gapId)<<", local strip position: "<<Amg::toString(locStripPos));
334  newElement->m_gasGap_xPos[gasGap -1] = locStripPos.x();
337  const int dbPIdx = copyMe->doubletPhi() == 2 ? 1 : doubPhi;
338  if (measPhi) {
339  newElement->m_first_phistrip_s[dbPIdx -1] = locStripPos.y();
340  newElement->m_phistrip_z = locStripPos.z();
341  } else{
342  newElement->m_first_etastrip_z = locStripPos.z();
343  newElement->m_etastrip_s[dbPIdx-1] = locStripPos.y();
344  }
345  }
346  }
347  }
348  newElement->fillCache();
350  for (const Identifier& gapId : gapIds) {
351  const int surfaceHash = newElement->surfaceHash(gapId);
352  const int layerHash = newElement->layerHash(gapId);
353  const Amg::Transform3D& refTrf{copyMe->localToGlobalTrans(gctx, gapId)};
354  newElement->m_surfaceData->m_layerTransforms[surfaceHash] = refTrf;
355  newElement->m_surfaceData->m_layerCenters[layerHash] = refTrf.translation();
356  newElement->m_surfaceData->m_layerNormals[layerHash] = refTrf.linear() * Amg::Vector3D::UnitZ();
357  }
358  ATH_CHECK(dumpAndCompare(gctx, *copyMe, *newElement));
359  cacheObj.detMgr->addRpcReadoutElement(std::move(newElement));
360  }
361  return StatusCode::SUCCESS;
362 }

◆ buildStation()

StatusCode MuonGMR4::ReadoutGeomCnvAlg::buildStation ( const ActsGeometryContext gctx,
const Identifier stationId,
ConstructionCache cacheObj 
) const
private

builds a station object from readout element.

The parent PhysVol of the readoutElement is interpreted as embedding station volume and all children which are not fullPhysical volumes are attached to the copied clone.

Fetch the readout element to get its parent volume

Retrieve the full phyiscal volume

Copy the full physical volume of the muon station

Make sure to copy all the children from the original tree that're not FullPhysVols -> represent They represent the passive material inside the station and are needed for the TrackinGeometry building

To create the muon station, we need to extract the dimensions --> Recieve the edge points from the shapes

Transformation to reach from the alignable point to the Muon station

Skip the full physical volumes as they represent the readout elements

Fetch the transform of the detector element which is AlignableNode x Station x [relative pos in station]

S / R / Z size

S / R / Z size (long)

Add the physical volume to the world

Definition at line 144 of file ReadoutGeomCnvAlg.cxx.

146  {
147  const std::string stName{m_idHelperSvc->stationNameString(stationId)};
148  const int stEta{m_idHelperSvc->stationEta(stationId)};
149  const int stPhi{m_idHelperSvc->stationPhi(stationId)};
150  MuonGM::MuonStation* station = cacheObj.detMgr->getMuonStation(stName, stEta, stPhi);
151  if (station) {
152  ATH_MSG_DEBUG("Station "<<stName<<" "<<stEta<<" "<<stPhi<<" already exists.");
153  return StatusCode::SUCCESS;
154  }
156  const MuonGMR4::MuonReadoutElement* copyMe = m_detMgr->getReadoutElement(stationId);
157 
159  const GeoVFullPhysVol* readOutVol = copyMe->getMaterialGeom();
160  PVConstLink parentVolume = readOutVol->getParent();
161  cacheObj.translatedStations.insert(parentVolume);
163  PVLink parentPhysVol{make_intrusive<GeoFullPhysVol>(parentVolume->getLogVol())};
164 
167  const std::vector<GeoChildNodeWithTrf> children = getChildrenWithRef(parentVolume, false);
168  double minX{1.e9}, maxX{-1.e9}, minY1{1.e9}, maxY1{-1.e9}, minY2{1.e9}, maxY2{-1.e9}, minZ{1.e9}, maxZ{-1.e9};
169  for (const GeoChildNodeWithTrf& child : children) {
170  std::vector<Amg::Vector3D> edges = getPolyShapeEdges(child.volume->getLogVol()->getShape(),
171  readOutVol->getX().inverse() * child.transform);
172  for (const Amg::Vector3D& edge : edges) {
173  minX = std::min(minX, edge.x());
174  maxX = std::max(maxX, edge.x());
175  minZ = std::min(minZ, edge.z());
176  maxZ = std::max(maxZ, edge.z());
177  if (edge.z() < 0) {
178  minY1 = std::min(minY1, edge.y());
179  maxY1 = std::max(maxY1, edge.y());
180  } else {
181  minY2 = std::min(minY2, edge.y());
182  maxY2 = std::max(maxY2, edge.y());
183  }
184  }
185  }
188  const double shortS = (maxY1 - minY1);
189  const double longS = (maxY2 - minY2);
190  const double lengthR = (maxX - minX);
191  const double lengthZ = (maxZ - minZ);
192 
193  const GeoAlignableTransform* alignTrf{copyMe->alignableTransform()};
195  const Amg::Transform3D stationTransform = alignTrf->getDefTransform().inverse()*parentVolume->getX();
196 
197  for (const GeoChildNodeWithTrf& child : children) {
199  const GeoVPhysVol &childVolRef = *child.volume;
200  if (typeid(childVolRef) == typeid(GeoFullPhysVol)) {
201  continue;
202  }
203  // Add the beam lines / foams inside the station volume
204  PVLink childVol = const_pointer_cast<GeoVPhysVol>(child.volume);
205  parentPhysVol->add(cacheObj.newIdTag());
206  parentPhysVol->add(cacheObj.makeTransform(stationTransform*child.transform));
207  parentPhysVol->add(cloneVolume(childVol));
208  }
210  const Amg::Transform3D alignedTransform = copyMe->localToGlobalTrans(gctx) *
211  (stationTransform * readOutVol->getX()).inverse();
212 
213  ATH_MSG_VERBOSE("stName "<<stName<<","<<stEta<<","<<stPhi<<" -- shortS: "<<shortS<<", longS: "<<longS
214  <<", lengthR: "<<lengthR<<", lengthZ "<<lengthZ
215  <<std::endl<<"AlignableNode: "<<GeoTrf::toString(alignedTransform, true)
216  <<std::endl<<"Station transform: "<<GeoTrf::toString(stationTransform, true)
217  <<std::endl<<"Readout transform: "<<GeoTrf::toString(readOutVol->getX(), true));
218  auto newStation = std::make_unique<MuonGM::MuonStation>(stName,
219  shortS, lengthR, lengthZ,
220  longS, lengthR, lengthZ,
221  stEta, stPhi, false);
222  newStation->setPhysVol(parentPhysVol);
224  cacheObj.world->add(cacheObj.newIdTag());
225  GeoIntrusivePtr<GeoAlignableTransform> trf = make_intrusive<GeoAlignableTransform>(alignedTransform);
226  newStation->setTransform(trf);
227  cacheObj.detMgr->addMuonStation(std::move(newStation));
228 
229  cacheObj.world->add(trf);
230  cacheObj.world->add(parentPhysVol);
231 
232  return StatusCode::SUCCESS;
233 }

◆ buildSTGC()

StatusCode MuonGMR4::ReadoutGeomCnvAlg::buildSTGC ( const ActsGeometryContext gctx,
ConstructionCache cacheObj 
) const
private

Initialize the eta design

Initialize the phi design

Definition at line 530 of file ReadoutGeomCnvAlg.cxx.

530  {
531  SubDetAlignment alignItr = gctx.getStore(ActsTrk::DetectorType::sTgc);
532  auto alignStore = alignItr ? static_cast<const sTgcAlignmentStore*>(alignItr->internalAlignment.get()) : nullptr;
533 
534  const std::vector<const MuonGMR4::sTgcReadoutElement*> sTgcReadOuts{m_detMgr->getAllsTgcReadoutElements()};
535  ATH_MSG_INFO("Copy "<<sTgcReadOuts.size()<<" sTgc readout elements to the legacy system");
536 
537  for (const MuonGMR4::sTgcReadoutElement* copyMe : sTgcReadOuts) {
538  const Identifier reId = copyMe->identify();
539  GeoIntrusivePtr<GeoVFullPhysVol> physVol{cloneNswWedge(gctx, copyMe, cacheObj)};
540 
541  auto newRE = std::make_unique<MuonGM::sTgcReadoutElement>(physVol,
542  m_idHelperSvc->stationNameString(reId).substr(1),
543  copyMe->stationEta(),
544  copyMe->stationPhi(),
545  copyMe->multilayer(),
546  cacheObj.detMgr.get());
547 
548  if (alignStore && alignStore->getBLine(reId)) {
549  newRE->setBLinePar(*alignStore->getBLine(reId));
550  }
551  for (unsigned int layer = 1; layer <= copyMe->numLayers(); ++layer) {
553  using ChannelDesign = MuonGM::MuonChannelDesign;
554  const IdentifierHash layerHash = MuonGMR4::sTgcReadoutElement::createHash(layer,channelType::Strip,0);
555  newRE->m_Xlg[layer -1] = Amg::getTranslate3D(copyMe->globalToLocalTrans(gctx) *
556  copyMe->center(gctx, layerHash));
557 
558  const MuonGMR4::StripDesign& copyEtaDesign{copyMe->stripDesign(layerHash)};
560  ChannelDesign& etaDesign{newRE->m_etaDesign[layer-1]};
561  etaDesign.type = ChannelDesign::ChannelType::etaStrip;
562  etaDesign.detType = ChannelDesign::DetType::STGC;
563  if (copyEtaDesign.yCutout()) {
564  etaDesign.defineDiamond(copyEtaDesign.shortHalfHeight(),
565  copyEtaDesign.longHalfHeight(),
566  copyEtaDesign.halfWidth(),
567  copyEtaDesign.yCutout());
568  } else {
569  etaDesign.defineTrapezoid(copyEtaDesign.shortHalfHeight(),
570  copyEtaDesign.longHalfHeight(),
571  copyEtaDesign.halfWidth());
572  }
573  etaDesign.inputPitch = copyEtaDesign.stripPitch();
574  etaDesign.inputWidth = copyEtaDesign.stripWidth();
575  etaDesign.nch = copyEtaDesign.numStrips();
576  etaDesign.setFirstPos(copyEtaDesign.firstStripPos().x());
578 
579  const MuonGMR4::WireGroupDesign& copyPhiDesign{copyMe->wireDesign(layerHash)};
580 
581  ChannelDesign& phiDesign{newRE->m_phiDesign[layer-1]};
582  phiDesign.type = ChannelDesign::ChannelType::phiStrip;
583  phiDesign.detType = ChannelDesign::DetType::STGC;
584  if (copyPhiDesign.yCutout() == 0.) {
585  phiDesign.defineTrapezoid(copyPhiDesign.shortHalfHeight(),
586  copyPhiDesign.longHalfHeight(),
587  copyPhiDesign.halfWidth());
588  } else {
589  phiDesign.defineDiamond(copyPhiDesign.shortHalfHeight(),
590  copyPhiDesign.longHalfHeight(),
591  copyPhiDesign.halfWidth(),
592  copyPhiDesign.yCutout());
593  }
594  phiDesign.inputPitch = copyPhiDesign.stripPitch();
595  phiDesign.inputWidth = copyPhiDesign.stripWidth();
596  phiDesign.setFirstPos(copyPhiDesign.firstStripPos().x()); // Position of 1st wire, accounts for staggering
597  phiDesign.firstPitch = copyPhiDesign.numWiresInGroup(1); // Number of Wires in 1st group, group staggering
598  phiDesign.groupWidth = copyPhiDesign.numWiresInGroup(2); // Number of Wires normal group
599  phiDesign.nGroups = copyPhiDesign.numStrips(); // Number of Wire Groups
600  phiDesign.wireCutout = copyPhiDesign.wireCutout(); // Size of "active" wire region for digits
601  phiDesign.nch = copyPhiDesign.nAllWires();
602 
603  const MuonGMR4::PadDesign& copyPadDesign{copyMe->padDesign(layerHash)};
604  MuonGM::MuonPadDesign& padDesign{newRE->m_padDesign[layer-1]};
605  padDesign.Length = copyMe->chamberHeight();
606  padDesign.sWidth = copyMe->sChamberLength();
607  padDesign.lWidth = copyMe->lChamberLength();
608  padDesign.Size = 2.*copyPadDesign.halfWidth();
609  padDesign.ysFrame = copyMe->sFrameWidth();
610  padDesign.ylFrame = copyMe->lFrameWidth();
611  padDesign.thickness = copyMe->thickness();
612  padDesign.yCutout = copyPadDesign.yCutout();
613  padDesign.setR(copyPadDesign.beamlineRadius());
614  padDesign.sPadWidth = 2.*copyPadDesign.shortHalfHeight();
615  padDesign.lPadWidth = 2.*copyPadDesign.longHalfHeight();
616  padDesign.nPadColumns = copyPadDesign.numPadPhi();
617  padDesign.firstPhiPos = copyPadDesign.firstPadPhiDiv();
618  padDesign.inputPhiPitch = copyPadDesign.anglePadPhi();
619  padDesign.PadPhiShift = copyPadDesign.padPhiShift();
620  padDesign.nPadH = copyPadDesign.numPadEta();
621  padDesign.padEtaMax = copyPadDesign.maxPadEta();
622  padDesign.firstRowPos = copyPadDesign.firstPadHeight();
623  padDesign.inputRowPitch = copyPadDesign.padHeight();
624  padDesign.sectorOpeningAngle = copyPadDesign.sectorAngle();
625  }
626  newRE->fillCache();
627  ATH_CHECK(dumpAndCompare(gctx, *copyMe, *newRE));
628  cacheObj.detMgr->addsTgcReadoutElement(std::move(newRE));
629  }
630  return StatusCode::SUCCESS;
631 }

◆ buildTgc()

StatusCode MuonGMR4::ReadoutGeomCnvAlg::buildTgc ( const ActsGeometryContext gctx,
ConstructionCache cacheObj 
) const
private

Define the local gasGap positions

In the sector frame, the gasGap is oriented along the x-axis

Definition at line 365 of file ReadoutGeomCnvAlg.cxx.

365  {
366 
367  std::vector<const MuonGMR4::TgcReadoutElement*> tgcReadouts{m_detMgr->getAllTgcReadoutElements()};
368  std::stable_sort(tgcReadouts.begin(), tgcReadouts.end(),
370  return a->stationEta() > b->stationEta();
371  });
372  ATH_MSG_INFO("Copy "<<tgcReadouts.size()<<" Tgc readout elements to the legacy system");
373  const TgcIdHelper& idHelper{m_idHelperSvc->tgcIdHelper()};
374 
375  using TgcReadoutParams = MuonGM::TgcReadoutParams;
376  std::map<std::string, std::shared_ptr<TgcReadoutParams>> readoutParMap{};
377 
378  for (const MuonGMR4::TgcReadoutElement* copyMe: tgcReadouts) {
379  const Identifier reId = copyMe->identify();
380  GeoIntrusivePtr<GeoVFullPhysVol> physVol{};
381  MuonGM::MuonStation* station{nullptr};
382  ATH_CHECK(cloneReadoutVolume(gctx,reId, cacheObj, physVol, station));
383 
384  auto newRE = std::make_unique<MuonGM::TgcReadoutElement>(physVol, m_idHelperSvc->stationNameString(reId),
385  cacheObj.detMgr.get());
386  newRE->setIdentifier(reId);
387  newRE->setParentMuonStation(station);
388 
389  std::shared_ptr<TgcReadoutParams>& readOutPars = readoutParMap[copyMe->chamberDesign()];
390  if (!readOutPars) {
394 
395  std::array<WiregangArray, 3> wires{};
396  GasGapIntArray nWireGangs{}, nStrips{};
397  StripArray botMountings{}, topMountings{};
398  bool stripSet{false};
399  double wirePitch{0.};
400 
401  for (unsigned int gasGap =1; gasGap <= copyMe->nGasGaps(); ++gasGap) {
402  nWireGangs[gasGap -1] = copyMe->numWireGangs(gasGap);
403  nStrips[gasGap -1] = copyMe->numStrips(gasGap);
404  if (nWireGangs[gasGap -1]) {
405  const MuonGMR4::WireGroupDesign& design{copyMe->wireGangLayout(gasGap)};
406  wirePitch = design.stripPitch();
407  WiregangArray& fillMe{wires[gasGap-1]};
408  for (int gang = 1; gang <= design.numStrips(); ++gang) {
409  fillMe[gang -1] = design.numWiresInGroup(gang);
410  }
411  }
412  if (nStrips[gasGap -1] && !stripSet) {
413  const MuonGMR4::RadialStripDesign& design {copyMe->stripLayout(gasGap)};
414  const int nCh = nStrips[gasGap -1];
415  for (int strip = 1; strip <= nCh; ++strip) {
416  botMountings[strip-1] = - design.stripLeftBottom(strip).x();
417  topMountings[strip-1] = - design.stripLeftTop(strip).x();
418  }
419  botMountings[nCh] = - design.stripRightBottom(nCh).x();
420  topMountings[nCh] = - design.stripRightTop(nCh).x();
421 
422  stripSet = true;
423  }
424  }
425  readOutPars = std::make_unique<TgcReadoutParams>(copyMe->chamberDesign(),
426  0, 0, wirePitch,
427  idHelper.stationPhiMax(reId),
428  std::move(nWireGangs),
429  std::move(wires[0]),
430  std::move(wires[1]),
431  std::move(wires[2]),
432  0,
433  std::move(botMountings),
434  std::move(topMountings),
435  std::move(nStrips));
436  }
437 
439  for (unsigned int gasGap = 1; gasGap <= copyMe->nGasGaps(); ++gasGap) {
440  const IdentifierHash layHash{ copyMe->constructHash(0, gasGap, false)};
442  const Amg::Vector3D translation{copyMe->globalToLocalTrans(gctx) * copyMe->center(gctx, layHash)};
443  newRE->setPlaneZ(translation.x(), gasGap);
444  }
445  newRE->setRsize(copyMe->moduleHeight());
446  newRE->setSsize(copyMe->moduleWidthS());
447  newRE->setZsize(copyMe->moduleThickness());
448 
449  newRE->setLongRsize(copyMe->moduleHeight());
450  newRE->setLongSsize(copyMe->moduleWidthL());
451  newRE->setLongZsize(copyMe->moduleThickness());
452 
453  newRE->setReadOutParams(readOutPars);
454  newRE->fillCache();
455  ATH_CHECK(dumpAndCompare(gctx, *copyMe, *newRE));
456  cacheObj.detMgr->addTgcReadoutElement(std::move(newRE));
457 
458  }
459  return StatusCode::SUCCESS;
460 }

◆ cardinality()

unsigned int AthReentrantAlgorithm::cardinality ( ) const
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Override this to return 0 for reentrant algorithms.

Definition at line 55 of file AthReentrantAlgorithm.cxx.

56 {
57  return 0;
58 }

◆ checkIdCompability()

StatusCode MuonGMR4::ReadoutGeomCnvAlg::checkIdCompability ( const MuonGMR4::MuonReadoutElement refEle,
const MuonGM::MuonReadoutElement testEle 
) const
private

Definition at line 744 of file ReadoutGeomCnvAlg.cxx.

745  {
746 
747  if (refEle.identify() != testEle.identify()) {
748  ATH_MSG_FATAL("Two different elements are compared "
749  <<m_idHelperSvc->toString(refEle.identify())<<" vs. "
750  <<m_idHelperSvc->toString(testEle.identify()));
751  return StatusCode::FAILURE;
752  }
753  if (refEle.identHash() != testEle.detectorElementHash()) {
754  ATH_MSG_FATAL("The hashes of the two detector elements "<<m_idHelperSvc->toString(refEle.identify())
755  <<" are completely different "<<refEle.identHash()<<" vs. "<<testEle.detectorElementHash());
756  return StatusCode::FAILURE;
757  }
758  return StatusCode::SUCCESS;
759 }

◆ cloneNswWedge()

GeoIntrusivePtr< GeoVFullPhysVol > MuonGMR4::ReadoutGeomCnvAlg::cloneNswWedge ( const ActsGeometryContext gctx,
const MuonGMR4::MuonReadoutElement nswRE,
ConstructionCache cacheObj 
) const
private

Clones the fullPhysicalVolume of the

Definition at line 463 of file ReadoutGeomCnvAlg.cxx.

465  {
466  GeoIntrusivePtr<const GeoVFullPhysVol> readOutVol{copyMe->getMaterialGeom()};
467  cacheObj.translatedStations.insert(readOutVol->getParent());
468 
469  PVLink clonedVol{cloneVolume(const_pointer_cast<GeoVFullPhysVol>(readOutVol))};
470  GeoIntrusivePtr<GeoFullPhysVol> physVol{dynamic_pointer_cast<GeoFullPhysVol>(clonedVol)};
471  cacheObj.world->add(cacheObj.newIdTag());
472  cacheObj.world->add(cacheObj.makeTransform(copyMe->localToGlobalTrans(gctx)));
473  cacheObj.world->add(physVol);
474  return physVol;
475 }

◆ cloneReadoutVolume()

StatusCode MuonGMR4::ReadoutGeomCnvAlg::cloneReadoutVolume ( const ActsGeometryContext gctx,
const Identifier stationId,
ConstructionCache cacheObj,
GeoIntrusivePtr< GeoVFullPhysVol > &  clonedPhysVol,
MuonGM::MuonStation *&  station 
) const
private

Clones the fullPhysical volume of the readoutElement and embeds it into the associated station.

If creations of the needed station fails, failure is returned. The references to the clonedPhysVol & to the station are set if the procedure was successful.

This is a hack to include the BIL Rpcs into the translation. Recall that the BI-RPCs break the station paradigm Hence, in the new description they have their own alignable transform. However, the legacy geometry tries to sort them into the corresponding Mdt station with the same stName, stEta, stPhi. So quite a lot of gymnastics is now needed to place them accordingly into that frame. getX(Mdt) * delta(Mdt) * X = getX(Rpc) * delta(Rpc) X = [getX(Mdt) * delta(Mdt)]^{-1} * getX(Rpc) * delta(Rpc) The second term is the transform of the transform of the Muon station. The second one needs to be rewritten Y = getX(Rpc) * delta(Rpc) * getX(alignNode -> readoutFrame) X = Y * getX(alignNode -> readoutFrame)^{-1}

Clone the detector element with all of its subvolumes

Definition at line 236 of file ReadoutGeomCnvAlg.cxx.

240  {
241 
242  ATH_CHECK(buildStation(gctx, reId, cacheObj));
243  const std::string stName{m_idHelperSvc->stationNameString(reId)};
244  station = cacheObj.detMgr->getMuonStation(stName,
245  m_idHelperSvc->stationEta(reId),
246  m_idHelperSvc->stationPhi(reId));
247 
248  PVLink parentPhysVol{station->getPhysVol()};
250  GeoIntrusivePtr<const GeoVFullPhysVol> readOutVol{copyMe->getMaterialGeom()};
251  parentPhysVol->add(cacheObj.newIdTag());
262  const Amg::Transform3D alignNodeToRE{copyMe->alignableTransform()->getDefTransform().inverse() *
263  readOutVol->getParent()->getX() * readOutVol->getX()};
264  const Amg::Transform3D alignedNode{copyMe->localToGlobalTrans(gctx) * alignNodeToRE.inverse()};
265 
266  const Amg::Transform3D stationTrf{station->getTransform().inverse() * alignedNode};
267 
268  parentPhysVol->add(cacheObj.makeTransform(stationTrf*alignNodeToRE));
270  PVLink clonedVol{cloneVolume(const_pointer_cast<GeoVFullPhysVol>(readOutVol))};
271  physVol = dynamic_pointer_cast<GeoVFullPhysVol>(clonedVol);
272  parentPhysVol->add(physVol);
273  return StatusCode::SUCCESS;
274 }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ dumpAndCompare() [1/5]

StatusCode MuonGMR4::ReadoutGeomCnvAlg::dumpAndCompare ( const ActsGeometryContext gctx,
const MuonGMR4::MdtReadoutElement refEle,
const MuonGM::MdtReadoutElement testEle 
) const
private

Definition at line 809 of file ReadoutGeomCnvAlg.cxx.

811  {
812 
813  if (!m_checkGeo) {
814  return StatusCode::SUCCESS;
815  }
816  ATH_CHECK(checkIdCompability(refEle, testEle));
817 
818  ATH_MSG_VERBOSE("Detector element "<<m_idHelperSvc->toString(refEle.identify())
819  <<std::endl<<GeoTrf::toString(refEle.localToGlobalTrans(gctx))
820  <<std::endl<<GeoTrf::toString(testEle.getMaterialGeom()->getAbsoluteTransform())
821  <<std::endl<<"r-size: "<<testEle.getRsize()<<"/"<<testEle.getLongRsize()
822  <<" s-size: "<<testEle.getSsize()<<"/"<<testEle.getLongSsize()
823  <<" z-size: "<<testEle.getZsize()<<"/"<<testEle.getLongZsize());
824  for (unsigned int lay = 1; lay <= refEle.numLayers(); ++lay){
825  for (unsigned int tube = 1; tube <= refEle.numTubesInLay(); ++tube) {
826  const IdentifierHash tubeHash {refEle.measurementHash(lay,tube)};
827  if (!refEle.isValid(tubeHash)) {
828  ATH_MSG_VERBOSE("SKip layer / tube "<<lay <<","<<tube);
829  continue;
830  }
831  const Amg::Transform3D globToLocal = refEle.globalToLocalTrans(gctx, tubeHash);
832 
833  const Amg::Vector3D refPos = refEle.globalTubePos(gctx, tubeHash);
834  const Amg::Vector3D tubePos = testEle.tubePos(lay, tube);
835 
836 
837  if ( (refPos - tubePos).mag() > Gaudi::Units::micrometer &&
838  (globToLocal*refPos - globToLocal * tubePos).perp() > Gaudi::Units::micrometer) {
839  ATH_MSG_ERROR("Tube positions differ for "<<m_idHelperSvc->toString(refEle.measurementId(tubeHash))
840  <<" reference: "<<GeoTrf::toString(globToLocal*refPos)<<" vs. test: "
841  <<GeoTrf::toString(globToLocal*tubePos) <<" delta: "<<(refPos - tubePos).mag()
842  <<" Transforms "<<std::endl
843  <<" **** "<< GeoTrf::toString(globToLocal.inverse())<<std::endl
844  <<" **** "<< GeoTrf::toString(testEle.transform(lay, tube)));
845  return StatusCode::FAILURE;
846  }
847  ATH_MSG_VERBOSE("Tube positions layer: "<<lay<<", tube: "<<tube
848  <<std::endl<<"reference: "<<GeoTrf::toString(refPos)
849  <<std::endl<<"test: "<<GeoTrf::toString(tubePos)
850  <<std::endl<<testEle.tubeLength(lay, tube)<<"/"<<testEle.getActiveTubeLength(lay, tube)<<"/"
851  <<testEle.getWireLength(lay,tube)<<" vs. "<<refEle.tubeLength(tubeHash)
852  <<"/"<<refEle.activeTubeLength(tubeHash)<<"/"<<refEle.wireLength(tubeHash)
853  <<"/"<<refEle.uncutTubeLength(tubeHash));
854  if (std::abs(testEle.getTubeLengthForCaching(lay,tube) - refEle.uncutTubeLength(tubeHash)) >
855  std::numeric_limits<float>::epsilon() ) {
856  ATH_MSG_FATAL("Different tube length's detected for "<<m_idHelperSvc->toStringDetEl(refEle.identify())
857  << " layer: "<<lay<<", tube: "<<tube<<" -- "<<testEle.getTubeLengthForCaching(lay,tube)<<" (new) vs. "
858  <<refEle.uncutTubeLength(tubeHash)<<" (ref)");
859  return StatusCode::FAILURE;
860  }
861  }
862  }
863 
864  return StatusCode::SUCCESS;
865 }

◆ dumpAndCompare() [2/5]

StatusCode MuonGMR4::ReadoutGeomCnvAlg::dumpAndCompare ( const ActsGeometryContext gctx,
const MuonGMR4::MmReadoutElement refEle,
const MuonGM::MMReadoutElement testEle 
) const
private

Definition at line 761 of file ReadoutGeomCnvAlg.cxx.

763  {
764 
765  if (!m_checkGeo) {
766  return StatusCode::SUCCESS;
767  }
768  ATH_CHECK(checkIdCompability(refEle, testEle));
769 
770  ATH_MSG_VERBOSE("Compare basic readout transforms"<<std::endl
771  <<GeoTrf::toString(testEle.absTransform(),true)<<std::endl
772  <<GeoTrf::toString(refEle.localToGlobalTrans(gctx), true));
773  const MmIdHelper& idHelper{m_idHelperSvc->mmIdHelper()};
774  for (unsigned int gasGap = 1; gasGap <= refEle.nGasGaps(); ++ gasGap) {
775  const Identifier gapId = idHelper.channelID(refEle.identify(), refEle.multilayer(), gasGap, 1);
776 
777  const Amg::Transform3D& refTrf{refEle.localToGlobalTrans(gctx, gapId)};
778  const Amg::Transform3D& testTrf{testEle.transform(gapId)};
779  if (!Amg::doesNotDeform(refTrf.inverse()*testTrf)) {
780  ATH_MSG_FATAL("The layer "<<m_idHelperSvc->toStringGasGap(gapId)<<" does not transform equally"
781  <<GeoTrf::toString(refTrf, true) <<" vs. "<<GeoTrf::toString(testTrf, true));
782  return StatusCode::FAILURE;
783  }
784  const MuonGMR4::StripDesign& stripDesign{refEle.stripLayer(gapId).design()};
785 
786  for (int strip = stripDesign.firstStripNumber(); strip <= stripDesign.numStrips(); ++strip) {
787  const Identifier stripId = idHelper.channelID(refEle.identify(), refEle.multilayer(), gasGap, strip);
788  const Amg::Vector3D refStripPos{refEle.stripPosition(gctx, stripId)};
789  const Amg::Vector3D refStripDir{refEle.localToGlobalTrans(gctx, refEle.layerHash(stripId)).linear() * Amg::Vector3D::UnitX()};
790 
791  Amg::Vector3D testStripPos{Amg::Vector3D::Zero()};
792  if (!testEle.stripGlobalPosition(stripId, testStripPos)) {
793  ATH_MSG_FATAL("Failed to retrieve strip position "<<m_idHelperSvc->toString(stripId));
794  return StatusCode::FAILURE;
795  }
796  const double dist = refStripDir.dot(refStripPos - testStripPos);
797  if (std::abs(dist) > 10. * Gaudi::Units::micrometer) {
798  ATH_MSG_FATAL("The strip "<<Amg::toString(testStripPos)<<" is not describing the same strip as "
799  <<Amg::toString(refStripPos)<<". Channel "<<m_idHelperSvc->toString(stripId)
800  <<" distance: "<<dist<<" "<<(dist / testEle.m_etaDesign[gasGap -1].inputWidth));
801  return StatusCode::FAILURE;
802  }
803  ATH_MSG_VERBOSE("Channel postion "<<m_idHelperSvc->toString(stripId)<<" match between legacy & new");
804  }
805  }
806  return StatusCode::SUCCESS;
807 }

◆ dumpAndCompare() [3/5]

StatusCode MuonGMR4::ReadoutGeomCnvAlg::dumpAndCompare ( const ActsGeometryContext gctx,
const MuonGMR4::RpcReadoutElement refEle,
const MuonGM::RpcReadoutElement testEle 
) const
private

Definition at line 866 of file ReadoutGeomCnvAlg.cxx.

868  {
869 
870  if (!m_checkGeo) {
871  return StatusCode::SUCCESS;
872  }
873  ATH_CHECK(checkIdCompability(refEle, testEle));
874 
875  ATH_MSG_VERBOSE("Compare basic readout transforms"<<std::endl
876  <<" ref: "<<GeoTrf::toString(refEle.localToGlobalTrans(gctx), true)<<std::endl
877  <<" test: "<<GeoTrf::toString(testEle.absTransform(),true)<<std::endl
878  <<"delta: "<<GeoTrf::toString(testEle.absTransform().inverse()*refEle.localToGlobalTrans(gctx), true ));
879  const RpcIdHelper& idHelper{m_idHelperSvc->rpcIdHelper()};
880  for (unsigned int gasGap = 1; gasGap <= refEle.nGasGaps(); ++gasGap) {
881  for (int doubPhi = refEle.doubletPhi(); doubPhi <= refEle.doubletPhiMax(); ++doubPhi) {
882  for (bool measPhi : {false, true}) {
883  if (measPhi && !refEle.nPhiStrips()) continue;
884  for (int strip = 1; strip <= testEle.Nstrips(measPhi); ++strip) {
885  const Identifier stripId = idHelper.channelID(refEle.identify(),
886  refEle.doubletZ(),
887  doubPhi, gasGap, measPhi, strip);
888 
889  const Amg::Transform3D& refTrans{refEle.localToGlobalTrans(gctx, stripId)};
890  const Amg::Transform3D& testTrans{testEle.transform(stripId)};
891  if (strip == 1 && !Amg::doesNotDeform(refTrans.inverse()*testTrans)) {
892  ATH_MSG_ERROR("Transformation for "<<m_idHelperSvc->toString(stripId)<<" - "<<refEle.identHash()<<std::endl
893  <<" *** ref: "<<GeoTrf::toString(refTrans)<<std::endl
894  <<" *** test: "<<GeoTrf::toString(testTrans)<<std::endl
895  <<" -> delta: "<<GeoTrf::toString(refTrans.inverse()*testTrans));
896  return StatusCode::FAILURE;
897  }
898 
899  const Amg::Vector3D refStripPos = refEle.stripPosition(gctx, stripId);
900  const Amg::Vector3D testStripPos = testEle.stripPos(stripId);
901  // The threshold here used to be epsilon for a float.
902  // But this was then giving a failure in aarch64,
903  // with a difference of almost exactly 1e-4.
904  // It turned out that that was coming from GeoDeDuplicator,
905  // where to consider two transforms equivalent,
906  // the translations must match to 1e-4. But if the
907  // difference is almost exactly 1e-4, then small FP
908  // differences can be magnified to just about 1e-4.
909  if ((refStripPos - testStripPos).mag() > 2e-4){
910  ATH_MSG_ERROR("Mismatch in strip positions "<<m_idHelperSvc->toString(stripId)
911  <<" ref: "<<Amg::toString(refStripPos)<<" test: "<<Amg::toString(testStripPos)
912  <<" local coordinates -- ref: "<<Amg::toString(refTrans.inverse()*refStripPos)
913  <<" test: "<<Amg::toString(refTrans.inverse()*testStripPos));
914  return StatusCode::FAILURE;
915  }
916  ATH_MSG_VERBOSE("Agreement between new and old geometry for channel "<<m_idHelperSvc->toString(stripId)
917  <<" strip position "<<Amg::toString(refStripPos)
918  <<", local: "<<Amg::toString(refTrans.inverse()*refStripPos));
919  }
920  }
921  }
922  }
923  return StatusCode::SUCCESS;
924 }

◆ dumpAndCompare() [4/5]

StatusCode MuonGMR4::ReadoutGeomCnvAlg::dumpAndCompare ( const ActsGeometryContext gctx,
const MuonGMR4::sTgcReadoutElement refEle,
const MuonGM::sTgcReadoutElement testEle 
) const
private

Definition at line 999 of file ReadoutGeomCnvAlg.cxx.

1001  {
1002 
1003  if (!m_checkGeo) {
1004  return StatusCode::SUCCESS;
1005  }
1006  ATH_CHECK(checkIdCompability(refEle, testEle));
1007 
1008  ATH_MSG_VERBOSE("Compare basic readout transforms"<<std::endl
1009  <<GeoTrf::toString(testEle.absTransform(),true)<<std::endl
1010  <<GeoTrf::toString(refEle.localToGlobalTrans(gctx), true));
1011  const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
1012  for (unsigned int gasGap = 1; gasGap <= refEle.numLayers(); ++gasGap) {
1013  for (int chType = sTgcIdHelper::sTgcChannelTypes::Pad; chType <= sTgcIdHelper::sTgcChannelTypes::Wire; ++chType) {
1014  unsigned int numChannel = 0;
1015  const Identifier layID = idHelper.channelID(refEle.identify(),
1016  refEle.multilayer(),
1017  gasGap, chType, 1);
1018  switch(chType) {
1019  case sTgcIdHelper::sTgcChannelTypes::Pad:
1020  numChannel = refEle.numPads(layID);
1021  break;
1022 
1023  case sTgcIdHelper::sTgcChannelTypes::Strip:
1024  numChannel = refEle.numStrips(layID);
1025  break;
1026 
1027  case sTgcIdHelper::sTgcChannelTypes::Wire:
1028  numChannel = refEle.numWireGroups(gasGap);
1029  break;
1030  }
1031  for (unsigned int channel = 1; channel < numChannel ; ++channel) {
1032  const Identifier chID = idHelper.channelID(refEle.identify(),
1033  refEle.multilayer(),
1034  gasGap, chType, channel);
1035 
1036  const Amg::Transform3D& refTrans{refEle.localToGlobalTrans(gctx, chID)};
1037  const Amg::Transform3D& testTrans{testEle.transform(chID)};
1038  if (channel == 1 && Amg::doesNotDeform(refTrans.inverse()*testTrans)) {
1039  ATH_MSG_ERROR("Transformation for "<<m_idHelperSvc->toString(chID)<<std::endl
1040  <<" *** ref: "<<GeoTrf::toString(refTrans, true)<<std::endl
1041  <<" *** test: "<<GeoTrf::toString(testTrans, true));
1042  return StatusCode::FAILURE;
1043  }
1044  if (chType == sTgcIdHelper::sTgcChannelTypes::Pad) {
1045  const Amg::Vector3D refChannelPos = refEle.globalChannelPosition(gctx, chID);
1046  Amg::Vector3D testChannelPos(Amg::Vector3D::Zero());
1047  testEle.stripGlobalPosition(chID, testChannelPos);
1048 
1049  const std::array<Amg::Vector3D,4> refPadCorners = refEle.globalPadCorners(gctx, chID);
1050  std::array<Amg::Vector3D,4> testPadCorners{make_array<Amg::Vector3D, 4>(Amg::Vector3D::Zero())};
1051  testEle.padGlobalCorners(chID, testPadCorners);
1052  for (unsigned int cornerIdx = 0; cornerIdx < refPadCorners.size(); ++cornerIdx) {
1053  if ((refPadCorners[cornerIdx] - testPadCorners[cornerIdx]).mag() > 10. * Gaudi::Units::micrometer){
1054  ATH_MSG_ERROR("Mismatch in pad Corner "<<m_idHelperSvc->toString(chID)
1055  <<" ref: "<<Amg::toString(refPadCorners[cornerIdx])<<" test: "<<Amg::toString(testPadCorners[cornerIdx])
1056  <<" local coordinates -- ref: "<<Amg::toString(testEle.absTransform().inverse()*refPadCorners[cornerIdx])
1057  <<" test: "<<Amg::toString(testEle.absTransform().inverse()*testPadCorners[cornerIdx]));
1058  return StatusCode::FAILURE;
1059  }
1060  }
1061  if ((refChannelPos - testChannelPos).mag() > 10. * Gaudi::Units::micrometer){
1062  ATH_MSG_ERROR("Mismatch in channel positions "<<m_idHelperSvc->toString(chID)
1063  <<" ref: "<<Amg::toString(refChannelPos)<<" test: "<<Amg::toString(testChannelPos)
1064  <<" local coordinates -- ref: "<<Amg::toString(testEle.absTransform().inverse()*refChannelPos)
1065  <<" test: "<<Amg::toString(testEle.absTransform().inverse()*testChannelPos));
1066  return StatusCode::FAILURE;
1067  }
1068  ATH_MSG_VERBOSE("Agreement between new and old geometry for channel "<<m_idHelperSvc->toString(chID)
1069  <<" channel position "<<Amg::toString(refChannelPos));
1070  }
1071  else {
1072  const Amg::Vector3D refChannelPos = refEle.globalChannelPosition(gctx, chID);
1073  Amg::Vector3D testChannelPos(Amg::Vector3D::Zero());
1074  testEle.stripGlobalPosition(chID, testChannelPos);
1075  if ((refChannelPos - testChannelPos).mag() > 10. * Gaudi::Units::micrometer){
1076  ATH_MSG_ERROR("Mismatch in channel positions "<<m_idHelperSvc->toString(chID)
1077  <<" ref: "<<Amg::toString(refChannelPos)<<" test: "<<Amg::toString(testChannelPos)
1078  <<" local coordinates -- ref: "<<Amg::toString(testEle.absTransform().inverse()*refChannelPos)
1079  <<" test: "<<Amg::toString(testEle.absTransform().inverse()*testChannelPos));
1080  return StatusCode::FAILURE;
1081  }
1082  ATH_MSG_VERBOSE("Agreement between new and old geometry for channel "<<m_idHelperSvc->toString(chID)
1083  <<" channel position "<<Amg::toString(refChannelPos));
1084  }
1085  }
1086  }
1087  }
1088  return StatusCode::SUCCESS;
1089 }

◆ dumpAndCompare() [5/5]

StatusCode MuonGMR4::ReadoutGeomCnvAlg::dumpAndCompare ( const ActsGeometryContext gctx,
const MuonGMR4::TgcReadoutElement refEle,
const MuonGM::TgcReadoutElement testEle 
) const
private

Definition at line 925 of file ReadoutGeomCnvAlg.cxx.

927  {
928 
929  if (!m_checkGeo) {
930  return StatusCode::SUCCESS;
931  }
932  ATH_CHECK(checkIdCompability(refEle, testEle));
933 
934  const TgcIdHelper& idHelper{m_idHelperSvc->tgcIdHelper()};
935 
936  ATH_MSG_VERBOSE("Detector element "<<m_idHelperSvc->toString(refEle.identify())
937  <<std::endl<<GeoTrf::toString(refEle.localToGlobalTrans(gctx), true)
938  <<std::endl<<GeoTrf::toString(testEle.getMaterialGeom()->getAbsoluteTransform(), true)
939  <<std::endl<<"r-size: "<<testEle.getRsize()<<"/"<<testEle.getLongRsize()
940  <<" s-size: "<<testEle.getSsize()<<"/"<<testEle.getLongSsize()
941  <<" z-size: "<<testEle.getZsize()<<"/"<<testEle.getLongZsize());
942 
943  for (unsigned int gasGap = 1; gasGap <= refEle.nGasGaps(); ++gasGap) {
944  for (bool isStrip : {false, true}) {
945  const IdentifierHash layHash = refEle.constructHash(0, gasGap, isStrip);
946  const Identifier layId = idHelper.channelID(refEle.identify(), gasGap, isStrip, 1);
947  ATH_MSG_VERBOSE("Test layer "<<m_idHelperSvc->toString(layId)<<" "<<refEle.numChannels(layHash)<<" "<<layHash);
948  if (!refEle.numChannels(layHash)) continue;
949  const Amg::Transform3D& refLayerTrf = refEle.localToGlobalTrans(gctx, layHash);
950  const Amg::Transform3D& testLayerTrf = testEle.transform(layId);
951  if (!Amg::isIdentity(refLayerTrf.inverse()* testLayerTrf)) {
952  ATH_MSG_FATAL("The transformations in "<<m_idHelperSvc->toString(layId)
953  <<std::endl<<"ref : "<<GeoTrf::toString(refLayerTrf,true)
954  <<std::endl<<"test: "<<GeoTrf::toString(testLayerTrf,true)
955  <<" are not identical. ");
956  return StatusCode::FAILURE;
957  }
958  ATH_MSG_VERBOSE("Transformations in "<<m_idHelperSvc->toString(layId)
959  <<std::endl<<"ref : "<<GeoTrf::toString(refLayerTrf,true)
960  <<std::endl<<"test: "<<GeoTrf::toString(testLayerTrf,true));
961 
962  for (unsigned int ch = 1; ch <= refEle.numChannels(layHash); ++ch) {
963  const IdentifierHash measHash = refEle.constructHash(ch, gasGap, isStrip);
964  const Identifier measId = refEle.measurementId(measHash);
965  const Amg::Vector3D refChannel = refEle.channelPosition(gctx, measHash);
966  const Amg::Vector3D testChannel = testEle.channelPos(measId);
967  if ((refChannel - testChannel).mag() < std::numeric_limits<float>::epsilon()){
968  continue;
969  }
970  std::stringstream msg{};
971  msg<<"The channel "<<m_idHelperSvc->toString(measId)
972  << " is not at the same position "<<Amg::toString(refChannel)
973  <<" vs. "<<Amg::toString(testChannel)<<". Difference: "
974  <<(refChannel - testChannel).mag();
975  if (!isStrip) {
976  msg<<std::endl<<"*** Test *** - wirePitch: "<<testEle.wirePitch()
977  <<", tot wires "<<testEle.nWires(gasGap)
978  <<", wires to reach "<<testEle.nPitchesToGang(gasGap, ch)
979  <<", wires in gang "<<testEle.nWires(gasGap, ch);
980  const MuonGMR4::WireGroupDesign& design{refEle.wireGangLayout(gasGap)};
981  msg<<std::endl<<"*** Ref *** - wirePitch: "<<design.stripPitch()
982  <<", tot wires "<<testEle.nWires(gasGap)
983  <<", wires to reach "<<design.numPitchesToGroup(ch)
984  <<", wires in gang "<<design.numWiresInGroup(ch);
985  } else {
986  const Amg::Vector3D locRefPos{refLayerTrf.inverse() * refChannel};
987  const Amg::Vector3D locTestPos{refLayerTrf.inverse()* testChannel};
988  msg<<std::endl<<"*** Ref **** - "<<Amg::toString(locRefPos)<<std::endl;
989  msg<<std::endl<<"*** Test **** - "<<Amg::toString(locTestPos)<<std::endl;
990  }
991  ATH_MSG_FATAL(msg.str());
992  return StatusCode::FAILURE;
993  }
994 
995  }
996  }
997  return StatusCode::SUCCESS;
998 }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ execute()

StatusCode MuonGMR4::ReadoutGeomCnvAlg::execute ( const EventContext &  ctx) const
override

Prepare the Geometry context

Ensure that the position & tracking alignment caches are split from the conditions object

Check that for every detector technology there's an DetectorAlignStore in the geometry context Otherwise create an empty one.

Create the cache and populate it with the geoWolds

Build the chamber technologies

Finally add the passives

Move the passives also onto the new world tree...

Final check that all elements are cached properly

Definition at line 76 of file ReadoutGeomCnvAlg.cxx.

76  {
78  if (writeHandle.isValid()) {
79  ATH_MSG_DEBUG("The current readout geometry is still valid.");
80  return StatusCode::SUCCESS;
81  }
82  writeHandle.addDependency(IOVInfiniteRange::infiniteRunLB());
84  ActsGeometryContext geoContext{};
85  using TrackingAlignment = ActsTrk::DetectorAlignStore::TrackingAlignStore;
88  if (!readHandle.isValid()) {
89  ATH_MSG_FATAL("Failed to retrieve alignment store "<<key.fullKey());
90  return StatusCode::FAILURE;
91  }
92  writeHandle.addDependency(readHandle);
93  auto alignStore = std::make_unique<ActsTrk::DetectorAlignStore>(**readHandle);
95  if (alignStore->geoModelAlignment) {
96  alignStore->geoModelAlignment->clearPosCache();
97  }
98  alignStore->trackingAlignment = std::make_unique<TrackingAlignment>(alignStore->detType);
99  geoContext.setStore(std::move(alignStore));
100  }
103  std::vector<ActsTrk::DetectorType> presentTechs = m_detMgr->getDetectorTypes();
104  for (const ActsTrk::DetectorType detType : presentTechs) {
105  if (geoContext.getStore(detType)) {
106  continue;
107  }
108  ATH_MSG_WARNING("No external detector alignment has been defined for technology "<<ActsTrk::to_string(detType));
109  geoContext.setStore(std::make_unique<ActsTrk::DetectorAlignStore>(detType));
110  }
112  ConstructionCache cacheObj;
113  cacheObj.detMgr = std::make_unique<MuonGM::MuonDetectorManager>();
114  cacheObj.world = createGeoWorld();
115  cacheObj.detMgr->addTreeTop(cacheObj.world);
117  ATH_CHECK(buildMdt(geoContext, cacheObj));
118  ATH_CHECK(buildTgc(geoContext, cacheObj));
119  ATH_CHECK(buildRpc(geoContext, cacheObj));
120  ATH_CHECK(buildSTGC(geoContext, cacheObj));
121  ATH_CHECK(buildMM(geoContext, cacheObj));
123  std::vector<GeoChildNodeWithTrf> treeTops = getChildrenWithRef(m_detMgr->getTreeTop(0), false);
124 
126  for (const GeoChildNodeWithTrf& treeTop : treeTops) {
127  if (hasStationVolume(treeTop.volume, cacheObj.translatedStations)) continue;
128  ATH_MSG_VERBOSE("Detected passive volume "<<treeTop.nodeName);
129 
130  cacheObj.world->add(const_pointer_cast(treeTop.volume));
131  }
132 
134  if (m_checkGeo) {
135  const std::vector<const MuonGMR4::MuonReadoutElement*> refEles{m_detMgr->getAllReadoutElements()};
136  for (const MuonGMR4::MuonReadoutElement* refEle : refEles) {
137  ATH_CHECK(checkIdCompability(*refEle, *cacheObj.detMgr->getReadoutElement(refEle->identify())));
138  }
139  }
140 
141  ATH_CHECK(writeHandle.record(std::move(cacheObj.detMgr)));
142  return StatusCode::SUCCESS;
143 }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthReentrantAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 79 of file AthReentrantAlgorithm.cxx.

80 {
81  // If we didn't find any symlinks to add, just return the collection
82  // from the base class. Otherwise, return the extended collection.
83  if (!m_extendedExtraObjects.empty()) {
85  }
86  return Algorithm::extraOutputDeps();
87 }

◆ filterPassed()

virtual bool AthReentrantAlgorithm::filterPassed ( const EventContext &  ctx) const
inlinevirtualinherited

Definition at line 135 of file AthReentrantAlgorithm.h.

135  {
136  return execState( ctx ).filterPassed();
137  }

◆ initialize()

StatusCode MuonGMR4::ReadoutGeomCnvAlg::initialize ( )
override

Definition at line 67 of file ReadoutGeomCnvAlg.cxx.

67  {
68  ATH_CHECK(m_idHelperSvc.retrieve());
70  ATH_CHECK(m_alignStoreKeys.initialize());
72  return StatusCode::SUCCESS;
73 }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isClonable()

bool AthReentrantAlgorithm::isClonable ( ) const
overridevirtualinherited

◆ isReEntrant()

bool MuonGMR4::ReadoutGeomCnvAlg::isReEntrant ( ) const
inlineoverride

Definition at line 39 of file ReadoutGeomCnvAlg.h.

39 { return false; }

◆ msg() [1/2]

MsgStream& AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< Gaudi::Algorithm >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t<std::is_void_v<std::result_of_t<decltype(&T::renounce)(T)> > && !std::is_base_of_v<SG::VarHandleKeyArray, T> && std::is_base_of_v<Gaudi::DataHandle, T>, void> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ setFilterPassed()

virtual void AthReentrantAlgorithm::setFilterPassed ( bool  state,
const EventContext &  ctx 
) const
inlinevirtualinherited

Definition at line 139 of file AthReentrantAlgorithm.h.

139  {
140  execState( ctx ).setFilterPassed( state );
141  }

◆ sysExecute()

StatusCode AthReentrantAlgorithm::sysExecute ( const EventContext &  ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 67 of file AthReentrantAlgorithm.cxx.

68 {
69  return Gaudi::Algorithm::sysExecute (ctx);
70 }

◆ sysInitialize()

StatusCode AthReentrantAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in InputMakerBase, and HypoBase.

Definition at line 96 of file AthReentrantAlgorithm.cxx.

96  {
98 
99  if (sc.isFailure()) {
100  return sc;
101  }
102 
103  ServiceHandle<ICondSvc> cs("CondSvc",name());
104  for (auto h : outputHandles()) {
105  if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
106  // do this inside the loop so we don't create the CondSvc until needed
107  if ( cs.retrieve().isFailure() ) {
108  ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
109  return StatusCode::SUCCESS;
110  }
111  if (cs->regHandle(this,*h).isFailure()) {
112  sc = StatusCode::FAILURE;
113  ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
114  << " with CondSvc");
115  }
116  }
117  }
118  return sc;
119 }

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ m_alignStoreKeys

SG::ReadCondHandleKeyArray<ActsTrk::DetectorAlignStore> MuonGMR4::ReadoutGeomCnvAlg::m_alignStoreKeys {this, "AlignmentKeys", {}, "Alignment key"}
private

Definition at line 124 of file ReadoutGeomCnvAlg.h.

◆ m_checkGeo

Gaudi::Property<bool> MuonGMR4::ReadoutGeomCnvAlg::m_checkGeo {this, "checkGeo", false, "Checks the positions of the sensors"}
private

Definition at line 126 of file ReadoutGeomCnvAlg.h.

◆ m_detMgr

const MuonGMR4::MuonDetectorManager* MuonGMR4::ReadoutGeomCnvAlg::m_detMgr {nullptr}
private

Definition at line 127 of file ReadoutGeomCnvAlg.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthReentrantAlgorithm::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 153 of file AthReentrantAlgorithm.h.

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> MuonGMR4::ReadoutGeomCnvAlg::m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
private

Definition at line 120 of file ReadoutGeomCnvAlg.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_writeKey

SG::WriteCondHandleKey<MuonGM::MuonDetectorManager> MuonGMR4::ReadoutGeomCnvAlg::m_writeKey {this, "WriteKey", "MuonDetectorManager"}
private

Definition at line 122 of file ReadoutGeomCnvAlg.h.


The documentation for this class was generated from the following files:
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
MuonGMR4::ReadoutGeomCnvAlg::buildSTGC
StatusCode buildSTGC(const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
Definition: ReadoutGeomCnvAlg.cxx:530
MuonGMR4::RpcReadoutElement::doubletPhiMax
int doubletPhiMax() const
Returns the maximum phi panel.
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
MuonGMR4::ReadoutGeomCnvAlg::buildMdt
StatusCode buildMdt(const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
Definition: ReadoutGeomCnvAlg.cxx:632
chType
sTgcIdHelper::sTgcChannelTypes chType
Definition: MuonPhaseII/MuonDetDescr/MuonGeoModelTestR4/src/NSWGeoPlottingAlg.cxx:20
MuonGMR4::ReadoutGeomCnvAlg::dumpAndCompare
StatusCode dumpAndCompare(const ActsGeometryContext &gctx, const MuonGMR4::RpcReadoutElement &refEle, const MuonGM::RpcReadoutElement &testEle) const
Definition: ReadoutGeomCnvAlg.cxx:866
MuonGM::MuonPadDesign
Parameters defining the design of the readout sTGC pads.
Definition: MuonPadDesign.h:40
MuonGMR4::sTgcReadoutElement::multilayer
int multilayer() const
Returns the multilayer of the sTgcReadoutElement.
MuonGM::MuonClusterReadoutElement::transform
virtual const Amg::Transform3D & transform() const override
Return local to global transform.
Definition: MuonClusterReadoutElement.h:124
MuonGMR4::MmReadoutElement
Definition: MmReadoutElement.h:19
STGC
@ STGC
Definition: RegSelEnums.h:39
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
MuonGMR4::TgcReadoutElement::wireGangLayout
const WireGroupDesign & wireGangLayout(unsigned int gasGap) const
Returns access to the wire group design of the given gasGap [1-3] If the gap does not have a wires an...
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
MuonGMR4::MuonDetectorManager::getDetectorTypes
std::vector< ActsTrk::DetectorType > getDetectorTypes() const
Returns a list of all detector types.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonDetectorManager.cxx:143
MuonGMR4::StripDesign
Definition: StripDesign.h:30
sendEI_SPB.ch
ch
Definition: sendEI_SPB.py:35
MuonGMR4::MdtReadoutElement::asBuiltRefFrame
Amg::Transform3D asBuiltRefFrame() const
Returns the transformation to go into the reference frame of the as-buit & b-line model starting from...
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MdtReadoutElement.cxx:211
MuonGMR4::MmReadoutElement::createHash
static IdentifierHash createHash(const int gasGap, const int strip)
MuonGM::MuonReadoutElement::absTransform
const Amg::Transform3D & absTransform() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:210
MuonGMR4::ReadoutGeomCnvAlg::cloneReadoutVolume
StatusCode cloneReadoutVolume(const ActsGeometryContext &gctx, const Identifier &stationId, ConstructionCache &cacheObj, GeoIntrusivePtr< GeoVFullPhysVol > &clonedPhysVol, MuonGM::MuonStation *&station) const
Clones the fullPhysical volume of the readoutElement and embeds it into the associated station.
Definition: ReadoutGeomCnvAlg.cxx:236
MuonGMR4::MmReadoutElement::nGasGaps
unsigned int nGasGaps() const
Returns the number of gas gaps.
MuonGMR4::WireGroupDesign
Definition: WireGroupDesign.h:23
MuonGM::MdtReadoutElement::tubeLength
double tubeLength(const int tubeLayer, const int tube) const
MuonGMR4::MdtReadoutElement::numTubesInLay
unsigned int numTubesInLay() const
Returns the number of tubes per layer.
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:24
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
MuonGMR4::ReadoutGeomCnvAlg::buildStation
StatusCode buildStation(const ActsGeometryContext &gctx, const Identifier &stationId, ConstructionCache &cacheObj) const
builds a station object from readout element.
Definition: ReadoutGeomCnvAlg.cxx:144
ActsTrk::DetectorType
DetectorType
Simple enum to Identify the Type of the ACTS sub detector.
Definition: GeometryDefs.h:17
MdtAlignmentStore::chamberDistortions::bLine
const BLinePar * bLine
Definition: MdtAlignmentStore.h:26
MuonGMR4::ReadoutGeomCnvAlg::buildTgc
StatusCode buildTgc(const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
Definition: ReadoutGeomCnvAlg.cxx:365
perp
Scalar perp() const
perp method - perpenticular length
Definition: AmgMatrixBasePlugin.h:44
MuonGM::MuonStation::getPhysVol
PVConstLink getPhysVol() const
Definition: MuonStation.cxx:398
MuonGM::MuonChannelDesign::defineTrapezoid
void defineTrapezoid(double HalfShortY, double HalfLongY, double HalfHeight)
set the trapezoid dimensions
Definition: MuonChannelDesign.cxx:25
ActsTrk::DetectorAlignStore::TrackingAlignStore
Store holding the transfomations used by the Acts algorithms.
Definition: DetectorAlignStore.h:33
TgcIdHelper
Definition: TgcIdHelper.h:50
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
MuonGMR4::MdtReadoutElement::tubeLength
double tubeLength(const IdentifierHash &hash) const
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MdtReadoutElement.cxx:185
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
MuonGMR4::MdtReadoutElement::moduleThickness
double moduleThickness() const
Returns the thickness of the chamber.
MuonGM::GasGapIntArray
TgcReadoutParams::GasGapIntArray GasGapIntArray
Definition: RDBReaderAtlas.cxx:20
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
MuonGMR4::MdtReadoutElement::measurementHash
static IdentifierHash measurementHash(unsigned int layerNumber, unsigned int tubeNumber)
Transform the layer and tube number to the measurementHash.
MuonGMR4::TgcReadoutElement::nGasGaps
unsigned int nGasGaps() const
Returns the number of gasgaps described by this ReadOutElement (usally 2 or 3)
MuonGM::MuonStation::getTransform
Amg::Transform3D getTransform() const
Definition: MuonStation.h:180
MuonGMR4::TgcReadoutElement::channelPosition
Amg::Vector3D channelPosition(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the center of the measurement channel eta measurement: wire gang center phi measurement: stri...
AthCommonDataStore::renounce
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
Definition: AthCommonDataStore.h:380
MuonGMR4::RpcReadoutElement::nGasGaps
unsigned int nGasGaps() const
Returns the number of gasgaps described by this ReadOutElement (usally 2 or 3)
MuonGMR4::MuonReadoutElement
The MuonReadoutElement is an abstract class representing the geometry representing the muon detector.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonReadoutElement.h:38
MuonGMR4::MdtReadoutElement::activeTubeLength
double activeTubeLength(const IdentifierHash &hash) const
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MdtReadoutElement.cxx:173
MuonGM::MuonReadoutElement::getZsize
double getZsize() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:198
MuonGM::MuonReadoutElement::detectorElementHash
IdentifierHash detectorElementHash() const
Returns the IdentifierHash of the detector element.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:186
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
deg
#define deg
Definition: SbPolyhedron.cxx:17
MuonGMR4::sTgcReadoutElement::ReadoutChannelType
ReadoutChannelType
ReadoutChannelType to distinguish the available readout channels Pad - pad readout channel Strip - et...
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:30
MuonGMR4::MdtTubeLayer
Helper struct to retrieve the tube lengths and the tube centers directly from the GeoModel tree.
Definition: MdtTubeLayer.h:28
MuonGMR4::MuonDetectorManager::getAllReadoutElements
std::vector< const MuonReadoutElement * > getAllReadoutElements() const
Returns the list of all detector elements.
MuonGM::MdtReadoutElement::getTubeLengthForCaching
double getTubeLengthForCaching(const int tubeLayer, const int tube) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx:104
MuonGMR4::MuonReadoutElement::globalToLocalTrans
Amg::Transform3D globalToLocalTrans(const ActsGeometryContext &ctx) const
Transformations to translate between local <-> global coordinates.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:78
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
MuonGMR4::ReadoutGeomCnvAlg::m_alignStoreKeys
SG::ReadCondHandleKeyArray< ActsTrk::DetectorAlignStore > m_alignStoreKeys
Definition: ReadoutGeomCnvAlg.h:124
ActsTrk::DetectorType::sTgc
@ sTgc
Micromegas (NSW)
MuonGMR4::ReadoutGeomCnvAlg::buildMM
StatusCode buildMM(const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
Definition: ReadoutGeomCnvAlg.cxx:476
sTgcIdHelper::sTgcChannelTypes
sTgcChannelTypes
Definition: sTgcIdHelper.h:190
MuonGM::MuonReadoutElement::getLongSsize
double getLongSsize() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:199
MuonGMR4::ReadoutGeomCnvAlg::m_checkGeo
Gaudi::Property< bool > m_checkGeo
Definition: ReadoutGeomCnvAlg.h:126
MuonGMR4::RpcReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:17
MuonGMR4::TgcReadoutElement::constructHash
static IdentifierHash constructHash(unsigned int measCh, unsigned int gasGap, const bool isStrip)
Constructs the Hash out of the Identifier fields (channel, gasGap, isStrip)
MuonGMR4::ReadoutGeomCnvAlg::buildRpc
StatusCode buildRpc(const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
Definition: ReadoutGeomCnvAlg.cxx:276
RpcIdHelper
Definition: RpcIdHelper.h:51
keylayer_zslicemap.strip
strip
Definition: keylayer_zslicemap.py:151
MuonGM::WiregangArray
TgcReadoutParams::WiregangArray WiregangArray
Definition: RDBReaderAtlas.cxx:22
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
MuonGM::sTgcReadoutElement::padGlobalCorners
bool padGlobalCorners(const Identifier &id, std::array< Amg::Vector3D, 4 > &gcorners) const
pad global corners
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:370
MuonGMR4::RpcReadoutElement::parameterBook
Set of parameters to describe a RPC chamber.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/RpcReadoutElement.h:21
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
MuonGM::TgcReadoutElement::channelPos
Amg::Vector3D channelPos(const Identifier &id) const
Returns the position of the active channel (wireGang or strip)
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
MuonGMR4::ReadoutGeomCnvAlg::checkIdCompability
StatusCode checkIdCompability(const MuonGMR4::MuonReadoutElement &refEle, const MuonGM::MuonReadoutElement &testEle) const
Definition: ReadoutGeomCnvAlg.cxx:744
Amg::getRotateZ3D
Amg::Transform3D getRotateZ3D(double angle)
get a rotation transformation around Z-axis
Definition: GeoPrimitivesHelpers.h:270
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
MuonGM::MuonReadoutElement::getLongRsize
double getLongRsize() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:200
MuonGM::MuonReadoutElement::getSsize
double getSsize() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:196
MuonGMR4::MdtReadoutElement::measurementId
Identifier measurementId(const IdentifierHash &measHash) const override final
Converts the measurement hash back to the full Identifier.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MdtReadoutElement.cxx:47
MdtAlignmentStore
Helper struct to cache simulatenously the As-built and the BLine corrections of the Mdts for fast acc...
Definition: MdtAlignmentStore.h:19
MuonGMR4::MdtReadoutElement::wireLength
double wireLength(const IdentifierHash &hash) const
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MdtReadoutElement.cxx:188
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
MuonGM::MdtReadoutElement::getWireLength
double getWireLength(const int tubeLayer, const int tube) const
MdtAlignmentStore::getDistortion
chamberDistortions getDistortion(const Identifier &detElId) const
Returns a chamber distortion that's cached for the corresponding Mdt chamber element.
Definition: MdtAlignmentStore.h:33
ActsGeometryContext::getStore
AlignmentStorePtr & getStore(const DetectorType type)
Returns the mutable alignable store for the ATLAS detector type (Pixel, Mdt, etc.)
Definition: ActsGeometryContext.h:33
MuonGMR4::ReadoutGeomCnvAlg::cloneNswWedge
GeoIntrusivePtr< GeoVFullPhysVol > cloneNswWedge(const ActsGeometryContext &gctx, const MuonGMR4::MuonReadoutElement *nswRE, ConstructionCache &cacheObj) const
Clones the fullPhysicalVolume of the
Definition: ReadoutGeomCnvAlg.cxx:463
MuonGMR4::MdtReadoutElement::uncutTubeLength
double uncutTubeLength(const IdentifierHash &tubeHash) const
Returns the uncut tube length.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MdtReadoutElement.cxx:179
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
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.
MdtAlignmentStore::chamberDistortions
Helper struct to store the pointer to the Mdt distrotion parameters, namely the As-built and the BLin...
Definition: MdtAlignmentStore.h:25
AthCommonDataStore
Definition: AthCommonDataStore.h:52
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
MuonGMR4::MmReadoutElement::multilayer
int multilayer() const
Returns the multi layer of the element [1-2].
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
MuonGM::TgcReadoutElement::nPitchesToGang
double nPitchesToGang(int gasGap, int gang) const
Returns the number of wire pitches that have to be travelled to reach gang i.
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
MuonGMR4::MmReadoutElement::stripPosition
Amg::Vector3D stripPosition(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the position of the strip center.
ActsTrk::DetectorType::Mm
@ Mm
Maybe not needed in the migration.
MuonGMR4::sTgcReadoutElement::numWireGroups
unsigned int numWireGroups(unsigned int gasGap) const
Number of wire groups in the gas gap.
z
#define z
MuonGM::MuonChannelDesign::DetType::MM
@ MM
MuonGMR4::MdtReadoutElement::parameterBook
Set of parameters to describe a MDT chamber.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MdtReadoutElement.h:26
MuonGM::MuonReadoutElement::getLongZsize
double getLongZsize() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:201
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
MuonR4::inverse
CalibratedSpacePoint::Covariance_t inverse(const CalibratedSpacePoint::Covariance_t &mat)
Inverts the parsed matrix.
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonSpacePoint/src/UtilFunctions.cxx:65
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
MuonGM::TgcReadoutElement::nWires
int nWires(int gasGap) const
Returns the total number of wires in a given gas gap.
MuonGM::MMReadoutElement::stripGlobalPosition
bool stripGlobalPosition(const Identifier &id, Amg::Vector3D &gpos) const
Definition: MMReadoutElement.h:280
MuonGMR4::RpcReadoutElement::doubletPhi
int doubletPhi() const
Returns the doublet Phi field of the MuonReadoutElement identifier.
MuonGM::MdtReadoutElement::getActiveTubeLength
double getActiveTubeLength(const int tubeLayer, const int tube) const
MuonGMR4::MdtReadoutElement::numLayers
unsigned int numLayers() const
Returns the number of tube layer.
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Amg::doesNotDeform
bool doesNotDeform(const Amg::Transform3D &trans)
Checks whether the linear part of the transformation rotates or stetches any of the basis vectors.
Definition: GeoPrimitivesHelpers.h:383
MuonGMR4::RpcReadoutElement::stripPosition
Amg::Vector3D stripPosition(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the position of the strip center.
MuonGM::MuonStation
Definition: MuonStation.h:51
IOVInfiniteRange::infiniteRunLB
static EventIDRange infiniteRunLB()
Produces an EventIDRange that is infinite in RunLumi and invalid in Time.
Definition: IOVInfiniteRange.h:39
MuonGMR4::TgcReadoutElement::measurementId
Identifier measurementId(const IdentifierHash &measHash) const override final
Converts the measurement hash back to the full Identifier.
MuonGMR4::RpcReadoutElement::doubletZ
int doubletZ() const
Returns the doublet Z field of the MuonReadoutElement identifier.
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Amg::isIdentity
bool isIdentity(const Amg::Transform3D &trans)
Checks whether the transformation is the Identity transformation.
Definition: GeoPrimitivesHelpers.h:393
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
python.SystemOfUnits.micrometer
int micrometer
Definition: SystemOfUnits.py:71
MuonGMR4::MuonReadoutElement::identHash
IdentifierHash identHash() const
Returns the Identifier has of the Element that is Identical to the detElHash from the id_helper class...
WriteCalibToCool.swap
swap
Definition: WriteCalibToCool.py:94
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
AthReentrantAlgorithm::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Definition: AthReentrantAlgorithm.h:153
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
MuonGMR4::MmReadoutElement::stripLayer
const StripLayer & stripLayer(const Identifier &measId) const
MuonGM::nStrips
int nStrips(const MuonGM::TgcReadoutElement &readoutEle, int layer)
Definition: MuonDetDescr/MuonGeoModelTest/src/GeoModelTgcTest.cxx:46
MuonGMR4::MdtReadoutElement::moduleHeight
double moduleHeight() const
Returns the height of the chamber (Distance bottom - topWidth)
MuonGMR4::MuonDetectorManager::getTreeTop
PVConstLink getTreeTop(unsigned int i) const override final
Returns the i-th top node of the MuonSystem trees.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonDetectorManager.cxx:133
MdtAlignmentStore::chamberDistortions::asBuilt
const MdtAsBuiltPar * asBuilt
Definition: MdtAlignmentStore.h:27
dumpTgcDigiThreshold.isStrip
list isStrip
Definition: dumpTgcDigiThreshold.py:33
ActsTrk::DetectorType::Mdt
@ Mdt
MuonSpectrometer.
MuonGMR4::ReadoutGeomCnvAlg::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: ReadoutGeomCnvAlg.h:120
MuonGM::MMReadoutElement::m_etaDesign
std::array< MuonChannelDesign, 4 > m_etaDesign
Definition: MMReadoutElement.h:157
MuonGMR4::sTgcReadoutElement::globalChannelPosition
Amg::Vector3D globalChannelPosition(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the global pad/strip/wireGroup position.
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
MmAlignmentStore
Definition: MmAlignmentStore.h:15
MuonGMR4::MdtReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MdtReadoutElement.h:22
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
MuonGMR4::MuonReadoutElement::alignableTransform
const GeoAlignableTransform * alignableTransform() const
Returnsthe alignable transform of the readout element.
MuonGM::RpcReadoutElement::stripPos
Amg::Vector3D stripPos(const Identifier &id) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/RpcReadoutElement.cxx:177
MuonGM::sTgcReadoutElement::stripGlobalPosition
bool stripGlobalPosition(const Identifier &id, Amg::Vector3D &gpos) const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:332
AthReentrantAlgorithm::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthReentrantAlgorithm.cxx:96
sTgcIdHelper
Definition: sTgcIdHelper.h:55
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
Amg::getRotateY3D
Amg::Transform3D getRotateY3D(double angle)
get a rotation transformation around Y-axis
Definition: GeoPrimitivesHelpers.h:261
MuonGMR4::MuonReadoutElement::identify
Identifier identify() const override final
Return the athena identifier.
MuonGMR4::RpcReadoutElement::nPhiStrips
unsigned int nPhiStrips() const
Number of strips measuring the phi coordinate.
sTgcAlignmentStore
Definition: sTgcAlignmentStore.h:14
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonGM::TgcReadoutElement::wirePitch
double wirePitch() const
Returns the pitch of the wires.
MuonGMR4::TgcReadoutElement::numChannels
unsigned int numChannels(const IdentifierHash &measHash) const
Returns the number of readout channels.
MuonGMR4::sTgcReadoutElement::numLayers
unsigned int numLayers() const
Returns the number of gas gap layers.
MuonGMR4::sTgcReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/sTgcReadoutElement.h:20
MuonGMR4::StripLayer::design
const StripDesign & design() const
Returns the underlying strip design.
SG::ReadCondHandleKey< ActsTrk::DetectorAlignStore >
MuonGM::MuonPadDesign::Length
double Length
Definition: MuonPadDesign.h:55
MuonGM::StripArray
TgcReadoutParams::StripArray StripArray
Definition: RDBReaderAtlas.cxx:23
MuonGM::MuonChannelDesign
Definition: MuonChannelDesign.h:24
MuonGMR4::StripLayer
Definition: StripLayer.h:10
MuonGM::MdtReadoutElement::tubePos
Amg::Vector3D tubePos(const Identifier &id) const
Returns the global position of the given tube.
a
TList * a
Definition: liststreamerinfos.cxx:10
h
MmIdHelper
Definition: MmIdHelper.h:54
MuonGM::MuonReadoutElement::getRsize
double getRsize() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:197
MuonGMR4::MmReadoutElement::layerHash
IdentifierHash layerHash(const Identifier &measId) const override final
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
MuonGMR4::sTgcReadoutElement::globalPadCorners
globalCornerArray globalPadCorners(const ActsGeometryContext &ctx, const Identifier &measId) const
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
MuonGM::MuonReadoutElement::identify
Identifier identify() const override final
Returns the ATLAS Identifier of the MuonReadOutElement.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:184
MuonGM::TgcReadoutParams
Definition: TgcReadoutParams.h:38
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:623
MuonGM::RpcReadoutElement::Nstrips
int Nstrips(bool measphi) const
returns the number of strips for the phi or eta plane
MuonGMR4::sTgcReadoutElement::numPads
unsigned int numPads(const Identifier &measId) const
Pads Total number of pads in the given layer.
python.DecayParser.children
children
Definition: DecayParser.py:32
MuonGMR4::sTgcReadoutElement::numStrips
unsigned int numStrips(const Identifier &measId) const
Strips Number of strips in a chamber.
MuonGMR4::MuonReadoutElement::localToGlobalTrans
const Amg::Transform3D & localToGlobalTrans(const ActsGeometryContext &ctx) const
Returns the local to global transformation into the ATLAS coordinate system.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonReadoutElement.cxx:81
LArCellBinning.step
step
Definition: LArCellBinning.py:158
MuonGMR4::MdtReadoutElement::globalTubePos
Amg::Vector3D globalTubePos(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the global position of the tube center.
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
MuonGMR4::MdtReadoutElement::complementaryRE
const MdtReadoutElement * complementaryRE() const
Returns the pointer to the other readout element inside the muon station.
MuonGMR4::StripDesign::stripPitch
double stripPitch() const
Distance between two adjacent strips.
CaloLCW_tf.trf
trf
Definition: CaloLCW_tf.py:20
MuonGM::MdtReadoutElement::transform
virtual const Amg::Transform3D & transform(const Identifier &id) const override final
Return local to global transform associated with this identifier.
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
MuonGMR4::PadDesign
Definition: PadDesign.h:24
MuonGMR4::RadialStripDesign
Definition: RadialStripDesign.h:23
MuonGMR4::ReadoutGeomCnvAlg::m_writeKey
SG::WriteCondHandleKey< MuonGM::MuonDetectorManager > m_writeKey
Definition: ReadoutGeomCnvAlg.h:122
SG::WriteCondHandle
Definition: WriteCondHandle.h:26
MuonGMR4::MdtReadoutElement::isValid
bool isValid(const IdentifierHash &measHash) const
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
mag
Scalar mag() const
mag method
Definition: AmgMatrixBasePlugin.h:26
MuonGMR4::TgcReadoutElement
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/TgcReadoutElement.h:19
calibdata.tube
tube
Definition: calibdata.py:31
MuonGMR4::ReadoutGeomCnvAlg::m_detMgr
const MuonGMR4::MuonDetectorManager * m_detMgr
Definition: ReadoutGeomCnvAlg.h:127
MuonGM::MuonChannelDesign::ChannelType::etaStrip
@ etaStrip
fitman.k
k
Definition: fitman.py:528
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
Amg::getTranslate3D
Amg::Transform3D getTranslate3D(const double X, const double Y, const double Z)
: Returns a shift transformation along an arbitrary axis
Definition: GeoPrimitivesHelpers.h:289
ServiceHandle< ICondSvc >
MuonGMR4::MuonDetectorManager::getReadoutElement
const MuonReadoutElement * getReadoutElement(const Identifier &id) const
Returns a generic Muon readout element.
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
Identifier
Definition: IdentifierFieldParser.cxx:14