50 width(
"width",
"width",this,_width),
51 peak(
"peak",
"peak",this,_peak),
52 tail(
"tail",
"tail",this,_tail)
62 peak(
"peak",this,other.peak),
63 tail(
"tail",this,other.tail)
84 static const Double_t xi = 2.3548200450309494;
87 Double_t width_zero2 = width_zero * width_zero;
88 Double_t exponent = ( -0.5 / (width_zero2) *
log *
log ) - ( width_zero2 * 0.5 );
106template<
class Tx,
class Tw
idth,
class Tpeak,
class Ttail>
107void compute(
size_t batchSize,
double * __restrict
output,
108 Tx X, Tpeak
P, Twidth W, Ttail
T)
110 constexpr double xi = 2.3548200450309494;
111 for (
size_t i=0; i<batchSize; i++) {
112 double argasinh = 0.5*xi*
T[i];
116 double argln2 = 1 -(X[i]-
P[i])*
T[i]/W[i];
120 output[i] -= 2.0/xi/xi*asinh*asinh;
124 for (
size_t i=0; i<batchSize; i++) {
140 if (info.
nBatches==1 && !xData.empty()) {
141 compute(info.
size,
output.data(), xData.data(),
172 assert(code==1 || code==2) ;
177 static const Double_t sqrt2 = 1.4142135623730950;
178 static const Double_t sqlog2 = 0.832554611157697756;
179 static const Double_t sqlog4 = 1.17741002251547469;
180 static const Double_t log4 = 1.38629436111989062;
181 static const Double_t rootpiby2 = 1.2533141373155003;
182 static const Double_t sqpibylog2 = 2.12893403886245236;
207 if ( log_argument_A < 1.e-7) {
208 log_argument_A = 1.e-7;
212 if ( log_argument_B < 1.e-7) {
213 log_argument_B = 1.e-7;
220 Double_t erf_termA = ( term1_2 - log4 *
TMath::Log( log_argument_A ) ) / ( 2 * term1 * sqlog2 );
221 Double_t erf_termB = ( term1_2 - log4 *
TMath::Log( log_argument_B ) ) / ( 2 * term1 * sqlog2 );
227 }
else if (code==2) {
250 if ( log_argument_A < 1.e-7) {
251 log_argument_A = 1.e-7;
255 if ( log_argument_B < 1.e-7) {
256 log_argument_B = 1.e-7;
263 Double_t erf_termA = ( term1_2 - log4 *
TMath::Log( log_argument_A ) ) / ( 2 * term1 * sqlog2 );
264 Double_t erf_termB = ( term1_2 - log4 *
TMath::Log( log_argument_B ) ) / ( 2 * term1 * sqlog2 );
273 coutF(
Eval) <<
"Error in RooNovosibirsk::analyticalIntegral" << std::endl;
include TDocParser_001 C image html pict1_TDocParser_001 png width
RooSpan< double > makeWritableBatchUnInit(std::size_t begin, std::size_t batchSize)
Make a batch and return a span pointing to the pdf-local memory.
Little adapter that gives a bracket operator to types that don't have one.
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Bool_t matchArgs(const RooArgSet &allDeps, RooArgSet &numDeps, const RooArgProxy &a) const
Utility function for use in getAnalyticalIntegral().
BatchHelpers::BatchData _batchData
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooNovosibirsk implements the Novosibirsk function.
RooSpan< double > evaluateBatch(std::size_t begin, std::size_t batchSize) const
Evaluate function for a batch of input data points.
Double_t analyticalIntegral(Int_t code, const char *rangeName=0) const
Implements the actual analytical integral(s) advertised by getAnalyticalIntegral.
Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=0) const
Interface function getAnalyticalIntergral advertises the analytical integrals that are supported.
Double_t evaluate() const
If tail=eta=0 the Belle distribution becomes gaussian.
A simple container to hold a batch of data values.
Double_t min(const char *rname=0) const
Query lower limit of range. This requires the payload to be RooAbsRealLValue or derived.
RooSpan< const double > getValBatch(std::size_t begin, std::size_t batchSize) const
Double_t max(const char *rname=0) const
Query upper limit of range. This requires the payload to be RooAbsRealLValue or derived.
EvaluateInfo getInfo(std::vector< const RooRealProxy * > parameters, size_t begin, size_t batchSize)
Double_t Erf(Double_t x)
Computation of the error function erf(x).
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
static void output(int code)