ATLAS Offline Software
Loading...
Searching...
No Matches
MuonAGDDToolHelper.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
6
11
12#include "GaudiKernel/ISvcLocator.h"
13#include "GaudiKernel/IToolSvc.h"
14#include "GaudiKernel/IConversionSvc.h"
15#include "GaudiKernel/ServiceHandle.h"
23
29
38
40
41#include <fstream>
42
43using namespace MuonGM;
44
46{
47 SmartIF<IGeoModelSvc> geomodel{Gaudi::svcLocator()->service("GeoModelSvc")};
48 if(!geomodel.isValid()) throw std::runtime_error("MuonAGDDToolHelper failed to access GeoModelSvc");
49 SmartIF<IRDBAccessSvc> rdbaccess{Gaudi::svcLocator()->service("RDBAccessSvc")};
50 if(!rdbaccess.isValid()) throw std::runtime_error("MuonAGDDToolHelper failed to access RDBAccessSvc");
51
52 m_geoModelSvc = geomodel.get();
53 m_rdbAccessSvc = rdbaccess.get();
54}
55
56std::vector<std::string> MuonAGDDToolHelper::ReadAGDDFlags()
57{
58 std::vector<std::string> structuresFromFlags;
59 std::string agdd2geoVersion = m_rdbAccessSvc->getChildTag("AGDD2GeoSwitches",m_geoModelSvc->muonVersion(),"MuonSpectrometer");
60
61 if(!agdd2geoVersion.empty())
62 {
63 std::string TheKEYNAME;
64 int TheKEYVALUE;
65 IRDBRecordset_ptr pIRDBRecordset = m_rdbAccessSvc->getRecordsetPtr("AGDD2GeoSwitches",m_geoModelSvc->muonVersion(),"MuonSpectrometer");
66 for(unsigned int i=0; i<pIRDBRecordset->size(); i++)
67 {
68 const IRDBRecord* record = (*pIRDBRecordset)[i];
69 TheKEYNAME = record->getString("KEYNAME");
70 TheKEYVALUE = record->getInt("KEYVALUE");
71 if ( TheKEYVALUE == 1 )
72 {
73 structuresFromFlags.push_back(TheKEYNAME);
74 }
75 }
76 }
77 else
78 {
79 std::cout<<"MuonAGDDToolHelper\tagdd2geoVersion is empty " <<std::endl;
80 }
81 return structuresFromFlags;
82}
83
84
85std::string MuonAGDDToolHelper::GetAGDD(const bool dumpIt, const std::string& tableName, const std::string& outFileName)
86{
87 std::string AtlasVersion = m_geoModelSvc->atlasVersion();
88 std::string MuonVersion = m_geoModelSvc->muonVersionOverride();
89
90 std::string detectorKey = MuonVersion.empty() ? AtlasVersion : MuonVersion;
91 std::string detectorNode = MuonVersion.empty() ? "ATLAS" : "MuonSpectrometer";
92 if ( MuonVersion == "CUSTOM"){
93 detectorKey = AtlasVersion ;
94 detectorNode = "ATLAS" ;
95 }
96
97 IRDBRecordset_ptr recordsetAGDD = m_rdbAccessSvc->getRecordsetPtr(tableName,detectorKey,detectorNode);
98 if(!recordsetAGDD) return "";
99
100 const IRDBRecord *recordAGDD = (*recordsetAGDD)[0];
101 if(!recordAGDD) return "";
102 std::string AgddString = recordAGDD->getString("DATA");
103
104 size_t pos=AgddString.find("AGDD.dtd");
105 if (pos!=std::string::npos) AgddString.replace(pos-21,32,"-- Reference to AGDD.dtd automatically removed -->");
106 std::ofstream GeneratedFile;
107 if (dumpIt)
108 {
109 std::ofstream GeneratedFile;
110 GeneratedFile.open(outFileName);
111 GeneratedFile<<AgddString;
112 GeneratedFile.close();
113 }
114 return AgddString;
115}
116
118{
119 SmartIF<StoreGateSvc> pDetStore{Gaudi::svcLocator()->service("DetectorStore")};
120 if (!pDetStore.isValid()) return false;
121 MuonGM::MuonDetectorManager* muonMgr=nullptr;
122 if (pDetStore->retrieve(muonMgr).isFailure()) return false;
124}
125
127{
128 SmartIF<IAGDDtoGeoSvc> agddsvc{Gaudi::svcLocator()->service(m_svcName)};
129 if(!agddsvc.isValid()) {
130 throw std::runtime_error("MuonAGDDToolHelper::SetNSWComponents() - Could not retrieve "
131 + m_svcName + " from ServiceLocator");
132 }
133
134 IAGDDtoGeoSvc::LockedController c = agddsvc->getController();
135
136 agddsvc->addHandler(new micromegasHandler("micromegas", *c));
137 agddsvc->addHandler(new mm_TechHandler("mm_Tech", *c));
138 agddsvc->addHandler(new sTGCHandler("sTGC", *c));
139 agddsvc->addHandler(new sTGC_readoutHandler("sTGC_readout", *c));
140 agddsvc->addHandler(new sTGC_TechHandler("sTGC_Tech", *c));
141 agddsvc->addHandler(new mmSpacerHandler("mmSpacer", *c));
142 agddsvc->addHandler(new mmSpacer_TechHandler("mmSpacer_Tech", *c));
143 agddsvc->addHandler(new mm_readoutHandler("mm_readout", *c));
144}
145
146void MuonAGDDToolHelper::setAGDDtoGeoSvcName(const std::string& name) {
147 m_svcName = name;
148}
Definition of the abstract IRDBAccessSvc interface.
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition of the abstract IRDBRecord interface.
Definition of the abstract IRDBRecordset interface.
static bool BuildReadoutGeometry(MuonGM::MuonDetectorManager *mgr)
CxxUtils::LockedPointer< AGDDController > LockedController
IRDBRecord is one record in the IRDBRecordset object.
Definition IRDBRecord.h:27
virtual const std::string & getString(const std::string &fieldName) const =0
Get string field value.
virtual int getInt(const std::string &fieldName) const =0
Get int field value.
virtual unsigned int size() const =0
IRDBAccessSvc * m_rdbAccessSvc
std::string GetAGDD(const bool dumpIt, const std::string &tableName, const std::string &outFileName)
static bool BuildMScomponents()
std::vector< std::string > ReadAGDDFlags()
IGeoModelSvc * m_geoModelSvc
void setAGDDtoGeoSvcName(const std::string &name)
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Ensure that the Athena extensions are properly loaded.
Definition GeoMuonHits.h:27