ATLAS Offline Software
Loading...
Searching...
No Matches
SCT_IDDetDescrCnv.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 "SCT_IDDetDescrCnv.h"
6
9#include "GaudiKernel/MsgStream.h"
11
14#include "IdDict/IdDictMgr.h"
16
17
18//--------------------------------------------------------------------
19
20long int
22{
23 return (storageType());
24}
25
26//--------------------------------------------------------------------
27
28StatusCode
30{
31 // First call parent init
32 ATH_CHECK( DetDescrConverter::initialize() );
33 return StatusCode::SUCCESS;
34}
35
36//--------------------------------------------------------------------
37
38StatusCode
39SCT_IDDetDescrCnv::createObj(IOpaqueAddress* /*pAddr*/, DataObject*& pObj)
40{
41 // Get the dictionary manager from the detector store
42 const IdDictManager* idDictMgr;
43 ATH_CHECK( detStore()->retrieve(idDictMgr, "IdDict") );
44
45 // Only create new helper if it is the first pass or if there is a
46 // change in the the file or tag
47 bool initHelper = false;
48
49 const IdDictMgr* mgr = idDictMgr->manager();
50
51 // Internal InDet id tag
52 const std::string & inDetIDTag = mgr->tag();
53
54 // DoChecks flag
55 bool doChecks = mgr->do_checks();
56
57 const IdDictDictionary* dict = mgr->find_dictionary("InnerDetector");
58 if (!dict) {
59 ATH_MSG_ERROR("unable to find idDict for InnerDetector");
60 return StatusCode::FAILURE;
61 }
62
63 // File to be read for InDet ids
64 const std::string & inDetIDFileName = dict->file_name();
65
66 // Tag of RDB record for InDet ids
67 const std::string & inDetIdDictTag = dict->dict_tag();
68
69
70 if (m_sctId) {
71
72 // SCT id helper already exists - second pass. Check for a
73 // change
74 if (inDetIDTag != m_inDetIDTag) {
75 // Internal InDet id tag
76 initHelper = true;
77 ATH_MSG_DEBUG(" Changed internal InDet id tag: " << inDetIDTag);
78 }
79 if (inDetIDFileName != m_inDetIDFileName) {
80 // File to be read for InDet ids
81 initHelper = true;
82 ATH_MSG_DEBUG(" Changed InDetFileName:" << inDetIDFileName);
83 }
84 if (inDetIdDictTag != m_inDetIdDictTag) {
85 // Tag of RDB record for InDet ids
86 initHelper = true;
87 ATH_MSG_DEBUG(" Changed InDetIdDictTag: " << inDetIdDictTag);
88 }
89 if (doChecks != m_doChecks) {
90 // DoChecks flag
91 initHelper = true;
92 ATH_MSG_DEBUG(" Changed doChecks flag: " << doChecks);
93 }
94 }
95 else {
96 // create the helper
97 m_sctId = new SCT_ID;
98 initHelper = true;
99 }
100
101 if (initHelper) {
102 ATH_CHECK( idDictMgr->initializeHelper(*m_sctId) == 0 );
103 // Save state:
104 m_inDetIDTag = inDetIDTag;
105 m_inDetIDFileName = inDetIDFileName;
106 m_inDetIdDictTag = inDetIdDictTag;
107 m_doChecks = doChecks;
108 }
109
110 // Pass a pointer to the container to the Persistency service by reference.
111 pObj = SG::asStorable(m_sctId);
112
113 return StatusCode::SUCCESS;
114
115}
116
117//--------------------------------------------------------------------
118
119long
124
125//--------------------------------------------------------------------
126const CLID&
130
131//--------------------------------------------------------------------
133 :
134 DetDescrConverter(ClassID_traits<SCT_ID>::ID(), svcloc, "SCT_IDDetDescrCnv"),
135 m_sctId(nullptr),
136 m_doChecks(false)
137
138{}
139
140
141
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
std::vector< Identifier > ID
const long DetDescr_StorageType
uint32_t CLID
The Class ID type.
This is an Identifier helper class for the SCT subdetector.
DetDescrConverter(const CLID &myCLID, ISvcLocator *svcloc, const char *name=nullptr)
const ServiceHandle< StoreGateSvc > & detStore() const
Handle to DetectorStore.
IdDictManager is the interface to identifier dictionaries.
const IdDictMgr * manager(void) const
int initializeHelper(IdHelper &helper) const
Return value: 0 OK, >0 error.
std::string m_inDetIdDictTag
Tag of RDB record for InDet ids.
static const CLID & classID()
std::string m_inDetIDTag
Internal InDet id tag.
std::string m_inDetIDFileName
File to be read for InDet ids.
bool m_doChecks
Whether or not.
virtual long int repSvcType() const override
SCT_ID * m_sctId
The helper - only will create it once.
SCT_IDDetDescrCnv(ISvcLocator *svcloc)
virtual StatusCode initialize() override
virtual StatusCode createObj(IOpaqueAddress *pAddr, DataObject *&pObj) override
This is an Identifier helper class for the SCT subdetector.
Definition SCT_ID.h:68
DataObject * asStorable(SG::DataObjectSharedPtr< T > pObject)
Default, invalid implementation of ClassID_traits.