 |
ATLAS Offline Software
|
#include <ReadoutGeomCnvAlg.h>
|
| | ~ReadoutGeomCnvAlg ()=default |
| |
| StatusCode | execute (const EventContext &ctx) const override |
| |
| StatusCode | initialize () override |
| |
| bool | isReEntrant () const override |
| |
| 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, V, H > &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 ActsTrk::GeometryContext &gctx, const Identifier &stationId, ConstructionCache &cacheObj) const |
| | builds a station object from readout element. More...
|
| |
| StatusCode | cloneReadoutVolume (const ActsTrk::GeometryContext &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 ActsTrk::GeometryContext &gctx, const MuonGMR4::MuonReadoutElement *nswRE, ConstructionCache &cacheObj) const |
| | Clones the fullPhysicalVolume of the
More...
|
| |
| StatusCode | buildMdt (const ActsTrk::GeometryContext &gctx, ConstructionCache &cacheObj) const |
| |
| StatusCode | buildRpc (const ActsTrk::GeometryContext &gctx, ConstructionCache &cacheObj) const |
| |
| StatusCode | buildSTGC (const ActsTrk::GeometryContext &gctx, ConstructionCache &cacheObj) const |
| |
| StatusCode | buildMM (const ActsTrk::GeometryContext &gctx, ConstructionCache &cacheObj) const |
| |
| StatusCode | buildTgc (const ActsTrk::GeometryContext &gctx, ConstructionCache &cacheObj) const |
| |
| StatusCode | dumpAndCompare (const ActsTrk::GeometryContext &gctx, const MuonGMR4::RpcReadoutElement &refEle, const MuonGM::RpcReadoutElement &testEle) const |
| |
| StatusCode | dumpAndCompare (const ActsTrk::GeometryContext &gctx, const MuonGMR4::MdtReadoutElement &refEle, const MuonGM::MdtReadoutElement &testEle) const |
| |
| StatusCode | dumpAndCompare (const ActsTrk::GeometryContext &gctx, const MuonGMR4::MmReadoutElement &refEle, const MuonGM::MMReadoutElement &testEle) const |
| |
| StatusCode | dumpAndCompare (const ActsTrk::GeometryContext &gctx, const MuonGMR4::TgcReadoutElement &refEle, const MuonGM::TgcReadoutElement &testEle) const |
| |
| StatusCode | dumpAndCompare (const ActsTrk::GeometryContext &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, V, H > &hndl, const SG::VarHandleKeyType &) |
| | specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
| |
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &) |
| | specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
| |
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &) |
| | specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
| |
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &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"} |
| |
| Gaudi::Property< bool > | m_dumpGeo {this, "dumpGeo", false, "Dumps the constructed geometry"} |
| |
| Gaudi::Property< std::string > | m_geoDumpName {this,"geoDumpName", "ConvMuonGeoModel.db",} |
| |
| 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 |
◆ 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 686 of file ReadoutGeomCnvAlg.cxx.
690 static_cast<const MdtAlignmentStore*
>(alignItr->internalAlignment.get()) :
nullptr;
692 const std::vector<const MuonGMR4::MdtReadoutElement*> mdtReadOuts{
m_detMgr->getAllMdtReadoutElements()};
693 ATH_MSG_INFO(
"Copy "<<mdtReadOuts.size()<<
" Mdt readout elements to the legacy system");
698 GeoIntrusivePtr<GeoVFullPhysVol> physVol{};
701 if (copyMe->multilayer() == 1) {
704 (copyMe->tubePitch() - 2. * copyMe->tubeRadius());
707 modHalfThick{-0.5*copyMe->moduleThickness()};
709 const double thickness = ( (otherRE->
asBuiltRefFrame()*(modHalTHickO* Amg::Vector3D::UnitX())) -
710 (copyMe->asBuiltRefFrame()*(modHalfThick* Amg::Vector3D::UnitX()))).
z();
711 if (copyMe->isBarrel()) {
712 station->setMdtZsize(height);
713 station->setMdtRsize(thickness);
715 station->setMdtRsize(height);
716 station->setMdtZsize(thickness);
720 auto newElement = std::make_unique<MuonGM::MdtReadoutElement>(physVol,
722 cacheObj.detMgr.get());
723 newElement->setIdentifier(reId);
724 newElement->setMultilayer(copyMe->multilayer());
725 newElement->setNMdtInStation(
m_idHelperSvc->mdtIdHelper().multilayerMax(reId));
727 newElement->setParentMuonStation(station);
732 newElement->setLongRsize(2*
pars.halfY);
733 newElement->setRsize(2*
pars.halfY);
734 newElement->setZsize(2*
pars.halfHeight);
735 newElement->setLongZsize(2*
pars.halfHeight);
737 newElement->m_nlayers = copyMe->numLayers();
738 newElement->m_ntubesperlayer = copyMe->numTubesInLay();
739 newElement->m_deadlength =
pars.deadLength;
740 newElement->m_endpluglength =
pars.endPlugLength;
741 newElement->m_innerRadius =
pars.tubeInnerRad;
742 newElement->m_tubeWallThickness =
pars.tubeWall;
743 newElement->m_tubepitch =
pars.tubePitch;
749 unsigned int step{1};
750 double lastLength{2.*tubeLay.uncutHalfLength(1)};
751 for (
unsigned tube = 0;
tube < copyMe->numTubesInLay(); ++
tube) {
752 const double currLength = 2.*tubeLay.uncutHalfLength(
tube);
755 tube == copyMe->numTubesInLay() -1) {
756 newElement->m_tubelength[
step-1] = lastLength;
757 newElement->m_tubelength[
step] = currLength;
759 newElement->m_ntubesinastep =
tube;
761 lastLength = currLength;
765 newElement->m_nsteps =
step;
768 double xOffSet{
pars.halfY}, yOffSet{
pars.halfHeight};
769 if (newElement->barrel())
std::swap(xOffSet, yOffSet);
770 for (
unsigned lay = 1; lay <= copyMe->numLayers(); ++lay) {
772 const Amg::Vector3D locTube = copyMe->localTubePos(tubeHash);
773 newElement->m_firstwire_x[lay-1] = locTube.z() + xOffSet;
774 newElement->m_firstwire_y[lay-1] = locTube.x() + yOffSet;
779 if (!station->hasMdtAsBuiltParams()){
780 station->setMdtAsBuiltParams(distort.
asBuilt);
782 if (!station->hasBLines()){
783 station->setBline(distort.
bLine);
785 const Amg::Vector3D refPoint = copyMe->bLineReferencePoint();
786 station->setBlineFixedPointInAmdbLRS(refPoint.x(), refPoint.y(), refPoint.z());
788 newElement->geoInitDone();
789 newElement->setBLinePar(distort.
bLine);
790 newElement->fillCache();
793 cacheObj.detMgr->addMdtReadoutElement(std::move(newElement));
795 return StatusCode::SUCCESS;
◆ buildMM()
Loop over the gas gaps & efine the
Definition at line 515 of file ReadoutGeomCnvAlg.cxx.
518 const auto alignStore = alignItr ?
519 static_cast<const MmAlignmentStore*
>(alignItr->internalAlignment.get()) :
nullptr;
522 cacheObj.detMgr->setMMPassivation(alignStore->passivation);
524 const std::vector<const MuonGMR4::MmReadoutElement*> mmReadouts{
m_detMgr->getAllMmReadoutElements()};
525 ATH_MSG_INFO(
"Copy "<<mmReadouts.size()<<
" Mm readout elements to the legacy system");
529 GeoIntrusivePtr<GeoVFullPhysVol> physVol{
cloneNswWedge(gctx, copyMe, cacheObj)};
530 auto newRE = std::make_unique<MuonGM::MMReadoutElement>(physVol,
532 copyMe->stationEta(),
533 copyMe->stationPhi(),
534 copyMe->multilayer(), cacheObj.detMgr.get());
540 newRE->m_Xlg[
gasGap] = stripLayer.toOrigin() *
547 designFrom.longHalfHeight(),
548 designFrom.halfWidth(),
549 designFrom.stereoAngle());
552 designTo.inputPitch = designFrom.stripPitch();
553 designTo.inputWidth = designTo.inputPitch *
std::cos(designTo.stereoAngle());
554 designTo.nMissedBottomEta = designTo.nMissedBottomStereo = designFrom.firstStripNumber() - 1;
555 designTo.totalStrips = designFrom.numStrips();
556 designTo.nch = designFrom.numStrips();
558 designTo.setFirstPos(designFrom.firstStripPos().x() + 0.5*designTo.inputPitch);
562 if (alignStore && alignStore->getBLine(reId)) {
563 newRE->setBLinePar(*alignStore->getBLine(reId));
566 cacheObj.detMgr->addMMReadoutElement(std::move(newRE));
568 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 306 of file ReadoutGeomCnvAlg.cxx.
308 const std::vector<const MuonGMR4::RpcReadoutElement*> readoutEles =
m_detMgr->getAllRpcReadoutElements();
309 ATH_MSG_INFO(
"Copy "<<readoutEles.size()<<
" Rpc readout elements to the legacy system");
314 GeoIntrusivePtr<GeoVFullPhysVol> physVol{};
317 auto newElement = std::make_unique<MuonGM::RpcReadoutElement>(physVol,
319 1, 1,
false, cacheObj.detMgr.get());
320 const bool aSide{copyMe->stationEta() > 0};
321 newElement->setDoubletPhi(copyMe->doubletPhi());
322 newElement->setDoubletR(copyMe->doubletR());
323 newElement->setDoubletZ(copyMe->doubletZ());
324 newElement->setIdentifier(reId);
325 newElement->setParentMuonStation(station);
326 station->addMuonReadoutElementWithAlTransf(newElement.get(),
nullptr, station->nMuonReadoutElements());
329 newElement->setLongZsize(2.*
pars.halfLength);
330 newElement->setLongSsize(2.*
pars.halfWidth);
331 newElement->setLongRsize(2.*
pars.halfThickness);
332 newElement->setZsize(2.*
pars.halfLength);
333 newElement->setSsize(2.*
pars.halfWidth);
334 newElement->setRsize(2.*
pars.halfThickness);
336 newElement->m_nlayers = copyMe->nGasGaps();
337 newElement->m_phistripwidth = copyMe->stripPhiWidth();
338 newElement->m_etastripwidth = copyMe->stripEtaWidth();
339 newElement->m_phistrippitch = copyMe->stripPhiPitch();
340 newElement->m_etastrippitch = (aSide > 0 ? 1. : -1.) *copyMe->stripEtaPitch();
341 newElement->m_phistriplength = copyMe->stripPhiLength();
342 newElement->m_etastriplength = copyMe->stripEtaLength();
344 newElement->m_nphistripsperpanel = copyMe->nPhiStrips();
345 newElement->m_netastripsperpanel = copyMe->nEtaStrips();
346 newElement->m_nphistrippanels = copyMe->nPhiPanels();
347 newElement->m_hasDEDontop =
true;
348 newElement->m_descratzneg =
false;
350 std::vector<Identifier> gapIds{};
352 for (
int doubPhi = copyMe->doubletPhiMax(); doubPhi >= copyMe->doubletPhi(); --doubPhi) {
353 for (
bool measPhi : {
false,
true}) {
354 if (measPhi && copyMe->nPhiStrips()==0)
continue;
356 const Identifier gapId = idHelper.channelID(copyMe->identify(),
361 gapIds.push_back(gapId);
362 const Amg::Vector3D locStripPos = copyMe->globalToLocalTrans(gctx) * copyMe->stripPosition(gctx, gapId);
364 newElement->m_gasGap_xPos[
gasGap -1] = locStripPos.x();
367 const int dbPIdx = copyMe->doubletPhi() == 2 ? 1 : doubPhi;
369 newElement->m_first_phistrip_s[dbPIdx -1] = locStripPos.y();
370 newElement->m_phistrip_z = locStripPos.z();
372 newElement->m_first_etastrip_z = locStripPos.z();
373 newElement->m_etastrip_s[dbPIdx-1] = locStripPos.y();
378 newElement->fillCache();
381 const int surfaceHash = newElement->surfaceHash(gapId);
382 const int layerHash = newElement->layerHash(gapId);
388 newElement->m_surfaceData->m_layerTransforms[surfaceHash] = refTrf;
389 newElement->m_surfaceData->m_layerCenters[
layerHash] = refTrf.translation();
390 newElement->m_surfaceData->m_layerNormals[
layerHash] = refTrf.linear() * Amg::Vector3D::UnitZ();
393 cacheObj.detMgr->addRpcReadoutElement(std::move(newElement));
395 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
There is one alignable node in front of the
Check whether the alignable node is displaced from the station
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
Skip the full physical volumes as they represent the readout elements
To create the muon station, we need to extract the dimensions --> Recieve the edge points from the shapes
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 152 of file ReadoutGeomCnvAlg.cxx.
160 ATH_MSG_DEBUG(
"Station "<<
stName<<
", stEta: "<<stEta<<
", stPhi: "<<stPhi<<
" already exists.");
161 return StatusCode::SUCCESS;
167 const GeoVFullPhysVol* readOutVol = copyMe->getMaterialGeom();
169 PVConstLink parentVolume = readOutVol->getParent();
174 GeoIntrusivePtr<const GeoGraphNode> alignNode{*(parentVolume->getParent()->findChildNode(alignTrf) + 1)};
176 GeoIntrusivePtr<const GeoTransform> stationShiftNode{alignNode != parentVolume ?
177 dynamic_pointer_cast<const GeoTransform>(alignNode) : nullptr};
179 cacheObj.translatedStations.insert(parentVolume);
181 PVLink copiedStationVol{};
182 if (!stationShiftNode) {
183 copiedStationVol = make_intrusive<GeoFullPhysVol>(parentVolume->getLogVol());
185 auto volToCopy = parentVolume->getLogVol();
186 auto newShape = cacheObj.cacheShape(make_intrusive<GeoShapeShift>(volToCopy->getShape(),
187 stationShiftNode->getDefTransform()));
188 auto newLogVol = make_intrusive<GeoLogVol>(volToCopy->getName(), newShape, volToCopy->getMaterial());
189 copiedStationVol = make_intrusive<GeoFullPhysVol>(cacheObj.cacheVolume(newLogVol));
194 const std::vector<GeoChildNodeWithTrf>
children = getChildrenWithRef(parentVolume,
false);
195 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};
196 for (
const GeoChildNodeWithTrf& child :
children) {
197 std::vector<Amg::Vector3D> edges = getPolyShapeEdges(child.volume->getLogVol()->getShape(),
198 readOutVol->getX().inverse() * child.transform);
213 const GeoVPhysVol &childVolRef = *child.volume;
214 if (
typeid(childVolRef) ==
typeid(GeoFullPhysVol)) {
218 PVLink childVol = const_pointer_cast<GeoVPhysVol>(child.volume);
219 copiedStationVol->add(cacheObj.newIdTag());
220 if (stationShiftNode) {
221 copiedStationVol->add(const_pointer_cast(stationShiftNode));
223 copiedStationVol->add(cacheObj.makeTransform(child.transform));
224 copiedStationVol->add(cloneVolume(childVol));
229 const double shortS = (maxY1 - minY1);
230 const double longS = (maxY2 - minY2);
231 const double lengthR = (maxX - minX);
232 const double lengthZ = (maxZ - minZ);
236 ( ( stationShiftNode ? stationShiftNode->getDefTransform() : Amg::Transform3D::Identity())
237 * readOutVol->getDefX()).inverse();
240 auto newStation = std::make_unique<MuonGM::MuonStation>(
stName,
241 shortS, lengthR, lengthZ,
242 longS, lengthR, lengthZ,
243 stEta, stPhi,
false);
244 newStation->setPhysVol(copiedStationVol);
246 cacheObj.world->add(cacheObj.newIdTag());
247 auto copyAlignNode = make_intrusive<GeoAlignableTransform>(alignedTransform);
248 newStation->setTransform(copyAlignNode);
249 newStation->setNominalAmdbLRSToGlobal(copyAlignNode->getTransform());
252 <<
" -- shortS: "<<shortS<<
", longS: "<<longS
253 <<
", lengthR: "<<lengthR<<
", lengthZ: "<<lengthZ
255 <<std::endl<<
"Station shift: "<<
GeoTrf::toString(stationShiftNode ? stationShiftNode->getDefTransform()
256 : Amg::Transform3D::Identity(),
true)
257 <<std::endl<<
"AmdLRSToGlobal: "<<
GeoTrf::toString(newStation->getNominalAmdbLRSToGlobal(),
true)
258 <<std::endl<<
"Readout transform: "<<
GeoTrf::toString(readOutVol->getX(),
true));
259 cacheObj.detMgr->addMuonStation(std::move(newStation));
260 cacheObj.world->add(copyAlignNode);
261 cacheObj.world->add(copiedStationVol);
262 return StatusCode::SUCCESS;
◆ buildSTGC()
Initialize the eta design
Initialize the phi design
To circumvent the yCutout calculations in padCorner function in MuonPadDesign
Definition at line 571 of file ReadoutGeomCnvAlg.cxx.
573 auto alignStore = alignItr ?
static_cast<const sTgcAlignmentStore*
>(alignItr->internalAlignment.get()) :
nullptr;
575 const std::vector<const MuonGMR4::sTgcReadoutElement*> sTgcReadOuts{
m_detMgr->getAllsTgcReadoutElements()};
576 ATH_MSG_INFO(
"Copy "<<sTgcReadOuts.size()<<
" sTgc readout elements to the legacy system");
581 GeoIntrusivePtr<GeoVFullPhysVol> physVol{
cloneNswWedge(gctx, copyMe, cacheObj)};
583 auto newRE = std::make_unique<MuonGM::sTgcReadoutElement>(physVol,
585 copyMe->stationEta(),
586 copyMe->stationPhi(),
587 copyMe->multilayer(),
588 cacheObj.detMgr.get());
590 if (alignStore && alignStore->getBLine(reId)) {
591 newRE->setBLinePar(*alignStore->getBLine(reId));
604 ChannelDesign& etaDesign{newRE->m_etaDesign[
layer-1]};
605 etaDesign.type = ChannelDesign::ChannelType::etaStrip;
607 if (copyEtaDesign.yCutout()) {
608 etaDesign.defineDiamond(copyEtaDesign.shortHalfHeight(),
609 copyEtaDesign.longHalfHeight(),
610 copyEtaDesign.halfWidth(),
611 copyEtaDesign.yCutout());
613 etaDesign.defineTrapezoid(copyEtaDesign.shortHalfHeight(),
614 copyEtaDesign.longHalfHeight(),
615 copyEtaDesign.halfWidth());
618 etaDesign.firstPitch = copyEtaDesign.firstStripPos().x() + 0.5*copyEtaDesign.stripPitch() + copyEtaDesign.halfWidth();
619 etaDesign.inputPitch = copyEtaDesign.stripPitch();
620 etaDesign.inputWidth = copyEtaDesign.stripWidth();
621 etaDesign.nch = copyEtaDesign.numStrips();
623 etaDesign.setFirstPos(copyEtaDesign.firstStripPos().x() + 0.5*copyEtaDesign.stripPitch());
628 ChannelDesign& phiDesign{newRE->m_phiDesign[
layer-1]};
629 phiDesign.type = ChannelDesign::ChannelType::phiStrip;
631 if (copyPhiDesign.yCutout() == 0.) {
632 phiDesign.defineTrapezoid(copyPhiDesign.shortHalfHeight(),
633 copyPhiDesign.longHalfHeight(),
634 copyPhiDesign.halfWidth());
636 phiDesign.defineDiamond(copyPhiDesign.shortHalfHeight(),
637 copyPhiDesign.longHalfHeight(),
638 copyPhiDesign.halfWidth(),
639 copyPhiDesign.yCutout());
641 phiDesign.inputPitch = copyPhiDesign.stripPitch();
642 phiDesign.inputWidth = copyPhiDesign.stripWidth();
644 phiDesign.setFirstPos(copyPhiDesign.firstStripPos().x());
645 phiDesign.firstPitch = copyPhiDesign.numWiresInGroup(1);
646 phiDesign.groupWidth = copyPhiDesign.numWiresInGroup(2);
647 phiDesign.nGroups = copyPhiDesign.numStrips();
648 phiDesign.wireCutout = copyPhiDesign.wireCutout();
649 phiDesign.nch = copyPhiDesign.nAllWires();
650 phiDesign.isConvertedFromPhaseII =
true;
654 padDesign.
Length = copyMe->chamberHeight();
655 padDesign.sWidth = copyMe->sChamberLength();
656 padDesign.lWidth = copyMe->lChamberLength();
657 padDesign.Size = 2.*copyPadDesign.halfWidth();
658 padDesign.ysFrame = copyMe->sFrameWidth();
659 padDesign.ylFrame = copyMe->lFrameWidth();
660 padDesign.thickness = copyMe->thickness();
662 if (copyPadDesign.yCutout()) {
663 padDesign.yCutout = copyPadDesign.halfWidth();
665 padDesign.setR(copyPadDesign.beamlineRadius());
666 padDesign.sPadWidth = 2.*copyPadDesign.shortHalfHeight();
667 padDesign.lPadWidth = 2.*copyPadDesign.longHalfHeight();
668 padDesign.nPadColumns = copyPadDesign.numPadPhi();
669 padDesign.firstPhiPos = copyPadDesign.firstPadPhiDiv();
670 padDesign.inputPhiPitch = copyPadDesign.anglePadPhi();
671 padDesign.PadPhiShift = copyPadDesign.padPhiShift();
672 padDesign.nPadH = copyPadDesign.numPadEta();
673 padDesign.padEtaMax = copyPadDesign.maxPadEta();
674 padDesign.firstRowPos = copyPadDesign.firstPadHeight();
675 padDesign.inputRowPitch = copyPadDesign.padHeight();
676 padDesign.sectorOpeningAngle = copyPadDesign.sectorAngle();
677 padDesign.isConvertedFromPhaseII =
true;
681 cacheObj.detMgr->addsTgcReadoutElement(std::move(newRE));
684 return StatusCode::SUCCESS;
◆ buildTgc()
Define the local gasGap positions
In the sector frame, the gasGap is oriented along the x-axis
Definition at line 399 of file ReadoutGeomCnvAlg.cxx.
401 std::vector<const MuonGMR4::TgcReadoutElement*> tgcReadouts{
m_detMgr->getAllTgcReadoutElements()};
403 return a->stationEta() >
b->stationEta();
405 ATH_MSG_INFO(
"Copy "<<tgcReadouts.size()<<
" Tgc readout elements to the legacy system");
409 std::map<std::string, std::shared_ptr<TgcReadoutParams>> readoutParMap{};
413 GeoIntrusivePtr<GeoVFullPhysVol> physVol{};
417 auto newRE = std::make_unique<MuonGM::TgcReadoutElement>(physVol,
m_idHelperSvc->stationNameString(reId),
418 cacheObj.detMgr.get());
419 newRE->setIdentifier(reId);
420 newRE->setParentMuonStation(station);
422 std::shared_ptr<TgcReadoutParams>& readOutPars = readoutParMap[
std::format(
"{:}_{:}", copyMe->chamberDesign(),
423 copyMe->stationEta()> 0?
'A' :
'C')];
429 std::array<WiregangArray, 3> wires{};
431 std::vector<StripArray> botMountings(copyMe->nGasGaps()),
432 topMountings(copyMe->nGasGaps());
434 double wirePitch{0.};
438 nWireGangs[
gasGap -1] = copyMe->numWireGangs(gangHash);
441 <<
" for gas gap "<<
gasGap);
443 if (nWireGangs[
gasGap -1]) {
447 for (
int gang = 1; gang <= design.numStrips(); ++gang) {
448 fillMe[gang -1] = design.numWiresInGroup(gang);
456 botMountings[
gasGap-1][
strip-1] = - design.stripLeftBottom(strip).x();
457 topMountings[
gasGap-1][
strip-1] = - design.stripLeftTop(strip).x();
459 botMountings[
gasGap-1][nCh] = - design.stripRightBottom(nCh).x();
460 topMountings[
gasGap-1][nCh] = - design.stripRightTop(nCh).x();
461 ATH_MSG_VERBOSE(
"Strip layout\n bottom: "<<botMountings<<
"\n top: "<<topMountings);
464 readOutPars = std::make_unique<TgcReadoutParams>(copyMe->chamberDesign(),
466 idHelper.stationPhiMax(reId),
467 std::move(nWireGangs),
472 std::move(botMountings),
473 std::move(topMountings),
481 const Amg::Vector3D translation{copyMe->globalToLocalTrans(gctx) * copyMe->center(gctx, layHash)};
482 newRE->setPlaneZ(translation.x(),
gasGap);
484 newRE->setRsize(copyMe->moduleHeight());
485 newRE->setSsize(copyMe->moduleWidthS());
486 newRE->setZsize(copyMe->moduleThickness());
488 newRE->setLongRsize(copyMe->moduleHeight());
489 newRE->setLongSsize(copyMe->moduleWidthL());
490 newRE->setLongZsize(copyMe->moduleThickness());
492 newRE->setReadOutParams(readOutPars);
495 cacheObj.detMgr->addTgcReadoutElement(std::move(newRE));
498 return StatusCode::SUCCESS;
◆ cardinality()
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 75 of file AthCommonReentrantAlgorithm.cxx.
◆ checkIdCompability()
Definition at line 798 of file ReadoutGeomCnvAlg.cxx.
805 return StatusCode::FAILURE;
810 return StatusCode::FAILURE;
812 return StatusCode::SUCCESS;
◆ cloneNswWedge()
Clones the fullPhysicalVolume of the
Definition at line 502 of file ReadoutGeomCnvAlg.cxx.
505 GeoIntrusivePtr<const GeoVFullPhysVol> readOutVol{copyMe->getMaterialGeom()};
506 cacheObj.translatedStations.insert(readOutVol->getParent());
508 PVLink clonedVol{cloneVolume(const_pointer_cast<GeoVFullPhysVol>(readOutVol))};
509 GeoIntrusivePtr<GeoFullPhysVol> physVol{dynamic_pointer_cast<GeoFullPhysVol>(clonedVol)};
510 cacheObj.world->add(cacheObj.newIdTag());
511 cacheObj.world->add(cacheObj.makeTransform(copyMe->localToGlobalTrans(gctx)));
512 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 266 of file ReadoutGeomCnvAlg.cxx.
274 station = cacheObj.detMgr->getMuonStation(
stName,
278 PVLink copiedStationVol{station->
getPhysVol()};
280 GeoIntrusivePtr<const GeoVFullPhysVol> readOutVol{copyMe->getMaterialGeom()};
281 copiedStationVol->add(cacheObj.newIdTag());
293 readOutVol->getParent()->getX() * readOutVol->getX()};
296 const Amg::Transform3D stationTrf{copiedStationVol->getX().inverse() * alignedNode};
298 copiedStationVol->add(cacheObj.makeTransform(stationTrf*alignNodeToRE));
300 PVLink clonedVol{cloneVolume(const_pointer_cast<GeoVFullPhysVol>(readOutVol))};
301 physVol = dynamic_pointer_cast<GeoVFullPhysVol>(clonedVol);
302 copiedStationVol->add(physVol);
303 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 863 of file ReadoutGeomCnvAlg.cxx.
868 return StatusCode::SUCCESS;
874 <<std::endl<<
GeoTrf::toString(testEle.getMaterialGeom()->getAbsoluteTransform())
878 for (
unsigned int lay = 1; lay <= refEle.
numLayers(); ++lay){
881 if (!refEle.
isValid(tubeHash)) {
895 <<
GeoTrf::toString(globToLocal*tubePos) <<
" delta: "<<(refPos - tubePos).mag()
896 <<
" Transforms "<<std::endl
899 return StatusCode::FAILURE;
913 return StatusCode::FAILURE;
918 return StatusCode::SUCCESS;
◆ dumpAndCompare() [2/5]
Definition at line 815 of file ReadoutGeomCnvAlg.cxx.
820 return StatusCode::SUCCESS;
836 return StatusCode::FAILURE;
840 for (
int strip = stripDesign.firstStripNumber(); strip <= stripDesign.numStrips(); ++strip) {
848 return StatusCode::FAILURE;
850 const double dist = refStripDir.dot(refStripPos - testStripPos);
855 return StatusCode::FAILURE;
860 return StatusCode::SUCCESS;
◆ dumpAndCompare() [3/5]
Definition at line 920 of file ReadoutGeomCnvAlg.cxx.
925 return StatusCode::SUCCESS;
936 for (
bool measPhi : {
false,
true}) {
937 if (measPhi && !refEle.
nPhiStrips())
continue;
941 doubPhi,
gasGap, measPhi, strip);
952 return StatusCode::FAILURE;
965 if ((refStripPos - testStripPos).
mag() > 2
e-4){
968 <<
" local coordinates -- ref: "<<
Amg::toString(refTrans.inverse()*refStripPos)
969 <<
" test: "<<
Amg::toString(refTrans.inverse()*testStripPos));
970 return StatusCode::FAILURE;
974 <<
", local: "<<
Amg::toString(refTrans.inverse()*refStripPos));
979 return StatusCode::SUCCESS;
◆ dumpAndCompare() [4/5]
wireGroup center is defined to be half a wire pitch off in R4 compared to R3 convention
Definition at line 1058 of file ReadoutGeomCnvAlg.cxx.
1062 return StatusCode::SUCCESS;
1071 for (
int chType : {sTgcIdHelper::sTgcChannelTypes::Pad , sTgcIdHelper::sTgcChannelTypes::Strip, sTgcIdHelper::sTgcChannelTypes::Wire}) {
1075 const unsigned int numChannel = refEle.
numChannels(layID);
1076 constexpr
unsigned firstCh = 1;
1080 if(
chType == sTgcIdHelper::sTgcChannelTypes::Pad) {
1083 chID = idHelper.padID(refEle.
identify(),
1087 chID = idHelper.channelID(refEle.
identify(),
1103 return StatusCode::FAILURE;
1105 if (
chType == sTgcIdHelper::sTgcChannelTypes::Pad) {
1111 const std::array<Amg::Vector3D,4> refPadCorners = refEle.
globalPadCorners(gctx, chID);
1112 std::array<Amg::Vector3D,4> testPadCorners{make_array<Amg::Vector3D, 4>(
Amg::Vector3D::Zero())};
1114 for (
unsigned int cornerIdx = 0; cornerIdx < refPadCorners.size(); ++cornerIdx) {
1115 const double padCornerDiff = (refPadCorners[cornerIdx] - testPadCorners[cornerIdx]).
mag();
1119 <<
" difference: " << padCornerDiff
1120 <<
" local coordinates -- ref: "<<
Amg::toString(refTrans.inverse()*refPadCorners[cornerIdx])
1121 <<
" test: "<<
Amg::toString(testPadTrans.inverse()*testPadCorners[cornerIdx]));
1122 return StatusCode::FAILURE;
1125 const double padChannelDiff = (refChannelPos - testChannelPos).
mag();
1129 <<
" difference: " << padChannelDiff
1130 <<
" local coordinates -- ref: "<<
Amg::toString(refTrans.inverse()*refChannelPos)
1131 <<
" test: "<<
Amg::toString(testPadTrans.inverse()*testChannelPos));
1132 return StatusCode::FAILURE;
1137 else if (
chType == sTgcIdHelper::sTgcChannelTypes::Strip){
1144 <<
" local coordinates -- ref: "<<
Amg::toString(testTrans.inverse()*refChannelPos)
1145 <<
" test: "<<
Amg::toString(testTrans.inverse()*testChannelPos));
1146 return StatusCode::FAILURE;
1154 Amg::Vector3D localRefPos {testTrans.inverse()*refChannelPos};
1155 Amg::Vector3D localTestPos{testTrans.inverse()*testChannelPos};
1161 <<
" local coordinates -- ref: "<<
Amg::toString(testTrans.inverse()*refChannelPos)
1162 <<
" test: "<<
Amg::toString(testTrans.inverse()*testChannelPos)
1163 <<
"delta X: "<<std::abs(localRefPos.x() -localTestPos.x())
1164 <<
", delta Z: "<<std::abs(localRefPos.z() -localTestPos.z()));
1165 return StatusCode::FAILURE;
1171 return StatusCode::SUCCESS;
◆ dumpAndCompare() [5/5]
Definition at line 981 of file ReadoutGeomCnvAlg.cxx.
986 return StatusCode::SUCCESS;
994 <<std::endl<<
GeoTrf::toString(testEle.getMaterialGeom()->getAbsoluteTransform(),
true)
1000 for (
bool isStrip : {
false,
true}) {
1007 (!
isStrip ? Amg::Transform3D::Identity()
1014 <<
" are not identical. ");
1015 return StatusCode::FAILURE;
1029 std::stringstream
msg{};
1031 <<
" is not at the same position "<<
Amg::toString(refChannel)
1033 <<(refChannel - testChannel).
mag();
1035 msg<<std::endl<<
"*** Test *** - wirePitch: "<<testEle.
wirePitch()
1040 msg<<std::endl<<
"*** Ref *** - wirePitch: "<<design.stripPitch()
1042 <<
", wires to reach "<<design.numPitchesToGroup(
ch)
1043 <<
", wires in gang "<<design.numWiresInGroup(
ch);
1045 const Amg::Vector3D locRefPos{refLayerTrf.inverse() * refChannel};
1046 const Amg::Vector3D locTestPos{refLayerTrf.inverse()* testChannel};
1051 return StatusCode::FAILURE;
1056 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 80 of file ReadoutGeomCnvAlg.cxx.
82 if (writeHandle.isValid()) {
83 ATH_MSG_DEBUG(
"The current readout geometry is still valid.");
84 return StatusCode::SUCCESS;
92 if (!readHandle.isValid()) {
94 return StatusCode::FAILURE;
96 writeHandle.addDependency(readHandle);
97 auto alignStore = std::make_unique<ActsTrk::DetectorAlignStore>(**readHandle);
99 if (alignStore->geoModelAlignment) {
100 alignStore->geoModelAlignment->clearPosCache();
102 alignStore->trackingAlignment = std::make_unique<TrackingAlignment>(alignStore->detType);
103 geoContext.setStore(std::move(alignStore));
109 if (geoContext.getStore(detType)) {
113 geoContext.setStore(std::make_unique<ActsTrk::DetectorAlignStore>(detType));
116 ConstructionCache cacheObj;
117 cacheObj.detMgr = std::make_unique<MuonGM::MuonDetectorManager>();
118 cacheObj.world = createGeoWorld();
119 cacheObj.detMgr->addTreeTop(cacheObj.world);
127 std::vector<GeoChildNodeWithTrf> treeTops = getChildrenWithRef(
m_detMgr->
getTreeTop(0),
false);
130 for (
const GeoChildNodeWithTrf& treeTop : treeTops) {
131 if (hasStationVolume(treeTop.volume, cacheObj.translatedStations))
continue;
134 cacheObj.world->add(const_pointer_cast(treeTop.volume));
146 GeoModelIO::IO::saveToDB(cacheObj.world,
m_geoDumpName, 0 ,
true);
149 ATH_CHECK(writeHandle.record(std::move(cacheObj.detMgr)));
150 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()
Return the list of extra output dependencies.
This list is extended to include symlinks implied by inheritance relations.
Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.
◆ filterPassed()
◆ 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()
◆ 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()
◆ sysExecute()
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 85 of file AthCommonReentrantAlgorithm.cxx.
◆ sysInitialize()
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 61 of file AthCommonReentrantAlgorithm.cxx.
110 if (
sc.isFailure()) {
118 if ( cs.retrieve().isFailure() ) {
120 return StatusCode::SUCCESS;
122 if (cs->regHandle(
this,*
h).isFailure()) {
123 sc = StatusCode::FAILURE;
124 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_dumpGeo
| Gaudi::Property<bool> MuonGMR4::ReadoutGeomCnvAlg::m_dumpGeo {this, "dumpGeo", false, "Dumps the constructed geometry"} |
|
private |
◆ m_evtStore
◆ m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Empty if no symlinks were found.
Definition at line 114 of file AthCommonReentrantAlgorithm.h.
◆ m_geoDumpName
| Gaudi::Property<std::string> MuonGMR4::ReadoutGeomCnvAlg::m_geoDumpName {this,"geoDumpName", "ConvMuonGeoModel.db",} |
|
private |
◆ 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 buildTgc(const ActsTrk::GeometryContext &gctx, ConstructionCache &cacheObj) const
int doubletPhiMax() const
Returns the maximum phi panel.
Gaudi::Property< std::string > m_geoDumpName
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.
std::vector< ActsTrk::DetectorType > getDetectorTypes() const
Returns a list of all detector types.
StatusCode buildRpc(const ActsTrk::GeometryContext &gctx, ConstructionCache &cacheObj) const
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 ActsTrk::GeometryContext &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.
unsigned nGasGaps() const
Returns the number of gasgaps described by this ReadOutElement (usally 2 or 3)
double tubeLength(const int tubeLayer, const int tube) const
AlignmentStorePtr & getStore(const DetectorType type)
Returns the mutable alignable store for the ATLAS detector type (Pixel, Mdt, etc.)
unsigned int numTubesInLay() const
Returns the number of tubes per layer.
Amg::Vector3D globalChannelPosition(const ActsTrk::GeometryContext &ctx, const Identifier &measId) const
Returns the global pad/strip/wireGroup position.
DetectorType
Simple enum to Identify the Type of the ACTS sub detector.
std::pair< int, int > padNumber(const int SeqChannel) const
Returns the pad (eta,phi) for a given pad number in sequence (1,2,3,...18,19,20......
Scalar perp() const
perp method - perpenticular length
PVConstLink getPhysVol() const
void defineTrapezoid(double HalfShortY, double HalfLongY, double HalfHeight)
set the trapezoid dimensions
unsigned int numChannels(const Identifier &measId) const
Returns the number of strips / wires / pads in a given gasGap.
Store holding the transfomations used by the Acts algorithms.
const WireGroupDesign & wireGangLayout(const IdentifierHash &layHash) const
Returns access to the wire group design of the given gasGap [1-3] If the gap does not have a wires an...
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.
const std::string & stName(StIndex index)
convert StIndex into a string
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)
const Amg::Transform3D & toOrigin() const
Returns the transformation to go from the strip layer center to the origin of the Strip chamber.
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.
Amg::Vector3D stripPosition(const ActsTrk::GeometryContext &ctx, const Identifier &measId) const
Returns the position of the strip center.
std::vector< const MuonReadoutElement * > getAllReadoutElements() const
Returns the list of all detector elements.
Amg::Vector3D channelPosition(const ActsTrk::GeometryContext &ctx, const Identifier &measId) const
Returns the center of the measurement channel eta measurement: wire gang center phi measurement: stri...
double getTubeLengthForCaching(const int tubeLayer, const int tube) const
#define ATH_MSG_VERBOSE(x)
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
SG::ReadCondHandleKeyArray< ActsTrk::DetectorAlignStore > m_alignStoreKeys
double getLongSsize() const
Gaudi::Property< bool > m_checkGeo
unsigned nGasGaps() const
Returns the number of gasgaps described by this ReadOutElement (usally 2 or 3)
TgcReadoutParams::WiregangArray WiregangArray
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
globalCornerArray globalPadCorners(const ActsTrk::GeometryContext &ctx, const Identifier &measId) const
double getLongRsize() const
GeoIntrusivePtr< GeoVFullPhysVol > cloneNswWedge(const ActsTrk::GeometryContext &gctx, const MuonGMR4::MuonReadoutElement *nswRE, ConstructionCache &cacheObj) const
Clones the fullPhysicalVolume of the
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.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Amg::Vector3D globalTubePos(const ActsTrk::GeometryContext &ctx, const Identifier &measId) const
Returns the global position of the tube center.
virtual const DataObjIDColl & extraOutputDeps() const override
Return the list of extra output dependencies.
Gaudi::Property< bool > m_dumpGeo
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.
@ Mm
Maybe not needed in the migration.
Set of parameters to describe a MDT chamber.
double getLongZsize() const
::StatusCode StatusCode
StatusCode definition for legacy code.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
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
virtual StatusCode sysExecute(const EventContext &ctx) override
Execute an algorithm.
StatusCode buildMdt(const ActsTrk::GeometryContext &gctx, ConstructionCache &cacheObj) 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.
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.
const Amg::Transform3D & localToGlobalTrans(const ActsTrk::GeometryContext &ctx) const
Returns the local to global transformation into the ATLAS coordinate system.
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...
const StripDesign & design(bool phiView=false) const
Returns the underlying strip design.
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-the tree top GeoModel volume.
const MdtAsBuiltPar * asBuilt
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
std::array< MuonChannelDesign, 4 > m_etaDesign
Definition of ATLAS Math & Geometry primitives (Amg)
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
StatusCode dumpAndCompare(const ActsTrk::GeometryContext &gctx, const MuonGMR4::RpcReadoutElement &refEle, const MuonGM::RpcReadoutElement &testEle) const
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.
Eigen::Matrix< double, 3, 1 > Vector3D
double wirePitch() const
Returns the pitch of the wires.
unsigned int numLayers() const
Returns the number of gas gap layers.
const PadDesign & padDesign(const Identifier &measId) const
Retrieves the readoutElement Layer given the Identifier/Hash.
unsigned int phiIndex(float phi, float binsize)
calculate phi index for a given phi
TgcReadoutParams::StripArray StripArray
The StripLayer interfaces the 2D description of the strip plane layout with the 3D description of the...
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)
StatusCode buildStation(const ActsTrk::GeometryContext &gctx, const Identifier &stationId, ConstructionCache &cacheObj) const
builds a station object from readout element.
static IdentifierHash constructHash(unsigned measCh, unsigned gasGap, const bool isStrip)
Constructs the Hash out of the Identifier fields (channel, gasGap, isStrip)
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
=============================================================================
virtual StatusCode sysInitialize() override
Override sysInitialize.
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...
unsigned numChannels(const IdentifierHash &measHash) const
Returns the number of readout channels.
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
SG::WriteCondHandleKey< MuonGM::MuonDetectorManager > m_writeKey
Amg::Transform3D globalToLocalTrans(const ActsTrk::GeometryContext &ctx) const
Transformations to translate between local <-> global coordinates.
Amg::Transform3D getTranslateX3D(const double X)
: Returns a shift transformation along the x-axis
bool isValid(const IdentifierHash &measHash) const
Scalar mag() const
mag method
unsigned nPhiStrips() const
Number of strips measuring the phi coordinate.
const MuonGMR4::MuonDetectorManager * m_detMgr
IdentifierHash layerHash(const UncalibratedMeasurement *meas)
Returns the layer hash from an uncalibrated meaurement.
StatusCode buildSTGC(const ActsTrk::GeometryContext &gctx, ConstructionCache &cacheObj) const
StatusCode buildMM(const ActsTrk::GeometryContext &gctx, ConstructionCache &cacheObj) const
const MuonReadoutElement * getReadoutElement(const Identifier &id) const
Returns a generic Muon readout element.
Amg::Vector3D stripPosition(const ActsTrk::GeometryContext &ctx, const Identifier &measId) const
Returns the position of the strip center.