ATLAS Offline Software
InDetServMatTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "InDetServMatTool.h"
7 #include "InDetServMatFactory.h"
8 
11 #include "StoreGate/StoreGateSvc.h"
16 #include "GaudiKernel/ServiceHandle.h"
17 #include "GaudiKernel/ToolHandle.h"
18 
20 #include "SGTools/DataProxy.h"
21 
25 InDetServMatTool::InDetServMatTool( const std::string& type, const std::string& name, const IInterface* parent )
27 {
28 }
29 
34 {
35 
36  //
37  // Locate the top level experiment node
38  //
39  GeoModelExperiment * theExpt{nullptr};
40  ATH_CHECK(detStore()->retrieve(theExpt,"ATLAS"));
41 
42  // Get the detector configuration.
43  ATH_CHECK(m_geoDbTagSvc.retrieve());
44 
45  ServiceHandle<IRDBAccessSvc> accessSvc(m_geoDbTagSvc->getParamSvcName(),name());
46  ATH_CHECK(accessSvc.retrieve());
47 
48  GeoPhysVol *world=theExpt->getPhysVol();
49 
50  GeoModelIO::ReadGeoModel* sqliteReader = m_geoDbTagSvc->getSqliteReader();
51 
52  if (sqliteReader) {
53  InDetServMatFactory_Lite factoryLite;;
54  factoryLite.create(world);
55  m_manager = factoryLite.getDetectorManager();
56  }
57  else {
58  DecodeVersionKey versionKey(m_geoDbTagSvc.get(), "InnerDetector");
59 
60  std::string versionTag = accessSvc->getChildTag("InDetServices", versionKey.tag(), versionKey.node());
61  ATH_MSG_DEBUG("versionTag=" << versionTag << " %%%");
62 
63  // If versionTag is NULL then don't build.
64  if (versionTag.empty()) {
65  ATH_MSG_INFO("No InDetService Version. InDetService will not be built.");
66  ATH_MSG_DEBUG("InnerDetector Version Tag: " << versionKey.tag() << " at Node: " << versionKey.node());
67  return StatusCode::SUCCESS;
68  }
69 
70  ATH_MSG_DEBUG("Keys for InDetServMat Switches are " << versionKey.tag() << " " << versionKey.node());
71 
72  std::string versionName{"CSC"};
73  if (!m_overrideVersionName.empty()) {
74  versionName = m_overrideVersionName;
75  ATH_MSG_INFO("Overriding version name: " << versionName);
76  }
77  ATH_MSG_INFO("Building Inner Detector Service Material. Version: " << versionName);
78 
79  // Retrieve the Geometry DB Interface
80  ATH_CHECK(m_geometryDBSvc.retrieve());
81 
82  // Pass athena services to factory, etc
85  m_athenaComps.setRDBAccessSvc(accessSvc.get());
87 
88  // Retrieve builder tool (SLHC only)
89  if (versionName == "SLHC") {
90  if (!m_builderTool.empty()) {
91  if(m_builderTool.retrieve().isFailure()) {
92  ATH_MSG_WARNING("Could not retrieve " << m_builderTool << ", some services will not be built.");
93  }
94  else {
95  ATH_MSG_INFO("Service builder tool retrieved: " << m_builderTool);
97  }
98  }
99  else {
100  // This will become an error once the tool is ready.
101  ATH_MSG_INFO("Service builder tool not specified.");
102  }
103  }
104 
105  if (versionName == "CSC") {
106  ATH_MSG_DEBUG("InDetServMat Factory CSC");
108  theIDSM.create(world);
109  m_manager=theIDSM.getDetectorManager();
110  } else {
111  // Unrecognized name.
112  ATH_MSG_FATAL("Unrecognized VersionName: " << versionName);
113  return StatusCode::FAILURE;
114  }
115  }
116 
117  if (m_manager) {
118  theExpt->addManager(m_manager);
119  ATH_CHECK(detStore()->record (m_manager, m_manager->getName()));
120  }
121  else {
122  ATH_MSG_FATAL("Could not create InDetServMatManager!");
123  return StatusCode::FAILURE;
124  }
125 
126  return StatusCode::SUCCESS;
127 }
128 
130 {
132  if(proxy) {
133  proxy->reset();
134  m_manager = nullptr;
135  }
136  return StatusCode::SUCCESS;
137 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
StateLessPT_NewConfig.proxy
proxy
Definition: StateLessPT_NewConfig.py:392
InDetServMatTool::InDetServMatTool
InDetServMatTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor(s)
Definition: InDetServMatTool.cxx:25
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
InDetServMatTool::m_athenaComps
InDetServMatAthenaComps m_athenaComps
Definition: InDetServMatTool.h:41
InDetServMatTool::clear
virtual StatusCode clear() override
Definition: InDetServMatTool.cxx:129
InDetServMatFactory_Lite
Definition: InDetServMatFactory_Lite.h:13
GeoModelExperiment
Definition: GeoModelExperiment.h:32
InDetServMatTool::create
virtual StatusCode create() override
Create the Detector Node corresponding to this tool.
Definition: InDetServMatTool.cxx:33
DecodeVersionKey::node
const std::string & node() const
Return the version node.
Definition: DecodeVersionKey.cxx:97
InDetDD::AthenaComps::setGeoDbTagSvc
void setGeoDbTagSvc(IGeoDbTagSvc *)
Definition: InDetDDAthenaComps.cxx:22
InDetDD::AthenaComps::setDetStore
void setDetStore(StoreGateSvc *)
Definition: InDetDDAthenaComps.cxx:17
GeoModelExperiment.h
InDetServMatFactory::getDetectorManager
virtual const InDetDD::InDetServMatManager * getDetectorManager() const override
Definition: InDetServMatFactory.cxx:278
IRDBAccessSvc.h
Definition of the abstract IRDBAccessSvc interface.
InDetServMatFactory
Definition: InDetServMatFactory.h:15
ClassID_traits.h
a traits class that associates a CLID to a type T It also detects whether T inherits from Gaudi DataO...
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
DecodeVersionKey
This is a helper class to query the version tags from GeoModelSvc and determine the appropriate tag a...
Definition: DecodeVersionKey.h:18
InDetServMatAthenaComps::setBuilderTool
void setBuilderTool(IInDetServMatBuilderTool *builderTool)
Definition: InDetServMatAthenaComps.cxx:15
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:40
test_pyathena.parent
parent
Definition: test_pyathena.py:15
DecodeVersionKey::tag
const std::string & tag() const
Return version tag.
Definition: DecodeVersionKey.cxx:91
GeoModelTool
Definition: GeoModelTool.h:17
InDetDD::AthenaComps::setRDBAccessSvc
void setRDBAccessSvc(IRDBAccessSvc *)
Definition: InDetDDAthenaComps.cxx:27
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDetServMatTool::m_geometryDBSvc
ServiceHandle< IGeometryDBSvc > m_geometryDBSvc
Definition: InDetServMatTool.h:36
InDetServMatTool::m_geoDbTagSvc
ServiceHandle< IGeoDbTagSvc > m_geoDbTagSvc
Definition: InDetServMatTool.h:35
InDetServMatTool::m_builderTool
ToolHandle< IInDetServMatBuilderTool > m_builderTool
Definition: InDetServMatTool.h:37
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
errorcheck.h
Helpers for checking error return status codes and reporting errors.
DecodeVersionKey.h
InDetServMatTool::m_manager
const InDetDD::InDetServMatManager * m_manager
Definition: InDetServMatTool.h:40
InDetServMatTool.h
IRDBRecord.h
Definition of the abstract IRDBRecord interface.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
InDetDD::AthenaComps::setGeometryDBSvc
void setGeometryDBSvc(IGeometryDBSvc *)
Definition: InDetDDAthenaComps.cxx:32
InDetServMatFactory_Lite::getDetectorManager
virtual const InDetDD::InDetServMatManager * getDetectorManager() const override
Definition: InDetServMatFactory_Lite.cxx:22
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
IRDBRecordset.h
Definition of the abstract IRDBRecordset interface.
SG::DataProxy
Definition: DataProxy.h:45
InDetServMatFactory.h
StoreGateSvc.h
InDetServMatFactory_Lite.h
InDetServMatTool::m_overrideVersionName
StringProperty m_overrideVersionName
Definition: InDetServMatTool.h:38
InDetServMatFactory::create
virtual void create(GeoPhysVol *world) override
Definition: InDetServMatFactory.cxx:50
InDetServMatFactory_Lite::create
virtual void create(GeoPhysVol *world) override
Definition: InDetServMatFactory_Lite.cxx:11
ServiceHandle< IRDBAccessSvc >
DataProxy.h