15#include "GeoModelKernel/GeoVolumeCursor.h"
16#include "GeoModelKernel/GeoPhysVol.h"
41 return StatusCode::SUCCESS;
53 <<
". In theory this should not be called, but may happen"
54 <<
" if multiple concurrent events are being processed out of order.");
55 return StatusCode::SUCCESS;
63 PVConstLink ATLASWorld = theExpt->
getPhysVol();
64 GeoIntrusivePtr<GeoPhysVol> world{make_intrusive<GeoPhysVol>(ATLASWorld->getLogVol())};
69 std::unique_ptr<MuonGM::MuonDetectorManager> MuonMgrData(mgr);
75 if (MuonMgrData->mmIdHelper() && MuonMgrData->stgcIdHelper()) {
78 ATH_MSG_FATAL(
"unable to add NSW ReadoutGeometry in the MuonDetectorManager in conditions store");
79 return StatusCode::FAILURE;
84 ATH_MSG_ERROR(
"Cannot find conditions data container for MM passivation!");
85 return StatusCode::FAILURE;
88 MuonMgrData->setMMPassivation(readMmPass.
cptr());
98 if (!readILinesHandle.
isValid()){
100 return StatusCode::FAILURE;
103 ATH_CHECK(MuonMgrData->updateCSCInternalAlignmentMap(**readILinesHandle));
111 if (!readMdtAsBuiltHandle.
isValid()) {
113 return StatusCode::FAILURE;
116 ATH_CHECK(MuonMgrData->updateMdtAsBuiltParams(**readMdtAsBuiltHandle));
124 if(!readNswAsBuilt.
isValid()) {
125 ATH_MSG_ERROR(
"Cannot find conditions data container for NSW as-built!");
126 return StatusCode::FAILURE;
129 MuonMgrData->setNswAsBuilt(*readNswAsBuilt);
134 if(!readsTGCAsBuilt.
isValid()){
135 ATH_MSG_ERROR(
"Cannot find conditions data container for sTGC as-built");
136 return StatusCode::FAILURE;
139 MuonMgrData->setsTGCAsBuilt(*readsTGCAsBuilt);
145 ATH_MSG_ERROR(
"Cannot find conditions data container for MM as-built 2");
146 return StatusCode::FAILURE;
149 MuonMgrData->setMmAsBuilt2(*readMmAsBuilt2);
158 if (!readALinesHandle.
isValid()) {
160 return StatusCode::FAILURE;
163 ATH_CHECK(MuonMgrData->updateAlignment(**readALinesHandle));
164 }
else ATH_MSG_INFO(
"Do not apply the A Lines of the alignment");
171 if (!readBLinesHandle.
isValid()) {
173 return StatusCode::FAILURE;
176 ATH_CHECK (MuonMgrData->updateDeformations(**readBLinesHandle));
177 }
else ATH_MSG_INFO(
"Do not apply the B Lines of the alignment");
181 MuonMgrData->addTreeTop(world);
183 if (world->refCount() != 2) {
184 ATH_MSG_FATAL(
"The leaking reference counter to the GeoModel world detected "<<world->refCount());
185 return StatusCode::FAILURE;
188 ATH_MSG_INFO(
"recorded new " << writeHandle.
key() <<
" with range " << writeHandle.
getRange() <<
" into Conditions Store");
190 return StatusCode::SUCCESS;
203 GeoVolumeCursor detStoreCursor{MuonDetMgrDS->
getTreeTop(0)};
204 while (!detStoreCursor.atEnd()) {
205 PVConstLink worldNode(detStoreCursor.getVolume());
207 const GeoLogVol* logVol = worldNode->getLogVol();
208 const std::string_view vname = logVol->getName();
209 detStoreCursor.next();
210 if (vname.find(
"Station") != std::string::npos)
continue;
212 const GeoVPhysVol& pvConstLink = *worldNode;
213 ATH_MSG_DEBUG(
"Volume in the static world "<<vname<<
" "<<
typeid(pvConstLink).name()
214 <<
"children: "<<worldNode->getNChildNodes()<<
" cursor: "<<
Amg::toString(transform));
215 condMgrWorld->add(make_intrusive<GeoTransform>(transform));
216 condMgrWorld->add(const_pointer_cast(worldNode));
218 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
Hold mappings of ranges to condition objects.
macros to associate a CLID to a type
a traits class that associates a CLID to a type T It also detects whether T inherits from Gaudi DataO...
const ServiceHandle< StoreGateSvc > & detStore() const
Base class for conditions algorithms.
static bool BuildReadoutGeometry(MuonGM::MuonDetectorManager *mgr)
GeoPhysVol * getPhysVol()
Destructor.
static EventIDRange infiniteRunLB()
Produces an EventIDRange that is infinite in RunLumi and invalid in Time.
SG::ReadCondHandleKey< ALineContainer > m_readILineKey
Gaudi::Property< bool > m_applyBLines
Apply the chamber deformation model (Mdts + Nsw)
Gaudi::Property< bool > m_applyNswAsBuilt
StatusCode copyInertMaterial(MuonGM::MuonDetectorManager &detMgr) const
SG::ReadCondHandleKey< BLineContainer > m_readBLineKey
virtual StatusCode initialize() override final
SG::ReadCondHandleKey< sTGCAsBuiltData > m_readsTGCAsBuiltKey
ToolHandle< MuonDetectorTool > m_iGeoModelTool
SG::ReadCondHandleKey< NswAsBuiltDbData > m_readNswAsBuiltKey
Gaudi::Property< bool > m_applyALines
Apply translations and rotations to align the Muon stations.
SG::WriteCondHandleKey< MuonGM::MuonDetectorManager > m_writeDetectorManagerKey
SG::ReadCondHandleKey< ALineContainer > m_readALineKey
MuonDetectorCondAlg(const std::string &name, ISvcLocator *pSvcLocator)
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
SG::ReadCondHandleKey< NswPassivationDbData > m_condMmPassivKey
Gaudi::Property< bool > m_applysTGCAsBuilt
SG::ReadCondHandleKey< MdtAsBuiltContainer > m_readMdtAsBuiltKey
virtual StatusCode execute(const EventContext &ctx) const override final
SG::ReadCondHandleKey< sTGCAsBuiltData > m_readMmAsBuilt2Key
Gaudi::Property< bool > m_applyMdtAsBuilt
Gaudi::Property< bool > m_applyMmPassivation
Gaudi::Property< bool > m_applyMmAsBuilt2
Gaudi::Property< bool > m_applyILines
Apply internal transformations on the CSCs.
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
virtual PVConstLink getTreeTop(unsigned int i) const
const DataObjID & fullKey() const
const_pointer_type cptr()
const std::string & key() const
void addDependency(const EventIDRange &range)
const EventIDRange & getRange() const
StatusCode record(const EventIDRange &range, T *t)
record handle, with explicit range DEPRECATED
const DataObjID & fullKey() const
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Eigen::Affine3d Transform3D