ATLAS Offline Software
TagDefinitions.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 //
4 // Dear emacs, this is -*- c++ -*-
5 //
6 
7 #ifndef CALORECGPU_TAGDEFINITIONS_H
8 #define CALORECGPU_TAGDEFINITIONS_H
9 
10 #include "BaseDefinitions.h"
11 
12 #include <cstdint>
13 
14 namespace CaloRecGPU
15 {
31  struct TagBase
32  {
33  public:
34 
35  using carrier = unsigned long long int;
36  //uint64_t is unsigned long long int in CUDA.
37 
39 
40  constexpr operator carrier () const
41  {
42  return value;
43  }
44 
45  constexpr TagBase (const carrier v): value(v)
46  {
47  }
48 
49  constexpr TagBase & operator = (const carrier v)
50  {
51  value = v;
52  return (*this);
53  }
54 
55  protected:
56 
57  constexpr static carrier s_bit_mask = 0x8000000000000000ULL;
58  //0x 8000 0000 0000 0000
59 
60  constexpr static carrier s_second_16bit_mask = 0x7FFF800000000000ULL;
61  //0x 7FFF 8000 0000 0000
62 
63  constexpr static carrier s_middle_31bit_mask = 0x00007FFFFFFF0000ULL;
64  //0x 0000 7FFF FFFF 0000
65 
66  constexpr static carrier s_first_16bit_mask = 0x000000000000FFFFULL;
67  //0x 0000 0000 0000 FFFF
68 
69  public:
70 
71  [[nodiscard]] constexpr bool get_flag() const
72  {
73  return value & s_bit_mask;
74  }
75 
76  [[nodiscard]] constexpr uint32_t get_second_16bit() const
77  //We use ints to better fit CUDA hardware.
78  {
79  carrier pre_shift = value & s_second_16bit_mask;
80  uint32_t ret = pre_shift >> 47;
81  return ret;
82  }
83 
84  [[nodiscard]] constexpr uint32_t get_middle_31bit() const
85  {
86  carrier pre_shift = value & s_middle_31bit_mask;
87  uint32_t ret = pre_shift >> 16;
88  return ret;
89  }
90 
91  [[nodiscard]] constexpr uint32_t get_first_16bit() const
92  //We use ints to better fit CUDA hardware.
93  {
95  return ret;
96  }
97 
98  [[nodiscard]] constexpr carrier clear_flag() const
99  {
100  return value & (~ s_bit_mask);
101  }
102 
103  [[nodiscard]] constexpr carrier clear_second_16bit() const
104  {
105  return value & (~ s_second_16bit_mask);
106  }
107 
108  [[nodiscard]] constexpr carrier clear_middle_31bit() const
109  {
110  return value & (~ s_middle_31bit_mask);
111  }
112 
113  [[nodiscard]] constexpr carrier clear_first_16bit() const
114  {
115  return value & (~ s_first_16bit_mask);
116  }
117 
118  [[nodiscard]] constexpr carrier keep_only_flag() const
119  {
120  return value & s_bit_mask;
121  }
122 
123  [[nodiscard]] constexpr carrier keep_only_second_16bit() const
124  {
125  return value & s_second_16bit_mask;
126  }
127 
128  [[nodiscard]] constexpr carrier keep_only_middle_31bit() const
129  {
130  return value & s_middle_31bit_mask;
131  }
132 
133  [[nodiscard]] constexpr carrier keep_only_first_16bit() const
134  {
135  return value & s_first_16bit_mask;
136  }
137 
138  [[nodiscard]] constexpr carrier or_flag(const bool bit) const
139  {
140  return value | (bit * s_bit_mask);
141  }
142 
143  [[nodiscard]] constexpr carrier or_second_16bit(const uint16_t pattern) const
144  //We use ints to better fit CUDA hardware.
145  {
146  carrier temp = pattern;
147  return value | (temp << 47);
148  }
149 
150  [[nodiscard]] constexpr carrier or_middle_31bit(const uint32_t pattern) const
151  {
152  carrier temp = pattern & 0x7FFFFFFFU;
153  //To make sure the highest bit is unset.
154  return value | (temp << 16);
155  }
156 
157  [[nodiscard]] constexpr carrier or_first_16bit(const uint16_t pattern) const
158  //We use ints to better fit CUDA hardware.
159  {
160  uint32_t temp = pattern;
161  return value | temp;
162  }
163 
164  [[nodiscard]] constexpr carrier override_flag(const bool bit) const
165  {
166  return (value & (~ s_bit_mask)) | (bit * s_bit_mask);
167  }
168 
169  [[nodiscard]] constexpr carrier override_second_16bit(const uint16_t pattern) const
170  //We use ints to better fit CUDA hardware.
171  {
172  const carrier temp = pattern;
173  return (value & (~ s_second_16bit_mask)) | (temp << 47);
174  }
175 
176  [[nodiscard]] constexpr carrier override_middle_31bit(const uint32_t pattern) const
177  {
178  const carrier temp = pattern & 0x7FFFFFFFU;
179  //To make sure the highest bit is unset.
180  return (value & (~ s_middle_31bit_mask)) | (temp << 16);
181  }
182 
183  [[nodiscard]] constexpr carrier override_first_16bit(const uint16_t pattern) const
184  //We use ints to better fit CUDA hardware.
185  {
186  const uint32_t temp = pattern;
187  return (value & (~ s_first_16bit_mask)) | temp;
188  }
189 
190  [[nodiscard]] static constexpr carrier make_base_tag(const uint16_t lower = 0, const uint32_t middle = 0, const uint16_t upper = 0, const bool last = false)
191  {
192  carrier ret = upper;
193  ret = (ret << 31) | (middle & 0x7FFFFFFFU);
194  ret = (ret << 16) | lower;
195 
196  ret = ret | (s_bit_mask * last);
197 
198  return ret;
199  }
200 
201  [[nodiscard]] static constexpr carrier make_invalid_tag()
202  {
203  return 0ULL;
204  }
205 
206  };
207 
221  struct ClusterTag : public TagBase
222  {
223  public:
224 
225  using TagBase::TagBase;
226 
227 
228  [[nodiscard]] static constexpr carrier make_tag(const uint16_t cluster_index = 0, const int32_t weight = 0, const uint16_t second_cluster_index = 0)
229  {
230  return make_base_tag(cluster_index, weight, second_cluster_index, true);
231  }
232 
233  [[nodiscard]] constexpr bool is_part_of_cluster() const
234  {
235  return this->get_flag();
236  }
237 
238  [[nodiscard]] static constexpr bool is_part_of_cluster(const ClusterTag tag)
239  {
240  return tag.is_part_of_cluster();
241  }
242 
243  [[nodiscard]] constexpr int32_t cluster_index() const
244  {
245  return this->get_first_16bit();
246  }
247 
248  [[nodiscard]] static constexpr int32_t cluster_index(const ClusterTag tag)
249  {
250  return tag.cluster_index();
251  }
252 
253  [[nodiscard]] constexpr int32_t secondary_cluster_index() const
254  {
255  return this->get_second_16bit();
256  }
257 
258  [[nodiscard]] static constexpr int32_t secondary_cluster_index(const ClusterTag tag)
259  {
260  return tag.secondary_cluster_index();
261  }
262 
263  [[nodiscard]] constexpr int32_t secondary_cluster_weight() const
264  {
265  return this->get_middle_31bit();
266  }
267 
268  [[nodiscard]] static constexpr int32_t secondary_cluster_weight(const ClusterTag tag)
269  {
270  return tag.secondary_cluster_weight();
271  }
272 
273  [[nodiscard]] constexpr bool is_shared_between_clusters() const
274  {
275  return this->is_part_of_cluster() && this->secondary_cluster_weight() > 0;
276  }
277 
278  [[nodiscard]] static constexpr bool is_shared_between_clusters(const ClusterTag tag)
279  {
280  return tag.is_shared_between_clusters();
281  }
282 
283  [[nodiscard]] constexpr carrier set_part_of_cluster(const bool is_part = true) const
284  {
285  return this->or_flag(is_part);
286  }
287 
288  [[nodiscard]] constexpr carrier set_cluster_index(const int32_t index) const
289  {
290  return this->or_first_16bit(index & 0xFFFFU);
291  }
292 
293  [[nodiscard]] constexpr carrier set_secondary_cluster_index(const int32_t index) const
294  {
295  return this->or_second_16bit(index & 0xFFFFU);
296  }
297 
298  [[nodiscard]] constexpr carrier set_secondary_cluster_weight(const int32_t weight) const
299  {
300  return this->or_middle_31bit(weight);
301  }
302 
303  [[nodiscard]] constexpr carrier override_part_of_cluster(const bool is_part = true) const
304  {
305 
306  return this->override_flag(is_part);
307  }
308 
309  [[nodiscard]] constexpr carrier override_cluster_index(const int32_t index) const
310  {
311  return this->override_first_16bit(index & 0xFFFFU);
312  }
313 
314  [[nodiscard]] constexpr carrier override_secondary_cluster_index(const int32_t index) const
315  {
316  return this->override_second_16bit(index & 0xFFFFU);
317  }
318 
319  [[nodiscard]] constexpr carrier override_secondary_cluster_weight(const int32_t weight) const
320  {
321  return this->override_middle_31bit(weight);
322  }
323  };
324 
326 }
327 
328 #endif
mergePhysValFiles.pattern
pattern
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:26
CaloRecGPU::TagBase::make_base_tag
static constexpr carrier make_base_tag(const uint16_t lower=0, const uint32_t middle=0, const uint16_t upper=0, const bool last=false)
Definition: TagDefinitions.h:190
CaloRecGPU::ClusterTag::make_tag
static constexpr carrier make_tag(const uint16_t cluster_index=0, const int32_t weight=0, const uint16_t second_cluster_index=0)
Definition: TagDefinitions.h:228
CaloRecGPU::ClusterTag::override_secondary_cluster_weight
constexpr carrier override_secondary_cluster_weight(const int32_t weight) const
Definition: TagDefinitions.h:319
CaloRecGPU::ClusterTag::secondary_cluster_index
constexpr int32_t secondary_cluster_index() const
Definition: TagDefinitions.h:253
CaloRecGPU::TagBase::override_first_16bit
constexpr carrier override_first_16bit(const uint16_t pattern) const
Definition: TagDefinitions.h:183
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
CaloRecGPU::ClusterTag::is_shared_between_clusters
constexpr bool is_shared_between_clusters() const
Definition: TagDefinitions.h:273
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
index
Definition: index.py:1
CaloRecGPU::TagBase::or_second_16bit
constexpr carrier or_second_16bit(const uint16_t pattern) const
Definition: TagDefinitions.h:143
CaloRecGPU::TagBase::get_flag
constexpr bool get_flag() const
Definition: TagDefinitions.h:71
CaloRecGPU::TagBase::operator=
constexpr TagBase & operator=(const carrier v)
Definition: TagDefinitions.h:49
upper
int upper(int c)
Definition: LArBadChannelParser.cxx:49
CaloRecGPU::ClusterTag::is_shared_between_clusters
static constexpr bool is_shared_between_clusters(const ClusterTag tag)
Definition: TagDefinitions.h:278
CaloRecGPU::TagBase::clear_second_16bit
constexpr carrier clear_second_16bit() const
Definition: TagDefinitions.h:103
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:562
CaloRecGPU::ClusterTag::set_secondary_cluster_weight
constexpr carrier set_secondary_cluster_weight(const int32_t weight) const
Definition: TagDefinitions.h:298
CaloRecGPU::TagBase::or_flag
constexpr carrier or_flag(const bool bit) const
Definition: TagDefinitions.h:138
CaloRecGPU::ClusterTag
Definition: TagDefinitions.h:222
CaloRecGPU::TagBase::keep_only_second_16bit
constexpr carrier keep_only_second_16bit() const
Definition: TagDefinitions.h:123
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
CaloRecGPU::TagBase::override_middle_31bit
constexpr carrier override_middle_31bit(const uint32_t pattern) const
Definition: TagDefinitions.h:176
CaloRecGPU::TagBase::s_second_16bit_mask
constexpr static carrier s_second_16bit_mask
Definition: TagDefinitions.h:60
CaloRecGPU::ClusterTag::cluster_index
constexpr int32_t cluster_index() const
Definition: TagDefinitions.h:243
CaloRecGPU::TagBase::value
carrier value
Definition: TagDefinitions.h:38
CaloRecGPU::ClusterTag::override_part_of_cluster
constexpr carrier override_part_of_cluster(const bool is_part=true) const
Definition: TagDefinitions.h:303
CaloRecGPU::tag_type
TagBase::carrier tag_type
Definition: TagDefinitions.h:325
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
CaloRecGPU::ClusterTag::set_secondary_cluster_index
constexpr carrier set_secondary_cluster_index(const int32_t index) const
Definition: TagDefinitions.h:293
ret
T ret(T t)
Definition: rootspy.cxx:260
CaloRecGPU::TagBase::keep_only_first_16bit
constexpr carrier keep_only_first_16bit() const
Definition: TagDefinitions.h:133
CaloRecGPU::TagBase::override_second_16bit
constexpr carrier override_second_16bit(const uint16_t pattern) const
Definition: TagDefinitions.h:169
CaloRecGPU::TagBase::get_second_16bit
constexpr uint32_t get_second_16bit() const
Definition: TagDefinitions.h:76
CaloRecGPU::ClusterTag::secondary_cluster_index
static constexpr int32_t secondary_cluster_index(const ClusterTag tag)
Definition: TagDefinitions.h:258
CaloRecGPU::TagBase::or_first_16bit
constexpr carrier or_first_16bit(const uint16_t pattern) const
Definition: TagDefinitions.h:157
CaloRecGPU::TagBase::keep_only_flag
constexpr carrier keep_only_flag() const
Definition: TagDefinitions.h:118
CaloRecGPU::TagBase::TagBase
constexpr TagBase(const carrier v)
Definition: TagDefinitions.h:45
CaloRecGPU::TagBase::s_first_16bit_mask
constexpr static carrier s_first_16bit_mask
Definition: TagDefinitions.h:66
CaloRecGPU::TagBase::keep_only_middle_31bit
constexpr carrier keep_only_middle_31bit() const
Definition: TagDefinitions.h:128
CaloRecGPU::ClusterTag::cluster_index
static constexpr int32_t cluster_index(const ClusterTag tag)
Definition: TagDefinitions.h:248
CaloRecGPU::TagBase::s_bit_mask
constexpr static carrier s_bit_mask
Definition: TagDefinitions.h:57
CaloRecGPU::ClusterTag::is_part_of_cluster
constexpr bool is_part_of_cluster() const
Definition: TagDefinitions.h:233
CaloRecGPU::TagBase::s_middle_31bit_mask
constexpr static carrier s_middle_31bit_mask
Definition: TagDefinitions.h:63
python.PyAthena.v
v
Definition: PyAthena.py:157
CaloRecGPU::TagBase::clear_first_16bit
constexpr carrier clear_first_16bit() const
Definition: TagDefinitions.h:113
CaloRecGPU::ClusterTag::is_part_of_cluster
static constexpr bool is_part_of_cluster(const ClusterTag tag)
Definition: TagDefinitions.h:238
CaloRecGPU::TagBase::override_flag
constexpr carrier override_flag(const bool bit) const
Definition: TagDefinitions.h:164
CaloRecGPU::ClusterTag::set_part_of_cluster
constexpr carrier set_part_of_cluster(const bool is_part=true) const
Definition: TagDefinitions.h:283
CaloRecGPU::ClusterTag::set_cluster_index
constexpr carrier set_cluster_index(const int32_t index) const
Definition: TagDefinitions.h:288
CaloRecGPU::ClusterTag::secondary_cluster_weight
static constexpr int32_t secondary_cluster_weight(const ClusterTag tag)
Definition: TagDefinitions.h:268
CaloRecGPU::TagBase
Definition: TagDefinitions.h:32
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
CaloRecGPU::TagBase::clear_flag
constexpr carrier clear_flag() const
Definition: TagDefinitions.h:98
CaloRecGPU::ClusterTag::override_cluster_index
constexpr carrier override_cluster_index(const int32_t index) const
Definition: TagDefinitions.h:309
CaloRecGPU::ClusterTag::override_secondary_cluster_index
constexpr carrier override_secondary_cluster_index(const int32_t index) const
Definition: TagDefinitions.h:314
CaloRecGPU::TagBase::carrier
unsigned long long int carrier
Definition: TagDefinitions.h:35
CaloRecGPU
Definition: BaseDefinitions.h:11
CaloRecGPU::TagBase::make_invalid_tag
static constexpr carrier make_invalid_tag()
Definition: TagDefinitions.h:201
CaloRecGPU::TagBase::get_first_16bit
constexpr uint32_t get_first_16bit() const
Definition: TagDefinitions.h:91
CaloRecGPU::TagBase::get_middle_31bit
constexpr uint32_t get_middle_31bit() const
Definition: TagDefinitions.h:84
CaloRecGPU::ClusterTag::secondary_cluster_weight
constexpr int32_t secondary_cluster_weight() const
Definition: TagDefinitions.h:263
BaseDefinitions.h
CaloRecGPU::TagBase::clear_middle_31bit
constexpr carrier clear_middle_31bit() const
Definition: TagDefinitions.h:108
CaloRecGPU::TagBase::or_middle_31bit
constexpr carrier or_middle_31bit(const uint32_t pattern) const
Definition: TagDefinitions.h:150