ATLAS Offline Software
Loading...
Searching...
No Matches
RALExperimentalHall.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// RALExperimentalHall
6// Sep 5 JFB
7
8// Fetch parameters from a NOVA database structure.
9
12
13// Athena Service classes
14#include "GaudiKernel/Bootstrap.h"
15#include "GaudiKernel/ISvcLocator.h"
17
18#include "CLHEP/Units/PhysicalConstants.h"
19
25
26#include <cstdlib>
27#include <iostream>
28#include <stdexcept>
29#include <string>
30
32
33public:
34
35 Clockwork()= default;
36 ~Clockwork()= default;
37
39
40};
41
42
44 m_c(new Clockwork())
45{
46 // First, fetch the Athena services.
47 ISvcLocator* svcLocator = Gaudi::svcLocator();
48
49 SmartIF<IGeoDbTagSvc> geoDbTagSvc{svcLocator->service("GeoDbTagSvc")};
50 if(!geoDbTagSvc.isValid()) {
51 throw std::runtime_error ("Cannot locate GeoDBTagSvc");
52 }
53
54 SmartIF<IRDBAccessSvc> pAccessSvc{svcLocator->service(geoDbTagSvc->getParamSvcName())};
55 if(!pAccessSvc.isValid()) {
56 throw std::runtime_error ("Cannot locate " + geoDbTagSvc->getParamSvcName());
57 }
58
59 std::string AtlasVersion;
60
61 if(geoDbTagSvc->getSqliteReader()==nullptr) {
62 // The geometry DB is used
63 SmartIF<IGeoModelSvc> geoModel{svcLocator->service("GeoModelSvc")};
64 if(!geoModel.isValid()) {
65 throw std::runtime_error ("Cannot locate GeoModelSvc");
66 }
67
68 AtlasVersion = geoModel->atlasVersion();
69 }
70
71 m_c->atlasMother = pAccessSvc->getRecordsetPtr("AtlasMother",AtlasVersion, "ATLAS");
72}
73
74
79
80
81double LArGeo::RALExperimentalHall::GetValue(const std::string& a_name,
82 const int /*a0*/,
83 const int /*a1*/,
84 const int /*a2*/,
85 const int /*a3*/,
86 const int /*a4*/ ) const
87{
88
89 if ( a_name == "LArExpHallOutOfTimeCut" ) return 2.5*CLHEP::ns;
90 if ( a_name == "LArExpHallInnerRadius" ) return (*m_c->atlasMother)[1]->getDouble("RMIN")*CLHEP::cm;
91 if ( a_name == "LArExpHallOuterRadius" ) return (*m_c->atlasMother)[1]->getDouble("RMAX")*CLHEP::cm;
92 if ( a_name == "LArExpHallZmax" ) return (*m_c->atlasMother)[1]->getDouble("ZMAX")*CLHEP::cm;
93
94 // We didn't find a match.
95 std::string errMessage = "RALExperimentalHall::GetValue: could not find a match for the key '" + a_name;
96 std::cerr << errMessage << std::endl;
97 throw std::runtime_error (errMessage.c_str());
98
99 // Unreached
100}
Definition of the abstract IRDBAccessSvc interface.
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition of the abstract IRDBRecord interface.
Definition of the abstract IRDBRecordset interface.
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