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 "GPUCommonDef.h"
32
33#include "GPUCommonRtypes.h"
34#include "GPUCommonBitSet.h"
35#include "MathUtils/Utils.h"
37#ifndef GPUCA_GPUCODE_DEVICE
38#include "Headers/DataHeader.h"
39#include <array>
40#include <bitset>
41#include <cassert>
42#include <cstdint>
43#include <string_view>
44#include <string>
45#include <type_traits>
46#endif
47
48namespace o2
49{
50namespace header
51{
52}
53namespace detectors
54{
55
56namespace o2h = o2::header;
57
59class DetID
60{
61 public:
63 typedef int ID;
64
65 static GPUglobalconstexpr() ID ITS = 0;
66 static GPUglobalconstexpr() ID TPC = 1;
67 static GPUglobalconstexpr() ID TRD = 2;
68 static GPUglobalconstexpr() ID TOF = 3;
69 static GPUglobalconstexpr() ID PHS = 4;
70 static GPUglobalconstexpr() ID CPV = 5;
71 static GPUglobalconstexpr() ID EMC = 6;
72 static GPUglobalconstexpr() ID HMP = 7;
73 static GPUglobalconstexpr() ID MFT = 8;
74 static GPUglobalconstexpr() ID MCH = 9;
75 static GPUglobalconstexpr() ID MID = 10;
76 static GPUglobalconstexpr() ID ZDC = 11;
77 static GPUglobalconstexpr() ID FT0 = 12;
78 static GPUglobalconstexpr() ID FV0 = 13;
79 static GPUglobalconstexpr() ID FDD = 14;
80 static GPUglobalconstexpr() ID TST = 15;
81 static GPUglobalconstexpr() ID CTP = 16;
82 static GPUglobalconstexpr() ID FOC = 17;
83#ifdef ENABLE_UPGRADES
84 static GPUglobalconstexpr() ID IT3 = 18;
85 static GPUglobalconstexpr() ID TRK = 19;
86 static GPUglobalconstexpr() ID FT3 = 20;
87 static GPUglobalconstexpr() ID FCT = 21;
88 static GPUglobalconstexpr() ID TF3 = 22;
89 static GPUglobalconstexpr() ID RCH = 23;
90 static GPUglobalconstexpr() ID MI3 = 24;
91 static GPUglobalconstexpr() ID ECL = 25;
92 static GPUglobalconstexpr() ID FD3 = 26;
93 static GPUglobalconstexpr() ID Last = FD3;
94#else
95 static constexpr ID Last = FOC;
96#endif
97 static GPUglobalconstexpr() ID First = ITS;
98
99 static GPUglobalconstexpr() int nDetectors = Last + 1;
100 typedef o2::gpu::gpustd::bitset<32> mask_t;
101 static_assert(nDetectors <= 32, "bitset<32> insufficient");
102
103 static GPUglobalconstexpr() mask_t FullMask = (0x1u << nDetectors) - 1;
104
105#ifndef GPUCA_GPUCODE_DEVICE
106 static constexpr std::string_view NONE{"none"};
107 static constexpr std::string_view ALL{"all"};
108#endif // GPUCA_GPUCODE_DEVICE
109
110 constexpr GPUdi() DetID(ID id) : mID(id)
111 {
112 }
113
114#ifndef GPUCA_GPUCODE_DEVICE
115 constexpr DetID(const char* name) : mID(nameToID(name, First))
116 {
117 // construct from the name
118 assert(mID < nDetectors);
119 }
120#endif // GPUCA_GPUCODE_DEVICE
121
122 GPUdDefault() DetID(const DetID& src) = default;
123 GPUdDefault() DetID& operator=(const DetID& src) = default;
124 // we need default c-tor only for root persistency, code must use c-tor with argument
125 DetID() : mID(First) {}
126
128 GPUdi() ID getID() const { return mID; }
130 GPUdi() mask_t getMask() const { return getMask(mID); }
131#ifndef GPUCA_GPUCODE_DEVICE
133 GPUdi() o2h::DataOrigin getDataOrigin() const { return getDataOrigin(mID); }
135 const char* getName() const { return getName(mID); }
136#endif // GPUCA_GPUCODE_DEVICE
138 GPUdi() operator int() const { return static_cast<int>(mID); }
139
140 // ---------------- general static methods -----------------
142 GPUdi() static constexpr int getNDetectors() { return nDetectors; }
143 // detector ID to mask conversion
144 GPUd() static constexpr mask_t getMask(ID id);
145
146#ifndef GPUCA_GPUCODE_DEVICE
148 static constexpr const char* getName(ID id) { return sDetNames[id]; }
149 // detector ID to DataOrigin conversions
150 static constexpr o2h::DataOrigin getDataOrigin(ID id) { return sOrigins[id]; }
151
152 // detector masks from any non-alpha-num delimiter-separated list (empty if NONE is supplied)
153 static mask_t getMask(const std::string_view detList);
154
155 static std::string getNames(mask_t mask, char delimiter = ',');
156
157 inline static constexpr int nameToID(char const* name, int id = First)
158 {
159 return id > Last ? -1 : sameStr(name, sDetNames[id]) ? id
160 : nameToID(name, id + 1);
161 }
162
163#endif // GPUCA_GPUCODE_DEVICE
164
165 static bool upgradesEnabled()
166 {
167#ifdef ENABLE_UPGRADES
168 return true;
169#else
170 return false;
171#endif
172 }
173
174 private:
175 // are 2 strings equal ? (trick from Giulio)
176 GPUdi() static constexpr bool sameStr(char const* x, char const* y)
177 {
178 return !*x && !*y ? true : /* default */ (*x == *y && sameStr(x + 1, y + 1));
179 }
180
181 ID mID = First;
182
183#ifndef GPUCA_GPUCODE_DEVICE
184 // detector names, will be defined in DataSources
185 static constexpr const char* sDetNames[nDetectors + 1] =
186#ifdef ENABLE_UPGRADES
187 {"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};
188#else
189 {"ITS", "TPC", "TRD", "TOF", "PHS", "CPV", "EMC", "HMP", "MFT", "MCH", "MID", "ZDC", "FT0", "FV0", "FDD", "TST", "CTP", "FOC", nullptr};
190#endif
191
192 static constexpr std::array<o2h::DataOrigin, nDetectors>
193 sOrigins =
198#ifdef ENABLE_UPGRADES
199 ,
202#endif
203 };
204#endif // GPUCA_GPUCODE_DEVICE
205
206 ClassDefNV(DetID, 4);
207};
208
209namespace detid_internal
210{
211// static constexpr array class members not possible on the GPU, thus we use this trick.
212GPUconstexpr() DetID::mask_t sMasks[DetID::nDetectors] =
213 {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)),
214 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)),
215 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)),
216 DetID::mask_t(math_utils::bit2Mask(DetID::TST)), DetID::mask_t(math_utils::bit2Mask(DetID::CTP)), DetID::mask_t(math_utils::bit2Mask(DetID::FOC))
217
218#ifdef ENABLE_UPGRADES
219 ,
220 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)),
221 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))
222#endif
223};
224} // namespace detid_internal
225
226GPUdi() constexpr DetID::mask_t DetID::getMask(ID id) { return detid_internal::sMasks[id]; }
227
228} // namespace detectors
229} // namespace o2
230
231#endif
General auxilliary methods.
std::vector< std::string > header
#define GPUdDefault()
#define GPUconstexpr()
Static class with identifiers, bitmasks and names for ALICE detectors.
Definition DetID.h:60
static constexpr const char * getName(ID id)
names of defined detectors
Definition DetID.h:148
o2::gpu::gpustd::bitset< 32 > mask_t
Definition DetID.h:100
static constexpr std::string_view NONE
keywork for no-detector
Definition DetID.h:106
static constexpr std::string_view ALL
keywork for all detectors
Definition DetID.h:107
static bool upgradesEnabled()
Definition DetID.h:165
static std::string getNames(mask_t mask, char delimiter=',')
Definition DetID.cxx:74
GPUdi() ID getID() const
get detector id
Definition DetID.h:128
int ID
Detector identifiers: continuous, starting from 0.
Definition DetID.h:63
GPUd() static const expr mask_t getMask(ID id)
constexpr GPUdi() DetID(ID id)
Definition DetID.h:110
GPUdi() o2h
get detector origin
Definition DetID.h:133
static constexpr int nameToID(char const *name, int id=First)
Definition DetID.h:157
GPUdDefault() DetID(const DetID &src)=default
static GPUglobalconstexpr() ID First
static constexpr ID Last
if extra detectors added, update this !!!
Definition DetID.h:95
constexpr DetID(const char *name)
Definition DetID.h:115
static constexpr o2h::DataOrigin getDataOrigin(ID id)
Definition DetID.h:150
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
GPUdi() mask_t getMask() const
get detector mask
Definition DetID.h:130
static GPUglobalconstexpr() ID ITS=0
GLint GLenum GLint x
Definition glcorearb.h:403
GLenum src
Definition glcorearb.h:1767
GLuint const GLchar * name
Definition glcorearb.h:781
GLint y
Definition glcorearb.h:270
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:226
O2 data header classes and API, v0.1.
Definition DetID.h:51
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...