ATLAS Offline Software
Classes | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
LArGeo::RALEmec Class Reference

#include <RALEmec.h>

Inheritance diagram for LArGeo::RALEmec:
Collaboration diagram for LArGeo::RALEmec:

Classes

class  Clockwork
 

Public Member Functions

 RALEmec ()
 
virtual ~RALEmec ()
 
virtual double GetValue (const std::string &, const int i0=INT_MIN, const int i1=INT_MIN, const int i2=INT_MIN, const int i3=INT_MIN, const int i4=INT_MIN) const override
 

Static Public Member Functions

static void SetInstance (std::unique_ptr< VDetectorParameters >)
 
static const VDetectorParametersGetInstance ()
 

Private Member Functions

 RALEmec (const RALEmec &)
 
RALEmecoperator= (const RALEmec &)
 

Private Attributes

Clockworkm_c
 

Static Private Attributes

static CxxUtils::CachedUniquePtr< VDetectorParameters > s_instance ATLAS_THREAD_SAFE
 

Detailed Description

Definition at line 20 of file RALEmec.h.

Constructor & Destructor Documentation

◆ RALEmec() [1/2]

LArGeo::RALEmec::RALEmec ( )

Definition at line 49 of file RALEmec.cxx.

49  :
50  m_c(new Clockwork())
51 {
52  // First, fetch the Athena services.
53  ISvcLocator* svcLocator = Gaudi::svcLocator();
54 
55  IGeoDbTagSvc* geoDbTagSvc{nullptr};
56  StatusCode sc = svcLocator->service("GeoDbTagSvc",geoDbTagSvc);
57  if (sc != StatusCode::SUCCESS) {
58  throw std::runtime_error ("Cannot locate GeoDBTagSvc");
59  }
60 
61  IRDBAccessSvc* pAccessSvc{nullptr};
62  sc = svcLocator->service(geoDbTagSvc->getParamSvcName(),pAccessSvc);
63  if (sc != StatusCode::SUCCESS) {
64  throw std::runtime_error ("Cannot locate " + geoDbTagSvc->getParamSvcName());
65  }
66 
67  std::string detectorKey;
68  std::string detectorNode;
69  std::string AtlasVersion;
70 
71  if(geoDbTagSvc->getSqliteReader()==nullptr) {
72  // The geometry DB is used
73  IGeoModelSvc* geoModel{nullptr};
74  sc = svcLocator->service ("GeoModelSvc",geoModel);
75  if (sc != StatusCode::SUCCESS) {
76  throw std::runtime_error ("Cannot locate GeoModelSvc");
77  }
78 
79  AtlasVersion = geoModel->atlasVersion();
80  std::string LArVersion = geoModel->LAr_VersionOverride();
81 
82  detectorKey = LArVersion.empty() ? AtlasVersion : LArVersion;
83  detectorNode = LArVersion.empty() ? "ATLAS" : "LAr";
84  }
85 
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);
90  m_c->emecWheelParameters = pAccessSvc->getRecordsetPtr("EmecWheelParameters",detectorKey, detectorNode);
91  m_c->emecWhlOptParm = pAccessSvc->getRecordsetPtr("EmecWhlOptParm",detectorKey, detectorNode);
92  m_c->presamplerPosition = pAccessSvc->getRecordsetPtr("PresamplerPosition",AtlasVersion, "ATLAS");
93 
94 }

◆ ~RALEmec()

LArGeo::RALEmec::~RALEmec ( )
virtual

Definition at line 97 of file RALEmec.cxx.

98 {
99  delete m_c;
100 }

◆ RALEmec() [2/2]

LArGeo::RALEmec::RALEmec ( const RALEmec )
private

Member Function Documentation

◆ GetInstance()

const LArGeo::VDetectorParameters * LArGeo::VDetectorParameters::GetInstance ( )
staticinherited

Definition at line 29 of file VDetectorParameters.cxx.

30 {
31  const VDetectorParameters* p = s_instance.get();
32  if(p==nullptr)
33  std::cerr << "LArGeo::VDetectorParameters::GetInstance was called, but "
34  << "the pointer to the detector-parameter access object is 0."
35  << std::endl;
36 
37  return p;
38 }

