Project
Loading...
Searching...
No Matches
DetID.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
15
28#ifndef O2_BASE_DETID_
29#define O2_BASE_DETID_
30
31#include "GPUCommonRtypes.h"
32#include "GPUCommonBitSet.h"
33#include "MathUtils/Utils.h"
35#ifndef GPUCA_GPUCODE_DEVICE
36#include "Headers/DataHeader.h"
37#include <array>
38#include <bitset>
39#include <cassert>
40#include <cstdint>
41#include <string_view>
42#include <string>
43#include <type_traits>
44#endif
45
46namespace o2
47{
48namespace header
49{
50}
51namespace detectors
52{
53
54namespace o2h = o2::header;
55
57class DetID
58{
59 public:
61 typedef int ID;
62
63 static constexpr ID ITS = 0;
64 static constexpr ID TPC = 1;
65 static constexpr ID TRD = 2;
66 static constexpr ID TOF = 3;
67 static constexpr ID PHS = 4;
68 static constexpr ID CPV = 5;
69 static constexpr ID EMC = 6;
70 static constexpr ID HMP = 7;
71 static constexpr ID MFT = 8;
72 static constexpr ID MCH = 9;
73 static constexpr ID MID = 10;
74 static constexpr ID ZDC = 11;
75 static constexpr ID FT0 = 12;
76 static constexpr ID FV0 = 13;
77 static constexpr ID FDD = 14;
78 static constexpr ID TST = 15;
79 static constexpr ID CTP = 16;
80 static constexpr ID FOC = 17;
81#ifdef ENABLE_UPGRADES
82 static constexpr ID IT3 = 18;
83 static constexpr ID TRK = 19;
84 static constexpr ID FT3 = 20;
85 static constexpr ID FCT = 21;
86 static constexpr ID TF3 = 22;
87 static constexpr ID RCH = 23;
88 static constexpr ID MI3 = 24;
89 static constexpr ID ECL = 25;
90 static constexpr ID Last = ECL;
91#else
92 static constexpr ID Last = FOC;
93#endif
94 static constexpr ID First = ITS;
95
96 static constexpr int nDetectors = Last + 1;
98 static_assert(nDetectors <= 32, "bitset<32> insufficient");
99
100 static constexpr mask_t FullMask = (0x1u << nDetectors) - 1;
101
102#ifndef GPUCA_GPUCODE_DEVICE
103 static constexpr std::string_view NONE{"none"};
104 static constexpr std::string_view ALL{"all"};
105#endif // GPUCA_GPUCODE_DEVICE
106
107 constexpr GPUdi() DetID(ID id) : mID(id)
108 {
109 }
110
111#ifndef GPUCA_GPUCODE_DEVICE
112 constexpr DetID(const char* name) : mID(nameToID(name, First))
113 {
114 // construct from the name
115 assert(mID < nDetectors);
116 }
117#endif // GPUCA_GPUCODE_DEVICE
118
119 GPUdDefault() DetID(const DetID& src) = default;
120 GPUdDefault() DetID& operator=(const DetID& src) = default;
121 // we need default c-tor only for root persistency, code must use c-tor with argument
122 DetID() : mID(First) {}
123
125 GPUdi() ID getID() const { return mID; }
127 GPUdi() mask_t getMask() const { return getMask(mID); }
128#ifndef GPUCA_GPUCODE_DEVICE
130 GPUdi() o2h::DataOrigin getDataOrigin() const { return getDataOrigin(mID); }
132 const char* getName() const { return getName(mID); }
133#endif // GPUCA_GPUCODE_DEVICE
135 GPUdi() operator int() const { return static_cast<int>(mID); }
136
137 // ---------------- general static methods -----------------
139 GPUdi() static constexpr int getNDetectors() { return nDetectors; }
140 // detector ID to mask conversion
141 GPUd() static constexpr mask_t getMask(ID id);
142
143#ifndef GPUCA_GPUCODE_DEVICE
145 static constexpr const char* getName(ID id) { return sDetNames[id]; }
146 // detector ID to DataOrigin conversions
147 static constexpr o2h::DataOrigin getDataOrigin(ID id) { return sOrigins[id]; }
148
149 // detector masks from any non-alpha-num delimiter-separated list (empty if NONE is supplied)
150 static mask_t getMask(const std::string_view detList);
151
152 static std::string getNames(mask_t mask, char delimiter = ',');
153
154 inline static constexpr int nameToID(char const* name, int id = First)
155 {
156 return id > Last ? -1 : sameStr(name, sDetNames[id]) ? id
157 : nameToID(name, id + 1);
158 }
159
160#endif // GPUCA_GPUCODE_DEVICE
161
162 static bool upgradesEnabled()
163 {
164#ifdef ENABLE_UPGRADES
165 return true;
166#else
167 return false;
168#endif
169 }
170
171 private:
172 // are 2 strings equal ? (trick from Giulio)
173 GPUdi() static constexpr bool sameStr(char const* x, char const* y)
174 {
175 return !*x && !*y ? true : /* default */ (*x == *y && sameStr(x + 1, y + 1));
176 }
177
178 ID mID = First;
179
180#ifndef GPUCA_GPUCODE_DEVICE
181 // detector names, will be defined in DataSources
182 static constexpr const char* sDetNames[nDetectors + 1] =
183#ifdef ENABLE_UPGRADES
184 {"ITS", "TPC", "TRD", "TOF", "PHS", "CPV", "EMC", "HMP", "MFT", "MCH", "MID", "ZDC", "FT0", "FV0", "FDD", "TST", "CTP", "FOC", "IT3", "TRK", "FT3", "FCT", "TF3", "RCH", "MI3", "ECL", nullptr};
185#else
186 {"ITS", "TPC", "TRD", "TOF", "PHS", "CPV", "EMC", "HMP", "MFT", "MCH", "MID", "ZDC", "FT0", "FV0", "FDD", "TST", "CTP", "FOC", nullptr};
187#endif
188
189 static constexpr std::array<o2h::DataOrigin, nDetectors>
190 sOrigins =
195#ifdef ENABLE_UPGRADES
196 ,
199#endif
200 };
201#endif // GPUCA_GPUCODE_DEVICE
202
203 ClassDefNV(DetID, 4);
204};
205
206namespace detid_internal
207{
208// static constexpr array class members not possible on the GPU, thus we use this trick.
210 {DetID::mask_t(math_utils::bit2Mask(DetID::ITS)), DetID::mask_t(math_utils::bit2Mask(DetID::TPC)), DetID::mask_t(math_utils::bit2Mask(DetID::TRD)), DetID::mask_t(math_utils::bit2Mask(DetID::TOF)), DetID::mask_t(math_utils::bit2Mask(DetID::PHS)),
211 DetID::mask_t(math_utils::bit2Mask(DetID::CPV)), DetID::mask_t(math_utils::bit2Mask(DetID::EMC)), DetID::mask_t(math_utils::bit2Mask(DetID::HMP)), DetID::mask_t(math_utils::bit2Mask(DetID::MFT)), DetID::mask_t(math_utils::bit2Mask(DetID::MCH)),
212 DetID::mask_t(math_utils::bit2Mask(DetID::MID)), DetID::mask_t(math_utils::bit2Mask(DetID::ZDC)), DetID::mask_t(math_utils::bit2Mask(DetID::FT0)), DetID::mask_t(math_utils::bit2Mask(DetID::FV0)), DetID::mask_t(math_utils::bit2Mask(DetID::FDD)),
213 DetID::mask_t(math_utils::bit2Mask(DetID::TST)), DetID::mask_t(math_utils::bit2Mask(DetID::CTP)), DetID::mask_t(math_utils::bit2Mask(DetID::FOC))
214#ifdef ENABLE_UPGRADES
215 ,
216 DetID::mask_t(math_utils::bit2Mask(DetID::IT3)), DetID::mask_t(math_utils::bit2Mask(DetID::TRK)), DetID::mask_t(math_utils::bit2Mask(DetID::FT3)), DetID::mask_t(math_utils::bit2Mask(DetID::FCT)), DetID::mask_t(math_utils::bit2Mask(DetID::TF3)),
217 DetID::mask_t(math_utils::bit2Mask(DetID::RCH)), DetID::mask_t(math_utils::bit2Mask(DetID::MI3)), DetID::mask_t(math_utils::bit2Mask(DetID::ECL))
218#endif
219};
220} // namespace detid_internal
221
222GPUdi() constexpr DetID::mask_t DetID::getMask(ID id) { return detid_internal::sMasks[id]; }
223
224} // namespace detectors
225} // namespace o2
226
227#endif
General auxilliary methods.
#define GPUdDefault()
#define GPUconstexpr()
Static class with identifiers, bitmasks and names for ALICE detectors.
Definition DetID.h:58
static constexpr const char * getName(ID id)
names of defined detectors
Definition DetID.h:145
o2::gpu::gpustd::bitset< 32 > mask_t
Definition DetID.h:97
static constexpr std::string_view NONE
keywork for no-detector
Definition DetID.h:103
static constexpr ID CTP
Definition DetID.h:79
static constexpr ID TST
Definition DetID.h:78
static constexpr ID FV0
Definition DetID.h:76
static constexpr std::string_view ALL
keywork for all detectors
Definition DetID.h:104
static constexpr ID PHS
Definition DetID.h:67
static bool upgradesEnabled()
Definition DetID.h:162
static std::string getNames(mask_t mask, char delimiter=',')
Definition DetID.cxx:74
GPUdi() ID getID() const
get detector id
Definition DetID.h:125
int ID
Detector identifiers: continuous, starting from 0.
Definition DetID.h:61
static constexpr ID MID
Definition DetID.h:73
static constexpr ID ITS
Definition DetID.h:63
GPUd() static const expr mask_t getMask(ID id)
static constexpr ID First
Definition DetID.h:94
static constexpr ID MFT
Definition DetID.h:71
static constexpr int nDetectors
number of defined detectors
Definition DetID.h:96
constexpr GPUdi() DetID(ID id)
Definition DetID.h:107
static constexpr ID ZDC
Definition DetID.h:74
GPUdi() o2h
get detector origin
Definition DetID.h:130
static constexpr int nameToID(char const *name, int id=First)
Definition DetID.h:154
static constexpr ID FT0
Definition DetID.h:75
static constexpr mask_t FullMask
Definition DetID.h:100
static constexpr ID CPV
Definition DetID.h:68
GPUdDefault() DetID(const DetID &src)=default
static constexpr ID TRD
Definition DetID.h:65
static constexpr ID Last
if extra detectors added, update this !!!
Definition DetID.h:92
static constexpr ID FOC
Definition DetID.h:80
constexpr DetID(const char *name)
Definition DetID.h:112
static constexpr ID TPC
Definition DetID.h:64
static constexpr o2h::DataOrigin getDataOrigin(ID id)
Definition DetID.h:147
static constexpr ID EMC
Definition DetID.h:69
static mask_t getMask(const std::string_view detList)
detector masks from any non-alpha-num delimiter-separated list (empty if NONE is supplied)
Definition DetID.cxx:42
static constexpr ID FDD
Definition DetID.h:77
GPUdi() mask_t getMask() const
get detector mask
Definition DetID.h:127
static constexpr ID MCH
Definition DetID.h:72
static constexpr ID HMP
Definition DetID.h:70
static constexpr ID TOF
Definition DetID.h:66
GLint GLenum GLint x
Definition glcorearb.h:403
GLenum src
Definition glcorearb.h:1767
GLuint const GLchar * name
Definition glcorearb.h:781
GLint GLuint mask
Definition glcorearb.h:291
GLuint id
Definition glcorearb.h:650
constexpr o2::header::DataOrigin gDataOriginPHS
Definition DataHeader.h:574
constexpr o2::header::DataOrigin gDataOriginMFT
Definition DataHeader.h:572
constexpr o2::header::DataOrigin gDataOriginMCH
Definition DataHeader.h:571
constexpr o2::header::DataOrigin gDataOriginCTP
Definition DataHeader.h:564
constexpr o2::header::DataOrigin gDataOriginIT3
Definition DataHeader.h:582
constexpr o2::header::DataOrigin gDataOriginTST
Definition DataHeader.h:579
constexpr o2::header::DataOrigin gDataOriginMI3
Definition DataHeader.h:589
constexpr o2::header::DataOrigin gDataOriginTRK
Definition DataHeader.h:584
constexpr o2::header::DataOrigin gDataOriginHMP
Definition DataHeader.h:569
constexpr o2::header::DataOrigin gDataOriginTPC
Definition DataHeader.h:576
constexpr o2::header::DataOrigin gDataOriginFOC
Definition DataHeader.h:583
constexpr o2::header::DataOrigin gDataOriginFCT
Definition DataHeader.h:586
constexpr o2::header::DataOrigin gDataOriginFT3
Definition DataHeader.h:585
constexpr o2::header::DataOrigin gDataOriginZDC
Definition DataHeader.h:578
constexpr o2::header::DataOrigin gDataOriginRCH
Definition DataHeader.h:588
constexpr o2::header::DataOrigin gDataOriginMID
Definition DataHeader.h:573
constexpr o2::header::DataOrigin gDataOriginECL
Definition DataHeader.h:590
constexpr o2::header::DataOrigin gDataOriginFDD
Definition DataHeader.h:568
constexpr o2::header::DataOrigin gDataOriginFT0
Definition DataHeader.h:566
constexpr o2::header::DataOrigin gDataOriginTRD
Definition DataHeader.h:577
constexpr o2::header::DataOrigin gDataOriginEMC
Definition DataHeader.h:565
constexpr o2::header::DataOrigin gDataOriginTF3
Definition DataHeader.h:587
constexpr o2::header::DataOrigin gDataOriginTOF
Definition DataHeader.h:575
constexpr o2::header::DataOrigin gDataOriginITS
Definition DataHeader.h:570
constexpr o2::header::DataOrigin gDataOriginCPV
Definition DataHeader.h:563
constexpr o2::header::DataOrigin gDataOriginFV0
Definition DataHeader.h:567
GPUdi() const expr DetID
Definition DetID.h:222
O2 data header classes and API, v0.1.
Definition DetID.h:49
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...