Module flavio.physics.bdecays.bvgamma

Functions for exclusive $B\to V\gamma$ decays.

Functions

def ACP(wc_obj, par, B, V)
Expand source code
def ACP(wc_obj, par, B, V):
    a, a_bar = get_a_abar(wc_obj, par, B, V)
    return ( Gamma(a) - Gamma(a_bar) )/( Gamma(a) + Gamma(a_bar) )
def A_DeltaGamma(wc_obj, par, B, V)
Expand source code
def A_DeltaGamma(wc_obj, par, B, V):
    return S_A_complex(wc_obj, par, B, V).real
def BR(wc_obj, par, B, V)
Expand source code
def BR(wc_obj, par, B, V):
    tauB = par['tau_'+B]
    a, a_bar = get_a_abar(wc_obj, par, B, V)
    return tauB * Gamma_CPaverage(a, a_bar)
def BR_timeint(wc_obj, par, B, V)
Expand source code
def BR_timeint(wc_obj, par, B, V):
    A = A_DeltaGamma(wc_obj, par, B, V)
    BR0 = BR(wc_obj, par, B, V)
    y = par['DeltaGamma/Gamma_'+B]/2.
    return (1 - A*y)/(1-y**2) * BR0
def BVgamma_function(function, B, V)
Expand source code
def BVgamma_function(function, B, V):
    return lambda wc_obj, par: function(wc_obj, par, B, V)
def BVgamma_ratio_function(function_num, B_num, V_num, function_den, B_den, V_den)
Expand source code
def BVgamma_ratio_function(function_num, B_num, V_num, function_den, B_den, V_den):
    return lambda wc_obj, par: (
        function_num(wc_obj, par, B_num, V_num)
        /
        function_den(wc_obj, par, B_den, V_den)
    )
def Gamma(a)
Expand source code
def Gamma(a):
    return ( abs(a['L'])**2 + abs(a['R'])**2 )
def Gamma_CPaverage(a, a_bar)
Expand source code
def Gamma_CPaverage(a, a_bar):
    return ( Gamma(a) + Gamma(a_bar) )/2.
def S(wc_obj, par, B, V)
Expand source code
def S(wc_obj, par, B, V):
    return S_A_complex(wc_obj, par, B, V).imag
def S_A_complex(wc_obj, par, B, V)
Expand source code
def S_A_complex(wc_obj, par, B, V):
    a, a_bar = get_a_abar(wc_obj, par, B, V)
    q_over_p = mesonmixing.observables.q_over_p(wc_obj, par, B)
    beta = ckm.get_ckmangle_beta(par)
    den = Gamma_CPaverage(a, a_bar)
    # minus sign from different convention of q/p compared to Ball/Zwicky
    return -q_over_p * (a['L']*a_bar['L'].conj()+a['R']*a_bar['R'].conj())/den
def amps(*args, **kwargs)
Expand source code
def amps(*args, **kwargs):
    return add_dict((
        amps_ff(*args, cp_conjugate=False, **kwargs),
        amps_ss(*args, cp_conjugate=False, **kwargs),
        amps_subleading(*args, cp_conjugate=False, **kwargs),
        ))
def amps_bar(*args, **kwargs)
Expand source code
def amps_bar(*args, **kwargs):
    a = add_dict((
        amps_ff(*args, cp_conjugate=True, **kwargs),
        amps_ss(*args, cp_conjugate=True, **kwargs),
        amps_subleading(*args, cp_conjugate=True, **kwargs),
        ))
    return {'L': a['R'], 'R': a['L']}
def amps_ff(wc_obj, par_dict, B, V, cp_conjugate)
Expand source code
def amps_ff(wc_obj, par_dict, B, V, cp_conjugate):
    par = par_dict.copy()
    if cp_conjugate:
        par = conjugate_par(par)
    N = prefactor(par, B, V)
    bq = meson_quark[(B,V)]
    ff_name = meson_ff[(B,V)] + ' form factor'
    ff = AuxiliaryQuantity[ff_name].prediction(par_dict=par, wc_obj=None, q2=0.)
    scale = config['renormalization scale']['bvgamma']
    # these are the b->qee Wilson coefficients - they contain the b->qgamma ones as a subset
    wc = wctot_dict(wc_obj, bq+'ee', scale, par)
    if cp_conjugate:
        wc = conjugate_wc(wc)
    delta_C7 = flavio.physics.bdecays.matrixelements.delta_C7(par=par, wc=wc, q2=0, scale=scale, qiqj=bq)
    a = {}
    a['L'] = N * (wc['C7eff_'+bq] + delta_C7)  * ff['T1']
    a['R'] = N * wc['C7effp_'+bq] * ff['T1']
    return a
def amps_ss(wc_obj, par, B, V, cp_conjugate)
Expand source code
def amps_ss(wc_obj, par, B, V, cp_conjugate):
    scale = config['renormalization scale']['bvgamma']
    ss_name = B+'->'+V+'ll spectator scattering'
    q2=0.001 # away from zero to avoid pole
    amps = AuxiliaryQuantity[ss_name].prediction(par_dict=par, wc_obj=wc_obj, q2=q2, cp_conjugate=cp_conjugate)
    N = prefactor_helicityamps(q2, par, B, V)
    a = {}
    a['L'] = -N * amps[('mi' ,'V')]
    a['R'] = +N * amps[('pl' ,'V')]
    return a
def amps_subleading(wc_obj, par, B, V, cp_conjugate)
Expand source code
def amps_subleading(wc_obj, par, B, V, cp_conjugate):
    scale = config['renormalization scale']['bvgamma']
    sub_name = B+'->'+V+ 'll subleading effects at low q2'
    q2=0.001 # away from zero to avoid pole
    amps = AuxiliaryQuantity[sub_name].prediction(par_dict=par, wc_obj=wc_obj, q2=q2, cp_conjugate=cp_conjugate)
    N = prefactor_helicityamps(q2, par, B, V)
    a = {}
    a['L'] = -N * amps[('mi' ,'V')]
    a['R'] = +N * amps[('pl' ,'V')]
    return a
def get_a_abar(wc_obj, par, B, V)
Expand source code
def get_a_abar(wc_obj, par, B, V):
    scale = config['renormalization scale']['bvll']
    a = amps(wc_obj, par, B, V)
    a_bar = amps_bar(wc_obj, par, B, V)
    return a, a_bar
def prefactor(par, B, V)
Expand source code
def prefactor(par, B, V):
    mB = par['m_'+B]
    mV = par['m_'+V]
    scale = config['renormalization scale']['bvgamma']
    alphaem = running.get_alpha(par, scale)['alpha_e']
    mb = running.get_mb(par, scale)
    GF = par['GF']
    bq = meson_quark[(B,V)]
    xi_t = ckm.xi('t',bq)(par)
    return ( sqrt((GF**2 * alphaem * mB**3 * mb**2)/(32 * pi**4)
                  * (1-mV**2/mB**2)**3) * xi_t )
def prefactor_helicityamps(q2, par, B, V)
Expand source code
def prefactor_helicityamps(q2, par, B, V):
    N = prefactor(par, B, V)
    N_BVll = flavio.physics.bdecays.bvll.amplitudes.prefactor(q2, par, B, V)
    mB = par['m_'+B]
    mV = par['m_'+V]
    laB = flavio.physics.bdecays.common.lambda_K(mB**2, mV**2, q2)
    scale = config['renormalization scale']['bvgamma']
    mb = flavio.physics.running.running.get_mb(par, scale)
    return N/(+1j * mb/q2 * sqrt(laB) * 2)/N_BVll