12#ifndef GPUCA_STANDALONE
23#if !defined(GPUCA_GPUCODE) && !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++) {
87 for (uint32_t
i = 0;
i < FFits;
i++) {
96 for (uint32_t
i = 0;
i < FFits;
i++) {
100 for (uint32_t
i = 0;
i < FFits;
i++) {
107#if !defined(GPUCA_STANDALONE)
109void CalibdEdxTrackTopologyPol::construct()
114 size_t offsets1[FFits];
115 size_t offsets2[FFits];
119 offsets1[
index] = buffSize;
124 offsets2[
index] = buffSize;
130 for (uint32_t
i = 0;
i < FFits;
i++) {
133 for (uint32_t
i = 0;
i < FFits;
i++) {
140 for (int32_t
i = 0;
i < FFits; ++
i) {
141 const uint32_t
n[FDim]{6, 5, 5, 5, 5};
144 const float minqMax[FDim]{0, 0, 0, 0, -0.5f};
145 const float maxqMax[FDim]{250, 1.5f, 0.9f, 0.5f, 0.5f};
146 mCalibPolsqMax[
i].
init(minqMax, maxqMax,
n);
150 const float minqTot[FDim]{0, 0, 0, 2, 30};
151 const float maxqTot[FDim]{250, 1.5f, 0.9f, 5, 200};
152 mCalibPolsqTot[
i].
init(minqTot, maxqTot,
n);
163 for (
const auto& par : mCalibPolsqTot) {
164 cont.
mCalibPols.emplace_back(par.getContainer());
167 for (
const auto& par : mCalibPolsqMax) {
168 cont.
mCalibPols.emplace_back(par.getContainer());
171 for (
const auto par : mScalingFactorsqTot) {
175 for (
const auto par : mScalingFactorsqMax) {
179 outf.WriteObject(&cont,
name);
184 if (2 * FFits != container.
mCalibPols.size()) {
185 LOGP(warning,
"wrong number of polynomials stored! this {} container {}", 2 * FFits, container.
mCalibPols.size());
190 if (2 * FFits != nFacCont) {
191 LOGP(warning,
"wrong number of scaling factors stored! this {} container {}", 2 * FFits, nFacCont);
195 for (int32_t
i = 0;
i < FFits; ++
i) {
199 for (int32_t
i = 0;
i < FFits; ++
i) {
203 for (int32_t
i = 0;
i < FFits; ++
i) {
212 TFile inpf(fileName,
"READ");
214 inpf.GetObject(
name, polTmp);
219 LOGP(info,
"couldnt load object {} from input file",
name);
225 for (int32_t ireg = 0; ireg < FFits; ++ireg) {
227 mCalibPolsqTot[ireg].
loadFromFile(inpf, polnameqTot.data());
229 mCalibPolsqMax[ireg].
loadFromFile(inpf, polnameqMax.data());
236 const std::string typeName[2] = {
"qMax",
"qTot"};
237 const std::string polname = fmt::format(
"polynomial_{}_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 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)
void cloneFromObject(const FlatObject &obj, char *newFlatBufferPtr)
size_t getFlatBufferSize() const
Gives size of the flat buffer.
const char * getFlatBufferPtr() const
Gives pointer to the flat buffer.
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)
========== FlatObject functionality, see FlatObject class for description =================
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