Exemple #1
0
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']}
Exemple #2
0
def helicity_amps(q2, wc_obj, par, B, P, l1, l2):
    if l1 != l2:
        return helicity_amps_ff(q2,
                                wc_obj,
                                par,
                                B,
                                P,
                                l1,
                                l2,
                                cp_conjugate=False)
    else:
        if q2 >= 8.7 and q2 < 14:
            warnings.warn(
                "The predictions in the region of narrow charmonium resonances are not meaningful"
            )
        return add_dict((helicity_amps_ff(q2,
                                          wc_obj,
                                          par,
                                          B,
                                          P,
                                          l1,
                                          l2,
                                          cp_conjugate=False),
                         get_subleading(q2,
                                        wc_obj,
                                        par,
                                        B,
                                        P,
                                        l1,
                                        cp_conjugate=False)))
Exemple #3
0
def wctot_dict(wc_obj, sector, scale, par, nf_out=None):
    r"""Get a dictionary with the total (SM + new physics) values  of the
    $\Delta F=1$ Wilson coefficients at a given scale, given a
    WilsonCoefficients instance."""
    wc_np_dict = wc_obj.get_wc(sector, scale, par, nf_out=nf_out)
    wcsm_120 = _wcsm_120.copy()
    wc_sm = running.get_wilson(par, wcsm_120, wc_obj.rge_derivative[sector], 120., scale, nf_out=nf_out)
    # now here comes an ugly fix. If we have b->s transitions, we should take
    # into account the fact that C7' = C7*ms/mb, and the same for C8, which is
    # not completely negligible. To find out whether we have b->s, we look at
    # the "sector" string.
    if sector[:2] == 'bs':
        # go from the effective to the "non-effective" WCs
        yi = np.array([0, 0, -1/3., -4/9., -20/3., -80/9.])
        zi = np.array([0, 0, 1, -1/6., 20, -10/3.])
        c7 = wc_sm[6] - np.dot(yi, wc_sm[:6]) # c7 (not effective!)
        c8 = wc_sm[7] - np.dot(zi, wc_sm[:6]) # c8 (not effective!)
        eps_s = running.get_ms(par, scale)/running.get_mb(par, scale)
        c7p = eps_s * c7
        c8p = eps_s * c8
        # go back to the effective WCs
        wc_sm[21] = c7p + np.dot(yi, wc_sm[15:21]) # c7p_eff
        wc_sm[22] = c7p + np.dot(zi, wc_sm[15:21]) # c8p_eff
    wc_labels = wc_obj.coefficients[sector]
    wc_sm_dict =  dict(zip(wc_labels, wc_sm))
    return add_dict((wc_np_dict, wc_sm_dict))
def get_transverity_amps(q2, wc_obj, par, lep, cp_conjugate):
    if q2 >= 8.7 and q2 < 14:
        warnings.warn("The predictions in the region of narrow charmonium resonances are not meaningful")
    return add_dict((
        get_transverity_amps_ff(q2, wc_obj, par, lep, cp_conjugate),
        get_subleading(q2, wc_obj, par, cp_conjugate)
        ))
def wctot_dict(wc_obj, sector, scale, par, nf_out=None):
    r"""Get a dictionary with the total (SM + new physics) values  of the
    $\Delta F=1$ Wilson coefficients at a given scale, given a
    WilsonCoefficients instance."""
    wc_np_dict = wc_obj.get_wc(sector, scale, par, nf_out=nf_out)
    wcsm_120 = _wcsm_120.copy()
    # fold in approximate m_t-dependence of C_10 (see eq. 4 of arXiv:1311.0903)
    wcsm_120[9] = wcsm_120[9] * (par['m_t'] / 173.1)**1.53
    wc_sm = running.get_wilson(par,
                               wcsm_120,
                               wc_obj.rge_derivative[sector],
                               120.,
                               scale,
                               nf_out=nf_out)
    # now here comes an ugly fix. If we have b->s transitions, we should take
    # into account the fact that C7' = C7*ms/mb, and the same for C8, which is
    # not completely negligible. To find out whether we have b->s, we look at
    # the "sector" string.
    if sector[:2] == 'bs':
        # go from the effective to the "non-effective" WCs
        yi = np.array([0, 0, -1 / 3., -4 / 9., -20 / 3., -80 / 9.])
        zi = np.array([0, 0, 1, -1 / 6., 20, -10 / 3.])
        c7 = wc_sm[6] - np.dot(yi, wc_sm[:6])  # c7 (not effective!)
        c8 = wc_sm[7] - np.dot(zi, wc_sm[:6])  # c8 (not effective!)
        eps_s = running.get_ms(par, scale) / running.get_mb(par, scale)
        c7p = eps_s * c7
        c8p = eps_s * c8
        # go back to the effective WCs
        wc_sm[21] = c7p + np.dot(yi, wc_sm[15:21])  # c7p_eff
        wc_sm[22] = c8p + np.dot(zi, wc_sm[15:21])  # c8p_eff
    wc_labels = wc_obj.coefficients[sector]
    wc_sm_dict = dict(zip(wc_labels, wc_sm))
    return add_dict((wc_np_dict, wc_sm_dict))
