ATLAS Offline Software
Loading...
Searching...
No Matches
NSWSTGTPDecodeBitmaps.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef _MUON_NSW_STGTP_DECODE_BITMAPS_H_
6#define _MUON_NSW_STGTP_DECODE_BITMAPS_H_
7
9#include <stdexcept>
10#include <cstddef>
11
12namespace Muon
13{
14 namespace nsw
15 {
16 namespace STGTPL1A {
17
18 constexpr int size_head_fragID = 4;
19 constexpr int size_head_sectID = 4;
20 constexpr int size_head_EC = 1;
21 constexpr int size_head_flags = 7;
22 constexpr int size_head_BCID = 12;
23 constexpr int size_head_orbit = 2;
24 constexpr int size_head_spare = 2;
25 constexpr int size_L1ID = 32;
26
27 constexpr int size_l1a_versionID = 8; // version 2+
28 constexpr int size_l1a_local_req_BCID = 12;
29 constexpr int size_l1a_local_rel_BCID = 12;
30 constexpr int size_l1a_open_BCID = 12;
31 constexpr int size_l1a_req_BCID = 12;
32 constexpr int size_l1a_close_BCID = 12;
33 constexpr int size_l1a_timeout = 12;
34 constexpr int size_l1a_open_BCID_offset = 12;
35 constexpr int size_l1a_req_BCID_offset = 12;
36 constexpr int size_l1a_close_BCID_offset = 12;
37 constexpr int size_l1a_timeout_config = 12;
38 constexpr int size_l1a_busy_thr = 8; // version 2+
39 constexpr int size_l1a_engine_snapshot = 16; // version 2+
40 constexpr int size_l1a_link_const = 32;
41 constexpr int size_l1a_padding = 8; // version 2+
42
43
44 constexpr int size_l1a_wdw_matching_engines_usage = 32; // this is only present in version 1
45 constexpr int loc_version1_anchor = 192;
46 constexpr uint32_t version1_anchor_value = 0xABC0ABC1;
47
48
49
50 constexpr int size_stream_head_nbits = 16;
51 constexpr int size_stream_head_nwords = 16;
52 constexpr int size_stream_head_fifo_size = 16;
53 constexpr int size_stream_head_streamID = 16;
54 constexpr int size_trailer_CRC = 16;
55
56
57 };
58
59 namespace STGTPPad {
60 constexpr std::size_t num_pads = 4;
61 constexpr std::size_t pad_stream_header = 0xAAD0;
62 constexpr std::size_t n_words = 3; // size in 32 bit words
63 constexpr std::size_t size_coincidence_wedge = 16;
64 constexpr std::size_t size_phiID = 6;
65 constexpr std::size_t size_bandID = 8;
66 constexpr std::size_t size_BCID = 12;
67 constexpr std::size_t size_spare = 3;
68 constexpr std::size_t size_idleFlag = 1;
69 constexpr std::size_t size_padding = 8;
70 constexpr std::size_t size_v2_padding = 40;
71 constexpr std::size_t size_v3_padding = 40;
72 constexpr std::size_t size_v1 = 96;
73 constexpr std::size_t size_v2 = 96;
74 constexpr std::size_t size_v3 = 128;
75 constexpr int pad_stream_invalid_band_id = 0xFF;
76 };
77
78 namespace STGTPMMData {
79 constexpr std::size_t num_mm = 8;
80 constexpr int mm_stream_header = 0xC0CA;
81 constexpr int size_output_mm_valids = 8;
82 constexpr int size_output_mm_monitor = 1;
83 constexpr int size_output_mm_spare = 2;
84 constexpr int size_output_mm_lowRes = 1;
85 constexpr int size_output_mm_phiRes = 1;
86 constexpr int size_output_mm_dTheta = 5;
87 constexpr int size_output_mm_phiID = 6;
88 constexpr int size_output_mm_rIndex = 8;
89
90 constexpr int size_bcid = 12;
91 constexpr int size_v3_padding = 44; // now we have the valid bits
92
93 constexpr std::size_t size_v1 = 0;
94 constexpr std::size_t size_v2 = 0;
95 constexpr std::size_t size_v3 = 256;
96 constexpr int mm_stream_invalid_dTheta = 16;
97
98 };
99
100 namespace STGTPSegments {
101 constexpr std::size_t num_segments = 8;
102
103 constexpr int merge_stream_header = 0xAEE0;
104 constexpr int n_words = 32;
105 constexpr int size_lut_choice_selection = 24;
106 constexpr int size_nsw_segment_selector = 12;
107 constexpr int size_valid_segment_selector = 12;
108
110 constexpr int size_output_segment_spare = 2;
111 constexpr int size_output_segment_lowRes = 1;
112 constexpr int size_output_segment_phiRes = 1;
113 constexpr int size_output_segment_dTheta = 5;
114 constexpr int size_output_segment_phiID = 6;
115 constexpr int size_output_segment_rIndex = 8;
116
117 constexpr int size_bcid = 12;
118 constexpr int size_sectorID = 4;
119 constexpr int size_v3_padding = 28;
120 constexpr std::size_t size_v1 = 256;
121 constexpr std::size_t size_v2 = 256;
122 constexpr std::size_t size_v3 = 256;
123 constexpr std::size_t size_valid_segment_v3 = 8;
124 constexpr int merge_stream_invalid_dTheta = 16;
125
135
136 constexpr uint32_t getSegmentProperty(const uint32_t mask, const MergedSegmentProperty prop) {
137 const auto shift = min_bit(static_cast<uint32_t>(prop));
138 if (shift < 0) {
139 throw std::runtime_error("bitshift is negative in NSWSTGTPDecodeBitmaps getSegmentProperty");
140 }
141 return (mask & static_cast<uint32_t>(prop) ) >> shift;
142 }
143
144 constexpr void encodeSegmentProperty(const MergedSegmentProperty prop, const uint32_t word, uint32_t& buffer) {
145 const auto shift = min_bit(static_cast<uint32_t>(prop));
146 if (shift < 0) {
147 throw std::runtime_error("bitshift is negative in NSWSTGTPDecodeBitmaps encodeSegmentProperty");
148 }
149 uint32_t shifted_word = (word << shift);
150 buffer = (buffer) | (shifted_word & static_cast<uint32_t>(prop));
151 }
152
153 namespace moduleIDBits{
155 constexpr uint8_t stationID = 1;
157 constexpr uint8_t detectorSite = 1;
159 constexpr uint8_t stationEta = 4;
161 constexpr uint8_t stationPhi = 8;
162 }
169 constexpr uint32_t getIdentifierProperty(const uint32_t mask, const ModuleIDProperty prop) {
170 const auto shift = min_bit(static_cast<uint32_t>(prop));
171 if (shift < 0) {
172 throw std::runtime_error("bitshift is negative in NSWSTGTPDecodeBitmaps getIdentifierProperty");
173 }
174 return (mask & static_cast<uint32_t>(prop)) >> shift;
175
176 }
177 constexpr void encodeIdentifierProperty(const ModuleIDProperty prop, const uint32_t word, uint32_t& buffer) {
178 const auto shift = min_bit(static_cast<uint32_t>(prop));
179 if (shift < 0) {
180 throw std::runtime_error("bitshift is negative in NSWSTGTPDecodeBitmaps encodeIdentifierProperty");
181 }
182 uint32_t shifted_word = (word << shift);
183 buffer = (buffer) | (shifted_word & static_cast<uint32_t>(prop));
184 }
185 }
186
187 namespace STGTPStrips {
188 constexpr std::size_t num_strips = 112;
189 constexpr std::size_t num_offsets = 8;
190
191 constexpr int strip_stream_header = 0xC01A;
192 constexpr int size_padding = 70;
193 constexpr int size_strip_adc = 6;
194 constexpr int size_offset = 16;
195 constexpr int size_phi_id_value = 5;
196 constexpr int size_phi_id_sign = 1;
197 constexpr int size_band_id = 8;
198 constexpr int size_bcid = 12;
199
200 constexpr std::size_t size_v1 = 896;
201 constexpr std::size_t size_v2 = 896;
202 constexpr std::size_t size_v3 = 896;
203 }
204 }
205}
206
207#endif // _MUON_NSW_STGTP_DECODE_BITMAPS_H_
constexpr uint32_t version1_anchor_value
constexpr int size_l1a_open_BCID_offset
constexpr int size_stream_head_fifo_size
constexpr int size_stream_head_streamID
constexpr int size_l1a_link_const
constexpr int size_l1a_local_req_BCID
constexpr int size_l1a_close_BCID_offset
constexpr int size_l1a_local_rel_BCID
constexpr int size_l1a_timeout_config
constexpr int size_l1a_engine_snapshot
constexpr int size_l1a_req_BCID_offset
constexpr int size_l1a_close_BCID
constexpr int size_l1a_wdw_matching_engines_usage
constexpr int size_stream_head_nwords
constexpr int size_stream_head_nbits
constexpr int loc_version1_anchor
constexpr std::size_t size_v2
constexpr std::size_t num_mm
constexpr std::size_t size_v3
constexpr std::size_t size_v1
constexpr std::size_t n_words
constexpr std::size_t size_v2
constexpr std::size_t size_phiID
constexpr std::size_t size_coincidence_wedge
constexpr std::size_t num_pads
constexpr std::size_t pad_stream_header
constexpr std::size_t size_bandID
constexpr std::size_t size_v3_padding
constexpr int pad_stream_invalid_band_id
constexpr std::size_t size_v2_padding
constexpr std::size_t size_BCID
constexpr std::size_t size_spare
constexpr std::size_t size_v1
constexpr std::size_t size_padding
constexpr std::size_t size_idleFlag
constexpr std::size_t size_v3
constexpr uint8_t detectorSite
Side 0 for A / 1 for C.
constexpr uint8_t stationID
Large or Small wedge.
constexpr uint8_t stationPhi
station Phi 1 to 8
constexpr std::size_t size_v3
constexpr std::size_t size_v2
constexpr uint32_t getSegmentProperty(const uint32_t mask, const MergedSegmentProperty prop)
constexpr std::size_t size_v1
constexpr std::size_t num_segments
constexpr std::size_t size_valid_segment_v3
constexpr void encodeSegmentProperty(const MergedSegmentProperty prop, const uint32_t word, uint32_t &buffer)
constexpr void encodeIdentifierProperty(const ModuleIDProperty prop, const uint32_t word, uint32_t &buffer)
constexpr uint32_t getIdentifierProperty(const uint32_t mask, const ModuleIDProperty prop)
constexpr std::size_t num_strips
constexpr std::size_t size_v3
constexpr std::size_t size_v2
constexpr std::size_t size_v1
constexpr std::size_t num_offsets
constexpr int8_t min_bit(const T number)
Returns the most right hand bit which is set in a number.
constexpr int8_t max_bit(const T number)
Returns the most left hand bit which is set in a number.
constexpr Out fill_bitmask(const uint8_t first_bit, const uint8_t num_bits)
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.