14 #include "GaudiKernel/Bootstrap.h"
15 #include "GaudiKernel/ISvcLocator.h"
18 #include "CLHEP/Units/PhysicalConstants.h"
49 ISvcLocator* svcLocator = Gaudi::svcLocator();
51 SmartIF<IGeoDbTagSvc> geoDbTagSvc{svcLocator->service(
"GeoDbTagSvc")};
52 if(!geoDbTagSvc.isValid()) {
53 throw std::runtime_error (
"Cannot locate GeoDBTagSvc");
56 SmartIF<IRDBAccessSvc> pAccessSvc{svcLocator->service(geoDbTagSvc->getParamSvcName())};
57 if(!pAccessSvc.isValid()) {
58 throw std::runtime_error (
"Cannot locate " + geoDbTagSvc->getParamSvcName());
61 std::string detectorKey;
62 std::string detectorNode;
64 if(geoDbTagSvc->getSqliteReader()==
nullptr) {
66 SmartIF<IGeoModelSvc> geoModel{svcLocator->service(
"GeoModelSvc")};
67 if(!geoModel.isValid()) {
68 throw std::runtime_error (
"Cannot locate GeoModelSvc");
72 std::string LArVersion = geoModel->LAr_VersionOverride();
74 detectorKey = LArVersion.empty() ?
AtlasVersion : LArVersion;
75 detectorNode = LArVersion.empty() ?
"ATLAS" :
"LAr";
79 m_c->
hadronicEndcap = pAccessSvc->getRecordsetPtr(
"HadronicEndcap",detectorKey, detectorNode);
80 m_c->
hecGridValues = pAccessSvc->getRecordsetPtr(
"HecGridValues",detectorKey, detectorNode);
100 std::ostringstream A0STR;
102 const std::string A0 = A0STR.str();
105 if ( a_name ==
"LArHECmoduleNumber" )
return (*m_c->hadronicEndcap)[0]->getInt(
"NSCT");
106 if ( a_name ==
"LArHECzStart" )
return (*m_c->hadronicEndcap)[0]->getDouble(
"ZSTART")*
CLHEP::cm;
107 if ( a_name ==
"LArHECgapSize" )
return (*m_c->hadronicEndcap)[0]->getDouble(
"LARG")*
CLHEP::cm;
108 if ( a_name ==
"LArHECbetweenWheel" )
return (*m_c->hadronicEndcap)[0]->getDouble(
"GAPWHL")*
CLHEP::cm;
109 if ( a_name ==
"LArHECcopperPad" )
return (*m_c->hadronicEndcap)[0]->getDouble(
"COPPER")*
CLHEP::cm;
110 if ( a_name ==
"LArHECplateWidth0" )
return (*m_c->hadronicEndcap)[0]->getDouble(
"PLATE_0")*
CLHEP::cm;
111 if ( a_name ==
"LArHECplateWidth1" )
return (*m_c->hadronicEndcap)[0]->getDouble(
"PLATE_1")*
CLHEP::cm;
112 if ( a_name ==
"LArHECkaptonPosition")
return (*m_c->hadronicEndcap)[0]->getDouble(
"KPTPOS"+A0)*
CLHEP::cm;
113 if ( a_name ==
"LArHECkaptonWidth" )
return (*m_c->hadronicEndcap)[0]->getDouble(
"KPTWID"+A0)*
CLHEP::cm;
114 if ( a_name ==
"LArHECrodPosY" )
return (*m_c->hadronicEndcap)[0]->getDouble(
"RODPOSR"+A0)*
CLHEP::cm;
115 if ( a_name ==
"LArHECrodPosX" )
return (*m_c->hadronicEndcap)[0]->getDouble(
"RODPOSX"+A0)*
CLHEP::cm;
116 if ( a_name ==
"LArHECrodDim" )
return (*m_c->hadronicEndcap)[0]->getDouble(
"RODDIM"+A0)*
CLHEP::cm;
117 if ( a_name ==
"LArHECspcDim" )
return (*m_c->hadronicEndcap)[0]->getDouble(
"SPCDIM"+A0)*
CLHEP::cm;
119 if ( a_name ==
"LArHECsliceIndex" )
return (*m_c->hecLongitudinalBlock)[
a0]->getDouble(
"IBLC");
120 if ( a_name ==
"LArHECmoduleRinner1" )
return (*m_c->hecLongitudinalBlock)[0]->getDouble(
"BLRMN")*
CLHEP::cm;
121 if ( a_name ==
"LArHECmoduleRinner2" )
return (*m_c->hecLongitudinalBlock)[1]->getDouble(
"BLRMN")*
CLHEP::cm;
122 if ( a_name ==
"LArHECmoduleRouter" )
return (*m_c->hecLongitudinalBlock)[0]->getDouble(
"BLRMX")*
CLHEP::cm;
123 if ( a_name ==
"LArHECdepthZ" )
return (*m_c->hecLongitudinalBlock)[
a0]->getDouble(
"BLDPTH")*
CLHEP::cm;
124 if ( a_name ==
"LArHECfirstAbsorber" )
return (*m_c->hecLongitudinalBlock)[
a0]->getDouble(
"PLATE0")*
CLHEP::cm;
125 if ( a_name ==
"LArHECgapNumber" )
return (*m_c->hecLongitudinalBlock)[
a0]->getDouble(
"BLMOD");
128 std::string errMessage =
"RALHec::GetValue: could not find a match for the key '" + a_name;
129 std::cerr << errMessage << std::endl;
130 throw std::runtime_error (errMessage.c_str());