Module flavio.physics.bdecays.bllgamma
Functions for the branching ratio of the leptonic decay $B_q\to\ell^+\ell^-\gamma$, where $q=d$ or $s$ and $\ell=e$, $\mu$ or $\tau$. The branching ratio is taken from hep-ph/0410146
Functions
def B10(s, par, B, ff, ff0, lep, wc)-
Expand source code
def B10(s, par, B, ff, ff0, lep, wc): flavio.citations.register("Melikhov:2004mk") flavio.citations.register("Guadagnoli:2016erb") F1 = getF1(s, par, B, ff, ff0, lep, wc) F2 = getF2(s, par, B, ff, ff0, lep, wc) mlh = par['m_'+lep]/par['m_'+B] label = meson_quark[B]+lep+lep return (s + 4*mlh**2)*(F1 + F2) - 8*mlh**2*abs(wc['C10_'+label])**2*(ff['v']**2+ff['a']**2) def B12(s, par, B, ff, ff0, lep, wc)-
Expand source code
def B12(s, par, B, ff, ff0, lep, wc): flavio.citations.register("Melikhov:2004mk") flavio.citations.register("Guadagnoli:2016erb") F1 = getF1(s, par, B, ff, ff0, lep, wc) F2 = getF2(s, par, B, ff, ff0, lep, wc) return s*(F1+F2) def B120(s, par, B, ff, ff0, lep, wc)-
Expand source code
def B120(s, par, B, ff, ff0, lep, wc): flavio.citations.register("Melikhov:2004mk") flavio.citations.register("Guadagnoli:2016erb") scale = config['renormalization scale']['bllgamma'] mb = running.get_mb(par, scale, nf_out=5) mbh = mb/par['m_'+B] mlh = par['m_'+lep]/par['m_'+B] bq = meson_quark[B] label = bq+lep+lep fftv, ffta = getfft(s, par, B, ff, ff0, lep, wc) return -16*mlh**2*(1-s)*(ff['v']*_Re(wc['C9_'+label]*_Co(wc['C10_'+label])) + 2*mbh/s*_Re(_Co(wc['C10_'+label])*fftv*wc['C7_'+bq])) def bllg_dbrdq2(q2, wc_obj, par, B, lep)-
Expand source code
def bllg_dbrdq2(q2, wc_obj, par, B, lep): if q2 >= 8.7 and q2 < 14 and lep != 'tau': warnings.warn("The predictions in the region of narrow charmonium resonances are not meaningful") if q2 >= 0.7 and q2 < 1.1: warnings.warn("Numerical integration in the region of phi, rho and omega resonances may be unreliable.") tauB = par['tau_'+B] ml = par['m_'+lep] mB = par['m_'+B] scale = config['renormalization scale']['bllgamma'] ff = get_ff(q2, par, B) ff0 = get_ff(0, par, B) label = meson_quark[B]+lep+lep wc = wctot_dict(wc_obj, label, scale, par) if q2 <= 4*ml**2 or q2 > mB**2: return 0 else: dBR = tauB * dGdsMN(q2/mB**2, par, B, ff, ff0, lep, wc) return dBR def bllg_dbrdq2_func(B, lep)-
Expand source code
def bllg_dbrdq2_func(B, lep): def fct(wc_obj, par, q2): return bllg_dbrdq2(q2, wc_obj, par, B, lep) return fct def bllg_dbrdq2_int(q2min, q2max, wc_obj, par, B, lep, epsrel=0.005)-
Expand source code
def bllg_dbrdq2_int(q2min, q2max, wc_obj, par, B, lep, epsrel=0.005): def obs(q2): return bllg_dbrdq2(q2, wc_obj, par, B, lep) return flavio.math.integrate.nintegrate(obs, q2min, q2max, epsrel=epsrel)/(q2max-q2min) def bllg_dbrdq2_int_func(B, lep)-
Expand source code
def bllg_dbrdq2_int_func(B, lep): def fct(wc_obj, par, q2min, q2max): return bllg_dbrdq2_int(q2min, q2max, wc_obj, par, B, lep) return fct def dG12dsMN(s, par, B, ff, ff0, lep, wc)-
Expand source code
def dG12dsMN(s, par, B, ff, ff0, lep, wc): flavio.citations.register("Melikhov:2004mk") mlh = par['m_'+lep]/par['m_'+B] pref = 4*prefactor(s, par, B, ff, lep, wc)*par['f_'+B]/par['m_'+B]*(1-s) return pref*atanh(sqrt(1-4*mlh**2/s))*B120(s, par, B, ff, ff0, lep, wc) def dG1dsMN(s, par, B, ff, ff0, lep, wc)-
Expand source code
def dG1dsMN(s, par, B, ff, ff0, lep, wc): flavio.citations.register("Melikhov:2004mk") mlh = par['m_'+lep]/par['m_'+B] pref = prefactor(s, par, B, ff, lep, wc)*(1-s)**3*sqrt(1-4*mlh**2/s) return pref*(B10(s, par, B, ff, ff0, lep, wc) + (s - 4*mlh**2)/(3*s)*B12(s, par, B, ff, ff0, lep, wc)) def dG2dsMN(s, par, B, ff, ff0, lep, wc)-
Expand source code
def dG2dsMN(s, par, B, ff, ff0, lep, wc): flavio.citations.register("Melikhov:2004mk") mlh = par['m_'+lep]/par['m_'+B] bq = meson_quark[B] label = bq+lep+lep pref = 16*prefactor(s, par, B, ff, lep, wc)*(par['f_'+B]/par['m_'+B]*abs(wc['C10_'+label])*mlh)**2/(1-s) return pref*(-8*sqrt(s-4*mlh**2)*sqrt(s)+4*atanh(sqrt(1-4*mlh**2/s))*(1+s-mlh**2*(1-s)**2)) def dGdsMN(s, par, B, ff, ff0, lep, wc)-
Expand source code
def dGdsMN(s, par, B, ff, ff0, lep, wc): return dG1dsMN(s, par, B, ff, ff0, lep, wc) + dG2dsMN(s, par, B, ff, ff0, lep, wc) + dG12dsMN(s, par, B, ff, ff0, lep, wc) def getF1(s, par, B, ff, ff0, lep, wc)-
Expand source code
def getF1(s, par, B, ff, ff0, lep, wc): flavio.citations.register("Melikhov:2004mk") scale = config['renormalization scale']['bllgamma'] mb = running.get_mb(par, scale, nf_out=5) mbh = mb/par['m_'+B] bq = meson_quark[B] label = bq+lep+lep fftv, ffta = getfft(s, par, B, ff, ff0, lep, wc) return (abs(wc['C9_'+label])**2 + abs(wc['C10_'+label])**2)*ff['v']**2 + 4*mbh**2/s**2*abs(wc['C7_'+bq]*fftv)**2 + 4*mbh/s*ff['v']*_Re(wc['C7_'+bq]*ffta*_Co(wc['C9_'+label])) def getF2(s, par, B, ff, ff0, lep, wc)-
Expand source code
def getF2(s, par, B, ff, ff0, lep, wc): flavio.citations.register("Melikhov:2004mk") scale = config['renormalization scale']['bllgamma'] mb = running.get_mb(par, scale, nf_out=5) mbh = mb/par['m_'+B] bq = meson_quark[B] label = bq+lep+lep fftv, ffta = getfft(s, par, B, ff, ff0, lep, wc) return (abs(wc['C9_'+label])**2 + abs(wc['C10_'+label])**2)*ff['a']**2 + 4*mbh**2/s**2*abs(wc['C7_'+bq]*ffta)**2 + 4*mbh/s*ff['a']*_Re(wc['C7_'+bq]*ffta*_Co(wc['C9_'+label])) def get_ff(q2, par, B)-
Expand source code
def get_ff(q2, par, B): return AuxiliaryQuantity['B->gamma form factor'].prediction(par_dict=par, wc_obj=None, q2=q2, B=B) def getfft(s, par, B, ff, ff0, lep, wc)-
Expand source code
def getfft(s, par, B, ff, ff0, lep, wc): scale = config['renormalization scale']['bllgamma'] mb = running.get_mb(par, scale, nf_out=5) bq = meson_quark[B] a1 = -wc['C1_'+bq]-wc['C2_'+bq]/3 #minus sign comes from WC sign convention fftv = ff['tv']+ff0['tv']+16/3*a1/wc['C7_'+bq]*par['f_'+B]/mb ffta = ff['ta']+ff0['ta'] #Add light meson resonances resonances = {'Bs': ['phi'], 'B0': ['rho0', 'omega']} flavio.citations.register("Kozachuk:2017mdk") fVtofVemfactors = {'phi': -1/3, 'rho0': 1/sqrt(2), 'omega': 1/(3*sqrt(2))} # Given in Sec. 8.A.3 of 1712.07926 #We use the general B->rho and B->omega parameters, hence the isotopic factors resgV = {('Bs','phi'): -par['Bs->phi BSZ a0_T1'], ('B0','rho0'): 1/sqrt(2)*par['B->rho BSZ a0_T1'], ('B0','omega'): -1/sqrt(2)*par['B->omega BSZ a0_T1'],} for V in resonances[B]: gV = resgV[(B, V)] fV = fVtofVemfactors[V]*par['f_'+V] fftv -= 2*fV*gV*par['m_'+B]**2*s/par['m_'+V]/(par['m_'+B]**2*s-par['m_'+V]**2+1j*par['m_'+V]/par['tau_'+V]) ffta -= 2*fV*gV*par['m_'+B]**2*s/par['m_'+V]/(par['m_'+B]**2*s-par['m_'+V]**2+1j*par['m_'+V]/par['tau_'+V]) return (fftv, ffta) def prefactor(s, par, B, ff, lep, wc)-
Expand source code
def prefactor(s, par, B, ff, lep, wc): GF = par['GF'] scale = config['renormalization scale']['bllgamma'] alphaem = running.get_alpha(par, scale)['alpha_e'] bq = meson_quark[B] xi_t = ckm.xi('t',bq)(par) return GF**2/(2**10*pi**4)*abs(xi_t)**2*alphaem**3*par['m_'+B]**5