ATLAS Offline Software
Loading...
Searching...
No Matches
LArFebHeader.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 LARFEBHEADER_H
6#define LARFEBHEADER_H
7
9#include <cstdint>
10
11
19
21{
22 public:
23
25 struct RodHeader {
26 uint32_t FormatVersion{};
27 uint32_t SourceId{};
28 uint32_t RunNumber{};
29 uint16_t ELVL1Id{};
30 uint16_t BCId{};
31 uint32_t LVL1TigType{};
32 uint32_t DetEventType{};
33 };
34
36 struct DspHeader {
37 uint32_t CodeVersion{}; // DSP code version
38 uint32_t EventCounter{}; // DSP event counter
39 };
40
41
44
46 LArFebHeader(const HWIdentifier febid);
47
49 ~LArFebHeader() = default;
50
52 inline HWIdentifier FEBId() const {return m_FEBId;}
53
55 inline uint32_t FormatVersion() const {return m_RodHeader.FormatVersion;}
56
58 inline uint32_t SourceId() const {return m_RodHeader.SourceId;}
59
61 inline uint32_t RunNumber() const {return m_RodHeader. RunNumber;}
62
64 inline uint16_t ELVL1Id() const {return m_RodHeader.ELVL1Id;}
65
67 inline uint16_t BCId() const {return m_RodHeader.BCId;}
68
70 inline uint32_t LVL1TigType() const {return m_RodHeader.LVL1TigType;}
71
73 inline uint32_t DetEventType() const {return m_RodHeader.DetEventType;}
74
76 inline uint32_t DspCodeVersion() const {return m_DspHeader.CodeVersion;}
77
79 inline uint32_t DspEventCounter() const {return m_DspHeader.EventCounter;}
80
82 inline uint16_t FebELVL1Id() const {return m_ELVL1Id;}
83
85 inline uint16_t FebBCId() const {return m_BCId;}
86
88 inline uint16_t RodResults1Size() const {return m_Results1Size;}
89 inline uint16_t RodResults2Size() const {return m_Results2Size;}
90 inline uint16_t RodRawDataSize() const {return m_RawDataSize;}
91
93 inline uint16_t NbSamples() const {return m_NbSamples;}
94 inline uint16_t NbSweetCells1() const {return m_NbSweetCells1;}
95 inline uint16_t NbSweetCells2() const {return m_NbSweetCells2;}
96 inline uint32_t OnlineChecksum() const { return m_OnlineChecksum; }
97 inline uint32_t OfflineChecksum() const { return m_OfflineChecksum; }
99
101 inline const std::vector <uint16_t> & FebCtrl1() const {return m_Ctrl1;}
102
104 inline const std::vector <uint16_t> & FebCtrl2() const {return m_Ctrl2;}
105
107 inline const std::vector <uint16_t> & FebCtrl3() const {return m_Ctrl3;}
108
110 inline uint32_t RodStatus() const {return m_Status;}
111
113 inline const std::vector <uint16_t> & SCA() const { return m_SCA; }
114
116 inline bool CheckErrorELVL1Id() const { return (m_RodHeader.ELVL1Id&0x1f)!=m_ELVL1Id; }
117
119 inline bool CheckErrorBCId() const { return m_RodHeader.BCId!=((m_BCId+1)&0xfff); }
120
122 inline void SetFormatVersion(const uint32_t formatVersion)
123 { m_RodHeader.FormatVersion=formatVersion; return; }
124
126 inline void SetSourceId(const uint32_t sourceID)
127 { m_RodHeader.SourceId=sourceID; return; }
128
130 inline void SetRunNumber(const uint32_t runNumber)
131 { m_RodHeader.RunNumber=runNumber; return; }
132
134 inline void SetELVL1Id(const uint16_t elvl1Id)
135 { m_RodHeader.ELVL1Id=elvl1Id; return; }
136
138 inline void SetBCId(const uint16_t bcid)
139 { m_RodHeader.BCId=bcid; return; }
140
142 inline void SetRodResults1Size(const uint16_t size)
143 { m_Results1Size=size; return; }
144 inline void SetRodResults2Size(const uint16_t size)
145 { m_Results2Size=size; return; }
146 inline void SetRodRawDataSize (const uint16_t size)
147 { m_RawDataSize=size; return; }
148
150 inline void SetNbSweetCells1(const uint16_t n)
151 { m_NbSweetCells1=n; return; }
152 inline void SetNbSweetCells2(const uint16_t n)
153 { m_NbSweetCells2=n; return; }
154 inline void SetNbSamples(const uint16_t n)
155 { m_NbSamples=n; return; }
156 inline void SetOnlineChecksum(const uint32_t checksum)
157 { m_OnlineChecksum=checksum; return; }
158 inline void SetOfflineChecksum(const uint32_t checksum)
159 { m_OfflineChecksum=checksum; return; }
160
162 inline void SetLVL1TigType(const uint32_t lvl1ttype)
163 { m_RodHeader.LVL1TigType=lvl1ttype; return; }
164
166 inline void SetDetEventType(const uint32_t detEvType)
167 { m_RodHeader.DetEventType=detEvType; return; }
168
170 inline void SetDspCodeVersion(const uint32_t codeVersion)
171 { m_DspHeader.CodeVersion=codeVersion; return; }
172
174 inline void SetDspEventCounter(const uint32_t eventCounter)
175 { m_DspHeader.EventCounter=eventCounter; return; }
176
178 inline void SetFebELVL1Id(const uint16_t elvl1Id)
179 { m_ELVL1Id=elvl1Id; return; }
180
182 inline void SetFebBCId(const uint16_t bcid)
183 { m_BCId=bcid; return; }
184
186 inline void SetFebCtrl1(const uint16_t ctrl1)
187 { m_Ctrl1.push_back(ctrl1); return; }
188
190 inline void SetFebCtrl2(const uint16_t ctrl2)
191 { m_Ctrl2.push_back(ctrl2); return; }
192
194 inline void SetFebCtrl3(const uint16_t ctrl3)
195 { m_Ctrl3.push_back(ctrl3); return; }
196
198 inline void SetRodStatus(const uint32_t status)
199 { m_Status=status; return; }
200
202 inline void SetFebSCA(const uint16_t sca)
203 { m_SCA.push_back(degray(sca)); return; }
204
205
206
207
208 private:
209
211 static int degray(unsigned int x);
212
215
217
219
221 uint16_t m_ELVL1Id{};
222
224 uint16_t m_BCId{};
225
226 uint16_t m_Results1Size{};
227 uint16_t m_Results2Size{};
228 uint16_t m_RawDataSize{};
229 uint16_t m_NbSweetCells1{};
230 uint16_t m_NbSweetCells2{};
231 uint16_t m_NbSamples{};
232 uint32_t m_OnlineChecksum{1};
234
236 uint32_t m_Status{};
237
239 std::vector<uint16_t> m_SCA;
240
242 std::vector<uint16_t> m_Ctrl1;
243
245 std::vector<uint16_t> m_Ctrl2;
246
248 std::vector<uint16_t> m_Ctrl3;
249};
250
252CLASS_DEF( LArFebHeader , 149839963 , 1 )
253#endif
macros to associate a CLID to a type
#define CLASS_DEF(NAME, CID, VERSION)
associate a clid and a version to a type eg
#define x
Holds information from the FEB Header.
uint16_t m_ELVL1Id
FEB EventId.
void SetRodResults1Size(const uint16_t size)
set the ROD block sizes
uint32_t RodStatus() const
get the ROD Status
uint16_t NbSweetCells2() const
void SetOnlineChecksum(const uint32_t checksum)
std::vector< uint16_t > m_Ctrl2
@Brief FEB Control word 2
void SetNbSweetCells2(const uint16_t n)
void SetRodStatus(const uint32_t status)
set the ROD Status
void SetFebBCId(const uint16_t bcid)
set the FEB Bunch Crossing ID
void SetFebCtrl2(const uint16_t ctrl2)
set the FEB Control Word #2
void SetFormatVersion(const uint32_t formatVersion)
set the format version
uint16_t RodResults2Size() const
uint16_t RodRawDataSize() const
uint16_t ELVL1Id() const
get the EventID
uint16_t NbSweetCells1() const
const std::vector< uint16_t > & FebCtrl1() const
get the FEB Control Word #1
uint32_t FormatVersion() const
get the format version
uint16_t FebBCId() const
get the FEB Bunch Crossing ID
uint32_t RunNumber() const
get the run number
RodHeader m_RodHeader
DspHeader m_DspHeader
std::vector< uint16_t > m_Ctrl1
FEB Control word 1.
void SetOfflineChecksum(const uint32_t checksum)
uint32_t m_OnlineChecksum
LArFebHeader()
for ROOT I/O
bool CheckErrorBCId() const
Check functions: return true if mismatch in Bunch Crossing ID.
bool CheckErrorELVL1Id() const
Check functions: return true if mismatch in Event ID.
static int degray(unsigned int x)
like explained in: http://mathworld.wolfram.com/GrayCode.html
void SetFebSCA(const uint16_t sca)
set the SCA's
uint32_t DspEventCounter() const
get the Event number counted by the DSP code
void SetDetEventType(const uint32_t detEvType)
set the Detector event type ID
uint32_t m_OfflineChecksum
void SetDspEventCounter(const uint32_t eventCounter)
set the Event number counted by the DSP code
void SetLVL1TigType(const uint32_t lvl1ttype)
set the Level1 trigger type ID
~LArFebHeader()=default
Destructor.
uint16_t m_NbSweetCells1
std::vector< uint16_t > m_Ctrl3
FEB Control word 3.
void SetRodRawDataSize(const uint16_t size)
void SetFebCtrl3(const uint16_t ctrl3)
set the FEB Control Word #3
void SetFebCtrl1(const uint16_t ctrl1)
set the FEB Control Word #1
uint32_t DspCodeVersion() const
get the version of the DSP code
uint16_t m_Results1Size
uint32_t OfflineChecksum() const
void SetBCId(const uint16_t bcid)
set the Bunch Crossing ID
const std::vector< uint16_t > & FebCtrl3() const
get the FEB Control Word #3
const std::vector< uint16_t > & SCA() const
get the SCA's
void SetFebELVL1Id(const uint16_t elvl1Id)
set the FEB Event ID
bool ChecksumVerification() const
void SetRunNumber(const uint32_t runNumber)
set the run number
uint16_t FebELVL1Id() const
get the FEB Event ID
uint32_t OnlineChecksum() const
uint32_t m_Status
ROD Status word.
const std::vector< uint16_t > & FebCtrl2() const
get the FEB Control Word #2
uint16_t m_NbSamples
uint32_t SourceId() const
get the source Id
const HWIdentifier m_FEBId
Feb Identifier.
uint16_t m_RawDataSize
std::vector< uint16_t > m_SCA
SCA number for each samples.
uint16_t RodResults1Size() const
get the ROD block sizes
uint16_t NbSamples() const
get the number of samples and cells above threshold
uint16_t m_BCId
FEB BCId.
uint16_t BCId() const
get the Bunch Crossing ID
void SetSourceId(const uint32_t sourceID)
set the source Id
uint32_t DetEventType() const
get the Detector event type ID
uint32_t LVL1TigType() const
get the Level1 trigger type ID
void SetRodResults2Size(const uint16_t size)
HWIdentifier FEBId() const
get the FEBId
void SetDspCodeVersion(const uint32_t codeVersion)
set the version of the DSP code
void SetNbSweetCells1(const uint16_t n)
set the number of samples and cells above thresholds
void SetNbSamples(const uint16_t n)
uint16_t m_Results2Size
void SetELVL1Id(const uint16_t elvl1Id)
set the EventID
uint16_t m_NbSweetCells2
DSP-Header (most of it is actually in the DSP-Trailer)
ROD-Header, always present (is part of the FEB-Header)