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