Exemple #6
0
def helicity_amps_bar(q2, wc_obj, par, B, P, 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")
    return add_dict((
        helicity_amps_ff(q2, wc_obj, par, B, P, lep, cp_conjugate=True),
        get_subleading(q2, wc_obj, par, B, P, lep, cp_conjugate=True)
        ))
Exemple #7
0
def wctot_dict(wc_obj, sector, scale, par, nf_out=5):
    r"""Get a dictionary with the total (SM + new physics) values  of the
    $\Delta F=1$ Wilson coefficients at a given scale, given a
    WilsonCoefficients instance."""
    wc_np_dict = wc_obj.get_wc(sector, scale, par, nf_out=nf_out)
    if nf_out == 5:
        wc_sm = wcsm_nf5(scale)
    else:
        raise NotImplementedError(
            "DeltaF=1 Wilson coefficients only implemented for B physics")
    # fold in approximate m_t-dependence of C_10 (see eq. 4 of arXiv:1311.0903)
    flavio.citations.register("Bobeth:2013uxa")
    wc_sm[9] = wc_sm[9] * (par['m_t'] / 173.1)**1.53
    # go from the effective to the "non-effective" WCs for C7 and C8
    yi = np.array([0, 0, -1 / 3., -4 / 9., -20 / 3., -80 / 9.])
    zi = np.array([0, 0, 1, -1 / 6., 20, -10 / 3.])
    wc_sm[6] = wc_sm[6] - np.dot(yi, wc_sm[:6])  # c7 (not effective!)
    wc_sm[7] = wc_sm[7] - np.dot(zi, wc_sm[:6])  # c8 (not effective!)
    wc_labels = fcnclabels[sector]
    wc_sm_dict = dict(zip(wc_labels, wc_sm))
    # now here comes an ugly fix. If we have b->s transitions, we should take
    # into account the fact that C7' = C7*ms/mb, and the same for C8, which is
    # not completely negligible. To find out whether we have b->s, we look at
    # the "sector" string.
    if sector[:2] == 'bs':
        eps_s = running.get_ms(par, scale) / running.get_mb(par, scale)
        wc_sm_dict['C7p_bs'] = eps_s * wc_sm_dict['C7_bs']
        wc_sm_dict['C8p_bs'] = eps_s * wc_sm_dict['C8_bs']
    tot_dict = add_dict((wc_np_dict, wc_sm_dict))
    # add C7eff(p) and C8eff(p)
    tot_dict.update(get_C78eff(tot_dict, sector[:2]))
    return tot_dict
Exemple #8
0
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 get_transverity_amps(q2, wc_obj, par, lep, cp_conjugate):
    if q2 >= 8.7 and q2 < 14:
        warnings.warn(
            "The predictions in the region of narrow charmonium resonances are not meaningful"
        )
    return add_dict((get_transverity_amps_ff(q2, wc_obj, par, lep,
                                             cp_conjugate),
                     get_subleading(q2, wc_obj, par, cp_conjugate)))
Exemple #10
0
def helicity_amps(q2, ff, wc_obj, par, B, V, lep):
    if q2 >= 8.7 and q2 < 14:
        warnings.warn("The predictions in the region of narrow charmonium resonances are not meaningful")
    return add_dict((
        helicity_amps_ff(q2, ff, wc_obj, par, B, V, lep, cp_conjugate=False),
        get_ss(q2, wc_obj, par, B, V, cp_conjugate=False),
        get_subleading(q2, wc_obj, par, B, V, cp_conjugate=False)
        ))
Exemple #11
0
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),
        )
    )
