ATLAS Offline Software
TRT_RDO_ContainerCnv.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "TRT_RDO_ContainerCnv.h"
6 
8 
9 #include <memory>
10 
11 #include <iostream>
12 
13 
14 //================================================================
15 namespace {
16  std::string shortPrint(const TRT_RDO_Container *main_input_TRT, unsigned maxprint=25) {
17  std::ostringstream os;
18  if(main_input_TRT) {
19  for(unsigned i=0; i<maxprint; i++) {
20  const auto* p = main_input_TRT->indexFindPtr(i);
21  if(p != nullptr) {
22  os<<" "<< p->size();
23  }
24  else {
25  os<<" *";
26  }
27  }
28  }
29  else {
30  os<<" [TRT_RDO_Container==NULL]";
31  }
32  return os.str();
33  }
34 }
35 //================================================================
37  ATH_MSG_INFO("TRT_RDO_ContainerCnv::initialize()");
38 
40  if (sc.isFailure()) {
41  ATH_MSG_FATAL("Cannot initialize cnv base !");
42  return StatusCode::FAILURE;
43  }
44 
45  // get StoreGate service. This is needed only for clients
46  // that register collections directly to the SG instead of adding
47  // them to the container.
48  sc = service("StoreGateSvc", m_storeGate);
49  if (sc.isFailure()) {
50  ATH_MSG_FATAL("StoreGate service not found !");
51  return StatusCode::FAILURE;
52  }
53 
54  // get DetectorStore service
55  StoreGateSvc *detStore(nullptr);
56  if (service("DetectorStore", detStore).isFailure()) {
57  ATH_MSG_FATAL("DetectorStore service not found !");
58  return StatusCode::FAILURE;
59  } else {
60  ATH_MSG_DEBUG("Found DetectorStore.");
61  }
62 
63  // Get the trt helper from the detector store
64  const TRT_ID* idhelper(nullptr);
65  if (detStore->retrieve(idhelper, "TRT_ID").isFailure()) {
66  ATH_MSG_FATAL("Could not get TRT_ID helper !");
67  return StatusCode::FAILURE;
68  } else {
69  ATH_MSG_DEBUG("Found the TRT_ID helper.");
70  }
71 
72  m_converter_p0.initialize(idhelper);
74  m_converter_TP1.initialize(idhelper);
75  m_converter_TP2.initialize(idhelper);
76  m_converter_TP3.initialize(idhelper);
77 
78  ATH_MSG_DEBUG("Converter initialized");
79 
80  return StatusCode::SUCCESS;
81 }
82 
83 //================================================================
85  ATH_MSG_DEBUG("createPersistent(): main converter. TRANS = "<<shortPrint(transCont));
86  // converter_num is a switch to determine which persistent type to use
87  // 1: if concrete type private data is equivalent to InDetRawData_p1
88  // 2: for cosmic/TB not implemented
89  //
90  unsigned int converter_num(1);
91  TRT_RDO_Container::const_iterator it_Coll = transCont->begin();
92  TRT_RDO_Container::const_iterator it_CollEnd = transCont->end();
93  // check one element of the container. The container can't be empty for this...
94  if(it_Coll != it_CollEnd) {
95  while (it_Coll != it_CollEnd && (*it_Coll)->size() == 0 ) ++it_Coll;
96  if(it_Coll != it_CollEnd) {
97  const TRT_RDORawData *test((**it_Coll)[0]);
98  if(dynamic_cast<const TRT_LoLumRawData*>(test) != nullptr ) {
99  ATH_MSG_DEBUG("Found container with TRT_LoLumRawData concrete type objects");
100  converter_num=1;
101  } else {
102  ATH_MSG_FATAL("Converter not implemented for this concrete type " );
103  throw "Converter not implemented";
104  }
105  } else {
106  ATH_MSG_WARNING("Container has only empty collections. Using TP1 converter");
107  }
108  } else {
109  ATH_MSG_WARNING("Empty container. Using TP1 converter");
110  }
111  // Switch facility depending on the concrete data type of the contained objects
112  // Should do by getting the type_info of one of the contained objects
113  TRT_RDO_Container_PERS *persObj(nullptr);
114  if(converter_num == 1) {
115  persObj = m_converter_PERS.createPersistent( transCont, msg() );
116  } else {
117  ATH_MSG_FATAL("This shouldn't happen!! ");
118  }
119  ATH_MSG_DEBUG("Success");
120  return persObj;
121 }
122 
123 //================================================================
125 
126  static const pool::Guid p0_guid("5DB01CED-F6FD-4866-A1C6-E046641E44F5"); // with TRT_LoLumRawData
127  static const pool::Guid p1_guid("CFBDB7A8-C788-4EE7-A260-3C8B680234FE"); // with TRT_RDORawData
128  static const pool::Guid TP1_guid("DA76970C-E019-43D2-B2F9-25660DCECD9D"); // for t/p separated version with InDetRawDataContainer_p1
129  static const pool::Guid TP2_guid("7138342E-0A80-4A32-A387-2842A01C2539"); // for t/p separated version with InDetRawDataContainer_p2
130  static const pool::Guid TP3_guid("D0313948-9BC8-415F-BE58-7BA8178F93CD"); // for t/p separated version with InDetRawDataContainer_p3
131  ATH_MSG_DEBUG("createTransient(): main converter");
132 
133  if( compareClassGuid(TP3_guid) ) {
134  ATH_MSG_DEBUG("createTransient(): New TP version - TP3 branch");
135  std::unique_ptr< InDetRawDataContainer_p3 > col_vect( poolReadObject< InDetRawDataContainer_p3 >() );
136  TRT_RDO_Container *res = m_converter_TP3.createTransient( col_vect.get(), msg() );
137  ATH_MSG_DEBUG("createTransient(), TP3 branch: returns TRANS = "<<shortPrint(res));
138  return res;
139  }
140  else if( compareClassGuid(TP2_guid) ) {
141  ATH_MSG_DEBUG("createTransient(): New TP version - TP2 branch");
142  std::unique_ptr< InDetRawDataContainer_p2 > col_vect( poolReadObject< InDetRawDataContainer_p2 >() );
143  TRT_RDO_Container *res = m_converter_TP2.createTransient( col_vect.get(), msg() );
144  ATH_MSG_DEBUG("createTransient(), TP2 branch: returns TRANS = "<<shortPrint(res));
145  return res;
146  }
147  else if( compareClassGuid(TP1_guid) ) {
148  ATH_MSG_DEBUG("createTransient(): New TP version - TP1 branch");
149  std::unique_ptr< InDetRawDataContainer_p1 > col_vect( poolReadObject< InDetRawDataContainer_p1 >() );
150  TRT_RDO_Container *res = m_converter_TP1.createTransient( col_vect.get(), msg() );
151  ATH_MSG_DEBUG("createTransient(), TP1 branch: returns TRANS = "<<shortPrint(res));
152  return res;
153  }
154  else if( compareClassGuid(p1_guid) ) {
155  ATH_MSG_DEBUG("createTransient(): New input file - p1 branch");
156  std::unique_ptr< TRT_RDO_Container_p1 > col_vect( poolReadObject< TRT_RDO_Container_p1 >() );
157  TRT_RDO_Container *res = m_converter_p1.createTransient( col_vect.get(), msg() );
158  ATH_MSG_DEBUG("createTransient(), p1 branch: returns TRANS = "<<shortPrint(res));
159  return res;
160  }
161  else if( compareClassGuid(p0_guid) ) {
162  ATH_MSG_DEBUG("createTransient(): Old input file - p0 branch");
163  std::unique_ptr< TRT_RDO_Container_p0 > col_vect( poolReadObject< TRT_RDO_Container_p0 >() );
164  TRT_RDO_Container *res = m_converter_p0.createTransient( col_vect.get(), msg() );
165  ATH_MSG_DEBUG("createTransient(), p0 branch: returns TRANS = "<<shortPrint(res));
166  return res;
167  }
168  throw std::runtime_error("Unsupported persistent version of TRT_RDO_Container");
169 }
170 
171 //================================================================
TRT_LoLumRawDataContainerCnv_p3::createTransient
virtual TRT_RDO_Container * createTransient(const InDetRawDataContainer_p3 *persObj, MsgStream &log)
Definition: TRT_LoLumRawDataContainerCnv_p3.cxx:256
TRT_RDO_ContainerCnv_p1::initialize
void initialize(const TRT_ID *idhelper, StoreGateSvc *sg)
Definition: TRT_RDO_ContainerCnv_p1.h:30
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TRT_LoLumRawData
Definition: TRT_LoLumRawData.h:25
TRT_RDO_ContainerCnv::m_converter_TP1
TRT_LoLumRawDataContainerCnv_p1 m_converter_TP1
Definition: TRT_RDO_ContainerCnv.h:36
TRT_RDO_ContainerCnv::m_converter_TP3
TRT_LoLumRawDataContainerCnv_p3 m_converter_TP3
Definition: TRT_RDO_ContainerCnv.h:38
TRT_ID.h
This is an Identifier helper class for the TRT subdetector. This class is a factory for creating comp...
InDetRawDataContainer_p3
Definition: InDetRawDataContainer_p3.h:19
TRT_RDO_ContainerCnv::createPersistent
virtual TRT_RDO_Container_PERS * createPersistent(TRT_RDO_Container *transCont)
Definition: TRT_RDO_ContainerCnv.cxx:84
TrigInDetValidation_Base.test
test
Definition: TrigInDetValidation_Base.py:144
InDetRawDataContainer
Definition: InDetRawDataContainer.h:27
TRT_LoLumRawDataContainerCnv_p2::initialize
void initialize(const TRT_ID *idhelper)
Definition: TRT_LoLumRawDataContainerCnv_p2.h:42
TPAbstractPolyCnvBase::createPersistent
virtual PERS * createPersistent(const TRANS *transObj, MsgStream &log)
Create persistent representation of a transient object.
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
TRT_RDORawData
Definition: TRT_RDORawData.h:24
TRT_RDO_ContainerCnv::m_converter_p1
TRT_RDO_ContainerCnv_p1 m_converter_p1
Definition: TRT_RDO_ContainerCnv.h:34
pool::Guid
::Guid Guid
Definition: T_AthenaPoolCustCnv.h:19
TRT_RDO_ContainerCnv::m_converter_p0
TRT_RDO_ContainerCnv_p0 m_converter_p0
Definition: TRT_RDO_ContainerCnv.h:35
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:128
TRT_RDO_ContainerCnv_p1::createTransient
virtual TRT_RDO_Container * createTransient(const TRT_RDO_Container_p1 *persObj, MsgStream &log)
Definition: TRT_RDO_ContainerCnv_p1.cxx:127
lumiFormat.i
int i
Definition: lumiFormat.py:92
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TRT_LoLumRawDataContainerCnv_p2::createTransient
virtual TRT_RDO_Container * createTransient(const InDetRawDataContainer_p2 *persObj, MsgStream &log)
Definition: TRT_LoLumRawDataContainerCnv_p2.cxx:137
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRT_LoLumRawDataContainerCnv_p1::initialize
void initialize(const TRT_ID *idhelper)
Definition: TRT_LoLumRawDataContainerCnv_p1.h:42
TRT_RDO_ContainerCnv::m_converter_TP2
TRT_LoLumRawDataContainerCnv_p2 m_converter_TP2
Definition: TRT_RDO_ContainerCnv.h:37
TRT_RDO_ContainerCnv_p0::initialize
void initialize(const TRT_ID *idhelper)
Definition: TRT_RDO_ContainerCnv_p0.h:35
TRT_LoLumRawDataContainerCnv_p1::createTransient
virtual TRT_RDO_Container * createTransient(const InDetRawDataContainer_p1 *persObj, MsgStream &log)
Definition: TRT_LoLumRawDataContainerCnv_p1.cxx:137
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:14
IdentifiableContainerMT::end
const_iterator end() const
return const_iterator for end of container
Definition: IdentifiableContainerMT.h:242
IdentifiableContainerMT::const_iterator
Definition: IdentifiableContainerMT.h:82
IdentifiableContainerMT::begin
const_iterator begin() const
return const_iterator for first entry
Definition: IdentifiableContainerMT.h:236
TRT_RDO_ContainerCnv.h
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
AthMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AthMessaging.h:164
TRT_RDO_ContainerCnv::m_converter_PERS
TRT_RDO_ContainerCnv_PERS m_converter_PERS
Definition: TRT_RDO_ContainerCnv.h:39
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
TRT_RDO_ContainerCnv::initialize
virtual StatusCode initialize()
Gaudi Service Interface method implementations:
Definition: TRT_RDO_ContainerCnv.cxx:36
TRT_LoLumRawDataContainerCnv_p3::initialize
void initialize(const TRT_ID *idhelper)
Definition: TRT_LoLumRawDataContainerCnv_p3.h:42
TRT_RDO_ContainerCnv::createTransient
virtual TRT_RDO_Container * createTransient()
Definition: TRT_RDO_ContainerCnv.cxx:124
IdentifiableContainerMT::indexFindPtr
virtual const T * indexFindPtr(IdentifierHash hashId) const override final
return pointer on the found entry or null if out of range using hashed index - fast version,...
Definition: IdentifiableContainerMT.h:292
TRT_ID
Definition: TRT_ID.h:84
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TRT_RDO_ContainerCnv::m_storeGate
StoreGateSvc * m_storeGate
Definition: TRT_RDO_ContainerCnv.h:42
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:
TRT_RDO_ContainerCnv_p0::createTransient
virtual TRT_RDO_Container * createTransient(const TRT_RDO_Container_p0 *persObj, MsgStream &log)
Definition: TRT_RDO_ContainerCnv_p0.cxx:19