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 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 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 amplitudes(par, wc, B, l1, l2): r"""Amplitudes P and S entering the $B_q\to\ell_1^+\ell_2^-$ observables. Parameters ---------- - `par`: parameter dictionary - `B`: should be `'Bs'` or `'B0'` - `l1` and `l2`: should be `'e'`, `'mu'`, or `'tau'` Returns ------- `(P, S)` where for the special case `l1 == l2` one has - $P = \frac{2m_\ell}{m_{B_q}} (C_{10}-C_{10}') + m_{B_q} (C_P-C_P')$ - $S = m_{B_q} (C_S-C_S')$ """ scale = config['renormalization scale']['bll'] # masses ml1 = par['m_' + l1] ml2 = par['m_' + l2] mB = par['m_' + B] mb = running.get_mb(par, scale, nf_out=5) # get the mass of the spectator quark if B == 'Bs': mspec = running.get_ms(par, scale, nf_out=5) elif B == 'B0': mspec = running.get_md(par, scale, nf_out=5) # Wilson coefficients qqll = meson_quark[B] + l1 + l2 # For LFV expressions see arXiv:1602.00881 eq. (5) C9m = wc['C9_' + qqll] - wc['C9p_' + qqll] # only relevant for l1 != l2! C10m = wc['C10_' + qqll] - wc['C10p_' + qqll] CPm = wc['CP_' + qqll] - wc['CPp_' + qqll] CSm = wc['CS_' + qqll] - wc['CSp_' + qqll] beta_m = sqrt(1 - (ml1 - ml2)**2 / mB**2) beta_p = sqrt(1 - (ml1 + ml2)**2 / mB**2) P = beta_m * ((ml2 + ml1) / mB * C10m + mB * mb / (mb + mspec) * CPm) S = beta_p * ((ml2 - ml1) / mB * C9m + mB * mb / (mb + mspec) * CSm) return P, S
def amplitudes(par, wc, B, l1, l2): r"""Amplitudes P and S entering the $B_q\to\ell_1^+\ell_2^-$ observables. Parameters ---------- - `par`: parameter dictionary - `B`: should be `'Bs'` or `'B0'` - `l1` and `l2`: should be `'e'`, `'mu'`, or `'tau'` Returns ------- `(P, S)` where for the special case `l1 == l2` one has - $P = \frac{2m_\ell}{m_{B_q}} (C_{10}-C_{10}') + m_{B_q} (C_P-C_P')$ - $S = m_{B_q} (C_S-C_S')$ """ scale = config['renormalization scale']['bll'] # masses ml1 = par['m_'+l1] ml2 = par['m_'+l2] mB = par['m_'+B] mb = running.get_mb(par, scale, nf_out=5) # get the mass of the spectator quark if B=='Bs': mspec = running.get_ms(par, scale, nf_out=5) elif B=='B0': mspec = running.get_md(par, scale, nf_out=5) # Wilson coefficients qqll = meson_quark[B] + l1 + l2 # For LFV expressions see arXiv:1602.00881 eq. (5) C9m = wc['C9_'+qqll] - wc['C9p_'+qqll] # only relevant for l1 != l2! C10m = wc['C10_'+qqll] - wc['C10p_'+qqll] CPm = wc['CP_'+qqll] - wc['CPp_'+qqll] CSm = wc['CS_'+qqll] - wc['CSp_'+qqll] P = (ml2 + ml1)/mB * C10m + mB * mb/(mb + mspec) * CPm S = (ml2 - ml1)/mB * C9m + mB * mb/(mb + mspec) * CSm return P, S