ATLAS Offline Software
LArDigitContByteStreamCnv.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
9 #include "LArByteStream/Mon.h"
10 
11 
13 
18 #include "ByteStreamData/RawEvent.h"
19 
21 
23 #include "AthenaKernel/CLASS_DEF.h"
24 // For LATOME while no Condition alg exists
25 #include "LArLATOMEROBIDs.h"
26 
27 //STL-Stuff
28 #include <map>
29 #include <iostream>
30 
31 
33  AthConstConverter(storageType(), classID(),svcloc,"LArDigitContByteStreamCnv"),
34  m_tool("LArRawDataContByteStreamTool"),
35  m_scTool("LArLATOMEDecoder"),
36  m_rdpSvc("ROBDataProviderSvc", name()),
37  m_byteStreamEventAccess("ByteStreamCnvSvc", name()),
38  m_byteStreamCnvSvc(nullptr)
39 {}
40 
42 }
43 
46 }
47 
48 
51 {
53 
54  if ( m_rdpSvc.retrieve().isFailure()) {
55  ATH_MSG_WARNING( " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " );
56  }
57 
58  ATH_CHECK( m_byteStreamEventAccess.retrieve() );
60 
61  ATH_CHECK( m_tool.retrieve() );
62  ATH_CHECK( m_scTool.retrieve() );
63 
64  return StatusCode::SUCCESS;
65 }
66 
68 LArDigitContByteStreamCnv::createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj) const
69 {//Convert Digits from ByteStream to StoreGate
70  ATH_MSG_VERBOSE( "Executing CreateObj method for LArDigitContainer " );
71 
72  if (!m_rdpSvc) {
73  ATH_MSG_ERROR( " ROBDataProviderSvc not loaded. Can't read ByteStream." );
74  return StatusCode::FAILURE;
75  }
76  ByteStreamAddress *pRE_Addr;
77  pRE_Addr = dynamic_cast<ByteStreamAddress*>(pAddr); //Cast from OpaqueAddress to ByteStreamAddress
78  if (!pRE_Addr) {
79  ATH_MSG_ERROR( "dynamic_cast of OpaqueAdress to ByteStreamAddress failed!" );
80  return StatusCode::FAILURE;
81  }
82 
83  std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*> robFrags;
84  m_rdpSvc->getROBData( LArByteStream::s_allROBIDs_LATOME, robFrags );
85  const RawEvent* re = m_rdpSvc->getEvent( );
86  const std::string& key = *(pAddr->par()); // Get key used in the StoreGateSvc::retrieve function
87  // get gain and pass to convert function.
88  CaloGain::CaloGain gain=CaloGain::LARNGAIN; //At this place, LARNGAINS means Automatic gain.
89  bool isSC=false;
90  LArDigitContainer* adc_coll=0;
91  LArDigitContainer* adc_bas_coll=0;
92  LArRawSCContainer* et_coll=0;
93  LArRawSCContainer* et_id_coll=0;
94  LArLATOMEHeaderContainer* header_coll=0;
95 
96  if (key=="HIGH")
98  else if (key=="MEDIUM")
100  else if (key=="LOW")
102  else if (key=="SC"){
103  isSC=true;
104  adc_coll=new LArDigitContainer();
105  }
106  else if(key=="SC_ADC_BAS"){
107  isSC=true;
108  adc_bas_coll=new LArDigitContainer();
109  }
110 
111  // Convert the RawEvent to LArDigitContainer
112  ATH_MSG_DEBUG( "Converting LArDigits (from ByteStream). key=" << key << " ,gain=" << gain );
113  StatusCode sc;
114  if (!isSC) {//Regular readout
115  LArDigitContainer *DigitContainer=new LArDigitContainer;
116  sc=m_tool->convert(re,DigitContainer,gain);
117  if (sc!=StatusCode::SUCCESS)
118  ATH_MSG_WARNING( "Conversion tool returned an error. LArDigitContainer might be empty." );
119  pObj = SG::asStorable(DigitContainer) ;
120  return StatusCode::SUCCESS;
121  }
122 
123  //Supercell readout
124  sc=m_scTool->convert(robFrags,nullptr,adc_coll, adc_bas_coll, et_coll, et_id_coll, header_coll);
125  if (sc!=StatusCode::SUCCESS)
126  ATH_MSG_WARNING( "Conversion tool returned an error. LAr SC containers might be empty." );
127 
128  if (key=="SC"){
129  pObj = SG::asStorable(adc_coll);
130  }
131  else if(key=="SC_ADC_BAS"){
132  pObj = SG::asStorable(adc_bas_coll);
133  }
134 
135  return StatusCode::SUCCESS;
136 
137 }
138 
139 StatusCode
140 LArDigitContByteStreamCnv::createRepConst(DataObject* pObj, IOpaqueAddress*& pAddr) const
141 {// convert LArDigits from StoreGate into ByteStream
142  ATH_MSG_VERBOSE( "Execute CreateRep method of LArDigitContainer " );
143 
144  // Get Full Event Assembler
147 
148  LArDigitContainer* DigitContainer=0;
149  if (!SG::fromStorable (pObj, DigitContainer) || !DigitContainer) {
150  ATH_MSG_ERROR( "Cannot get LArDigitContainer for DataObject. Key=" << pObj->registry()->name() );
151  return StatusCode::FAILURE;
152  }
153 
154  std::string nm = pObj->registry()->name();
155  pAddr = new ByteStreamAddress(classID(),nm,"");
156 
157  ATH_CHECK( m_tool->WriteLArDigits(DigitContainer, *fea) );
158  return StatusCode::SUCCESS;
159 }
LArDigitContByteStreamCnv::classID
static const CLID & classID()
Definition: LArDigitContByteStreamCnv.cxx:44
LArDigitContByteStreamCnv.h
LArDigitContByteStreamCnv::~LArDigitContByteStreamCnv
virtual ~LArDigitContByteStreamCnv()
Definition: LArDigitContByteStreamCnv.cxx:41
LATOMEMapping.h
Tool to get LATOME SC and SCID mapping file and fill std::map variable with it.
LArDigitContByteStreamCnv::m_tool
ToolHandle< BYTESTREAMTOOL > m_tool
Definition: LArDigitContByteStreamCnv.h:55
FullEventAssembler
Template class for assembling a full atlas raw event from subfragments.
Definition: FullEventAssembler.h:40
LArDigitContByteStreamCnv::LArDigitContByteStreamCnv
LArDigitContByteStreamCnv(ISvcLocator *svcloc)
Definition: LArDigitContByteStreamCnv.cxx:32
LArDigitContByteStreamCnv::m_byteStreamEventAccess
ServiceHandle< IByteStreamEventAccess > m_byteStreamEventAccess
Definition: LArDigitContByteStreamCnv.h:58
SG::fromStorable
bool fromStorable(DataObject *pDObj, T *&pTrans, bool quiet=false, IRegisterTransient *irt=0, bool isConst=true)
Definition: StorableConversions.h:180
StorableConversions.h
convert to and from a SG storable
LArRawSCContainer
Container class for LArRawSC.
Definition: LArRawSCContainer.h:17
initialize
void initialize()
Definition: run_EoverP.cxx:894
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
RawEvent
OFFLINE_FRAGMENTS_NAMESPACE::FullEventFragment RawEvent
data type for reading raw event
Definition: RawEvent.h:37
LArRawDataContByteStreamTool.h
Helper tool for conversion of raw data classes to/from LArByteStream.
SG::asStorable
DataObject * asStorable(T *pObject)
Definition: StorableConversions.h:158
LArDigitContByteStreamCnv::initialize
virtual StatusCode initialize() override
Definition: LArDigitContByteStreamCnv.cxx:50
LArLATOMEHeaderContainer
Container class for LArLATOMEHeader.
Definition: LArLATOMEHeaderContainer.h:19
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
AthConstConverter
Gaudi converter base class with const interfaces.
Definition: AthConstConverter.h:33
CaloGain::LARNGAIN
@ LARNGAIN
Definition: CaloGain.h:19
LArLATOMEROBIDs.h
python.LArBadChannel2Ascii.isSC
isSC
Definition: LArBadChannel2Ascii.py:94
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
ClassID_traits::ID
static const CLID & ID()
the CLID of T
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:50
Mon.h
Tool to store LATOME mon header and footer data.
ByteStreamCnvSvc
Gaudi Conversion Service class for ByteStream Persistency.
Definition: ByteStreamCnvSvc.h:34
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
LArDigitContByteStreamCnv::createObjConst
virtual StatusCode createObjConst(IOpaqueAddress *pAddr, DataObject *&pObj) const override
Create the transient representation of an object.
Definition: LArDigitContByteStreamCnv.cxx:68
RawEvent.h
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
ByteStreamAddress
IOpaqueAddress for ByteStreamCnvSvc, with ROB ids.
Definition: ByteStreamAddress.h:28
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
LArDigitContByteStreamCnv::createRepConst
virtual StatusCode createRepConst(DataObject *pObj, IOpaqueAddress *&pAddr) const override
Convert the transient object to the requested representation.
Definition: LArDigitContByteStreamCnv.cxx:140
ByteStreamAddress.h
ByteStreamCnvSvc.h
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
LArDigitContByteStreamCnv::m_scTool
ToolHandle< LArLATOMEDecoder > m_scTool
Definition: LArDigitContByteStreamCnv.h:56
CaloGain::LARHIGHGAIN
@ LARHIGHGAIN
Definition: CaloGain.h:18
LArDigitContainer.h
CaloGain::CaloGain
CaloGain
Definition: CaloGain.h:11
LArDigitContByteStreamCnv::m_rdpSvc
ServiceHandle< IROBDataProviderSvc > m_rdpSvc
Definition: LArDigitContByteStreamCnv.h:57
CaloGain::LARMEDIUMGAIN
@ LARMEDIUMGAIN
Definition: CaloGain.h:18
CalibCoolCompareRT.nm
nm
Definition: CalibCoolCompareRT.py:110
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
re
const boost::regex re(r_e)
LArDigitContainer
Container class for LArDigit.
Definition: LArDigitContainer.h:24
ByteStreamCnvSvcBase.h
LArDigitContByteStreamCnv::m_byteStreamCnvSvc
ByteStreamCnvSvc * m_byteStreamCnvSvc
Definition: LArDigitContByteStreamCnv.h:59
ByteStreamCnvSvc::getFullEventAssembler
StatusCode getFullEventAssembler(T *&t, const std::string &nm)
Access to FullEventAssembler.
Definition: ByteStreamCnvSvc.h:121
LArLATOMEDecoder.h
Byte stream converter of LATOME.
CaloGain::LARLOWGAIN
@ LARLOWGAIN
Definition: CaloGain.h:18
CaloGain.h
CLASS_DEF.h
macros to associate a CLID to a type
IROBDataProviderSvc.h
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37