ATLAS Offline Software
Loading...
Searching...
No Matches
MuonAGDDToolHelper.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 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
30
39
41
42#include <fstream>
43
44using namespace MuonGM;
45
47{
48 SmartIF<IGeoModelSvc> geomodel{Gaudi::svcLocator()->service("GeoModelSvc")};
49 if(!geomodel.isValid()) throw std::runtime_error("MuonAGDDToolHelper failed to access GeoModelSvc");
50 SmartIF<IRDBAccessSvc> rdbaccess{Gaudi::svcLocator()->service("RDBAccessSvc")};
51 if(!rdbaccess.isValid()) throw std::runtime_error("MuonAGDDToolHelper failed to access RDBAccessSvc");
52
53 m_geoModelSvc = geomodel.get();
54 m_rdbAccessSvc = rdbaccess.get();
55}
56
57std::vector<std::string> MuonAGDDToolHelper::ReadAGDDFlags()
58{
59 std::vector<std::string> structuresFromFlags;
60 std::string agdd2geoVersion = m_rdbAccessSvc->getChildTag("AGDD2GeoSwitches",m_geoModelSvc->muonVersion(),"MuonSpectrometer");
61
62 if(!agdd2geoVersion.empty())
63 {
64 std::string TheKEYNAME;
65 int TheKEYVALUE;
66 IRDBRecordset_ptr pIRDBRecordset = m_rdbAccessSvc->getRecordsetPtr("AGDD2GeoSwitches",m_geoModelSvc->muonVersion(),"MuonSpectrometer");
67 for(unsigned int i=0; i<pIRDBRecordset->size(); i++)
68 {
69 const IRDBRecord* record = (*pIRDBRecordset)[i];
70 TheKEYNAME = record->getString("KEYNAME");
71 TheKEYVALUE = record->getInt("KEYVALUE");
72 if ( TheKEYVALUE == 1 )
73 {
74 structuresFromFlags.push_back(TheKEYNAME);
75 }
76 }
77 }
78 else
79 {
80 std::cout<<"MuonAGDDToolHelper\tagdd2geoVersion is empty " <<std::endl;
81 }
82 return structuresFromFlags;
83}
84
85
86std::string MuonAGDDToolHelper::GetAGDD(const bool dumpIt, const std::string& tableName, const std::string& outFileName)
87{
88 std::string AtlasVersion = m_geoModelSvc->atlasVersion();
89 std::string MuonVersion = m_geoModelSvc->muonVersionOverride();
90
91 std::string detectorKey = MuonVersion.empty() ? AtlasVersion : MuonVersion;
92 std::string detectorNode = MuonVersion.empty() ? "ATLAS" : "MuonSpectrometer";
93 if ( MuonVersion == "CUSTOM"){
94 detectorKey = AtlasVersion ;
95 detectorNode = "ATLAS" ;
96 }
97
98 IRDBRecordset_ptr recordsetAGDD = m_rdbAccessSvc->getRecordsetPtr(tableName,detectorKey,detectorNode);
99 if(!recordsetAGDD) return "";
100
101 const IRDBRecord *recordAGDD = (*recordsetAGDD)[0];
102 if(!recordAGDD) return "";
103 std::string AgddString = recordAGDD->getString("DATA");
104
105 size_t pos=AgddString.find("AGDD.dtd");
106 if (pos!=std::string::npos) AgddString.replace(pos-21,32,"-- Reference to AGDD.dtd automatically removed -->");
107 std::ofstream GeneratedFile;
108 if (dumpIt)
109 {
110 std::ofstream GeneratedFile;
111 GeneratedFile.open(outFileName);
112 GeneratedFile<<AgddString;
113 GeneratedFile.close();
114 }
115 return AgddString;
116}
117
119{
120 SmartIF<StoreGateSvc> pDetStore{Gaudi::svcLocator()->service("DetectorStore")};
121 if (!pDetStore.isValid()) return false;
122 MuonGM::MuonDetectorManager* muonMgr=nullptr;
123 if (pDetStore->retrieve(muonMgr).isFailure()) return false;
125}
126
128{
129 SmartIF<IAGDDtoGeoSvc> agddsvc{Gaudi::svcLocator()->service(m_svcName)};
130 if(!agddsvc.isValid()) {
131 throw std::runtime_error("MuonAGDDToolHelper::SetNSWComponents() - Could not retrieve "
132 + m_svcName + " from ServiceLocator");
133 }
134
135 IAGDDtoGeoSvc::LockedController c = agddsvc->getController();
136
137 agddsvc->addHandler(new micromegasHandler("micromegas", *c));
138 agddsvc->addHandler(new mm_TechHandler("mm_Tech", *c));
139 agddsvc->addHandler(new sTGCHandler("sTGC", *c));
140 agddsvc->addHandler(new sTGC_readoutHandler("sTGC_readout", *c));
141 agddsvc->addHandler(new sTGC_TechHandler("sTGC_Tech", *c));
142 agddsvc->addHandler(new mmSpacerHandler("mmSpacer", *c));
143 agddsvc->addHandler(new mmSpacer_TechHandler("mmSpacer_Tech", *c));
144 agddsvc->addHandler(new mm_readoutHandler("mm_readout", *c));
145}
146
147void MuonAGDDToolHelper::setAGDDtoGeoSvcName(const std::string& name) {
148 m_svcName = name;
149}
defines an "iterator" over instances of a given type in StoreGateSvc
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