ATLAS Offline Software
Loading...
Searching...
No Matches
JepByteStreamV2Tool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TRIGT1CALOBYTESTREAM_JEPBYTESTREAMV2TOOL_H
6#define TRIGT1CALOBYTESTREAM_JEPBYTESTREAMV2TOOL_H
7
8#include <stdint.h>
9
10#include <map>
11#include <string>
12#include <vector>
13
14#include "L1CaloSrcIdMap.h"
21#include "eformat/SourceIdentifier.h"
22#include "GaudiKernel/ToolHandle.h"
23
24#include "CmxEnergySubBlock.h"
25
26class IInterface;
27class InterfaceID;
28class StatusCode;
29
30template <class T> class FullEventAssembler;
31
32namespace LVL1 {
33 class CMXJetHits;
34 class CMXJetTob;
35 class CMXEtSums;
37 class JEMEtSums;
39 class JetElement;
40 class JetElementKey;
41}
42
43namespace LVL1BS {
44
45class CmxJetSubBlock;
46class JemSubBlockV2;
48class L1CaloSrcIdMap;
49
57
59
60 public:
61 JepByteStreamV2Tool(const std::string& type, const std::string& name,
62 const IInterface* parent);
63 virtual ~JepByteStreamV2Tool();
64
66 static const InterfaceID& interfaceID();
67
68 virtual StatusCode initialize() override;
69 virtual StatusCode finalize() override;
70
72 StatusCode convert(const EventContext& ctx,
73 const std::string& name,
74 DataVector<LVL1::JetElement>* jeCollection) const;
75 StatusCode convert(const std::string& sgKey,
76 const IROBDataProviderSvc::VROBFRAG& robFrags,
77 DataVector<LVL1::JetElement>* jeCollection) const;
79 StatusCode convert(const EventContext& ctx,
80 const std::string& name,
81 DataVector<LVL1::JEMEtSums>* etCollection) const;
82 StatusCode convert(const std::string& sgKey,
83 const IROBDataProviderSvc::VROBFRAG& robFrags,
84 DataVector<LVL1::JEMEtSums>* etCollection) const;
86 StatusCode convert(const EventContext& ctx,
87 const std::string& name,
88 DataVector<LVL1::CMXJetTob>* tobCollection) const;
89 StatusCode convert(const std::string& sgKey,
90 const IROBDataProviderSvc::VROBFRAG& robFrags,
91 DataVector<LVL1::CMXJetTob>* tobCollection) const;
93 StatusCode convert(const EventContext& ctx,
94 const std::string& name,
95 DataVector<LVL1::CMXJetHits>* hitCollection) const;
96 StatusCode convert(const std::string& sgKey,
97 const IROBDataProviderSvc::VROBFRAG& robFrags,
98 DataVector<LVL1::CMXJetHits>* hitCollection) const;
100 StatusCode convert(const EventContext& ctx,
101 const std::string& name,
102 DataVector<LVL1::CMXEtSums>* etCollection) const;
103 StatusCode convert(const std::string& sgKey,
104 const IROBDataProviderSvc::VROBFRAG& robFrags,
105 DataVector<LVL1::CMXEtSums>* etCollection) const;
106
108 StatusCode convert(const LVL1::JEPBSCollectionV2* jep) const;
109
111 const std::vector<uint32_t>& sourceIDs() const;
112
113 private:
114 // Need option to disable dependency on offline ByteStreamCnvSvc to be able to run
115 // decoding in online HLT framework (which uses TrigByteStreamCnvSvc)
116 Gaudi::Property<bool> m_enableEncoding{
117 this, "enableEncoding", true, "Enable conversion from RDO to ByteStream"};
118 SmartIF<IByteStreamCnvSvc> m_byteStreamCnvSvc;
119
121 {
123 int coreOverlap = 0;
124 // Unpacking error code
125 unsigned int rodErr = 0;
127 std::vector<unsigned int> uintVec0;
129 std::vector<unsigned int> uintVec1;
131 std::vector<unsigned int> uintVec2;
133 std::vector<int> intVec0;
135 std::vector<int> intVec1;
137 std::vector<int> intVec2;
138 // Jet element key provider
140 };
141
144
150 typedef std::map<unsigned int, LVL1::JetElement*> JetElementMap;
151 typedef std::map<unsigned int, const LVL1::JetElement*> ConstJetElementMap;
152 typedef std::map<int, LVL1::JEMEtSums*> EnergySumsMap;
153 typedef std::map<int, const LVL1::JEMEtSums*> ConstEnergySumsMap;
154 typedef std::map<int, LVL1::CMXJetTob*> CmxTobMap;
155 typedef std::map<int, const LVL1::CMXJetTob*> ConstCmxTobMap;
156 typedef std::map<int, LVL1::CMXJetHits*> CmxHitsMap;
157 typedef std::map<int, const LVL1::CMXJetHits*> ConstCmxHitsMap;
158 typedef std::map<int, LVL1::CMXEtSums*> CmxSumsMap;
159 typedef std::map<int, const LVL1::CMXEtSums*> ConstCmxSumsMap;
160
161 typedef IROBDataProviderSvc::VROBFRAG::const_iterator ROBIterator;
164
166 {
168 : m_collection(collection){}
170 };
206
208 StatusCode convertBs(const std::string& sgKey,
209 const IROBDataProviderSvc::VROBFRAG& robFrags,
212 void decodeCmxEnergy(CmxEnergySubBlock* subBlock, int trigJem, CmxSumsData& data,
213 LocalData& ld) const;
215 void decodeCmxJet(CmxJetSubBlock* subBlock, int trigJem,
217 LocalData& ld) const;
219 void decodeJem(JemSubBlockV2* subBlock, int trigJem,
221 LocalData& ld) const;
222
224 int tobKey(int crate, int jem, int frame, int loc) const;
226 const LVL1::JetElement* findJetElement(double eta, double phi,
227 const ConstJetElementMap& jeMap,
228 LVL1::JetElementKey& elementKey) const;
230 LVL1::JetElementKey& elementKey) const;
232 const LVL1::JEMEtSums* findEnergySums(int crate, int module,
233 const ConstEnergySumsMap& etMap) const;
234 LVL1::JEMEtSums* findEnergySums(const EnergySumsData& data, int crate, int module) const;
236 const LVL1::CMXJetTob* findCmxTob(int key,
237 const ConstCmxTobMap& cmxTobMap) const;
238 LVL1::CMXJetTob* findCmxTob(const CmxTobData& data, int key) const;
240 const LVL1::CMXJetHits* findCmxHits(int crate, int source,
241 const ConstCmxHitsMap& cmxHitsMap) const;
242 LVL1::CMXJetHits* findCmxHits(const CmxHitsData& data, int crate, int source) const;
244 const LVL1::CMXEtSums* findCmxSums(int crate, int source,
245 const ConstCmxSumsMap& cmxEtMap) const;
246 LVL1::CMXEtSums* findCmxSums(const CmxSumsData& data, int crate, int source) const;
247
248 std::vector<uint32_t> makeSourceIDs() const;
249
251 void setupJeMap(const JetElementCollection* jeCollection,
252 ConstJetElementMap& jeMap,
253 LVL1::JetElementKey& elementKey) const;
255 void setupEtMap(const EnergySumsCollection* enCollection,
256 ConstEnergySumsMap& etMap) const;
258 void setupCmxTobMap(const CmxTobCollection* tobCollection,
259 ConstCmxTobMap& cmxTobMap) const;
261 void setupCmxHitsMap(const CmxHitsCollection* hitCollection,
262 ConstCmxHitsMap& cmxHitsMap) const;
264 void setupCmxEtMap(const CmxSumsCollection* enCollection,
265 ConstCmxSumsMap& cmxEtMap) const;
266
268 bool slinkSlices(int crate, int module, int modulesPerSlink,
269 int& timeslices, int& trigJem,
270 const ConstJetElementMap& jeMap,
271 const ConstEnergySumsMap& etMap,
272 const ConstCmxTobMap& cmxTobMap,
273 const ConstCmxHitsMap& cmxHitsMap,
274 const ConstCmxSumsMap& cmxEtMap,
275 LVL1::JetElementKey& elementKey) const;
277 void energySubBlockTypes(int source,
280 CmxEnergySubBlock::HitsType& hitType) const;
282 int jetSubBlockSourceId(int source) const;
283
286 ToolHandle<LVL1::IL1CaloMappingTool> m_jemMaps;
288 ToolHandle<LVL1BS::L1CaloErrorByteStreamTool> m_errorTool;
289
299 const int m_channels;
301 const int m_crates;
303 const int m_modules;
305 const int m_frames;
307 const int m_locations;
309 const int m_maxTobs;
321 std::vector<uint32_t> m_sourceIDsProp;
323 const eformat::SubDetector m_subDetector;
326};
327
328} // end namespace
329
330#endif
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
An STL vector of pointers that by default owns its pointed-to elements.
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Derived DataVector<T>.
Definition DataVector.h:795
Template class for assembling a full atlas raw event from subfragments.
std::vector< const ROBF * > VROBFRAG
Sub-Block class for CMX-Energy data post LS1.
Sub-Block class for CMX-Jet data post LS1.
Sub-Block class for JEM data post LS1.
void decodeCmxJet(CmxJetSubBlock *subBlock, int trigJem, JepByteStreamToolData &data, LocalData &ld) const
Unpack CMX-Jet sub-block.
std::map< int, LVL1::JEMEtSums * > EnergySumsMap
void energySubBlockTypes(int source, CmxEnergySubBlock::SourceType &srcType, CmxEnergySubBlock::SumType &sumType, CmxEnergySubBlock::HitsType &hitType) const
Get energy subBlock types from CMXEtSums source type.
DataVector< LVL1::CMXJetTob > CmxTobCollection
int m_version
Property:Sub_block header version.
const int m_modules
Number of JEM modules per crate.
DataVector< LVL1::CMXEtSums > CmxSumsCollection
int m_crateMax
Property: Maximum crate number when writing out bytestream.
DataVector< LVL1::JetElement > JetElementCollection
const LVL1::CMXJetHits * findCmxHits(int crate, int source, const ConstCmxHitsMap &cmxHitsMap) const
Find CMX hits for given crate, source.
StatusCode convertBs(const std::string &sgKey, const IROBDataProviderSvc::VROBFRAG &robFrags, JepByteStreamToolData &data) const
Convert bytestream to given container type.
const LVL1::CMXJetTob * findCmxTob(int key, const ConstCmxTobMap &cmxTobMap) const
Find CMX TOB for given key.
virtual StatusCode finalize() override
std::map< int, LVL1::CMXJetTob * > CmxTobMap
bool slinkSlices(int crate, int module, int modulesPerSlink, int &timeslices, int &trigJem, const ConstJetElementMap &jeMap, const ConstEnergySumsMap &etMap, const ConstCmxTobMap &cmxTobMap, const ConstCmxHitsMap &cmxHitsMap, const ConstCmxSumsMap &cmxEtMap, LVL1::JetElementKey &elementKey) const
Get number of slices and triggered slice offset for next slink.
SmartIF< IByteStreamCnvSvc > m_byteStreamCnvSvc
std::map< unsigned int, const LVL1::JetElement * > ConstJetElementMap
int m_dataFormat
Property:Data compression format.
std::map< int, const LVL1::CMXJetTob * > ConstCmxTobMap
const L1CaloSrcIdMap m_srcIdMap
Source ID converter.
const std::vector< uint32_t > & sourceIDs() const
Return reference to vector with all possible Source Identifiers.
int m_forceSlices
Property: Force number of slices in bytestream.
std::map< int, LVL1::CMXJetHits * > CmxHitsMap
ToolHandle< LVL1::IL1CaloMappingTool > m_jemMaps
Property: Channel mapping tool.
ToolHandle< LVL1BS::L1CaloErrorByteStreamTool > m_errorTool
Property:Error collection tool.
std::map< int, const LVL1::JEMEtSums * > ConstEnergySumsMap
std::map< int, const LVL1::CMXEtSums * > ConstCmxSumsMap
int m_crateOffsetSw
Property:Software crate number offset.
void setupCmxTobMap(const CmxTobCollection *tobCollection, ConstCmxTobMap &cmxTobMap) const
Set up CMX TOB map.
IROBDataProviderSvc::VROBFRAG::const_iterator ROBIterator
JepByteStreamV2Tool(const std::string &type, const std::string &name, const IInterface *parent)
OFFLINE_FRAGMENTS_NAMESPACE::PointerType RODPointer
const int m_crates
Number of crates.
virtual StatusCode initialize() override
StatusCode convert(const EventContext &ctx, const std::string &name, DataVector< LVL1::JetElement > *jeCollection) const
Convert ROB fragments to jet elements.
const int m_locations
Number of RoI locations.
const int m_maxTobs
Maximum number of TOBs per module.
const LVL1::CMXEtSums * findCmxSums(int crate, int source, const ConstCmxSumsMap &cmxEtMap) const
Find CMX energy sums for given crate, source.
const eformat::SubDetector m_subDetector
Sub-detector type.
void decodeCmxEnergy(CmxEnergySubBlock *subBlock, int trigJem, CmxSumsData &data, LocalData &ld) const
Unpack CMX-Energy sub-block.
std::map< int, const LVL1::CMXJetHits * > ConstCmxHitsMap
OFFLINE_FRAGMENTS_NAMESPACE::PointerType ROBPointer
int jetSubBlockSourceId(int source) const
Get jet hits subBlock source ID from CMXJetHits source type.
void setupJeMap(const JetElementCollection *jeCollection, ConstJetElementMap &jeMap, LVL1::JetElementKey &elementKey) const
Set up jet element map.
void decodeJem(JemSubBlockV2 *subBlock, int trigJem, JepByteStreamToolData &data, LocalData &ld) const
Unpack JEM sub-block.
ServiceHandle< IROBDataProviderSvc > m_robDataProvider
void setupCmxEtMap(const CmxSumsCollection *enCollection, ConstCmxSumsMap &cmxEtMap) const
Set up CMX energy sums map.
int m_dfltSlices
Property: Default number of slices in simulation.
std::vector< uint32_t > makeSourceIDs() const
const LVL1::JEMEtSums * findEnergySums(int crate, int module, const ConstEnergySumsMap &etMap) const
Find energy sums for given crate, module.
void setupEtMap(const EnergySumsCollection *enCollection, ConstEnergySumsMap &etMap) const
Set up energy sums map.
std::map< int, LVL1::CMXEtSums * > CmxSumsMap
DataVector< LVL1::JEMEtSums > EnergySumsCollection
std::map< unsigned int, LVL1::JetElement * > JetElementMap
int m_slinks
Property: Number of slinks per crate when writing out bytestream.
void setupCmxHitsMap(const CmxHitsCollection *hitCollection, ConstCmxHitsMap &cmxHitsMap) const
Set up CMX hits map.
int m_crateMin
Property: Minimum crate number when writing out bytestream.
DataVector< LVL1::CMXJetHits > CmxHitsCollection
static const InterfaceID & interfaceID()
AlgTool InterfaceID.
std::vector< uint32_t > m_sourceIDsProp
Property:ROB source IDs.
int m_crateOffsetHw
Property:Hardware crate number offset.
int tobKey(int crate, int jem, int frame, int loc) const
Find TOB map key for given crate, jem, frame, loc.
const int m_channels
Number of channels per module.
const int m_frames
Number of RoI frames.
Gaudi::Property< bool > m_enableEncoding
const LVL1::JetElement * findJetElement(double eta, double phi, const ConstJetElementMap &jeMap, LVL1::JetElementKey &elementKey) const
Find a jet element given eta, phi.
Tool to accumulate ROB/ROD unpacking errors.
This class provides conversion between Lower level Source ID to higher level source ID for L1Calo Byt...
CMXEtSums object stores Et sums from the Energy CMXs.
Summary of JEP (Jet) hits produced by the merger modules.
TOB data received by the merger modules.
Jet/Energy Processor container for writing bytestream post-LS1.
The JetElementKey object provides the key for each JetElement depending on its eta,...
Jet elements are the inputs to the Jet, ETmiss and ETsum triggers.
::StatusCode StatusCode
StatusCode definition for legacy code.
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
const DataType * PointerType
Definition RawEvent.h:25
CmxHitsData(CmxHitsCollection *const hitCollection)
CmxSumsData(CmxSumsCollection *const etCollection)
CmxTobData(CmxTobCollection *const tobCollection)
EnergySumsData(EnergySumsCollection *const etCollection)
JetElementData(JetElementCollection *const jeCollection)
std::vector< unsigned int > uintVec2
Unsigned int unpacking vector 2.
std::vector< int > intVec1
Int unpacking vector 1.
std::vector< int > intVec2
Int unpacking vector 2.
int coreOverlap
Jet elements to accept (0=Core, 1=Overlap).
std::vector< unsigned int > uintVec1
Unsigned int unpacking vector 1.
std::vector< unsigned int > uintVec0
Unsigned int unpacking vector 0.
std::vector< int > intVec0
Int unpacking vector 0.