Project
Loading...
Searching...
No Matches
TPCPadGainCalib.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
14
15#ifndef O2_GPU_TPC_PAD_GAIN_CALIB_H
16#define O2_GPU_TPC_PAD_GAIN_CALIB_H
17
18#include "GPUCommonDef.h"
19
20#include "clusterFinderDefs.h"
21#include "GPUCommonMath.h"
23
24namespace o2::tpc
25{
26template <class T>
27class CalDet;
28} // namespace o2::tpc
29
30namespace o2::gpu
31{
32
33template <typename T>
36
37template <>
39 static GPUglobalconstexpr() int32_t value = 254;
40};
41
42template <>
44 static GPUglobalconstexpr() int32_t value = 65534;
45};
46
48 public:
49#ifndef GPUCA_GPUCODE
52
57 TPCPadGainCalib(const o2::tpc::CalDet<float>&, const float minValue, const float maxValue, const bool inv);
58
61 void setFromMap(const o2::tpc::CalDet<float>&, const bool inv = true);
62#endif
63
64 // Deal with pad gain correction from here on
65 GPUdi() void setGainCorrection(int32_t sector, tpccf::Row row, tpccf::Pad pad, float c)
66 {
67 mGainCorrection[sector].set(globalPad(row, pad), c);
68 }
69
70 GPUdi() void setGainCorrection(int32_t sector, uint16_t globalPad, float c)
71 {
72 mGainCorrection[sector].set(globalPad, c);
73 }
74
75 GPUdi() float getGainCorrection(int32_t sector, tpccf::Row row, tpccf::Pad pad) const
76 {
77 return mGainCorrection[sector].get(globalPad(row, pad));
78 }
79
80 GPUdi() uint16_t globalPad(tpccf::Row row, tpccf::Pad pad) const
81 {
82 return mPadOffsetPerRow[row] + pad;
83 }
84
85 GPUdi() void setMinCorrectionFactor(const float minCorrectionFactor)
86 {
87 for (uint32_t sector = 0; sector < o2::tpc::constants::MAXSECTOR; sector++) {
88 mGainCorrection[sector].mMinCorrectionFactor = minCorrectionFactor;
89 }
90 }
91
92 GPUdi() void setMaxCorrectionFactor(const float maxCorrectionFactor)
93 {
94 for (uint32_t sector = 0; sector < o2::tpc::constants::MAXSECTOR; sector++) {
95 mGainCorrection[sector].mMaxCorrectionFactor = maxCorrectionFactor;
96 }
97 }
98
99 private:
100 template <typename T = uint16_t>
101 class SectorPadGainCorrection
102 {
103
104 public:
105 float mMinCorrectionFactor = 0.f;
106 float mMaxCorrectionFactor = 2.f;
107 GPUglobalconstexpr() static int32_t NumOfSteps = TPCPadGainCorrectionStepNum<T>::value;
108
109 GPUdi() SectorPadGainCorrection()
110 {
111 reset();
112 }
113
114 GPUdi() void set(uint16_t globalPad, float c)
115 {
116 at(globalPad) = pack(c);
117 }
118
119 GPUdi() float get(uint16_t globalPad) const
120 {
121 return unpack(at(globalPad));
122 }
123
124 GPUd() void reset()
125 {
126 for (uint16_t p = 0; p < TPC_REAL_PADS_IN_SECTOR; p++) {
127 set(p, 1.0f);
128 }
129 }
130
131 private:
132 T mGainCorrection[TPC_REAL_PADS_IN_SECTOR];
133
134 GPUd() T pack(float f) const
135 {
136 f = CAMath::Clamp(f, mMinCorrectionFactor, mMaxCorrectionFactor);
137 f -= mMinCorrectionFactor;
138 f *= float(NumOfSteps);
139 f /= (mMaxCorrectionFactor - mMinCorrectionFactor);
140 return CAMath::Round(f);
141 }
142
143 GPUd() float unpack(T c) const
144 {
145 return mMinCorrectionFactor + (mMaxCorrectionFactor - mMinCorrectionFactor) * float(c) / float(NumOfSteps);
146 }
147
148 GPUdi() T& at(uint16_t globalPad)
149 {
150 return mGainCorrection[globalPad];
151 }
152
153 GPUdi() const T& at(uint16_t globalPad) const
154 {
155 return mGainCorrection[globalPad];
156 }
157 };
158
159 uint16_t mPadOffsetPerRow[o2::tpc::constants::MAXGLOBALPADROW];
160 SectorPadGainCorrection<uint16_t> mGainCorrection[o2::tpc::constants::MAXSECTOR];
161};
162
163} // namespace o2::gpu
164
165#endif
#define GPUdi()
#define GPUglobalconstexpr()
#define GPUd()
uint32_t c
Definition RawData.h:2
#define TPC_REAL_PADS_IN_SECTOR
GLdouble f
Definition glcorearb.h:310
GLsizei const GLfloat * value
Definition glcorearb.h:819
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GPUdi() o2
Definition TrackTRD.h:39
Global TPC definitions and constants.
Definition SimTraits.h:172
GPUdi() uint16_t globalPad(tpccf
GPUdi() void setMaxCorrectionFactor(const float maxCorrectionFactor)
std::vector< int > row