13 #ifndef ROOT_Fit_UnBinData
14 #define ROOT_Fit_UnBinData
42 class UnBinData :
public FitData {
50 explicit UnBinData(
unsigned int maxpoints = 0,
unsigned int dim = 1,
51 bool isWeighted =
false ) :
52 FitData( maxpoints, isWeighted ? dim + 1 : dim ),
56 assert( !fWeighted || dim >= 2 );
63 explicit UnBinData (
const DataRange & range,
unsigned int maxpoints = 0,
64 unsigned int dim = 1,
bool isWeighted =
false ) :
65 FitData( range, maxpoints, isWeighted ? dim + 1 : dim ),
69 assert( !fWeighted || dim >= 2 );
75 UnBinData (
const DataOptions & opt,
const DataRange & range,
76 unsigned int maxpoints = 0,
unsigned int dim = 1,
bool isWeighted =
false ) :
77 FitData( opt, range, maxpoints, isWeighted ? dim + 1 : dim ),
81 assert( !fWeighted || dim >= 2 );
87 UnBinData(
unsigned int n,
const double * dataX ) :
97 UnBinData(
unsigned int n,
const double * dataX,
const double * dataY,
98 bool isWeighted =
false ) :
99 FitData( n, dataX, dataY ),
100 fWeighted( isWeighted )
108 UnBinData(
unsigned int n,
const double * dataX,
const double * dataY,
109 const double * dataZ,
bool isWeighted =
false ) :
110 FitData( n, dataX, dataY, dataZ ),
111 fWeighted( isWeighted )
122 template<
class Iterator>
123 UnBinData(
unsigned int n,
unsigned int dim, Iterator dataItr,
124 bool isWeighted =
false ) :
125 FitData( n, isWeighted ? dim + 1 : dim, dataItr ),
126 fWeighted( isWeighted )
129 assert( !fWeighted || dim >= 2 );
135 UnBinData(
unsigned int maxpoints,
const double * dataX,
const DataRange & range) :
136 FitData( range, maxpoints, dataX ),
146 UnBinData(
unsigned int maxpoints,
const double * dataX,
const double * dataY,
147 const DataRange & range,
bool isWeighted =
false) :
148 FitData( range, maxpoints, dataX, dataY ),
149 fWeighted( isWeighted )
157 UnBinData(
unsigned int maxpoints,
const double * dataX,
const double * dataY,
158 const double * dataZ,
const DataRange & range,
bool isWeighted =
false) :
159 FitData( range, maxpoints, dataX, dataY, dataZ ),
160 fWeighted( isWeighted )
169 template<
class Iterator>
170 UnBinData(
unsigned int maxpoints,
unsigned int dim, Iterator dataItr,
const DataRange & range,
bool isWeighted =
false ) :
171 FitData( range, maxpoints, dim, dataItr ),
172 fWeighted( isWeighted )
178 UnBinData(
const UnBinData &) : FitData() { assert(
false); }
180 UnBinData & operator= (
const UnBinData &) { assert(
false);
return *
this; }
186 virtual ~UnBinData() {
202 assert( !fWeighted );
212 void Add(
double x,
double y)
215 double dataTmp[] = { x, y };
217 FitData::Add( dataTmp );
224 void Add(
double x,
double y,
double z)
227 double dataTmp[] = { x, y, z };
229 FitData::Add( dataTmp );
235 void Add(
const double* x )
243 void Add(
const double *x,
double w)
247 std::vector<double> tmpVec(fDim);
248 std::copy( x, x + fDim - 1, tmpVec.begin() );
251 FitData::Add( &tmpVec.front() );
257 double Weight(
unsigned int ipoint )
const
259 assert( ipoint < fNPoints );
261 if ( !fWeighted )
return 1.0;
262 return *GetCoordComponent(ipoint, fDim-1);
265 const double * WeightsPtr(
unsigned int ipoint )
const
267 assert( ipoint < fNPoints );
270 MATH_ERROR_MSG(
"UnBinData::WeightsPtr",
"The function is unweighted!");
273 return GetCoordComponent(ipoint, fDim-1);
280 unsigned int NDim()
const
281 {
return fWeighted ? fDim -1 : fDim; }
283 bool IsWeighted()
const
288 void Append(
unsigned int newPoints,
unsigned int dim = 1,
bool isWeighted =
false )
292 fWeighted = isWeighted;
294 FitData::Append( newPoints, dim );