ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
LArCalorimeter
LArCnv
LArByteStream
src
LArDigitContByteStreamCnv.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
LArByteStream/LArDigitContByteStreamCnv.h
"
6
#include "
LArByteStream/LArRawDataContByteStreamTool.h
"
7
#include "
LArByteStream/LArLATOMEDecoder.h
"
8
#include "
LArByteStream/LATOMEMapping.h
"
9
#include "
LArByteStream/Mon.h
"
10
11
12
#include "
CaloIdentifier/CaloGain.h
"
13
14
#include "
ByteStreamCnvSvcBase/IByteStreamCnvSvc.h
"
15
#include "
ByteStreamCnvSvcBase/ByteStreamCnvSvcBase.h
"
16
#include "
ByteStreamCnvSvcBase/ByteStreamAddress.h
"
17
#include "
ByteStreamCnvSvcBase/IROBDataProviderSvc.h
"
18
#include "
ByteStreamData/RawEvent.h
"
19
20
#include "
LArRawEvent/LArDigitContainer.h
"
21
22
#include "
AthenaKernel/StorableConversions.h
"
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
32
LArDigitContByteStreamCnv::LArDigitContByteStreamCnv
(ISvcLocator* svcloc) :
33
AthConstConverter
(
storageType
(),
classID
(),svcloc,
"LArDigitContByteStreamCnv"
),
34
m_tool
(
"LArRawDataContByteStreamTool"
),
35
m_scTool
(
"LArLATOMEDecoder"
),
36
m_rdpSvc
(
"ROBDataProviderSvc"
,
name
()),
37
m_byteStreamCnvSvc
(
"ByteStreamCnvSvc"
,
name
())
38
{}
39
40
LArDigitContByteStreamCnv::~LArDigitContByteStreamCnv
() {
41
}
42
43
CLID
LArDigitContByteStreamCnv::classID
(){
44
return
ClassID_traits<LArDigitContainer>::ID
() ;
45
}
46
47
48
StatusCode
49
LArDigitContByteStreamCnv::initialize
()
50
{
51
ATH_CHECK
( AthConstConverter::initialize() );
52
53
if
(
m_rdpSvc
.retrieve().isFailure()) {
54
ATH_MSG_WARNING
(
" Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. "
);
55
}
56
57
ATH_CHECK
(
m_byteStreamCnvSvc
.retrieve() );
58
59
ATH_CHECK
(
m_tool
.retrieve() );
60
ATH_CHECK
(
m_scTool
.retrieve() );
61
62
return
StatusCode::SUCCESS;
63
}
64
65
StatusCode
66
LArDigitContByteStreamCnv::createObjConst
(IOpaqueAddress* pAddr, DataObject*& pObj)
const
67
{
//Convert Digits from ByteStream to StoreGate
68
ATH_MSG_VERBOSE
(
"Executing CreateObj method for LArDigitContainer "
);
69
70
if
(!
m_rdpSvc
) {
71
ATH_MSG_ERROR
(
" ROBDataProviderSvc not loaded. Can't read ByteStream."
);
72
return
StatusCode::FAILURE;
73
}
74
ByteStreamAddress
* pRE_Addr{};
75
ATH_CHECK
( (pRE_Addr =
dynamic_cast<
ByteStreamAddress
*
>
(pAddr)) !=
nullptr
);
76
77
const
EventContext& ctx = pRE_Addr->
getEventContext
();
78
79
std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*> robFrags;
80
m_rdpSvc
->getROBData(ctx,
LArByteStream::s_allROBIDs_LATOME
, robFrags );
81
const
RawEvent
*
re
=
m_rdpSvc
->getEvent(ctx);
82
const
std::string& key = *(pAddr->par());
// Get key used in the StoreGateSvc::retrieve function
83
// get gain and pass to convert function.
84
CaloGain::CaloGain
gain=
CaloGain::LARNGAIN
;
//At this place, LARNGAINS means Automatic gain.
85
bool
isSC=
false
;
86
LArDigitContainer
* adc_coll=0;
87
LArDigitContainer
* adc_bas_coll=0;
88
LArRawSCContainer
* et_coll=0;
89
LArRawSCContainer
* et_id_coll=0;
90
LArLATOMEHeaderContainer
* header_coll=0;
91
92
if
(key==
"HIGH"
)
93
gain=
CaloGain::LARHIGHGAIN
;
94
else
if
(key==
"MEDIUM"
)
95
gain=
CaloGain::LARMEDIUMGAIN
;
96
else
if
(key==
"LOW"
)
97
gain=
CaloGain::LARLOWGAIN
;
98
else
if
(key==
"SC"
){
99
isSC=
true
;
100
adc_coll=
new
LArDigitContainer
();
101
}
102
else
if
(key==
"SC_ADC_BAS"
){
103
isSC=
true
;
104
adc_bas_coll=
new
LArDigitContainer
();
105
}
106
107
// Convert the RawEvent to LArDigitContainer
108
ATH_MSG_DEBUG
(
"Converting LArDigits (from ByteStream). key="
<< key <<
" ,gain="
<< gain );
109
StatusCode
sc
;
110
if
(!isSC) {
//Regular readout
111
LArDigitContainer
*DigitContainer=
new
LArDigitContainer
;
112
sc
=
m_tool
->convert(
re
,DigitContainer,gain);
113
if
(
sc
!=StatusCode::SUCCESS)
114
ATH_MSG_WARNING
(
"Conversion tool returned an error. LArDigitContainer might be empty."
);
115
pObj =
SG::asStorable
(DigitContainer) ;
116
return
StatusCode::SUCCESS;
117
}
118
119
//Supercell readout
120
sc
=
m_scTool
->convert(robFrags,
nullptr
,adc_coll, adc_bas_coll, et_coll, et_id_coll, header_coll);
121
if
(
sc
!=StatusCode::SUCCESS)
122
ATH_MSG_WARNING
(
"Conversion tool returned an error. LAr SC containers might be empty."
);
123
124
if
(key==
"SC"
){
125
pObj =
SG::asStorable
(adc_coll);
126
}
127
else
if
(key==
"SC_ADC_BAS"
){
128
pObj =
SG::asStorable
(adc_bas_coll);
129
}
130
131
return
StatusCode::SUCCESS;
132
133
}
134
135
StatusCode
136
LArDigitContByteStreamCnv::createRepConst
(DataObject* pObj, IOpaqueAddress*& pAddr)
const
137
{
// convert LArDigits from StoreGate into ByteStream
138
ATH_MSG_VERBOSE
(
"Execute CreateRep method of LArDigitContainer "
);
139
140
// Get Full Event Assembler
141
FullEventAssembler<RodRobIdMap>
*fea = 0;
142
ATH_CHECK
(
m_byteStreamCnvSvc
->getFullEventAssembler(fea,
"LAr"
) );
143
144
LArDigitContainer
* DigitContainer=0;
145
if
(!
SG::fromStorable
(pObj, DigitContainer) || !DigitContainer) {
146
ATH_MSG_ERROR
(
"Cannot get LArDigitContainer for DataObject. Key="
<< pObj->registry()->name() );
147
return
StatusCode::FAILURE;
148
}
149
150
std::string nm = pObj->registry()->name();
151
pAddr =
new
ByteStreamAddress
(
classID
(),nm,
""
);
152
153
ATH_CHECK
(
m_tool
->WriteLArDigits(DigitContainer, *fea) );
154
return
StatusCode::SUCCESS;
155
}
re
const std::regex re(r_e)
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:32
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition
AthMsgStreamMacros.h:27
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:28
ByteStreamAddress.h
ByteStreamCnvSvcBase.h
CaloGain.h
CLASS_DEF.h
macros to associate a CLID to a type
CLID
uint32_t CLID
The Class ID type.
Definition
Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
IByteStreamCnvSvc.h
IROBDataProviderSvc.h
LATOMEMapping.h
Tool to get LATOME SC and SCID mapping file and fill std::map variable with it.
LArDigitContByteStreamCnv.h
LArDigitContainer.h
LArLATOMEDecoder.h
Byte stream converter of LATOME.
LArLATOMEROBIDs.h
sc
static Double_t sc
Definition
LArPhysWaveHECTool.cxx:37
LArRawDataContByteStreamTool.h
Helper tool for conversion of raw data classes to/from LArByteStream.
Mon.h
Tool to store LATOME mon header and footer data.
RawEvent.h
RawEvent
OFFLINE_FRAGMENTS_NAMESPACE::FullEventFragment RawEvent
data type for reading raw event
Definition
RawEvent.h:37
StorableConversions.h
convert to and from a SG storable
AthConstConverter::AthConstConverter
AthConstConverter(long storage_type, const CLID &class_type, ISvcLocator *svc, const std::string &name)
Definition
AthConstConverter.h:35
AthConstConverter::name
const std::string & name() const
Definition
AthConstConverter.h:67
ByteStreamAddress
IOpaqueAddress for ByteStreamCnvSvc, with ROB ids.
Definition
ByteStreamAddress.h:28
ByteStreamAddress::getEventContext
const EventContext & getEventContext() const
Definition
ByteStreamAddress.h:62
FullEventAssembler
Template class for assembling a full atlas raw event from subfragments.
Definition
FullEventAssembler.h:38
LArDigitContByteStreamCnv::createObjConst
virtual StatusCode createObjConst(IOpaqueAddress *pAddr, DataObject *&pObj) const override
Create the transient representation of an object.
Definition
LArDigitContByteStreamCnv.cxx:66
LArDigitContByteStreamCnv::storageType
static long storageType()
Definition
LArDigitContByteStreamCnv.h:50
LArDigitContByteStreamCnv::classID
static CLID classID()
Definition
LArDigitContByteStreamCnv.cxx:43
LArDigitContByteStreamCnv::initialize
virtual StatusCode initialize() override
Definition
LArDigitContByteStreamCnv.cxx:49
LArDigitContByteStreamCnv::m_scTool
ToolHandle< LArLATOMEDecoder > m_scTool
Definition
LArDigitContByteStreamCnv.h:55
LArDigitContByteStreamCnv::m_rdpSvc
ServiceHandle< IROBDataProviderSvc > m_rdpSvc
Definition
LArDigitContByteStreamCnv.h:56
LArDigitContByteStreamCnv::createRepConst
virtual StatusCode createRepConst(DataObject *pObj, IOpaqueAddress *&pAddr) const override
Convert the transient object to the requested representation.
Definition
LArDigitContByteStreamCnv.cxx:136
LArDigitContByteStreamCnv::m_tool
ToolHandle< BYTESTREAMTOOL > m_tool
Definition
LArDigitContByteStreamCnv.h:54
LArDigitContByteStreamCnv::~LArDigitContByteStreamCnv
virtual ~LArDigitContByteStreamCnv()
Definition
LArDigitContByteStreamCnv.cxx:40
LArDigitContByteStreamCnv::LArDigitContByteStreamCnv
LArDigitContByteStreamCnv(ISvcLocator *svcloc)
Definition
LArDigitContByteStreamCnv.cxx:32
LArDigitContByteStreamCnv::m_byteStreamCnvSvc
ServiceHandle< IByteStreamCnvSvc > m_byteStreamCnvSvc
Definition
LArDigitContByteStreamCnv.h:57
LArDigitContainer
Container class for LArDigit.
Definition
LArDigitContainer.h:24
LArLATOMEHeaderContainer
Container class for LArLATOMEHeader.
Definition
LArLATOMEHeaderContainer.h:19
LArRawSCContainer
Container class for LArRawSC.
Definition
LArRawSCContainer.h:17
CaloGain::CaloGain
CaloGain
Definition
CaloGain.h:11
CaloGain::LARMEDIUMGAIN
@ LARMEDIUMGAIN
Definition
CaloGain.h:18
CaloGain::LARLOWGAIN
@ LARLOWGAIN
Definition
CaloGain.h:18
CaloGain::LARNGAIN
@ LARNGAIN
Definition
CaloGain.h:19
CaloGain::LARHIGHGAIN
@ LARHIGHGAIN
Definition
CaloGain.h:18
LArByteStream::s_allROBIDs_LATOME
static const std::vector< uint32_t > s_allROBIDs_LATOME
Definition
LArLATOMEROBIDs.h:8
SG::fromStorable
bool fromStorable(DataObject *pDObj, T *&pTrans, bool quiet=false, IRegisterTransient *irt=0, bool isConst=true)
Definition
StorableConversions.h:169
SG::asStorable
DataObject * asStorable(SG::DataObjectSharedPtr< T > pObject)
Definition
DataObjectSharedPtr.h:31
ClassID_traits::ID
static constexpr CLID ID()
Definition
Control/AthenaKernel/AthenaKernel/ClassID_traits.h:44
Generated on
for ATLAS Offline Software by
1.17.0