Beispiel #1
0
def test_illustris():

    zs = np.linspace(0., 3., 4)
    ms = np.geomspace(1e8, 1e16, 1000)
    ks = np.geomspace(1e-2, 30, 1001)

    hcos = hmvec.HaloModel(zs,
                           ks,
                           ms=ms,
                           halofit=None,
                           mdef='vir',
                           nfw_numeric=False)
    hcos.add_battaglia_profile("electron", family="AGN", xmax=50, nxs=30000)
    pee = hcos.get_power("electron")
    pnn = hcos.get_power("nfw")
    pne = hcos.get_power("nfw", "electron")

    p1 = hcos.total_matter_power_spectrum(pnn, pne, pee)
    p0 = pnn

    h = hcos.h
    from matplotlib import cm
    pl = io.Plotter(xyscale='loglin',
                    xlabel='$k$ (h/Mpc)',
                    ylabel='$\\Delta P / P$')
    for i in range(zs.size):
        pl.add(ks / h,
               p1[i] / p0[i],
               color=cm.Reds(np.linspace(0.3, 0.95, zs.size)[i]))
    pl.vline(x=10.)
    pl.hline(y=1.)
    pl._ax.set_ylim(0.68, 1.04)
    pl._ax.set_xlim(0.08, 25)
    pl.done("illustris_comp.png")
Beispiel #2
0
def test_hod_bisection():

    zs = np.linspace(0., 3., 3)  #np.array([0.])
    ks = np.geomspace(1e-4, 100, 100)
    ms = np.geomspace(1e7, 1e17, 2000)
    hcos = hmvec.HaloModel(zs, ks, ms, nfw_numeric=False)
    hcos.add_hod("g", ngal=np.array([1e-3, 1e-4, 1e-5]), corr="max")
Beispiel #3
0
def test_mcon():

    zs = np.linspace(0., 1., 30)
    ks = np.geomspace(1e-4, 1, 10)
    hcos = hmvec.HaloModel(zs, ks, params={'sigma2_numks': 100}, skip_nfw=True)

    ms = np.geomspace(1e13, 1e15, 1000)
    cs = hmvec.duffy_concentration(ms[None, :], zs[:, None])

    rho1s = hcos.rho_matter_z(zs)
    rho2s = hcos.rho_critical_z(zs)

    with bench.show("vectorized"):
        mcritzs0 = hmvec.mdelta_from_mdelta(ms,
                                            cs,
                                            200. * rho1s,
                                            200. * rho2s,
                                            vectorized=True)
    with bench.show("unvectorized"):
        mcritzs1 = hmvec.mdelta_from_mdelta(ms,
                                            cs,
                                            200. * rho1s,
                                            200. * rho2s,
                                            vectorized=False)

    from orphics import io
    io.plot_img(np.log10(ms[None] + cs * 0.), flip=False)
    io.plot_img(np.log10(mcritzs0), flip=False)
    io.plot_img((mcritzs0 - mcritzs1) / mcritzs0, flip=False)
Beispiel #4
0
def test_hod():

    zs = np.linspace(0., 3., 3)  #np.array([0.])
    ks = np.geomspace(1e-4, 100, 100)
    ms = np.geomspace(1e7, 1e17, 2000)
    hcos = hmvec.HaloModel(zs, ks, ms, nfw_numeric=False)
    hcos.add_hod("g", mthresh=10**10.5 + zs * 0., corr="max")

    pl = io.Plotter(xyscale='loglog')
    for i in range(zs.size):
        pl.add(ms, hcos.hods['g']['Nc'][i])
        pl.add(ms, hcos.hods['g']['Ns'][i], ls='--')
    pl._ax.set_ylim(1e-1, 2e3)
    pl.done()

    hcos.add_battaglia_profile("electron", family="AGN", xmax=50, nxs=30000)

    pmm = hcos.get_power_1halo(name="nfw") + hcos.get_power_2halo(name="nfw")
    pee = hcos.get_power_1halo(name="electron") + hcos.get_power_2halo(
        name="electron")
    pgg = hcos.get_power_2halo(name="g") + hcos.get_power_1halo(name="g")
    pge = hcos.get_power_1halo("g", "electron") + hcos.get_power_2halo(
        "g", "electron")
    #sys.exit()
    bg = hcos.hods['g']['bg']
    for i in range(zs.size):
        pl = io.Plotter(xyscale='loglog')
        pl.add(ks, pmm[i] * bg[i]**2., label='bg^2 Pmm')
        pl.add(ks, pmm[i], label='Pmm')
        pl.add(ks, pgg[i], label='Pgg', ls="--")
        pl.add(ks, pee[i], label='Pee')
        pl.add(ks, pge[i], label='Pge')
        pl.done()
