ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
ForwardDetectors
ZDC
ZdcCnv
ZdcByteStream
src
ZdcByteStreamLucrodData.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
ZdcByteStream/ZdcByteStreamLucrodData.h
"
6
#include "
ZdcByteStream/ZdcLucrodDataContainer.h
"
7
#include "
ZdcByteStream/ZdcLucrodData.h
"
8
9
#include "eformat/SourceIdentifier.h"
10
11
using
OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment
;
12
13
ZdcByteStreamLucrodData::ZdcByteStreamLucrodData
(
const
std::string& name, ISvcLocator* pSvcLocator):
14
AthAlgorithm
(name , pSvcLocator),
15
m_robDataProvider
(
"ROBDataProviderSvc"
, name),
16
m_ZdcLucrodDecoder
(
eformat
::FORWARD_ZDC)
17
{
18
}
19
20
StatusCode
ZdcByteStreamLucrodData::initialize
() {
21
22
ATH_MSG_DEBUG
(
"ZdcByteStreamLucrodData::initialize"
);
23
24
StatusCode
sc
=
m_robDataProvider
.retrieve();
25
26
if
(
sc
.isFailure())
ATH_MSG_WARNING
(
" Could not retrieve ROBDataProviderSvc "
);
27
else
ATH_MSG_DEBUG
(
" Retrieved service ROBDataProviderSvc "
);
28
29
ATH_CHECK
(
m_ZdcLucrodDataContainerKey
.initialize() );
30
31
return
StatusCode::SUCCESS;
32
}
33
34
StatusCode
ZdcByteStreamLucrodData::execute
(
const
EventContext& ctx) {
35
36
ATH_MSG_DEBUG
(
" ZdcByteStreamLucrodData::execute "
);
37
38
SG::WriteHandle<ZdcLucrodDataContainer>
h_write(
m_ZdcLucrodDataContainerKey
, ctx);
39
40
std::vector<const ROBFragment*> listOfRobf;
41
std::vector<unsigned int> ROBIDs;
42
43
// Set up the list of LUCROD ROBIDs
44
//
45
// High word of source ID indicates the ZDC (0x83)
46
// Low word numbers the modules: 0-5 for the 6 LUCRODs in Run 3
47
// Update Jan 2026: LIS added as module 6
48
const
unsigned
int
RODSourceIdShifted = eformat::FORWARD_ZDC << 16;
49
50
for
(
unsigned
int
lucrodModuleNum = 0; lucrodModuleNum < 7; lucrodModuleNum++) {
51
ROBIDs.push_back(RODSourceIdShifted + lucrodModuleNum);
52
}
53
54
ATH_MSG_DEBUG
(
"ZdcByteStreamLucrodData::execute::getROBDATA"
);
55
m_robDataProvider
->getROBData(ctx, ROBIDs, listOfRobf);
56
57
auto
zdcLucrodDataContainer = std::make_unique<ZdcLucrodDataContainer>();
58
59
ATH_MSG_DEBUG
(
"ZdcByteStreamLucrodData::execute::filleContainer"
);
60
StatusCode
sc
=
fillContainer
(std::move(listOfRobf),zdcLucrodDataContainer.get());
61
62
if
(
sc
.isFailure())
ATH_MSG_WARNING
(
" fillContainer failed "
);
63
else
ATH_MSG_DEBUG
(
" fillContainer success "
);
64
65
ATH_MSG_DEBUG
(
"ZdcByteStreamLucrodData::execute::record m_ZdcLucrodDataContainerKey"
);
66
67
sc
= h_write.
record
(std::move(zdcLucrodDataContainer));
68
69
ATH_MSG_DEBUG
(
"ZdcByteStreamLucrodData::execute::record testing..."
);
70
71
if
(
sc
.isFailure())
ATH_MSG_WARNING
(
" Could not record ZdcLucrodDataContainer in StoreGate "
);
72
else
ATH_MSG_DEBUG
(
" ZdcLucrodDataContainer is recorded in StoreGate "
);
73
74
return
StatusCode::SUCCESS;
75
}
76
77
StatusCode
ZdcByteStreamLucrodData::fillContainer
(std::vector<const ROBFragment*> listOfRobf,
ZdcLucrodDataContainer
* zdcLucrodDataContainer) {
78
79
ATH_MSG_DEBUG
(
" ZdcByteStreamLucrodData::fillContainer "
);
80
81
size_t
nFragments = listOfRobf.size();
82
83
ATH_MSG_DEBUG
(
" Number of ROB fragments: "
<< nFragments);
84
85
if
(!nFragments)
return
StatusCode::SUCCESS;
86
87
std::vector<const ROBFragment*>::const_iterator rob_it = listOfRobf.begin();
88
std::vector<const ROBFragment*>::const_iterator rob_end = listOfRobf.end();
89
90
for
(; rob_it != rob_end; ++rob_it) {
91
92
// *** important: we need to use [rod] source id here ***
93
//
94
uint32_t robid = (*rob_it)->rod_source_id();
95
96
ATH_MSG_DEBUG
(
" ROB Fragment with ID: 0x"
<< std::hex << robid << std::dec);
97
98
uint32_t lucrodID = robid & 0x7;
99
100
ZdcLucrodData
* zld =
new
ZdcLucrodData
(lucrodID);
101
102
StatusCode
sc
=
m_ZdcLucrodDecoder
.decode(&**rob_it, zld);
103
104
if
(
sc
.isFailure()){
105
ATH_MSG_WARNING
(
" Conversion from ByteStream to ZdcLucrodData failed "
);
106
delete
zld;
107
}
108
else
zdcLucrodDataContainer->
push_back
(zld);
109
}
110
111
for
(
auto
zld : *zdcLucrodDataContainer) {zld->str();}
112
113
if
(zdcLucrodDataContainer->
size
() == nFragments)
114
return
StatusCode::SUCCESS;
115
else
116
return
StatusCode::FAILURE;
117
118
}
119
120
StatusCode
ZdcByteStreamLucrodData::finalize
() {
121
122
ATH_MSG_DEBUG
(
" ZdcByteStreamLucrodData::finalize "
);
123
124
return
StatusCode::SUCCESS;
125
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:32
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
sc
static Double_t sc
Definition
LArPhysWaveHECTool.cxx:37
ZdcByteStreamLucrodData.h
ZdcLucrodDataContainer.h
ZdcLucrodData.h
AthAlgorithm::AthAlgorithm
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition
AthAlgorithm.cxx:10
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
SG::WriteHandle
Definition
StoreGate/StoreGate/WriteHandle.h:73
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
ZdcByteStreamLucrodData::ZdcByteStreamLucrodData
ZdcByteStreamLucrodData(const std::string &name, ISvcLocator *pSvcLocator)
Definition
ZdcByteStreamLucrodData.cxx:13
ZdcByteStreamLucrodData::m_robDataProvider
ServiceHandle< IROBDataProviderSvc > m_robDataProvider
Definition
ZdcByteStreamLucrodData.h:40
ZdcByteStreamLucrodData::fillContainer
StatusCode fillContainer(std::vector< const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment * >, ZdcLucrodDataContainer *zdcLucrodDataContainer)
Definition
ZdcByteStreamLucrodData.cxx:77
ZdcByteStreamLucrodData::m_ZdcLucrodDataContainerKey
SG::WriteHandleKey< ZdcLucrodDataContainer > m_ZdcLucrodDataContainerKey
Definition
ZdcByteStreamLucrodData.h:42
ZdcByteStreamLucrodData::initialize
StatusCode initialize()
Definition
ZdcByteStreamLucrodData.cxx:20
ZdcByteStreamLucrodData::finalize
StatusCode finalize()
Definition
ZdcByteStreamLucrodData.cxx:120
ZdcByteStreamLucrodData::execute
StatusCode execute(const EventContext &ctx)
Execute method.
Definition
ZdcByteStreamLucrodData.cxx:34
ZdcByteStreamLucrodData::m_ZdcLucrodDecoder
ZdcLucrodDecoder m_ZdcLucrodDecoder
Definition
ZdcByteStreamLucrodData.h:43
ZdcLucrodDataContainer
Definition
ZdcLucrodDataContainer.h:12
ZdcLucrodData
Definition
ZdcLucrodData.h:24
OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment
eformat::ROBFragment< PointerType > ROBFragment
Definition
RawEvent.h:27
eformat
Definition
L1CaloBsDecoderUtil.h:11
Generated on
for ATLAS Offline Software by
1.17.0