Module flavio.physics.bdecays.bvll.subleading

Functions to parametrize subleading hadronic effects in $B\to V\ell^+\ell^-$ decays.

Functions

def fct_deltaC7C7p_polynomial(B, V)
Expand source code
def fct_deltaC7C7p_polynomial(B, V):
    def fct(wc_obj, par_dict, q2, cp_conjugate):
        par = par_dict.copy()
        return HelicityAmpsDeltaC_77p_polynomial(B, V, par, q2)()
    return fct
def fct_deltaC9_constant(B, V)
Expand source code
def fct_deltaC9_constant(B, V):
    def fct(wc_obj, par_dict, q2, cp_conjugate):
        par = par_dict.copy()
        return HelicityAmpsDeltaC_9_shift(B, V, par, q2)()
    return fct

Classes

class HelicityAmpsDeltaC (B, V, par, q2)
Expand source code
class HelicityAmpsDeltaC(object):
    r"""Base Class for functions returning the shift of helcity amps for a
    shift in Wilson coefficients. Facilitates caching.

    This can be used to parametrize residual uncertainties due to subleading
    non-factorizable hadronic effects."""

    def __init__(self, B, V, par, q2):
        """Initialize the class and cache results needed more often."""
        self.B = B
        self.V = V
        self.q2 = q2
        self.par = par
        self.prefactor = flavio.physics.bdecays.bvll.amplitudes.prefactor(None, self.par, B, V)
        self.scale = config['renormalization scale']['bvll']
        self.mb = flavio.physics.running.running.get_mb(par, self.scale)
        self.mB = par['m_'+B]
        self.mV = par['m_'+V]
        self.ff = flavio.physics.bdecays.bvll.amplitudes.get_ff(self.q2, self.par, self.B, self.V)

    def ha_deltaC(self, deltaC, C_name):
        wc  = {'7': 0, '7p': 0, 'v': 0, 'a': 0, 's': 0, 'p': 0,
               't': 0,'vp': 0, 'ap': 0, 'sp': 0, 'pp': 0, 'tp': 0, }
        wc[C_name] = deltaC
        return flavio.physics.bdecays.angular.helicity_amps_v(self.q2,
                    self.mB, self.mV, self.mb, 0,
                    0, 0,  # ml=0 as this only affects scalar contributions
                    self.ff, wc, self.prefactor)

Base Class for functions returning the shift of helcity amps for a shift in Wilson coefficients. Facilitates caching.

This can be used to parametrize residual uncertainties due to subleading non-factorizable hadronic effects.

Initialize the class and cache results needed more often.

Subclasses

Methods

def ha_deltaC(self, deltaC, C_name)
Expand source code
def ha_deltaC(self, deltaC, C_name):
    wc  = {'7': 0, '7p': 0, 'v': 0, 'a': 0, 's': 0, 'p': 0,
           't': 0,'vp': 0, 'ap': 0, 'sp': 0, 'pp': 0, 'tp': 0, }
    wc[C_name] = deltaC
    return flavio.physics.bdecays.angular.helicity_amps_v(self.q2,
                self.mB, self.mV, self.mb, 0,
                0, 0,  # ml=0 as this only affects scalar contributions
                self.ff, wc, self.prefactor)
