65 GPUdi()
void setGainCorrection(int32_t sector, tpccf::Row
row, tpccf::Pad pad,
float c)
67 mGainCorrection[sector].set(globalPad(
row, pad),
c);
70 GPUdi()
void setGainCorrection(int32_t sector, uint16_t globalPad,
float c)
72 mGainCorrection[sector].set(globalPad,
c);
75 GPUdi() float getGainCorrection(int32_t sector, tpccf::Row
row, tpccf::Pad pad)
const
77 return mGainCorrection[sector].get(globalPad(
row, pad));
80 GPUdi() uint16_t globalPad(tpccf::Row
row, tpccf::Pad pad)
const
82 return mPadOffsetPerRow[
row] + pad;
85 GPUdi()
void setMinCorrectionFactor(const
float minCorrectionFactor)
87 for (uint32_t sector = 0; sector < o2::tpc::constants::MAXSECTOR; sector++) {
88 mGainCorrection[sector].mMinCorrectionFactor = minCorrectionFactor;
92 GPUdi()
void setMaxCorrectionFactor(const
float maxCorrectionFactor)
94 for (uint32_t sector = 0; sector < o2::tpc::constants::MAXSECTOR; sector++) {
95 mGainCorrection[sector].mMaxCorrectionFactor = maxCorrectionFactor;
100 template <
typename T = u
int16_t>
101 class SectorPadGainCorrection
105 float mMinCorrectionFactor = 0.f;
106 float mMaxCorrectionFactor = 2.f;
109 GPUdi() SectorPadGainCorrection()
116 at(globalPad) =
pack(
c);
119 GPUdi() float get(uint16_t globalPad)
const
121 return unpack(at(globalPad));
134 GPUd() T pack(
float f)
const
136 f = CAMath::Clamp(
f, mMinCorrectionFactor, mMaxCorrectionFactor);
137 f -= mMinCorrectionFactor;
138 f *= float(NumOfSteps);
139 f /= (mMaxCorrectionFactor - mMinCorrectionFactor);
140 return CAMath::Round(
f);
143 GPUd() float unpack(T
c)
const
145 return mMinCorrectionFactor + (mMaxCorrectionFactor - mMinCorrectionFactor) *
float(
c) / float(NumOfSteps);
148 GPUdi() T& at(uint16_t globalPad)
150 return mGainCorrection[globalPad];
153 GPUdi() const T& at(uint16_t globalPad)
const
155 return mGainCorrection[globalPad];
159 uint16_t mPadOffsetPerRow[o2::tpc::constants::MAXGLOBALPADROW];
160 SectorPadGainCorrection<uint16_t> mGainCorrection[o2::tpc::constants::MAXSECTOR];