ATLAS Offline Software
LArDigitContainerCnv.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 "LArDigitContainerCnv.h"
14 #include "StoreGate/StoreGateSvc.h"
15 #include <memory>
16 
19  m_p0_guid("B15FFDA0-206D-4062-8B5F-582A1ECD5502"),
20  m_p1_guid("F1876026-CDFE-4110-AA59-E441BAA5DE44"),
21  m_p2_guid("66F5B7Af-595C-4F79-A2B7-56590777C313"),
22  m_p3_guid("24480EBA-1AF1-4646-95A7-11285F09717C")
23 {}
24 
25 
27 
28  MsgStream log(msgSvc(), "LArDigitContainerCnv");
29  StoreGateSvc *detStore=nullptr;
30  StatusCode sc=service("DetectorStore",detStore);
31  if (sc.isFailure()) {
32  log << MSG::FATAL << "DetectorStore service not found !" << endmsg;
33  return StatusCode::FAILURE;
34  }
35 
36  const LArOnlineID* idHelper=nullptr;
37  sc=detStore->retrieve(idHelper,"LArOnlineID");
38  if (sc.isFailure()) {
39  log << MSG::FATAL << "Could not retrieve LArOnlineID helper from Detector Store" << endmsg;
40  return StatusCode::FAILURE;
41  }
42  m_idHelper=idHelper;//cast to base-class
43 
44  const LArOnline_SuperCellID* idSCHelper=nullptr;
45  sc=detStore->retrieve(idSCHelper,"LArOnline_SuperCellID");
46  if (sc.isFailure()) {
47  log << MSG::FATAL << "Could not retrieve LArOnline_SuperCellID helper from Detector Store" << endmsg;
48  return StatusCode::FAILURE;
49  }
50  m_idSCHelper=idSCHelper;//cast to base-class
51 
52  sc=service("StoreGateSvc",m_storeGateSvc);
53  if (sc.isFailure()) {
54  log << MSG::FATAL << "StoreGate service not found !" << endmsg;
55  return StatusCode::FAILURE;
56  }
57 
59 }
60 
61 
63  MsgStream log(msgSvc(), "LArDigitContainerCnv");
64  log << MSG::DEBUG << "Writing LArDigitContainer_p3" << endmsg;
67  converter.transToPers(trans,pers,log);
68  return pers;
69 }
70 
71 
73  MsgStream log(msgSvc(), "LArDigitContainerCnv" );
75  log << MSG::DEBUG << "Read version p0 of LArDigitContainer. GUID="
76  << m_classID.toString() << endmsg;
77  return poolReadObject<LArDigitContainer>();
78  }
79  else if (compareClassGuid(m_p1_guid)) {
80  log << MSG::DEBUG << "Reading LArDigitContainer_p1. GUID="
81  << m_classID.toString() << endmsg;
83  std::unique_ptr<LArDigitContainer_p1> pers(poolReadObject<LArDigitContainer_p1>());
84  LArDigitContainerCnv_p1 converter;
85  converter.persToTrans(pers.get(),trans, log);
86  return trans;
87  }
88  else if (compareClassGuid(m_p2_guid)) {
89  log << MSG::DEBUG << "Reading LArDigitContainer_p2. GUID="
90  << m_classID.toString() << endmsg;
92  std::unique_ptr<LArDigitContainer_p2> pers(poolReadObject<LArDigitContainer_p2>());
94  converter.persToTrans(pers.get(),trans, log);
95  return trans;
96  }
97  else if (compareClassGuid(m_p3_guid)) {
98  log << MSG::DEBUG << "Reading LArDigitContainer_p3. GUID="
99  << m_classID.toString() << endmsg;
101  std::unique_ptr<LArDigitContainer_p3> pers(poolReadObject<LArDigitContainer_p3>());
103  converter.persToTrans(pers.get(),trans, log);
104  return trans;
105  }
106  log << MSG::ERROR << "Unsupported persistent version of LArDigitContainer. GUID="
107  << m_classID.toString() << endmsg;
108  throw std::runtime_error("Unsupported persistent version of Data Collection");
109  // not reached
110 }
LArDigitContainerCnv_p3::transToPers
virtual void transToPers(const LArDigitContainer *trans, LArDigitContainer_p3 *pers, MsgStream &log) const override
Definition: LArDigitContainerCnv_p3.cxx:82
LArDigitContainerCnv_p2::persToTrans
virtual void persToTrans(const LArDigitContainer_p2 *pers, LArDigitContainer *trans, MsgStream &log) const override
Definition: LArDigitContainerCnv_p2.cxx:37
T_AthenaPoolCustCnv::m_classID
Guid m_classID
Definition: T_AthenaPoolCustCnv.h:96
LArDigitContainerCnv_p1.h
LArDigitContainerCnv_p3
Definition: LArDigitContainerCnv_p3.h:17
LArDigitContainerCnv::m_storeGateSvc
const StoreGateSvc * m_storeGateSvc
Definition: LArDigitContainerCnv.h:36
LArDigitContainerCnv.h
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:19
LArDigitContainerCnv_p1
Definition: LArDigitContainerCnv_p1.h:16
Guid::toString
const std::string toString() const
Automatic conversion to string representation.
Definition: Guid.cxx:58
LArDigitContainerCnv::LArDigitContainerCnv
LArDigitContainerCnv(ISvcLocator *)
Definition: LArDigitContainerCnv.cxx:17
LArDigitContainerCnv::initialize
StatusCode initialize()
Gaudi Service Interface method implementations:
Definition: LArDigitContainerCnv.cxx:26
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
LArDigitContainerCnv::createTransient
virtual LArDigitContainer * createTransient()
Definition: LArDigitContainerCnv.cxx:72
LArDigitContainerCnv_p3::persToTrans
virtual void persToTrans(const LArDigitContainer_p3 *pers, LArDigitContainer *trans, MsgStream &log) const override
Definition: LArDigitContainerCnv_p3.cxx:43
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:128
LArDigitContainerCnv::m_p3_guid
pool::Guid m_p3_guid
Definition: LArDigitContainerCnv.h:33
LArDigitContainer_p3.h
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
LArDigitContainerCnv::createPersistent
virtual LArDigitContainerPERS * createPersistent(LArDigitContainer *)
Definition: LArDigitContainerCnv.cxx:62
T_AthenaPoolCustomCnv
Compatibility for old converter classes that don't get passed the key.
Definition: T_AthenaPoolCustomCnv.h:132
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
LArDigitContainerPERS
LArDigitContainer_p3 LArDigitContainerPERS
Definition: LArDigitContainerCnv.h:15
LArDigitContainer_p2.h
LArDigitContainerCnv::m_p1_guid
pool::Guid m_p1_guid
Definition: LArDigitContainerCnv.h:31
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
LArDigitContainer_p1.h
LArOnlineID
Definition: LArOnlineID.h:20
LArOnline_SuperCellID
Definition: LArOnline_SuperCellID.h:20
LArDigitContainerCnv_p1::persToTrans
virtual void persToTrans(const LArDigitContainer_p1 *pers, LArDigitContainer *trans, MsgStream &log) const override
Definition: LArDigitContainerCnv_p1.cxx:13
LArDigitContainerCnv_p2.h
LArDigitContainerCnv_p3.h
LArDigitContainerCnv::m_p0_guid
pool::Guid m_p0_guid
Definition: LArDigitContainerCnv.h:30
LArDigitContainerCnv::m_idHelper
const LArOnlineID_Base * m_idHelper
Definition: LArDigitContainerCnv.h:34
DEBUG
#define DEBUG
Definition: page_access.h:11
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
LArDigitContainer
Container class for LArDigit.
Definition: LArDigitContainer.h:24
LArDigitContainerCnv::m_p2_guid
pool::Guid m_p2_guid
Definition: LArDigitContainerCnv.h:32
LArOnline_SuperCellID.h
LArDigitContainerCnv::m_idSCHelper
const LArOnlineID_Base * m_idSCHelper
Definition: LArDigitContainerCnv.h:35
T_AthenaPoolCustCnv::compareClassGuid
virtual bool compareClassGuid(const Guid &clid) const
Compare POOL class GUID with the one of the object being read.
LArDigitContainer_p3
Definition: LArDigitContainer_p3.h:10
T_AthenaPoolCustCnv::initialize
virtual StatusCode initialize()
Gaudi Service Interface method implementations:
StoreGateSvc.h
LArOnlineID.h
LArDigitContainerCnv_p2
Definition: LArDigitContainerCnv_p2.h:16