ATLAS Offline Software
Loading...
Searching...
No Matches
RALHec.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// RALHec
6// Sep 5 JFB
7
8// Fetch parameters from a NOVA database structure.
9
10#include "LArGeoRAL/RALHec.h"
12
13// Athena Service classes
14#include "GaudiKernel/Bootstrap.h"
15#include "GaudiKernel/ISvcLocator.h"
17
18#include "CLHEP/Units/PhysicalConstants.h"
19
23
26
27#include <cstdlib>
28#include <iostream>
29#include <stdexcept>
30#include <string>
31
43
44
46 m_c(new Clockwork())
47{
48 // First, fetch the Athena services.
49 ISvcLocator* svcLocator = Gaudi::svcLocator();
50
51 SmartIF<IGeoDbTagSvc> geoDbTagSvc{svcLocator->service("GeoDbTagSvc")};
52 if(!geoDbTagSvc.isValid()) {
53 throw std::runtime_error ("Cannot locate GeoDBTagSvc");
54 }
55
56 SmartIF<IRDBAccessSvc> pAccessSvc{svcLocator->service(geoDbTagSvc->getParamSvcName())};
57 if(!pAccessSvc.isValid()) {
58 throw std::runtime_error ("Cannot locate " + geoDbTagSvc->getParamSvcName());
59 }
60
61 std::string detectorKey;
62 std::string detectorNode;
63
64 if(geoDbTagSvc->getSqliteReader()==nullptr) {
65 // The geometry DB is used
66 SmartIF<IGeoModelSvc> geoModel{svcLocator->service("GeoModelSvc")};
67 if(!geoModel.isValid()) {
68 throw std::runtime_error ("Cannot locate GeoModelSvc");
69 }
70
71 std::string AtlasVersion = geoModel->atlasVersion();
72 std::string LArVersion = geoModel->LAr_VersionOverride();
73
74 detectorKey = LArVersion.empty() ? AtlasVersion : LArVersion;
75 detectorNode = LArVersion.empty() ? "ATLAS" : "LAr";
76 }
77
78
79 m_c->hadronicEndcap = pAccessSvc->getRecordsetPtr("HadronicEndcap",detectorKey, detectorNode);
80 m_c->hecGridValues = pAccessSvc->getRecordsetPtr("HecGridValues",detectorKey, detectorNode);
81 m_c->hecLongitudinalBlock = pAccessSvc->getRecordsetPtr("HecLongitudinalBlock",detectorKey, detectorNode);
82
83}
84
85
87{
88 delete m_c;
89}
90
91
92double LArGeo::RALHec::GetValue(const std::string& a_name,
93 const int a0,
94 const int /*a1*/,
95 const int /*a2*/,
96 const int /*a3*/,
97 const int /*a4*/ ) const
98{
99
100 std::ostringstream A0STR;
101 A0STR << "_" << a0;
102 const std::string A0 = A0STR.str();
103
104
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;
118
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");
126
127 // We didn't find a match.
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());
131
132 // Unreached.
133}
Definition of the abstract IRDBAccessSvc interface.
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition of the abstract IRDBRecord interface.
Definition of the abstract IRDBRecordset interface.
IRDBRecordset_ptr hecGridValues
Definition RALHec.cxx:40
IRDBRecordset_ptr hadronicEndcap
Definition RALHec.cxx:39
IRDBRecordset_ptr hecLongitudinalBlock
Definition RALHec.cxx:41
Clockwork * m_c
Definition RALHec.h:35
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
Definition RALHec.cxx:92
virtual ~RALHec()
Definition RALHec.cxx:86
double a0
Definition globals.cxx:27