Beispiel #5
0
def test_illustris():
    
    zs = np.linspace(0.,3.,4)[:1]
    ms = np.geomspace(1e8,1e16,1000)
    ks = np.geomspace(1e-2,30,1001)

    hcos = hmvec.HaloModel(zs,ks,ms=ms,halofit=None,mdef='vir',nfw_numeric=False)
    hcos.add_battaglia_profile("electron",family="AGN",xmax=50,nxs=30000)
    pee = hcos.get_power("electron")
    pnn = hcos.get_power("nfw")
    pne = hcos.get_power("nfw","electron")

    p1 = hcos.total_matter_power_spectrum(pnn,pne,pee)
    p0 = pnn

    

    h = hcos.h
    from matplotlib import cm
    pl = io.Plotter(xyscale='loglin',xlabel='$k$ (h/Mpc)',ylabel='$\\Delta P / P$')
    for i in range(zs.size):
        pl.add(ks/h,p1[i]/p0[i],color=cm.Reds(np.linspace(0.3,0.95,zs.size)[::-1][i]),label='hmvec + Battaglia')
    ok,od = np.loadtxt("data/schneider_horizon_agn.csv",delimiter=',',unpack=True)
    pl.add(ok,od,lw=2,color='k',label='Horizon AGN')
    ok,od = np.loadtxt("data/schneider_owls.csv",delimiter=',',unpack=True)
    pl.add(ok,od,lw=2,color='k',ls='--',label='OWLS')
    pl.vline(x=10.)
    pl.hline(y=1.)
    pl._ax.set_ylim(0.68,1.04)
    pl._ax.set_xlim(0.08,25)
    pl.done("illustris_comp.png")
Beispiel #6
0
def test_gas_fft():

    zs = np.array([0.6, 1.0])
    ks = np.geomspace(1e-4, 100, 100)
    ms = np.geomspace(1e7, 1e17, 2000)
    hcos = hmvec.HaloModel(zs, ks, ms, nfw_numeric=False)
    hcos.add_battaglia_profile("electron", family="AGN", xmax=50, nxs=30000)
    # hcos.add_nfw_profile("electron",numeric=False)

    pmm_1h = hcos.get_power_1halo(name="nfw")
    pmm_2h = hcos.get_power_2halo(name="nfw")

    pee_1h = hcos.get_power_1halo(name="electron")
    pee_2h = hcos.get_power_2halo(name="electron")

    pme_1h = hcos.get_power_1halo("nfw", "electron")
    pme_2h = hcos.get_power_2halo("nfw", "electron")

    pem_1h = hcos.get_power_1halo("electron", "nfw")
    pem_2h = hcos.get_power_2halo("electron", "nfw")

    # pl = io.Plotter(xyscale='loglog')
    # pl.add(ks,pee_1h[0]/pmm_1h[0])
    # pl._ax.set_xlim(0.1,100)
    # pl.done()

    # pl = io.Plotter(xyscale='loglog')
    # pl.add(ks,pmm_1h[0]+pmm_2h[0])
    # pl.add(ks,pee_1h[0]+pee_2h[0],ls='--')
    # pl.add(ks,pme_1h[0]+pme_2h[0],ls='-.')
    # pl.add(ks,pem_1h[0]+pem_2h[0],ls='-')
    # pl.done()

    omtoth2 = hcos.p['omch2'] + hcos.p['ombh2']
    fc = hcos.p['omch2'] / omtoth2
    fb = hcos.p['ombh2'] / omtoth2

    pl = io.Plotter(xyscale='loglin',
                    xlabel='$k \\mathrm{Mpc}^{-1}$',
                    ylabel='$P_{mm}^{\\rm{fb}}/P_{mm}^{\\rm{no-fb}}$')
    for i in range(zs.size):
        Pnn = pmm_1h[i] + pmm_2h[i]
        Pee = pee_1h[i] + pee_2h[i]
        Pne = pme_1h[i] + pme_2h[i]
        Pmm = fc**2. * Pnn + 2. * fc * fb * Pne + fb * fb * Pee
        pl.add(ks, Pmm / Pnn)
    pl.hline(y=1)
    pl.done("feedback.pdf")
