17#if !defined(GPUCA_STANDALONE)
25#if !defined(GPUCA_STANDALONE)
29 TFile dEdxFile(dEdxSplinesFile);
54 int32_t offsets1[FSplines];
55 int32_t offsets2[FSplines];
56 for (uint32_t
i = 0;
i < FSplines;
i++) {
57 mCalibSplinesqMax[
i].recreate(nKnots);
59 offsets1[
i] = buffSize;
60 buffSize += mCalibSplinesqMax[
i].getFlatBufferSize();
62 for (uint32_t
i = 0;
i < FSplines;
i++) {
63 mCalibSplinesqTot[
i].recreate(nKnots);
65 offsets2[
i] = buffSize;
66 buffSize += mCalibSplinesqTot[
i].getFlatBufferSize();
71 for (uint32_t
i = 0;
i < FSplines;
i++) {
74 for (uint32_t
i = 0;
i < FSplines;
i++) {
86 for (uint32_t
i = 0;
i < FSplines;
i++) {
88 mCalibSplinesqMax[
i].cloneFromObject(obj.mCalibSplinesqMax[
i],
buffer);
91 for (uint32_t
i = 0;
i < FSplines;
i++) {
93 mCalibSplinesqTot[
i].cloneFromObject(obj.mCalibSplinesqTot[
i],
buffer);
95 mMaxTanTheta = obj.mMaxTanTheta;
96 mMaxSinPhi = obj.mMaxSinPhi;
98 for (uint32_t
i = 0;
i < FSplines; ++
i) {
99 mScalingFactorsqTot[
i] = obj.mScalingFactorsqTot[
i];
100 mScalingFactorsqMax[
i] = obj.mScalingFactorsqMax[
i];
117 for (uint32_t
i = 0;
i < FSplines;
i++) {
118 mCalibSplinesqMax[
i].destroy();
119 mCalibSplinesqTot[
i].destroy();
130 for (uint32_t
i = 0;
i < FSplines;
i++) {
133 offset += mCalibSplinesqMax[
i].getFlatBufferSize();
135 for (uint32_t
i = 0;
i < FSplines;
i++) {
138 offset += mCalibSplinesqTot[
i].getFlatBufferSize();
146 for (uint32_t
i = 0;
i < FSplines;
i++) {
148 mCalibSplinesqMax[
i].setFutureBufferAddress(
buffer);
150 for (uint32_t
i = 0;
i < FSplines;
i++) {
152 mCalibSplinesqTot[
i].setFutureBufferAddress(
buffer);
157#if !defined(GPUCA_STANDALONE)
160 TFile& inpf,
const char*
name)
163 return FlatObject::readFromFile<CalibdEdxTrackTopologySpline>(inpf,
name);
168 LOGP(info,
"Warnings when reading from file can be ignored");
172 LOGP(info,
"CalibdEdxTrackTopologySpline sucessfully loaded from file");
178 LOGP(info,
"Warnings when writting to file can be ignored");
186 int32_t buffSize = 0;
187 int32_t offsets1[FSplines];
188 int32_t offsets2[FSplines];
190 auto defaultF = [&](
const double x[],
double f[]) {
193 double xMin[FDimX]{};
194 double xMax[FDimX]{};
196 for (int32_t iDimX = 0; iDimX < FDimX; ++iDimX) {
201 for (uint32_t ireg = 0; ireg < FSplines; ++ireg) {
203 splineTmpqMax.approximateFunction(xMin, xMax, defaultF);
204 mCalibSplinesqMax[ireg] = splineTmpqMax;
206 offsets1[ireg] = buffSize;
207 buffSize += mCalibSplinesqMax[ireg].getFlatBufferSize();
210 for (uint32_t ireg = 0; ireg < FSplines; ++ireg) {
212 splineTmpqTot.approximateFunction(xMin, xMax, defaultF);
213 mCalibSplinesqTot[ireg] = splineTmpqTot;
215 offsets2[ireg] = buffSize;
216 buffSize += mCalibSplinesqTot[ireg].getFlatBufferSize();
221 for (uint32_t
i = 0;
i < FSplines;
i++) {
224 for (uint32_t
i = 0;
i < FSplines;
i++) {
231 std::vector<float>* tanThetaMax =
nullptr;
232 std::vector<float>* sinPhiMax =
nullptr;
233 inpf.GetObject(
"tanThetaMax", tanThetaMax);
234 inpf.GetObject(
"sinPhiMax", sinPhiMax);
236 mMaxTanTheta = (*tanThetaMax).front();
240 mMaxSinPhi = (*sinPhiMax).front();
247 const std::string typeName[2] = {
"qMax",
"qTot"};
248 const std::string polname = fmt::format(
"spline_{}_region{}", typeName[
charge], region).data();
void setFutureBufferAddress(char *futureFlatBufferPtr)
void destroy()
_______________ Utilities _______________________________________________
static size_t alignSize(size_t sizeBytes, size_t alignmentBytes)
_______________ Generic utilities _______________________________________________
static T * relocatePointer(const char *oldBase, char *newBase, const T *ptr)
Relocates a pointer inside a buffer to the new buffer address.
void setActualBufferAddress(char *actualFlatBufferPtr)
_____________ Methods for moving the class with its external buffer to another location _____________...
static int32_t writeToFile(T &obj, TFile &outf, const char *name)
write a child class object to the file
void startConstruction()
_____________ Construction _________
void moveBufferTo(char *newBufferPtr)
void finishConstruction(int32_t flatBufferSize)
void cloneFromObject(const FlatObject &obj, char *newFlatBufferPtr)
const char * getFlatBufferPtr() const
Gives pointer to the flat buffer.
void moveBufferTo(char *newBufferPtr)
void setFutureBufferAddress(char *futureFlatBufferPtr)
void recreate(const int32_t nKnots[])
static constexpr size_t getBufferAlignmentBytes()
_____________ FlatObject functionality, see FlatObject class for description ____________
void setFromFile(TFile &inpf, const char *name)
CalibdEdxTrackTopologySpline()=default
_____________ Constructors / destructors __________________________
void cloneFromObject(const CalibdEdxTrackTopologySpline &obj, char *newFlatBufferPtr)
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 ________________________
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)
CalibdEdxTrackTopologySpline & operator=(const CalibdEdxTrackTopologySpline &)
Assignment operator.
void setActualBufferAddress(char *actualFlatBufferPtr)
static std::string getSplineName(const int32_t region, const ChargeType charge)
GLuint const GLchar * name
Global TPC definitions and constants.