ATLAS Offline Software
DetDescrCnvSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 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 
28 //-------------------------------------------------------------------------
29 
32 
33 //-------------------------------------------------------------------------
34 
37  void **ppvInterface) {
38  if (riid == IConversionSvc::interfaceID()) {
39  *ppvInterface = dynamic_cast<IConversionSvc *>(this);
40  } else if (riid == IDetDescrCnvSvc::interfaceID()) {
41  *ppvInterface = dynamic_cast<IDetDescrCnvSvc *>(this);
42  } else {
43  return ConversionSvc::queryInterface(riid, ppvInterface);
44  }
45  addRef();
46  return StatusCode::SUCCESS;
47 }
48 
49 //-------------------------------------------------------------------------
50 
54  ATH_MSG_INFO(" initializing ");
55 
56  // get DetectorStore service
57  ATH_CHECK(service("DetectorStore", m_detStore));
58  ATH_MSG_INFO("Found DetectorStore service");
59 
60  // fill in the Addresses for Transient Detector Store objects
61  ATH_MSG_INFO(" filling proxies for detector managers ");
62 
63  ATH_CHECK(addToDetStore(117659265, "CaloTTMgr"));
64  ATH_CHECK(addToDetStore(4548337, "CaloMgr"));
65  ATH_CHECK(addToDetStore(241807251, "CaloSuperCellMgr"));
66  ATH_CHECK(addToDetStore(125856940, "CaloIdManager"));
67  // IdDict:
68  ATH_CHECK(addToDetStore(2411, "IdDict"));
69 
70  // IdHelpers
71  ATH_CHECK(addToDetStore(164875623, "AtlasID"));
72  ATH_CHECK(addToDetStore(2516, "PixelID"));
73  ATH_CHECK(addToDetStore(2517, "SCT_ID"));
74  ATH_CHECK(addToDetStore(2518, "TRT_ID"));
75  ATH_CHECK(addToDetStore(131939624, "PLR_ID"));
76  ATH_CHECK(addToDetStore(79264207, "HGTD_ID"));
77  ATH_CHECK(addToDetStore(129452393, "SiliconID"));
78  ATH_CHECK(addToDetStore(163583365, "LArEM_ID"));
79  ATH_CHECK(addToDetStore(99488227, "LArEM_SuperCell_ID"));
80  ATH_CHECK(addToDetStore(3870484, "LArHEC_ID"));
81  ATH_CHECK(addToDetStore(254277678, "LArHEC_SuperCell_ID"));
82  ATH_CHECK(addToDetStore(45738051, "LArFCAL_ID"));
83  ATH_CHECK(addToDetStore(12829437, "LArFCAL_SuperCell_ID"));
84  ATH_CHECK(addToDetStore(79264204, "LArMiniFCAL_ID"));
85  ATH_CHECK(addToDetStore(158698068, "LArOnlineID"));
86  ATH_CHECK(addToDetStore(38321944, "TTOnlineID"));
87  ATH_CHECK(addToDetStore(115600394, "LArOnline_SuperCellID"));
88  ATH_CHECK(addToDetStore(27863673, "LArHVLineID"));
89  ATH_CHECK(addToDetStore(80757351, "LArElectrodeID"));
90  ATH_CHECK(addToDetStore(2901, "TileID"));
91  ATH_CHECK(addToDetStore(49557789, "Tile_SuperCell_ID"));
92  ATH_CHECK(addToDetStore(2902, "TileHWID"));
93  ATH_CHECK(addToDetStore(2903, "TileTBID"));
94 
95  if (m_hasMDT)
96  ATH_CHECK(addToDetStore(4170, "MDTIDHELPER"));
97  if (m_hasCSC)
98  ATH_CHECK(addToDetStore(4171, "CSCIDHELPER"));
99 
100  if (m_hasRPC)
101  ATH_CHECK(addToDetStore(4172, "RPCIDHELPER"));
102  if (m_hasTGC)
103  ATH_CHECK(addToDetStore(4173, "TGCIDHELPER"));
104  if (m_hasSTGC)
105  ATH_CHECK(addToDetStore(4174, "STGCIDHELPER"));
106  if (m_hasMM)
107  ATH_CHECK(addToDetStore(4175, "MMIDHELPER"));
108 
109  ATH_CHECK(addToDetStore(108133391, "CaloLVL1_ID"));
110  ATH_CHECK(addToDetStore(123500438, "CaloCell_ID"));
111  ATH_CHECK(addToDetStore(128365736, "CaloCell_SuperCell_ID"));
112  ATH_CHECK(addToDetStore(167756483, "CaloDM_ID"));
113  ATH_CHECK(addToDetStore(190591643, "ZdcID"));
114 
115  // for J/GTower
116  ATH_CHECK(addToDetStore(218674799, "JTower_ID"));
117  ATH_CHECK(addToDetStore(49678914, "GTower_ID"));
118 
119  return StatusCode::SUCCESS;
120 }
121 
122 //-------------------------------------------------------------------------
123 
127  const CLID & /* clid */,
128  const std::string * /* par */,
129  const unsigned long * /* ip */,
130  IOpaqueAddress *&refpAddress) {
131  refpAddress = nullptr;
132  return StatusCode::FAILURE;
133 }
134 
135 //-------------------------------------------------------------------------
136 
137 StatusCode DetDescrCnvSvc::createAddress(long /* svc_type */, const CLID &clid,
138  const std::string &refAddress,
139  IOpaqueAddress *&refpAddress) {
140  try {
141  refpAddress = new DetDescrAddress(clid);
142  DetDescrAddress *ddAddr;
143  ddAddr = dynamic_cast<DetDescrAddress *>(refpAddress);
144  if (!ddAddr) {
145  MsgStream log(msgSvc(), name());
146  log << MSG::FATAL << "Could not cast to DetDescrAddress." << endmsg;
147  return StatusCode::FAILURE;
148  }
149  if (ddAddr->fromString(refAddress).isFailure()) {
150  MsgStream log(msgSvc(), name());
151  log << MSG::FATAL << "Could not assign address " << refAddress
152  << endmsg;
153  return StatusCode::FAILURE;
154  }
155  } catch (...) {
156  refpAddress = 0;
157  }
158  return (refpAddress != 0) ? StatusCode::SUCCESS : StatusCode::FAILURE;
159 }
160 
161 //-------------------------------------------------------------------------
162 
163 StatusCode DetDescrCnvSvc::convertAddress(const IOpaqueAddress *pAddress,
164  std::string &refAddress) {
165  const DetDescrAddress *addr =
166  dynamic_cast<const DetDescrAddress *>(pAddress);
167  if (!addr)
168  return StatusCode::FAILURE;
169  return addr->toString(refAddress);
170 }
171 
172 //-------------------------------------------------------------------------
173 
175  const std::string &name) const {
176  // Based on input parameters, create StoreGate proxies with
177  // DetDescrAddresses in the detector store for the different
178  // detectors.
179 
180  // fill in the Addresses for Transient Detector Store objects
181 
182  DetDescrAddress *addr = new DetDescrAddress(clid, name, name);
184  ATH_MSG_INFO(" filling address for " << (*addr->par()) << " with CLID "
185  << addr->clID() << " and storage type "
186  << addr->svcType()
187  << " to detector store ");
188  return StatusCode::SUCCESS;
189 }
DetDescrAddress::toString
StatusCode toString(std::string &refString) const
write technology-specific part of address to string
Definition: DetDescrAddress.cxx:46
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:98
DetDescrAddress.h
DetDescrCnvSvc::initialize
virtual StatusCode initialize()
Initialize the service.
Definition: DetDescrCnvSvc.cxx:52
DetDescrCnvSvc::m_hasSTGC
BooleanProperty m_hasSTGC
Definition: DetDescrCnvSvc.h:96
DetDescrCnvSvc::convertAddress
virtual StatusCode convertAddress(const IOpaqueAddress *pAddress, std::string &refAddress)
Convert address to string form.
Definition: DetDescrCnvSvc.cxx:163
DetDescrCnvSvc::m_hasCSC
BooleanProperty m_hasCSC
Switch on/off the muon detectors.
Definition: DetDescrCnvSvc.h:95
DetDescrCnvSvc::m_hasMM
BooleanProperty m_hasMM
Definition: DetDescrCnvSvc.h:97
DetDescrCnvSvc::m_detStore
StoreGateSvc * m_detStore
Definition: DetDescrCnvSvc.h:59
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
DetDescrCnvSvc::queryInterface
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvInterface)
Identify interfaces to which this service is responsive.
Definition: DetDescrCnvSvc.cxx:36
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
StoreGateSvc::recordAddress
StatusCode recordAddress(const std::string &skey, IOpaqueAddress *pAddress, bool clearAddressFlag=true)
Create a proxy object using an IOpaqueAddress and a transient key.
IDetDescrCnvSvc
Definition: IDetDescrCnvSvc.h:34
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:126
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:174
DetDescrCnvSvc.h
IDetDescrCnvSvc.h
StoreGateSvc.h
DetDescrCnvSvc::m_hasRPC
BooleanProperty m_hasRPC
Definition: DetDescrCnvSvc.h:99
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:100