17#ifndef CalibdEdxTrackTopologySpline_H
18#define CalibdEdxTrackTopologySpline_H
25#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
26#include <fmt/format.h>
75#if !defined(GPUCA_GPUCODE)
89 void recreate(
const int32_t nKnots[]);
106#if !defined(GPUCA_GPUCODE)
118#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
148 GPUd() uint32_t getFSplines()
const {
return FSplines; };
151 GPUd() float getMaxTanTheta()
const {
return mMaxTanTheta; };
154 GPUd() float getMaxSinPhi()
const {
return mMaxSinPhi; };
158 GPUd() float getScalingFactorqTot(
const int32_t region)
const {
return mScalingFactorsqTot[region]; };
162 GPUd() float getScalingFactorqMax(
const int32_t region)
const {
return mScalingFactorsqMax[region]; };
172 return mScalingFactorsqMax[region] * mCalibSplinesqMax[region].interpolate(
x);
183 return mScalingFactorsqTot[region] * mCalibSplinesqTot[region].interpolate(
x);
192 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); }
209#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
211 int32_t
writeToFile(TFile& outf,
const char*
name =
"CalibdEdxTrackTopologySpline");
228 constexpr static uint32_t FSplines = 10;
229 constexpr static int32_t FDimX = 3;
232 float mMaxTanTheta{2.f};
233 float mMaxSinPhi{0.99f};
234 float mScalingFactorsqTot[FSplines]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
235 float mScalingFactorsqMax[FSplines]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
240#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
246 int32_t buffSize = 0;
247 int32_t offsets1[FSplines];
248 int32_t offsets2[FSplines];
250 for (uint32_t ireg = 0; ireg < FSplines; ++ireg) {
253 mCalibSplinesqMax[ireg] = *splineTmpqMax;
255 offsets1[ireg] = buffSize;
256 buffSize += mCalibSplinesqMax[ireg].getFlatBufferSize();
257 delete splineTmpqMax;
260 for (uint32_t ireg = 0; ireg < FSplines; ++ireg) {
263 mCalibSplinesqTot[ireg] = *splineTmpqTot;
265 offsets2[ireg] = buffSize;
266 buffSize += mCalibSplinesqTot[ireg].getFlatBufferSize();
267 delete splineTmpqTot;
272 for (uint32_t
i = 0;
i < FSplines;
i++) {
275 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 size_t alignSize(size_t sizeBytes, size_t alignmentBytes)
_______________ Generic utilities _______________________________________________
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 getClassAlignmentBytes()
_____________ Memory alignment __________________________
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.