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