ATLAS Offline Software
Loading...
Searching...
No Matches
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
8
9#include "eformat/SourceIdentifier.h"
10
12
13ZdcByteStreamLucrodData::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
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
30
31 return StatusCode::SUCCESS;
32}
33
35
36 ATH_MSG_DEBUG(" ZdcByteStreamLucrodData::execute ");
37
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 //
48 const unsigned int RODSourceIdShifted = eformat::FORWARD_ZDC << 16;
49
50 for (unsigned int lucrodModuleNum = 0; lucrodModuleNum < 6; lucrodModuleNum++) {
51 ROBIDs.push_back(RODSourceIdShifted + lucrodModuleNum);
52 }
53
54 ATH_MSG_DEBUG("ZdcByteStreamLucrodData::execute::getROBDATA");
55 m_robDataProvider->getROBData(Gaudi::Hive::currentContext(), 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
77StatusCode 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
121
122 ATH_MSG_DEBUG(" ZdcByteStreamLucrodData::finalize ");
123
124 return StatusCode::SUCCESS;
125}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
static Double_t sc
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
ZdcByteStreamLucrodData(const std::string &name, ISvcLocator *pSvcLocator)
ServiceHandle< IROBDataProviderSvc > m_robDataProvider
StatusCode fillContainer(std::vector< const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment * >, ZdcLucrodDataContainer *zdcLucrodDataContainer)
SG::WriteHandleKey< ZdcLucrodDataContainer > m_ZdcLucrodDataContainerKey
eformat::ROBFragment< PointerType > ROBFragment
Definition RawEvent.h:27