18#ifndef ALICEO2_TPC_DATACONTAINER3D_H_
19#define ALICEO2_TPC_DATACONTAINER3D_H_
39template <
typename DataT =
double>
46 DataContainer3D(
unsigned short nZ,
unsigned short nR,
unsigned short nPhi) : mZVertices{nZ}, mRVertices{nR}, mPhiVertices{nPhi}, mData(nZ * nR * nPhi){};
55 const auto&
getData()
const {
return mData; }
77 size_t getDataIndex(
const size_t iz,
const size_t ir,
const size_t iphi)
const {
return (iz + mZVertices * (
ir + iphi * mRVertices)); }
83 unsigned short getNZ()
const {
return mZVertices; }
86 unsigned short getNR()
const {
return mRVertices; }
89 unsigned short getNPhi()
const {
return mPhiVertices; }
104 static size_t getIndexZ(
size_t index,
const int nz,
const int nr,
const int nphi);
112 static size_t getIndexR(
size_t index,
const int nz,
const int nr,
const int nphi);
120 static size_t getIndexPhi(
size_t index,
const int nz,
const int nr,
const int nphi);
124 void setGrid(
unsigned short nZ,
unsigned short nR,
unsigned short nPhi,
const bool resize);
130 template <
typename DataTOut = DataT>
138 int writeToFile(std::string_view file, std::string_view option, std::string_view
name =
"data",
const int nthreads = 1)
const;
142 template <
typename DataTIn = DataT>
149 bool initFromFile(std::string_view file, std::string_view
name =
"data",
const int nthreads = 1);
162 static void dumpSlice(std::string_view treename, std::string_view fileIn, std::string_view fileOut, std::string_view option, std::pair<unsigned short, unsigned short> rangeiR, std::pair<unsigned short, unsigned short> rangeiZ, std::pair<unsigned short, unsigned short> rangeiPhi,
const int nthreads = 1);
175 static void dumpInterpolation(std::string_view treename, std::string_view fileIn, std::string_view fileOut, std::string_view option, std::pair<float, float> rangeR, std::pair<float, float> rangeZ, std::pair<float, float> rangePhi,
const int nR,
const int nZ,
const int nPhi,
const int nthreads = 1);
184 static bool getVertices(std::string_view treename, std::string_view fileIn,
unsigned short& nR,
unsigned short& nZ,
unsigned short& nPhi);
199 unsigned short mZVertices{};
200 unsigned short mRVertices{};
201 unsigned short mPhiVertices{};
202 std::vector<DataT> mData{};
204 static auto getDataSlice(
const std::vector<DataT>&
data,
size_t entries,
const size_t values_per_entry, ULong64_t
entry);
GLuint const GLchar * name
GLsizei const GLfloat * value
GLdouble GLdouble GLdouble z
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
const auto & getData() const
static size_t getIndexR(size_t index, const int nz, const int nr, const int nphi)
unsigned short getNZ() const
unsigned short getNR() const
void print() const
print the matrix
unsigned short getNPhi() const
bool initFromFile(TFile &inpf, const char *name="data")
set values from file
int writeToFile(TFile &outf, const char *name="data") const
void setGrid(unsigned short nZ, unsigned short nR, unsigned short nPhi, const bool resize)
set the grid points
static void setAliasesForDump(TTree *tree)
static void setAliases(TTree *tree)
size_t getNDataPoints() const
DataT interpolate(const DataT z, const DataT r, const DataT phi, const o2::tpc::RegularGrid3D< DataT > &grid) const
DataContainer3D< DataT > & operator*=(const DataT value)
operator overload
static size_t getIndexZ(size_t index, const int nz, const int nr, const int nphi)
static size_t getIndexPhi(size_t index, const int nz, const int nr, const int nphi)
size_t getIndexPhi(size_t index) const
static bool getVertices(std::string_view treename, std::string_view fileIn, unsigned short &nR, unsigned short &nZ, unsigned short &nPhi)
DataContainer3D()=default
default constructor for Root I/O
static DataContainer3D< DataT > * loadFromFile(TFile &inpf, const char *name="data")
get pointer to object from file (deprecated!)
DataContainer3D< DataT > & operator-=(const DataContainer3D< DataT > &other)
size_t getIndexZ(size_t index) const
DataContainer3D(unsigned short nZ, unsigned short nR, unsigned short nPhi)
DataContainer3D< DataT > & operator+=(const DataContainer3D< DataT > &other)
static void dumpInterpolation(std::string_view treename, std::string_view fileIn, std::string_view fileOut, std::string_view option, std::pair< float, float > rangeR, std::pair< float, float > rangeZ, std::pair< float, float > rangePhi, const int nR, const int nZ, const int nPhi, const int nthreads=1)
static void dumpSlice(std::string_view treename, std::string_view fileIn, std::string_view fileOut, std::string_view option, std::pair< unsigned short, unsigned short > rangeiR, std::pair< unsigned short, unsigned short > rangeiZ, std::pair< unsigned short, unsigned short > rangeiPhi, const int nthreads=1)
DataT & operator()(size_t iz, size_t ir, size_t iphi)
size_t getDataIndex(const size_t iz, const size_t ir, const size_t iphi) const
DataContainer3D< DataT > convert(const o2::tpc::RegularGrid3D< DataT > &gridNew, const o2::tpc::RegularGrid3D< DataT > &gridRef, const int threads=1) const
convert a data container to a new datacontainer with different grid definition (e....
size_t getIndexR(size_t index) const
const DataT & operator()(size_t iz, size_t ir, size_t iphi) const
DataT & operator[](size_t i)
const DataT & operator[](size_t i) const
operator to directly access the values
VectorOfTObjectPtrs other
o2::InteractionRecord ir(0, 0)
std::unique_ptr< TTree > tree((TTree *) flIn.Get(std::string(o2::base::NameConf::CTFTREENAME).c_str()))