ATLAS Offline Software
TRT_DriftCircleContainerCnv.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 
8 #include <memory>
9 
10 #include <iostream>
11 
13  : TRT_DriftCircleContainerCnvBase(svcloc, "TRT_DriftCircleContainerCnv"),
14  m_converter_p0(),
15  m_storeGate(nullptr)
16  {}
17 
18 
20  ATH_MSG_INFO("TRT_DriftCircleContainerCnv::initialize()");
21 
23  if (sc.isFailure()) {
24  ATH_MSG_FATAL("Cannot initialize cnv base !");
25  return StatusCode::FAILURE;
26  }
27 
28  // get StoreGate service. This is needed only for clients
29  // that register collections directly to the SG instead of adding
30  // them to the container.
31  sc = service("StoreGateSvc", m_storeGate);
32  if (sc.isFailure()) {
33  ATH_MSG_FATAL("StoreGate service not found !");
34  return StatusCode::FAILURE;
35  }
36 
37  // get DetectorStore service
38  StoreGateSvc *detStore(nullptr);
39  if (service("DetectorStore", detStore).isFailure()) {
40  ATH_MSG_FATAL("DetectorStore service not found !");
41  return StatusCode::FAILURE;
42  } else {
43  ATH_MSG_DEBUG("Found DetectorStore.");
44  }
45 
46  // Get the trt helper from the detector store
47  const TRT_ID* idhelper(nullptr);
48  if (detStore->retrieve(idhelper, "TRT_ID").isFailure()) {
49  ATH_MSG_FATAL("Could not get TRT_ID helper !");
50  return StatusCode::FAILURE;
51  } else {
52  ATH_MSG_DEBUG("Found the TRT_ID helper.");
53  }
54 
55  if (m_converter_p0.initialize(msg()).isFailure())
56  {
57  ATH_MSG_FATAL("Could not initialize converter!");
58  return StatusCode::FAILURE;
59  }
60 
61  ATH_MSG_DEBUG("Converter initialized");
62 
63  return StatusCode::SUCCESS;
64 }
65 
66 
68 
69  static const pool::Guid p0_guid("A99630C5-3D7C-4DB4-9E6C-FC3CEF981895"); // before t/p split
70  static const pool::Guid p1_guid("42B48D79-AF4E-4D45-AAA9-A2BA5A033534"); // with TRT_DriftCircle_tlp1
71  static const pool::Guid p2_guid("36195EDE-941C-424B-81A1-E04C867C35D8"); // with TRT_DriftCircle_p2
72  ATH_MSG_DEBUG("createTransient(): main converter");
73  InDet::TRT_DriftCircleContainer* p_collection(nullptr);
74  if( compareClassGuid(p2_guid) ) {
75  ATH_MSG_DEBUG("createTransient(): T/P version 2 detected");
76  std::unique_ptr< InDet::TRT_DriftCircleContainer_p2 > col_vect( poolReadObject< InDet::TRT_DriftCircleContainer_p2 >() );
77  ATH_MSG_DEBUG("Delegate TP converter ");
78  p_collection = m_TPConverter2.createTransient( col_vect.get(), msg() );
79  }
80  else if( compareClassGuid(p1_guid) ) {
81  ATH_MSG_DEBUG("createTransient(): T/P version 1 detected");
82  std::unique_ptr< InDet::TRT_DriftCircleContainer_tlp1 > p_coll( poolReadObject< InDet::TRT_DriftCircleContainer_tlp1 >() );
83  p_collection = m_TPConverter.createTransient( p_coll.get(), msg() );
84  }
85  //----------------------------------------------------------------
86  else if( compareClassGuid(p0_guid) ) {
87  ATH_MSG_DEBUG("createTransient(): Old input file");
88  std::unique_ptr< TRT_DriftCircleContainer_p0 > col_vect( poolReadObject< TRT_DriftCircleContainer_p0 >() );
89  p_collection = m_converter_p0.createTransient( col_vect.get(), msg() );
90  }
91  else {
92  throw std::runtime_error("Unsupported persistent version of TRT_DriftCircleContainer");
93 
94  }
95  return p_collection;
96 }
97 
98 
101  return trtdc_p;
102 }
103 
104 
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
InDet::TRT_DriftCircleContainer_p2
Definition: TRT_DriftCircleContainer_p2.h:21
TRT_DriftCircleContainerCnv::createTransient
virtual InDet::TRT_DriftCircleContainer * createTransient()
Definition: TRT_DriftCircleContainerCnv.cxx:67
TRT_DriftCircleContainerCnv::TRT_DriftCircleContainerCnv
TRT_DriftCircleContainerCnv(ISvcLocator *svcloc)
Definition: TRT_DriftCircleContainerCnv.cxx:12
TRT_ID.h
This is an Identifier helper class for the TRT subdetector. This class is a factory for creating comp...
TRT_DriftCircleContainerCnv::m_storeGate
StoreGateSvc * m_storeGate
Definition: TRT_DriftCircleContainerCnv.h:34
TPAbstractPolyCnvBase::createPersistent
virtual PERS * createPersistent(const TRANS *transObj, MsgStream &log)
Create persistent representation of a transient object.
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
pool::Guid
::Guid Guid
Definition: T_AthenaPoolCustCnv.h:19
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:128
TopLevelTPConverter::createTransient
TRANS * createTransient(MsgStream &log)
Create transient representation of the persistent object known to this converter.
Definition: TopLevelTPConverter.h:62
T_AthenaPoolCustomCnv
Compatibility for old converter classes that don't get passed the key.
Definition: T_AthenaPoolCustomCnv.h:132
TRT_DriftCircleContainerCnv::m_TPConverter
TRT_DriftCircleContainerCnv_tlp1 m_TPConverter
Definition: TRT_DriftCircleContainerCnv.h:30
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
TRT_DriftCircleContainerCnv.h
TRT_DriftCircleContainerCnv::m_TPConverter2
TRT_DriftCircleContainerCnv_p2 m_TPConverter2
Definition: TRT_DriftCircleContainerCnv.h:31
TRT_DriftCircleContainerCnv_p2::createTransient
virtual InDet::TRT_DriftCircleContainer * createTransient(const InDet::TRT_DriftCircleContainer_p2 *persObj, MsgStream &log)
Definition: TRT_DriftCircleContainerCnv_p2.cxx:200
AthMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AthMessaging.h:164
InDet::TRT_DriftCircleContainer
Trk::PrepRawDataContainer< TRT_DriftCircleCollection > TRT_DriftCircleContainer
Definition: TRT_DriftCircleContainer.h:27
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
TRT_DriftCircleContainerCnv_p0::createTransient
virtual InDet::TRT_DriftCircleContainer * createTransient(const TRT_DriftCircleContainer_p0 *, MsgStream &) override
Definition: TRT_DriftCircleContainerCnv_p0.h:38
TRT_DriftCircleContainerCnv::m_converter_p0
TRT_DriftCircleContainerCnv_p0 m_converter_p0
Definition: TRT_DriftCircleContainerCnv.h:29
TRT_ID
Definition: TRT_ID.h:84
TRT_DriftCircleContainerCnv::initialize
virtual StatusCode initialize()
Gaudi Service Interface method implementations:
Definition: TRT_DriftCircleContainerCnv.cxx:19
TRT_DriftCircleContainerCnv::createPersistent
virtual TRT_DriftCircleContainer_PERS * createPersistent(InDet::TRT_DriftCircleContainer *transCont)
Definition: TRT_DriftCircleContainerCnv.cxx:99
TRT_DriftCircleContainerCnv_p0::initialize
StatusCode initialize(MsgStream &log)
Definition: TRT_DriftCircleContainerCnv_p0.cxx:26
T_AthenaPoolCustCnv::compareClassGuid
virtual bool compareClassGuid(const Guid &clid) const
Compare POOL class GUID with the one of the object being read.
T_AthenaPoolCustCnv::initialize
virtual StatusCode initialize()
Gaudi Service Interface method implementations: