ATLAS Offline Software
Loading...
Searching...
No Matches
ZdcByteStreamReadV1V2Tool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TRIGT1CALOBYTESTREAM_ZDCBYTESTREAMREADV1V2TOOL_H
6#define TRIGT1CALOBYTESTREAM_ZDCBYTESTREAMREADV1V2TOOL_H
7
8#include "AsgTools/AsgTool.h"
9#include "GaudiKernel/ToolHandle.h"
10#include "GaudiKernel/ServiceHandle.h"
11
13
15
18
20
21#include <stdint.h>
22#include <vector>
23#include <set>
24#include <map>
25
26
27class ZdcSrcIdMap;
28class ZdcID;
30
31
38
40{
43public:
44 ZdcByteStreamReadV1V2Tool(const std::string& name);
46
47 virtual StatusCode initialize();
48 virtual StatusCode finalize();
49
50 // =========================================================================
52 StatusCode convert(
53 const IROBDataProviderSvc::VROBFRAG& robFrags,
54 xAOD::TriggerTowerContainer* const ttCollection
55 ) const;
56
57 StatusCode convert( const IROBDataProviderSvc::VROBFRAG& robFrags,
58 ZdcDigitsCollection* zdcCollection) const;
59
60 StatusCode convert(xAOD::TriggerTowerContainer* const ttCollection) const;
61 StatusCode convert(const std::string& sgKey, xAOD::TriggerTowerContainer* const ttCollection) const;
62
64
65
66 // =========================================================================
68 const std::vector<uint32_t>& ppmSourceIDs(const std::string& sgKey) const;
69
70private:
71 enum class RequestType { PPM, CPM, CMX };
72 typedef IROBDataProviderSvc::VROBFRAG::const_iterator ROBIterator;
75
76
78 {
79 public:
80 BitReader (const std::vector<uint32_t>& ppBlock)
81 : m_ppPointer (0),
82 m_ppMaxBit (31 * ppBlock.size()),
83 m_ppBlock (ppBlock)
84 {
85 }
86
87 uint32_t getField (const uint8_t numBits);
88
89
90 private:
91 uint32_t m_ppPointer{};
92 uint32_t m_ppMaxBit{};
93 const std::vector<uint32_t>& m_ppBlock;
94 };
95
96
97 struct State
98 {
99 std::set<uint32_t> m_coolIds;
101
104
105 uint8_t m_subDetectorID = 0;
106 uint32_t m_rodSourceId = 0;
107 uint32_t m_robSourceId = 0;
108 uint8_t m_verCode = 0;
109
110 // For RUN2
111 std::vector<uint32_t> m_ppBlock;
112 // For RUN1
113 std::map<uint8_t, std::vector<uint16_t>> m_ppFadcs;
114 std::map<uint8_t, std::vector<uint16_t>> m_ppLuts;
115 };
116
117
118private:
119 StatusCode processRobFragment_(State& state,
120 const ROBIterator& robFrag,
121 const RequestType& requestedType) const;
122
123 // ==========================================================================
124 // PPM
125 // ==========================================================================
126 StatusCode processPpmWord_(State& state, uint32_t word, int indata) const;
127 StatusCode processPpmBlock_(State& state) const;
128
129 StatusCode processPpmBlockR4V1_(State& state) const;
130 StatusCode processPpmBlockR3V1_(State& state) const;
131 StatusCode processPpmStandardR4V1_(State& state) const;
132 StatusCode processPpmStandardR3V1_(State& state) const;
133 StatusCode processPpmStandardR3V1_(State& state, uint32_t word, int indata) const;
134 StatusCode processPpmCompressedR3V1_(State& state) const;
135 std::vector<uint16_t> getPpmAdcSamplesR3_(State& state, BitReader& br, uint8_t format, uint8_t minIndex) const;
136 StatusCode processPpmCompressedR4V1_(State& state) const;
138 uint8_t numAdc, int8_t& encoding,
139 int8_t& minIndex) const;
140 std::vector<uint16_t> getPpmAdcSamplesR4_(State& state,
141 BitReader& br,
142 uint8_t encoding, uint8_t minIndex) const;
143 StatusCode processPpmNeutral_(State& state) const;
144
145 StatusCode addTriggerTowerV2_(
146 State& state,
147 uint8_t crate,
148 uint8_t module,
149 uint8_t channel,
150 const std::vector<uint8_t>& lcpVal,
151 const std::vector<uint8_t>& lcpBcidVec,
152
153 const std::vector<uint8_t>& ljeVal,
154 const std::vector<uint8_t>& ljeSat80Vec,
155
156 const std::vector<uint16_t>& adcVal,
157 const std::vector<uint8_t>& adcExt,
158 const std::vector<int16_t>& pedCor,
159 const std::vector<uint8_t>& pedEn) const;
160
161 StatusCode addTriggerTowerV1_(
162 State& state,
163 uint8_t crate,
164 uint8_t module,
165 uint8_t channel,
166 const std::vector<uint16_t>& luts,
167 const std::vector<uint16_t>& fadc
168 ) const;
169
170 StatusCode addTriggerTowerV1_(
171 State& state,
172 uint8_t crate,
173 uint8_t module,
174 uint8_t channel,
175 const std::vector<uint8_t>& luts,
176 const std::vector<uint8_t>& lcpBcidVec,
177 const std::vector<uint16_t>& fadc,
178 const std::vector<uint8_t>& bcidExt
179 ) const;
180
181 void initSourceIDs();
182
183private:
184 ToolHandle<ZdcL1CaloErrorByteStreamTool> m_errorTool;
185
188
189private:
190 std::vector<uint32_t> m_ppmSourceIDs;
191 std::vector<uint32_t> m_ppmSourceIDsMuon;
192 std::vector<uint32_t> m_ppmSourceIDsSpare;
194 const ZdcID* m_zdcID{};
195};
196
197
198// PAS 8/14 used to be here
199// ===========================================================================
200//}// end namespace
201// ===========================================================================
202#endif
#define ASG_TOOL_INTERFACE(CLASSNAME)
#define ASG_TOOL_CLASS0(CLASSNAME)
std::vector< const ROBF * > VROBFRAG
const std::vector< uint32_t > & m_ppBlock
BitReader(const std::vector< uint32_t > &ppBlock)
OFFLINE_FRAGMENTS_NAMESPACE::PointerType RODPointer
ZdcDigitsCollection * convertTT2ZD(xAOD::TriggerTowerContainer *const ttCollection) const
virtual StatusCode initialize()
Dummy implementation of the initialisation function.
StatusCode processPpmStandardR4V1_(State &state) const
void interpretPpmHeaderR4V1_(BitReader &br, uint8_t numAdc, int8_t &encoding, int8_t &minIndex) const
StatusCode processPpmWord_(State &state, uint32_t word, int indata) const
std::vector< uint32_t > m_ppmSourceIDs
StatusCode addTriggerTowerV2_(State &state, uint8_t crate, uint8_t module, uint8_t channel, const std::vector< uint8_t > &lcpVal, const std::vector< uint8_t > &lcpBcidVec, const std::vector< uint8_t > &ljeVal, const std::vector< uint8_t > &ljeSat80Vec, const std::vector< uint16_t > &adcVal, const std::vector< uint8_t > &adcExt, const std::vector< int16_t > &pedCor, const std::vector< uint8_t > &pedEn) const
StatusCode processPpmBlockR3V1_(State &state) const
IROBDataProviderSvc::VROBFRAG::const_iterator ROBIterator
StatusCode processPpmCompressedR3V1_(State &state) const
StatusCode processPpmCompressedR4V1_(State &state) const
std::vector< uint32_t > m_ppmSourceIDsMuon
StatusCode convert(const IROBDataProviderSvc::VROBFRAG &robFrags, xAOD::TriggerTowerContainer *const ttCollection) const
Convert ROB fragments to trigger towers.
ZdcByteStreamReadV1V2Tool(const std::string &name)
StatusCode processPpmStandardR3V1_(State &state) const
OFFLINE_FRAGMENTS_NAMESPACE::PointerType ROBPointer
std::vector< uint16_t > getPpmAdcSamplesR4_(State &state, BitReader &br, uint8_t encoding, uint8_t minIndex) const
ServiceHandle< IROBDataProviderSvc > m_robDataProvider
Service for reading bytestream.
StatusCode processPpmBlockR4V1_(State &state) const
StatusCode addTriggerTowerV1_(State &state, uint8_t crate, uint8_t module, uint8_t channel, const std::vector< uint16_t > &luts, const std::vector< uint16_t > &fadc) const
std::vector< uint32_t > m_ppmSourceIDsSpare
StatusCode processPpmNeutral_(State &state) const
StatusCode processRobFragment_(State &state, const ROBIterator &robFrag, const RequestType &requestedType) const
StatusCode processPpmBlock_(State &state) const
const std::vector< uint32_t > & ppmSourceIDs(const std::string &sgKey) const
Return reference to vector with all possible Source Identifiers.
std::vector< uint16_t > getPpmAdcSamplesR3_(State &state, BitReader &br, uint8_t format, uint8_t minIndex) const
ToolHandle< ZdcL1CaloErrorByteStreamTool > m_errorTool
L1Calo User Header class.
Definition ZdcID.h:25
This class provides conversion between Lower level Source ID to higher level source ID for L1Calo Byt...
Definition ZdcSrcIdMap.h:24
L1Calo User Header class.
Base class for the dual-use tool implementation classes.
Definition AsgTool.h:47
const DataType * PointerType
Definition RawEvent.h:25
TriggerTowerContainer_v2 TriggerTowerContainer
Define the latest version of the TriggerTower container.
std::map< uint8_t, std::vector< uint16_t > > m_ppFadcs
xAOD::TriggerTowerContainer * m_triggerTowers
std::map< uint8_t, std::vector< uint16_t > > m_ppLuts