Beispiel #7
0
def test_pgm():

    import halomodel as mmhm
    from orphics import cosmology
    cc = cosmology.Cosmology(hmvec.default_params, skipCls=True, low_acc=False)
    mmhmod = mmhm.HaloModel(cc)

    mthresh = np.array([10.5])
    zs = np.array([0., 1., 2., 3.])
    ms = np.geomspace(1e8, 1e16, 1000)
    ks = np.geomspace(1e-4, 100, 1001)
    # ks,pks = np.loadtxt("mm_k_pk.txt",unpack=True)  # !!!

    eeP = mmhmod.P_gg_2h(ks, zs, mthreshHOD=mthresh) + mmhmod.P_gg_1h(
        ks, zs, mthreshHOD=mthresh)
    meP = mmhmod.P_mg_2h(ks, zs, mthreshHOD=mthresh) + mmhmod.P_mg_1h(
        ks, zs, mthreshHOD=mthresh)
    mmP = mmhmod.P_mm_2h(ks, zs) + mmhmod.P_mm_1h(ks, zs)

    hcos = hmvec.HaloModel(zs,
                           ks,
                           ms=ms,
                           halofit=None,
                           mdef='vir',
                           nfw_numeric=False)

    hcos.add_hod("g", mthresh=(10**mthresh[0]) + zs * 0., corr="max")
    # hcos.add_battaglia_profile("electron",family="AGN",xmax=100,nxs=60000)

    pme_1h = hcos.get_power_1halo(name="g", name2="nfw")
    pme_2h = hcos.get_power_2halo(name="g", name2="nfw")
    pmm_1h = hcos.get_power_1halo("nfw")
    pmm_2h = hcos.get_power_2halo("nfw")
    pee_1h = hcos.get_power_1halo("g")
    pee_2h = hcos.get_power_2halo("g")

    for i in range(zs.size):
        pl = io.Plotter(xyscale='loglin', xlabel='$k$', ylabel='$P$')
        pl.add(ks, (pme_2h[i] + pme_1h[i]) / meP[i], ls="--", color="C%d" % i)
        pl.add(ks, (pmm_2h[i] + pmm_1h[i]) / mmP[i], ls="-", color="C%d" % i)
        pl.add(ks, (pee_2h[i] + pee_1h[i]) / eeP[i], ls=":", color="C%d" % i)
        pl.vline(x=10.)
        pl.hline(y=1.)
        pl._ax.set_ylim(0.8, 1.3)
        pl.done("pgcomp_rat_z_%d.png" % i)
Beispiel #8
0
def test_lensing_window():

    zs = np.geomspace(0.01, 10., 100)  #np.array([0.])
    ks = np.geomspace(1e-4, 10, 100)
    ms = np.geomspace(1e10, 1e17, 200)
    hcos = hmvec.HaloModel(zs, ks, ms, nfw_numeric=False)
    pmm_1h = hcos.get_power_1halo(name="nfw")
    pmm_2h = hcos.get_power_2halo(name="nfw")

    Wk = hcos.lensing_window(zs, zs=2.)
    sigz = 0.1
    dndz = np.exp(-(zs - 2.)**2. / 2. / sigz**2.)
    Wk2 = hcos.lensing_window(zs, zs, dndz)
    # print(Wk2)
    pl = io.Plotter(xyscale='loglin')
    pl.add(zs, Wk)
    pl.add(zs, Wk2, ls="--")
    pl.done()
Beispiel #9
0
def test_battaglia():

    zs = np.array([0.])
    ks = np.geomspace(1e-4, 1, 10)
    hcos = hmvec.HaloModel(zs, ks, params={'sigma2_numks': 100}, skip_nfw=True)

    m200critz = 1.e13
    r = np.geomspace(1e-4, 20., 10000)
    z = 1.
    omb = hcos.p['ombh2'] / hcos.h**2.
    omm = (hcos.p['ombh2'] / hcos.h**2. + hcos.p['omch2'] / hcos.h**2.)
    rhocritz = hcos.rho_critical_z(z)

    rhos = hmvec.rho_gas(r, m200critz, z, omb, omm, rhocritz, profile="AGN")

    r200 = hmvec.R_from_M(m200critz, rhocritz, delta=200)
    integrand = rhos.copy() * 4. * np.pi * r**2.
    integrand[r > r200] = 0
    print(np.trapz(integrand, r) / (m200critz * (omb / omm)))
