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()
configStandalone Reconstruction rec_tpc multiplier for the combined cluster track error during track following area in cm for the search of for z only used if decrease removal by when above this local occupancy rowx Shift of TPC revert cluster flag edge bit distance to edge exceeds this ZOffset for secondary multiple of radius max P of electron K BB bands crossing max P of electron p BB bands crossing max P of electron d BB bands crossing max P of electron t BB bands crossing min accepted dEdxMaxTPC of the track Additive extra cluster error for Y2 if edge flag set Additive extra cluster error for Y2 if single set Additive extra cluster error for Y2 if or single set Additive extra cluster error for Z2 if or single set Extra errors to add to track when crossing depending on addErrorsCECrossing Inner portion of y range in sector that is not used in searching for extrapolated track candidates factor2YS for track merging factor2K for track merging Margin in cm of Y position when rejecting edge clusters based on uncorrected track Y Max fraction of shared clusters for tracklet Except pad from cluster finding if total number of charges in a fragment is above this Except pad from cluster finding if number of consecutive charges in a fragment is above this Threshold where a timebin is considered disabling the noisy pad check for that pad Treat signal above this minimum as saturated Smoothing factor for the exponential Highly Ionising Particle tail filter Number of timebins to use for the averaging Add additional custom track errors when crossing relative as fraction of Do N fit passes in final fit of< 0:reject at max -n hits") AddOptionRTC(rejectIFCLowRadiusCluster, uint8_t, 1, "", 0, "Reject clusters that get the IFC mask error during refit") AddOptionRTC(dEdxTruncLow, uint8_t, 2, "", 0, "Low truncation threshold, fraction of 128") AddOptionRTC(dEdxTruncHigh, uint8_t, 77, "", 0, "High truncation threshold, fraction of 128") AddOptionRTC(extrapolationTracking, int8_t, 1, "", 0, "Enable Extrapolation Tracking(prolong tracks to adjacent sectors to find short segments)") AddOptionRTC(disableRefitAttachment, uint8_t, 0, "", 0, "Bitmask to disable certain attachment steps during refit(1:attachment, 2:propagation, 4:loop following, 8:mirroring)") AddOptionRTC(rejectionStrategy, uint8_t, o2::gpu::GPUSettings::RejectionStrategyA, "", 0, "Enable rejection of TPC clusters for compression(0=no, 1=strategy A, 2=strategy B)") AddOptionRTC(mergeLoopersAfterburner, uint8_t, 1, "", 0, "Run afterburner for additional looper merging") AddOptionRTC(compressionTypeMask, uint8_t, o2::gpu::GPUSettings::CompressionFull, "", 0, "TPC Compression mode bits(1=truncate charge/width LSB, 2=differences, 4=track-model)") AddOptionRTC(compressionSortOrder, uint8_t, o2::gpu::GPUSettings::SortTime, "", 0, "Sort order of TPC compression(0=time, 1=pad, 2=Z-time-pad, 3=Z-pad-time, 4=no sorting(use incoming order))") AddOptionRTC(sigBitsCharge, uint8_t, 4, "", 0, "Number of significant bits for TPC cluster charge in compression mode 1") AddOptionRTC(sigBitsWidth, uint8_t, 3, "", 0, "Number of significant bits for TPC cluster width in compression mode 1") AddOptionRTC(dropLoopers, uint8_t, 0, "", 0, "Drop looping tracks starting from second loop") AddOptionRTC(mergerInterpolateErrors, uint8_t, 1, "", 0, "Use interpolation instead of extrapolation for chi2 based cluster rejection") AddOptionRTC(mergerInterpolateRejectAlsoOnCurrentPosition, uint8_t, 1, "", 0, "When using mergerInterpolateErrors, reject based on chi2 twice computed with interpolated and current track position starting from NDF > mergerNonInterpolateRejectMinNDF Merge tracks accross the central electrode Enable PID response Add sub threshold clusters in TPC dEdx computation OR mask of TPC flags that will reject the cluster in alternative dEdx Reject edge clusters based on uncorrected track Y during track fit Increase decrease removal by when on this number of pads from the edge h configStandalone Reconstruction rec_trd Max chi2 for TRD tracklets to be matched to a track Chi2 cut for strict matching mode Number of sigmas for ITS TPC track time error estimate Addition to search road around track prolongation along Y in cm Optimal tracklet rphi resolution in maximum chi2 per attached tracklet for TRD tracks take into account the full likelihood of the slope including exponential tails Tracks with less attached tracklets are discarded after the tracking Post trigger Pile up integration time in BCs fits all iterations but the last one in projections Use material lookup table for TPC refit Apply workarounds to avoid cyclic merge should not be needed tpc dyn configStandalone Processing proc_rtc true
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
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:577
constexpr o2::header::DataOrigin gDataOriginMFT
Definition DataHeader.h:575
constexpr o2::header::DataOrigin gDataOriginMCH
Definition DataHeader.h:574
constexpr o2::header::DataOrigin gDataOriginCTP
Definition DataHeader.h:567
constexpr o2::header::DataOrigin gDataOriginIT3
Definition DataHeader.h:585
constexpr o2::header::DataOrigin gDataOriginTST
Definition DataHeader.h:582
constexpr o2::header::DataOrigin gDataOriginMI3
Definition DataHeader.h:592
constexpr o2::header::DataOrigin gDataOriginTRK
Definition DataHeader.h:587
constexpr o2::header::DataOrigin gDataOriginHMP
Definition DataHeader.h:572
constexpr o2::header::DataOrigin gDataOriginTPC
Definition DataHeader.h:579
constexpr o2::header::DataOrigin gDataOriginFOC
Definition DataHeader.h:586
constexpr o2::header::DataOrigin gDataOriginFCT
Definition DataHeader.h:589
constexpr o2::header::DataOrigin gDataOriginFT3
Definition DataHeader.h:588
constexpr o2::header::DataOrigin gDataOriginZDC
Definition DataHeader.h:581
constexpr o2::header::DataOrigin gDataOriginRCH
Definition DataHeader.h:591
constexpr o2::header::DataOrigin gDataOriginMID
Definition DataHeader.h:576
constexpr o2::header::DataOrigin gDataOriginECL
Definition DataHeader.h:593
constexpr o2::header::DataOrigin gDataOriginFDD
Definition DataHeader.h:571
constexpr o2::header::DataOrigin gDataOriginFT0
Definition DataHeader.h:569
constexpr o2::header::DataOrigin gDataOriginTRD
Definition DataHeader.h:580
constexpr o2::header::DataOrigin gDataOriginEMC
Definition DataHeader.h:568
constexpr o2::header::DataOrigin gDataOriginTF3
Definition DataHeader.h:590
constexpr o2::header::DataOrigin gDataOriginTOF
Definition DataHeader.h:578
constexpr o2::header::DataOrigin gDataOriginITS
Definition DataHeader.h:573
constexpr o2::header::DataOrigin gDataOriginCPV
Definition DataHeader.h:566
constexpr o2::header::DataOrigin gDataOriginFD3
Definition DataHeader.h:594
constexpr o2::header::DataOrigin gDataOriginFV0
Definition DataHeader.h:570
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 ...