ATLAS Offline Software
TRT_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 "TRT_IDDetDescrCnv.h"
6 
9 #include "GaudiKernel/MsgStream.h"
10 #include "StoreGate/StoreGateSvc.h"
11 
14 #include "IdDict/IdDictMgr.h"
15 #include "InDetIdentifier/TRT_ID.h"
16 
17 
18 //--------------------------------------------------------------------
19 
20 long int
22 {
23  return (storageType());
24 }
25 
26 //--------------------------------------------------------------------
27 
30 {
32  return StatusCode::SUCCESS;
33 }
34 
35 //--------------------------------------------------------------------
36 
38 TRT_IDDetDescrCnv::createObj(IOpaqueAddress* /*pAddr*/, DataObject*& pObj)
39 {
40  // Get the dictionary manager from the detector store
41  const IdDictManager* idDictMgr;
42  ATH_CHECK( detStore()->retrieve(idDictMgr, "IdDict") );
43 
44  // Only initialize helper if it is the first pass or if there is a
45  // change in the the file or tag
46  bool initHelper = false;
47 
48  const IdDictMgr* mgr = idDictMgr->manager();
49 
50  // Internal InDet id tag
51  const std::string & inDetIDTag = mgr->tag();
52 
53  // DoChecks flag
54  bool doChecks = mgr->do_checks();
55 
56  IdDictDictionary* dict = mgr->find_dictionary("InnerDetector");
57  if (!dict) {
58  ATH_MSG_ERROR("unable to find idDict for InnerDetector");
59  return StatusCode::FAILURE;
60  }
61 
62  // File to be read for InDet ids
63  const std::string & inDetIDFileName = dict->file_name();
64 
65  // Tag of RDB record for InDet ids
66  const std::string & inDetIdDictTag = dict->dict_tag();
67 
68 
69  if (m_trtId) {
70 
71  // TRT id helper already exists - second pass. Check for a
72  // change
73  if (inDetIDTag != m_inDetIDTag) {
74  // Internal InDet id tag
75  initHelper = true;
76  ATH_MSG_DEBUG(" Changed internal InDet id tag: " << inDetIDTag);
77  }
78  if (inDetIDFileName != m_inDetIDFileName) {
79  // File to be read for InDet ids
80  initHelper = true;
81  ATH_MSG_DEBUG(" Changed InDetFileName:" << inDetIDFileName);
82  }
83  if (inDetIdDictTag != m_inDetIdDictTag) {
84  // Tag of RDB record for InDet ids
85  initHelper = true;
86  ATH_MSG_DEBUG(" Changed InDetIdDictTag: " << inDetIdDictTag);
87  }
88  if (doChecks != m_doChecks) {
89  // DoChecks flag
90  initHelper = true;
91  ATH_MSG_DEBUG(" Changed doChecks flag: " << doChecks);
92  }
93  }
94  else {
95  // create the helper
96  m_trtId = new TRT_ID;
97  initHelper = true;
98  // add in message service for printout
100  }
101 
102  if (initHelper) {
103  if (idDictMgr->initializeHelper(*m_trtId)) {
104  ATH_MSG_WARNING("Unable to initialize TRT_ID");
105  }
106  // Save state:
107  m_inDetIDTag = inDetIDTag;
108  m_inDetIDFileName = inDetIDFileName;
109  m_inDetIdDictTag = inDetIdDictTag;
110  m_doChecks = doChecks;
111  }
112 
113  // Pass a pointer to the container to the Persistency service by reference.
114  pObj = SG::asStorable(m_trtId);
115 
116  return StatusCode::SUCCESS;
117 
118 }
119 
120 //--------------------------------------------------------------------
121 
122 long
124 {
125  return DetDescr_StorageType;
126 }
127 
128 //--------------------------------------------------------------------
129 const CLID&
131  return ClassID_traits<TRT_ID>::ID();
132 }
133 
134 //--------------------------------------------------------------------
136  :
137  DetDescrConverter(ClassID_traits<TRT_ID>::ID(), svcloc, "TRT_IDDetDescrCnv"),
138  m_trtId(nullptr),
139  m_doChecks(false)
140 {}
141 
142 
143 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
IdDictMgr.h
TRT_IDDetDescrCnv::m_trtId
TRT_ID * m_trtId
The helper - only will create it once.
Definition: TRT_IDDetDescrCnv.h:35
AtlasDetectorID::setMessageSvc
virtual void setMessageSvc(IMessageSvc *msgSvc) override
Definition: AtlasDetectorID.cxx:491
DetDescr_StorageType
const long DetDescr_StorageType
Definition: DetDescrCnvSvc.cxx:20
ID
std::vector< Identifier > ID
Definition: CalibHitIDCheck.h:24
TRT_IDDetDescrCnv::m_inDetIDFileName
std::string m_inDetIDFileName
File to be read for InDet ids.
Definition: TRT_IDDetDescrCnv.h:38
IdDictDictionary.h
initialize
void initialize()
Definition: run_EoverP.cxx:894
TRT_IDDetDescrCnv::initialize
virtual StatusCode initialize() override
Definition: TRT_IDDetDescrCnv.cxx:29
TRT_IDDetDescrCnv.h
TRT_ID.h
This is an Identifier helper class for the TRT subdetector. This class is a factory for creating comp...
DetDescrAddress.h
IdDictManager.h
IdDictDictionary::file_name
const std::string & file_name() const
Access to file name.
Definition: IdDictDictionary.h:367
DetDescrConverter::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
Handle to DetectorStore.
Definition: DetDescrConverter.h:33
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
TRT_IDDetDescrCnv::storageType
static long storageType()
Definition: TRT_IDDetDescrCnv.cxx:123
SG::asStorable
DataObject * asStorable(SG::DataObjectSharedPtr< T > pObject)
Definition: DataObjectSharedPtr.h:31
TRT_IDDetDescrCnv::m_inDetIDTag
std::string m_inDetIDTag
Internal InDet id tag.
Definition: TRT_IDDetDescrCnv.h:44
IdDictMgr
Definition: IdDictMgr.h:15
DetDescrConverter
Definition: DetDescrConverter.h:25
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
TRT_IDDetDescrCnv::m_inDetIdDictTag
std::string m_inDetIdDictTag
Tag of RDB record for InDet ids.
Definition: TRT_IDDetDescrCnv.h:41
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:37
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
IdDictManager::initializeHelper
int initializeHelper(IdHelper &helper) const
Return value: 0 OK, >0 error.
Definition: IdDictManager.cxx:37
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
IdDictManager
IdDictManager is the interface to identifier dictionaries.
Definition: IdDictManager.h:26
IdDictDictionary
Definition: IdDictDictionary.h:30
TRT_IDDetDescrCnv::m_doChecks
bool m_doChecks
Whether or not.
Definition: TRT_IDDetDescrCnv.h:47
TRT_ID
Definition: TRT_ID.h:82
TRT_IDDetDescrCnv::createObj
virtual StatusCode createObj(IOpaqueAddress *pAddr, DataObject *&pObj) override
Definition: TRT_IDDetDescrCnv.cxx:38
IdDictDictionary::dict_tag
const std::string & dict_tag() const
Access to the dictionary tag.
Definition: IdDictDictionary.h:374
DetDescrConverter.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
IdDictManager::manager
const IdDictMgr * manager(void) const
Definition: IdDictManager.cxx:30
ClassID_traits::ID
static CLID ID()
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:44
TRT_IDDetDescrCnv::TRT_IDDetDescrCnv
TRT_IDDetDescrCnv(ISvcLocator *svcloc)
Definition: TRT_IDDetDescrCnv.cxx:135
StoreGateSvc.h
TRT_IDDetDescrCnv::repSvcType
virtual long int repSvcType() const override
Definition: TRT_IDDetDescrCnv.cxx:21
TRT_IDDetDescrCnv::classID
static const CLID & classID()
Definition: TRT_IDDetDescrCnv.cxx:130