ATLAS Offline Software
Loading...
Searching...
No Matches
DetDescrCnvSvc.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 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"
18
19// External definitions
20constexpr long DetDescr_StorageType = 0x44;
21
22//-------------------------------------------------------------------------
23
25DetDescrCnvSvc::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
39 ATH_CHECK(ConversionSvc::initialize());
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 // Additional CLIDS used as base classes.
50 constexpr CLID PixelID_CLID = 2516;
51 constexpr CLID LArEM_Base_ID_CLID = 166227018;
52 constexpr CLID LArHEC_Base_ID_CLID = 181654777;
53 constexpr CLID LArFCAL_Base_ID_CLID = 225948692;
54 constexpr CLID LArOnlineID_Base_CLID = 28598761;
55 constexpr CLID Tile_Base_ID_CLID = 241188216;
56 constexpr CLID CaloCell_Base_ID_CLID = 257140327;
57 constexpr CLID JGTowerBase_ID_CLID = 131336095;
58
59 ATH_CHECK(addToDetStore(117659265, "CaloTTMgr"));
60 ATH_CHECK(addToDetStore(4548337, "CaloMgr"));
61 ATH_CHECK(addToDetStore(241807251, "CaloSuperCellMgr"));
62 ATH_CHECK(addToDetStore(125856940, "CaloIdManager"));
63 // IdDict:
64 ATH_CHECK(addToDetStore(2411, "IdDict"));
65
66 // IdHelpers
67 ATH_CHECK(addToDetStore(164875623, "AtlasID"));
68 ATH_CHECK(addToDetStore(2516, "PixelID"));
69 ATH_CHECK(addToDetStore(2517, "SCT_ID"));
70
71 if (m_hasTRT)
72 ATH_CHECK(addToDetStore(2518, "TRT_ID"));
73
74 ATH_CHECK(addToDetStore(131939624, "PLR_ID", {PixelID_CLID}));
75 ATH_CHECK(addToDetStore(79264207, "HGTD_ID"));
76 ATH_CHECK(addToDetStore(129452393, "SiliconID"));
77 ATH_CHECK(addToDetStore(163583365, "LArEM_ID", {LArEM_Base_ID_CLID}));
78 ATH_CHECK(addToDetStore(99488227, "LArEM_SuperCell_ID", {LArEM_Base_ID_CLID}));
79 ATH_CHECK(addToDetStore(3870484, "LArHEC_ID", {LArHEC_Base_ID_CLID}));
80 ATH_CHECK(addToDetStore(254277678, "LArHEC_SuperCell_ID", {LArHEC_Base_ID_CLID}));
81 ATH_CHECK(addToDetStore(45738051, "LArFCAL_ID", {LArFCAL_Base_ID_CLID}));
82 ATH_CHECK(addToDetStore(12829437, "LArFCAL_SuperCell_ID", {LArFCAL_Base_ID_CLID}));
83 ATH_CHECK(addToDetStore(79264204, "LArMiniFCAL_ID"));
84 ATH_CHECK(addToDetStore(158698068, "LArOnlineID", {LArOnlineID_Base_CLID}));
85 ATH_CHECK(addToDetStore(38321944, "TTOnlineID"));
86 ATH_CHECK(addToDetStore(115600394, "LArOnline_SuperCellID", {LArOnlineID_Base_CLID}));
87 ATH_CHECK(addToDetStore(27863673, "LArHVLineID"));
88 ATH_CHECK(addToDetStore(80757351, "LArElectrodeID"));
89 ATH_CHECK(addToDetStore(2901, "TileID", {Tile_Base_ID_CLID}));
90 ATH_CHECK(addToDetStore(49557789, "Tile_SuperCell_ID", {Tile_Base_ID_CLID}));
91 ATH_CHECK(addToDetStore(2902, "TileHWID"));
92 ATH_CHECK(addToDetStore(2903, "TileTBID"));
93
94 if (m_hasMDT)
95 ATH_CHECK(addToDetStore(4170, "MDTIDHELPER"));
96 if (m_hasCSC)
97 ATH_CHECK(addToDetStore(4171, "CSCIDHELPER"));
98
99 if (m_hasRPC)
100 ATH_CHECK(addToDetStore(4172, "RPCIDHELPER"));
101 if (m_hasTGC)
102 ATH_CHECK(addToDetStore(4173, "TGCIDHELPER"));
103 if (m_hasSTGC)
104 ATH_CHECK(addToDetStore(4174, "STGCIDHELPER"));
105 if (m_hasMM)
106 ATH_CHECK(addToDetStore(4175, "MMIDHELPER"));
107
108 ATH_CHECK(addToDetStore(108133391, "CaloLVL1_ID"));
109 ATH_CHECK(addToDetStore(123500438, "CaloCell_ID", {CaloCell_Base_ID_CLID}));
110 ATH_CHECK(addToDetStore(128365736, "CaloCell_SuperCell_ID", {CaloCell_Base_ID_CLID}));
111 ATH_CHECK(addToDetStore(167756483, "CaloDM_ID"));
112 ATH_CHECK(addToDetStore(190591643, "ZdcID"));
113
114 // for J/GTower
115 ATH_CHECK(addToDetStore(218674799, "JTower_ID", {JGTowerBase_ID_CLID}));
116 ATH_CHECK(addToDetStore(49678914, "GTower_ID", {JGTowerBase_ID_CLID}));
117
118 return StatusCode::SUCCESS;
119}
120
121//-------------------------------------------------------------------------
122
125StatusCode DetDescrCnvSvc::createAddress(long /* svc_type */,
126 const CLID & /* clid */,
127 const std::string * /* par */,
128 const unsigned long * /* ip */,
129 IOpaqueAddress *&refpAddress) {
130 refpAddress = nullptr;
131 return StatusCode::FAILURE;
132}
133
134//-------------------------------------------------------------------------
135
136StatusCode DetDescrCnvSvc::createAddress(long /* svc_type */, const CLID &clid,
137 const std::string &refAddress,
138 IOpaqueAddress *&refpAddress) {
139 try {
140 refpAddress = new DetDescrAddress(clid);
141 DetDescrAddress *ddAddr;
142 ddAddr = dynamic_cast<DetDescrAddress *>(refpAddress);
143 if (!ddAddr) {
144 MsgStream log(msgSvc(), name());
145 log << MSG::FATAL << "Could not cast to DetDescrAddress." << endmsg;
146 return StatusCode::FAILURE;
147 }
148 if (ddAddr->fromString(refAddress).isFailure()) {
149 MsgStream log(msgSvc(), name());
150 log << MSG::FATAL << "Could not assign address " << refAddress
151 << endmsg;
152 return StatusCode::FAILURE;
153 }
154 } catch (...) {
155 refpAddress = 0;
156 }
157 return (refpAddress != 0) ? StatusCode::SUCCESS : StatusCode::FAILURE;
158}
159
160//-------------------------------------------------------------------------
161
162StatusCode DetDescrCnvSvc::convertAddress(const IOpaqueAddress *pAddress,
163 std::string &refAddress) {
164 const DetDescrAddress *addr =
165 dynamic_cast<const DetDescrAddress *>(pAddress);
166 if (!addr)
167 return StatusCode::FAILURE;
168 return addr->toString(refAddress);
169}
170
171//-------------------------------------------------------------------------
172
173StatusCode DetDescrCnvSvc::addToDetStore(const CLID &clid,
174 const std::string &name,
175 const std::vector<CLID>& bases /*= {}*/) 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
183 (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 ATH_CHECK(m_detStore->recordAddress(std::move(addr), true, bases));
189 return StatusCode::SUCCESS;
190}
#define endmsg
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x,...)
const long DetDescr_StorageType
uint32_t CLID
The Class ID type.
Simple smart pointer for Gaudi-style refcounted objects.
StatusCode fromString(const std::string &stringifiedIOA)
initialize technology-specific part of IOA from stringifiedIOA
StatusCode toString(std::string &refString) const
write technology-specific part of address to string
BooleanProperty m_hasTGC
BooleanProperty m_hasMM
BooleanProperty m_hasRPC
ServiceHandle< StoreGateSvc > m_detStore
BooleanProperty m_hasMDT
BooleanProperty m_hasCSC
Switch on/off the muon detectors.
virtual StatusCode initialize()
Initialize the service.
virtual StatusCode createAddress(long svc_type, const CLID &clid, const std::string *par, const unsigned long *ip, IOpaqueAddress *&refpAddress)
Basic create address.
DetDescrCnvSvc(const std::string &name, ISvcLocator *svc)
Standard Constructor.
BooleanProperty m_hasSTGC
virtual ~DetDescrCnvSvc()
Standard Destructor.
virtual StatusCode addToDetStore(const CLID &clid, const std::string &name, const std::vector< CLID > &bases={}) const
Add new address to the Detector Store.
BooleanProperty m_hasTRT
Switch on/off the TRT.
virtual StatusCode convertAddress(const IOpaqueAddress *pAddress, std::string &refAddress)
Convert address to string form.