◆ GetValue()

double LArGeo::RALEmec::GetValue ( const std::string &  a_name,
const int  i0 = INT_MIN,
const int  i1 = INT_MIN,
const int  i2 = INT_MIN,
const int  i3 = INT_MIN,
const int  i4 = INT_MIN 
) const
overridevirtual

Implements LArGeo::VDetectorParameters.

Definition at line 103 of file RALEmec.cxx.

109 {
110 
111  std::ostringstream A0STR;
112  A0STR << "_" << a0;
113  const std::string A0 = A0STR.str();
114 
115  std::ostringstream A1STR;
116  A1STR << "_" << a1;
117  const std::string A1 = A1STR.str();
118 
119 
120 
121 
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;
125 
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");
132 
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;
136 
137  if ( a_name == "LArEMECHalfCrack" ) return (*m_c->emecGeometry)[0]->getDouble("DCRACK")*CLHEP::cm;
138 
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);
141 
142 
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;
153 
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;
158 
159  // In this case (since the number of wheels isn't likely to change),
160  // hard-code the inner versus the outer wheel.
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");
169 
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;
178 
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;
183 
184 
185 
186 
187  // We didn't find a match.
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());
191 
192  // Unreached
193 }

◆ operator=()

RALEmec& LArGeo::RALEmec::operator= ( const RALEmec )
private

◆ SetInstance()

void LArGeo::VDetectorParameters::SetInstance ( std::unique_ptr< VDetectorParameters p)
staticinherited

Definition at line 24 of file VDetectorParameters.cxx.

25 {
26  s_instance.set (std::move (p));
27 }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

CxxUtils::CachedUniquePtr<VDetectorParameters> s_instance LArGeo::VDetectorParameters::ATLAS_THREAD_SAFE
staticprivateinherited

Definition at line 64 of file VDetectorParameters.h.

◆ m_c

Clockwork* LArGeo::RALEmec::m_c
private

Definition at line 38 of file RALEmec.h.


The documentation for this class was generated from the following files:
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
IGeoModelSvc
Definition: IGeoModelSvc.h:17
LArGeo::RALEmec::Clockwork::emecCylLayer
IRDBRecordset_ptr emecCylLayer
Definition: RALEmec.cxx:39
LArGeo::RALEmec::Clockwork::emecSamplingSep
IRDBRecordset_ptr emecSamplingSep
Definition: RALEmec.cxx:42
LArGeo::RALEmec::Clockwork::emecRapRegion
IRDBRecordset_ptr emecRapRegion
Definition: RALEmec.cxx:41
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
LArGeo::VDetectorParameters::VDetectorParameters
VDetectorParameters()
Definition: VDetectorParameters.h:61
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
EventInfoWrite.AtlasVersion
AtlasVersion
Definition: EventInfoWrite.py:17
LArGeo::RALEmec::Clockwork::emecWheelParameters
IRDBRecordset_ptr emecWheelParameters
Definition: RALEmec.cxx:43
IRDBAccessSvc
IRDBAccessSvc is an abstract interface to the athena service that provides the following functionalit...
Definition: IRDBAccessSvc.h:45
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
IGeoDbTagSvc
Definition: IGeoDbTagSvc.h:26
a0
double a0
Definition: globals.cxx:27
LArGeo::RALEmec::m_c
Clockwork * m_c
Definition: RALEmec.h:37
LArGeo::RALEmec::Clockwork::presamplerPosition
IRDBRecordset_ptr presamplerPosition
Definition: RALEmec.cxx:45
LArGeo::RALEmec::Clockwork::emecWhlOptParm
IRDBRecordset_ptr emecWhlOptParm
Definition: RALEmec.cxx:44
python.SystemOfUnits.rad
int rad
Definition: SystemOfUnits.py:111
LArGeo::RALEmec::Clockwork::emecGeometry
IRDBRecordset_ptr emecGeometry
Definition: RALEmec.cxx:40