class HelicityAmpsDeltaC_77p_polynomial (*args, **kwargs)
Expand source code
class HelicityAmpsDeltaC_77p_polynomial(HelicityAmpsDeltaC):
    r"""Helicity amps from an effective shift in the Wilson coefficients
    $C_7$ (for the 0 and $-$ amplitudes) and $C_7'$ (for the $+$) amplitude
    as a polynomial in $q^2$."""
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    # Temporary backward-compatibility shim for the old deltaC7/deltaC7p
    # parameter names. This method and the old parameter names will be
    # removed in a future version of flavio.
    @staticmethod
    def _migrate_old_params(par, mb, mB):
        """If old-style deltaC7/deltaC7p parameters are found in par,
        rescale them to the new delta_C7/delta_C7p convention and warn."""
        for old_key in _OLD_DELTAC7_KEYS & par.keys():
            new_key, coeff_type = _OLD_DELTAC7_MAP[old_key]
            if coeff_type == 'a':
                par[new_key] = par[old_key] * 2 * mb / mB
            else:
                par[new_key] = par[old_key] * 2 * mb * mB
            warnings.warn(
                "Parameter '{}' uses the old convention and has "
                "been rescaled and written to '{}', overwriting "
                "any existing value. Support for the old parameter "
                "names will be removed in a future version of "
                "flavio. Please update to the new delta_C7/"
                "delta_C7p parameterization introduced in "
                "flavio v2.7."
                .format(old_key, new_key),
                FutureWarning
            )

    def __call__(self):
        if _OLD_DELTAC7_KEYS & self.par.keys():
            self._migrate_old_params(self.par, self.mb, self.mB)
        par = self.par
        B = self.B
        V = self.V
        q2 = self.q2
        mB = self.mB
        mb = self.mb
        deltaC7_0   =( par[B+'->'+V+' delta_C7 a_0 Re']  + par[B+'->'+V+' delta_C7 b_0 Re']  *q2/mB**2
                 +1j*( par[B+'->'+V+' delta_C7 a_0 Im']  + par[B+'->'+V+' delta_C7 b_0 Im']  *q2/mB**2 )) *mB/(2*mb)
        deltaC7p_pl =( par[B+'->'+V+' delta_C7p a_+ Re'] + par[B+'->'+V+' delta_C7p b_+ Re'] *q2/mB**2
                 +1j*( par[B+'->'+V+' delta_C7p a_+ Im'] + par[B+'->'+V+' delta_C7p b_+ Im'] *q2/mB**2 )) *mB/(2*mb)
        deltaC7_mi  =( par[B+'->'+V+' delta_C7 a_- Re']  + par[B+'->'+V+' delta_C7 b_- Re']  *q2/mB**2
                 +1j*( par[B+'->'+V+' delta_C7 a_- Im']  + par[B+'->'+V+' delta_C7 b_- Im']  *q2/mB**2 )) *mB/(2*mb)
        ha = {}
        ha['0', 'V'] = self.ha_deltaC(deltaC7_0, '7')['0', 'V']
        ha['pl', 'V'] = self.ha_deltaC(deltaC7p_pl, '7p')['pl', 'V']
        ha['mi', 'V'] = self.ha_deltaC(deltaC7_mi, '7')['mi', 'V']
        return ha

Helicity amps from an effective shift in the Wilson coefficients $C_7$ (for the 0 and $-$ amplitudes) and $C_7'$ (for the $+$) amplitude as a polynomial in $q^2$.

Initialize the class and cache results needed more often.

Ancestors

class HelicityAmpsDeltaC_9_shift (*args, **kwargs)
Expand source code
class HelicityAmpsDeltaC_9_shift(HelicityAmpsDeltaC):
    r"""Helicity amps from an effective $q^2$-independent shift in the Wilson
    coefficients."""
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def __call__(self):
        par = self.par
        B = self.B
        V = self.V
        deltaC9_0   = par[B+'->'+V+' deltaC9 c_0 Re'] + 1j*par[B+'->'+V+' deltaC9 c_0 Im']
        deltaC9_pl   = par[B+'->'+V+' deltaC9 c_+ Re'] + 1j*par[B+'->'+V+' deltaC9 c_+ Im']
        deltaC9_mi   = par[B+'->'+V+' deltaC9 c_- Re'] + 1j*par[B+'->'+V+' deltaC9 c_- Im']
        ha = {}
        ha['0', 'V'] = self.ha_deltaC(deltaC9_0, 'v')['0', 'V']
        ha['pl', 'V'] = self.ha_deltaC(deltaC9_pl, 'v')['pl', 'V']
        ha['mi', 'V'] = self.ha_deltaC(deltaC9_mi, 'v')['mi', 'V']
        return ha

Helicity amps from an effective $q^2$-independent shift in the Wilson coefficients.

Initialize the class and cache results needed more often.

Ancestors