42 MATH_ERROR_MSG(
"DistSampler::SetRange",
"Need to set function before setting the range");
51 MATH_ERROR_MSG(
"DistSampler::SetRange",
"Need to set function before setting the range");
54 for (
unsigned int icoord = 0; icoord <
NDim(); ++icoord)
87 if (
NDim() == 0)
return false;
88 if (
fFunc == 0)
return false;
101 MATH_ERROR_MSG(
"DistSampler::Generate",
"unbin data not consistent with distribution");
106 MATH_WARN_MSG(
"DistSampler::Generate",
"sampler has not been initialized correctly");
111 for (
unsigned int i = 0; i < nevt; ++i) {
124 MATH_WARN_MSG(
"DistSampler::Generate",
"sampler has not been initialized correctly");
130 for (
unsigned int j = 0; j <
NDim(); ++j) {
131 ntotbins *= nbins[j];
136 std::vector<double> dx(
NDim() );
137 std::vector<double>
x(
NDim() );
138 double binVolume = 1;
139 for (
unsigned int j = 0; j < dx.size(); ++j) {
140 double x1 = 0,
x2 = 0;
142 MATH_WARN_MSG(
"DistSampler::Generate",
"sampler has not a range defined for all coordinates");
146 dx[j] = (
x2-
x1)/
double(nbins[j]);
147 assert(dx[j] > 0 && 1./dx[j] > 0 );
151 double nnorm = nevt * binVolume;
156 for (
int j =
NDim()-1; j >=0; --j) {
157 for (
int i = 0; i < nbins[j]; ++i) {
162 double nexp = yval * nnorm;
164 data.
Add(&x.front(), val, eval);
168 MATH_WARN_MSG(
"DistSampler::Generate",
"error returned from SampleBin");
174 MATH_WARN_MSG(
"DistSampler::Generate",
"generation with fixed events not yet impelmented");
void Initialize(unsigned int maxpoints, 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 > fData
unsigned int NDim() const
return the dimension of the parent distribution (and the data)
const double * Sample()
sample one event and rerturning array x with coordinates
Class describing the unbinned data sets (just x coordinates values) of any dimensions.
const ROOT::Math::IMultiGenFunction & ParentPdf() const
get the parent distribution function (must be called after setting the function)
#define MATH_WARN_MSG(loc, str)
virtual bool Generate(unsigned int nevt, ROOT::Fit::UnBinData &data)
generate a un-binned data sets (fill the given data set) if dataset has already data append to it ...
static const double x2[5]
virtual ~DistSampler()
virtual destructor
#define MATH_ERROR_MSG(loc, str)
unsigned int Size(unsigned int icoord=0) const
return range size for coordinate icoord (starts from zero) Size == 0 indicates no range is present [-...
void SetRange(unsigned int icoord, double xmin, double xmax)
set a range [xmin,xmax] for the new coordinate icoord If more range exists for other coordinates...
DistSampler options class.
virtual unsigned int NDim() const =0
Retrieve the dimension of the function.
ROOT::Fit::DataRange * fRange
const ROOT::Math::IMultiGenFunction * fFunc
Class describing the binned data sets : vectors of x coordinates, y values and optionally error on y ...
unsigned int NDim() const
get range dimension
void SetRange(double xmin, double xmax, int icoord=0)
set range in a given dimension
static const double x1[5]
class describing the range in the coordinates it supports multiple range in a coordinate.
void Add(double x, double y)
add one dim data with only coordinate and values
void Add(double x)
add one dim coordinate data (unweighted)
double func(double *x, double *p)
const std::string & Algorithm() const
type of algorithm
unsigned int PointSize() const
return point size.
virtual bool Init(const char *="")
initialize the generators with the given algorithm Implemented by derived classes who needs it (like ...
virtual bool SampleBin(double prob, double &value, double *error=0)
sample one bin given an estimated of the pdf in the bin (this can be function value at the center or ...
virtual void DoSetFunction(const ROOT::Math::IMultiGenFunction &func, bool copy)
Documentation for the abstract class IBaseFunctionMultiDim.
void GetRange(unsigned int icoord, double &xmin, double &xmax) const
get the first range for given coordinate.
unsigned int DataSize() const
return size of internal data vector (is 0 for external data)
virtual IBaseFunctionMultiDim * Clone() const =0
Clone a function.
void Initialize(unsigned int maxpoints, unsigned int dim=1, bool isWeighted=false)
preallocate a data set given size and dimension of the coordinates if a vector already exists with co...