Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ZdcGeometryDB.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include "GaudiKernel/Bootstrap.h"
8 #include <GaudiKernel/ISvcLocator.h>
14 
15 #include <fstream>
16 
17 
19 {
20  static const ZdcFileGeometryDB file_db_run3;
21  return &file_db_run3;
22 }
23 
25 {
26  static const ZdcGeoDBGeometryDB geodb_run3;
27  return &geodb_run3;
28 }
29 
30 //constructor
31 ZdcFileGeometryDB::ZdcFileGeometryDB() : asg::AsgMessaging("ZdcFileGeometryDB"),m_fileStr("ZDCgeom_Run3.json")
32 {
33 
34  msg().setLevel(MSG::INFO);
35 
37 
38 }
39 
40 ZdcGeoDBGeometryDB::ZdcGeoDBGeometryDB() : asg::AsgMessaging("ZdcGeoDBGeometryDB")
41 {
42  msg().setLevel(MSG::INFO);
43 
45 }
46 
47 
49 {
50  bool ret = false;
51  if (m_fileStr == "")
52  {
53  ATH_MSG_WARNING("No JSON filename defined!");
54  return ret;
55  }
57  if (!filePath.empty())
58  {
59  ATH_MSG_DEBUG( "ZdcGeometryDB::found ZDC JSON at " << filePath );
60  }
61  else
62  {
63  ATH_MSG_DEBUG( "ZdcGeometryDB::geometry NOT FOUND! Trying local file!" ) ;
64  filePath = "./"+m_fileStr;
65  }
66 
67  std::ifstream ifs(filePath);
68 
69  if (ifs.is_open())
70  {
71  ifs >> m_mainJson;
72  ret = true;
73  ATH_MSG_INFO("Loaded ZDC DB from file");
74  }
75  else
76  ATH_MSG_ERROR("No ZDC geometry found");
77 
78  return ret;
79 }
80 
82 {
83  SmartIF<IRDBAccessSvc> iAccessSvc(Gaudi::svcLocator()->service("RDBAccessSvc"));
84  if (!iAccessSvc)
85  {
86  ATH_MSG_FATAL("No RDBAccessSvc");
87  throw std::runtime_error("No RDBAccessSvc found!");
88  }
89 
90  SmartIF<IGeoModelSvc> geoModel{Gaudi::svcLocator()->service ("GeoModelSvc")};
91  if (!geoModel)
92  {
93  ATH_MSG_FATAL("No GeoModelSvc");
94  throw std::runtime_error("No GeoModelSvc found!");
95  }
96  DecodeVersionKey versionKey(geoModel, "ForwardDetectors");
97 
98  ATH_MSG_INFO("Loading ZDC geometry from tag: " << versionKey.tag() << " node: " << versionKey.node());
99  IRDBRecordset_ptr tanParams = iAccessSvc->getRecordsetPtr("TanTaxn",versionKey.tag(), versionKey.node());
100  IRDBRecordset_ptr zdcParams = iAccessSvc->getRecordsetPtr("ZdcPrd",versionKey.tag(), versionKey.node());
101 
102  IRDBRecordset::const_iterator AccessSvc_iter;
103  for(AccessSvc_iter = tanParams->begin(); AccessSvc_iter != tanParams->end(); ++AccessSvc_iter)
104  {
105  const std::string & name = (*AccessSvc_iter)->getString("NAME");
106  int side = (*AccessSvc_iter)->getInt("SIDE");
107  double x = (*AccessSvc_iter)->getDouble("X");
108  double y = (*AccessSvc_iter)->getDouble("Y");
109  double z = (*AccessSvc_iter)->getDouble("Z");
110  double w = (*AccessSvc_iter)->getDouble("WIDTH");
111  double h = (*AccessSvc_iter)->getDouble("HEIGHT");
112  double d = (*AccessSvc_iter)->getDouble("DEPTH");
113 
114  m_mainJson["TAN/TAXN"][name]["name"]=name;
115  m_mainJson["TAN/TAXN"][name]["side"]=side;
116  m_mainJson["TAN/TAXN"][name]["x"]=x;
117  m_mainJson["TAN/TAXN"][name]["y"]=y;
118  m_mainJson["TAN/TAXN"][name]["z"]=z;
119  m_mainJson["TAN/TAXN"][name]["width"]=w;
120  m_mainJson["TAN/TAXN"][name]["height"]=h;
121  m_mainJson["TAN/TAXN"][name]["depth"]=d;
122  }
123 
124  for(AccessSvc_iter = zdcParams->begin(); AccessSvc_iter != zdcParams->end(); ++AccessSvc_iter)
125  {
126  const std::string & name = (*AccessSvc_iter)->getString("NAME");
127  std::string key = name;
128  if ( (key.find("RPD") == std::string::npos) &&
129  (key.find("BRAN") == std::string::npos) )
130  key = "ZDC"+key;
131 
132  int side = (*AccessSvc_iter)->getInt("SIDE");
133  int mod = (*AccessSvc_iter)->getInt("MODUL");
134  int type = -1;
135  if (!(*AccessSvc_iter)->isFieldNull("TYPE"))
136  {
137  type = (*AccessSvc_iter)->getInt("TYPE");
138  }
139  double x = (*AccessSvc_iter)->getDouble("X");
140  double y = (*AccessSvc_iter)->getDouble("Y");
141  double z = (*AccessSvc_iter)->getDouble("Z");
142  double q = (*AccessSvc_iter)->getDouble("Q");
143  double i = (*AccessSvc_iter)->getDouble("I");
144  double j = (*AccessSvc_iter)->getDouble("J");
145  double k = (*AccessSvc_iter)->getDouble("K");
146 
147  m_mainJson["Detector"][key]["name"]=name;
148  m_mainJson["Detector"][key]["module"]=mod;
149  m_mainJson["Detector"][key]["side"]=side;
150  if (type>-1) m_mainJson["Detector"][key]["type"]=type; // RPD & BRAN have no "type" in some versions of the GeoDB
151  m_mainJson["Detector"][key]["x"]=x;
152  m_mainJson["Detector"][key]["y"]=y;
153  m_mainJson["Detector"][key]["z"]=z;
154  m_mainJson["Detector"][key]["q"]=q;
155  m_mainJson["Detector"][key]["i"]=i;
156  m_mainJson["Detector"][key]["j"]=j;
157  m_mainJson["Detector"][key]["k"]=k;
158  }
159 
160  ATH_MSG_INFO("Loaded ZDC DB from GeoDB" << versionKey.tag());
161  return true;
162 }
163 
164 
ZdcFileGeometryDB::m_fileStr
std::string m_fileStr
Definition: ZdcGeometryDB.h:28
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
PathResolver::RecursiveSearch
@ RecursiveSearch
Definition: PathResolver.h:28
ZdcGeoDBGeometryDB::getInstance
static const IZdcGeometryDB * getInstance()
Definition: ZdcGeometryDB.cxx:24
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
PathResolver::find_file
static std::string find_file(const std::string &logical_file_name, const std::string &search_path, SearchType search_type=LocalSearch)
Definition: PathResolver.cxx:251
ZdcFileGeometryDB::loadJSONFile
bool loadJSONFile()
Definition: ZdcGeometryDB.cxx:48
hist_file_dump.d
d
Definition: hist_file_dump.py:143
asg
Definition: DataHandleTestTool.h:28
DecodeVersionKey::node
const std::string & node() const
Return the version node.
Definition: DecodeVersionKey.cxx:97
ZdcFileGeometryDB::getInstance
static const IZdcGeometryDB * getInstance()
Definition: ZdcGeometryDB.cxx:18
ZdcGeometryDB.h
x
#define x
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
IZdcGeometryDB
Definition: ZdcGeometryDB.h:12
TRT::Hit::side
@ side
Definition: HitInfo.h:83
IZdcGeometryDB::m_geoLoaded
bool m_geoLoaded
Definition: ZdcGeometryDB.h:15
IRDBAccessSvc.h
Definition of the abstract IRDBAccessSvc interface.
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
maskDeadModules.mod
mod
Definition: maskDeadModules.py:36
lumiFormat.i
int i
Definition: lumiFormat.py:85
z
#define z
ZdcGeoDBGeometryDB
Definition: ZdcGeometryDB.h:38
extractSporadic.h
list h
Definition: extractSporadic.py:97
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
DecodeVersionKey
This is a helper class to query the version tags from GeoModelSvc and determine the appropriate tag a...
Definition: DecodeVersionKey.h:18
ZdcFileGeometryDB
Definition: ZdcGeometryDB.h:26
asg::AsgMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AsgMessaging.cxx:49
DecodeVersionKey::tag
const std::string & tag() const
Return version tag.
Definition: DecodeVersionKey.cxx:91
IRDBRecordset_ptr
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition: IRDBAccessSvc.h:25
PathResolver.h
hancool.filePath
string filePath
Definition: hancool.py:28
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ZdcFileGeometryDB::ZdcFileGeometryDB
ZdcFileGeometryDB()
Definition: ZdcGeometryDB.cxx:31
DecodeVersionKey.h
IRDBRecord.h
Definition of the abstract IRDBRecord interface.
y
#define y
h
ZdcGeoDBGeometryDB::ZdcGeoDBGeometryDB
ZdcGeoDBGeometryDB()
Definition: ZdcGeometryDB.cxx:40
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
extractSporadic.q
list q
Definition: extractSporadic.py:98
IRDBRecordset.h
Definition of the abstract IRDBRecordset interface.
python.IoTestsLib.w
def w
Definition: IoTestsLib.py:200
IZdcGeometryDB::m_mainJson
nlohmann::json m_mainJson
Definition: ZdcGeometryDB.h:16
IGeoModelSvc.h
IRDBRecordset::const_iterator
RecordsVector::const_iterator const_iterator
Definition: IRDBRecordset.h:52
ZdcGeoDBGeometryDB::loadGeoDB
bool loadGeoDB()
Definition: ZdcGeometryDB.cxx:81
fitman.k
k
Definition: fitman.py:528
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37