evtgen is hosted by Hepforge, IPPP Durham
EvtGen  2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
EvtVubBLNP.cpp
Go to the documentation of this file.
1 
2 /***********************************************************************
3 * Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4 * *
5 * This file is part of EvtGen. *
6 * *
7 * EvtGen is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * EvtGen is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19 ***********************************************************************/
20 
22 
23 #include "EvtGenBase/EvtGenKine.hh"
24 #include "EvtGenBase/EvtPDL.hh"
26 #include "EvtGenBase/EvtPatches.hh"
27 #include "EvtGenBase/EvtRandom.hh"
28 #include "EvtGenBase/EvtReport.hh"
30 
34 
35 #include <stdlib.h>
36 #include <string>
37 
38 // For incomplete gamma function
39 #include "math.h"
40 #include "signal.h"
41 #define ITMAX 100
42 #define EPS 3.0e-7
43 #define FPMIN 1.0e-30
44 
45 using std::cout;
46 using std::endl;
47 
48 std::string EvtVubBLNP::getName()
49 {
50  return "VUB_BLNP";
51 }
52 
54 {
55  return new EvtVubBLNP;
56 }
57 
59 {
60  // get parameters (declared in the header file)
61 
62  // Input parameters
63  mBB = 5.2792;
64  lambda2 = 0.12;
65 
66  // Shape function parameters
67  b = getArg( 0 );
68  Lambda = getArg( 1 );
69  Ecut = 1.8;
70  wzero = mBB - 2 * Ecut;
71 
72  // SF and SSF modes
73  itype = (int)getArg( 5 );
74  dtype = getArg( 5 );
75  isubl = (int)getArg( 6 );
76 
77  // flags
78  flag1 = (int)getArg( 7 );
79  flag2 = (int)getArg( 8 );
80  flag3 = (int)getArg( 9 );
81 
82  // Quark mass
83  mb = 4.61;
84 
85  // hidden parameter what and SF stuff
86  const double xlow = 0;
87  const double xhigh = mBB;
88  const int aSize = 10000;
89  EvtPFermi pFermi( Lambda, b );
90  // pf is the cumulative distribution normalized to 1.
91  _pf.resize( aSize );
92  for ( int i = 0; i < aSize; i++ ) {
93  double what = xlow + (double)( i + 0.5 ) / ( (double)aSize ) *
94  ( xhigh - xlow );
95  if ( i == 0 )
96  _pf[i] = pFermi.getSFBLNP( what );
97  else
98  _pf[i] = _pf[i - 1] + pFermi.getSFBLNP( what );
99  }
100  for ( size_t i = 0; i < _pf.size(); i++ ) {
101  _pf[i] /= _pf[_pf.size() - 1];
102  }
103 
104  // Matching scales
105  muh = mBB * getArg( 2 ); // 0.5
106  mui = getArg( 3 ); // 1.5
107  mubar = getArg( 4 ); // 1.5
108 
109  // Perturbative quantities
110  CF = 4.0 / 3.0;
111  CA = 3.0;
112  double nf = 4.0;
113 
114  beta0 = 11.0 / 3.0 * CA - 2.0 / 3.0 * nf;
115  beta1 = 34.0 / 3.0 * CA * CA - 10.0 / 3.0 * CA * nf - 2.0 * CF * nf;
116  beta2 = 2857.0 / 54.0 * CA * CA * CA +
117  ( CF * CF - 205.0 / 18.0 * CF * CA - 1415.0 / 54.0 * CA * CA ) * nf +
118  ( 11.0 / 9.0 * CF + 79.0 / 54.0 * CA ) * nf * nf;
119 
120  zeta3 = 1.0 + 1 / 8.0 + 1 / 27.0 + 1 / 64.0;
121 
122  Gamma0 = 4 * CF;
123  Gamma1 = CF * ( ( 268.0 / 9.0 - 4.0 * M_PI * M_PI / 3.0 ) * CA -
124  40.0 / 9.0 * nf );
125  Gamma2 = 16 * CF *
126  ( ( 245.0 / 24.0 - 67.0 / 54.0 * M_PI * M_PI +
127  +11.0 / 180.0 * pow( M_PI, 4 ) + 11.0 / 6.0 * zeta3 ) *
128  CA * CA *
129  +( -209.0 / 108.0 + 5.0 / 27.0 * M_PI * M_PI -
130  7.0 / 3.0 * zeta3 ) *
131  CA * nf +
132  ( -55.0 / 24.0 + 2 * zeta3 ) * CF * nf - nf * nf / 27.0 );
133 
134  gp0 = -5.0 * CF;
135  gp1 = -8.0 * CF *
136  ( ( 3.0 / 16.0 - M_PI * M_PI / 4.0 + 3 * zeta3 ) * CF +
137  ( 1549.0 / 432.0 + 7.0 / 48.0 * M_PI * M_PI - 11.0 / 4.0 * zeta3 ) *
138  CA -
139  ( 125.0 / 216.0 + M_PI * M_PI / 24.0 ) * nf );
140 
141  // Lbar and mupisq
142 
143  Lbar = Lambda; // all models
144  mupisq = 3 * Lambda * Lambda / b;
145  if ( itype == 1 )
146  mupisq = 3 * Lambda * Lambda / b;
147  if ( itype == 2 )
148  mupisq = 3 * Lambda * Lambda *
149  ( Gamma( 1 + 0.5 * b ) * Gamma( 0.5 * b ) /
150  pow( Gamma( 0.5 + 0.5 * b ), 2 ) -
151  1 );
152 
153  // moment2 for SSFs
154  moment2 = pow( 0.3, 3 );
155 
156  // inputs for total rate (T for Total); use BLNP notebook defaults
157  flagpower = 1;
158  flag2loop = 1;
159 
160  // stuff for the integrator
161  maxLoop = 20;
162  //precision = 1.0e-3;
163  precision = 2.0e-2;
164 
165  // vector of global variables, to pass to static functions (which can't access globals);
166  gvars.push_back( 0.0 ); // 0
167  gvars.push_back( 0.0 ); // 1
168  gvars.push_back( mui ); // 2
169  gvars.push_back( b ); // 3
170  gvars.push_back( Lambda ); // 4
171  gvars.push_back( mBB ); // 5
172  gvars.push_back( mb ); // 6
173  gvars.push_back( wzero ); // 7
174  gvars.push_back( beta0 ); // 8
175  gvars.push_back( beta1 ); // 9
176  gvars.push_back( beta2 ); // 10
177  gvars.push_back( dtype ); // 11
178 
179  // check that there are 3 daughters and 10 arguments
180  checkNDaug( 3 );
181  checkNArg( 10 );
182 }
183 
185 {
186  noProbMax();
187 }
188 
190 {
191  int j;
192 
193  EvtParticle *xuhad( 0 ), *lepton( 0 ), *neutrino( 0 );
194  EvtVector4R p4;
195  double Pp, Pm, Pl, pdf, EX, sh, ml, mpi, ratemax;
196  double El( 0. );
197 
198  double xhigh, xlow, what;
199 
200  Bmeson->initializePhaseSpace( getNDaug(), getDaugs() );
201 
202  xuhad = Bmeson->getDaug( 0 );
203  lepton = Bmeson->getDaug( 1 );
204  neutrino = Bmeson->getDaug( 2 );
205 
206  mBB = Bmeson->mass();
207  ml = lepton->mass();
208 
209  // get SF value
210  xlow = 0;
211  xhigh = mBB;
212  // the case for alphas = 0 is not considered
213  what = 2 * xhigh;
214  while ( what > xhigh || what < xlow ) {
215  what = findBLNPWhat();
216  what = xlow + what * ( xhigh - xlow );
217  }
218 
219  bool tryit = true;
220 
221  while ( tryit ) {
222  // generate pp between 0 and
223  // Flat(min, max) gives R(max - min) + min, where R = random btwn 0 and 1
224 
225  Pp = EvtRandom::Flat( 0, mBB ); // P+ = EX - |PX|
226  Pl = EvtRandom::Flat( 0, mBB ); // mBB - 2El
227  Pm = EvtRandom::Flat( 0, mBB ); // P- = EX + |PX|
228 
229  sh = Pm * Pp;
230  EX = 0.5 * ( Pm + Pp );
231  El = 0.5 * ( mBB - Pl );
232 
233  // Need maximum rate. Waiting for Mr. Paz to give it to me.
234  // Meanwhile, use this.
235  ratemax = 3.0; // From trial and error - most events below 3.0
236 
237  // kinematic bounds (Eq. 2)
238  mpi = 0.14;
239  if ( ( Pp > 0 ) && ( Pp <= Pl ) && ( Pl <= Pm ) && ( Pm < mBB ) &&
240  ( El > ml ) && ( sh > 4 * mpi * mpi ) ) {
241  // Probability of pass proportional to PDF
242  pdf = rate3( Pp, Pl, Pm );
243  double testRan = EvtRandom::Flat( 0., ratemax );
244  if ( pdf >= testRan )
245  tryit = false;
246  }
247  }
248  // o.k. we have the three kineamtic variables
249  // now calculate a flat cos Theta_H [-1,1] distribution of the
250  // hadron flight direction w.r.t the B flight direction
251  // because the B is a scalar and should decay isotropic.
252  // Then chose a flat Phi_H [0,2Pi] w.r.t the B flight direction
253  // and and a flat Phi_L [0,2Pi] in the W restframe w.r.t the
254  // W flight direction.
255 
256  double ctH = EvtRandom::Flat( -1, 1 );
257  double phH = EvtRandom::Flat( 0, 2 * M_PI );
258  double phL = EvtRandom::Flat( 0, 2 * M_PI );
259 
260  // now compute the four vectors in the B Meson restframe
261 
262  double ptmp, sttmp;
263  // calculate the hadron 4 vector in the B Meson restframe
264 
265  sttmp = sqrt( 1 - ctH * ctH );
266  ptmp = sqrt( EX * EX - sh );
267  double pHB[4] = {EX, ptmp * sttmp * cos( phH ), ptmp * sttmp * sin( phH ),
268  ptmp * ctH};
269  p4.set( pHB[0], pHB[1], pHB[2], pHB[3] );
270  xuhad->init( getDaug( 0 ), p4 );
271 
272  bool _storeWhat( true );
273 
274  if ( _storeWhat ) {
275  // cludge to store the hidden parameter what with the decay;
276  // the lifetime of the Xu is abused for this purpose.
277  // tau = 1 ps corresponds to ctau = 0.3 mm -> in order to
278  // stay well below BaBars sensitivity we take what/(10000 GeV).
279  // To extract what back from the StdHepTrk its necessary to get
280  // delta_ctau = Xu->decayVtx()->point().distanceTo(XuDaughter->decayVtx()->point());
281  //
282  // what = delta_ctau * 100000 * Mass_Xu/Momentum_Xu
283  //
284  xuhad->setLifetime( what / 10000. );
285  }
286 
287  // calculate the W 4 vector in the B Meson restrframe
288 
289  double apWB = ptmp;
290  double pWB[4] = {mBB - EX, -pHB[1], -pHB[2], -pHB[3]};
291 
292  // first go in the W restframe and calculate the lepton and
293  // the neutrino in the W frame
294 
295  double mW2 = mBB * mBB + sh - 2 * mBB * EX;
296  double beta = ptmp / pWB[0];
297  double gamma = pWB[0] / sqrt( mW2 );
298 
299  double pLW[4];
300 
301  ptmp = ( mW2 - ml * ml ) / 2 / sqrt( mW2 );
302  pLW[0] = sqrt( ml * ml + ptmp * ptmp );
303 
304  double ctL = ( El - gamma * pLW[0] ) / beta / gamma / ptmp;
305  if ( ctL < -1 )
306  ctL = -1;
307  if ( ctL > 1 )
308  ctL = 1;
309  sttmp = sqrt( 1 - ctL * ctL );
310 
311  // eX' = eZ x eW
312  double xW[3] = {-pWB[2], pWB[1], 0};
313  // eZ' = eW
314  double zW[3] = {pWB[1] / apWB, pWB[2] / apWB, pWB[3] / apWB};
315 
316  double lx = sqrt( xW[0] * xW[0] + xW[1] * xW[1] );
317  for ( j = 0; j < 2; j++ )
318  xW[j] /= lx;
319 
320  // eY' = eZ' x eX'
321  double yW[3] = {-pWB[1] * pWB[3], -pWB[2] * pWB[3],
322  pWB[1] * pWB[1] + pWB[2] * pWB[2]};
323  double ly = sqrt( yW[0] * yW[0] + yW[1] * yW[1] + yW[2] * yW[2] );
324  for ( j = 0; j < 3; j++ )
325  yW[j] /= ly;
326 
327  // p_lep = |p_lep| * ( sin(Theta) * cos(Phi) * eX'
328  // + sin(Theta) * sin(Phi) * eY'
329  // + cos(Theta) * eZ')
330  for ( j = 0; j < 3; j++ )
331  pLW[j + 1] = sttmp * cos( phL ) * ptmp * xW[j] +
332  sttmp * sin( phL ) * ptmp * yW[j] + ctL * ptmp * zW[j];
333 
334  double apLW = ptmp;
335 
336  // boost them back in the B Meson restframe
337 
338  double appLB = beta * gamma * pLW[0] + gamma * ctL * apLW;
339 
340  ptmp = sqrt( El * El - ml * ml );
341  double ctLL = appLB / ptmp;
342 
343  if ( ctLL > 1 )
344  ctLL = 1;
345  if ( ctLL < -1 )
346  ctLL = -1;
347 
348  double pLB[4] = {El, 0, 0, 0};
349  double pNB[4] = {pWB[0] - El, 0, 0, 0};
350 
351  for ( j = 1; j < 4; j++ ) {
352  pLB[j] = pLW[j] + ( ctLL * ptmp - ctL * apLW ) / apWB * pWB[j];
353  pNB[j] = pWB[j] - pLB[j];
354  }
355 
356  p4.set( pLB[0], pLB[1], pLB[2], pLB[3] );
357  lepton->init( getDaug( 1 ), p4 );
358 
359  p4.set( pNB[0], pNB[1], pNB[2], pNB[3] );
360  neutrino->init( getDaug( 2 ), p4 );
361 
362  return;
363 }
364 
365 double EvtVubBLNP::rate3( double Pp, double Pl, double Pm )
366 {
367  // rate3 in units of GF^2*Vub^2/pi^3
368 
369  double factor = 1.0 / 16 * ( mBB - Pp ) * U1lo( muh, mui ) *
370  pow( ( Pm - Pp ) / ( mBB - Pp ), alo( muh, mui ) );
371 
372  double doneJS = DoneJS( Pp, Pm, mui );
373  double done1 = Done1( Pp, Pm, mui );
374  double done2 = Done2( Pp, Pm, mui );
375  double done3 = Done3( Pp, Pm, mui );
376 
377  // The EvtSimpsonIntegrator returns zero for bad integrals.
378  // So if any of the integrals are zero (ie bad), return zero.
379  // This will cause pdf = 0, so the event will not pass.
380  // I hope this will not introduce a bias.
381  if ( doneJS * done1 * done2 * done3 == 0.0 ) {
382  //cout << "Integral failed: (Pp, Pm, Pl) = (" << Pp << ", " << Pm << ", " << Pl << ")" << endl;
383  return 0.0;
384  }
385  // if (doneJS*done1*done2*done3 != 0.0) {
386  // cout << "Integral OK: (Pp, Pm, Pl) = (" << Pp << ", " << Pm << ", " << Pl << ")" << endl;
387  //}
388 
389  double f1 = F1( Pp, Pm, muh, mui, mubar, doneJS, done1 );
390  double f2 = F2( Pp, Pm, muh, mui, mubar, done3 );
391  double f3 = F3( Pp, Pm, muh, mui, mubar, done2 );
392  double answer = factor * ( ( mBB + Pl - Pp - Pm ) * ( Pm - Pl ) * f1 +
393  2 * ( Pl - Pp ) * ( Pm - Pl ) * f2 +
394  ( mBB - Pm ) * ( Pm - Pp ) * f3 );
395  return answer;
396 }
397 
398 double EvtVubBLNP::F1( double Pp, double Pm, double muh, double mui,
399  double mubar, double doneJS, double done1 )
400 {
401  std::vector<double> vars( 12 );
402  vars[0] = Pp;
403  vars[1] = Pm;
404  for ( int j = 2; j < 12; j++ ) {
405  vars[j] = gvars[j];
406  }
407 
408  double y = ( Pm - Pp ) / ( mBB - Pp );
409  double ah = CF * alphas( muh, vars ) / 4 / M_PI;
410  double ai = CF * alphas( mui, vars ) / 4 / M_PI;
411  double abar = CF * alphas( mubar, vars ) / 4 / M_PI;
412  double lambda1 = -mupisq;
413 
414  double t1 = -4 * ai / ( Pp - Lbar ) * ( 2 * log( ( Pp - Lbar ) / mui ) + 1 );
415  double t2 = 1 + dU1nlo( muh, mui ) + anlo( muh, mui ) * log( y );
416  double t3 = -4.0 * pow( log( y * mb / muh ), 2 ) +
417  10.0 * log( y * mb / muh ) - 4.0 * log( y ) -
418  2.0 * log( y ) / ( 1 - y ) - 4.0 * PolyLog( 2, 1 - y ) -
419  M_PI * M_PI / 6.0 - 12.0;
420  double t4 = 2 * pow( log( y * mb * Pp / ( mui * mui ) ), 2 ) -
421  3 * log( y * mb * Pp / ( mui * mui ) ) + 7 - M_PI * M_PI;
422 
423  double t5 = -wS( Pp ) + 2 * t( Pp ) +
424  ( 1.0 / y - 1.0 ) * ( u( Pp ) - v( Pp ) );
425  double t6 = -( lambda1 + 3.0 * lambda2 ) / 3.0 +
426  1.0 / pow( y, 2 ) * ( 4.0 / 3.0 * lambda1 - 2.0 * lambda2 );
427 
428  double shapePp = Shat( Pp, vars );
429 
430  double answer = ( t2 + ah * t3 + ai * t4 ) * shapePp + ai * doneJS +
431  1 / ( mBB - Pp ) * ( flag2 * abar * done1 + flag1 * t5 ) +
432  1 / pow( mBB - Pp, 2 ) * flag3 * shapePp * t6;
433  if ( Pp > Lbar + mui / exp( 0.5 ) )
434  answer = answer + t1;
435  return answer;
436 }
437 
438 double EvtVubBLNP::F2( double Pp, double Pm, double muh, double /*mui*/,
439  double mubar, double done3 )
440 {
441  std::vector<double> vars( 12 );
442  vars[0] = Pp;
443  vars[1] = Pm;
444  for ( int j = 2; j < 12; j++ ) {
445  vars[j] = gvars[j];
446  }
447 
448  double y = ( Pm - Pp ) / ( mBB - Pp );
449  double lambda1 = -mupisq;
450  double ah = CF * alphas( muh, vars ) / 4 / M_PI;
451  double abar = CF * alphas( mubar, vars ) / 4 / M_PI;
452 
453  double t6 = -wS( Pp ) - 2 * t( Pp ) + 1.0 / y * ( t( Pp ) + v( Pp ) );
454  double t7 = 1 / pow( y, 2 ) * ( 2.0 / 3.0 * lambda1 + 4.0 * lambda2 ) -
455  1 / y * ( 2.0 / 3.0 * lambda1 + 3.0 / 2.0 * lambda2 );
456 
457  double shapePp = Shat( Pp, vars );
458 
459  double answer = ah * log( y ) / ( 1 - y ) * shapePp +
460  1 / ( mBB - Pp ) *
461  ( flag2 * abar * 0.5 * done3 + flag1 / y * t6 ) +
462  1.0 / pow( mBB - Pp, 2 ) * flag3 * shapePp * t7;
463  return answer;
464 }
465 
466 double EvtVubBLNP::F3( double Pp, double Pm, double /*muh*/, double /*mui*/,
467  double mubar, double done2 )
468 {
469  std::vector<double> vars( 12 );
470  vars[0] = Pp;
471  vars[1] = Pm;
472  for ( int j = 2; j < 12; j++ ) {
473  vars[j] = gvars[j];
474  }
475 
476  double y = ( Pm - Pp ) / ( mBB - Pp );
477  double lambda1 = -mupisq;
478  double abar = CF * alphas( mubar, vars ) / 4 / M_PI;
479 
480  double t7 = 1.0 / pow( y, 2 ) * ( -2.0 / 3.0 * lambda1 + lambda2 );
481 
482  double shapePp = Shat( Pp, vars );
483 
484  double answer = 1.0 / ( Pm - Pp ) * flag2 * 0.5 * y * abar * done2 +
485  1.0 / pow( mBB - Pp, 2 ) * flag3 * shapePp * t7;
486  return answer;
487 }
488 
489 double EvtVubBLNP::DoneJS( double Pp, double Pm, double /*mui*/ )
490 {
491  std::vector<double> vars( 12 );
492  vars[0] = Pp;
493  vars[1] = Pm;
494  for ( int j = 2; j < 12; j++ ) {
495  vars[j] = gvars[j];
496  }
497 
498  double lowerlim = 0.001 * Pp;
499  double upperlim = ( 1.0 - 0.001 ) * Pp;
500 
501  auto func = EvtItgPtrFunction{&IntJS, lowerlim, upperlim, vars};
502  auto integ = EvtItgSimpsonIntegrator{func, precision, maxLoop};
503  return integ.evaluate( lowerlim, upperlim );
504 }
505 
506 double EvtVubBLNP::Done1( double Pp, double Pm, double /*mui*/ )
507 {
508  std::vector<double> vars( 12 );
509  vars[0] = Pp;
510  vars[1] = Pm;
511  for ( int j = 2; j < 12; j++ ) {
512  vars[j] = gvars[j];
513  }
514 
515  double lowerlim = 0.001 * Pp;
516  double upperlim = ( 1.0 - 0.001 ) * Pp;
517 
518  auto func = EvtItgPtrFunction{&Int1, lowerlim, upperlim, vars};
519  auto integ = EvtItgSimpsonIntegrator{func, precision, maxLoop};
520  return integ.evaluate( lowerlim, upperlim );
521 }
522 
523 double EvtVubBLNP::Done2( double Pp, double Pm, double /*mui*/ )
524 {
525  std::vector<double> vars( 12 );
526  vars[0] = Pp;
527  vars[1] = Pm;
528  for ( int j = 2; j < 12; j++ ) {
529  vars[j] = gvars[j];
530  }
531 
532  double lowerlim = 0.001 * Pp;
533  double upperlim = ( 1.0 - 0.001 ) * Pp;
534 
535  auto func = EvtItgPtrFunction{&Int2, lowerlim, upperlim, vars};
536  auto integ = EvtItgSimpsonIntegrator{func, precision, maxLoop};
537  return integ.evaluate( lowerlim, upperlim );
538 }
539 
540 double EvtVubBLNP::Done3( double Pp, double Pm, double /*mui*/ )
541 {
542  std::vector<double> vars( 12 );
543  vars[0] = Pp;
544  vars[1] = Pm;
545  for ( int j = 2; j < 12; j++ ) {
546  vars[j] = gvars[j];
547  }
548 
549  double lowerlim = 0.001 * Pp;
550  double upperlim = ( 1.0 - 0.001 ) * Pp;
551 
552  auto func = EvtItgPtrFunction{&Int3, lowerlim, upperlim, vars};
553  auto integ = EvtItgSimpsonIntegrator{func, precision, maxLoop};
554  return integ.evaluate( lowerlim, upperlim );
555 }
556 
557 double EvtVubBLNP::Int1( double what, const std::vector<double>& vars )
558 {
559  return Shat( what, vars ) * g1( what, vars );
560 }
561 
562 double EvtVubBLNP::Int2( double what, const std::vector<double>& vars )
563 {
564  return Shat( what, vars ) * g2( what, vars );
565 }
566 
567 double EvtVubBLNP::Int3( double what, const std::vector<double>& vars )
568 {
569  return Shat( what, vars ) * g3( what, vars );
570 }
571 
572 double EvtVubBLNP::IntJS( double what, const std::vector<double>& vars )
573 {
574  double Pp = vars[0];
575  double Pm = vars[1];
576  double mui = vars[2];
577  double mBB = vars[5];
578  double mb = vars[6];
579  double y = ( Pm - Pp ) / ( mBB - Pp );
580 
581  return 1 / ( Pp - what ) * ( Shat( what, vars ) - Shat( Pp, vars ) ) *
582  ( 4 * log( y * mb * ( Pp - what ) / ( mui * mui ) ) - 3 );
583 }
584 
585 double EvtVubBLNP::g1( double w, const std::vector<double>& vars )
586 {
587  double Pp = vars[0];
588  double Pm = vars[1];
589  double mBB = vars[5];
590  double y = ( Pm - Pp ) / ( mBB - Pp );
591  double x = ( Pp - w ) / ( mBB - Pp );
592 
593  double q1 = ( 1 + x ) * ( 1 + x ) * y * ( x + y );
594  double q2 = y * ( -9 + 10 * y ) + x * x * ( -12.0 + 13.0 * y ) +
595  2 * x * ( -8.0 + 6 * y + 3 * y * y );
596  double q3 = 4 / x * log( y + y / x );
597  double q4 = 3.0 * pow( x, 4 ) * ( -2.0 + y ) - 2 * pow( y, 3 ) -
598  4 * pow( x, 3 ) * ( 2.0 + y ) - 2 * x * y * y * ( 4 + y ) -
599  x * x * y * ( 12 + 4 * y + y * y );
600  double q5 = log( 1 + y / x );
601 
602  double answer = q2 / q1 - q3 - 2 * q4 * q5 / ( q1 * y * x );
603  return answer;
604 }
605 
606 double EvtVubBLNP::g2( double w, const std::vector<double>& vars )
607 {
608  double Pp = vars[0];
609  double Pm = vars[1];
610  double mBB = vars[5];
611  double y = ( Pm - Pp ) / ( mBB - Pp );
612  double x = ( Pp - w ) / ( mBB - Pp );
613 
614  double q1 = ( 1 + x ) * ( 1 + x ) * pow( y, 3 ) * ( x + y );
615  double q2 = 10.0 * pow( x, 4 ) + y * y +
616  3.0 * pow( x, 2 ) * y * ( 10.0 + y ) +
617  pow( x, 3 ) * ( 12.0 + 19.0 * y ) +
618  x * y * ( 8.0 + 4.0 * y + y * y );
619  double q3 = 5 * pow( x, 4 ) + 2.0 * y * y +
620  6.0 * pow( x, 3 ) * ( 1.0 + 2.0 * y ) +
621  4.0 * x * y * ( 1 + 2.0 * y ) + x * x * y * ( 18.0 + 5.0 * y );
622  double q4 = log( 1 + y / x );
623 
624  double answer = 2.0 / q1 * ( y * q2 - 2 * x * q3 * q4 );
625  return answer;
626 }
627 
628 double EvtVubBLNP::g3( double w, const std::vector<double>& vars )
629 {
630  double Pp = vars[0];
631  double Pm = vars[1];
632  double mBB = vars[5];
633  double y = ( Pm - Pp ) / ( mBB - Pp );
634  double x = ( Pp - w ) / ( mBB - Pp );
635 
636  double q1 = ( 1 + x ) * ( 1 + x ) * pow( y, 3 ) * ( x + y );
637  double q2 = 2.0 * pow( y, 3 ) * ( -11.0 + 2.0 * y ) -
638  10.0 * pow( x, 4 ) * ( 6 - 6 * y + y * y ) +
639  x * y * y * ( -94.0 + 29.0 * y + 2.0 * y * y ) +
640  2.0 * x * x * y * ( -72.0 + 18.0 * y + 13.0 * y * y ) -
641  x * x * x * ( 72.0 + 42.0 * y - 70.0 * y * y + 3.0 * y * y * y );
642  double q3 = -6.0 * x * ( -5.0 + y ) * pow( y, 3 ) + 4 * pow( y, 4 ) +
643  5 * pow( x, 5 ) * ( 6 - 6 * y + y * y ) -
644  4 * x * x * y * y * ( -20.0 + 6 * y + y * y ) +
645  pow( x, 3 ) * y * ( 90.0 - 10.0 * y - 28.0 * y * y + y * y * y ) +
646  pow( x, 4 ) * ( 36.0 + 36.0 * y - 50.0 * y * y + 4 * y * y * y );
647  double q4 = log( 1 + y / x );
648 
649  double answer = q2 / q1 + 2 / q1 / y * q3 * q4;
650  return answer;
651 }
652 
653 double EvtVubBLNP::Shat( double w, const std::vector<double>& vars )
654 {
655  double mui = vars[2];
656  double b = vars[3];
657  double Lambda = vars[4];
658  double wzero = vars[7];
659  int itype = (int)vars[11];
660 
661  double norm = 0.0;
662  double shape = 0.0;
663 
664  if ( itype == 1 ) {
665  double Lambar = ( Lambda / b ) *
666  ( Gamma( 1 + b ) - Gamma( 1 + b, b * wzero / Lambda ) ) /
667  ( Gamma( b ) - Gamma( b, b * wzero / Lambda ) );
668  double muf = wzero - Lambar;
669  double mupisq = 3 * pow( Lambda, 2 ) / pow( b, 2 ) *
670  ( Gamma( 2 + b ) -
671  Gamma( 2 + b, b * wzero / Lambda ) ) /
672  ( Gamma( b ) - Gamma( b, b * wzero / Lambda ) ) -
673  3 * Lambar * Lambar;
674  norm = Mzero( muf, mui, mupisq, vars ) * Gamma( b ) /
675  ( Gamma( b ) - Gamma( b, b * wzero / Lambda ) );
676  shape = pow( b, b ) / Lambda / Gamma( b ) * pow( w / Lambda, b - 1 ) *
677  exp( -b * w / Lambda );
678  }
679 
680  if ( itype == 2 ) {
681  double dcoef = pow( Gamma( 0.5 * ( 1 + b ) ) / Gamma( 0.5 * b ), 2 );
682  double t1 = wzero * wzero * dcoef / ( Lambda * Lambda );
683  double Lambar =
684  Lambda * ( Gamma( 0.5 * ( 1 + b ) ) - Gamma( 0.5 * ( 1 + b ), t1 ) ) /
685  pow( dcoef, 0.5 ) / ( Gamma( 0.5 * b ) - Gamma( 0.5 * b, t1 ) );
686  double muf = wzero - Lambar;
687  double mupisq = 3 * Lambda * Lambda *
688  ( Gamma( 1 + 0.5 * b ) - Gamma( 1 + 0.5 * b, t1 ) ) /
689  dcoef / ( Gamma( 0.5 * b ) - Gamma( 0.5 * b, t1 ) ) -
690  3 * Lambar * Lambar;
691  norm = Mzero( muf, mui, mupisq, vars ) * Gamma( 0.5 * b ) /
692  ( Gamma( 0.5 * b ) -
693  Gamma( 0.5 * b, wzero * wzero * dcoef / ( Lambda * Lambda ) ) );
694  shape = 2 * pow( dcoef, 0.5 * b ) / Lambda / Gamma( 0.5 * b ) *
695  pow( w / Lambda, b - 1 ) *
696  exp( -dcoef * w * w / ( Lambda * Lambda ) );
697  }
698 
699  double answer = norm * shape;
700  return answer;
701 }
702 
703 double EvtVubBLNP::Mzero( double muf, double mu, double mupisq,
704  const std::vector<double>& vars )
705 {
706  double CF = 4.0 / 3.0;
707  double amu = CF * alphas( mu, vars ) / M_PI;
708  double answer = 1 -
709  amu * ( pow( log( muf / mu ), 2 ) + log( muf / mu ) +
710  M_PI * M_PI / 24.0 ) +
711  amu * ( log( muf / mu ) - 0.5 ) * mupisq / ( 3 * muf * muf );
712  return answer;
713 }
714 
715 double EvtVubBLNP::wS( double w )
716 {
717  double answer = ( Lbar - w ) * Shat( w, gvars );
718  return answer;
719 }
720 
721 double EvtVubBLNP::t( double w )
722 {
723  double t1 = -3 * lambda2 / mupisq * ( Lbar - w ) * Shat( w, gvars );
724  double myf = myfunction( w, Lbar, moment2 );
725  double myBIK = myfunctionBIK( w, Lbar, moment2 );
726  double answer = t1;
727 
728  if ( isubl == 1 )
729  answer = t1;
730  if ( isubl == 3 )
731  answer = t1 - myf;
732  if ( isubl == 4 )
733  answer = t1 + myf;
734  if ( isubl == 5 )
735  answer = t1 - myBIK;
736  if ( isubl == 6 )
737  answer = t1 + myBIK;
738 
739  return answer;
740 }
741 
742 double EvtVubBLNP::u( double w )
743 {
744  double u1 = -2 * ( Lbar - w ) * Shat( w, gvars );
745  double myf = myfunction( w, Lbar, moment2 );
746  double myBIK = myfunctionBIK( w, Lbar, moment2 );
747  double answer = u1;
748 
749  if ( isubl == 1 )
750  answer = u1;
751  if ( isubl == 3 )
752  answer = u1 + myf;
753  if ( isubl == 4 )
754  answer = u1 - myf;
755  if ( isubl == 5 )
756  answer = u1 + myBIK;
757  if ( isubl == 6 )
758  answer = u1 - myBIK;
759 
760  return answer;
761 }
762 
763 double EvtVubBLNP::v( double w )
764 {
765  double v1 = 3 * lambda2 / mupisq * ( Lbar - w ) * Shat( w, gvars );
766  double myf = myfunction( w, Lbar, moment2 );
767  double myBIK = myfunctionBIK( w, Lbar, moment2 );
768  double answer = v1;
769 
770  if ( isubl == 1 )
771  answer = v1;
772  if ( isubl == 3 )
773  answer = v1 - myf;
774  if ( isubl == 4 )
775  answer = v1 + myf;
776  if ( isubl == 5 )
777  answer = v1 - myBIK;
778  if ( isubl == 6 )
779  answer = v1 + myBIK;
780 
781  return answer;
782 }
783 
784 double EvtVubBLNP::myfunction( double w, double Lbar, double mom2 )
785 {
786  double bval = 5.0;
787  double x = w / Lbar;
788  double factor = 0.5 * mom2 * pow( bval / Lbar, 3 );
789  double answer = factor * exp( -bval * x ) *
790  ( 1 - 2 * bval * x + 0.5 * bval * bval * x * x );
791  return answer;
792 }
793 
794 double EvtVubBLNP::myfunctionBIK( double w, double Lbar, double /*mom2*/ )
795 {
796  double aval = 10.0;
797  double normBIK = ( 4 - M_PI ) * M_PI * M_PI / 8 / ( 2 - M_PI ) / aval + 1;
798  double z = 3 * M_PI * w / 8 / Lbar;
799  double q = M_PI * M_PI * 2 * pow( M_PI * aval, 0.5 ) * exp( -aval * z * z ) /
800  ( 4 * M_PI - 8 ) * ( 1 - 2 * pow( aval / M_PI, 0.5 ) * z ) +
801  8 / pow( 1 + z * z, 4 ) *
802  ( z * log( z ) + 0.5 * z * ( 1 + z * z ) -
803  M_PI / 4 * ( 1 - z * z ) );
804  double answer = q / normBIK;
805  return answer;
806 }
807 
808 double EvtVubBLNP::dU1nlo( double muh, double mui )
809 {
810  double ai = alphas( mui, gvars );
811  double ah = alphas( muh, gvars );
812 
813  double q1 = ( ah - ai ) / ( 4 * M_PI * beta0 );
814  double q2 = log( mb / muh ) * Gamma1 + gp1;
815  double q3 = 4 * beta1 * ( log( mb / muh ) * Gamma0 + gp0 ) +
816  Gamma2 * ( 1 - ai / ah );
817  double q4 = beta1 * beta1 * Gamma0 * ( -1.0 + ai / ah ) /
818  ( 4 * pow( beta0, 3 ) );
819  double q5 = -beta2 * Gamma0 * ( 1.0 + ai / ah ) +
820  beta1 * Gamma1 * ( 3 - ai / ah );
821  double q6 = beta1 * beta1 * Gamma0 * ( ah - ai ) / beta0 -
822  beta2 * Gamma0 * ah + beta1 * Gamma1 * ai;
823 
824  double answer =
825  q1 * ( q2 - q3 / 4 / beta0 + q4 + q5 / ( 4 * beta0 * beta0 ) ) +
826  1 / ( 8 * M_PI * beta0 * beta0 * beta0 ) * log( ai / ah ) * q6;
827  return answer;
828 }
829 
830 double EvtVubBLNP::U1lo( double muh, double mui )
831 {
832  double epsilon = 0.0;
833  double answer = pow( mb / muh, -2 * aGamma( muh, mui, epsilon ) ) *
834  exp( 2 * Sfun( muh, mui, epsilon ) -
835  2 * agp( muh, mui, epsilon ) );
836  return answer;
837 }
838 
839 double EvtVubBLNP::Sfun( double mu1, double mu2, double epsilon )
840 {
841  double a1 = alphas( mu1, gvars ) / 4 / M_PI;
842  double a2 = alphas( mu2, gvars ) / alphas( mu1, gvars );
843 
844  double answer = S0( a1, a2 ) + S1( a1, a2 ) + epsilon * S2( a1, a2 );
845  return answer;
846 }
847 
848 double EvtVubBLNP::S0( double a1, double r )
849 {
850  double answer = -Gamma0 / ( 4.0 * beta0 * beta0 * a1 ) *
851  ( -1.0 + 1.0 / r + log( r ) );
852  return answer;
853 }
854 
855 double EvtVubBLNP::S1( double /*a1*/, double r )
856 {
857  double answer = Gamma0 / ( 4 * beta0 * beta0 ) *
858  ( 0.5 * log( r ) * log( r ) * beta1 / beta0 +
859  ( Gamma1 / Gamma0 - beta1 / beta0 ) * ( 1 - r + log( r ) ) );
860  return answer;
861 }
862 
863 double EvtVubBLNP::S2( double a1, double r )
864 {
865  double w1 = pow( beta1, 2 ) / pow( beta0, 2 ) - beta2 / beta0 -
866  beta1 * Gamma1 / ( beta0 * Gamma0 ) + Gamma2 / Gamma0;
867  double w2 = pow( beta1, 2 ) / pow( beta0, 2 ) - beta2 / beta0;
868  double w3 = beta1 * Gamma1 / ( beta0 * Gamma0 ) - beta2 / beta0;
869  double w4 = a1 * Gamma0 / ( 4 * beta0 * beta0 );
870 
871  double answer = w4 *
872  ( -0.5 * pow( 1 - r, 2 ) * w1 + w2 * ( 1 - r ) * log( r ) +
873  w3 * ( 1 - r + r * log( r ) ) );
874  return answer;
875 }
876 
877 double EvtVubBLNP::aGamma( double mu1, double mu2, double epsilon )
878 {
879  double a1 = alphas( mu1, gvars );
880  double a2 = alphas( mu2, gvars );
881  double answer = Gamma0 / ( 2 * beta0 ) * log( a2 / a1 ) +
882  epsilon * ( a2 - a1 ) / ( 8.0 * M_PI ) *
883  ( Gamma1 / beta0 - beta1 * Gamma0 / ( beta0 * beta0 ) );
884  return answer;
885 }
886 
887 double EvtVubBLNP::agp( double mu1, double mu2, double epsilon )
888 {
889  double a1 = alphas( mu1, gvars );
890  double a2 = alphas( mu2, gvars );
891  double answer = gp0 / ( 2 * beta0 ) * log( a2 / a1 ) +
892  epsilon * ( a2 - a1 ) / ( 8.0 * M_PI ) *
893  ( gp1 / beta0 - beta1 * gp0 / ( beta0 * beta0 ) );
894  return answer;
895 }
896 
897 double EvtVubBLNP::alo( double muh, double mui )
898 {
899  return -2.0 * aGamma( muh, mui, 0 );
900 }
901 
902 double EvtVubBLNP::anlo( double muh, double mui )
903 { // d/depsilon of aGamma
904 
905  double ah = alphas( muh, gvars );
906  double ai = alphas( mui, gvars );
907  double answer = ( ah - ai ) / ( 8.0 * M_PI ) *
908  ( Gamma1 / beta0 - beta1 * Gamma0 / ( beta0 * beta0 ) );
909  return answer;
910 }
911 
912 double EvtVubBLNP::alphas( double mu, const std::vector<double>& vars )
913 {
914  // Note: Lambda4 and Lambda5 depend on mbMS = 4.25
915  // So if you change mbMS, then you will have to recalculate them.
916 
917  double beta0 = vars[8];
918  double beta1 = vars[9];
919  double beta2 = vars[10];
920 
921  double Lambda4 = 0.298791;
922  double lg = 2 * log( mu / Lambda4 );
923  double answer = 4 * M_PI / ( beta0 * lg ) *
924  ( 1 - beta1 * log( lg ) / ( beta0 * beta0 * lg ) +
925  beta1 * beta1 / ( beta0 * beta0 * beta0 * beta0 * lg * lg ) *
926  ( ( log( lg ) - 0.5 ) * ( log( lg ) - 0.5 ) -
927  5.0 / 4.0 + beta2 * beta0 / ( beta1 * beta1 ) ) );
928  return answer;
929 }
930 
931 double EvtVubBLNP::PolyLog( double v, double z )
932 {
933  if ( z >= 1 )
934  cout << "Error in EvtVubBLNP: 2nd argument to PolyLog is >= 1." << endl;
935 
936  double sum = 0.0;
937  for ( int k = 1; k < 101; k++ ) {
938  sum = sum + pow( z, k ) / pow( k, v );
939  }
940  return sum;
941 }
942 
943 double EvtVubBLNP::Gamma( double z )
944 {
945  if ( z <= 0 )
946  return 0;
947 
948  double v = lgamma( z );
949  return exp( v );
950 }
951 
952 double EvtVubBLNP::Gamma( double a, double x )
953 {
954  double LogGamma;
955  /* if (x<0.0 || a<= 0.0) raise(SIGFPE);*/
956  if ( x < 0.0 )
957  x = 0.0;
958  if ( a <= 0.0 )
959  a = 1.e-50;
960  LogGamma = lgamma( a );
961  if ( x < ( a + 1.0 ) )
962  return gamser( a, x, LogGamma );
963  else
964  return 1.0 - gammcf( a, x, LogGamma );
965 }
966 
967 /* ------------------Incomplete gamma function-----------------*/
968 /* ------------------via its series representation-------------*/
969 
970 double EvtVubBLNP::gamser( double a, double x, double LogGamma )
971 {
972  double n;
973  double ap, del, sum;
974 
975  ap = a;
976  del = sum = 1.0 / a;
977  for ( n = 1; n < ITMAX; n++ ) {
978  ++ap;
979  del *= x / ap;
980  sum += del;
981  if ( fabs( del ) < fabs( sum ) * EPS )
982  return sum * exp( -x + a * log( x ) - LogGamma );
983  }
984  raise( SIGFPE );
985 
986  return 0.0;
987 }
988 
989 /* ------------------Incomplete gamma function complement------*/
990 /* ------------------via its continued fraction representation-*/
991 
992 double EvtVubBLNP::gammcf( double a, double x, double LogGamma )
993 {
994  double an, b, c, d, del, h;
995  int i;
996 
997  b = x + 1.0 - a;
998  c = 1.0 / FPMIN;
999  d = 1.0 / b;
1000  h = d;
1001  for ( i = 1; i < ITMAX; i++ ) {
1002  an = -i * ( i - a );
1003  b += 2.0;
1004  d = an * d + b;
1005  if ( fabs( d ) < FPMIN )
1006  d = FPMIN;
1007  c = b + an / c;
1008  if ( fabs( c ) < FPMIN )
1009  c = FPMIN;
1010  d = 1.0 / d;
1011  del = d * c;
1012  h *= del;
1013  if ( fabs( del - 1.0 ) < EPS )
1014  return exp( -x + a * log( x ) - LogGamma ) * h;
1015  }
1016  raise( SIGFPE );
1017 
1018  return 0.0;
1019 }
1020 
1022 {
1023  double ranNum = EvtRandom::Flat();
1024  double oOverBins = 1.0 / ( float( _pf.size() ) );
1025  int nBinsBelow = 0; // largest k such that I[k] is known to be <= rand
1026  int nBinsAbove = _pf.size(); // largest k such that I[k] is known to be > rand
1027  int middle;
1028 
1029  while ( nBinsAbove > nBinsBelow + 1 ) {
1030  middle = ( nBinsAbove + nBinsBelow + 1 ) >> 1;
1031  if ( ranNum >= _pf[middle] ) {
1032  nBinsBelow = middle;
1033  } else {
1034  nBinsAbove = middle;
1035  }
1036  }
1037 
1038  double bSize = _pf[nBinsAbove] - _pf[nBinsBelow];
1039  // binMeasure is always aProbFunc[nBinsBelow],
1040 
1041  if ( bSize == 0 ) {
1042  // rand lies right in a bin of measure 0. Simply return the center
1043  // of the range of that bin. (Any value between k/N and (k+1)/N is
1044  // equally good, in this rare case.)
1045  return ( nBinsBelow + .5 ) * oOverBins;
1046  }
1047 
1048  double bFract = ( ranNum - _pf[nBinsBelow] ) / bSize;
1049 
1050  return ( nBinsBelow + bFract ) * oOverBins;
1051 }
double mui
Definition: EvtVubBLNP.hh:71
static double gamser(double a, double x, double LogGamma)
Definition: EvtVubBLNP.cpp:970
double mupisq
Definition: EvtVubBLNP.hh:92
double DoneJS(double Pp, double Pm, double mui)
Definition: EvtVubBLNP.cpp:489
static double Int3(double what, const std::vector< double > &vars)
Definition: EvtVubBLNP.cpp:567
double lambda2
Definition: EvtVubBLNP.hh:48
double aGamma(double mu1, double mu2, double epsilon)
Definition: EvtVubBLNP.cpp:877
int flag2loop
Definition: EvtVubBLNP.hh:96
double gp0
Definition: EvtVubBLNP.hh:88
double gp1
Definition: EvtVubBLNP.hh:89
static double Int1(double what, const std::vector< double > &vars)
Definition: EvtVubBLNP.cpp:557
double getSFBLNP(const double &what)
Definition: EvtPFermi.cpp:68
double moment2
Definition: EvtVubBLNP.hh:93
double findBLNPWhat()
double Lbar
Definition: EvtVubBLNP.hh:91
double getArg(unsigned int j)
std::string getName() override
Definition: EvtVubBLNP.cpp:48
double myfunction(double w, double Lbar, double mom2)
Definition: EvtVubBLNP.cpp:784
double S2(double a1, double r)
Definition: EvtVubBLNP.cpp:863
static double Mzero(double muf, double mu, double mupisq, const std::vector< double > &vars)
Definition: EvtVubBLNP.cpp:703
static double Shat(double w, const std::vector< double > &vars)
Definition: EvtVubBLNP.cpp:653
double Ecut
Definition: EvtVubBLNP.hh:53
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
double v(double w)
Definition: EvtVubBLNP.cpp:763
double F3(double Pp, double Pm, double muh, double mui, double mubar, double done2)
Definition: EvtVubBLNP.cpp:466
double Done2(double Pp, double Pm, double mui)
Definition: EvtVubBLNP.cpp:523
double beta0
Definition: EvtVubBLNP.hh:78
static double g2(double w, const std::vector< double > &vars)
Definition: EvtVubBLNP.cpp:606
double Gamma2
Definition: EvtVubBLNP.hh:86
std::vector< double > gvars
Definition: EvtVubBLNP.hh:101
static double alphas(double mu, const std::vector< double > &vars)
Definition: EvtVubBLNP.cpp:912
double S1(double a1, double r)
Definition: EvtVubBLNP.cpp:855
double mb
Definition: EvtVubBLNP.hh:67
const double a2
double beta2
Definition: EvtVubBLNP.hh:80
static double g3(double w, const std::vector< double > &vars)
Definition: EvtVubBLNP.cpp:628
double muh
Definition: EvtVubBLNP.hh:70
void init() override
Definition: EvtVubBLNP.cpp:58
const double a1
double CA
Definition: EvtVubBLNP.hh:76
void set(int i, double d)
Definition: EvtVector4R.hh:167
double alo(double muh, double mui)
Definition: EvtVubBLNP.cpp:897
double dtype
Definition: EvtVubBLNP.hh:58
double Done3(double Pp, double Pm, double mui)
Definition: EvtVubBLNP.cpp:540
EvtId * getDaugs()
Definition: EvtDecayBase.hh:66
double beta1
Definition: EvtVubBLNP.hh:79
double S0(double a1, double r)
Definition: EvtVubBLNP.cpp:848
#define ITMAX
Definition: EvtVubBLNP.cpp:41
double F2(double Pp, double Pm, double muh, double mui, double mubar, double done3)
Definition: EvtVubBLNP.cpp:438
double mBB
Definition: EvtVubBLNP.hh:47
static double g1(double w, const std::vector< double > &vars)
Definition: EvtVubBLNP.cpp:585
double wzero
Definition: EvtVubBLNP.hh:54
double U1lo(double muh, double mui)
Definition: EvtVubBLNP.cpp:830
static double IntJS(double what, const std::vector< double > &vars)
Definition: EvtVubBLNP.cpp:572
double initializePhaseSpace(unsigned int numdaughter, EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
double Gamma0
Definition: EvtVubBLNP.hh:84
double Done1(double Pp, double Pm, double mui)
Definition: EvtVubBLNP.cpp:506
void checkNDaug(int d1, int d2=-1)
static double Flat()
Definition: EvtRandom.cpp:72
void decay(EvtParticle *Bmeson) override
Definition: EvtVubBLNP.cpp:189
#define EPS
Definition: EvtVubBLNP.cpp:42
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
void initProbMax() override
Definition: EvtVubBLNP.cpp:184
static double Gamma(double z)
Definition: EvtVubBLNP.cpp:943
double t(double w)
Definition: EvtVubBLNP.cpp:721
double b
Definition: EvtVubBLNP.hh:51
double wS(double w)
Definition: EvtVubBLNP.cpp:715
double u(double w)
Definition: EvtVubBLNP.cpp:742
double mass() const
double myfunctionBIK(double w, double Lbar, double mom2)
Definition: EvtVubBLNP.cpp:794
double dU1nlo(double muh, double mui)
Definition: EvtVubBLNP.cpp:808
int getNDaug() const
Definition: EvtDecayBase.hh:65
EvtComplex exp(const EvtComplex &c)
Definition: EvtComplex.hh:240
double PolyLog(double v, double z)
Definition: EvtVubBLNP.cpp:931
double Lambda
Definition: EvtVubBLNP.hh:52
double precision
Definition: EvtVubBLNP.hh:99
double F1(double Pp, double Pm, double muh, double mui, double mubar, double doneJS, double done1)
Definition: EvtVubBLNP.cpp:398
std::vector< double > _pf
Definition: EvtVubBLNP.hh:147
EvtParticle * getDaug(int i)
Definition: EvtParticle.cpp:91
double zeta3
Definition: EvtVubBLNP.hh:82
double Sfun(double mu1, double mu2, double epsilon)
Definition: EvtVubBLNP.cpp:839
#define FPMIN
Definition: EvtVubBLNP.cpp:43
double CF
Definition: EvtVubBLNP.hh:75
double agp(double mu1, double mu2, double epsilon)
Definition: EvtVubBLNP.cpp:887
EvtDecayBase * clone() override
Definition: EvtVubBLNP.cpp:53
double rate3(double Pp, double Pl, double Pm)
Definition: EvtVubBLNP.cpp:365
double anlo(double muh, double mui)
Definition: EvtVubBLNP.cpp:902
static double Int2(double what, const std::vector< double > &vars)
Definition: EvtVubBLNP.cpp:562
static double gammcf(double a, double x, double LogGamma)
Definition: EvtVubBLNP.cpp:992
double mubar
Definition: EvtVubBLNP.hh:72
int flagpower
Definition: EvtVubBLNP.hh:95
double Gamma1
Definition: EvtVubBLNP.hh:85
EvtId getDaug(int i) const
Definition: EvtDecayBase.hh:67