#ifndef ROOT_Fit_UnBinData
#define ROOT_Fit_UnBinData
#ifndef ROOT_Fit_DataVector
#include "Fit/DataVector.h"
#endif
namespace ROOT {
namespace Fit {
class UnBinData : public FitData {
public :
explicit UnBinData(unsigned int maxpoints = 0, unsigned int dim = 1 ) :
FitData(),
fDim(dim),
fNPoints(0),
fDataVector(0),
fDataWrapper(0)
{
if (maxpoints > 0) fDataVector = new DataVector( dim * maxpoints);
}
explicit UnBinData (const DataOptions & opt, unsigned int maxpoints = 0, unsigned int dim = 1) :
FitData( opt),
fDim(dim),
fNPoints(0),
fDataVector(0),
fDataWrapper(0)
{
if (maxpoints > 0) fDataVector = new DataVector( dim * maxpoints);
}
UnBinData (const DataOptions & opt, const DataRange & range, unsigned int maxpoints = 0, unsigned int dim = 1 ) :
FitData( opt, range),
fDim(dim),
fNPoints(0),
fDataVector(0),
fDataWrapper(0)
{
if (maxpoints > 0) fDataVector = new DataVector( dim * maxpoints);
}
UnBinData(unsigned int n, const double * dataX ) :
FitData( ),
fDim(1),
fNPoints(n),
fDataVector(0)
{
fDataWrapper = new DataWrapper(dataX);
}
UnBinData(unsigned int n, const double * dataX, const double * dataY ) :
FitData( ),
fDim(2),
fNPoints(n),
fDataVector(0)
{
fDataWrapper = new DataWrapper(dataX, dataY, 0, 0, 0, 0);
}
UnBinData(unsigned int n, const double * dataX, const double * dataY, const double * dataZ ) :
FitData( ),
fDim(3),
fNPoints(n),
fDataVector(0)
{
fDataWrapper = new DataWrapper(dataX, dataY, dataZ, 0, 0, 0, 0, 0);
}
template<class Iterator>
UnBinData(unsigned int n, unsigned int dim, Iterator dataItr ) :
FitData( ),
fDim(dim),
fNPoints(n),
fDataVector(0)
{
fDataWrapper = new DataWrapper(dim, dataItr);
}
private:
UnBinData(const UnBinData &) : FitData() {}
UnBinData & operator= (const UnBinData &) { return *this; }
public:
#ifdef LATER
UnBinData (const UnBinData & data , const DataOptions & opt, const DataRange & range) :
DataVector(opt,range, data.DataSize() ),
fDim(data.fDim),
fNPoints(data.fNPoints)
{
}
#endif
virtual ~UnBinData() {
if (fDataVector) delete fDataVector;
if (fDataWrapper) delete fDataWrapper;
}
void Initialize(unsigned int maxpoints, unsigned int dim = 1) {
fDim = dim;
assert(maxpoints > 0);
if (fDataVector)
(fDataVector->Data()).resize( maxpoints * PointSize() );
else
fDataVector = new DataVector( dim * maxpoints);
}
unsigned int PointSize() const {
return fDim;
}
unsigned int DataSize() const {
return fDataVector->Size();
}
void Add(double x) {
int index = fNPoints*PointSize();
assert(fDataVector != 0);
assert (index + PointSize() <= DataSize() );
(fDataVector->Data())[ index ] = x;
fNPoints++;
}
void Add(double *x) {
int index = fNPoints*PointSize();
assert(fDataVector != 0);
assert (index + PointSize() <= DataSize() );
double * itr = &( (fDataVector->Data()) [ index ]);
for (unsigned int i = 0; i < fDim; ++i)
*itr++ = x[i];
fNPoints++;
}
const double * Coords(unsigned int ipoint) const {
if (fDataVector)
return &( (fDataVector->Data()) [ ipoint*PointSize() ] );
else
return fDataWrapper->Coords(ipoint);
}
void Resize (unsigned int npoints) {
if (fDataVector) {
fNPoints = npoints;
(fDataVector->Data()).resize(PointSize() *npoints);
}
}
unsigned int NPoints() const { return fNPoints; }
unsigned int Size() const { return fNPoints; }
unsigned int NDim() const { return fDim; }
protected:
void SetNPoints(unsigned int n) { fNPoints = n; }
private:
unsigned int fDim;
unsigned int fNPoints;
DataVector * fDataVector;
DataWrapper * fDataWrapper;
};
}
}
#endif /* ROOT_Fit_UnBinData */
Last change: Wed Jun 25 08:29:15 2008
Last generated: 2008-06-25 08:29
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.