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 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)))
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))
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) ))
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
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 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) ))
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): 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 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])
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)))
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))
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))
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), ))