]>
Commit | Line | Data |
---|---|---|
da0e9ce3 | 1 | //-------------------------------------------------------------------------- |
2 | // | |
3 | // Environment: | |
4 | // This software is part of the EvtGen package developed jointly | |
5 | // for the BaBar and CLEO collaborations. If you use all or part | |
6 | // of it, please give an appropriate acknowledgement. | |
7 | // | |
8 | // Module: EvtBtoXsllUtil.cc | |
9 | // | |
10 | // Description: Routine to generate non-resonant B -> Xs l+ l- decays. | |
11 | // It generates a dilepton mass spectrum according to | |
12 | // F.Kruger and L.M.Sehgal, Phys. Lett. B380, 199 (1996) | |
13 | // and then generates the two lepton momenta according to | |
14 | // A.Ali, G.Hiller, L.T.Handoko and T.Morozumi, Phys. Rev. D55, 4105 (1997). | |
15 | // Expressions for Wilson coefficients and power corrections are taken | |
16 | // from A.Ali, E.Lunghi, C.Greub and G.Hiller, Phys. Rev. D66, 034002 (2002). | |
17 | // Detailed formulae for shat dependence of these coefficients are taken | |
18 | // from H.H.Asatryan, H.M.Asatrian, C.Greub and M.Walker, PRD65, 074004 (2002) | |
19 | // and C.Bobeth, M.Misiak and J.Urban, Nucl. Phys. B574, 291 (2000). | |
20 | // The resultant Xs particles may be decayed by JETSET. | |
21 | // | |
22 | // Modification history: | |
23 | // | |
24 | // Stephane Willocq Jan 19, 2001 Module created | |
25 | // Stephane Willocq Nov 6, 2003 Update Wilson Coeffs & dG's | |
26 | // &Jeff Berryhill | |
27 | // | |
28 | //------------------------------------------------------------------------ | |
29 | // | |
30 | #include "EvtGenBase/EvtPatches.hh" | |
31 | // | |
32 | #include <stdlib.h> | |
33 | #include "EvtGenBase/EvtRandom.hh" | |
34 | #include "EvtGenBase/EvtParticle.hh" | |
35 | #include "EvtGenBase/EvtGenKine.hh" | |
36 | #include "EvtGenBase/EvtPDL.hh" | |
37 | #include "EvtGenBase/EvtReport.hh" | |
38 | #include "EvtGenModels/EvtBtoXsllUtil.hh" | |
39 | #include "EvtGenBase/EvtComplex.hh" | |
40 | #include "EvtGenBase/EvtConst.hh" | |
41 | #include "EvtGenBase/EvtDiLog.hh" | |
42 | ||
43 | EvtComplex EvtBtoXsllUtil::GetC7Eff0(double sh, bool nnlo) | |
44 | { | |
45 | // This function returns the zeroth-order alpha_s part of C7 | |
46 | ||
47 | if (!nnlo) return -0.313; | |
48 | ||
49 | double A7; | |
50 | ||
51 | // use energy scale of 2.5 GeV as a computational trick (G.Hiller) | |
52 | // at least for shat > 0.25 | |
53 | A7 = -0.353 + 0.023; | |
54 | ||
55 | EvtComplex c7eff; | |
56 | if (sh > 0.25) | |
57 | { | |
58 | c7eff = A7; | |
59 | return c7eff; | |
60 | } | |
61 | ||
62 | // change energy scale to 5.0 for full NNLO calculation below shat = 0.25 | |
63 | A7 = -0.312 + 0.008; | |
64 | c7eff = A7; | |
65 | ||
66 | return c7eff; | |
67 | } | |
68 | ||
69 | EvtComplex EvtBtoXsllUtil::GetC7Eff1(double sh, double mbeff, bool nnlo) | |
70 | { | |
71 | // This function returns the first-order alpha_s part of C7 | |
72 | ||
73 | if (!nnlo) return 0.0; | |
74 | double logsh; | |
75 | logsh = log(sh); | |
76 | ||
77 | EvtComplex uniti(0.0,1.0); | |
78 | ||
79 | EvtComplex c7eff = 0.0; | |
80 | if (sh > 0.25) | |
81 | { | |
82 | return c7eff; | |
83 | } | |
84 | ||
85 | // change energy scale to 5.0 for full NNLO calculation below shat = 0.25 | |
86 | double muscale = 5.0; | |
87 | double alphas = 0.215; | |
88 | //double A7 = -0.312 + 0.008; | |
89 | double A8 = -0.148; | |
90 | //double A9 = 4.174 + (-0.035); | |
91 | //double A10 = -4.592 + 0.379; | |
92 | double C1 = -0.487; | |
93 | double C2 = 1.024; | |
94 | //double T9 = 0.374 + 0.252; | |
95 | //double U9 = 0.033 + 0.015; | |
96 | //double W9 = 0.032 + 0.012; | |
97 | double Lmu = log(muscale/mbeff); | |
98 | ||
99 | EvtComplex F71; | |
100 | EvtComplex f71; | |
101 | EvtComplex k7100(-0.68192,-0.074998); | |
102 | EvtComplex k7101(0.0,0.0); | |
103 | EvtComplex k7110(-0.23935,-0.12289); | |
104 | EvtComplex k7111(0.0027424,0.019676); | |
105 | EvtComplex k7120(-0.0018555,-0.175); | |
106 | EvtComplex k7121(0.022864,0.011456); | |
107 | EvtComplex k7130(0.28248,-0.12783); | |
108 | EvtComplex k7131(0.029027,-0.0082265); | |
109 | f71 = k7100 + k7101*logsh + sh*(k7110 + k7111*logsh) + | |
110 | sh*sh*(k7120 + k7121*logsh) + | |
111 | sh*sh*sh*(k7130 + k7131*logsh); | |
112 | F71 = (-208.0/243.0)*Lmu + f71; | |
113 | ||
114 | EvtComplex F72; | |
115 | EvtComplex f72; | |
116 | EvtComplex k7200(4.0915,0.44999); | |
117 | EvtComplex k7201(0.0,0.0); | |
118 | EvtComplex k7210(1.4361,0.73732); | |
119 | EvtComplex k7211(-0.016454,-0.11806); | |
120 | EvtComplex k7220(0.011133,1.05); | |
121 | EvtComplex k7221(-0.13718,-0.068733); | |
122 | EvtComplex k7230(-1.6949,0.76698); | |
123 | EvtComplex k7231(-0.17416,0.049359); | |
124 | f72 = k7200 + k7201*logsh + sh*(k7210 + k7211*logsh) + | |
125 | sh*sh*(k7220 + k7221*logsh) + | |
126 | sh*sh*sh*(k7230 + k7231*logsh); | |
127 | F72 = (416.0/81.0)*Lmu + f72; | |
128 | ||
129 | EvtComplex F78; | |
130 | F78 = (-32.0/9.0)*Lmu + 8.0*EvtConst::pi*EvtConst::pi/27.0 + (-44.0/9.0) | |
131 | + (-8.0*EvtConst::pi/9.0)*uniti + | |
132 | (4.0/3.0*EvtConst::pi*EvtConst::pi - 40.0/3.0)*sh + | |
133 | (32.0*EvtConst::pi*EvtConst::pi/9.0 - 316.0/9.0)*sh*sh + | |
134 | (200.0*EvtConst::pi*EvtConst::pi/27.0 - 658.0/9.0)*sh*sh*sh + | |
135 | (-8.0*logsh/9.0)*(sh + sh*sh + sh*sh*sh); | |
136 | ||
137 | c7eff = - alphas/(4.0*EvtConst::pi)*(C1*F71 + C2*F72 + A8*F78); | |
138 | ||
139 | return c7eff; | |
140 | } | |
141 | ||
142 | ||
143 | EvtComplex EvtBtoXsllUtil::GetC9Eff0(double sh, double mbeff, | |
144 | bool nnlo, bool btod) | |
145 | { | |
146 | // This function returns the zeroth-order alpha_s part of C9 | |
147 | ||
148 | if (!nnlo) return 4.344; | |
149 | double logsh; | |
150 | logsh = log(sh); | |
151 | double mch = 0.29; | |
152 | ||
153 | ||
154 | double muscale; | |
155 | muscale = 2.5; | |
156 | double alphas; | |
157 | alphas = 0.267; | |
158 | double A8; | |
159 | A8 = -0.164; | |
160 | double A9; | |
161 | A9 = 4.287 + (-0.218); | |
162 | double A10; | |
163 | A10 = -4.592 + 0.379; | |
164 | double C1; | |
165 | C1 = -0.697; | |
166 | double C2; | |
167 | C2 = 1.046; | |
168 | double T9; | |
169 | T9 = 0.114 + 0.280; | |
170 | double U9; | |
171 | U9 = 0.045 + 0.023; | |
172 | double W9; | |
173 | W9 = 0.044 + 0.016; | |
174 | ||
175 | double Lmu; | |
176 | Lmu = log(muscale/mbeff); | |
177 | ||
178 | ||
179 | EvtComplex uniti(0.0,1.0); | |
180 | ||
181 | EvtComplex hc; | |
182 | double xarg; | |
183 | xarg = 4.0*mch/sh; | |
184 | ||
185 | hc = -4.0/9.0*log(mch*mch) + 8.0/27.0 + 4.0*xarg/9.0; | |
186 | if (xarg < 1.0) | |
187 | { | |
188 | hc = hc - 2.0/9.0*(2.0 + xarg)*sqrt(fabs(1.0 - xarg))* | |
189 | (log((sqrt(1.0 - xarg)+1.0)/(sqrt(1.0 - xarg) - 1.0)) - | |
190 | uniti*EvtConst::pi); | |
191 | } | |
192 | else | |
193 | { | |
194 | hc = hc - 2.0/9.0*(2.0 + xarg)*sqrt(fabs(1.0 - xarg))* | |
195 | 2.0*atan(1.0/sqrt(xarg-1.0)); | |
196 | } | |
197 | ||
198 | EvtComplex h1; | |
199 | xarg = 4.0/sh; | |
200 | h1 = 8.0/27.0 + 4.0*xarg/9.0; | |
201 | if (xarg < 1.0) | |
202 | { | |
203 | h1 = h1 - 2.0/9.0*(2.0 + xarg)*sqrt(fabs(1.0 - xarg))* | |
204 | (log((sqrt(1.0 - xarg)+1.0)/(sqrt(1.0 - xarg) - 1.0)) - | |
205 | uniti*EvtConst::pi); | |
206 | } | |
207 | else | |
208 | { | |
209 | h1 = h1 - 2.0/9.0*(2.0 + xarg)*sqrt(fabs(1.0 - xarg))* | |
210 | 2.0*atan(1.0/sqrt(xarg-1.0)); | |
211 | } | |
212 | ||
213 | EvtComplex h0; | |
214 | h0 = 8.0/27.0 - 4.0*log(2.0)/9.0 + 4.0*uniti*EvtConst::pi/9.0; | |
215 | ||
216 | ||
217 | // X=V_{ud}^* V_ub / V_{td}^* V_tb * (4/3 C_1 +C_2) * (h(\hat m_c^2, hat s)- | |
218 | // h(\hat m_u^2, hat s)) | |
219 | EvtComplex Vudstar(1.0 - 0.2279*0.2279/2.0, 0.0); | |
220 | EvtComplex Vub((0.118+0.273)/2.0, -1.0*(0.305+0.393)/2.0); | |
221 | EvtComplex Vtdstar(1.0 - (0.118+0.273)/2.0,(0.305+0.393)/2.0); | |
222 | EvtComplex Vtb(1.0,0.0); | |
223 | ||
224 | EvtComplex Xd; | |
225 | Xd = (Vudstar * Vub / Vtdstar * Vtb) * (4.0/3.0*C1 + C2) * (hc - h0); | |
226 | ||
227 | EvtComplex c9eff = 4.344; | |
228 | if (sh > 0.25) | |
229 | { | |
230 | c9eff = A9 + T9*hc + U9*h1 + W9*h0; | |
231 | if (btod) | |
232 | { | |
233 | c9eff += Xd; | |
234 | } | |
235 | return c9eff; | |
236 | } | |
237 | ||
238 | // change energy scale to 5.0 for full NNLO calculation below shat = 0.25 | |
239 | muscale = 5.0; | |
240 | alphas = 0.215; | |
241 | A9 = 4.174 + (-0.035); | |
242 | C1 = -0.487; | |
243 | C2 = 1.024; | |
244 | A8 = -0.148; | |
245 | T9 = 0.374 + 0.252; | |
246 | U9 = 0.033 + 0.015; | |
247 | W9 = 0.032 + 0.012; | |
248 | Lmu = log(muscale/mbeff); | |
249 | ||
250 | Xd = (Vudstar * Vub / Vtdstar * Vtb) * (4.0/3.0*C1 + C2) * (hc - h0); | |
251 | ||
252 | c9eff = A9 + T9*hc + U9*h1 + W9*h0; | |
253 | ||
254 | if (btod) | |
255 | { | |
256 | c9eff += Xd; | |
257 | } | |
258 | ||
259 | return c9eff; | |
260 | } | |
261 | ||
262 | EvtComplex EvtBtoXsllUtil::GetC9Eff1(double sh, double mbeff, | |
263 | bool nnlo, bool /*btod*/) | |
264 | { | |
265 | // This function returns the first-order alpha_s part of C9 | |
266 | ||
267 | if (!nnlo) return 0.0; | |
268 | double logsh; | |
269 | logsh = log(sh); | |
270 | double mch = 0.29; | |
271 | ||
272 | EvtComplex uniti(0.0,1.0); | |
273 | ||
274 | EvtComplex c9eff = 0.0; | |
275 | if (sh > 0.25) | |
276 | { | |
277 | return c9eff; | |
278 | } | |
279 | ||
280 | // change energy scale to 5.0 for full NNLO calculation below shat = 0.25 | |
281 | double muscale = 5.0; | |
282 | double alphas = 0.215; | |
283 | double C1 = -0.487; | |
284 | double C2 = 1.024; | |
285 | double A8 = -0.148; | |
286 | double Lmu = log(muscale/mbeff); | |
287 | ||
288 | EvtComplex F91; | |
289 | EvtComplex f91; | |
290 | EvtComplex k9100(-11.973,0.16371); | |
291 | EvtComplex k9101(-0.081271,-0.059691); | |
292 | EvtComplex k9110(-28.432,-0.25044); | |
293 | EvtComplex k9111(-0.040243,0.016442); | |
294 | EvtComplex k9120(-57.114,-0.86486); | |
295 | EvtComplex k9121(-0.035191,0.027909); | |
296 | EvtComplex k9130(-128.8,-2.5243); | |
297 | EvtComplex k9131(-0.017587,0.050639); | |
298 | f91 = k9100 + k9101*logsh + sh*(k9110 + k9111*logsh) + | |
299 | sh*sh*(k9120 + k9121*logsh) + | |
300 | sh*sh*sh*(k9130 + k9131*logsh); | |
301 | F91 = (-1424.0/729.0 + 16.0*uniti*EvtConst::pi/243.0 | |
302 | + 64.0/27.0*log(mch))*Lmu - 16.0*Lmu*logsh/243.0 + | |
303 | (16.0/1215.0 - 32.0/135.0/mch/mch)*Lmu*sh + | |
304 | (4.0/2835.0 - 8.0/315.0/mch/mch/mch/mch)*Lmu*sh*sh + | |
305 | (16.0/76545.0 - 32.0/8505.0/mch/mch/mch/mch/mch/mch)* | |
306 | Lmu*sh*sh*sh -256.0*Lmu*Lmu/243.0 + f91; | |
307 | ||
308 | EvtComplex F92; | |
309 | EvtComplex f92; | |
310 | EvtComplex k9200(6.6338,-0.98225); | |
311 | EvtComplex k9201(0.48763,0.35815); | |
312 | EvtComplex k9210(3.3585,1.5026); | |
313 | EvtComplex k9211(0.24146,-0.098649); | |
314 | EvtComplex k9220(-1.1906,5.1892); | |
315 | EvtComplex k9221(0.21115,-0.16745); | |
316 | EvtComplex k9230(-17.12,15.146); | |
317 | EvtComplex k9231(0.10552,-0.30383); | |
318 | f92 = k9200 + k9201*logsh + sh*(k9210 + k9211*logsh) + | |
319 | sh*sh*(k9220 + k9221*logsh) + | |
320 | sh*sh*sh*(k9230 + k9231*logsh); | |
321 | F92 = (256.0/243.0 - 32.0*uniti*EvtConst::pi/81.0 | |
322 | - 128.0/9.0*log(mch))*Lmu + 32.0*Lmu*logsh/81.0 + | |
323 | (-32.0/405.0 + 64.0/45.0/mch/mch)*Lmu*sh + | |
324 | (-8.0/945.0 + 16.0/105.0/mch/mch/mch/mch)*Lmu*sh*sh + | |
325 | (-32.0/25515.0 + 64.0/2835.0/mch/mch/mch/mch/mch/mch)* | |
326 | Lmu*sh*sh*sh + 512.0*Lmu*Lmu/81.0 + f92; | |
327 | ||
328 | EvtComplex F98; | |
329 | F98 = 104.0/9.0 - 32.0*EvtConst::pi*EvtConst::pi/27.0 + | |
330 | (1184.0/27.0 - 40.0*EvtConst::pi*EvtConst::pi/9.0)*sh + | |
331 | (14212.0/135.0 - 32.0*EvtConst::pi*EvtConst::pi/3.0)*sh*sh + | |
332 | (193444.0/945.0 - 560.0*EvtConst::pi*EvtConst::pi/27.0)*sh*sh*sh + | |
333 | 16.0*logsh/9.0*(1.0 + sh + sh*sh + sh*sh*sh); | |
334 | ||
335 | c9eff = - alphas/(4.0*EvtConst::pi)*(C1*F91 + C2*F92 + A8*F98); | |
336 | ||
337 | return c9eff; | |
338 | } | |
339 | ||
340 | EvtComplex EvtBtoXsllUtil::GetC10Eff(double /*sh*/, bool nnlo) | |
341 | { | |
342 | ||
343 | if (!nnlo) return -4.669; | |
344 | double A10; | |
345 | A10 = -4.592 + 0.379; | |
346 | ||
347 | EvtComplex c10eff; | |
348 | c10eff = A10; | |
349 | ||
350 | return c10eff; | |
351 | } | |
352 | ||
353 | double EvtBtoXsllUtil::dGdsProb(double mb, double ms, double ml, | |
354 | double s) | |
355 | { | |
356 | // Compute the decay probability density function given a value of s | |
357 | // according to Ali-Lunghi-Greub-Hiller's 2002 paper | |
358 | // Note that the form given below is taken from | |
359 | // F.Kruger and L.M.Sehgal, Phys. Lett. B380, 199 (1996) | |
360 | // but the differential rate as a function of dilepton mass | |
361 | // in this latter paper reduces to Eq.(12) in ALGH's 2002 paper | |
362 | // for ml = 0 and ms = 0. | |
363 | ||
364 | bool btod = false; | |
365 | bool nnlo = true; | |
366 | ||
367 | double delta, lambda, prob; | |
368 | double f1, f2, f3, f4; | |
369 | double msh, mlh, sh; | |
370 | double mbeff = 4.8; | |
371 | ||
372 | mlh = ml / mb; | |
373 | msh = ms / mb; | |
374 | // set lepton and strange-quark masses to 0 if need to | |
375 | // be in strict agreement with ALGH 2002 paper | |
376 | // mlh = 0.0; msh = 0.0; | |
377 | // sh = s / (mb*mb); | |
378 | sh = s / (mbeff*mbeff); | |
379 | ||
380 | // if sh >1.0 code will return a nan. so just skip it | |
381 | if ( sh > 1.0 ) return 0.0; | |
382 | ||
383 | ||
384 | EvtComplex c7eff0 = EvtBtoXsllUtil::GetC7Eff0(sh,nnlo); | |
385 | EvtComplex c7eff1 = EvtBtoXsllUtil::GetC7Eff1(sh,mbeff,nnlo); | |
386 | EvtComplex c9eff0 = EvtBtoXsllUtil::GetC9Eff0(sh,mbeff,nnlo,btod); | |
387 | EvtComplex c9eff1 = EvtBtoXsllUtil::GetC9Eff1(sh,mbeff,nnlo,btod); | |
388 | EvtComplex c10eff = EvtBtoXsllUtil::GetC10Eff(sh,nnlo); | |
389 | ||
390 | double alphas = 0.119/ | |
391 | (1 + 0.119*log(pow(4.8,2)/pow(91.1867,2))*23.0/12.0/EvtConst::pi); | |
392 | ||
393 | double omega7 = -8.0/3.0*log(4.8/mb) | |
394 | -4.0/3.0*EvtDiLog::DiLog(sh) | |
395 | -2.0/9.0*EvtConst::pi*EvtConst::pi | |
396 | -2.0/3.0*log(sh)*log(1.0-sh) | |
397 | -log(1-sh)*(8.0+sh)/(2.0+sh)/3.0 | |
398 | -2.0/3.0*sh*(2.0 - 2.0*sh - sh*sh)*log(sh)/pow((1.0 - sh),2)/(2.0 + sh) | |
399 | -(16.0 - 11.0*sh - 17.0*sh*sh)/18.0/(2.0 + sh)/(1.0 - sh); | |
400 | double eta7 = 1.0 + alphas*omega7/EvtConst::pi; | |
401 | ||
402 | double omega79 = -4.0/3.0*log(4.8/mb) | |
403 | -4.0/3.0*EvtDiLog::DiLog(sh) | |
404 | -2.0/9.0*EvtConst::pi*EvtConst::pi | |
405 | -2.0/3.0*log(sh)*log(1.0-sh) | |
406 | -1.0/9.0*(2.0+7.0*sh)*log(1.0 - sh)/sh | |
407 | -2.0/9.0*sh*(3.0 - 2.0*sh)*log(sh)/pow((1.0 - sh),2) | |
408 | +1.0/18.0*(5.0 - 9.0*sh)/(1.0 - sh); | |
409 | double eta79 = 1.0 + alphas*omega79/EvtConst::pi; | |
410 | ||
411 | double omega9 = -2.0/9.0*EvtConst::pi*EvtConst::pi - 4.0/3.0*EvtDiLog::DiLog(sh) | |
412 | - 2.0/3.0*log(sh)*log(1.0-sh) | |
413 | - (5.0+4.0*sh)/(3.0*(1.0+2.0*sh)) * log(1.0-sh) | |
414 | - 2.0*sh*(1.0+sh)*(1.0-2.0*sh) | |
415 | /(3.0*pow(1.0-sh,2)*(1.0+2.0*sh)) * log(sh) | |
416 | + (5.0+9.0*sh-6.0*sh*sh)/(6.0*(1.0-sh)*(1.0+2.0*sh)); | |
417 | double eta9 = 1.0 + alphas*omega9/EvtConst::pi; | |
418 | ||
419 | EvtComplex c7eff = eta7*c7eff0 + c7eff1; | |
420 | EvtComplex c9eff = eta9*c9eff0 + c9eff1; | |
421 | c10eff *= eta9; | |
422 | ||
423 | double c7c7 = abs2(c7eff); | |
424 | double c7c9 = real((eta79*c7eff0 + c7eff1)*conj(eta79*c9eff0 + c9eff1)); | |
425 | double c9c9plusc10c10 = abs2(c9eff) + abs2(c10eff); | |
426 | double c9c9minusc10c10 = abs2(c9eff) - abs2(c10eff); | |
427 | ||
428 | // Power corrections according to ALGH 2002 | |
429 | double lambda_1 = -0.2; | |
430 | double lambda_2 = 0.12; | |
431 | double C1 = -0.487; | |
432 | double C2 = 1.024; | |
433 | double mc = 0.29 * mb; | |
434 | ||
435 | EvtComplex F; | |
436 | double r = s / (4.0 * mc * mc); | |
437 | EvtComplex uniti(0.0,1.0); | |
438 | F = 3.0 / (2.0 * r); | |
439 | if (r < 1) | |
440 | { | |
441 | F *= 1.0/sqrt(r*(1.0-r))*atan(sqrt(r/(1.0-r)))-1.0; | |
442 | } | |
443 | else | |
444 | { | |
445 | F *= 0.5/sqrt(r*(r-1.0))*(log((1.0-sqrt(1.0-1.0/r))/(1.0+sqrt(1.0-1.0/r))) | |
446 | +uniti*EvtConst::pi)-1.0; | |
447 | } | |
448 | ||
449 | double G1 = 1.0 + lambda_1 / (2.0 * mb * mb) | |
450 | + 3.0 * (1.0 - 15.0*sh*sh + 10.0*sh*sh*sh) | |
451 | / ((1.0 - sh)*(1.0 -sh)*(1.0 + 2.0*sh)) | |
452 | * lambda_2 / (2.0*mb*mb); | |
453 | double G2 = 1.0 + lambda_1 / (2.0 * mb * mb) | |
454 | - 3.0 * (6.0 + 3.0*sh - 5.0*sh*sh*sh) | |
455 | / ((1.0 - sh)*(1.0 -sh)*(2.0 + sh)) | |
456 | * lambda_2 / (2.0*mb*mb); | |
457 | double G3 = 1.0 + lambda_1 / (2.0 * mb * mb) | |
458 | - (5.0 + 6.0*sh - 7.0*sh*sh) | |
459 | / ((1.0 - sh)*(1.0 -sh)) | |
460 | * lambda_2 / (2.0*mb*mb); | |
461 | double Gc = -8.0/9.0 * (C2 - C1/6.0) * lambda_2/(mc*mc) | |
462 | * real(F*(conj(c9eff)*(2.0+sh)+conj(c7eff)*(1.0 + 6.0*sh - sh*sh)/sh)); | |
463 | ||
464 | // end of power corrections section | |
465 | // now back to Kruger & Sehgal expressions | |
466 | ||
467 | double msh2=msh*msh; | |
468 | lambda = 1.0 + sh*sh + msh2*msh2 - 2.0*(sh + sh*msh2 + msh2); | |
469 | // negative lambda screw up sqrt below! | |
470 | if ( lambda < 0.0 ) return 0.0; | |
471 | ||
472 | f1 = pow(1.0-msh2,2) - sh*(1.0 + msh2); | |
473 | f2 = 2.0*(1.0 + msh2) * pow(1.0-msh2,2) | |
474 | - sh*(1.0 + 14.0*msh2 + pow(msh,4)) - sh*sh*(1.0 + msh2); | |
475 | f3 = pow(1.0-msh2,2) + sh*(1.0 + msh2) - 2.0*sh*sh | |
476 | + lambda*2.0*mlh*mlh/sh; | |
477 | f4 = 1.0 - sh + msh2; | |
478 | ||
479 | delta = ( 12.0*c7c9*f1*G3 + 4.0*c7c7*f2*G2/sh ) * (1.0 + 2.0*mlh*mlh/sh) | |
480 | + c9c9plusc10c10*f3*G1 | |
481 | + 6.0*mlh*mlh*c9c9minusc10c10*f4 | |
482 | + Gc; | |
483 | ||
484 | // avoid negative probs | |
485 | if ( delta < 0.0 ) delta=0.; | |
486 | // negative when sh < 4*mlh*mlh | |
487 | // s < 4*ml*ml | |
488 | /// prob = sqrt(lambda*(1.0 - 4.0*mlh*mlh/sh)) * delta; | |
489 | prob = sqrt(lambda*(1.0 - 4.0*ml*ml/s)) * delta; | |
490 | ||
491 | // if ( !(prob>=0.0) && !(prob<=0.0) ) { | |
492 | //nan | |
493 | // std::cout << lambda << " " << mlh << " " << sh << " " << delta << " " << mb << " " << mbeff << std::endl; | |
494 | // std::cout << 4.0*mlh*mlh/sh << " " << 4.0*ml*ml/s << " " << s-4.0*ml*ml << " " << ml << std::endl; | |
495 | // std::cout << sh << " " << sh*sh << " " << msh2*msh2 << " " << msh << std::endl; | |
496 | //std::cout << ( 12.0*c7c9*f1*G3 + 4.0*c7c7*f2*G2/sh ) * (1.0 + 2.0*mlh*mlh/sh) | |
497 | // <<" " << c9c9plusc10c10*f3*G1 | |
498 | // << " "<< 6.0*mlh*mlh*c9c9minusc10c10*f4 | |
499 | // << " "<< Gc << std::endl; | |
500 | //std::cout << C2 << " " << C1 << " "<< lambda_2 << " " << mc << " " << real(F*(conj(c9eff)*(2.0+sh)+conj(c7eff)*(1.0 + 6.0*sh - sh*sh)/sh)) << " " << sh << " " << r << std::endl; | |
501 | //std::cout << c9eff << " " << eta9 << " " <<c9eff0 << " " << c9eff1 << " " << alphas << " " << omega9 << " " << sh << std::endl; | |
502 | ||
503 | //} | |
504 | // else{ | |
505 | // if ( sh > 1.0) std::cout << "not a nan \n"; | |
506 | // } | |
507 | return prob; | |
508 | } | |
509 | ||
510 | double EvtBtoXsllUtil::dGdsdupProb(double mb, double ms, double ml, | |
511 | double s, double u) | |
512 | { | |
513 | // Compute the decay probability density function given a value of s and u | |
514 | // according to Ali-Hiller-Handoko-Morozumi's 1997 paper | |
515 | // see Appendix E | |
516 | ||
517 | bool btod = false; | |
518 | bool nnlo = true; | |
519 | ||
520 | double prob; | |
521 | double f1sp, f2sp, f3sp; | |
522 | double mbeff = 4.8; | |
523 | ||
524 | // double sh = s / (mb*mb); | |
525 | double sh = s / (mbeff*mbeff); | |
526 | ||
527 | // if sh >1.0 code will return a nan. so just skip it | |
528 | if ( sh > 1.0 ) return 0.0; | |
529 | ||
530 | EvtComplex c7eff0 = EvtBtoXsllUtil::GetC7Eff0(sh,nnlo); | |
531 | EvtComplex c7eff1 = EvtBtoXsllUtil::GetC7Eff1(sh,mbeff,nnlo); | |
532 | EvtComplex c9eff0 = EvtBtoXsllUtil::GetC9Eff0(sh,mbeff,nnlo,btod); | |
533 | EvtComplex c9eff1 = EvtBtoXsllUtil::GetC9Eff1(sh,mbeff,nnlo,btod); | |
534 | EvtComplex c10eff = EvtBtoXsllUtil::GetC10Eff(sh,nnlo); | |
535 | ||
536 | double alphas = 0.119/ | |
537 | (1 + 0.119*log(pow(4.8,2)/pow(91.1867,2))*23.0/12.0/EvtConst::pi); | |
538 | ||
539 | double omega7 = -8.0/3.0*log(4.8/mb) | |
540 | -4.0/3.0*EvtDiLog::DiLog(sh) | |
541 | -2.0/9.0*EvtConst::pi*EvtConst::pi | |
542 | -2.0/3.0*log(sh)*log(1.0-sh) | |
543 | -log(1-sh)*(8.0+sh)/(2.0+sh)/3.0 | |
544 | -2.0/3.0*sh*(2.0 - 2.0*sh - sh*sh)*log(sh)/pow((1.0 - sh),2)/(2.0 + sh) | |
545 | -(16.0 - 11.0*sh - 17.0*sh*sh)/18.0/(2.0 + sh)/(1.0 - sh); | |
546 | double eta7 = 1.0 + alphas*omega7/EvtConst::pi; | |
547 | ||
548 | double omega79 = -4.0/3.0*log(4.8/mb) | |
549 | -4.0/3.0*EvtDiLog::DiLog(sh) | |
550 | -2.0/9.0*EvtConst::pi*EvtConst::pi | |
551 | -2.0/3.0*log(sh)*log(1.0-sh) | |
552 | -1.0/9.0*(2.0+7.0*sh)*log(1.0 - sh)/sh | |
553 | -2.0/9.0*sh*(3.0 - 2.0*sh)*log(sh)/pow((1.0 - sh),2) | |
554 | +1.0/18.0*(5.0 - 9.0*sh)/(1.0 - sh); | |
555 | double eta79 = 1.0 + alphas*omega79/EvtConst::pi; | |
556 | ||
557 | double omega9 = - 2.0/9.0*EvtConst::pi*EvtConst::pi - 4.0/3.0*EvtDiLog::DiLog(sh) | |
558 | - 2.0/3.0*log(sh)*log(1.0-sh) | |
559 | - (5.0+4.0*sh)/(3.0*(1.0+2.0*sh)) * log(1.0-sh) | |
560 | - 2.0*sh*(1.0+sh)*(1.0-2.0*sh) | |
561 | /(3.0*pow(1.0-sh,2)*(1.0+2.0*sh)) * log(sh) | |
562 | + (5.0+9.0*sh-6.0*sh*sh)/(6.0*(1.0-sh)*(1.0+2.0*sh)); | |
563 | double eta9 = 1.0 + alphas*omega9/EvtConst::pi; | |
564 | ||
565 | EvtComplex c7eff = eta7*c7eff0 + c7eff1; | |
566 | EvtComplex c9eff = eta9*c9eff0 + c9eff1; | |
567 | c10eff *= eta9; | |
568 | ||
569 | double c7c7 = abs2(c7eff); | |
570 | double c7c9 = real((eta79*c7eff0 + c7eff1)*conj(eta79*c9eff0 + c9eff1)); | |
571 | double c7c10 = real((eta79*c7eff0 + c7eff1)*conj(eta9*c10eff)); | |
572 | double c9c10 = real((eta9*c9eff0 + c9eff1)*conj(eta9*c10eff)); | |
573 | double c9c9plusc10c10 = abs2(c9eff) + abs2(c10eff); | |
574 | ||
575 | f1sp = ( pow(mb*mb-ms*ms,2) - s*s) * c9c9plusc10c10 | |
576 | + 4.0*( pow(mb,4) - ms*ms*mb*mb - pow(ms,4)*(1.0 - ms*ms/(mb*mb)) | |
577 | - 8.0*s*ms*ms - s*s*(1.0 + ms*ms/(mb*mb) ))*mb*mb*c7c7/s | |
578 | // kludged mass term | |
579 | *(1.0 + 2.0*ml*ml/s) | |
580 | - 8.0*(s*(mb*mb + ms*ms) - pow(mb*mb-ms*ms,2)) * c7c9 | |
581 | // kludged mass term | |
582 | *(1.0 + 2.0*ml*ml/s); | |
583 | ||
584 | f2sp = 4.0*s*c9c10 + 8.0*(mb*mb + ms*ms)*c7c10; | |
585 | f3sp = - (c9c9plusc10c10) | |
586 | + 4.0*(1.0 + pow(ms/mb,4)) * mb*mb*c7c7/s | |
587 | // kludged mass term | |
588 | *(1.0 + 2.0*ml*ml/s); | |
589 | ||
590 | prob = (f1sp + f2sp*u + f3sp*u*u)/ pow(mb,3); | |
591 | if ( prob < 0.0 ) prob=0.; | |
592 | ||
593 | return prob; | |
594 | } | |
595 | ||
596 | double EvtBtoXsllUtil::FermiMomentum(double pf) | |
597 | { | |
598 | // Pick a value for the b-quark Fermi motion momentum | |
599 | // according to Ali's Gaussian model | |
600 | ||
601 | double pb, pbmax, xbox, ybox; | |
602 | pb = 0.0; | |
603 | pbmax = 5.0 * pf; | |
604 | ||
605 | while (pb == 0.0) | |
606 | { | |
607 | xbox = EvtRandom::Flat(pbmax); | |
608 | ybox = EvtRandom::Flat(); | |
609 | if (ybox < FermiMomentumProb(xbox, pf)) { pb = xbox;} | |
610 | } | |
611 | ||
612 | return pb; | |
613 | } | |
614 | ||
615 | double EvtBtoXsllUtil::FermiMomentumProb(double pb, double pf) | |
616 | { | |
617 | // Compute probability according to Ali's Gaussian model | |
618 | // the function chosen has a convenient maximum value of 1 for pb = pf | |
619 | ||
620 | double prsq = (pb*pb)/(pf*pf); | |
621 | double prob = prsq * exp(1.0 - prsq); | |
622 | ||
623 | return prob; | |
624 | } | |
625 |