12#ifndef GPUCA_STANDALONE
23#if !defined(GPUCA_STANDALONE)
24#include "NDPiecewisePolynomials.inc"
27 for (uint32_t
i = 0;
i < FFits;
i++) {
29 mCalibPolsqMax[
i].
dumpToTree(nSamplingPoints, outName, treename.data(),
false);
32 for (uint32_t
i = 0;
i < FFits;
i++) {
34 mCalibPolsqTot[
i].
dumpToTree(nSamplingPoints, outName, treename.data(),
false);
44 for (uint32_t
i = 0;
i < FFits;
i++) {
49 for (uint32_t
i = 0;
i < FFits;
i++) {
54 for (int32_t
i = 0;
i < FFits; ++
i) {
55 mScalingFactorsqTot[
i] = obj.mScalingFactorsqTot[
i];
56 mScalingFactorsqMax[
i] = obj.mScalingFactorsqMax[
i];
71 for (uint32_t
i = 0;
i < FFits;
i++) {
82 for (uint32_t
i = 0;
i < FFits;
i++) {
85 offset += mCalibPolsqTot[
i].getFlatBufferSize();
87 for (uint32_t
i = 0;
i < FFits;
i++) {
90 offset += mCalibPolsqMax[
i].getFlatBufferSize();
96 for (uint32_t
i = 0;
i < FFits;
i++) {
100 for (uint32_t
i = 0;
i < FFits;
i++) {
107void CalibdEdxTrackTopologyPol::construct()
112 size_t offsets1[FFits];
113 size_t offsets2[FFits];
117 offsets1[
index] = buffSize;
118 buffSize += mCalibPolsqTot[
index].getFlatBufferSize();
122 offsets2[
index] = buffSize;
123 buffSize += mCalibPolsqMax[
index].getFlatBufferSize();
128 for (uint32_t
i = 0;
i < FFits;
i++) {
131 for (uint32_t
i = 0;
i < FFits;
i++) {
138 for (int32_t
i = 0;
i < FFits; ++
i) {
139 const uint32_t
n[FDim]{6, 5, 5, 5, 5};
142 const float minqMax[FDim]{0, 0, 0, 0, -0.5f};
143 const float maxqMax[FDim]{250, 1.5f, 0.9f, 0.5f, 0.5f};
144 mCalibPolsqMax[
i].
init(minqMax, maxqMax,
n);
148 const float minqTot[FDim]{0, 0, 0, 2, 30};
149 const float maxqTot[FDim]{250, 1.5f, 0.9f, 5, 200};
150 mCalibPolsqTot[
i].
init(minqTot, maxqTot,
n);
158 if (2 * FFits != container.
mCalibPols.size()) {
159 LOGP(warning,
"wrong number of polynomials stored! this {} container {}", 2 * FFits, container.
mCalibPols.size());
164 if (2 * FFits != nFacCont) {
165 LOGP(warning,
"wrong number of scaling factors stored! this {} container {}", 2 * FFits, nFacCont);
169 for (int32_t
i = 0;
i < FFits; ++
i) {
173 for (int32_t
i = 0;
i < FFits; ++
i) {
177 for (int32_t
i = 0;
i < FFits; ++
i) {
186 const std::string typeName[2] = {
"qMax",
"qTot"};
187 const std::string polname = fmt::format(
"polynomial_{}_region{}", typeName[
charge], region).data();
191#ifndef GPUCA_STANDALONE
198 for (
const auto& par : mCalibPolsqTot) {
199 cont.
mCalibPols.emplace_back(par.getContainer());
202 for (
const auto& par : mCalibPolsqMax) {
203 cont.
mCalibPols.emplace_back(par.getContainer());
206 for (
const auto par : mScalingFactorsqTot) {
210 for (
const auto par : mScalingFactorsqMax) {
214 outf.WriteObject(&cont,
name);
219 TFile inpf(fileName,
"READ");
221 inpf.GetObject(
name, polTmp);
226 LOGP(info,
"couldnt load object {} from input file",
name);
232 for (int32_t ireg = 0; ireg < FFits; ++ireg) {
234 mCalibPolsqTot[ireg].
loadFromFile(inpf, polnameqTot.data());
236 mCalibPolsqMax[ireg].
loadFromFile(inpf, polnameqMax.data());
void setFutureBufferAddress(char *futureFlatBufferPtr)
void destroy()
_______________ Utilities _______________________________________________
static constexpr size_t getBufferAlignmentBytes()
Gives minimal alignment in bytes required for the flat buffer.
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 _____________...
void startConstruction()
_____________ Construction _________
void moveBufferTo(char *newBufferPtr)
void finishConstruction(int32_t flatBufferSize)
static constexpr size_t alignSize(size_t sizeBytes, size_t alignmentBytes)
_______________ Generic utilities _______________________________________________
void cloneFromObject(const FlatObject &obj, char *newFlatBufferPtr)
void setActualBufferAddress(char *actualFlatBufferPtr)
set location of external flat buffer
void cloneFromObject(const NDPiecewisePolynomials &obj, char *newFlatBufferPtr)
========== FlatObject functionality, see FlatObject class for description =================
void moveBufferTo(char *newBufferPtr)
void setDefault()
setting default polynomials which just returns 1
void dumpToTree(const uint32_t nSamplingPoints[], const char *outName="debug.root", const char *treeName="tree", const bool recreateFile=true) const
void init(const float min[], const float max[], const uint32_t n[])
void destroy()
destroy the object (release internal flat buffer)
void loadFromFile(TFile &inpf, const char *name)
void setFromContainer(const NDPiecewisePolynomialContainer &container)
void setFutureBufferAddress(char *futureFlatBufferPtr)
set future location of the flat buffer
calibration class for the track topology correction of the dE/dx using multvariate polynomials
void loadFromFile(const char *fileName, const char *name)
static std::string getPolyName(const int32_t region, const ChargeType charge)
void dumpToTree(const uint32_t nSamplingPoints[], const char *outName="track_topology_corr_debug.root") const
void setDefaultPolynomials()
setting a default topology correction which just returns 1
void setPolynomialsFromFile(TFile &inpf)
void setFutureBufferAddress(char *futureFlatBufferPtr)
set future location of the flat buffer
void writeToFile(TFile &outf, const char *name="CalibdEdxTrackTopologyPol") const
void moveBufferTo(char *newBufferPtr)
void setFromContainer(const CalibdEdxTrackTopologyPolContainer &container)
void setActualBufferAddress(char *actualFlatBufferPtr)
set location of external flat buffer
void cloneFromObject(const CalibdEdxTrackTopologyPol &obj, char *newFlatBufferPtr)
void destroy()
destroy the object (release internal flat buffer)
GLuint const GLchar * name
Global TPC definitions and constants.
simple struct to enable writing the MultivariatePolynomialCT to file
std::vector< float > mScalingFactorsqMax
value which is used to scale the result of the polynomial for qMax (can be used for normalization)
std::vector< float > mScalingFactorsqTot
value which is used to scale the result of the polynomial for qTot (can be used for normalization)
std::vector< gpu::NDPiecewisePolynomialContainer > mCalibPols
parameters of the polynomial