ATLAS Offline Software
NSWTriggerSTGL1AElink.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
5 
6 #include <cmath>
7 #include <cstddef>
8 #include <iterator>
9 #include <sstream>
10 #include <stdexcept>
11 #include <string>
12 
17 #include "ers/ers.h"
18 
20  : NSWTriggerElink(bs, remaining), m_data{bs, remaining} {
21  // TODO: once format finalized, checking a minimum size
22 
23  // 2 felix header 32b words already decoded;
24  constexpr static auto START_DATA = std::size_t{2 * 32};
25  auto readPointer = std::size_t{START_DATA};
26 
27  m_packet_version = parse_version_workaround(readPointer);
28  decode_header(readPointer, m_packet_version);
29  decode_data(readPointer, m_packet_version);
30  decode_trailer(readPointer);
31 }
32 
33 void Muon::nsw::NSWTriggerSTGL1AElink::decode_header(std::size_t& readPointer, int& version) {
34 
35  // This part is constant for all versions
36  m_head_fragID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_head_fragID);
37  m_head_sectID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_head_sectID);
38  m_head_EC = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_head_EC);
39  m_head_flags = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_head_flags);
40  m_head_BCID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_head_BCID);
41  m_head_orbit = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_head_orbit);
42  m_head_spare = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_head_spare);
43  m_L1ID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_L1ID);
44 
45  ERS_DEBUG(2, Muon::nsw::format("\n TP header: \n"
46  " fradID: {}\n"
47  " sectID: {}\n"
48  " EC: {}\n"
49  " flags: {}\n"
50  " BCID: {}\n"
51  " orbit: {}\n"
52  " spare: {}\n"
53  " L1ID: {}",
54  m_head_fragID, m_head_sectID, m_head_EC, m_head_flags, m_head_BCID, m_head_orbit, m_head_spare, m_L1ID));
55 
56  if (version == 1)
57  {
58  m_l1a_open_BCID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_open_BCID);
59  m_l1a_req_BCID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_req_BCID);
60  m_l1a_close_BCID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_close_BCID);
61  m_l1a_timeout = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_timeout); // overflow count
62  m_l1a_wdw_matching_engines_usage =
63  Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_wdw_matching_engines_usage);
64  m_l1a_open_BCID_offset = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_open_BCID_offset);
65  m_l1a_req_BCID_offset = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_req_BCID_offset);
66  m_l1a_close_BCID_offset = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_close_BCID_offset);
67  m_l1a_timeout_config = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_timeout_config);
68 
69  m_l1a_link_const = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_link_const);
70  }
71  else
72  {
73  m_l1a_versionID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_versionID);
74  if (m_l1a_versionID == 1)
75  {
76  version = 2;
77  }
78  else if (m_l1a_versionID == 3)
79  {
80  version = m_l1a_versionID;
81  }
82  else
83  {
84  Muon::nsw::NSWTriggerException e ( Muon::nsw::format( "Stgc packet version not existent (corrupted message) expected 3, got ({})", m_l1a_versionID));
85  throw e;
86 
87  }
88  m_l1a_local_req_BCID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_local_req_BCID);
89  m_l1a_local_rel_BCID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_local_rel_BCID);
90  m_l1a_open_BCID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_open_BCID);
91  m_l1a_req_BCID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_req_BCID);
92  m_l1a_close_BCID = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_close_BCID);
93  m_l1a_timeout = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_timeout);
94  m_l1a_open_BCID_offset = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_open_BCID_offset);
95  m_l1a_req_BCID_offset = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_req_BCID_offset);
96  m_l1a_close_BCID_offset = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_close_BCID_offset);
97  m_l1a_timeout_config = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_timeout_config);
98  m_l1a_busy_thr = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_busy_thr);
99  m_l1a_engine_snapshot = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_engine_snapshot);
100  m_l1a_link_const = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_link_const);
101  m_l1a_padding = Muon::nsw::decode_and_advance<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::size_l1a_padding);
102  }
103 
104 }
105 
107 {
108  auto anchor_value = Muon::nsw::STGTPL1A::version1_anchor_value;
109  auto anchor = Muon::nsw::decode_at_loc<uint64_t>(m_data, readPointer, Muon::nsw::STGTPL1A::loc_version1_anchor, Muon::nsw::STGTPL1A::size_l1a_link_const);
110 
111  if (anchor == anchor_value)
112  {
113  return 1;
114  }
115 
116  return -1;
117 }
118 
119 void Muon::nsw::NSWTriggerSTGL1AElink::decode_data_v3(std::size_t& readPointer, int version) {
120 
121  auto PADDING_BITS_END = std::size_t{16};
122 
123 
124  const auto endOfData = m_wordCountFlx * WORD_SIZE - Muon::nsw::STGTPL1A::size_trailer_CRC - PADDING_BITS_END;
125 
126  while (readPointer < endOfData) {
127  static constexpr auto SIZE_DATA_HEADER = STGTPL1A::size_stream_head_nbits + STGTPL1A::size_stream_head_nwords +
129  if (readPointer + SIZE_DATA_HEADER > endOfData) {
130  throw std::length_error(
131  Muon::nsw::format("Read pointer ({}) would excede memory dedicated to data chunks ({}) while parsing the header (size: {})",
132  readPointer, endOfData, SIZE_DATA_HEADER));
133  }
134  const auto header_data = decode_data_header_v3(readPointer, version);
135  if (header_data.total_expected_size > m_wordCountFlx * WORD_SIZE - readPointer + 1) {
136  throw std::length_error(Muon::nsw::format("STG TP stream size {} larger than expected packet size {}",
137  header_data.total_expected_size,
138  m_wordCountFlx * WORD_SIZE - readPointer + 1));
139  }
140  if (header_data.nwords * header_data.data_size + readPointer > endOfData) {
141  throw std::length_error(Muon::nsw::format("Requested to decode {} bits but only {} bits are remaining",
142  header_data.nwords * header_data.data_size, endOfData - readPointer));
143  }
144  m_stream_data.push_back(decode_data_payload_v3(readPointer, header_data, version));
145  }
146  analyze_data_v3(version);
147 }
148 
149 void Muon::nsw::NSWTriggerSTGL1AElink::decode_data(std::size_t& readPointer, int version) {
150  if (version == 3)
151  {
152  return decode_data_v3(readPointer, version);
153  }
154  auto PADDING_BITS_END = std::size_t{16};
155 
156  const auto endOfData = m_wordCountFlx * WORD_SIZE - Muon::nsw::STGTPL1A::size_trailer_CRC - PADDING_BITS_END;
157  while (readPointer < endOfData) {
158  static constexpr auto SIZE_DATA_HEADER = STGTPL1A::size_stream_head_nbits + STGTPL1A::size_stream_head_nwords +
160  if (readPointer + SIZE_DATA_HEADER > endOfData) {
161  throw std::length_error(
162  Muon::nsw::format("Read pointer ({}) would excede memory dedicated to data chunks ({}) while parsing the header (size: {})",
163  readPointer, endOfData, SIZE_DATA_HEADER));
164  }
165  const auto header_data = decode_data_header(readPointer, version);
166 
167  if (header_data.total_expected_size > m_wordCountFlx - ceil(readPointer / WORD_SIZE ) + 1) {
168  throw std::length_error(Muon::nsw::format("STG TP stream size {} larger than expected packet size {}",
169  header_data.total_expected_size,
170  m_wordCountFlx - ceil(readPointer / WORD_SIZE ) + 1));
171  }
172  if (header_data.nwords * header_data.data_size + readPointer > endOfData) {
173  throw std::length_error(Muon::nsw::format("Requested to decode {} bits but only {} bits are remaining",
174  header_data.nwords * header_data.data_size, endOfData - readPointer));
175  }
176 
177  m_stream_data.push_back(decode_data_payload(readPointer, header_data, version));
178  }
179  analyze_data(version);
180 }
181 
183  std::size_t& readPointer, int version) {
184 
185 
186  if (version != 3){
187  throw std::invalid_argument("decode_data_header_v3 version should be exactly 3");
188  }
189 
190  size_t felix_word_size = WORD_SIZE_DOUBLE;
191  auto PADDING_BITS_END = std::size_t{16};
192  const auto stream_head_nbits = decode(readPointer, STGTPL1A::size_stream_head_nbits);
193  const auto stream_head_nwords = decode(readPointer, STGTPL1A::size_stream_head_nwords);
194  const auto current_stream_head_fifo_size = decode(readPointer, STGTPL1A::size_stream_head_fifo_size);
195  const auto current_stream_head_streamID = decode(readPointer, STGTPL1A::size_stream_head_streamID);
196  const auto total_expected_size = stream_head_nbits * stream_head_nwords;
197  auto endOfData = m_wordCountFlx * felix_word_size - Muon::nsw::STGTPL1A::size_trailer_CRC - PADDING_BITS_END;
198  size_t current_stream_head_nbits = 0;
199  size_t current_stream_head_nwords = 0;
200 
201  switch (current_stream_head_streamID)
202  {
204  current_stream_head_nbits = STGTPPad::size_v3;
205  break;
207  current_stream_head_nbits = STGTPSegments::size_v3;
208  break;
210  current_stream_head_nbits = STGTPMMData::size_v3;
211  break;
212  default:
213  break;
214  }
215 
216  if (current_stream_head_nbits == 0 )
217  {
218  throw std::runtime_error( "Corrupted message - sTGC stream has an unrecognized stream header");
219  }
220 
221  if (readPointer + total_expected_size > endOfData)
222  {
223  throw std::runtime_error("Corrupted message - sTGC expected size goes beyond the end of data");
224  }
225 
226  current_stream_head_nwords = (stream_head_nwords == 0) ? 0 : total_expected_size / current_stream_head_nbits;
227  size_t data_size = std::ceil(total_expected_size / felix_word_size);
228 
229  // in version 3 nbits correspond to either 16 or 32 bits. There is a stable packet size that we use and
230  // we extract it from the code. The 16 or 32 bits is a consequence of an optimization in the firmware that
231  // results in big gains wrt routing and resources
232  m_stream_head_nbits.push_back(current_stream_head_nbits);
233  m_stream_head_nwords.push_back(current_stream_head_nwords);
234  m_stream_head_fifo_size.push_back(current_stream_head_fifo_size);
235  m_stream_head_streamID.push_back(current_stream_head_streamID);
236 
237 
238 
239  ERS_DEBUG(2, Muon::nsw::format("stream_head_nbits: {}", current_stream_head_nbits));
240  ERS_DEBUG(2, Muon::nsw::format("stream_head_nwords: {}", current_stream_head_nwords));
241  ERS_DEBUG(2, Muon::nsw::format("stream_head_fifo_size: {}", current_stream_head_fifo_size));
242  ERS_DEBUG(2, Muon::nsw::format("stream_head_streamID: {}", current_stream_head_streamID));
243  ERS_DEBUG(2, Muon::nsw::format("total_expected_size: {}", total_expected_size));
244  ERS_DEBUG(2, Muon::nsw::format("m_wordCountFlx: {}, ceil(readPointer/{}): {}", m_wordCountFlx,felix_word_size,
245  ceil(readPointer / felix_word_size)));
246 
247 
248  return {current_stream_head_nbits, current_stream_head_nwords, current_stream_head_fifo_size,
249  current_stream_head_streamID, total_expected_size, data_size};
250 }
251 
253  std::size_t& readPointer, int version) {
254  if (version >= 3){
255  return decode_data_header_v3(readPointer, version);
256  }
257  const auto current_stream_head_nbits = decode(readPointer, STGTPL1A::size_stream_head_nbits);
258  const auto current_stream_head_nwords = decode(readPointer, STGTPL1A::size_stream_head_nwords);
259  const auto current_stream_head_fifo_size = decode(readPointer, STGTPL1A::size_stream_head_fifo_size);
260  const auto current_stream_head_streamID = decode(readPointer, STGTPL1A::size_stream_head_streamID);
261 
262  // zero padding to multiples of 16bits - TP logic - this is the real number
263  // of bits to read
264  const auto corrected_current_stream_head_nbits = correct_size_for_padding(current_stream_head_nbits);
265 
266  m_stream_head_nbits.push_back(corrected_current_stream_head_nbits);
267  m_stream_head_nwords.push_back(current_stream_head_nwords);
268  m_stream_head_fifo_size.push_back(current_stream_head_fifo_size);
269  m_stream_head_streamID.push_back(current_stream_head_streamID);
270 
271  size_t word_size = WORD_SIZE_DOUBLE;
272  const auto data_size = static_cast<std::size_t>(std::ceil(corrected_current_stream_head_nbits / word_size));
273  const auto total_expected_size = data_size * current_stream_head_nwords;
274 
275  ERS_DEBUG(2, Muon::nsw::format("stream_head_nbits: {}", corrected_current_stream_head_nbits));
276  ERS_DEBUG(2, Muon::nsw::format("stream_head_nwords: {}", current_stream_head_nwords));
277  ERS_DEBUG(2, Muon::nsw::format("stream_head_fifo_size: {}", current_stream_head_fifo_size));
278  ERS_DEBUG(2, Muon::nsw::format("stream_head_streamID: {}", current_stream_head_streamID));
279  ERS_DEBUG(2, Muon::nsw::format("total_expected_size: {}", data_size * current_stream_head_nwords));
280  ERS_DEBUG(2, Muon::nsw::format("m_wordCountFlx: {}, ceil(readPointer/{}): {}", m_wordCountFlx, word_size,
281  ceil(readPointer / word_size)));
282 
283  return {corrected_current_stream_head_nbits, current_stream_head_nwords, current_stream_head_fifo_size,
284  current_stream_head_streamID, total_expected_size, data_size};
285 }
286 
287 std::vector<std::vector<std::uint32_t>> Muon::nsw::NSWTriggerSTGL1AElink::decode_data_payload_v3(
288  std::size_t& readPointer, const DataHeader& header, int version) const {
289  std::vector<std::vector<std::uint32_t>> current_stream_data{};
290 
291  if (version < 3){
292  throw std::invalid_argument("decode_data_header_v3 version should be at least 3");
293  }
294 
295  size_t word_size = WORD_SIZE;
296  size_t felix_n_words = (header.nwords == 0 ) ? 0 : std::ceil(header.data_size / header.nwords); // the number of felix words per stream word
297  for (std::size_t i = 0; i < header.nwords; ++i) {
298  std::vector<std::uint32_t> data{};
299  for (std::size_t j = 0; j < felix_n_words; ++j) {
300  data.push_back(decode(readPointer, word_size));
301  }
302  current_stream_data.push_back(data);
303  }
304  return current_stream_data;
305 }
306 std::vector<std::vector<std::uint32_t>> Muon::nsw::NSWTriggerSTGL1AElink::decode_data_payload(
307  std::size_t& readPointer, const DataHeader& header, int version) const {
308  std::vector<std::vector<std::uint32_t>> current_stream_data{};
309 
310  if (version >= 3)
311  return decode_data_payload_v3( readPointer, header, version);
312  size_t word_size = WORD_SIZE;
313  for (std::size_t i = 0; i < header.nwords; ++i) {
314  std::vector<std::uint32_t> data{};
315  for (std::size_t j = 0; j < header.data_size; ++j) {
316  data.push_back(decode(readPointer, word_size));
317  }
318  current_stream_data.push_back(data);
319  }
320  return current_stream_data;
321 
322 }
323 
324 void Muon::nsw::NSWTriggerSTGL1AElink::decode_trailer(std::size_t& readPointer) {
325  // TODO: warning: how the swROD is behaving if the last work is a uint16 only? Just 0-padding?
326  m_trailer_CRC = decode(readPointer, Muon::nsw::STGTPL1A::size_trailer_CRC);
327 }
328 
329 std::uint64_t Muon::nsw::NSWTriggerSTGL1AElink::decode(std::size_t& readPointer, const std::size_t size) const {
330  return Muon::nsw::decode_and_advance<std::uint64_t, std::uint32_t>(m_data, readPointer, size);
331 }
332 
334 
335  size_t word_size = WORD_SIZE_DOUBLE;
336  auto counterChunk = std::size_t{0};
337  for (const auto& dataChunk : m_stream_data) {
338  for (const auto& dataWord : dataChunk) {
339  const auto expectedSize =
340  static_cast<std::size_t>(std::ceil(m_stream_head_nbits.at(counterChunk) / word_size));
341  if (std::size(dataWord) != expectedSize) {
342  throw std::length_error(Muon::nsw::format("Stream data size {} does not match expected number of messages {}",
343  std::size(dataWord), expectedSize));
344  }
345  switch (m_stream_head_streamID.at(counterChunk)) {
347  m_pad_packets.emplace_back(dataWord,version);
348  break;
350  m_segment_packets.emplace_back(dataWord,version);
351  break;
353  m_mm_packets.emplace_back(dataWord,version);
354  break;
355  default:
356  throw std::runtime_error(Muon::nsw::format("Invalid stream type {}", m_stream_head_streamID.at(counterChunk)));
357  }
358  }
359  ++counterChunk;
360  }
361 
362 }
363 
365  if (version >= 3){
366  return analyze_data_v3(version);
367  }
368 
369  size_t word_size = WORD_SIZE_DOUBLE;
370  auto counterChunk = std::size_t{0};
371  for (const auto& dataChunk : m_stream_data) {
372  for (const auto& dataWord : dataChunk) {
373  const auto expectedSize =
374  static_cast<std::size_t>(std::ceil(m_stream_head_nbits.at(counterChunk) / word_size));
375  if (std::size(dataWord) != expectedSize) {
376  throw std::length_error(Muon::nsw::format("Stream data size {} does not match expected number of messages {}",
377  std::size(dataWord), expectedSize));
378  }
379  switch (m_stream_head_streamID.at(counterChunk)) {
381  m_pad_packets.emplace_back(dataWord,version);
382  break;
384  m_segment_packets.emplace_back(dataWord,version);
385  break;
386  default:
387  throw std::runtime_error(Muon::nsw::format("Invalid stream type {}", m_stream_head_streamID.at(counterChunk)));
388  }
389  }
390  ++counterChunk;
391  }
392 }
393 
395  static constexpr auto PADDING = 16;
396  if (initial % PADDING) {
397  return ((initial + PADDING - 1) / PADDING) * PADDING;
398  } else {
399  return initial;
400  }
401 }
Muon::nsw::STGTPL1A::size_l1a_wdw_matching_engines_usage
constexpr int size_l1a_wdw_matching_engines_usage
Definition: NSWSTGTPDecodeBitmaps.h:44
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
AtlasMcWeight::decode
double decode(number_type binnedWeight)
Convert weight from unsigned to double.
Definition: AtlasMcWeight.cxx:32
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
Muon::nsw::STGTPL1A::size_head_EC
constexpr int size_head_EC
Definition: NSWSTGTPDecodeBitmaps.h:20
header
Definition: hcg.cxx:526
Muon::nsw::STGTPL1A::version1_anchor_value
constexpr uint32_t version1_anchor_value
Definition: NSWSTGTPDecodeBitmaps.h:46
Muon::nsw::STGTPL1A::size_stream_head_nbits
constexpr int size_stream_head_nbits
Definition: NSWSTGTPDecodeBitmaps.h:50
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
Muon::nsw::STGTPSegments::size_v3
constexpr std::size_t size_v3
Definition: NSWSTGTPDecodeBitmaps.h:122
Muon::nsw::STGTPL1A::size_head_BCID
constexpr int size_head_BCID
Definition: NSWSTGTPDecodeBitmaps.h:22
m_data
std::vector< T > m_data
Definition: TrackTruthMatchingBaseAlg.cxx:660
Muon::nsw::STGTPMMData::mm_stream_header
constexpr int mm_stream_header
Definition: NSWSTGTPDecodeBitmaps.h:80
Muon::nsw::STGTPL1A::size_l1a_busy_thr
constexpr int size_l1a_busy_thr
Definition: NSWSTGTPDecodeBitmaps.h:38
Muon::nsw::STGTPL1A::size_l1a_timeout_config
constexpr int size_l1a_timeout_config
Definition: NSWSTGTPDecodeBitmaps.h:37
NSWSTGTPDecodeBitmaps.h
Muon::nsw::STGTPL1A::size_l1a_local_req_BCID
constexpr int size_l1a_local_req_BCID
Definition: NSWSTGTPDecodeBitmaps.h:28
Muon::nsw::STGTPL1A::size_l1a_padding
constexpr int size_l1a_padding
Definition: NSWSTGTPDecodeBitmaps.h:41
Muon::nsw::STGTPL1A::size_stream_head_streamID
constexpr int size_stream_head_streamID
Definition: NSWSTGTPDecodeBitmaps.h:53
Muon::nsw::STGTPL1A::size_l1a_close_BCID_offset
constexpr int size_l1a_close_BCID_offset
Definition: NSWSTGTPDecodeBitmaps.h:36
Muon::nsw::STGTPL1A::size_head_flags
constexpr int size_head_flags
Definition: NSWSTGTPDecodeBitmaps.h:21
Muon::nsw::STGTPL1A::size_l1a_versionID
constexpr int size_l1a_versionID
Definition: NSWSTGTPDecodeBitmaps.h:27
Muon::nsw::STGTPL1A::size_l1a_req_BCID_offset
constexpr int size_l1a_req_BCID_offset
Definition: NSWSTGTPDecodeBitmaps.h:35
Muon::nsw::STGTPL1A::size_l1a_req_BCID
constexpr int size_l1a_req_BCID
Definition: NSWSTGTPDecodeBitmaps.h:31
Muon::nsw::STGTPL1A::size_trailer_CRC
constexpr int size_trailer_CRC
Definition: NSWSTGTPDecodeBitmaps.h:54
STGTPPackets.h
Muon::nsw::STGTPSegments::merge_stream_header
constexpr int merge_stream_header
Definition: NSWSTGTPDecodeBitmaps.h:103
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
Muon::nsw::STGTPL1A::size_head_spare
constexpr int size_head_spare
Definition: NSWSTGTPDecodeBitmaps.h:24
Muon::nsw::STGTPL1A::size_stream_head_fifo_size
constexpr int size_stream_head_fifo_size
Definition: NSWSTGTPDecodeBitmaps.h:52
lumiFormat.i
int i
Definition: lumiFormat.py:85
Muon::nsw::STGTPL1A::size_l1a_link_const
constexpr int size_l1a_link_const
Definition: NSWSTGTPDecodeBitmaps.h:40
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
Muon::nsw::STGTPL1A::size_stream_head_nwords
constexpr int size_stream_head_nwords
Definition: NSWSTGTPDecodeBitmaps.h:51
Muon::nsw::STGTPL1A::loc_version1_anchor
constexpr int loc_version1_anchor
Definition: NSWSTGTPDecodeBitmaps.h:45
Muon::nsw::format
std::string format(const std::string &str, const T &arg)
Definition: NSWDecodeHelper.h:43
Muon::nsw::STGTPMMData::size_v3
constexpr std::size_t size_v3
Definition: NSWSTGTPDecodeBitmaps.h:95
Muon::nsw::STGTPL1A::size_l1a_timeout
constexpr int size_l1a_timeout
Definition: NSWSTGTPDecodeBitmaps.h:33
Muon::nsw::STGTPL1A::size_l1a_open_BCID_offset
constexpr int size_l1a_open_BCID_offset
Definition: NSWSTGTPDecodeBitmaps.h:34
Muon::nsw::STGTPL1A::size_head_fragID
constexpr int size_head_fragID
Definition: NSWSTGTPDecodeBitmaps.h:18
Muon::nsw::STGTPL1A::size_l1a_open_BCID
constexpr int size_l1a_open_BCID
Definition: NSWSTGTPDecodeBitmaps.h:30
Muon::nsw::STGTPL1A::size_head_sectID
constexpr int size_head_sectID
Definition: NSWSTGTPDecodeBitmaps.h:19
NSWResourceId.h
get_generator_info.version
version
Definition: get_generator_info.py:33
Muon::nsw::STGTPPad::pad_stream_header
constexpr std::size_t pad_stream_header
Definition: NSWSTGTPDecodeBitmaps.h:61
Muon::nsw::STGTPL1A::size_l1a_engine_snapshot
constexpr int size_l1a_engine_snapshot
Definition: NSWSTGTPDecodeBitmaps.h:39
Muon::nsw::STGTPPad::size_v3
constexpr std::size_t size_v3
Definition: NSWSTGTPDecodeBitmaps.h:74
Muon::nsw::STGTPL1A::size_L1ID
constexpr int size_L1ID
Definition: NSWSTGTPDecodeBitmaps.h:25
Muon::nsw::NSWTriggerException
Definition: NSWTriggerElink.h:20
Muon::nsw::STGTPL1A::size_head_orbit
constexpr int size_head_orbit
Definition: NSWSTGTPDecodeBitmaps.h:23
Muon::nsw::STGTPL1A::size_l1a_local_rel_BCID
constexpr int size_l1a_local_rel_BCID
Definition: NSWSTGTPDecodeBitmaps.h:29
Muon::nsw::STGTPL1A::size_l1a_close_BCID
constexpr int size_l1a_close_BCID
Definition: NSWSTGTPDecodeBitmaps.h:32