13 #ifndef ROOT_Math_TUnuranMultiContDist
14 #define ROOT_Math_TUnuranMultiContDist
47 class TUnuranMultiContDist :
public TUnuranBaseDist {
59 TUnuranMultiContDist (TF1 * func = 0,
unsigned int dim = 0,
bool isLogPdf =
false);
65 TUnuranMultiContDist (
const ROOT::Math::IMultiGenFunction & pdf,
bool isLogPdf =
false);
70 virtual ~TUnuranMultiContDist ();
76 TUnuranMultiContDist(
const TUnuranMultiContDist &);
81 TUnuranMultiContDist & operator = (
const TUnuranMultiContDist & rhs);
86 virtual TUnuranMultiContDist * Clone()
const {
return new TUnuranMultiContDist(*
this); }
92 unsigned int NDim()
const {
103 void SetDomain(
const double *xmin,
const double *xmax) {
104 if (xmin == 0 || xmax == 0)
return;
105 fXmin = std::vector<double>(xmin,xmin+NDim());
106 fXmax = std::vector<double>(xmax,xmax+NDim());
112 void SetMode(
const double * x) {
113 fMode = std::vector<double>(x,x+NDim());
119 const double * GetLowerDomain()
const {
120 if (fXmin.size() == 0 || ( fXmin.size() != fXmax.size() ) )
return 0;
126 const double * GetUpperDomain()
const {
127 if (fXmax.size() == 0 || ( fXmin.size() != fXmax.size() ) )
return 0;
136 const double * GetMode( )
const {
137 if (fMode.size() == 0 )
return 0;
138 return &fMode.front();
145 bool IsLogPdf()
const {
return fIsLogPdf; }
150 double Pdf (
const double * x)
const;
155 void Gradient(
const double * x,
double * grad)
const;
160 double Derivative(
const double * x,
int icoord)
const;
166 const ROOT::Math::IMultiGenFunction * fPdf;
168 std::vector<double> fXmin;
169 std::vector<double> fXmax;
170 std::vector<double> fMode;
176 ClassDef(TUnuranMultiContDist,1)