Exemple #12
0
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"]}
Exemple #13
0
def helicity_amps_deltaC7C7p_polynomial(q2, par, B, V):
    deltaC7_0   =( par[B+'->'+V+' deltaC7 a_0 Re']  + par[B+'->'+V+' deltaC7 b_0 Re'] *q2
             +1j*( par[B+'->'+V+' deltaC7 a_0 Im']  + par[B+'->'+V+' deltaC7 b_0 Im'] *q2 ))
    deltaC7p_pl  =( par[B+'->'+V+' deltaC7p a_+ Re']  + par[B+'->'+V+' deltaC7p b_+ Re'] *q2
             +1j*( par[B+'->'+V+' deltaC7p a_+ Im']  + par[B+'->'+V+' deltaC7p b_+ Im'] *q2 ))
    deltaC7_mi  =( par[B+'->'+V+' deltaC7 a_- Re']  + par[B+'->'+V+' deltaC7 b_- Re'] *q2
             +1j*( par[B+'->'+V+' deltaC7 a_- Im']  + par[B+'->'+V+' deltaC7 b_- Im'] *q2 ))
    deltaC7_dict = { ('0','V'): deltaC7_0, ('pl','V'): 0, ('mi','V'): deltaC7_mi }
    deltaC7p_dict = { ('0','V'): 0, ('pl','V'): deltaC7p_pl, ('mi','V'): 0 }
    ha_deltaC7 = helicity_amps_deltaC7(q2, deltaC7_dict, par, B, V)
    ha_deltaC7p = helicity_amps_deltaC7p(q2, deltaC7p_dict, par, B, V)
    return add_dict([ha_deltaC7, ha_deltaC7p])
Exemple #14
0
def helicity_amps_bar(q2, wc_obj, par, B, V, lep):
    if q2 >= 8.7 and q2 < 14:
        warnings.warn(
            "The predictions in the region of narrow charmonium resonances are not meaningful"
        )
    return add_dict((helicity_amps_ff(q2,
                                      wc_obj,
                                      par,
                                      B,
                                      V,
                                      lep,
                                      cp_conjugate=True),
                     get_ss(q2, wc_obj, par, B, V, cp_conjugate=True),
                     get_subleading(q2, wc_obj, par, B, V, cp_conjugate=True)))
Exemple #15
0
def get_wc(wc_obj, par, l1, l2):
    scale = config['renormalization scale']['kdecays']
    label = 'sd' + l1 + l2
    wcnp = wc_obj.get_wc(label, scale, par)
    if l1 == l2:
        # include SM contributions for LF conserving decay
        _c = wilsoncoefficients_sm_sl(par, scale)
        xi_t = ckm.xi('t', 'sd')(par)
        xi_c = ckm.xi('c', 'sd')(par)
        wcsm = {'C10_sd' + l1 + l2: _c['C10_t'] + xi_c / xi_t * _c['C10_c']}
    else:
        wcsm = {}

    return add_dict((wcsm, wcnp))
Exemple #16
0
def get_wc(wc_obj, par, l1, l2):
    scale = config['renormalization scale']['kdecays']
    label = 'sd' + l1 + l2
    wcnp = wc_obj.get_wc(label, scale, par)
    if l1 == l2:
        # include SM contributions for LF conserving decay
        _c = wilsoncoefficients_sm_sl(par, scale)
        xi_t = ckm.xi('t', 'sd')(par)
        xi_c = ckm.xi('c', 'sd')(par)
        wcsm = {'C10_sd' + l1 + l2: _c['C10_t'] + xi_c / xi_t * _c['C10_c']}
    else:
        wcsm = {}

    return add_dict((wcsm, wcnp))
Exemple #17
0
def get_wc(wc_obj, par, l1, l2):
    scale = config['renormalization scale']['kdecays']
    if l1 == l2:   # (l1,l2) == ('e','e') or ('mu','mu')
        label = 'sd' + l1 + l2
        wcnp = wc_obj.get_wc(label, scale, par)
        # include SM contributions for LF conserving decay
        _c = wilsoncoefficients_sm_sl(par, scale)
        xi_t = ckm.xi('t', 'sd')(par)
        xi_c = ckm.xi('c', 'sd')(par)
        wcsm = {'C10_sd' + l1 + l2: _c['C10_t'] + xi_c / xi_t * _c['C10_c']}
    elif {l1,l2} == {'e','mu'}:
        # Both flavor combinations relevant due to K0-K0bar mixing
        wcnp = {**wc_obj.get_wc('sdemu', scale, par),
                **wc_obj.get_wc('sdmue', scale, par)}
        wcsm = {}

    return add_dict((wcsm, wcnp))
Exemple #18
0
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),
        ))