14 #include "GaudiKernel/Bootstrap.h"
15 #include "GaudiKernel/ISvcLocator.h"
18 #include "CLHEP/Units/PhysicalConstants.h"
53 ISvcLocator* svcLocator = Gaudi::svcLocator();
56 StatusCode sc = svcLocator->service(
"GeoDbTagSvc",geoDbTagSvc);
57 if (
sc != StatusCode::SUCCESS) {
58 throw std::runtime_error (
"Cannot locate GeoDBTagSvc");
62 sc = svcLocator->service(geoDbTagSvc->getParamSvcName(),pAccessSvc);
63 if (
sc != StatusCode::SUCCESS) {
64 throw std::runtime_error (
"Cannot locate " + geoDbTagSvc->getParamSvcName());
67 std::string detectorKey;
68 std::string detectorNode;
71 if(geoDbTagSvc->getSqliteReader()==
nullptr) {
74 sc = svcLocator->service (
"GeoModelSvc",geoModel);
75 if (
sc != StatusCode::SUCCESS) {
76 throw std::runtime_error (
"Cannot locate GeoModelSvc");
80 std::string LArVersion = geoModel->LAr_VersionOverride();
82 detectorKey = LArVersion.empty() ?
AtlasVersion : LArVersion;
83 detectorNode = LArVersion.empty() ?
"ATLAS" :
"LAr";
86 m_c->
emecCylLayer = pAccessSvc->getRecordsetPtr(
"EmecCylLayer",detectorKey, detectorNode);
87 m_c->
emecGeometry = pAccessSvc->getRecordsetPtr(
"EmecGeometry",detectorKey, detectorNode);
88 m_c->
emecRapRegion = pAccessSvc->getRecordsetPtr(
"EmecRapRegion",detectorKey, detectorNode);
89 m_c->
emecSamplingSep = pAccessSvc->getRecordsetPtr(
"EmecSamplingSep",detectorKey, detectorNode);
91 m_c->
emecWhlOptParm = pAccessSvc->getRecordsetPtr(
"EmecWhlOptParm",detectorKey, detectorNode);
111 std::ostringstream A0STR;
113 const std::string A0 = A0STR.str();
115 std::ostringstream A1STR;
117 const std::string A1 = A1STR.str();
122 if ( a_name ==
"LArEMECZshift" )
return (*m_c->emecGeometry)[0]->getDouble(
"ZSHIFT")*
CLHEP::cm;
123 if ( a_name ==
"LArEMECRadiusMin" )
return (*m_c->emecGeometry)[0]->getDouble(
"RMIN")*
CLHEP::cm;
124 if ( a_name ==
"LArEMECRadiusMax" )
return (*m_c->emecGeometry)[0]->getDouble(
"RMAX")*
CLHEP::cm;
126 if ( a_name ==
"LArEMECAverageGap" )
return (*m_c->emecGeometry)[0]->getDouble(
"GAP0")*
CLHEP::cm;
127 if ( a_name ==
"LArEMECStartAbsLength" )
return (*m_c->emecGeometry)[0]->getDouble(
"SABL")*
CLHEP::cm;
128 if ( a_name ==
"LArEMECRefPoint" )
return (*m_c->emecGeometry)[0]->getDouble(
"Z0")*
CLHEP::cm;
129 if ( a_name ==
"LArEMECNomLarOrig" )
return (*m_c->emecGeometry)[0]->getDouble(
"Z1")*
CLHEP::cm;
130 if ( a_name ==
"LArEMECMaxRadiusActivePart" )
return (*m_c->emecGeometry)[0]->getDouble(
"RLIMIT")*
CLHEP::cm;
131 if ( a_name ==
"LArEMECNumberRadialLayer" )
return (*m_c->emecGeometry)[0]->getInt(
"NLAYER");
133 if ( a_name ==
"LArEMECLArThickness" )
return (*m_c->emecGeometry)[0]->getDouble(
"ETOT")*
CLHEP::cm;
134 if ( a_name ==
"LArEMECKaptonThickness" )
return (*m_c->emecGeometry)[0]->getDouble(
"EKAP")*
CLHEP::cm;
135 if ( a_name ==
"LArEMECCopperThickness" )
return (*m_c->emecGeometry)[0]->getDouble(
"ECU")*
CLHEP::cm;
137 if ( a_name ==
"LArEMECHalfCrack" )
return (*m_c->emecGeometry)[0]->getDouble(
"DCRACK")*
CLHEP::cm;
139 if ( a_name ==
"LArEMECRegionEtaGranularity" )
return (*m_c->emecGeometry)[0]->getDouble(
"DETA"+A0);
140 if ( a_name ==
"LArEMECRegionPhiGranularity" )
return (*m_c->emecGeometry)[0]->getDouble(
"DPHI"+A0);
143 if ( a_name ==
"LArEMECLayerInnerRadius" )
return (*m_c->emecCylLayer)[
a0]->getDouble(
"RADIL")*
CLHEP::cm;
144 if ( a_name ==
"LArEMECLayerOuterRadius" )
return (*m_c->emecCylLayer)[
a0]->getDouble(
"RADOL")*
CLHEP::cm;
145 if ( a_name ==
"LArEMECLayerInnerAngle" )
return (*m_c->emecCylLayer)[
a0]->getDouble(
"ALFIL")*
CLHEP::rad;
146 if ( a_name ==
"LArEMECLayerOuterAngle" )
return (*m_c->emecCylLayer)[
a0]->getDouble(
"ALFOL")*
CLHEP::rad;
147 if ( a_name ==
"LArEMECAbsorberInnerThickness" )
return (*m_c->emecCylLayer)[
a0]->getDouble(
"TCKIL")*
CLHEP::cm;
148 if ( a_name ==
"LArEMECAbsorberOuterThickness" )
return (*m_c->emecCylLayer)[
a0]->getDouble(
"TCKOL")*
CLHEP::cm;
149 if ( a_name ==
"LArEMECRegionLowEta" )
return (*m_c->emecRapRegion)[
a0]->getDouble(
"ETA1");
150 if ( a_name ==
"LArEMECRegionHighEta" )
return (*m_c->emecRapRegion)[
a0]->getDouble(
"ETA2");
151 if ( a_name ==
"LArEMECRegionLowEtaDepth" )
return (*m_c->emecRapRegion)[
a0]->getDouble(
"ZMN"+A1)*
CLHEP::cm;
152 if ( a_name ==
"LArEMECRegionHighEtaDepth" )
return (*m_c->emecRapRegion)[
a0]->getDouble(
"ZMX"+A1)*
CLHEP::cm;
154 if ( a_name ==
"LArEMECLengthSeparationArrays" )
return (*m_c->emecSamplingSep)[0]->getInt(
"NSEP"+A0);
155 if ( a_name ==
"LArEMECInnerWheelSeparation" )
return (*m_c->emecSamplingSep)[0]->getDouble(
"ZIW"+A0)*
CLHEP::cm;
156 if ( a_name ==
"LArEMECZSeparation12" )
return (*m_c->emecSamplingSep)[0]->getDouble(
"ZSEP12"+A0)*
CLHEP::cm;
157 if ( a_name ==
"LArEMECZSeparation23" )
return (*m_c->emecSamplingSep)[0]->getDouble(
"ZSEP23"+A0)*
CLHEP::cm;
161 if ( a_name ==
"LArEMECInnerNumberAbsorbers" )
return (*m_c->emecWheelParameters)[0]->getInt(
"NABS");
162 if ( a_name ==
"LArEMECInnerNumberWaves" )
return (*m_c->emecWheelParameters)[0]->getInt(
"NACC");
163 if ( a_name ==
"LArEMECInnerMaxEta" )
return (*m_c->emecWheelParameters)[0]->getDouble(
"ETAINT");
164 if ( a_name ==
"LArEMECInnerMinEta" )
return (*m_c->emecWheelParameters)[0]->getDouble(
"ETAEXT");
165 if ( a_name ==
"LArEMECOuterNumberAbsorbers" )
return (*m_c->emecWheelParameters)[1]->getInt(
"NABS");
166 if ( a_name ==
"LArEMECOuterNumberWaves" )
return (*m_c->emecWheelParameters)[1]->getInt(
"NACC");
167 if ( a_name ==
"LArEMECOuterMaxEta" )
return (*m_c->emecWheelParameters)[1]->getDouble(
"ETAINT");
168 if ( a_name ==
"LArEMECOuterMinEta" )
return (*m_c->emecWheelParameters)[1]->getDouble(
"ETAEXT");
170 if ( a_name ==
"LArEMECInnerBeta" )
return (*m_c->emecWhlOptParm)[0]->getDouble(
"BETX");
171 if ( a_name ==
"LArEMECInnerLowerAngle" )
return (*m_c->emecWhlOptParm)[0]->getDouble(
"ALFINT")*
CLHEP::rad;
172 if ( a_name ==
"LArEMECInnerUpperAngle" )
return (*m_c->emecWhlOptParm)[0]->getDouble(
"ALFEXT")*
CLHEP::rad;
173 if ( a_name ==
"LArEMECInnerLeadThickness" )
return (*m_c->emecWhlOptParm)[0]->getDouble(
"PBTH")*
CLHEP::cm;
174 if ( a_name ==
"LArEMECOuterBeta" )
return (*m_c->emecWhlOptParm)[1]->getDouble(
"BETX");
175 if ( a_name ==
"LArEMECOuterLowerAngle" )
return (*m_c->emecWhlOptParm)[1]->getDouble(
"ALFINT")*
CLHEP::rad;
176 if ( a_name ==
"LArEMECOuterUpperAngle" )
return (*m_c->emecWhlOptParm)[1]->getDouble(
"ALFEXT")*
CLHEP::rad;
177 if ( a_name ==
"LArEMECOuterLeadThickness" )
return (*m_c->emecWhlOptParm)[1]->getDouble(
"PBTH")*
CLHEP::cm;
179 if ( a_name ==
"LArEMECPreNomPos" )
return (*m_c->presamplerPosition)[0]->getDouble(
"ZPOS")*
CLHEP::cm;
180 if ( a_name ==
"LArEMECPreThickness" )
return (*m_c->presamplerPosition)[0]->getDouble(
"TCK")*
CLHEP::cm;
181 if ( a_name ==
"LArEMECPreMinRadius" )
return (*m_c->presamplerPosition)[0]->getDouble(
"RMIN")*
CLHEP::cm;
182 if ( a_name ==
"LArEMECPreMaxRadius" )
return (*m_c->presamplerPosition)[0]->getDouble(
"RMAX")*
CLHEP::cm;
188 std::string errMessage =
"RALEmec::GetValue: could not find a match for the key '" + a_name;
189 std::cerr << errMessage << std::endl;
190 throw std::runtime_error (errMessage.c_str());