ATLAS Offline Software
Loading...
Searching...
No Matches
InDetServMatTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "InDetServMatTool.h"
8
16#include "GaudiKernel/ServiceHandle.h"
17#include "GaudiKernel/ToolHandle.h"
18
20#include "SGTools/DataProxy.h"
21
25InDetServMatTool::InDetServMatTool( const std::string& type, const std::string& name, const IInterface* parent )
26 : GeoModelTool( type, name, 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 // Pass athena services to factory, etc
80 m_athenaComps.setDetStore(detStore().get());
81 m_athenaComps.setGeoDbTagSvc(m_geoDbTagSvc.get());
82 m_athenaComps.setRDBAccessSvc(accessSvc.get());
83
84 // Retrieve builder tool (SLHC only)
85 if (versionName == "SLHC") {
86 if (!m_builderTool.empty()) {
87 if(m_builderTool.retrieve().isFailure()) {
88 ATH_MSG_WARNING("Could not retrieve " << m_builderTool << ", some services will not be built.");
89 }
90 else {
91 ATH_MSG_INFO("Service builder tool retrieved: " << m_builderTool);
92 m_athenaComps.setBuilderTool(&*m_builderTool);
93 }
94 }
95 else {
96 // This will become an error once the tool is ready.
97 ATH_MSG_INFO("Service builder tool not specified.");
98 }
99 }
100
101 if (versionName == "CSC") {
102 ATH_MSG_DEBUG("InDetServMat Factory CSC");
104 theIDSM.create(world);
106 } else {
107 // Unrecognized name.
108 ATH_MSG_FATAL("Unrecognized VersionName: " << versionName);
109 return StatusCode::FAILURE;
110 }
111 }
112
113 if (m_manager) {
114 theExpt->addManager(m_manager);
115 ATH_CHECK(detStore()->record (m_manager, m_manager->getName()));
116 }
117 else {
118 ATH_MSG_FATAL("Could not create InDetServMatManager!");
119 return StatusCode::FAILURE;
120 }
121
122 return StatusCode::SUCCESS;
123}
124
126{
127 SG::DataProxy* proxy = detStore()->proxy(ClassID_traits<InDetDD::InDetServMatManager>::ID(),m_manager->getName());
128 if(proxy) {
129 proxy->reset();
130 m_manager = nullptr;
131 }
132 return StatusCode::SUCCESS;
133}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
a traits class that associates a CLID to a type T It also detects whether T inherits from Gaudi DataO...
Helpers for checking error return status codes and reporting errors.
Definition of the abstract IRDBAccessSvc interface.
Definition of the abstract IRDBRecord interface.
Definition of the abstract IRDBRecordset interface.
This is a helper class to query the version tags from GeoModelSvc and determine the appropriate tag a...
const std::string & tag() const
Return version tag.
const std::string & node() const
Return the version node.
GeoPhysVol * getPhysVol()
Destructor.
void addManager(const GeoVDetectorManager *)
virtual const InDetDD::InDetServMatManager * getDetectorManager() const override
virtual void create(GeoPhysVol *world) override
virtual void create(GeoPhysVol *world) override
virtual const InDetDD::InDetServMatManager * getDetectorManager() const override
InDetServMatAthenaComps m_athenaComps
const InDetDD::InDetServMatManager * m_manager
ServiceHandle< IGeoDbTagSvc > m_geoDbTagSvc
virtual StatusCode create() override
Create the Detector Node corresponding to this tool.
StringProperty m_overrideVersionName
ToolHandle< IInDetServMatBuilderTool > m_builderTool
virtual StatusCode clear() override
InDetServMatTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor(s)
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130