ATLAS Offline Software
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 
5 #include "MuonAGDDToolHelper.h"
6 
11 
12 #include "GaudiKernel/ISvcLocator.h"
13 #include "GaudiKernel/IToolSvc.h"
14 #include "GaudiKernel/IConversionSvc.h"
15 #include "GaudiKernel/ServiceHandle.h"
20 #include "AGDDKernel/AliasStore.h"
23 
28 #include "StoreGate/DataHandle.h"
29 #include "StoreGate/StoreGateSvc.h"
30 
39 
41 
42 #include <fstream>
43 
44 using 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 
57 std::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 
86 std::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 
148  m_svcName = name;
149 }
IRDBRecord::getInt
virtual int getInt(const std::string &fieldName) const =0
Get int field value.
AGDDController.h
BuildNSWReadoutGeometry.h
AGDDDetectorStore.h
MuonGM
Ensure that the Athena extensions are properly loaded.
Definition: GeoMuonHits.h:27
mmSpacerHandler.h
mmSpacer_TechHandler.h
MuonAGDDToolHelper::MuonAGDDToolHelper
MuonAGDDToolHelper()
Definition: MuonAGDDToolHelper.cxx:46
sTGC_TechHandler
Definition: sTGC_TechHandler.h:11
CxxUtils::LockedPointer
A pointer together with a movable lock.
Definition: LockedPointer.h:35
sTgcReadoutElement.h
mm_readoutHandler
Definition: mm_readoutHandler.h:11
mmSpacerHandler
Definition: mmSpacerHandler.h:11
IRDBRecord::getString
virtual const std::string & getString(const std::string &fieldName) const =0
Get string field value.
mm_TechHandler.h
micromegasHandler.h
sTGCHandler.h
AGDDParameterStore.h
DataHandle.h
mmSpacer_TechHandler
Definition: mmSpacer_TechHandler.h:11
MMReadoutElement.h
AliasStore.h
MuonAGDDToolHelper::GetAGDD
std::string GetAGDD(const bool dumpIt, const std::string &tableName, const std::string &outFileName)
Definition: MuonAGDDToolHelper.cxx:86
MuonAGDDToolHelper.h
EventInfoWrite.AtlasVersion
AtlasVersion
Definition: EventInfoWrite.py:17
IRDBAccessSvc.h
Definition of the abstract IRDBAccessSvc interface.
lumiFormat.i
int i
Definition: lumiFormat.py:85
MuonAGDDToolHelper::SetNSWComponents
void SetNSWComponents()
Definition: MuonAGDDToolHelper.cxx:127
sTGCHandler
Definition: sTGCHandler.h:14
mm_readoutHandler.h
sTGC_readoutHandler.h
MuonReadoutElement.h
BuildNSWReadoutGeometry::BuildReadoutGeometry
static bool BuildReadoutGeometry(MuonGM::MuonDetectorManager *mgr)
Definition: BuildNSWReadoutGeometry.cxx:23
MuonAGDDToolHelper::BuildMScomponents
static bool BuildMScomponents()
Definition: MuonAGDDToolHelper.cxx:118
IRDBRecordset_ptr
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition: IRDBAccessSvc.h:25
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
dumpNswErrorDb.outFileName
string outFileName
Definition: dumpNswErrorDb.py:131
MuonDetectorManager.h
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
AGDDDetector.h
AGDD2GeoModelBuilder.h
IAGDD2GeoSvc.h
MuonAGDDToolHelper::setAGDDtoGeoSvcName
void setAGDDtoGeoSvcName(const std::string &name)
Definition: MuonAGDDToolHelper.cxx:147
IRDBRecord.h
Definition of the abstract IRDBRecord interface.
MuonGM::MuonDetectorManager
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:51
IRDBRecord
IRDBRecord is one record in the IRDBRecordset object.
Definition: IRDBRecord.h:27
MuonAGDDToolHelper::ReadAGDDFlags
std::vector< std::string > ReadAGDDFlags()
Definition: MuonAGDDToolHelper.cxx:57
micromegasHandler
Definition: micromegasHandler.h:14
IRDBRecordset.h
Definition of the abstract IRDBRecordset interface.
IGeoModelSvc.h
sTGC_readoutHandler
Definition: sTGC_readoutHandler.h:11
sTGC_TechHandler.h
StoreGateSvc.h
python.compressB64.c
def c
Definition: compressB64.py:93
mm_TechHandler
Definition: mm_TechHandler.h:11