48 width(
"width",
"width",this,_width),
49 peak(
"peak",
"peak",this,_peak),
50 tail(
"tail",
"tail",this,_tail)
60 peak(
"peak",this,other.peak),
61 tail(
"tail",this,other.tail)
82 static const double xi = 2.3548200450309494;
85 double width_zero2 = width_zero * width_zero;
86 double exponent = ( -0.5 / (width_zero2) * log * log ) - ( width_zero2 * 0.5 );
95 {dataMap.at(x), dataMap.at(peak), dataMap.at(width), dataMap.at(tail)});
114 assert(code==1 || code==2) ;
119 static const double sqrt2 = 1.4142135623730950;
120 static const double sqlog2 = 0.832554611157697756;
121 static const double sqlog4 = 1.17741002251547469;
122 static const double log4 = 1.38629436111989062;
123 static const double rootpiby2 = 1.2533141373155003;
124 static const double sqpibylog2 = 2.12893403886245236;
127 double A =
x.
min(rangeName);
128 double B =
x.
max(rangeName);
136 double xscale = sqrt2*
width;
149 if ( log_argument_A < 1.e-7) {
150 log_argument_A = 1.e-7;
154 if ( log_argument_B < 1.e-7) {
155 log_argument_B = 1.e-7;
159 double term1_2 = term1 * term1;
162 double erf_termA = ( term1_2 - log4 *
TMath::Log( log_argument_A ) ) / ( 2 * term1 * sqlog2 );
163 double erf_termB = ( term1_2 - log4 *
TMath::Log( log_argument_B ) ) / ( 2 * term1 * sqlog2 );
169 }
else if (code==2) {
170 double A =
x.
min(rangeName);
171 double B =
x.
max(rangeName);
179 double xscale = sqrt2*
width;
192 if ( log_argument_A < 1.e-7) {
193 log_argument_A = 1.e-7;
197 if ( log_argument_B < 1.e-7) {
198 log_argument_B = 1.e-7;
202 double term1_2 = term1 * term1;
205 double erf_termA = ( term1_2 - log4 *
TMath::Log( log_argument_A ) ) / ( 2 * term1 * sqlog2 );
206 double erf_termB = ( term1_2 - log4 *
TMath::Log( log_argument_B ) ) / ( 2 * term1 * sqlog2 );
215 coutF(Eval) <<
"Error in RooNovosibirsk::analyticalIntegral" << std::endl;
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 Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Abstract interface for all probability density functions.
Abstract base class for objects that represent a real value and implements functionality common to al...
bool matchArgs(const RooArgSet &allDeps, RooArgSet &numDeps, const RooArgProxy &a) const
Utility function for use in getAnalyticalIntegral().
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooBatchCompute::Config config(RooAbsArg const *arg) const
RooNovosibirsk implements the Novosibirsk function.
void computeBatch(double *output, size_t nEvents, RooFit::Detail::DataMap const &) const override
Compute multiple values of Novosibirsk distribution.
Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=nullptr) const override
Interface function getAnalyticalIntergral advertises the analytical integrals that are supported.
double evaluate() const override
If tail=eta=0 the Belle distribution becomes gaussian.
double analyticalIntegral(Int_t code, const char *rangeName=nullptr) const override
Implements the actual analytical integral(s) advertised by getAnalyticalIntegral.
double max(const char *rname=nullptr) const
Query upper limit of range. This requires the payload to be RooAbsRealLValue or derived.
double min(const char *rname=nullptr) const
Query lower limit of range. This requires the payload to be RooAbsRealLValue or derived.
void compute(Config cfg, Computer comp, RestrictArr output, size_t size, const VarVector &vars, ArgVector &extraArgs)
Double_t Exp(Double_t x)
Returns the base-e exponential function of x, which is e raised to the power x.
Double_t Erf(Double_t x)
Computation of the error function erf(x).
Double_t ASinH(Double_t)
Returns the area hyperbolic sine of x.
Double_t Log(Double_t x)
Returns the natural logarithm of x.
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Returns x raised to the power y.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.