ATLAS Offline Software
Loading...
Searching...
No Matches
PpmByteStreamReadV1V2Tool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TRIGT1CALOBYTESTREAM_PPMBYTESTREAMREADV1V2TOOL_H
6#define TRIGT1CALOBYTESTREAM_PPMBYTESTREAMREADV1V2TOOL_H
7// ===========================================================================
8// Includes
9// ===========================================================================
10// STD:
11// ===========================================================================
12#include <stdint.h>
13#include <vector>
14#include <unordered_map>
15#include <unordered_set>
16#include <atomic>
17
18
19// ===========================================================================
20// Athena:
21// ===========================================================================
22#include "AsgTools/AsgTool.h"
23#include "GaudiKernel/ToolHandle.h"
24#include "GaudiKernel/ServiceHandle.h"
25
28
31
32#include "CaloUserHeader.h"
33#include "SubBlockHeader.h"
34#include "SubBlockStatus.h"
35
37
38// ===========================================================================
39// Forward declarations
40// ===========================================================================
41
42
43// ===========================================================================
44namespace LVL1BS {
45
46// Forward declarations
47class L1CaloSrcIdMap;
49// ===========================================================================
50
57
59{
62public:
63 PpmByteStreamReadV1V2Tool(const std::string& name);
65
66 virtual StatusCode initialize() override;
67 virtual StatusCode finalize() override;
68
69 // =========================================================================
71 StatusCode convert(xAOD::TriggerTowerContainer* const ttCollection) const;
72 StatusCode convert(const std::string& sgKey, xAOD::TriggerTowerContainer* const ttCollection) const;
73 // =========================================================================
74
75private:
76 enum class RequestType { PPM, CPM, CMX };
77 typedef IROBDataProviderSvc::VROBFRAG::const_iterator ROBIterator;
80
82 {
83 public:
84 BitReader (const std::vector<uint32_t>& ppBlock)
85 : m_ppPointer (0),
86 m_ppMaxBit (31 * ppBlock.size()),
87 m_ppBlock (ppBlock)
88 {
89 }
90
91 uint32_t getField (const uint8_t numBits);
92
93 private:
94 uint32_t m_ppPointer;
95 uint32_t m_ppMaxBit;
96 const std::vector<uint32_t>& m_ppBlock;
97 };
98
99
100 typedef std::map<uint8_t, std::vector<uint16_t>> LutsMap;
101 typedef std::map<uint8_t, std::vector<uint16_t>> FadcsMap;
102
118
119
120private:
121 StatusCode convert(
122 State& state,
123 const IROBDataProviderSvc::VROBFRAG& robFrags) const;
124
125
126 void initSourceIDs();
127
129 const std::vector<uint32_t>& ppmSourceIDs(State& state,
130 const std::string& sgKey) const;
131
132 StatusCode processRobFragment_(State& state,
133 const ROBIterator& robFrag,
134 const RequestType& requestedType) const;
135
136 // ==========================================================================
137 // PPM
138 // ==========================================================================
139 StatusCode processPpmWord_(State& state,
140 uint32_t word, int indata) const;
141 StatusCode processPpmBlock_(State& state) const;
142
143 StatusCode processPpmBlockR4V1_(State& state) const;
144 StatusCode processPpmBlockR3V1_(State& state) const;
145 StatusCode processPpmStandardR4V1_(State& state) const;
146 StatusCode processPpmStandardR3V1_(State& state) const;
147 StatusCode processPpmStandardR3V1_(State& state,
148 uint32_t word, int indata) const;
149 StatusCode processPpmCompressedR3V1_(State& state) const;
150 std::vector<uint16_t> getPpmAdcSamplesR3_(State& state,
151 BitReader& br, uint8_t format, uint8_t minIndex) const;
152 StatusCode processPpmCompressedR4V1_(State& state) const;
154 uint8_t numAdc, int8_t& encoding,
155 int8_t& minIndex) const;
156 std::vector<uint16_t> getPpmAdcSamplesR4_(State& state,
157 BitReader& br,
158 uint8_t encoding, uint8_t minIndex) const;
159 StatusCode processPpmNeutral_(State& state) const;
160
161 StatusCode addTriggerTowerV2_(
162 State& state,
163 uint8_t crate,
164 uint8_t module,
165 uint8_t channel,
166 std::vector<uint8_t>&& lcpVal,
167 std::vector<uint8_t>&& lcpBcidVec,
168
169 std::vector<uint8_t>&& ljeVal,
170 std::vector<uint8_t>&& ljeSat80Vec,
171
172 std::vector<uint16_t>&& adcVal,
173 std::vector<uint8_t>&& adcExt,
174 std::vector<int16_t>&& pedCor,
175 std::vector<uint8_t>&& pedEn) const;
176
177 StatusCode addTriggerTowerV1_(
178 State& state,
179 uint8_t crate,
180 uint8_t module,
181 uint8_t channel,
182 const std::vector<uint16_t>& luts,
183 const std::vector<uint16_t>& fadc
184 ) const;
185
186 StatusCode addTriggerTowerV1_(
187 State& state,
188 uint8_t crate,
189 uint8_t module,
190 uint8_t channel,
191 std::vector<uint8_t>&& luts,
192 std::vector<uint8_t>&& lcpBcidVec,
193 std::vector<uint16_t>&& fadc,
194 std::vector<uint8_t>&& bcidExt
195 ) const;
196
197 void processSubBlockStatus_(State& state,
198 uint8_t crate, uint8_t module, uint32_t word) const;
199
200 void processPpmErrorBits_(State& state,
201 uint8_t crate, uint8_t module, BitReader& br) const;
202
203private:
204 ToolHandle<LVL1BS::L1CaloErrorByteStreamTool> m_errorTool;
206 ToolHandle<LVL1::IL1CaloMappingTool> m_ppmMaps;
209
210private:
211 std::vector<uint32_t> m_ppmSourceIDs;
212 std::vector<uint32_t> m_ppmSourceIDsMuon;
213 std::vector<uint32_t> m_ppmSourceIDsSpare;
215
216 mutable std::atomic<size_t> m_maxSizeSeen;
217
218// ==========================================================================
219private:
220 static const uint8_t s_crates = 8;
221 static const uint8_t s_modules = 16;
222 static const uint8_t s_submodules = 16;
223 static const uint8_t s_channels = 64;
224 static const uint16_t s_maxtowers = s_crates * s_modules * s_channels;
225
226 bool m_useSWROD = false;
227};
228
229// ===========================================================================
230}// end namespace
231// ===========================================================================
232#endif
#define ASG_TOOL_INTERFACE(CLASSNAME)
#define ASG_TOOL_CLASS0(CLASSNAME)
std::vector< const ROBF * > VROBFRAG
L1Calo User Header class.
Tool to accumulate ROB/ROD unpacking errors.
This class provides conversion between Lower level Source ID to higher level source ID for L1Calo Byt...
BitReader(const std::vector< uint32_t > &ppBlock)
StatusCode addTriggerTowerV2_(State &state, uint8_t crate, uint8_t module, uint8_t channel, std::vector< uint8_t > &&lcpVal, std::vector< uint8_t > &&lcpBcidVec, std::vector< uint8_t > &&ljeVal, std::vector< uint8_t > &&ljeSat80Vec, std::vector< uint16_t > &&adcVal, std::vector< uint8_t > &&adcExt, std::vector< int16_t > &&pedCor, std::vector< uint8_t > &&pedEn) const
std::vector< uint16_t > getPpmAdcSamplesR3_(State &state, BitReader &br, uint8_t format, uint8_t minIndex) const
StatusCode processPpmBlockR3V1_(State &state) const
OFFLINE_FRAGMENTS_NAMESPACE::PointerType RODPointer
StatusCode processPpmCompressedR3V1_(State &state) const
std::map< uint8_t, std::vector< uint16_t > > FadcsMap
ToolHandle< LVL1::IL1CaloMappingTool > m_ppmMaps
Channel mapping tool.
StatusCode processPpmBlockR4V1_(State &state) const
StatusCode processPpmNeutral_(State &state) const
void processPpmErrorBits_(State &state, uint8_t crate, uint8_t module, BitReader &br) const
StatusCode processPpmBlock_(State &state) const
ServiceHandle< IROBDataProviderSvc > m_robDataProvider
Service for reading bytestream.
StatusCode processPpmStandardR4V1_(State &state) const
StatusCode processPpmCompressedR4V1_(State &state) const
StatusCode processPpmWord_(State &state, uint32_t word, int indata) const
const std::vector< uint32_t > & ppmSourceIDs(State &state, const std::string &sgKey) const
Return reference to vector with all possible Source Identifiers.
void processSubBlockStatus_(State &state, uint8_t crate, uint8_t module, uint32_t word) const
IROBDataProviderSvc::VROBFRAG::const_iterator ROBIterator
ToolHandle< LVL1BS::L1CaloErrorByteStreamTool > m_errorTool
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
StatusCode processRobFragment_(State &state, const ROBIterator &robFrag, const RequestType &requestedType) const
OFFLINE_FRAGMENTS_NAMESPACE::PointerType ROBPointer
void interpretPpmHeaderR4V1_(BitReader &br, uint8_t numAdc, int8_t &encoding, int8_t &minIndex) const
std::vector< uint16_t > getPpmAdcSamplesR4_(State &state, BitReader &br, uint8_t encoding, uint8_t minIndex) 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::map< uint8_t, std::vector< uint16_t > > LutsMap
StatusCode processPpmStandardR3V1_(State &state) const
StatusCode convert(xAOD::TriggerTowerContainer *const ttCollection) const
Convert ROB fragments to trigger towers.
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.