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.
EvtbTosllAmp.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/EvtAmp.hh"
24 #include "EvtGenBase/EvtDiLog.hh"
26 #include "EvtGenBase/EvtGenKine.hh"
27 #include "EvtGenBase/EvtId.hh"
28 #include "EvtGenBase/EvtPDL.hh"
30 #include "EvtGenBase/EvtPatches.hh"
31 #include "EvtGenBase/EvtReport.hh"
36 
37 double EvtbTosllAmp::CalcMaxProb( EvtId parent, EvtId meson, EvtId lepton1,
38  EvtId lepton2, EvtbTosllFF* FormFactors,
39  double& poleSize )
40 {
41  //This routine takes the arguements parent, meson, and lepton
42  //number, and a form factor model, and returns a maximum
43  //probability for this semileptonic form factor model. A
44  //brute force method is used. The 2D cos theta lepton and
45  //q2 phase space is probed.
46 
47  //Start by declaring a particle at rest.
48 
49  //It only makes sense to have a scalar parent. For now.
50  //This should be generalized later.
51 
52  EvtScalarParticle* scalar_part;
53  EvtParticle* root_part;
54 
55  scalar_part = new EvtScalarParticle;
56 
57  //cludge to avoid generating random numbers!
58  scalar_part->noLifeTime();
59 
60  EvtVector4R p_init;
61 
62  p_init.set( EvtPDL::getMass( parent ), 0.0, 0.0, 0.0 );
63  scalar_part->init( parent, p_init );
64  root_part = (EvtParticle*)scalar_part;
65  root_part->setDiagonalSpinDensity();
66 
67  EvtParticle *daughter, *lep1, *lep2;
68 
69  EvtAmp amp;
70 
71  EvtId listdaug[3];
72  listdaug[0] = meson;
73  listdaug[1] = lepton1;
74  listdaug[2] = lepton2;
75 
76  amp.init( parent, 3, listdaug );
77 
78  root_part->makeDaughters( 3, listdaug );
79  daughter = root_part->getDaug( 0 );
80  lep1 = root_part->getDaug( 1 );
81  lep2 = root_part->getDaug( 2 );
82 
83  //cludge to avoid generating random numbers!
84  daughter->noLifeTime();
85  lep1->noLifeTime();
86  lep2->noLifeTime();
87 
88  //Initial particle is unpolarized, well it is a scalar so it is
89  //trivial
90  EvtSpinDensity rho;
91  rho.setDiag( root_part->getSpinStates() );
92 
93  double mass[3];
94 
95  double m = root_part->mass();
96 
97  EvtVector4R p4meson, p4lepton1, p4lepton2, p4w;
98  double q2max;
99 
100  double q2, elepton, plepton;
101  int i, j;
102  double erho, prho, costl;
103 
104  double maxfoundprob = 0.0;
105  double prob = -10.0;
106  int massiter;
107 
108  double maxpole = 0;
109 
110  for ( massiter = 0; massiter < 3; massiter++ ) {
111  mass[0] = EvtPDL::getMeanMass( meson );
112  mass[1] = EvtPDL::getMeanMass( lepton1 );
113  mass[2] = EvtPDL::getMeanMass( lepton2 );
114  if ( massiter == 1 ) {
115  mass[0] = EvtPDL::getMinMass( meson );
116  }
117  if ( massiter == 2 ) {
118  mass[0] = EvtPDL::getMaxMass( meson );
119  if ( ( mass[0] + mass[1] + mass[2] ) > m )
120  mass[0] = m - mass[1] - mass[2] - 0.00001;
121  }
122 
123  q2max = ( m - mass[0] ) * ( m - mass[0] );
124 
125  //loop over q2
126  //cout << "m " << m << "mass[0] " << mass[0] << " q2max "<< q2max << endl;
127  for ( i = 0; i < 25; i++ ) {
128  //want to avoid picking up the tail of the photon propagator
129  q2 = ( ( i + 1.5 ) * q2max ) / 26.0;
130 
131  if ( i == 0 )
132  q2 = 4 * ( mass[1] * mass[1] );
133 
134  erho = ( m * m + mass[0] * mass[0] - q2 ) / ( 2.0 * m );
135 
136  prho = sqrt( erho * erho - mass[0] * mass[0] );
137 
138  p4meson.set( erho, 0.0, 0.0, -1.0 * prho );
139  p4w.set( m - erho, 0.0, 0.0, prho );
140 
141  //This is in the W rest frame
142  elepton = ( q2 + mass[1] * mass[1] ) / ( 2.0 * sqrt( q2 ) );
143  plepton = sqrt( elepton * elepton - mass[1] * mass[1] );
144 
145  double probctl[3];
146 
147  for ( j = 0; j < 3; j++ ) {
148  costl = 0.99 * ( j - 1.0 );
149 
150  //These are in the W rest frame. Need to boost out into
151  //the B frame.
152  p4lepton1.set( elepton, 0.0,
153  plepton * sqrt( 1.0 - costl * costl ),
154  plepton * costl );
155  p4lepton2.set( elepton, 0.0,
156  -1.0 * plepton * sqrt( 1.0 - costl * costl ),
157  -1.0 * plepton * costl );
158 
159  EvtVector4R boost( ( m - erho ), 0.0, 0.0, 1.0 * prho );
160  p4lepton1 = boostTo( p4lepton1, boost );
161  p4lepton2 = boostTo( p4lepton2, boost );
162 
163  //Now initialize the daughters...
164 
165  daughter->init( meson, p4meson );
166  lep1->init( lepton1, p4lepton1 );
167  lep2->init( lepton2, p4lepton2 );
168 
169  CalcAmp( root_part, amp, FormFactors );
170 
171  //Now find the probability at this q2 and cos theta lepton point
172  //and compare to maxfoundprob.
173 
174  //Do a little magic to get the probability!!
175 
176  //cout <<"amp:"<<amp.getSpinDensity()<<endl;
177 
178  prob = rho.normalizedProb( amp.getSpinDensity() );
179 
180  //cout << "prob:"<<q2<<" "<<costl<<" "<<prob<<endl;
181 
182  probctl[j] = prob;
183  }
184 
185  //probclt contains prob at ctl=-1,0,1.
186  //prob=a+b*ctl+c*ctl^2
187 
188  double a = probctl[1];
189  double b = 0.5 * ( probctl[2] - probctl[0] );
190  double c = 0.5 * ( probctl[2] + probctl[0] ) - probctl[1];
191 
192  prob = probctl[0];
193  if ( probctl[1] > prob )
194  prob = probctl[1];
195  if ( probctl[2] > prob )
196  prob = probctl[2];
197 
198  if ( fabs( c ) > 1e-20 ) {
199  double ctlx = -0.5 * b / c;
200  if ( fabs( ctlx ) < 1.0 ) {
201  double probtmp = a + b * ctlx + c * ctlx * ctlx;
202  if ( probtmp > prob )
203  prob = probtmp;
204  }
205  }
206 
207  //EvtGenReport(EVTGEN_DEBUG,"EvtGen") << "prob,probctl:"<<prob<<" "
208  // << probctl[0]<<" "
209  // << probctl[1]<<" "
210  // << probctl[2]<<endl;
211 
212  if ( i == 0 ) {
213  maxpole = prob;
214  continue;
215  }
216 
217  if ( prob > maxfoundprob ) {
218  maxfoundprob = prob;
219  }
220 
221  //cout << "q2,maxfoundprob:"<<q2<<" "<<maxfoundprob<<endl;
222  }
223  if ( EvtPDL::getWidth( meson ) <= 0.0 ) {
224  //if the particle is narrow dont bother with changing the mass.
225  massiter = 4;
226  }
227  }
228 
229  root_part->deleteTree();
230 
231  poleSize = 0.04 * ( maxpole / maxfoundprob ) * 4 * ( mass[1] * mass[1] );
232 
233  //poleSize=0.002;
234 
235  //cout <<"maxfoundprob,maxpole,poleSize:"<<maxfoundprob<<" "
236  // <<maxpole<<" "<<poleSize<<endl;
237 
238  maxfoundprob *= 1.15;
239 
240  return maxfoundprob;
241 }
242 
243 EvtComplex EvtbTosllAmp::GetC7Eff( double q2, bool nnlo )
244 {
245  if ( !nnlo )
246  return -0.313;
247  double mbeff = 4.8;
248  double shat = q2 / mbeff / mbeff;
249  double logshat;
250  logshat = log( shat );
251 
252  double muscale;
253  muscale = 2.5;
254  double alphas;
255  alphas = 0.267;
256  double A7;
257  A7 = -0.353 + 0.023;
258  double A8;
259  A8 = -0.164;
260  double C1;
261  C1 = -0.697;
262  double C2;
263  C2 = 1.046;
264 
265  double Lmu;
266  Lmu = log( muscale / mbeff );
267 
268  EvtComplex uniti( 0.0, 1.0 );
269 
270  EvtComplex c7eff;
271  if ( shat > 0.25 ) {
272  c7eff = A7;
273  return c7eff;
274  }
275 
276  // change energy scale to 5.0 for full NNLO calculation below shat = 0.25
277  muscale = 5.0;
278  alphas = 0.215;
279  A7 = -0.312 + 0.008;
280  A8 = -0.148;
281  C1 = -0.487;
282  C2 = 1.024;
283  Lmu = log( muscale / mbeff );
284 
285  EvtComplex F71;
286  EvtComplex f71;
287  EvtComplex k7100( -0.68192, -0.074998 );
288  EvtComplex k7101( 0.0, 0.0 );
289  EvtComplex k7110( -0.23935, -0.12289 );
290  EvtComplex k7111( 0.0027424, 0.019676 );
291  EvtComplex k7120( -0.0018555, -0.175 );
292  EvtComplex k7121( 0.022864, 0.011456 );
293  EvtComplex k7130( 0.28248, -0.12783 );
294  EvtComplex k7131( 0.029027, -0.0082265 );
295  f71 = k7100 + k7101 * logshat + shat * ( k7110 + k7111 * logshat ) +
296  shat * shat * ( k7120 + k7121 * logshat ) +
297  shat * shat * shat * ( k7130 + k7131 * logshat );
298  F71 = ( -208.0 / 243.0 ) * Lmu + f71;
299 
300  EvtComplex F72;
301  EvtComplex f72;
302  EvtComplex k7200( 4.0915, 0.44999 );
303  EvtComplex k7201( 0.0, 0.0 );
304  EvtComplex k7210( 1.4361, 0.73732 );
305  EvtComplex k7211( -0.016454, -0.11806 );
306  EvtComplex k7220( 0.011133, 1.05 );
307  EvtComplex k7221( -0.13718, -0.068733 );
308  EvtComplex k7230( -1.6949, 0.76698 );
309  EvtComplex k7231( -0.17416, 0.049359 );
310  f72 = k7200 + k7201 * logshat + shat * ( k7210 + k7211 * logshat ) +
311  shat * shat * ( k7220 + k7221 * logshat ) +
312  shat * shat * shat * ( k7230 + k7231 * logshat );
313  F72 = ( 416.0 / 81.0 ) * Lmu + f72;
314 
315  EvtComplex F78;
316  F78 = ( -32.0 / 9.0 ) * Lmu + 8.0 * EvtConst::pi * EvtConst::pi / 27.0 +
317  ( -44.0 / 9.0 ) + ( -8.0 * EvtConst::pi / 9.0 ) * uniti +
318  ( 4.0 / 3.0 * EvtConst::pi * EvtConst::pi - 40.0 / 3.0 ) * shat +
319  ( 32.0 * EvtConst::pi * EvtConst::pi / 9.0 - 316.0 / 9.0 ) * shat *
320  shat +
321  ( 200.0 * EvtConst::pi * EvtConst::pi / 27.0 - 658.0 / 9.0 ) * shat *
322  shat * shat +
323  ( -8.0 * logshat / 9.0 ) * ( shat + shat * shat + shat * shat * shat );
324 
325  c7eff = A7 - alphas / ( 4.0 * EvtConst::pi ) *
326  ( C1 * F71 + C2 * F72 + A8 * F78 );
327 
328  return c7eff;
329 }
330 
331 EvtComplex EvtbTosllAmp::GetC9Eff( double q2, bool nnlo, bool btod )
332 {
333  if ( !nnlo )
334  return 4.344;
335  double mbeff = 4.8;
336  double shat = q2 / mbeff / mbeff;
337  double logshat;
338  logshat = log( shat );
339  double mchat = 0.29;
340 
341  double muscale;
342  muscale = 2.5;
343  double alphas;
344  alphas = 0.267;
345  double A8;
346  A8 = -0.164;
347  double A9;
348  A9 = 4.287 + ( -0.218 );
349  double C1;
350  C1 = -0.697;
351  double C2;
352  C2 = 1.046;
353  double T9;
354  T9 = 0.114 + 0.280;
355  double U9;
356  U9 = 0.045 + 0.023;
357  double W9;
358  W9 = 0.044 + 0.016;
359 
360  double Lmu;
361  Lmu = log( muscale / mbeff );
362 
363  EvtComplex uniti( 0.0, 1.0 );
364 
365  EvtComplex hc;
366  double xarg;
367  xarg = 4.0 * mchat / shat;
368  hc = -4.0 / 9.0 * log( mchat * mchat ) + 8.0 / 27.0 + 4.0 * xarg / 9.0;
369 
370  if ( xarg < 1.0 ) {
371  hc = hc - 2.0 / 9.0 * ( 2.0 + xarg ) * sqrt( fabs( 1.0 - xarg ) ) *
372  ( log( fabs( ( sqrt( 1.0 - xarg ) + 1.0 ) /
373  ( sqrt( 1.0 - xarg ) - 1.0 ) ) ) -
374  uniti * EvtConst::pi );
375  } else {
376  hc = hc - 2.0 / 9.0 * ( 2.0 + xarg ) * sqrt( fabs( 1.0 - xarg ) ) *
377  2.0 * atan( 1.0 / sqrt( xarg - 1.0 ) );
378  }
379 
380  EvtComplex h1;
381  xarg = 4.0 / shat;
382  h1 = 8.0 / 27.0 + 4.0 * xarg / 9.0;
383  if ( xarg < 1.0 ) {
384  h1 = h1 - 2.0 / 9.0 * ( 2.0 + xarg ) * sqrt( fabs( 1.0 - xarg ) ) *
385  ( log( fabs( ( sqrt( 1.0 - xarg ) + 1.0 ) /
386  ( sqrt( 1.0 - xarg ) - 1.0 ) ) ) -
387  uniti * EvtConst::pi );
388  } else {
389  h1 = h1 - 2.0 / 9.0 * ( 2.0 + xarg ) * sqrt( fabs( 1.0 - xarg ) ) *
390  2.0 * atan( 1.0 / sqrt( xarg - 1.0 ) );
391  }
392 
393  EvtComplex h0;
394  h0 = 8.0 / 27.0 - 4.0 * log( 2.0 ) / 9.0 + 4.0 * uniti * EvtConst::pi / 9.0;
395 
396  // X=V_{ud}^* V_ub / V_{td}^* V_tb * (4/3 C_1 +C_2) * (h(\hat m_c^2, hat s)-
397  // h(\hat m_u^2, hat s))
398  EvtComplex Vudstar( 1.0 - 0.2279 * 0.2279 / 2.0, 0.0 );
399  EvtComplex Vub( ( 0.118 + 0.273 ) / 2.0, -1.0 * ( 0.305 + 0.393 ) / 2.0 );
400  EvtComplex Vtdstar( 1.0 - ( 0.118 + 0.273 ) / 2.0, ( 0.305 + 0.393 ) / 2.0 );
401  EvtComplex Vtb( 1.0, 0.0 );
402 
403  EvtComplex Xd;
404  Xd = ( Vudstar * Vub / Vtdstar * Vtb ) * ( 4.0 / 3.0 * C1 + C2 ) *
405  ( hc - h0 );
406 
407  EvtComplex c9eff = 4.344;
408  if ( shat > 0.25 ) {
409  c9eff = A9 + T9 * hc + U9 * h1 + W9 * h0;
410  if ( btod ) {
411  c9eff += Xd;
412  }
413 
414  return c9eff;
415  }
416 
417  // change energy scale to 5.0 for full NNLO calculation below shat = 0.25
418  muscale = 5.0;
419  alphas = 0.215;
420  A9 = 4.174 + ( -0.035 );
421  C1 = -0.487;
422  C2 = 1.024;
423  A8 = -0.148;
424  T9 = 0.374 + 0.252;
425  U9 = 0.033 + 0.015;
426  W9 = 0.032 + 0.012;
427  Lmu = log( muscale / mbeff );
428 
429  EvtComplex F91;
430  EvtComplex f91;
431  EvtComplex k9100( -11.973, 0.16371 );
432  EvtComplex k9101( -0.081271, -0.059691 );
433  EvtComplex k9110( -28.432, -0.25044 );
434  EvtComplex k9111( -0.040243, 0.016442 );
435  EvtComplex k9120( -57.114, -0.86486 );
436  EvtComplex k9121( -0.035191, 0.027909 );
437  EvtComplex k9130( -128.8, -2.5243 );
438  EvtComplex k9131( -0.017587, 0.050639 );
439  f91 = k9100 + k9101 * logshat + shat * ( k9110 + k9111 * logshat ) +
440  shat * shat * ( k9120 + k9121 * logshat ) +
441  shat * shat * shat * ( k9130 + k9131 * logshat );
442  F91 = ( -1424.0 / 729.0 + 16.0 * uniti * EvtConst::pi / 243.0 +
443  64.0 / 27.0 * log( mchat ) ) *
444  Lmu -
445  16.0 * Lmu * logshat / 243.0 +
446  ( 16.0 / 1215.0 - 32.0 / 135.0 / mchat / mchat ) * Lmu * shat +
447  ( 4.0 / 2835.0 - 8.0 / 315.0 / mchat / mchat / mchat / mchat ) * Lmu *
448  shat * shat +
449  ( 16.0 / 76545.0 -
450  32.0 / 8505.0 / mchat / mchat / mchat / mchat / mchat / mchat ) *
451  Lmu * shat * shat * shat -
452  256.0 * Lmu * Lmu / 243.0 + f91;
453 
454  EvtComplex F92;
455  EvtComplex f92;
456  EvtComplex k9200( 6.6338, -0.98225 );
457  EvtComplex k9201( 0.48763, 0.35815 );
458  EvtComplex k9210( 3.3585, 1.5026 );
459  EvtComplex k9211( 0.24146, -0.098649 );
460  EvtComplex k9220( -1.1906, 5.1892 );
461  EvtComplex k9221( 0.21115, -0.16745 );
462  EvtComplex k9230( -17.12, 15.146 );
463  EvtComplex k9231( 0.10552, -0.30383 );
464  f92 = k9200 + k9201 * logshat + shat * ( k9210 + k9211 * logshat ) +
465  shat * shat * ( k9220 + k9221 * logshat ) +
466  shat * shat * shat * ( k9230 + k9231 * logshat );
467  F92 = ( 256.0 / 243.0 - 32.0 * uniti * EvtConst::pi / 81.0 -
468  128.0 / 9.0 * log( mchat ) ) *
469  Lmu +
470  32.0 * Lmu * logshat / 81.0 +
471  ( -32.0 / 405.0 + 64.0 / 45.0 / mchat / mchat ) * Lmu * shat +
472  ( -8.0 / 945.0 + 16.0 / 105.0 / mchat / mchat / mchat / mchat ) *
473  Lmu * shat * shat +
474  ( -32.0 / 25515.0 +
475  64.0 / 2835.0 / mchat / mchat / mchat / mchat / mchat / mchat ) *
476  Lmu * shat * shat * shat +
477  512.0 * Lmu * Lmu / 81.0 + f92;
478 
479  EvtComplex F98;
480  F98 = 104.0 / 9.0 - 32.0 * EvtConst::pi * EvtConst::pi / 27.0 +
481  ( 1184.0 / 27.0 - 40.0 * EvtConst::pi * EvtConst::pi / 9.0 ) * shat +
482  ( 14212.0 / 135.0 - 32.0 * EvtConst::pi * EvtConst::pi / 3.0 ) *
483  shat * shat +
484  ( 193444.0 / 945.0 - 560.0 * EvtConst::pi * EvtConst::pi / 27.0 ) *
485  shat * shat * shat +
486  16.0 * logshat / 9.0 *
487  ( 1.0 + shat + shat * shat + shat * shat * shat );
488 
489  Xd = ( Vudstar * Vub / Vtdstar * Vtb ) * ( 4.0 / 3.0 * C1 + C2 ) *
490  ( hc - h0 );
491 
492  c9eff = A9 + T9 * hc + U9 * h1 + W9 * h0 -
493  alphas / ( 4.0 * EvtConst::pi ) * ( C1 * F91 + C2 * F92 + A8 * F98 );
494  if ( btod ) {
495  c9eff += Xd;
496  }
497 
498  return c9eff;
499 }
500 
501 EvtComplex EvtbTosllAmp::GetC10Eff( double /*q2*/, bool nnlo )
502 {
503  if ( !nnlo )
504  return -4.669;
505  double A10;
506  A10 = -4.592 + 0.379;
507 
508  EvtComplex c10eff;
509  c10eff = A10;
510 
511  return c10eff;
512 }
513 
514 double EvtbTosllAmp::dGdsProb( double mb, double ms, double ml, double s )
515 {
516  // Compute the decay probability density function given a value of s
517  // according to Ali's paper
518 
519  double delta, lambda, prob;
520  double f1, f2, f3, f4;
521  double msh, mlh, sh;
522 
523  mlh = ml / mb;
524  msh = ms / mb;
525  sh = s / ( mb * mb );
526 
527  EvtComplex c9eff = EvtbTosllAmp::GetC9Eff( sh * mb );
528  EvtComplex c7eff = EvtbTosllAmp::GetC7Eff( sh * mb );
529  EvtComplex c10eff = EvtbTosllAmp::GetC10Eff( sh * mb );
530 
531  double alphas = 0.119 /
532  ( 1 + 0.119 * log( pow( 4.8, 2 ) / pow( 91.1867, 2 ) ) *
533  23.0 / 12.0 / EvtConst::pi );
534  double omega9 = -2.0 / 9.0 * EvtConst::pi * EvtConst::pi -
535  4.0 / 3.0 * EvtDiLog::DiLog( sh ) -
536  2.0 / 3.0 * log( sh ) * log( 1.0 - sh ) -
537  ( 5.0 + 4.0 * sh ) / ( 3.0 * ( 1.0 + 2.0 * sh ) ) *
538  log( 1.0 - sh ) -
539  2.0 * sh * ( 1.0 + sh ) * ( 1.0 - 2.0 * sh ) /
540  ( 3.0 * pow( 1.0 - sh, 2 ) * ( 1.0 + 2.0 * sh ) ) *
541  log( sh ) +
542  ( 5.0 + 9.0 * sh - 6.0 * sh * sh ) /
543  ( 6.0 * ( 1.0 - sh ) * ( 1.0 + 2.0 * sh ) );
544  double eta9 = 1.0 + alphas * omega9 / EvtConst::pi;
545  double omega7 = -8.0 / 3.0 * log( 4.8 / mb ) -
546  4.0 / 3.0 * EvtDiLog::DiLog( sh ) -
547  2.0 / 9.0 * EvtConst::pi * EvtConst::pi -
548  2.0 / 3.0 * log( sh ) * log( 1.0 - sh ) -
549  log( 1 - sh ) * ( 8.0 + sh ) / ( 2.0 + sh ) / 3.0 -
550  2.0 / 3.0 * sh * ( 2.0 - 2.0 * sh - sh * sh ) * log( sh ) /
551  pow( ( 1.0 - sh ), 2 ) / ( 2.0 + sh ) -
552  ( 16.0 - 11.0 * sh - 17.0 * sh * sh ) / 18.0 /
553  ( 2.0 + sh ) / ( 1.0 - sh );
554  double eta7 = 1.0 + alphas * omega7 / EvtConst::pi;
555 
556  double omega79 = -4.0 / 3.0 * log( 4.8 / mb ) -
557  4.0 / 3.0 * EvtDiLog::DiLog( sh ) -
558  2.0 / 9.0 * EvtConst::pi * EvtConst::pi -
559  2.0 / 3.0 * log( sh ) * log( 1.0 - sh ) -
560  1.0 / 9.0 * ( 2.0 + 7.0 * sh ) * log( 1.0 - sh ) / sh -
561  2.0 / 9.0 * sh * ( 3.0 - 2.0 * sh ) * log( sh ) /
562  pow( ( 1.0 - sh ), 2 ) +
563  1.0 / 18.0 * ( 5.0 - 9.0 * sh ) / ( 1.0 - sh );
564  double eta79 = 1.0 + alphas * omega79 / EvtConst::pi;
565 
566  double c7c9 = abs( c7eff ) * real( c9eff );
567  c7c9 *= pow( eta79, 2 );
568  double c7c7 = pow( abs( c7eff ), 2 );
569  c7c7 *= pow( eta7, 2 );
570 
571  double c9c9plusc10c10 = pow( abs( c9eff ), 2 ) + pow( abs( c10eff ), 2 );
572  c9c9plusc10c10 *= pow( eta9, 2 );
573  double c9c9minusc10c10 = pow( abs( c9eff ), 2 ) - pow( abs( c10eff ), 2 );
574  c9c9minusc10c10 *= pow( eta9, 2 );
575 
576  lambda = 1.0 + sh * sh + pow( msh, 4 ) -
577  2.0 * ( sh + sh * msh * msh + msh * msh );
578 
579  f1 = pow( 1.0 - msh * msh, 2 ) - sh * ( 1.0 + msh * msh );
580  f2 = 2.0 * ( 1.0 + msh * msh ) * pow( 1.0 - msh * msh, 2 ) -
581  sh * ( 1.0 + 14.0 * msh * msh + pow( msh, 4 ) ) -
582  sh * sh * ( 1.0 + msh * msh );
583  f3 = pow( 1.0 - msh * msh, 2 ) + sh * ( 1.0 + msh * msh ) - 2.0 * sh * sh +
584  lambda * 2.0 * mlh * mlh / sh;
585  f4 = 1.0 - sh + msh * msh;
586 
587  delta = ( 12.0 * c7c9 * f1 + 4.0 * c7c7 * f2 / sh ) *
588  ( 1.0 + 2.0 * mlh * mlh / sh ) +
589  c9c9plusc10c10 * f3 + 6.0 * mlh * mlh * c9c9minusc10c10 * f4;
590 
591  prob = sqrt( lambda * ( 1.0 - 4.0 * mlh * mlh / sh ) ) * delta;
592 
593  return prob;
594 }
595 
596 double EvtbTosllAmp::dGdsdupProb( double mb, double ms, double ml, double s,
597  double u )
598 {
599  // Compute the decay probability density function given a value of s and u
600  // according to Ali's paper
601 
602  double prob;
603  double f1sp, f2sp, f3sp;
604 
605  double sh = s / ( mb * mb );
606 
607  EvtComplex c9eff = EvtbTosllAmp::GetC9Eff( sh * mb );
608  EvtComplex c7eff = EvtbTosllAmp::GetC7Eff( sh * mb );
609  EvtComplex c10eff = EvtbTosllAmp::GetC10Eff( sh * mb );
610 
611  double alphas = 0.119 /
612  ( 1 + 0.119 * log( pow( 4.8, 2 ) / pow( 91.1867, 2 ) ) *
613  23.0 / 12.0 / EvtConst::pi );
614  double omega9 = -2.0 / 9.0 * EvtConst::pi * EvtConst::pi -
615  4.0 / 3.0 * EvtDiLog::DiLog( sh ) -
616  2.0 / 3.0 * log( sh ) * log( 1.0 - sh ) -
617  ( 5.0 + 4.0 * sh ) / ( 3.0 * ( 1.0 + 2.0 * sh ) ) *
618  log( 1.0 - sh ) -
619  2.0 * sh * ( 1.0 + sh ) * ( 1.0 - 2.0 * sh ) /
620  ( 3.0 * pow( 1.0 - sh, 2 ) * ( 1.0 + 2.0 * sh ) ) *
621  log( sh ) +
622  ( 5.0 + 9.0 * sh - 6.0 * sh * sh ) /
623  ( 6.0 * ( 1.0 - sh ) * ( 1.0 + 2.0 * sh ) );
624  double eta9 = 1.0 + alphas * omega9 / EvtConst::pi;
625  double omega7 = -8.0 / 3.0 * log( 4.8 / mb ) -
626  4.0 / 3.0 * EvtDiLog::DiLog( sh ) -
627  2.0 / 9.0 * EvtConst::pi * EvtConst::pi -
628  2.0 / 3.0 * log( sh ) * log( 1.0 - sh ) -
629  log( 1 - sh ) * ( 8.0 + sh ) / ( 2.0 + sh ) / 3.0 -
630  2.0 / 3.0 * sh * ( 2.0 - 2.0 * sh - sh * sh ) * log( sh ) /
631  pow( ( 1.0 - sh ), 2 ) / ( 2.0 + sh ) -
632  ( 16.0 - 11.0 * sh - 17.0 * sh * sh ) / 18.0 /
633  ( 2.0 + sh ) / ( 1.0 - sh );
634  double eta7 = 1.0 + alphas * omega7 / EvtConst::pi;
635 
636  double omega79 = -4.0 / 3.0 * log( 4.8 / mb ) -
637  4.0 / 3.0 * EvtDiLog::DiLog( sh ) -
638  2.0 / 9.0 * EvtConst::pi * EvtConst::pi -
639  2.0 / 3.0 * log( sh ) * log( 1.0 - sh ) -
640  1.0 / 9.0 * ( 2.0 + 7.0 * sh ) * log( 1.0 - sh ) / sh -
641  2.0 / 9.0 * sh * ( 3.0 - 2.0 * sh ) * log( sh ) /
642  pow( ( 1.0 - sh ), 2 ) +
643  1.0 / 18.0 * ( 5.0 - 9.0 * sh ) / ( 1.0 - sh );
644  double eta79 = 1.0 + alphas * omega79 / EvtConst::pi;
645 
646  double c7c9 = abs( c7eff ) * real( c9eff );
647  c7c9 *= pow( eta79, 2 );
648  double c7c7 = pow( abs( c7eff ), 2 );
649  c7c7 *= pow( eta7, 2 );
650 
651  double c9c9plusc10c10 = pow( abs( c9eff ), 2 ) + pow( abs( c10eff ), 2 );
652  c9c9plusc10c10 *= pow( eta9, 2 );
653  double c9c9minusc10c10 = pow( abs( c9eff ), 2 ) - pow( abs( c10eff ), 2 );
654  c9c9minusc10c10 *= pow( eta9, 2 );
655  double c7c10 = abs( c7eff ) * real( c10eff );
656  c7c10 *= eta7;
657  c7c10 *= eta9;
658  double c9c10 = real( c9eff ) * real( c10eff );
659  c9c10 *= pow( eta9, 2 );
660 
661  f1sp = ( pow( mb * mb - ms * ms, 2 ) - s * s ) * c9c9plusc10c10 +
662  4.0 *
663  ( pow( mb, 4 ) - ms * ms * mb * mb -
664  pow( ms, 4 ) * ( 1.0 - ms * ms / ( mb * mb ) ) -
665  8.0 * s * ms * ms - s * s * ( 1.0 + ms * ms / ( mb * mb ) ) ) *
666  mb * mb * c7c7 /
667  s
668  // kludged mass term
669  * ( 1.0 + 2.0 * ml * ml / s ) -
670  8.0 * ( s * ( mb * mb + ms * ms ) - pow( mb * mb - ms * ms, 2 ) ) *
671  c7c9
672  // kludged mass term
673  * ( 1.0 + 2.0 * ml * ml / s );
674 
675  f2sp = 4.0 * s * c9c10 + 8.0 * ( mb * mb + ms * ms ) * c7c10;
676  f3sp = -( c9c9plusc10c10 ) + 4.0 * ( 1.0 + pow( ms / mb, 4 ) ) * mb * mb *
677  c7c7 /
678  s
679  // kludged mass term
680  * ( 1.0 + 2.0 * ml * ml / s );
681 
682  prob = ( f1sp + f2sp * u + f3sp * u * u ) / pow( mb, 3 );
683 
684  return prob;
685 }
void setDiag(int n)
EvtComplex GetC7Eff(double q2, bool nnlo=true)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
double CalcMaxProb(EvtId parent, EvtId meson, EvtId lepton, EvtId nudaug, EvtbTosllFF *formFactors, double &poleSize)
static double getMeanMass(EvtId i)
Definition: EvtPDL.cpp:314
int getSpinStates() const
void makeDaughters(unsigned int ndaug, EvtId *id)
void set(int i, double d)
Definition: EvtVector4R.hh:167
EvtRaritaSchwinger boostTo(const EvtRaritaSchwinger &rs, const EvtVector4R p4)
EvtSpinDensity getSpinDensity()
Definition: EvtAmp.cpp:142
EvtComplex GetC10Eff(double q2, bool nnlo=true)
Definition: EvtId.hh:27
static const double pi
Definition: EvtConst.hh:26
void deleteTree()
Definition: EvtAmp.hh:30
static double getMinMass(EvtId i)
Definition: EvtPDL.cpp:342
double abs(const EvtComplex &c)
Definition: EvtComplex.hh:201
void init(EvtId part_n, double e, double px, double py, double pz)
double lambda(double q, double m1, double m2)
Definition: EvtFlatQ2.cpp:31
double mass() const
static double getWidth(EvtId i)
Definition: EvtPDL.cpp:352
double dGdsProb(double mb, double ms, double ml, double s)
void setDiagonalSpinDensity()
EvtParticle * getDaug(int i)
Definition: EvtParticle.cpp:91
double DiLog(double x)
Definition: EvtDiLog.cpp:31
void noLifeTime()
Definition: EvtParticle.hh:382
EvtComplex GetC9Eff(double q2, bool nnlo=true, bool btod=false)
static double getMass(EvtId i)
Definition: EvtPDL.cpp:319
void init(EvtId p, int ndaug, EvtId *daug)
Definition: EvtAmp.cpp:68
double dGdsdupProb(double mb, double ms, double ml, double s, double u)
double real(const EvtComplex &c)
Definition: EvtComplex.hh:230
virtual void CalcAmp(EvtParticle *parent, EvtAmp &amp, EvtbTosllFF *formFactors)=0
static double getMaxMass(EvtId i)
Definition: EvtPDL.cpp:337
double normalizedProb(const EvtSpinDensity &d)