Beispiel #10
0
def test_limber():

    zs = np.geomspace(0.1,10.,40)
    ks = np.geomspace(1e-4,10,100)
    ms = np.geomspace(1e8,1e16,30)
    hcos = hmvec.HaloModel(zs,ks,ms,nfw_numeric=False)
    pmm_1h = hcos.get_power_1halo(name="nfw")
    pmm_2h = hcos.get_power_2halo(name="nfw")

    Wk = hcos.lensing_window(zs,zs=1100.)
    
    Pmm = pmm_1h + pmm_2h
    ells = np.linspace(100,1000,20)
    ckk = hcos.C_kk(ells,zs,ks,Pmm,lwindow1=Wk,lwindow2=Wk)
    theory = cosmology.default_theory()
    
    pl = io.Plotter(xyscale='linlog')
    pl.add(ells,ckk)
    pl.add(ells,theory.gCl('kk',ells),ls='--')
    pl.done('ckk_comp.png')

    bias = 2.
    nzs = np.exp(-(zs-1.0)**2./0.3**2.)
    ckg = hcos.C_kg(ells,zs,ks,Pmm*bias,lwindow=Wk,gzs=zs,gdndz=nzs)
    cgg = hcos.C_gg(ells,zs,ks,Pmm*bias**2,gzs=zs,gdndz=nzs)
    lc = cosmology.LimberCosmology(skipCls=True,low_acc=True)
    lc.addNz('g',zs,nzs,bias=bias)
    lc.generateCls(ells)
    ckg2 = lc.getCl('cmb','g')
    cgg2 = lc.getCl('g','g')
    
    pl = io.Plotter(xyscale='linlog')
    pl.add(ells,ckg)
    pl.add(ells,ckg2,ls='--')
    pl.done('ckg_comp.png')

    pl = io.Plotter(xyscale='linlog')
    pl.add(ells,cgg)
    pl.add(ells,cgg2,ls='--')
    pl.done('cgg_comp.png')
Beispiel #11
0
def test_lensing():

    zs = np.geomspace(0.1, 300., 30)
    ks = np.geomspace(1e-4, 20, 100)
    ms = np.geomspace(1e10, 1e17, 20)
    hcos = hmvec.HaloModel(zs, ks, ms, nfw_numeric=False)
    pmm_1h = hcos.get_power_1halo(name="nfw")
    pmm_2h = hcos.get_power_2halo(name="nfw")

    Wk = hcos.lensing_window(zs, zs=1100.)
    pl = io.Plotter(xyscale='loglin')
    pl.add(zs, Wk)
    pl.done()

    Pmm = pmm_1h + pmm_2h
    ells = np.linspace(100, 1000, 20)
    ckk = hcos.C_kk(ells, zs, ks, Pmm, lwindow1=Wk, lwindow2=Wk)
    theory = cosmology.default_theory()

    pl = io.Plotter(xyscale='linlog')
    pl.add(ells, ckk)
    pl.add(ells, theory.gCl('kk', ells), ls='--')
    pl.done()
Beispiel #12
0
import hmvec as hm  # Git clone and pip install as in readme from github.com/msyriac/hmvec
import numpy as np

zgalaxy = 0.6  # delta-function lens population
zsource = 1.0  # delta-function source population
ngal = 1e-4  # number density of lenses per mpc3 (to solve for stellar mass threshold in HOD)

# We set up the grid to integrate on
zmax = zsource + 1
numzs = 20
zs = np.linspace(0.01, zmax, numzs)  # redshifts
ms = np.geomspace(2e10, 1e17, 100)  # masses
ks = np.geomspace(1e-4, 100, 1001)  # wavenumbers

# Initialize halo model
hcos = hm.HaloModel(zs, ks, ms=ms)
# We add an HOD which should be CMASS-like at z=zgalaxy
hcos.add_hod("g", ngal=ngal + zs * 0., corr="max")
print("Galaxy bias at zgalaxy=", zgalaxy, " is ",
      interp1d(zs, hcos.hods['g']['bg'])(zgalaxy))
# We add a gas profile
hcos.add_battaglia_profile("electron", family="AGN", xmax=50, nxs=30000)
"""
Galaxy-galaxy lensing
"""
Pgn = hcos.get_power("g", "nfw", verbose=False)
Pge = hcos.get_power("g", "electron", verbose=False)
Pgm = hcos.total_matter_galaxy_power_spectrum(Pgn, Pge)

