17#ifndef CalibdEdxTrackTopologySpline_H
18#define CalibdEdxTrackTopologySpline_H
27#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
28#include <fmt/format.h>
77#if !defined(GPUCA_GPUCODE)
91 void recreate(
const int32_t nKnots[]);
108#if !defined(GPUCA_GPUCODE)
120#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
150 GPUd() uint32_t getFSplines()
const {
return FSplines; };
153 GPUd() float getMaxTanTheta()
const {
return mMaxTanTheta; };
156 GPUd() float getMaxSinPhi()
const {
return mMaxSinPhi; };
160 GPUd() float getScalingFactorqTot(
const int32_t region)
const {
return mScalingFactorsqTot[region]; };
164 GPUd() float getScalingFactorqMax(
const int32_t region)
const {
return mScalingFactorsqMax[region]; };
174 return mScalingFactorsqMax[region] * mCalibSplinesqMax[region].interpolate(
x);
185 return mScalingFactorsqTot[region] * mCalibSplinesqTot[region].interpolate(
x);
194 GPUd() float getCorrection(
const int32_t region,
const ChargeType charge,
const float tanTheta,
const float sinPhi,
const float z)
const {
return (
charge ==
ChargeType::Max) ? interpolateqMax(region,
tanTheta,
sinPhi,
z) : interpolateqTot(region,
tanTheta,
sinPhi,
z); }
211#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
213 int32_t
writeToFile(TFile& outf,
const char*
name =
"CalibdEdxTrackTopologySpline");
230 GPUglobalconstexpr() static uint32_t FSplines = 10;
231 GPUglobalconstexpr() static int32_t FDimX = 3;
234 float mMaxTanTheta{2.f};
235 float mMaxSinPhi{0.99f};
236 float mScalingFactorsqTot[FSplines]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
237 float mScalingFactorsqMax[FSplines]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
242#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
248 int32_t buffSize = 0;
249 int32_t offsets1[FSplines];
250 int32_t offsets2[FSplines];
252 for (uint32_t ireg = 0; ireg < FSplines; ++ireg) {
255 mCalibSplinesqMax[ireg] = *splineTmpqMax;
257 offsets1[ireg] = buffSize;
258 buffSize += mCalibSplinesqMax[ireg].getFlatBufferSize();
259 delete splineTmpqMax;
262 for (uint32_t ireg = 0; ireg < FSplines; ++ireg) {
265 mCalibSplinesqTot[ireg] = *splineTmpqTot;
267 offsets2[ireg] = buffSize;
268 buffSize += mCalibSplinesqTot[ireg].getFlatBufferSize();
269 delete splineTmpqTot;
274 for (uint32_t
i = 0;
i < FSplines;
i++) {
277 for (uint32_t
i = 0;
i < FSplines;
i++) {
Definition of FlatObject class.
Definition of Spline class.
char * releaseInternalBuffer()
_____________ Methods for making the data buffer external __________________________
static constexpr size_t getBufferAlignmentBytes()
Gives minimal alignment in bytes required for the flat buffer.
void startConstruction()
_____________ Construction _________
void finishConstruction(int32_t flatBufferSize)
static constexpr size_t alignSize(size_t sizeBytes, size_t alignmentBytes)
_______________ Generic utilities _______________________________________________
static constexpr size_t getClassAlignmentBytes()
GPUCA_GPUCODE.
static Spline * readFromFile(TFile &inpf, const char *name)
read a class object from the file
void moveBufferTo(char *newBufferPtr)
void setFutureBufferAddress(char *futureFlatBufferPtr)
void recreate(const int32_t nKnots[])
GPUd() SplineType &getSplineqMax(const int32_t region)
static constexpr size_t getBufferAlignmentBytes()
_____________ FlatObject functionality, see FlatObject class for description ____________
void setSplinesFromFile(TFile &inpf)
sets the splines from an input file
void setFromFile(TFile &inpf, const char *name)
GPUd() float getMaxSinPhi() const
returns the maximum SinPhi for which the splines are valid
CalibdEdxTrackTopologySpline()=default
_____________ Constructors / destructors __________________________
GPUd() float getScalingFactorqTot(const int32_t region) const
void cloneFromObject(const CalibdEdxTrackTopologySpline &obj, char *newFlatBufferPtr)
void setScalingFactorqTot(const float factor, const int32_t region)
void setScalingFactorqMax(const float factor, const int32_t region)
static CalibdEdxTrackTopologySpline * readFromFile(TFile &inpf, const char *name)
read a class object from the file
int32_t writeToFile(TFile &outf, const char *name="CalibdEdxTrackTopologySpline")
_______________ IO ________________________
GPUd() float getScalingFactorqMax(const int32_t region) const
void setRangesFromFile(TFile &inpf)
sets maximum TanTheta and maximum snp from file
void setDefaultSplines()
set default splines: the return value of the splines will be 1 (no correction will be applied)
const float const float const float z const
o2::gpu::Spline< float, 3, 1 > SplineType
~CalibdEdxTrackTopologySpline()=default
Destructor.
GPUd() float interpolateqTot(const int32_t region
const float const float sinPhi
GPUd() float getMaxTanTheta() const
returns the maximum TanTheta for which the splines are valid
CalibdEdxTrackTopologySpline & operator=(const CalibdEdxTrackTopologySpline &)
Assignment operator.
void setActualBufferAddress(char *actualFlatBufferPtr)
GPUd() uint32_t getFSplines() const
returns the number of splines stored in the calibration object
void setMaxSinPhi(const float maxSinPhi)
GPUd() SplineType &getSplineqTot(const int32_t region)
static std::string getSplineName(const int32_t region, const ChargeType charge)
void setMaxTanTheta(const float maxTanTheta)
GLuint const GLchar * name
GLdouble GLdouble GLdouble z
Global TPC definitions and constants.