Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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