Module flavio.physics.bdecays.bpnunu

Observables in $B\to P\nu\bar\nu$

Functions

def BRtot_summed(B, P)
Expand source code
def BRtot_summed(B, P):
    return lambda wc_obj, par: bpnunu_BRtot_summed(wc_obj, par, B, P)
def bpnunu_BRtot_summed(wc_obj, par, B, P)
Expand source code
def bpnunu_BRtot_summed(wc_obj, par, B, P):
    def obs(q2):
        return bpnunu_dbrdq2_summed(q2, wc_obj, par, B, P)
    mB = par['m_'+B]
    mP = par['m_'+P]
    q2max = (mB-mP)**2
    q2min = 0
    return flavio.math.integrate.nintegrate(obs, q2min, q2max)
def bpnunu_dbrdq2_int_summed(q2min, q2max, wc_obj, par, B, P)
Expand source code
def bpnunu_dbrdq2_int_summed(q2min, q2max, wc_obj, par, B, P):
    def obs(q2):
        return bpnunu_dbrdq2_summed(q2, wc_obj, par, B, P)
    return flavio.math.integrate.nintegrate(obs, q2min, q2max)/(q2max-q2min)
def bpnunu_dbrdq2_summed(q2, wc_obj, par, B, P)
Expand source code
def bpnunu_dbrdq2_summed(q2, wc_obj, par, B, P):
    tauB = par['tau_'+B]
    lep =  ['e', 'mu', 'tau']
    dbrdq2 = tauB * sum([ bpnunu_obs(flavio.physics.bdecays.bpll.dGdq2, q2, wc_obj, par, B, P, 'nu'+nu1, 'nu'+nu2)
            for nu1 in lep for nu2 in lep ])
    if P == 'pi0':
        # factor of 1/2 for neutral pi due to pi0 = (uubar-ddbar)/sqrt(2)
        return dbrdq2/2.
    else:
        return dbrdq2
def bpnunu_obs(function, q2, wc_obj, par, B, P, nu1, nu2)
Expand source code
def bpnunu_obs(function, q2, wc_obj, par, B, P, nu1, nu2):
    mB = par['m_'+B]
    mP = par['m_'+P]
    h = helicity_amps(q2, wc_obj, par, B, P, nu1, nu2)
    # below, mb is set to 4 just to save time. It doesn't enter at all as there
    # are no dipole operators.
    J = flavio.physics.bdecays.angular.angularcoeffs_general_p(h, q2, mB, mP, 4, 0, 0, 0)
    return function(J)
def dbrdq2_int_summed(B, P)
Expand source code
def dbrdq2_int_summed(B, P):
    def fct(wc_obj, par, q2min, q2max):
        return bpnunu_dbrdq2_int_summed(q2min, q2max, wc_obj, par, B, P)
    return fct
def dbrdq2_summed(B, P)
Expand source code
def dbrdq2_summed(B, P):
    def fct(wc_obj, par, q2):
        return bpnunu_dbrdq2_summed(q2, wc_obj, par, B, P)
    return fct
def get_ff(q2, par, B, P)
Expand source code
def get_ff(q2, par, B, P):
    ff_name = flavio.physics.bdecays.common.meson_ff[(B,P)] + ' form factor'
    return flavio.classes.AuxiliaryQuantity[ff_name].prediction(par_dict=par, wc_obj=None, q2=q2)
def helicity_amps(q2, wc_obj, par, B, P, nu1, nu2)
Expand source code
def helicity_amps(q2, wc_obj, par, B, P, nu1, nu2):
    scale = flavio.config['renormalization scale']['bpll']
    label = flavio.physics.bdecays.common.meson_quark[(B,P)] + nu1 + nu2 # e.g. bsnuenue, bdnutaunumu
    wc = wc_obj.get_wc(label, scale, par)
    if nu1 == nu2: # add the SM contribution if neutrino flavours coincide
        wc['CL_'+label] += flavio.physics.bdecays.wilsoncoefficients.CL_SM(par, scale)
    mB = par['m_'+B]
    mP = par['m_'+P]
    N = prefactor(q2, par, B, P)
    ff = get_ff(q2, par, B, P)
    wc_eff = flavio.physics.bdecays.wilsoncoefficients.get_wceff_nunu(q2, wc, par, B, P, nu1, nu2, scale)
    # below, mb is set to 4 just to save time. It doesn't enter at all as there
    # are no dipole operators.
    h = flavio.physics.bdecays.angular.helicity_amps_p(q2, mB, mP, 4, 0, 0, 0, ff, wc_eff, N)
    return h
def prefactor(q2, par, B, P)
Expand source code
def prefactor(q2, par, B, P):
    GF = par['GF']
    scale = flavio.config['renormalization scale']['bpll']
    alphaem = flavio.physics.running.running.get_alpha(par, scale)['alpha_e']
    di_dj = flavio.physics.bdecays.common.meson_quark[(B,P)]
    xi_t = flavio.physics.ckm.xi('t',di_dj)(par)
    return 4*GF/sqrt(2)*xi_t*alphaem/(4*pi)