# Compare P(k)
for i in [0, -1]:
Beispiel #13
0
def test_pmm():

    matt = True  # set to False if you don't have Matt and Moritz's halomodel.py for comparison

    if matt:
        import halomodel as mmhm
        from orphics import cosmology
        cc = cosmology.Cosmology(hmvec.default_params,
                                 skipCls=True,
                                 low_acc=False)
        mmhmod = mmhm.HaloModel(cc)

    zs = np.array([0., 2., 3.])  #,1.,2.,3.])
    #zs = np.array([0.,2.,4.,6.])
    ms = np.geomspace(1e7, 1e17, 2000)
    #ks = np.geomspace(1e-4,100,1001)
    ks = np.geomspace(1e-5, 100, 10000)

    if matt:
        mmP = mmhmod.P_mm_2h(ks, zs) + mmhmod.P_mm_1h(
            ks, zs)  #,logmlow=log10mlow,logmhigh=log10mhigh)[z_id,:]
    # print(mmhmod.halobias[:,0])

    #print(mmP2h.shape)

    hcos = hmvec.HaloModel(zs,
                           ks,
                           ms=ms,
                           halofit='mead',
                           mdef='vir',
                           nfw_numeric=True)

    mmhb = mmhmod.halobias  #np.load("mm_halobias.npy",)
    mmnfn = mmhmod.nfn  #np.load("mm_nfn.npy")

    # pl = io.Plotter(xyscale='loglin')
    # for i in range(zs.size):
    #     pl.add(ks,(hcos.nPzk[i]-mmhmod.pknl[i])/hcos.nPzk[i])
    #     pl.add(ks,(hcos.Pzk[i]-mmhmod.pk[i])/hcos.Pzk[i])
    # pl.hline(y=0)
    # pl.done()

    # pl = io.Plotter(xyscale='loglog')
    # for i in range(3):
    #     pl.add(ms,hcos.nzm[i,:],color="C%d" % i)
    #     pl.add(ms,mmnfn[:,i],ls='--',color="C%d" % i)
    # pl.done()
    # pl = io.Plotter(xyscale='loglog')
    # for i in range(3):
    #     pl.add(ms,hcos.bh[i,:],color="C%d" % i)
    #     pl.add(ms,mmhb[:,i],ls='--',color="C%d" % i)
    # pl.done()

    # pl = io.Plotter(xyscale='loglog')
    # pl.add(10**mmhmod.logm,mmhmod.halobias[:,1])
    # pl.add(ms,hcos.bh[1,:])
    # pl.done()

    pmm_1h = hcos.get_power_1halo(name="nfw")
    pmm_2h = hcos.get_power_2halo(name="nfw")

    # sys.exit()
    print(pmm_1h.shape)
    for i in range(zs.size):
        pl = io.Plotter(xyscale='loglog', xlabel='$k$', ylabel='$P$')
        pl.add(ks,
               pmm_1h[i],
               label="z=%.1f" % zs[i],
               color="C%d" % i,
               ls="--",
               alpha=0.2)
        # pl.add(ks,pmm_2h[i],label="z=%.1f" % zs[i],ls="--",color="C%d" % i)
        pl.add(ks, pmm_2h[i] + pmm_1h[i], ls="--", color="C%d" % i)
        pl.add(ks, hcos.nPzk[i], ls="-", color="k", alpha=0.7)
        if matt: pl.add(ks, mmP[i], ls="-.", color="C%d" % i)
        pl.vline(x=10.)
        pl._ax.set_ylim(1e-1, 1e5)
        pl.done("nonlincomp_z_%d.png" % i)

    for i in range(zs.size):
        pl = io.Plotter(xyscale='loglin',
                        xlabel='$k$',
                        ylabel='$P/P_{\\mathrm{NL}}$')
        pl.add(ks, (pmm_2h[i] + pmm_1h[i]) / hcos.nPzk[i],
               ls="-",
               color="C%d" % i)
        if matt: pl.add(ks, mmP[i] / hcos.nPzk[i], ls="--", color="C%d" % i)
        pl.hline(y=1)
        pl.hline(y=0.9)
        pl.hline(y=1.1)
        pl.vline(x=10.)
        pl._ax.set_ylim(0.5, 1.5)
        pl.done("nonlindiff_z_%d.png" % i)

    for i in range(zs.size):
        pl = io.Plotter(xyscale='loglin',
                        xlabel='$k$',
                        ylabel='$P/P_{\\mathrm{L}}$')
        pl.add(ks, (pmm_2h[i] + pmm_1h[i]) / hcos.Pzk[i],
               ls="-",
               color="C%d" % i)
        if matt: pl.add(ks, mmP[i] / hcos.Pzk[i], ls="--", color="C%d" % i)
        pl.vline(x=10.)
        pl.hline(y=1)
        # pl.hline(y=0.9)
        # pl.hline(y=1.1)
        # pl._ax.set_ylim(0.5,1.5)
        pl.done("lindiff_z_%d.png" % i)