ATLAS Offline Software
DetDescrCnvSvc.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 // Include files
7 
12 #include "GaudiKernel/IConversionSvc.h"
13 #include "GaudiKernel/IConverter.h"
14 #include "GaudiKernel/IDataSelector.h"
15 #include "GaudiKernel/IOpaqueAddress.h"
16 #include "GaudiKernel/ISvcLocator.h"
17 #include "StoreGate/StoreGateSvc.h"
18 
19 // External definitions
20 constexpr long DetDescr_StorageType = 0x44;
21 
22 //-------------------------------------------------------------------------
23 
25 DetDescrCnvSvc::DetDescrCnvSvc(const std::string &name, ISvcLocator *svc)
26  : ConversionSvc(name, svc, DetDescr_StorageType),
27  m_detStore("DetectorStore", name)
28  {}
29 
30 //-------------------------------------------------------------------------
31 
34 
35 //-------------------------------------------------------------------------
36 
40  ATH_MSG_INFO(" initializing ");
41 
42  // get DetectorStore service
43  ATH_CHECK( m_detStore.retrieve() );
44  ATH_MSG_INFO("Found DetectorStore service");
45 
46  // fill in the Addresses for Transient Detector Store objects
47  ATH_MSG_INFO(" filling proxies for detector managers ");
48 
49  ATH_CHECK(addToDetStore(117659265, "CaloTTMgr"));
50  ATH_CHECK(addToDetStore(4548337, "CaloMgr"));
51  ATH_CHECK(addToDetStore(241807251, "CaloSuperCellMgr"));
52  ATH_CHECK(addToDetStore(125856940, "CaloIdManager"));
53  // IdDict:
54  ATH_CHECK(addToDetStore(2411, "IdDict"));
55 
56  // IdHelpers
57  ATH_CHECK(addToDetStore(164875623, "AtlasID"));
58  ATH_CHECK(addToDetStore(2516, "PixelID"));
59  ATH_CHECK(addToDetStore(2517, "SCT_ID"));
60  ATH_CHECK(addToDetStore(2518, "TRT_ID"));
61  ATH_CHECK(addToDetStore(131939624, "PLR_ID"));
62  ATH_CHECK(addToDetStore(79264207, "HGTD_ID"));
63  ATH_CHECK(addToDetStore(129452393, "SiliconID"));
64  ATH_CHECK(addToDetStore(163583365, "LArEM_ID"));
65  ATH_CHECK(addToDetStore(99488227, "LArEM_SuperCell_ID"));
66  ATH_CHECK(addToDetStore(3870484, "LArHEC_ID"));
67  ATH_CHECK(addToDetStore(254277678, "LArHEC_SuperCell_ID"));
68  ATH_CHECK(addToDetStore(45738051, "LArFCAL_ID"));
69  ATH_CHECK(addToDetStore(12829437, "LArFCAL_SuperCell_ID"));
70  ATH_CHECK(addToDetStore(79264204, "LArMiniFCAL_ID"));
71  ATH_CHECK(addToDetStore(158698068, "LArOnlineID"));
72  ATH_CHECK(addToDetStore(38321944, "TTOnlineID"));
73  ATH_CHECK(addToDetStore(115600394, "LArOnline_SuperCellID"));
74  ATH_CHECK(addToDetStore(27863673, "LArHVLineID"));
75  ATH_CHECK(addToDetStore(80757351, "LArElectrodeID"));
76  ATH_CHECK(addToDetStore(2901, "TileID"));
77  ATH_CHECK(addToDetStore(49557789, "Tile_SuperCell_ID"));
78  ATH_CHECK(addToDetStore(2902, "TileHWID"));
79  ATH_CHECK(addToDetStore(2903, "TileTBID"));
80 
81  if (m_hasMDT)
82  ATH_CHECK(addToDetStore(4170, "MDTIDHELPER"));
83  if (m_hasCSC)
84  ATH_CHECK(addToDetStore(4171, "CSCIDHELPER"));
85 
86  if (m_hasRPC)
87  ATH_CHECK(addToDetStore(4172, "RPCIDHELPER"));
88  if (m_hasTGC)
89  ATH_CHECK(addToDetStore(4173, "TGCIDHELPER"));
90  if (m_hasSTGC)
91  ATH_CHECK(addToDetStore(4174, "STGCIDHELPER"));
92  if (m_hasMM)
93  ATH_CHECK(addToDetStore(4175, "MMIDHELPER"));
94 
95  ATH_CHECK(addToDetStore(108133391, "CaloLVL1_ID"));
96  ATH_CHECK(addToDetStore(123500438, "CaloCell_ID"));
97  ATH_CHECK(addToDetStore(128365736, "CaloCell_SuperCell_ID"));
98  ATH_CHECK(addToDetStore(167756483, "CaloDM_ID"));
99  ATH_CHECK(addToDetStore(190591643, "ZdcID"));
100 
101  // for J/GTower
102  ATH_CHECK(addToDetStore(218674799, "JTower_ID"));
103  ATH_CHECK(addToDetStore(49678914, "GTower_ID"));
104 
105  return StatusCode::SUCCESS;
106 }
107 
108 //-------------------------------------------------------------------------
109 
113  const CLID & /* clid */,
114  const std::string * /* par */,
115  const unsigned long * /* ip */,
116  IOpaqueAddress *&refpAddress) {
117  refpAddress = nullptr;
118  return StatusCode::FAILURE;
119 }
120 
121 //-------------------------------------------------------------------------
122 
123 StatusCode DetDescrCnvSvc::createAddress(long /* svc_type */, const CLID &clid,
124  const std::string &refAddress,
125  IOpaqueAddress *&refpAddress) {
126  try {
127  refpAddress = new DetDescrAddress(clid);
128  DetDescrAddress *ddAddr;
129  ddAddr = dynamic_cast<DetDescrAddress *>(refpAddress);
130  if (!ddAddr) {
131  MsgStream log(msgSvc(), name());
132  log << MSG::FATAL << "Could not cast to DetDescrAddress." << endmsg;
133  return StatusCode::FAILURE;
134  }
135  if (ddAddr->fromString(refAddress).isFailure()) {
136  MsgStream log(msgSvc(), name());
137  log << MSG::FATAL << "Could not assign address " << refAddress
138  << endmsg;
139  return StatusCode::FAILURE;
140  }
141  } catch (...) {
142  refpAddress = 0;
143  }
144  return (refpAddress != 0) ? StatusCode::SUCCESS : StatusCode::FAILURE;
145 }
146 
147 //-------------------------------------------------------------------------
148 
149 StatusCode DetDescrCnvSvc::convertAddress(const IOpaqueAddress *pAddress,
150  std::string &refAddress) {
151  const DetDescrAddress *addr =
152  dynamic_cast<const DetDescrAddress *>(pAddress);
153  if (!addr)
154  return StatusCode::FAILURE;
155  return addr->toString(refAddress);
156 }
157 
158 //-------------------------------------------------------------------------
159 
161  const std::string &name) const {
162  // Based on input parameters, create StoreGate proxies with
163  // DetDescrAddresses in the detector store for the different
164  // detectors.
165 
166  // fill in the Addresses for Transient Detector Store objects
167 
168  DetDescrAddress *addr = new DetDescrAddress(clid, name, name);
169  ATH_CHECK(m_detStore->recordAddress(addr));
170  ATH_MSG_INFO(" filling address for " << (*addr->par()) << " with CLID "
171  << addr->clID() << " and storage type "
172  << addr->svcType()
173  << " to detector store ");
174  return StatusCode::SUCCESS;
175 }
DetDescrAddress::toString
StatusCode toString(std::string &refString) const
write technology-specific part of address to string
Definition: DetDescrAddress.cxx:46
DetDescrCnvSvc::m_detStore
ServiceHandle< StoreGateSvc > m_detStore
Definition: DetDescrCnvSvc.h:52
AthCheckMacros.h
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:19
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AthMsgStreamMacros.h
initialize
void initialize()
Definition: run_EoverP.cxx:894
DetDescrCnvSvc::m_hasMDT
BooleanProperty m_hasMDT
Definition: DetDescrCnvSvc.h:91
DetDescrAddress.h
DetDescrCnvSvc::initialize
virtual StatusCode initialize()
Initialize the service.
Definition: DetDescrCnvSvc.cxx:38
DetDescrCnvSvc::m_hasSTGC
BooleanProperty m_hasSTGC
Definition: DetDescrCnvSvc.h:89
DetDescrCnvSvc::convertAddress
virtual StatusCode convertAddress(const IOpaqueAddress *pAddress, std::string &refAddress)
Convert address to string form.
Definition: DetDescrCnvSvc.cxx:149
DetDescrCnvSvc::m_hasCSC
BooleanProperty m_hasCSC
Switch on/off the muon detectors.
Definition: DetDescrCnvSvc.h:88
DetDescrCnvSvc::m_hasMM
BooleanProperty m_hasMM
Definition: DetDescrCnvSvc.h:90
DetDescrAddress
Definition: DetDescrAddress.h:32
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
DetDescrCnvSvc::~DetDescrCnvSvc
virtual ~DetDescrCnvSvc()
Standard Destructor.
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
DetDescrCnvSvc::createAddress
virtual StatusCode createAddress(long svc_type, const CLID &clid, const std::string *par, const unsigned long *ip, IOpaqueAddress *&refpAddress)
Basic create address.
Definition: DetDescrCnvSvc.cxx:112
DetDescrCnvSvc::DetDescrCnvSvc
DetDescrCnvSvc(const std::string &name, ISvcLocator *svc)
Standard Constructor.
Definition: DetDescrCnvSvc.cxx:25
DetDescr_StorageType
constexpr long DetDescr_StorageType
Definition: DetDescrCnvSvc.cxx:20
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
DetDescrCnvSvc::addToDetStore
virtual StatusCode addToDetStore(const CLID &clid, const std::string &name) const
Add new address to the Detector Store.
Definition: DetDescrCnvSvc.cxx:160
DetDescrCnvSvc.h
IDetDescrCnvSvc.h
StoreGateSvc.h
DetDescrCnvSvc::m_hasRPC
BooleanProperty m_hasRPC
Definition: DetDescrCnvSvc.h:92
DetDescrAddress::fromString
StatusCode fromString(const std::string &stringifiedIOA)
initialize technology-specific part of IOA from stringifiedIOA
Definition: DetDescrAddress.cxx:55
DetDescrCnvSvc::m_hasTGC
BooleanProperty m_hasTGC
Definition: DetDescrCnvSvc.h:93