Module flavio.physics.kdecays.kpilnu

Functions for $K\to \pi\ell\nu$ decays.

Functions

def BR_binned(q2min, q2max, wc_obj, par, K, P, lep)
Expand source code
def BR_binned(q2min, q2max, wc_obj, par, K, P, lep):
    def integrand(q2):
        return dBRdq2(q2, wc_obj, par, K, P, lep)
    return flavio.math.integrate.nintegrate(integrand, q2min, q2max)
def BR_tot(wc_obj, par, K, P, lep)
Expand source code
def BR_tot(wc_obj, par, K, P, lep):
    mK = par['m_'+K]
    mP = par['m_'+P]
    ml = par['m_'+lep]
    q2max = (mK-mP)**2
    q2min = ml**2
    return BR_binned(q2min, q2max, wc_obj, par, K, P, lep)
def BR_tot_function(K, P, lep)
Expand source code
def BR_tot_function(K, P, lep):
    return lambda wc_obj, par: BR_tot(wc_obj, par, K, P, lep)
def RT(wc_obj, par, lep)
Expand source code
def RT(wc_obj, par, lep):
    mK = par['m_KL']
    mP = par['m_pi+']
    scale = par['m_rho0']
    ms = flavio.physics.running.running.get_ms(par, scale)
    wc = flavio.physics.bdecays.wilsoncoefficients.get_wceff_fccc(wc_obj, par, 'su', lep, lep, ms, scale, nf=3)
    ff = get_ff(0, par, 'KL')
    BT = ff['fT'] * 2 * mK / (mK + mP)  # convert between tensor FF conventions
    return -2 * BT / ff['f+'] * wc['tp'].real
def RT_function(lep)
Expand source code
def RT_function(lep):
    def _(wc_obj, par):
        return RT(wc_obj, par, lep)
    return _
def dBRdq2(q2, wc_obj, par, K, P, lep)
Expand source code
def dBRdq2(q2, wc_obj, par, K, P, lep):
    ml = par['m_'+lep]
    mK = par['m_'+K]
    mP = par['m_'+P]
    if q2 < ml**2 or q2 > (mK-mP)**2:
        return 0
    tauK = par['tau_'+K]
    J = get_angularcoeff(q2, wc_obj, par, K, P, lep)
    if P == 'pi0':
        # factor of 1/2 for neutral pi due to pi = (uubar-ddbar)/sqrt(2)
        return tauK * dGdq2(J) / 2.
    if K == 'K+':
        deltaEM = par['K+' + lep + '3 delta_EM'] # e.g. 'K+e3 delta_EM'
    elif K == 'KL' or K == 'KS':
        deltaEM = par['K0' + lep + '3 delta_EM'] # e.g. 'K+e3 delta_EM'
    return tauK * dGdq2(J) * (1 + deltaEM)**2
def dGdq2(J)
Expand source code
def dGdq2(J):
    return 2 * (J['a'] + J['c']/3.)
def get_angularcoeff(q2, wc_obj, par, K, P, lep)
Expand source code
def get_angularcoeff(q2, wc_obj, par, K, P, lep):
    Jlist = [_get_angularcoeff(q2, wc_obj, par, K, P, lep, nu)
             for nu in ['e', 'mu', 'tau']]
    J = {}
    J['a'] = sum([JJ['a'] for JJ in Jlist])
    J['b'] = sum([JJ['b'] for JJ in Jlist])
    J['c'] = sum([JJ['c'] for JJ in Jlist])
    return J
def get_ff(q2, par, K)
Expand source code
def get_ff(q2, par, K):
    ff_name = 'K->pi form factor'
    ff_K0 = flavio.classes.AuxiliaryQuantity[ff_name].prediction(par_dict=par, wc_obj=None, q2=q2)
    if K == 'KL' or K == 'KS':
        return ff_K0
    elif K == 'K+':
        # isospin breaking correction for K+->pi0lnu: multiply all FFs by 1+delta
        return {k: (par['K->pi delta_K+pi0'] + 1)*v for k,v in ff_K0.items()}
def logC(wc_obj, par, lep)
Expand source code
def logC(wc_obj, par, lep):
    mK = par['m_KL']
    mP = par['m_pi+']
    ml = par['m_' + lep]
    q2 = mK**2 - mP**2
    ff = get_ff(q2, par, 'KL')
    ff0 = get_ff(0, par, 'KL')
    scale = par['m_rho0']
    ms = flavio.physics.running.running.get_ms(par, scale)
    wc = flavio.physics.bdecays.wilsoncoefficients.get_wceff_fccc(wc_obj, par, 'su', lep, lep, ms, scale, nf=3)
    A = ml / q2 * (wc['a'] + wc['ap']).real
    mu = 0  # mu/ms neglected
    C = ff['f0'] / ff0['f0'] * ((wc['p'] + wc['pp']).real / (ms + mu) + A) / A
    return log(C)
def logC_function(lep)
Expand source code
def logC_function(lep):
    def _(wc_obj, par):
        return logC(wc_obj, par, lep)
    return _