44      unur_set_default_debug(UNUR_DEBUG_ALL);
 
   45   else if (debugLevel == 1)
 
   46      unur_set_default_debug(UNUR_DEBUG_INIT);
 
   48      unur_set_default_debug(UNUR_DEBUG_OFF);
 
   56   if (
fGen != 
nullptr) unur_free(
fGen);
 
   71   if (
this == &rhs) 
return *
this;  
 
   78   std::string s = dist + 
" & " + method;
 
   79   fGen = unur_str2gen(s.c_str() );
 
   80   if (
fGen == 
nullptr) {
 
   81      Error(
"Init",
"Cannot create generator object");
 
  111   fDist.reset(distNew);
 
  126   fDist.reset(distNew);
 
  140   fDist.reset(distNew);
 
  155   if (
fRng == 
nullptr) 
return false;
 
  156   if (
fGen == 
nullptr) 
return false;
 
  159   if (
fUrng == 
nullptr) 
return false;
 
  160   unsigned int ret = 0;
 
  163   if (ret != 0) 
return false;
 
  173   fUdistr = unur_distr_cont_new();
 
  174   if (
fUdistr == 
nullptr) 
return false;
 
  175   unsigned int ret = 0;
 
  176   ret = unur_distr_set_extobj(
fUdistr, &dist);
 
  177   if ( ! dist.IsLogPdf() ) {
 
  192         Error(
"SetContDistribution",
"invalid domain xmin = %g xmax = %g ",
xmin,
xmax);
 
  196   if (dist.HasMode() ) {
 
  197      ret = unur_distr_cont_set_mode(
fUdistr, dist.Mode());
 
  199         Error(
"SetContDistribution",
"invalid mode given,  mode = %g ",dist.Mode());
 
  203   if (dist.HasPdfArea() ) {
 
  204      ret = unur_distr_cont_set_pdfarea(
fUdistr, dist.PdfArea());
 
  206         Error(
"SetContDistribution",
"invalid area given,  area = %g ",dist.PdfArea());
 
  211   return (ret ==0) ? true : 
false;
 
  219   fUdistr = unur_distr_cvec_new(dist.NDim() );
 
  220   if (
fUdistr == 
nullptr) 
return false;
 
  221   unsigned int ret = 0;
 
  222   ret |= unur_distr_set_extobj(
fUdistr, &dist );
 
  223   if ( ! dist.IsLogPdf() ) {
 
  234   const double * 
xmin = dist.GetLowerDomain();
 
  235   const double * 
xmax = dist.GetUpperDomain();
 
  236   if ( 
xmin != 
nullptr || 
xmax != 
nullptr ) {
 
  239         Error(
"SetMultiDistribution",
"invalid domain");
 
  243      Error(
"SetMultiDistribution",
"domain setting not available in UNURAN 0.8.1");
 
  248   const double * xmode = dist.GetMode();
 
  249   if (xmode != 
nullptr) {
 
  250      ret = unur_distr_cvec_set_mode(
fUdistr, xmode);
 
  252         Error(
"SetMultiDistribution",
"invalid mode");
 
  256   return (ret ==0) ? true : 
false;
 
  263   if (dist.NDim() == 1)
 
  264      fUdistr = unur_distr_cemp_new();
 
  266      fUdistr = unur_distr_cvemp_new(dist.NDim() );
 
  268   if (
fUdistr == 
nullptr) 
return false;
 
  269   unsigned int ret = 0;
 
  273   if (dist.IsBinned() ) {
 
  274      int nbins = dist.Data().size();
 
  275      double min = dist.LowerBin();
 
  276      double max = dist.UpperBin();
 
  277      const double * pv = &(dist.Data().front());
 
  278      ret |= unur_distr_cemp_set_hist(
fUdistr, pv, nbins, min, max);
 
  280      Error(
"SetEmpiricalDistribution",
"hist method not available in UNURAN 0.8.1");
 
  284      const double * pv = &dist.Data().front();
 
  286      int n = dist.Data().size()/dist.NDim();
 
  287      if (dist.NDim() == 1)
 
  288         ret |= unur_distr_cemp_set_data(
fUdistr, pv, 
n);
 
  290         ret |= unur_distr_cvemp_set_data(
fUdistr, pv, 
n);
 
  293      Error(
"SetEmpiricalDistribution",
"invalid distribution object");
 
  304   fUdistr = unur_distr_discr_new();
 
  305   if (
fUdistr == 
nullptr) 
return false;
 
  306   unsigned int ret = 0;
 
  308   if (dist.ProbVec().size() == 0) {
 
  309      ret = unur_distr_set_extobj(
fUdistr, &dist );
 
  316      ret |= unur_distr_discr_set_pv(
fUdistr, &dist.ProbVec().front(), dist.ProbVec().size() );
 
  323         Error(
"SetDiscrDistribution",
"invalid domain xmin = %d xmax = %d ",
xmin,
xmax);
 
  327   if (dist.HasMode() ) {
 
  328      ret = unur_distr_discr_set_mode(
fUdistr, dist.Mode());
 
  330         Error(
"SetContDistribution",
"invalid mode given,  mode = %d ",dist.Mode());
 
  334   if (dist.HasProbSum() ) {
 
  335      ret = unur_distr_discr_set_pmfsum(
fUdistr, dist.ProbSum());
 
  337         Error(
"SetContDistribution",
"invalid sum given,  mode = %g ",dist.ProbSum());
 
  342   return (ret ==0) ? true : 
false;
 
  351   if (
fUdistr == 
nullptr) 
return false;
 
  353   struct unur_slist *mlist = 
nullptr;
 
  356   if (par == 
nullptr) {
 
  357      Error(
"SetMethod",
"missing distribution information or syntax error");
 
  358      if (mlist != 
nullptr)  _unur_slist_free(mlist);
 
  364   unur_set_use_distr_privatecopy (par, 
false);
 
  367   if (
fGen != 
nullptr )  unur_free(
fGen);
 
  368   fGen = unur_init(par);
 
  369   _unur_slist_free(mlist);
 
  370   if (
fGen == 
nullptr) {
 
  371      Error(
"SetMethod",
"initializing Unuran: condition for method violated");
 
  380   if (!
fGen) 
return std::string();
 
  381   return std::string(unur_gen_info(
fGen, extended)); 
 
  387   if (!
fGen) 
return std::string();
 
  388   return std::string(unur_get_genid(
fGen)); 
 
  395   return unur_get_dimension(
fGen); 
 
  401   if (!
fGen) 
return -1;
 
  402   return unur_distr_get_type (unur_get_distr(
fGen));
 
  406   if (!
fGen) 
return false;
 
  407   return unur_distr_is_cont (unur_get_distr(
fGen));
 
  410   if (!
fGen) 
return false;
 
  411   return unur_distr_is_cvec (unur_get_distr(
fGen));
 
  414   if (!
fGen) 
return false;
 
  415   return unur_distr_is_discr (unur_get_distr(
fGen));
 
  418   if (!
fGen) 
return false;
 
  419   return unur_distr_is_cemp (unur_get_distr(
fGen));
 
  425   assert(
fGen != 
nullptr);
 
  426   return unur_sample_discr(
fGen);
 
  432   assert(
fGen != 
nullptr);
 
  433   return unur_sample_cont(
fGen);
 
  439   if (
fGen == 
nullptr) 
return false;
 
  440   unur_sample_vec(
fGen,
x);
 
  450   if (
fGen == 
nullptr) 
return false;
 
  453      ret |= unur_chg_debug(
fGen, UNUR_DEBUG_ALL);
 
  454   else if (debugLevel == 1)
 
  455      ret |= unur_chg_debug(
fGen, UNUR_DEBUG_ALL);
 
  457      ret |= unur_chg_debug(
fGen, UNUR_DEBUG_OFF);
 
  459   return (ret ==0) ? true : 
false;
 
  471   if (
fUdistr == 
nullptr) 
return false;
 
  482   fUdistr = unur_distr_binomial(par,2);
 
  485   if (
fUdistr == 
nullptr) 
return false;
 
  495   if (!
fGen ) 
return false;
 
  497   unur_distr_discr_set_pmfparams(
fUdistr,par,npar);
 
  498   int iret = unur_reinit(
fGen);
 
  499   if (iret) 
Warning(
"ReInitDiscrDist",
"re-init failed - a full initizialization must be performed");
 
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
R__EXTERN TRandom * gRandom
This is the base class for the ROOT Random number generators.
virtual void SetSeed(ULong_t seed=0)
Set the random generator seed.
TUnuranContDist class describing one dimensional continuous distribution.
TUnuranContDist * Clone() const override
Clone (required by base class)
TUnuranDiscrDist class for one dimensional discrete distribution.
TUnuranDiscrDist * Clone() const override
Clone (required by base class)
TUnuranEmpDist class for describing empirical distributions.
unsigned int NDim() const
Number of data dimensions.
TUnuranEmpDist * Clone() const override
Clone (required by base class)
bool IsBinned() const
Flag to control if data are binned.
TUnuranMultiContDist class describing multi dimensional continuous distributions.
TUnuranMultiContDist * Clone() const override
Clone (required by base class)
std::string GetGenId() const
Return an ID string about the unuran generator method.
bool IsDistCont() const
Return true for a univariate continuous distribution.
bool SetMethodAndInit()
change the method and initialize Unuran with the previously given distribution
int SampleDiscr()
Sample discrete distributions.
std::unique_ptr< TUnuranBaseDist > fDist
bool SetDiscreteDistribution(const TUnuranDiscrDist &dist)
int GetDistType() const
Return the type of the distribution.
bool InitBinomial(unsigned int ntot, double prob, const std::string &method="dstd")
Initialize method for the Binomial distribution.
bool SetContDistribution(const TUnuranContDist &dist)
std::string GetInfo(bool extended=false)
Return an information string about the used Unuran generator method.
bool SampleMulti(double *x)
Sample multidimensional distributions.
bool ReInitDiscrDist(unsigned int npar, double *params)
Reinitialize UNURAN by changing the distribution parameters but maintaining same distribution and met...
TUnuran(TRandom *r=nullptr, unsigned int log=0)
Constructor with a generator instance and given level of log output.
bool IsDistMultiCont() const
Return true for a multivariate continuous distribution.
bool Init(const std::string &distr, const std::string &method)
Initialize with Unuran string API interface.
bool SetRandomGenerator()
bool SetLogLevel(unsigned int iflag=1)
set log level
bool SetMultiDistribution(const TUnuranMultiContDist &dist)
bool IsDistEmpirical() const
Return true for an empirical distribution.
double Sample()
Sample 1D distribution.
bool SetEmpiricalDistribution(const TUnuranEmpDist &dist)
bool InitPoisson(double mu, const std::string &method="dstd")
Initialize method for the Poisson distribution.
TUnuran & operator=(const TUnuran &rhs)
Assignment operator.
int GetDimension() const
Return the dimension of unuran generator method.
void SetSeed(unsigned int seed)
set the seed for the random number generator
bool IsDistDiscrete() const
Return true for a discrete distribution.
static double Cdf(double x, const UNUR_DISTR *dist)
evaluate the Cumulative distribution function, integral of the pdf
static double Pdf(double x, const UNUR_DISTR *dist)
evaluate the probality density function
static double Dpdf(double x, const UNUR_DISTR *dist)
evaluate the derivative of the pdf
static double Pmf(int x, const UNUR_DISTR *dist)
evaluate the probality mesh function
static double Cdf(int x, const UNUR_DISTR *dist)
evaluate the cumulative function
static double Pdf(const double *x, UNUR_DISTR *dist)
evaluate the probality density function
static int Dpdf(double *grad, const double *x, UNUR_DISTR *dist)
static double Pdpdf(const double *x, int coord, UNUR_DISTR *dist)
UnuranRng class for interface ROOT random generators to Unuran.