ATLAS Offline Software
Loading...
Searching...
No Matches
DetDescrCnvSvc.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 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 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
112StatusCode DetDescrCnvSvc::createAddress(long /* svc_type */,
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
123StatusCode 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
149StatusCode 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
160StatusCode DetDescrCnvSvc::addToDetStore(const CLID &clid,
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
169 (new DetDescrAddress(clid, name, name));
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 ATH_CHECK(m_detStore->recordAddress(std::move(addr)));
175 return StatusCode::SUCCESS;
176}
#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
virtual StatusCode addToDetStore(const CLID &clid, const std::string &name) const
Add new address to the Detector Store.
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 convertAddress(const IOpaqueAddress *pAddress, std::string &refAddress)
Convert address to string form.