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 FD3 = 26;
91 static constexpr ID Last = FD3;
92#else
93 static constexpr ID Last = FOC;
94#endif
95 static constexpr ID First = ITS;
96
97 static constexpr int nDetectors = Last + 1;
99 static_assert(nDetectors <= 32, "bitset<32> insufficient");
100
101 static constexpr mask_t FullMask = (0x1u << nDetectors) - 1;
102
103#ifndef GPUCA_GPUCODE_DEVICE
104 static constexpr std::string_view NONE{"none"};
105 static constexpr std::string_view ALL{"all"};
106#endif // GPUCA_GPUCODE_DEVICE
107
108 constexpr GPUdi() DetID(ID id) : mID(id)
109 {
110 }
111
112#ifndef GPUCA_GPUCODE_DEVICE
113 constexpr DetID(const char* name) : mID(nameToID(name, First))
114 {
115 // construct from the name
116 assert(mID < nDetectors);
117 }
118#endif // GPUCA_GPUCODE_DEVICE
119
120 GPUdDefault() DetID(const DetID& src) = default;
121 GPUdDefault() DetID& operator=(const DetID& src) = default;
122 // we need default c-tor only for root persistency, code must use c-tor with argument
123 DetID() : mID(First) {}
124
126 GPUdi() ID getID() const { return mID; }
128 GPUdi() mask_t getMask() const { return getMask(mID); }
129#ifndef GPUCA_GPUCODE_DEVICE
131 GPUdi() o2h::DataOrigin getDataOrigin() const { return getDataOrigin(mID); }
133 const char* getName() const { return getName(mID); }
134#endif // GPUCA_GPUCODE_DEVICE
136 GPUdi() operator int() const { return static_cast<int>(mID); }
137
138 // ---------------- general static methods -----------------
140 GPUdi() static constexpr int getNDetectors() { return nDetectors; }
141 // detector ID to mask conversion
142 GPUd() static constexpr mask_t getMask(ID id);
143
144#ifndef GPUCA_GPUCODE_DEVICE
146 static constexpr const char* getName(ID id) { return sDetNames[id]; }
147 // detector ID to DataOrigin conversions
148 static constexpr o2h::DataOrigin getDataOrigin(ID id) { return sOrigins[id]; }
149
150 // detector masks from any non-alpha-num delimiter-separated list (empty if NONE is supplied)
151 static mask_t getMask(const std::string_view detList);
152
153 static std::string getNames(mask_t mask, char delimiter = ',');
154
155 inline static constexpr int nameToID(char const* name, int id = First)
156 {
157 return id > Last ? -1 : sameStr(name, sDetNames[id]) ? id
158 : nameToID(name, id + 1);
159 }
160
161#endif // GPUCA_GPUCODE_DEVICE
162
163 static bool upgradesEnabled()
164 {
165#ifdef ENABLE_UPGRADES
166 return true;
167#else
168 return false;
169#endif
170 }
171
172 private:
173 // are 2 strings equal ? (trick from Giulio)
174 GPUdi() static constexpr bool sameStr(char const* x, char const* y)
175 {
176 return !*x && !*y ? true : /* default */ (*x == *y && sameStr(x + 1, y + 1));
177 }
178
179 ID mID = First;
180
181#ifndef GPUCA_GPUCODE_DEVICE
182 // detector names, will be defined in DataSources
183 static constexpr const char* sDetNames[nDetectors + 1] =
184#ifdef ENABLE_UPGRADES
185 {"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", "FD3", nullptr};
186#else
187 {"ITS", "TPC", "TRD", "TOF", "PHS", "CPV", "EMC", "HMP", "MFT", "MCH", "MID", "ZDC", "FT0", "FV0", "FDD", "TST", "CTP", "FOC", nullptr};
188#endif
189
190 static constexpr std::array<o2h::DataOrigin, nDetectors>
191 sOrigins =
196#ifdef ENABLE_UPGRADES
197 ,
200#endif
201 };
202#endif // GPUCA_GPUCODE_DEVICE
203
204 ClassDefNV(DetID, 4);
205};
206
207namespace detid_internal
208{
209// static constexpr array class members not possible on the GPU, thus we use this trick.
211 {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)),
212 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)),
213 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)),
214 DetID::mask_t(math_utils::bit2Mask(DetID::TST)), DetID::mask_t(math_utils::bit2Mask(DetID::CTP)), DetID::mask_t(math_utils::bit2Mask(DetID::FOC))
215
216#ifdef ENABLE_UPGRADES
217 ,
218 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)),
219 DetID::mask_t(math_utils::bit2Mask(DetID::RCH)), DetID::mask_t(math_utils::bit2Mask(DetID::MI3)), DetID::mask_t(math_utils::bit2Mask(DetID::ECL)), DetID::mask_t(math_utils::bit2Mask(DetID::FD3))
220#endif
221};
222} // namespace detid_internal
223
224GPUdi() constexpr DetID::mask_t DetID::getMask(ID id) { return detid_internal::sMasks[id]; }
225
226} // namespace detectors
227} // namespace o2
228
229#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:146
o2::gpu::gpustd::bitset< 32 > mask_t
Definition DetID.h:98
static constexpr std::string_view NONE
keywork for no-detector
Definition DetID.h:104
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:105
static constexpr ID PHS
Definition DetID.h:67
static bool upgradesEnabled()
Definition DetID.h:163
static std::string getNames(mask_t mask, char delimiter=',')
Definition DetID.cxx:74
GPUdi() ID getID() const
get detector id
Definition DetID.h:126
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:95
static constexpr ID MFT
Definition DetID.h:71
static constexpr int nDetectors
number of defined detectors
Definition DetID.h:97
constexpr GPUdi() DetID(ID id)
Definition DetID.h:108
static constexpr ID ZDC
Definition DetID.h:74
GPUdi() o2h
get detector origin
Definition DetID.h:131
static constexpr int nameToID(char const *name, int id=First)
Definition DetID.h:155
static constexpr ID FT0
Definition DetID.h:75
static constexpr mask_t FullMask
Definition DetID.h:101
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:93
static constexpr ID FOC
Definition DetID.h:80
constexpr DetID(const char *name)
Definition DetID.h:113
static constexpr ID TPC
Definition DetID.h:64
static constexpr o2h::DataOrigin getDataOrigin(ID id)
Definition DetID.h:148
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:128
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 gDataOriginFD3
Definition DataHeader.h:591
constexpr o2::header::DataOrigin gDataOriginFV0
Definition DataHeader.h:567
GPUdi() const expr DetID
Definition DetID.h:224
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 ...