 |
ATLAS Offline Software
|
#include <ReadoutGeomCnvAlg.h>
|
| ~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 |
|
|
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...
|
|
|
ServiceHandle< Muon::IMuonIdHelperSvc > | m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"} |
|
SG::WriteCondHandleKey< MuonGM::MuonDetectorManager > | m_writeKey {this, "WriteKey", "MuonDetectorManager"} |
|
SG::ReadCondHandleKeyArray< ActsTrk::DetectorAlignStore > | m_alignStoreKeys {this, "AlignmentKeys", {}, "Alignment key"} |
|
Gaudi::Property< bool > | m_checkGeo {this, "checkGeo", false, "Checks the positions of the sensors"} |
|
const MuonGMR4::MuonDetectorManager * | m_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 |
|
Definition at line 32 of file ReadoutGeomCnvAlg.h.
◆ StoreGateSvc_t
◆ ~ReadoutGeomCnvAlg()
MuonGMR4::ReadoutGeomCnvAlg::~ReadoutGeomCnvAlg |
( |
| ) |
|
|
default |
◆ AthReentrantAlgorithm()
AthReentrantAlgorithm::AthReentrantAlgorithm |
Constructor with parameters:
Definition at line 90 of file AthReentrantAlgorithm.cxx.
30 std::make_unique<AthenaBaseComps::AthAlgorithmDHUpdate>
32 std::move (m_updateDataHandles));
◆ buildMdt()
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.
636 static_cast<const MdtAlignmentStore*
>(alignItr->internalAlignment.get()) :
nullptr;
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");
644 GeoIntrusivePtr<GeoVFullPhysVol> physVol{};
647 if (copyMe->multilayer() == 1) {
650 (copyMe->tubePitch() - 2. * copyMe->tubeRadius());
653 modHalfThick{-0.5*copyMe->moduleThickness()};
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);
661 station->setMdtRsize(height);
662 station->setMdtZsize(thickness);
666 auto newElement = std::make_unique<MuonGM::MdtReadoutElement>(physVol,
668 cacheObj.detMgr.get());
669 newElement->setIdentifier(reId);
670 newElement->setMultilayer(copyMe->multilayer());
671 newElement->setNMdtInStation(
m_idHelperSvc->mdtIdHelper().multilayerMax(reId));
673 newElement->setParentMuonStation(station);
678 newElement->setLongRsize(2*
pars.halfY);
679 newElement->setRsize(2*
pars.halfY);
680 newElement->setZsize(2*
pars.halfHeight);
681 newElement->setLongZsize(2*
pars.halfHeight);
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;
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);
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;
705 newElement->m_ntubesinastep =
tube;
707 lastLength = currLength;
711 newElement->m_nsteps =
step;
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) {
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;
725 if (!station->hasMdtAsBuiltParams()){
726 station->setMdtAsBuiltParams(distort.
asBuilt);
728 if (!station->hasBLines()){
729 station->setBline(distort.
bLine);
731 const Amg::Vector3D refPoint = copyMe->bLineReferencePoint();
732 station->setBlineFixedPointInAmdbLRS(refPoint.x(), refPoint.y(), refPoint.z());
734 newElement->geoInitDone();
735 newElement->setBLinePar(distort.
bLine);
736 newElement->fillCache();
739 cacheObj.detMgr->addMdtReadoutElement(std::move(newElement));
741 return StatusCode::SUCCESS;
◆ buildMM()
Loop over the gas gaps & efine the
Definition at line 476 of file ReadoutGeomCnvAlg.cxx.
479 const auto alignStore = alignItr ?
480 static_cast<const MmAlignmentStore*
>(alignItr->internalAlignment.get()) :
nullptr;
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");
487 GeoIntrusivePtr<GeoVFullPhysVol> physVol{
cloneNswWedge(gctx, copyMe, cacheObj)};
488 auto newRE = std::make_unique<MuonGM::MMReadoutElement>(physVol,
490 copyMe->stationEta(),
491 copyMe->stationPhi(),
492 copyMe->multilayer(), cacheObj.detMgr.get(),
493 alignStore ? alignStore->passivation :
nullptr);
499 newRE->m_Xlg[
gasGap] = stripLayer.toOrigin() *
506 designFrom.longHalfHeight(),
507 designFrom.halfWidth(),
508 designFrom.stereoAngle());
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();
517 designTo.setFirstPos(designFrom.firstStripPos().x() + 0.5*designTo.inputPitch);
521 if (alignStore && alignStore->getBLine(reId)) {
522 newRE->setBLinePar(*alignStore->getBLine(reId));
525 cacheObj.detMgr->addMMReadoutElement(std::move(newRE));
527 return StatusCode::SUCCESS;
◆ buildRpc()
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.
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");
284 GeoIntrusivePtr<GeoVFullPhysVol> physVol{};
287 auto newElement = std::make_unique<MuonGM::RpcReadoutElement>(physVol,
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());
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);
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();
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;
320 std::vector<Identifier> gapIds{};
322 for (
int doubPhi = copyMe->doubletPhiMax(); doubPhi >= copyMe->doubletPhi(); --doubPhi) {
323 for (
bool measPhi : {
false,
true}) {
324 if (measPhi && copyMe->nPhiStrips()==0)
continue;
326 const Identifier gapId = idHelper.channelID(copyMe->identify(),
331 gapIds.push_back(gapId);
332 const Amg::Vector3D locStripPos = copyMe->globalToLocalTrans(gctx) * copyMe->stripPosition(gctx, gapId);
334 newElement->m_gasGap_xPos[
gasGap -1] = locStripPos.x();
337 const int dbPIdx = copyMe->doubletPhi() == 2 ? 1 : doubPhi;
339 newElement->m_first_phistrip_s[dbPIdx -1] = locStripPos.y();
340 newElement->m_phistrip_z = locStripPos.z();
342 newElement->m_first_etastrip_z = locStripPos.z();
343 newElement->m_etastrip_s[dbPIdx-1] = locStripPos.y();
348 newElement->fillCache();
351 const int surfaceHash = newElement->surfaceHash(gapId);
352 const int layerHash = newElement->layerHash(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();
359 cacheObj.detMgr->addRpcReadoutElement(std::move(newElement));
361 return StatusCode::SUCCESS;
◆ buildStation()
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.
147 const std::string stName{
m_idHelperSvc->stationNameString(stationId)};
152 ATH_MSG_DEBUG(
"Station "<<stName<<
" "<<stEta<<
" "<<stPhi<<
" already exists.");
153 return StatusCode::SUCCESS;
159 const GeoVFullPhysVol* readOutVol = copyMe->getMaterialGeom();
160 PVConstLink parentVolume = readOutVol->getParent();
161 cacheObj.translatedStations.insert(parentVolume);
163 PVLink parentPhysVol{make_intrusive<GeoFullPhysVol>(parentVolume->getLogVol())};
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);
188 const double shortS = (maxY1 - minY1);
189 const double longS = (maxY2 - minY2);
190 const double lengthR = (maxX - minX);
191 const double lengthZ = (maxZ - minZ);
195 const Amg::Transform3D stationTransform = alignTrf->getDefTransform().inverse()*parentVolume->getX();
197 for (
const GeoChildNodeWithTrf& child :
children) {
199 const GeoVPhysVol &childVolRef = *child.volume;
200 if (
typeid(childVolRef) ==
typeid(GeoFullPhysVol)) {
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));
211 (stationTransform * readOutVol->getX()).
inverse();
213 ATH_MSG_VERBOSE(
"stName "<<stName<<
","<<stEta<<
","<<stPhi<<
" -- shortS: "<<shortS<<
", longS: "<<longS
214 <<
", lengthR: "<<lengthR<<
", lengthZ "<<lengthZ
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));
229 cacheObj.world->add(
trf);
230 cacheObj.world->add(parentPhysVol);
232 return StatusCode::SUCCESS;
◆ buildSTGC()
Initialize the eta design
Initialize the phi design
Definition at line 530 of file ReadoutGeomCnvAlg.cxx.
532 auto alignStore = alignItr ?
static_cast<const sTgcAlignmentStore*
>(alignItr->internalAlignment.get()) :
nullptr;
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");
539 GeoIntrusivePtr<GeoVFullPhysVol> physVol{
cloneNswWedge(gctx, copyMe, cacheObj)};
541 auto newRE = std::make_unique<MuonGM::sTgcReadoutElement>(physVol,
543 copyMe->stationEta(),
544 copyMe->stationPhi(),
545 copyMe->multilayer(),
546 cacheObj.detMgr.get());
548 if (alignStore && alignStore->getBLine(reId)) {
549 newRE->setBLinePar(*alignStore->getBLine(reId));
556 copyMe->center(gctx, layerHash));
560 ChannelDesign& etaDesign{newRE->m_etaDesign[
layer-1]};
561 etaDesign.type = ChannelDesign::ChannelType::etaStrip;
563 if (copyEtaDesign.yCutout()) {
564 etaDesign.defineDiamond(copyEtaDesign.shortHalfHeight(),
565 copyEtaDesign.longHalfHeight(),
566 copyEtaDesign.halfWidth(),
567 copyEtaDesign.yCutout());
569 etaDesign.defineTrapezoid(copyEtaDesign.shortHalfHeight(),
570 copyEtaDesign.longHalfHeight(),
571 copyEtaDesign.halfWidth());
573 etaDesign.inputPitch = copyEtaDesign.stripPitch();
574 etaDesign.inputWidth = copyEtaDesign.stripWidth();
575 etaDesign.nch = copyEtaDesign.numStrips();
576 etaDesign.setFirstPos(copyEtaDesign.firstStripPos().x());
581 ChannelDesign& phiDesign{newRE->m_phiDesign[
layer-1]};
582 phiDesign.type = ChannelDesign::ChannelType::phiStrip;
584 if (copyPhiDesign.yCutout() == 0.) {
585 phiDesign.defineTrapezoid(copyPhiDesign.shortHalfHeight(),
586 copyPhiDesign.longHalfHeight(),
587 copyPhiDesign.halfWidth());
589 phiDesign.defineDiamond(copyPhiDesign.shortHalfHeight(),
590 copyPhiDesign.longHalfHeight(),
591 copyPhiDesign.halfWidth(),
592 copyPhiDesign.yCutout());
594 phiDesign.inputPitch = copyPhiDesign.stripPitch();
595 phiDesign.inputWidth = copyPhiDesign.stripWidth();
596 phiDesign.setFirstPos(copyPhiDesign.firstStripPos().x());
597 phiDesign.firstPitch = copyPhiDesign.numWiresInGroup(1);
598 phiDesign.groupWidth = copyPhiDesign.numWiresInGroup(2);
599 phiDesign.nGroups = copyPhiDesign.numStrips();
600 phiDesign.wireCutout = copyPhiDesign.wireCutout();
601 phiDesign.nch = copyPhiDesign.nAllWires();
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();
628 cacheObj.detMgr->addsTgcReadoutElement(std::move(newRE));
630 return StatusCode::SUCCESS;
◆ buildTgc()
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.
367 std::vector<const MuonGMR4::TgcReadoutElement*> tgcReadouts{
m_detMgr->getAllTgcReadoutElements()};
370 return a->stationEta() > b->stationEta();
372 ATH_MSG_INFO(
"Copy "<<tgcReadouts.size()<<
" Tgc readout elements to the legacy system");
376 std::map<std::string, std::shared_ptr<TgcReadoutParams>> readoutParMap{};
380 GeoIntrusivePtr<GeoVFullPhysVol> physVol{};
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);
389 std::shared_ptr<TgcReadoutParams>& readOutPars = readoutParMap[copyMe->chamberDesign()];
395 std::array<WiregangArray, 3> wires{};
398 bool stripSet{
false};
399 double wirePitch{0.};
404 if (nWireGangs[
gasGap -1]) {
408 for (
int gang = 1; gang <= design.numStrips(); ++gang) {
409 fillMe[gang -1] = design.numWiresInGroup(gang);
416 botMountings[
strip-1] = - design.stripLeftBottom(strip).x();
417 topMountings[
strip-1] = - design.stripLeftTop(strip).x();
419 botMountings[nCh] = - design.stripRightBottom(nCh).x();
420 topMountings[nCh] = - design.stripRightTop(nCh).x();
425 readOutPars = std::make_unique<TgcReadoutParams>(copyMe->chamberDesign(),
427 idHelper.stationPhiMax(reId),
428 std::move(nWireGangs),
433 std::move(botMountings),
434 std::move(topMountings),
442 const Amg::Vector3D translation{copyMe->globalToLocalTrans(gctx) * copyMe->center(gctx, layHash)};
443 newRE->setPlaneZ(translation.x(),
gasGap);
445 newRE->setRsize(copyMe->moduleHeight());
446 newRE->setSsize(copyMe->moduleWidthS());
447 newRE->setZsize(copyMe->moduleThickness());
449 newRE->setLongRsize(copyMe->moduleHeight());
450 newRE->setLongSsize(copyMe->moduleWidthL());
451 newRE->setLongZsize(copyMe->moduleThickness());
453 newRE->setReadOutParams(readOutPars);
456 cacheObj.detMgr->addTgcReadoutElement(std::move(newRE));
459 return StatusCode::SUCCESS;
◆ 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.
◆ checkIdCompability()
Definition at line 744 of file ReadoutGeomCnvAlg.cxx.
751 return StatusCode::FAILURE;
756 return StatusCode::FAILURE;
758 return StatusCode::SUCCESS;
◆ cloneNswWedge()
Clones the fullPhysicalVolume of the
Definition at line 463 of file ReadoutGeomCnvAlg.cxx.
466 GeoIntrusivePtr<const GeoVFullPhysVol> readOutVol{copyMe->getMaterialGeom()};
467 cacheObj.translatedStations.insert(readOutVol->getParent());
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);
◆ cloneReadoutVolume()
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.
243 const std::string stName{
m_idHelperSvc->stationNameString(reId)};
244 station = cacheObj.detMgr->getMuonStation(stName,
250 GeoIntrusivePtr<const GeoVFullPhysVol> readOutVol{copyMe->getMaterialGeom()};
251 parentPhysVol->add(cacheObj.newIdTag());
263 readOutVol->getParent()->getX() * readOutVol->getX()};
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;
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation 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.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation 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.
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation 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.
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation 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.
◆ declareProperty() [6/6]
◆ detStore()
◆ dumpAndCompare() [1/5]
Definition at line 809 of file ReadoutGeomCnvAlg.cxx.
814 return StatusCode::SUCCESS;
820 <<std::endl<<
GeoTrf::toString(testEle.getMaterialGeom()->getAbsoluteTransform())
824 for (
unsigned int lay = 1; lay <= refEle.
numLayers(); ++lay){
827 if (!refEle.
isValid(tubeHash)) {
841 <<
GeoTrf::toString(globToLocal*tubePos) <<
" delta: "<<(refPos - tubePos).mag()
842 <<
" Transforms "<<std::endl
845 return StatusCode::FAILURE;
855 std::numeric_limits<float>::epsilon() ) {
859 return StatusCode::FAILURE;
864 return StatusCode::SUCCESS;
◆ dumpAndCompare() [2/5]
Definition at line 761 of file ReadoutGeomCnvAlg.cxx.
766 return StatusCode::SUCCESS;
782 return StatusCode::FAILURE;
786 for (
int strip = stripDesign.firstStripNumber(); strip <= stripDesign.numStrips(); ++strip) {
794 return StatusCode::FAILURE;
796 const double dist = refStripDir.dot(refStripPos - testStripPos);
801 return StatusCode::FAILURE;
806 return StatusCode::SUCCESS;
◆ dumpAndCompare() [3/5]
Definition at line 866 of file ReadoutGeomCnvAlg.cxx.
871 return StatusCode::SUCCESS;
882 for (
bool measPhi : {
false,
true}) {
883 if (measPhi && !refEle.
nPhiStrips())
continue;
887 doubPhi,
gasGap, measPhi, strip);
896 return StatusCode::FAILURE;
909 if ((refStripPos - testStripPos).
mag() > 2
e-4){
912 <<
" local coordinates -- ref: "<<
Amg::toString(refTrans.inverse()*refStripPos)
913 <<
" test: "<<
Amg::toString(refTrans.inverse()*testStripPos));
914 return StatusCode::FAILURE;
918 <<
", local: "<<
Amg::toString(refTrans.inverse()*refStripPos));
923 return StatusCode::SUCCESS;
◆ dumpAndCompare() [4/5]
Definition at line 999 of file ReadoutGeomCnvAlg.cxx.
1004 return StatusCode::SUCCESS;
1013 for (
int chType = sTgcIdHelper::sTgcChannelTypes::Pad;
chType <= sTgcIdHelper::sTgcChannelTypes::Wire; ++
chType) {
1014 unsigned int numChannel = 0;
1019 case sTgcIdHelper::sTgcChannelTypes::Pad:
1020 numChannel = refEle.
numPads(layID);
1023 case sTgcIdHelper::sTgcChannelTypes::Strip:
1027 case sTgcIdHelper::sTgcChannelTypes::Wire:
1042 return StatusCode::FAILURE;
1044 if (
chType == sTgcIdHelper::sTgcChannelTypes::Pad) {
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())};
1052 for (
unsigned int cornerIdx = 0; cornerIdx < refPadCorners.size(); ++cornerIdx) {
1058 return StatusCode::FAILURE;
1066 return StatusCode::FAILURE;
1080 return StatusCode::FAILURE;
1088 return StatusCode::SUCCESS;
◆ dumpAndCompare() [5/5]
Definition at line 925 of file ReadoutGeomCnvAlg.cxx.
930 return StatusCode::SUCCESS;
938 <<std::endl<<
GeoTrf::toString(testEle.getMaterialGeom()->getAbsoluteTransform(),
true)
944 for (
bool isStrip : {
false,
true}) {
955 <<
" are not identical. ");
956 return StatusCode::FAILURE;
967 if ((refChannel - testChannel).
mag() < std::numeric_limits<float>::epsilon()){
970 std::stringstream
msg{};
972 <<
" is not at the same position "<<
Amg::toString(refChannel)
974 <<(refChannel - testChannel).
mag();
976 msg<<std::endl<<
"*** Test *** - wirePitch: "<<testEle.
wirePitch()
981 msg<<std::endl<<
"*** Ref *** - wirePitch: "<<design.stripPitch()
983 <<
", wires to reach "<<design.numPitchesToGroup(
ch)
984 <<
", wires in gang "<<design.numWiresInGroup(
ch);
986 const Amg::Vector3D locRefPos{refLayerTrf.inverse() * refChannel};
987 const Amg::Vector3D locTestPos{refLayerTrf.inverse()* testChannel};
992 return StatusCode::FAILURE;
997 return StatusCode::SUCCESS;
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ 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.
78 if (writeHandle.isValid()) {
79 ATH_MSG_DEBUG(
"The current readout geometry is still valid.");
80 return StatusCode::SUCCESS;
88 if (!readHandle.isValid()) {
90 return StatusCode::FAILURE;
92 writeHandle.addDependency(readHandle);
93 auto alignStore = std::make_unique<ActsTrk::DetectorAlignStore>(**readHandle);
95 if (alignStore->geoModelAlignment) {
96 alignStore->geoModelAlignment->clearPosCache();
98 alignStore->trackingAlignment = std::make_unique<TrackingAlignment>(alignStore->detType);
99 geoContext.setStore(std::move(alignStore));
105 if (geoContext.getStore(detType)) {
109 geoContext.setStore(std::make_unique<ActsTrk::DetectorAlignStore>(detType));
112 ConstructionCache cacheObj;
113 cacheObj.detMgr = std::make_unique<MuonGM::MuonDetectorManager>();
114 cacheObj.world = createGeoWorld();
115 cacheObj.detMgr->addTreeTop(cacheObj.world);
123 std::vector<GeoChildNodeWithTrf> treeTops = getChildrenWithRef(
m_detMgr->
getTreeTop(0),
false);
126 for (
const GeoChildNodeWithTrf& treeTop : treeTops) {
127 if (hasStationVolume(treeTop.volume, cacheObj.translatedStations))
continue;
130 cacheObj.world->add(const_pointer_cast(treeTop.volume));
141 ATH_CHECK(writeHandle.record(std::move(cacheObj.detMgr)));
142 return StatusCode::SUCCESS;
◆ extraDeps_update_handler()
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.
86 return Algorithm::extraOutputDeps();
◆ filterPassed()
virtual bool AthReentrantAlgorithm::filterPassed |
( |
const EventContext & |
ctx | ) |
const |
|
inlinevirtualinherited |
◆ initialize()
StatusCode MuonGMR4::ReadoutGeomCnvAlg::initialize |
( |
| ) |
|
|
override |
◆ inputHandles()
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 |
Specify if the algorithm is clonable.
Reentrant algorithms are clonable.
Reimplemented in Simulation::BeamEffectsAlg, InDet::SiTrackerSpacePointFinder, InDet::SCT_Clusterization, InDet::SiSPSeededTrackFinder, SCTRawDataProvider, InDet::GNNSeedingTrackMaker, SCT_PrepDataToxAOD, RoIBResultToxAOD, InDet::SiSPGNNTrackMaker, SCT_CablingCondAlgFromCoraCool, SCT_ReadCalibDataTestAlg, SCT_CablingCondAlgFromText, SCT_ReadCalibChipDataTestAlg, SCT_TestCablingAlg, SCT_ConfigurationConditionsTestAlg, ITkPixelCablingAlg, ITkStripCablingAlg, SCTEventFlagWriter, SCT_ConditionsSummaryTestAlg, SCT_ModuleVetoTestAlg, SCT_MonitorConditionsTestAlg, SCT_LinkMaskingTestAlg, SCT_MajorityConditionsTestAlg, SCT_RODVetoTestAlg, SCT_SensorsTestAlg, SCT_TdaqEnabledTestAlg, SCT_SiliconConditionsTestAlg, SCTSiLorentzAngleTestAlg, SCT_ByteStreamErrorsTestAlg, SCT_ConditionsParameterTestAlg, SCT_FlaggedConditionTestAlg, SCT_StripVetoTestAlg, SCT_RawDataToxAOD, and SCTSiPropertiesTestAlg.
Definition at line 44 of file AthReentrantAlgorithm.cxx.
◆ isReEntrant()
bool MuonGMR4::ReadoutGeomCnvAlg::isReEntrant |
( |
| ) |
const |
|
inlineoverride |
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ outputHandles()
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()
◆ renounceArray()
◆ setFilterPassed()
virtual void AthReentrantAlgorithm::setFilterPassed |
( |
bool |
state, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
inlinevirtualinherited |
◆ 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.
69 return Gaudi::Algorithm::sysExecute (ctx);
◆ 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.
107 if ( cs.retrieve().isFailure() ) {
109 return StatusCode::SUCCESS;
111 if (cs->regHandle(
this,*
h).isFailure()) {
112 sc = StatusCode::FAILURE;
113 ATH_MSG_ERROR(
"unable to register WriteCondHandle " <<
h->fullKey()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ updateVHKA()
◆ m_alignStoreKeys
◆ m_checkGeo
Gaudi::Property<bool> MuonGMR4::ReadoutGeomCnvAlg::m_checkGeo {this, "checkGeo", false, "Checks the positions of the sensors"} |
|
private |
◆ m_detMgr
◆ m_detStore
◆ m_evtStore
◆ 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
◆ m_varHandleArraysDeclared
◆ m_vhka
◆ m_writeKey
The documentation for this class was generated from the following files:
def retrieve(aClass, aKey=None)
StatusCode buildSTGC(const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
int doubletPhiMax() const
Returns the maximum phi panel.
StatusCode buildMdt(const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
sTgcIdHelper::sTgcChannelTypes chType
StatusCode dumpAndCompare(const ActsGeometryContext &gctx, const MuonGMR4::RpcReadoutElement &refEle, const MuonGM::RpcReadoutElement &testEle) const
Parameters defining the design of the readout sTGC pads.
int multilayer() const
Returns the multilayer of the sTgcReadoutElement.
virtual const Amg::Transform3D & transform() const override
Return local to global transform.
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...
std::vector< ActsTrk::DetectorType > getDetectorTypes() const
Returns a list of all detector types.
Amg::Transform3D asBuiltRefFrame() const
Returns the transformation to go into the reference frame of the as-buit & b-line model starting from...
static IdentifierHash createHash(const int gasGap, const int strip)
const Amg::Transform3D & absTransform() const
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.
unsigned int nGasGaps() const
Returns the number of gas gaps.
double tubeLength(const int tubeLayer, const int tube) const
unsigned int numTubesInLay() const
Returns the number of tubes per layer.
StatusCode buildStation(const ActsGeometryContext &gctx, const Identifier &stationId, ConstructionCache &cacheObj) const
builds a station object from readout element.
DetectorType
Simple enum to Identify the Type of the ACTS sub detector.
StatusCode buildTgc(const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
Scalar perp() const
perp method - perpenticular length
PVConstLink getPhysVol() const
void defineTrapezoid(double HalfShortY, double HalfLongY, double HalfHeight)
set the trapezoid dimensions
Store holding the transfomations used by the Acts algorithms.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
double tubeLength(const IdentifierHash &hash) const
double moduleThickness() const
Returns the thickness of the chamber.
TgcReadoutParams::GasGapIntArray GasGapIntArray
static IdentifierHash measurementHash(unsigned int layerNumber, unsigned int tubeNumber)
Transform the layer and tube number to the measurementHash.
unsigned int nGasGaps() const
Returns the number of gasgaps described by this ReadOutElement (usally 2 or 3)
Amg::Transform3D getTransform() const
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...
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)
unsigned int nGasGaps() const
Returns the number of gasgaps described by this ReadOutElement (usally 2 or 3)
The MuonReadoutElement is an abstract class representing the geometry representing the muon detector.
double activeTubeLength(const IdentifierHash &hash) const
IdentifierHash detectorElementHash() const
Returns the IdentifierHash of the detector element.
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
ReadoutChannelType
ReadoutChannelType to distinguish the available readout channels Pad - pad readout channel Strip - et...
Helper struct to retrieve the tube lengths and the tube centers directly from the GeoModel tree.
std::vector< const MuonReadoutElement * > getAllReadoutElements() const
Returns the list of all detector elements.
double getTubeLengthForCaching(const int tubeLayer, const int tube) const
Amg::Transform3D globalToLocalTrans(const ActsGeometryContext &ctx) const
Transformations to translate between local <-> global coordinates.
#define ATH_MSG_VERBOSE(x)
SG::ReadCondHandleKeyArray< ActsTrk::DetectorAlignStore > m_alignStoreKeys
StatusCode buildMM(const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
double getLongSsize() const
Gaudi::Property< bool > m_checkGeo
static IdentifierHash constructHash(unsigned int measCh, unsigned int gasGap, const bool isStrip)
Constructs the Hash out of the Identifier fields (channel, gasGap, isStrip)
StatusCode buildRpc(const ActsGeometryContext &gctx, ConstructionCache &cacheObj) const
TgcReadoutParams::WiregangArray WiregangArray
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.
bool padGlobalCorners(const Identifier &id, std::array< Amg::Vector3D, 4 > &gcorners) const
pad global corners
Set of parameters to describe a RPC chamber.
Amg::Vector3D channelPos(const Identifier &id) const
Returns the position of the active channel (wireGang or strip)
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual void setOwner(IDataHandleHolder *o)=0
StatusCode checkIdCompability(const MuonGMR4::MuonReadoutElement &refEle, const MuonGM::MuonReadoutElement &testEle) const
Amg::Transform3D getRotateZ3D(double angle)
get a rotation transformation around Z-axis
double getLongRsize() const
Identifier measurementId(const IdentifierHash &measHash) const override final
Converts the measurement hash back to the full Identifier.
Helper struct to cache simulatenously the As-built and the BLine corrections of the Mdts for fast acc...
double wireLength(const IdentifierHash &hash) const
double getWireLength(const int tubeLayer, const int tube) const
chamberDistortions getDistortion(const Identifier &detElId) const
Returns a chamber distortion that's cached for the corresponding Mdt chamber element.
AlignmentStorePtr & getStore(const DetectorType type)
Returns the mutable alignable store for the ATLAS detector type (Pixel, Mdt, etc.)
GeoIntrusivePtr< GeoVFullPhysVol > cloneNswWedge(const ActsGeometryContext &gctx, const MuonGMR4::MuonReadoutElement *nswRE, ConstructionCache &cacheObj) const
Clones the fullPhysicalVolume of the
double uncutTubeLength(const IdentifierHash &tubeHash) const
Returns the uncut tube length.
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.
Helper struct to store the pointer to the Mdt distrotion parameters, namely the As-built and the BLin...
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
int multilayer() const
Returns the multi layer of the element [1-2].
double nPitchesToGang(int gasGap, int gang) const
Returns the number of wire pitches that have to be travelled to reach gang i.
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
Amg::Vector3D stripPosition(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the position of the strip center.
@ Mm
Maybe not needed in the migration.
unsigned int numWireGroups(unsigned int gasGap) const
Number of wire groups in the gas gap.
Set of parameters to describe a MDT chamber.
double getLongZsize() const
::StatusCode StatusCode
StatusCode definition for legacy code.
CalibratedSpacePoint::Covariance_t inverse(const CalibratedSpacePoint::Covariance_t &mat)
Inverts the parsed matrix.
int nWires(int gasGap) const
Returns the total number of wires in a given gas gap.
bool stripGlobalPosition(const Identifier &id, Amg::Vector3D &gpos) const
int doubletPhi() const
Returns the doublet Phi field of the MuonReadoutElement identifier.
double getActiveTubeLength(const int tubeLayer, const int tube) const
unsigned int numLayers() const
Returns the number of tube layer.
Eigen::Affine3d Transform3D
bool doesNotDeform(const Amg::Transform3D &trans)
Checks whether the linear part of the transformation rotates or stetches any of the basis vectors.
Amg::Vector3D stripPosition(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the position of the strip center.
static EventIDRange infiniteRunLB()
Produces an EventIDRange that is infinite in RunLumi and invalid in Time.
Identifier measurementId(const IdentifierHash &measHash) const override final
Converts the measurement hash back to the full Identifier.
int doubletZ() const
Returns the doublet Z field of the MuonReadoutElement identifier.
bool isIdentity(const Amg::Transform3D &trans)
Checks whether the transformation is the Identity transformation.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
IdentifierHash identHash() const
Returns the Identifier has of the Element that is Identical to the detElHash from the id_helper class...
Include the GeoPrimitives which need to be put first.
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
const StripLayer & stripLayer(const Identifier &measId) const
int nStrips(const MuonGM::TgcReadoutElement &readoutEle, int layer)
double moduleHeight() const
Returns the height of the chamber (Distance bottom - topWidth)
PVConstLink getTreeTop(unsigned int i) const override final
Returns the i-th top node of the MuonSystem trees.
const MdtAsBuiltPar * asBuilt
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
std::array< MuonChannelDesign, 4 > m_etaDesign
Amg::Vector3D globalChannelPosition(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the global pad/strip/wireGroup position.
std::string to_string(const DetectorType &type)
const GeoAlignableTransform * alignableTransform() const
Returnsthe alignable transform of the readout element.
Amg::Vector3D stripPos(const Identifier &id) const
bool stripGlobalPosition(const Identifier &id, Amg::Vector3D &gpos) const
virtual StatusCode sysInitialize() override
Override sysInitialize.
StatusCode initialize(bool used=true)
Amg::Transform3D getRotateY3D(double angle)
get a rotation transformation around Y-axis
Identifier identify() const override final
Return the athena identifier.
unsigned int nPhiStrips() const
Number of strips measuring the phi coordinate.
Eigen::Matrix< double, 3, 1 > Vector3D
double wirePitch() const
Returns the pitch of the wires.
unsigned int numChannels(const IdentifierHash &measHash) const
Returns the number of readout channels.
unsigned int numLayers() const
Returns the number of gas gap layers.
const StripDesign & design() const
Returns the underlying strip design.
TgcReadoutParams::StripArray StripArray
Amg::Vector3D tubePos(const Identifier &id) const
Returns the global position of the given tube.
IdentifierHash layerHash(const Identifier &measId) const override final
#define ATH_MSG_WARNING(x)
globalCornerArray globalPadCorners(const ActsGeometryContext &ctx, const Identifier &measId) const
Identifier identify() const override final
Returns the ATLAS Identifier of the MuonReadOutElement.
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
int Nstrips(bool measphi) const
returns the number of strips for the phi or eta plane
unsigned int numPads(const Identifier &measId) const
Pads Total number of pads in the given layer.
unsigned int numStrips(const Identifier &measId) const
Strips Number of strips in a chamber.
const Amg::Transform3D & localToGlobalTrans(const ActsGeometryContext &ctx) const
Returns the local to global transformation into the ATLAS coordinate system.
Amg::Vector3D globalTubePos(const ActsGeometryContext &ctx, const Identifier &measId) const
Returns the global position of the tube center.
const MdtReadoutElement * complementaryRE() const
Returns the pointer to the other readout element inside the muon station.
double stripPitch() const
Distance between two adjacent strips.
virtual const Amg::Transform3D & transform(const Identifier &id) const override final
Return local to global transform associated with this identifier.
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
SG::WriteCondHandleKey< MuonGM::MuonDetectorManager > m_writeKey
bool isValid(const IdentifierHash &measHash) const
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Scalar mag() const
mag method
const MuonGMR4::MuonDetectorManager * m_detMgr
Amg::Transform3D getTranslate3D(const double X, const double Y, const double Z)
: Returns a shift transformation along an arbitrary axis
const MuonReadoutElement * getReadoutElement(const Identifier &id) const
Returns a generic Muon readout element.