31 fDataErrorPtr( nullptr ), fDataErrorHighPtr( nullptr ), fDataErrorLowPtr( nullptr ),
32 fpTmpCoordErrorVector( nullptr ), fpTmpBinEdgeVector( nullptr )
47 fDataErrorPtr( nullptr ), fDataErrorHighPtr( nullptr ), fDataErrorLowPtr( nullptr ),
48 fpTmpCoordErrorVector( nullptr ), fpTmpBinEdgeVector( nullptr )
59 unsigned int maxpoints,
unsigned int dim,
ErrorType err ) :
60 FitData( opt, range, maxpoints, dim ),
63 fDataErrorPtr( nullptr ), fDataErrorHighPtr( nullptr ), fDataErrorLowPtr( nullptr ),
64 fpTmpCoordErrorVector( nullptr ), fpTmpBinEdgeVector( nullptr )
76 const double *
ex ,
const double * eval ) :
79 fDataErrorPtr( nullptr ), fDataErrorHighPtr( nullptr ), fDataErrorLowPtr( nullptr ),
80 fpTmpCoordErrorVector( nullptr ), fpTmpBinEdgeVector( nullptr )
85 if (
nullptr != eval )
114 const double * val,
const double *
ex ,
const double *
ey,
115 const double * eval ) :
117 fDataErrorPtr( nullptr ), fDataErrorHighPtr( nullptr ), fDataErrorLowPtr( nullptr ),
118 fpTmpCoordErrorVector( nullptr ), fpTmpBinEdgeVector( nullptr )
123 if (
nullptr != eval )
129 if (
nullptr !=
ex ||
nullptr !=
ey )
152 const double * dataZ,
const double * val,
const double *
ex ,
153 const double *
ey ,
const double * ez ,
const double * eval ) :
155 fDataErrorPtr( nullptr ), fDataErrorHighPtr( nullptr ), fDataErrorLowPtr( nullptr ),
156 fpTmpCoordErrorVector( nullptr ), fpTmpBinEdgeVector( nullptr )
161 if (
nullptr != eval )
167 if (
nullptr !=
ex ||
nullptr !=
ey ||
nullptr != ez )
202 for (
unsigned int i=0; i <
fDim; i++ )
235 assert(
Opt().fIntegral );
272 if ( !
fData.empty() )
285 for (
unsigned int i=0; i<
fDim; i++ )
313 if (
Opt().fIntegral )
351 Append( newPoints, dim, err );
377 for (
unsigned int i=0; i <
fNPoints; i++ )
379 double val =
fData[i];
383 MATH_ERROR_MSG(
"BinData::TransformLog",
"Some points have negative values - cannot apply a log transformation");
511 if (
y != 0 || eyl != 1.0 || eyh != 1.0)
fSumError2 += (eyl+eyh)*(eyl+eyh)/4;
552 if (val != 0 || eval != 1.0)
fSumError2 += eval*eval;
554 if (val != 0 && std::abs( eval*eval/val - 1.0) > 1.E-12)
fIsWeighted =
true;
572 for(
unsigned int i=0; i<
fDim; i++ )
583 if (val != 0 || eval != 1.0)
fSumError2 += eval*eval;
585 if (val != 0 && std::abs( eval*eval/val - 1.0) > 1.E-12)
fIsWeighted =
true;
591 void BinData::Add(
const double*
x,
double val,
const double*
ex,
double elval,
double ehval )
604 for(
unsigned int i=0; i<
fDim; i++ )
616 if (val != 0 || elval != 1.0 || ehval != 1.0 )
634 for (
unsigned int i=0; i<
fDim; i++ )
645 double binVolume = 1.0;
646 for (
unsigned int j = 0; j <
fDim; j++ )
648 binVolume *= ( xup[j] - xlow[j] );
697 for(
unsigned int i=0; i <
fDim; i++ )
743 for(
unsigned int i=0; i<
fDim; i++ )
767 assert(
fData.empty() );
775 for (
unsigned int i=0; i <
fDim; i++ )
793 for (
unsigned int i=0; i <
fNPoints; i++ )
802 for(
unsigned int i=0; i <
fDim; i++ )
829 unsigned int n =
Size();
833 for (
unsigned int i = 0; i <
n; ++i) {
835 double err =
Error(i);
841 for (
unsigned int i = 0; i <
n; ++i) {
844 double elval,ehval = 0;
846 if (
y != 0 || elval != 1.0 || ehval != 1.0)
#define MATH_ERROR_MSG(loc, str)
Class describing the binned data sets : vectors of x coordinates, y values and optionally error on y ...
const double * fDataErrorHighPtr
std::vector< double > fData
Stores the data values the same way as the coordinates.
std::vector< const double * > fCoordErrorsPtr
void Append(unsigned int newPoints, unsigned int dim=1, ErrorType err=kValueError)
preallocate a data set with given size , dimension and error type (to get the full point size) If the...
std::vector< double > fDataErrorLow
void AddBinUpEdge(const double *xup)
add the bin width data, a pointer to an array with the bin upper edge information.
const double * fDataErrorLowPtr
std::vector< double > fDataErrorHigh
BinData & LogTransform()
apply a Log transformation of the data values can be used for example when fitting an exponential or ...
BinData(unsigned int maxpoints=0, unsigned int dim=1, ErrorType err=kValueError)
constructor from dimension of point and max number of points (to pre-allocate vector) Give a zero val...
virtual ~BinData()
destructor
double * fpTmpCoordErrorVector
double Value(unsigned int ipoint) const
return the value for the given fit point
std::vector< std::vector< double > > fCoordErrors
void Add(double x, double y)
add one dim data with only coordinate and values
void Initialize(unsigned int newPoints, unsigned int dim=1, ErrorType err=kValueError)
BinData & operator=(const BinData &rhs)
std::vector< std::vector< double > > fBinEdge
void GetAsymError(unsigned int ipoint, double &lowError, double &highError) const
const double * fDataErrorPtr
double * fpTmpBinEdgeVector
std::vector< double > fDataError
double Error(unsigned int ipoint) const
class describing the range in the coordinates it supports multiple range in a coordinate.
Base class for all the fit data types: Stores the coordinates and the DataOptions.
unsigned int Size() const
return number of fit points
void Add(double x)
add one dim data with only coordinate and values
void Append(unsigned int newPoints, unsigned int dim=1)
static constexpr unsigned VectorPadding(const unsigned)
If VecCore is not defined, there is no vectorization available and the SIMD vector size will always b...
FitData & operator=(const FitData &rhs)
const DataOptions & Opt() const
access to options
const double * Coords(unsigned int ipoint) const
return a pointer to the coordinates data for the given fit point
TFitResultPtr Fit(FitObject *h1, TF1 *f1, Foption_t &option, const ROOT::Math::MinimizerOptions &moption, const char *goption, ROOT::Fit::DataRange &range)
DataOptions : simple structure holding the options on how the data are filled.