def dsigmadERdEb_bs(Eb, ER, v, mDM, sigma_nucleon): halo_model = hm.HaloModels() v_max = hm.v_max(halo_model.v_esc) if Eb > DMNR.mu_T(mDM) * v_max**2 / 2.: ret = 0. else: # X-ray form factor F_atomic = np.abs(f1_Ar(Eb / nu.keV) + 1j * f2_Ar(Eb / nu.keV)) ret = (4 * nu.alphaFS / (3 * np.pi * Eb) * ER / (DMNR.mT() * nu.c0**2) * F_atomic**2 * DMNR.dsigmadER(ER, v, mDM, sigma_nucleon)) return ret
def rate_NR(ER, mDM, sigma_nucleon): halo_model = hm.HaloModels() v_min = vmin_el(ER, mDM) v_max = hm.v_max(halo_model.v_esc) if v_min >= v_max: return 0 def integrand(v): return (dsigmadER(ER, v, mDM, sigma_nucleon) * v * halo_model.velocity_dist_SHM(v)) ret = halo_model.rho_DM / mDM / mT() * quad(integrand, v_min, v_max)[0] return ret
def rate_migdalN(Ne, mDM, sigma_nucleon, nstate): E = LAr.Eer(Ne) halo_model = hm.HaloModels() ME_rate = 0 for state, E_binding in Enl_migdal.items(): E_binding *= nu.eV if nstate == 1: if state[0] not in ['1']: continue elif nstate == 2: if state[0] not in ['2']: continue elif nstate == 3: if state[0] not in ['3']: continue elif nstate == 12: if state[0] not in ['1','2']: continue prob = interp1d(df_migdal['E'].values * nu.eV, df_migdal[state].values / nu.eV, bounds_error=False,fill_value=0) def diff_rate(v, ER): Ee = E - E_binding if Ee < 0: return 0 dsdER = DMNR.dsigmadER(ER, v, mDM, sigma_nucleon) SMHalo = halo_model.velocity_dist_SHM(v) #rescale the probability, see note added in 1707.07258 qe2 = (nu.me * (2 * ER / DMNR.mT())**0.5 / (nu.eV / nu.c0))**2 return (dsdER * v * SMHalo * qe2 / (2 * pi) * prob(Ee)) r = dblquad(diff_rate, 0, DMNR.Emax(mDM, hm.v_max(halo_model.v_esc), DMNR.mT()), lambda ER: vmin_ME(E, ER, mDM), lambda _: hm.v_max(halo_model.v_esc))[0] ME_rate += r rateE = halo_model.rho_DM / mDM / DMNR.mT() * ME_rate rateN = LAr.dEerdN(Ne)*rateE return rateN
def rate_bremsstrahlung(Eb, mDM, sigma_nucleon): halo_model = hm.HaloModels() rhoDM = halo_model.rho_DM v_min = vmin_bs(Eb, mDM) v_max = hm.v_max(halo_model.v_esc) if v_min >= v_max: return 0 def sigma(v): return (dsigmadEb(Eb, v, mDM, sigma_nucleon) * v * halo_model.velocity_dist_SHM(v)) ret = rhoDM / mDM / DMNR.mT() * quad(sigma,v_min,v_max)[0] return ret