def calc_bias(aa, h1mesh, suff):
    '''Compute the bias(es) for the HI'''

    if rank == 0: print('Calculating bias')
    if rank == 0:
        print("Processing a={:.4f}...".format(aa))
        print('Reading DM mesh...')
    dm = BigFileMesh(args['matterfile'] % (aa), 'N1024').paint()
    dm /= dm.cmean()
    if rank == 0: print('Computing DM P(k)...')
    pkmm = FFTPower(dm, mode='1d').power
    k, pkmm = pkmm['k'], pkmm['power']  # Ignore shotnoise.
    if rank == 0: print('Done.')
    #

    pkh1h1 = FFTPower(h1mesh, mode='1d').power
    kk = pkh1h1.coords['k']

    pkh1h1 = pkh1h1['power'] - pkh1h1.attrs['shotnoise']
    pkh1mm = FFTPower(h1mesh, second=dm, mode='1d').power['power']
    if rank == 0: print('Done.')
    # Compute the biases.
    b1x = np.abs(pkh1mm / (pkmm + 1e-10))
    b1a = np.abs(pkh1h1 / (pkmm + 1e-10))**0.5
    if rank == 0: print("Finishing processing a={:.4f}.".format(aa))

    #
    if rank == 0:
        fout = open(outfolder + "HI_bias_{:6.4f}.txt".format(aa), "w")
        fout.write("# {:>8s} {:>10s} {:>10s} {:>15s}\n".\
                   format("k","b1_x","b1_a","Pkmm"))
        for i in range(1, kk.size):
            fout.write("{:10.5f} {:10.5f} {:10.5f} {:15.5e}\n".\
                       format(kk[i],b1x[i],b1a[i],pkmm[i].real))
        fout.close()
Exemple #2
0
def compute_power(output, Nmesh=1024, species=2, spec2=None):
    """Compute the compensated power spectrum from a catalogue."""
    catnu = BigFileCatalog(output, dataset=str(species) + '/', header='Header')
    sp = sptostr(species)
    sp2 = sptostr(spec2)
    outfile = path.join(
        output, "../power-" + sp + sp2 + "-%.4f.txt" % catnu.attrs["Time"][0])
    if path.isfile(outfile):
        return
    catnu.to_mesh(Nmesh=Nmesh, window='cic', compensated=True, interlaced=True)
    if spec2 is not None:
        catcdm = BigFileCatalog(output,
                                dataset=str(spec2) + '/',
                                header='Header')
        catcdm.to_mesh(Nmesh=Nmesh,
                       window='cic',
                       compensated=True,
                       interlaced=True)
        pkcross = FFTPower(catnu, mode='1d', Nmesh=1024, second=catcdm)
        power = pkcross.power
    else:
        pknu = FFTPower(catnu, mode='1d', Nmesh=1024)
        power = pknu.power
    numpy.savetxt(
        outfile,
        numpy.array([power['k'], power['power'].real, power['modes']]).T)
    return power
Exemple #3
0
def main(ns, ns1, ns2):
    if ns.verbose:
        setup_logging('info')

    print('\n Catalogs are - \n%s\n%s\n' % (ns1, ns2))
    cat1 = read_cat(ns1)
    mesh1 = cat1.to_mesh(interlaced=True,
                         compensated=True,
                         window='tsc',
                         Nmesh=ns.nmesh).paint(mode='complex')
    cat2 = read_cat(ns2)

    if ns.unique_k:
        dk = 0
    else:
        dk = None

    rm = FFTPower(mesh1, second=mesh1, mode='1d', dk=dk)
    nmin = numpy.unique(
        numpy.int32(
            numpy.logspace(numpy.log10(ns.nmin),
                           numpy.log10(ns.nmax),
                           ns.nn,
                           endpoint=True)))
    nmin0 = cat1.comm.allreduce(cat2['Length'].min().compute(), MPI.MIN)
    nmax0 = cat1.comm.allreduce(cat2['Length'].max().compute(), MPI.MAX)
    nmin = nmin[nmin >= nmin0]
    nmin = nmin[nmin < nmax0]

    save_bs(ns.output, 'a-matter', rm)

    r = []
    b = []
    a = []
    for nmin1 in nmin:
        cat2 = read_cat(ns2, nmin1)
        mesh2 = cat2.to_mesh(interlaced=True,
                             compensated=True,
                             window='tsc',
                             Nmesh=ns.nmesh)

        r.append(FFTPower(mesh1, second=mesh2, mode='1d', dk=dk))

        save_bs(ns.output, 'x-nmin-%05d' % nmin1, r[-1])
        bias = fit_bias(r[-1], rm)
        abundance = r[-1].attrs['N2'] / cat2.attrs['BoxSize'][0]**3
        b.append(bias)
        a.append(abundance)
        if cat1.comm.rank == 0:
            print('Bias of N=', nmin1, bias, abundance)

    basename = ns.output.rsplit('.', 1)[0]

    if cat1.comm.rank == 0:
        numpy.savetxt(basename + '-bias.txt', numpy.array([nmin, b, a]).T)

    if ns.with_plot:
        if cat1.comm.rank == 0:
            figure = make_plot(rm, r, nmin)
            figure.savefig(basename + '.png')
Exemple #4
0
def fiddlebias(aa, saveb=False,  bname='h1bias.txt', ofolder=None):
    #Fiddling bias for halos. Deprecated. 
    print('Read in catalogs')
    halocat = readincatalog(aa, matter=False)
    hpos = halocat['Position']
    hmass = halocat['Mass']
    h1mass = dohod.HI_mass(hmass, aa)
    dm = BigFileMesh(project + sim + '/fastpm_%0.4f/'%aa + '/dmesh_N%04d'%nc, '1').paint()
    if ofolder is None: ofolder = project + '/%s/fastpm_%0.4f/'%(sim, aa)
    
    #measure power
    pm = ParticleMesh(BoxSize = bs, Nmesh = [nc, nc, nc])
    
    pkm = FFTPower(dm/dm.cmean(), mode='1d').power
    k, pkm = pkm['k'], pkm['power']

    ##H1
    print("H1")
    h1mesh = pm.paint(hpos, mass=h1mass)    
    pkh1 = FFTPower(h1mesh/h1mesh.cmean(), mode='1d').power['power']
    pkh1m = FFTPower(h1mesh/h1mesh.cmean(), second=dm/dm.cmean(), mode='1d').power['power']

    #Bias
    b1h1 = pkh1m/pkm
    b1h1sq = pkh1/pkm

    if saveb:
        np.savetxt(ofolder+bname, np.stack((k, b1h1, b1h1sq**0.5), axis=1), 
                                           header='k, pkh1xm/pkm, pkh1/pkm^0.5')

    return k, b1h1, b1h1sq
Exemple #5
0
def evaluate1(model, data, norm=True, kmin=None, dk=None):
    '''return position order:
    px,p1,p2
    '''
    from nbodykit.lab import FieldMesh, FFTPower, ProjectedFFTPower

    if kmin is None: kmin = 0
    if dk is None: dk = 2 * numpy.pi / model.BoxSize[0]

    if norm:
        mod = model / model.cmean()
        dat = data / data.cmean()
    else:
        mod, dat = model, data

    px = FFTPower(first=FieldMesh(mod),
                  second=FieldMesh(dat),
                  mode='1d',
                  kmin=kmin,
                  dk=dk)

    p1 = FFTPower(first=FieldMesh(mod), mode='1d', kmin=kmin, dk=dk)

    p2 = FFTPower(first=FieldMesh(dat), mode='1d', kmin=kmin, dk=dk)

    return px.power, p1.power, p2.power
Exemple #6
0
def calc_bias(aa,mcut,suff):
    '''Compute the bias(es) for the HI'''
    print('Read in DM mesh')
    dm    = BigFileMesh(project+sim+'/fastpm_%0.4f/'%aa+\
                        '/dmesh_N%04d'%nc,'1').paint()
    dm   /= dm.cmean()
    pkmm  = FFTPower(dm,mode='1d').power
    k,pkmm= pkmm['k'],pkmm['power']  # Ignore shotnoise.
    #
    print('Read in central/satellite catalogs')
    cencat = BigFileCatalog(project+sim+'/fastpm_%0.4f/cencat'%aa)
    satcat = BigFileCatalog(project+sim+'/fastpm_%0.4f/satcat'%aa+suff)
    #
    cencat['HImass'] = HI_hod(cencat['Mass'],aa,mcut)   
    satcat['HImass'] = HI_hod(satcat['Mass'],aa,mcut)   
    totHImass        = cencat['HImass'].sum().compute() +\
                       satcat['HImass'].sum().compute()
    cencat['HImass']/= totHImass/float(nc)**3
    satcat['HImass']/= totHImass/float(nc)**3
    #
    allcat = MultipleSpeciesCatalog(['cen','sat'],cencat,satcat)
    #
    h1mesh     = allcat.to_mesh(BoxSize=bs,Nmesh=[nc,nc,nc],weight='HImass')
    pkh1h1     = FFTPower(h1mesh,mode='1d').power
    pkh1h1     = pkh1h1['power']-pkh1h1.attrs['shotnoise']
    pkh1mm     = FFTPower(h1mesh,second=dm,mode='1d').power['power']
    # Compute the biases.
    b1x = np.abs(pkh1mm/(pkmm+1e-10))
    b1a = np.abs(pkh1h1/(pkmm+1e-10))**0.5
    return(k,b1x,b1a,np.abs(pkmm))
Exemple #7
0
def calc_bias(aa, h1mesh, suff):
    '''Compute the bias(es) for the HI'''
    if rank == 0:
        print("Processing a={:.4f}...".format(aa))
        print('Reading DM mesh...')
    if ncsim == 10240:
        dm    = BigFileMesh(scratchyf+sim+'/fastpm_%0.4f/'%aa+\
                            '/1-mesh/N%04d'%nc,'').paint()
    else:
        dm    = BigFileMesh(project+sim+'/fastpm_%0.4f/'%aa+\
                        '/dmesh_N%04d/1/'%nc,'').paint()
    dm /= dm.cmean()
    if rank == 0: print('Computing DM P(k)...')
    pkmm = FFTPower(dm, mode='1d').power
    k, pkmm = pkmm['k'], pkmm['power']  # Ignore shotnoise.
    if rank == 0: print('Done.')
    #

    pkh1h1 = FFTPower(h1mesh, mode='1d').power
    pkh1h1 = pkh1h1['power'] - pkh1h1.attrs['shotnoise']
    pkh1mm = FFTPower(h1mesh, second=dm, mode='1d').power['power']
    if rank == 0: print('Done.')
    # Compute the biases.
    b1x = np.abs(pkh1mm / (pkmm + 1e-10))
    b1a = np.abs(pkh1h1 / (pkmm + 1e-10))**0.5
    if rank == 0: print("Finishing processing a={:.4f}.".format(aa))
    return (k, b1x, b1a, np.abs(pkmm))
Exemple #8
0
def calc_bias(aa,mcut,suff):
    '''Compute the bias(es) for the HI'''
    if rank==0:
        print("Processing a={:.4f}...".format(aa))
        print('Reading DM mesh...')
    dm    = BigFileMesh(scratch1+sim+'/fastpm_%0.4f/'%aa+\
                        '/1-mesh/N%04d'%nc,'').paint()
    dm   /= dm.cmean()
    if rank==0: print('Computing DM P(k)...')
    pkmm  = FFTPower(dm,mode='1d').power
    k,pkmm= pkmm['k'],pkmm['power']  # Ignore shotnoise.
    if rank==0: print('Done.')
    #
    if rank==0: print('Reading central/satellite catalogs...')
    cencat = BigFileCatalog(scratch2+sim+'/fastpm_%0.4f/cencat-16node'%aa)
#    satcat = BigFileCatalog(scratch2+sim+'/fastpm_%0.4f/satcat'%aa+suff)
#    if rank==0: print('Catalogs read.')
#    #
#    if rank==0: print('Computing HI masses...')
#    cencat['HImass'] = HI_hod(cencat['Mass'],aa,mcut)   
#    satcat['HImass'] = HI_hod(satcat['Mass'],aa,mcut)   
#    totHImass        = cencat['HImass'].sum().compute() +\
#                       satcat['HImass'].sum().compute()
#    cencat['HImass']/= totHImass/float(nc)**3
#    satcat['HImass']/= totHImass/float(nc)**3
#    if rank==0: print('HI masses done.')
#    #
#    if rank==0: print('Combining catalogs and computing P(k)...')
#    allcat = MultipleSpeciesCatalog(['cen','sat'],cencat,satcat)
#    #h1mesh = allcat.to_mesh(BoxSize=bs,Nmesh=[nc,nc,nc],weight='HImass')

    cenmesh = pm.paint(cencat['Position'])
    #satmesh = pm.paint(satcat['Position'], mass=satcat['HImass'])
    h1mesh = cenmesh 
    pkh1h1 = FFTPower(h1mesh,mode='1d').power
    pkh1h1 = pkh1h1['power']-pkh1h1.attrs['shotnoise']
    pkh1mm = FFTPower(h1mesh,second=dm,mode='1d').power['power']
    if rank==0: print('Done.')
    # Compute the biases.
    b1x = np.abs(pkh1mm/(pkmm+1e-10))
    b1a = np.abs(pkh1h1/(pkmm+1e-10))**0.5
    if rank==0: print("Finishing processing a={:.4f}.".format(aa))
    if rank==0:
        fout = open("../data/L%04d/HI_bias_halo_%0.4f.txt"%(bs, aa),"w")
        fout.write("# Mcut={:12.4e}Msun/h.\n".format(mcut))
        fout.write("# {:>8s} {:>10s} {:>10s} {:>15s}\n".\
                   format("k","b1_x","b1_a","Pkmm"))
        for i in range(1,kk.size):
            fout.write("{:10.5f} {:10.5f} {:10.5f} {:15.5e}\n".\
                       format(kk[i],b1x[i],b1a[i],pkmm[i]))
        fout.close()
        bavg = np.mean(b1x[1:10])
        flog.write("{:6.2f} {:12.4e} {:6.3f}\n".format(1/aa-1,mcut,bavg))
        flog.flush()
    if rank==0: flog.close()
    #
    return(k,b1x,b1a,np.abs(pkmm))
Exemple #9
0
    def evaluate(self, model, data):
        from nbodykit.lab import FieldMesh, FFTPower, ProjectedFFTPower

        xm = FFTPower(first=FieldMesh(model.mapp/model.mapp.cmean()), second=FieldMesh(data.mapp/data.mapp.cmean()), mode='1d')
        xd = FFTPower(first=FieldMesh(model.d), second=FieldMesh(data.d), mode='1d')
        xs = FFTPower(first=FieldMesh(model.s), second=FieldMesh(data.s), mode='1d')

        pm1 = FFTPower(first=FieldMesh(model.mapp/model.mapp.cmean()), mode='1d')
        pd1 = FFTPower(first=FieldMesh(model.d), mode='1d')
        ps1 = FFTPower(first=FieldMesh(model.s), mode='1d')

        pm2 = FFTPower(first=FieldMesh(data.mapp/data.mapp.cmean()), mode='1d')
        pd2 = FFTPower(first=FieldMesh(data.d), mode='1d')
        ps2 = FFTPower(first=FieldMesh(data.s), mode='1d')

        data_preview = dict(s=[], d=[], mapp=[])
        model_preview = dict(s=[], d=[], mapp=[])

        for axes in [[1, 2], [0, 2], [0, 1]]:
            data_preview['d'].append(data.d.preview(axes=axes))
            data_preview['s'].append(data.s.preview(axes=axes))
            data_preview['mapp'].append(data.mapp.preview(axes=axes))
            model_preview['d'].append(model.d.preview(axes=axes))
            model_preview['s'].append(model.s.preview(axes=axes))
            model_preview['mapp'].append(model.mapp.preview(axes=axes))

        #data_preview['mapp'] = data.mapp.preview(axes=(0, 1))
        #model_preview['mapp'] = model.mapp.preview(axes=(0, 1))

        return xm.power, xs.power, xd.power, pm1.power, pm2.power, ps1.power, ps2.power, pd1.power, pd2.power, data_preview, model_preview
Exemple #10
0
def getps2D(f1, f2=None, p2=False):
    p1 = FFTPower(f1, mode='2d').power['power']
    if f2 is not None:
        px = FFTPower(f1, second=f2, mode='2d').power['power']
        if p2:
            p2 = FFTPower(f2, mode='2d').power['power']
            return p1, p2, px
        else:
            return p1, px
    else:
        return p1
def compute_fast_power(output,
                       ICS,
                       vthresh=850,
                       Nmesh=1024,
                       species=2,
                       spec2=None):
    """Compute the compensated power spectrum from a catalogue."""
    sp = sptostr(species)
    sp2 = sptostr(spec2)
    catnu = BigFileCatalog(output, dataset=str(species) + '/', header='Header')
    outfile = path.join(
        output,
        "../power-fast-" + sp + sp2 + "-%.4f.txt" % catnu.attrs["Time"][0])
    if path.isfile(outfile):
        return
    catics = BigFileCatalog(ICS, dataset=str(species) + '/', header='Header')
    fast = (catics['Velocity']**
            2).sum(axis=1) < vthresh**2 / catics.attrs["Time"]**3
    fastids = catics["ID"][fast].compute()
    fastids.sort()
    #Note: map_blocks runs elementwise over blocks.
    #So we need to pre-compute fastids: if we do not we will
    #end up checking whether elements in a block of catnu["ID"]
    #are in the equivalent block in fastids.
    select = catnu["ID"].map_blocks(wrapper,
                                    fastids,
                                    dtype=numpy.bool,
                                    chunks=catnu["ID"].chunks)
    catnu[select].to_mesh(Nmesh=Nmesh,
                          window='cic',
                          compensated=True,
                          interlaced=True)
    if spec2 is not None:
        catcdm = BigFileCatalog(output,
                                dataset=str(spec2) + '/',
                                header='Header')
        catcdm.to_mesh(Nmesh=Nmesh,
                       window='cic',
                       compensated=True,
                       interlaced=True)
        pkcross = FFTPower(catnu[select],
                           mode='1d',
                           Nmesh=Nmesh,
                           second=catcdm,
                           dk=5.0e-6)
        power = pkcross.power
    else:
        pknu = FFTPower(catnu[select], mode='1d', Nmesh=Nmesh, dk=5.0e-6)
        power = pknu.power
    numpy.savetxt(
        outfile,
        numpy.array([power['k'], power['power'].real, power['modes']]).T)
    return power
Exemple #12
0
def evaluate1(model, data, field, M0=0, stoch=False, kmin=None, dk=None):
    '''return position order:
    xm.power, xs.power, xd.power, 
    pm1.power, pm2.power, 
    ps1.power, ps2.power, 
    pd1.power, pd2.power, 
    data_preview, model_preview
    '''
    from nbodykit.lab import FieldMesh, FFTPower, ProjectedFFTPower

    if kmin is None: kmin = 0 
    if dk is None: dk = 2*numpy.pi/model.s.BoxSize[0]

    model.mapp += M0
    data.mapp += M0


    #print('Means are : ', model.mapp.cmean(), data.mapp.cmean())
    if abs(model.mapp.cmean()) > 1e-3: modmappmean = model.mapp.cmean()
    else: modmappmean = 1.
    if abs(data.mapp.cmean()) > 1e-3: datmappmean = data.mapp.cmean()
    else: datmappmean = 1.
    modmappmean, datmappmean = 1., 1.
    #if abs(model.mapp.cmean()) > 1e-3: modmappmean = model.mapp.cmean()
    #else: modmappmean = 1.
    #if abs(data.mapp.cmean()) > 1e-3: datmappmean = data.mapp.cmean()
    #else: datmappmean = 1.
        
    data_preview, model_preview = [], []
    if field == 'mapp':
        x = FFTPower(first=FieldMesh(model.mapp/modmappmean), second=FieldMesh(data.mapp/datmappmean), mode='1d', kmin=kmin, dk=dk)
        p1 = FFTPower(first=FieldMesh(model.mapp/modmappmean), mode='1d', kmin=kmin, dk=dk)
        p2 = FFTPower(first=FieldMesh(data.mapp/datmappmean), mode='1d', kmin=kmin, dk=dk)
        for axes in [[1, 2], [0, 2], [0, 1]]:
            data_preview.append(data.mapp.preview(axes=axes))
            model_preview.append(model.mapp.preview(axes=axes))

    elif field == 's':
        x = FFTPower(first=FieldMesh(model.s), second=FieldMesh(data.s), mode='1d', kmin=kmin, dk=dk)
        p1 = FFTPower(first=FieldMesh(model.s), mode='1d', kmin=kmin, dk=dk)
        p2 = FFTPower(first=FieldMesh(data.s), mode='1d', kmin=kmin, dk=dk)
        for axes in [[1, 2], [0, 2], [0, 1]]:
            data_preview.append(data.s.preview(axes=axes))
            model_preview.append(model.s.preview(axes=axes))

    elif field == 'd':
        x = FFTPower(first=FieldMesh(model.d), second=FieldMesh(data.d), mode='1d', kmin=kmin, dk=dk)
        p1 = FFTPower(first=FieldMesh(model.d), mode='1d', kmin=kmin, dk=dk)
        p2 = FFTPower(first=FieldMesh(data.d), mode='1d', kmin=kmin, dk=dk)
        for axes in [[1, 2], [0, 2], [0, 1]]:
            data_preview.append(data.d.preview(axes=axes))
            model_preview.append(model.d.preview(axes=axes))
    else:
        print('Field not recongnized')
        return 0
        
    return x.power, p1.power, p2.power, data_preview, model_preview
Exemple #13
0
def eval_bfit(hmesh,
              mod,
              ofolder,
              noise=None,
              title=None,
              fsize=15,
              suff=None,
              save=True):

    pmod = FFTPower(mod, mode='1d').power
    k, pmod = pmod['k'], pmod['power']
    ph = FFTPower(hmesh, mode='1d').power['power']
    pxmodh = FFTPower(hmesh, second=mod, mode='1d').power['power']
    perr = FFTPower(hmesh - mod, mode='1d').power['power']

    if save:

        fig, ax = plt.subplots(1, 3, figsize=(15, 4))

        ax[0].plot(k, pxmodh / (pmod * ph)**0.5)
        ax[0].set_ylabel('$r_{cc}$', fontsize=fsize)

        ax[1].plot(k, (pmod / ph)**0.5)
        ax[1].set_ylabel('$\sqrt{P_{mod}/P_{hh}}$', fontsize=fsize)

        ax[2].plot(k, perr)
        ax[2].set_yscale('log')
        ax[2].set_ylabel('$P_{\delta{mod}-\delta_h}$', fontsize=fsize)
        if noise is not None: ax[2].axhline(noise)

        if hmesh.pm.comm.rank == 0:
            for axis in ax:
                axis.set_xscale('log')
                axis.grid(which='both')
                axis.set_xlabel('$k$ (h/Mpc)', fontsize=fsize)
                axis.legend(fontsize=fsize)

            if title is not None: plt.suptitle(title, fontsize=fsize)
            plt.tight_layout(rect=[0, 0, 1, 0.95])
            fname = ofolder + 'evalbfit'
            if suff is not None: fname = fname + '%s' % suff
            print(fname)
            fig.savefig(fname + '.png')

        plt.close()

        return k[1:], perr.real[1:]

    else:
        return k, ph, pmod, pxmodh, perr
def calc_pkmu(aa, h1mesh, outfolder, los=[0, 0, 1], Nmu=int(4)):
    '''Compute the redshift-space P(k) for the HI in mu bins'''

    if rank == 0: print('Calculating pkmu')
    pkh1h1 = FFTPower(h1mesh, mode='2d', Nmu=Nmu, los=los).power
    # Extract what we want.
    kk = pkh1h1.coords['k']
    sn = pkh1h1.attrs['shotnoise']
    pk = pkh1h1['power']
    if rank == 0: print('For mu-bins', pkh1h1.coords['mu'])
    # Write the results to a file.
    if rank == 0:
        fout = open(
            outfolder + "HI_pks_mu_{:02d}_{:06.4f}.txt".format(Nmu, aa), "w")
        fout.write("# Redshift space power spectrum in mu bins.\n")
        fout.write("# Subtracting SN={:15.5e}.\n".format(sn))
        ss = "# {:>8s}".format(r'k\mu')
        for i in range(pkh1h1.shape[1]):
            ss += " {:15.5f}".format(pkh1h1.coords['mu'][i])
        fout.write(ss + "\n")
        for i in range(1, pk.shape[0]):
            ss = "{:10.5f}".format(kk[i])
            for j in range(pk.shape[1]):
                ss += " {:15.5e}".format(np.abs(pk[i, j] - sn))
            fout.write(ss + "\n")
        fout.close()
Exemple #15
0
def calc_pk1d(aa, suff):
    '''Compute the 1D redshift-space P(k) for the HI'''
    if rank == 0: print('Read in central/satellite catalogs')
    cencat = BigFileCatalog(scratch2 + sim +
                            '/fastpm_%0.4f/cencat-16node' % aa)
    satcat = BigFileCatalog(scratch2 + sim + '/fastpm_%0.4f/satcat' % aa +
                            suff)
    rsdfac = read_conversions(scratch1 + sim + '/fastpm_%0.4f/' % aa)
    # Compute the power spectrum
    los = [0, 0, 1]
    cencat['RSDpos'] = cencat['Position'] + cencat['Velocity'] * los * rsdfac
    satcat['RSDpos'] = satcat['Position'] + satcat['Velocity'] * los * rsdfac
    cencat['HImass'] = HI_hod(cencat['Mass'], aa)
    satcat['HImass'] = HI_hod(satcat['Mass'], aa)
    rankHImass       = cencat['HImass'].sum().compute() +\
                       satcat['HImass'].sum().compute()
    totHImass = comm.allreduce(rankHImass)
    cencat['HImass'] /= totHImass / float(nc)**3
    satcat['HImass'] /= totHImass / float(nc)**3
    allcat = MultipleSpeciesCatalog(['cen', 'sat'], cencat, satcat)
    h1mesh  = allcat.to_mesh(BoxSize=bs,Nmesh=[nc,nc,nc],\
                             position='RSDpos',weight='HImass')
    pkh1h1 = FFTPower(h1mesh, mode='1d', kmin=0.025, dk=0.0125).power
    # Extract the quantities we want and write the file.
    kk = pkh1h1['k']
    sn = pkh1h1.attrs['shotnoise']
    pk = np.abs(pkh1h1['power'])
    if rank == 0:
        fout = open("HI_pks_1d_{:6.4f}.txt".format(aa), "w")
        fout.write("# Subtracting SN={:15.5e}.\n".format(sn))
        fout.write("# {:>8s} {:>15s}\n".format("k", "Pk_0_HI"))
        for i in range(kk.size):
            fout.write("{:10.5f} {:15.5e}\n".format(kk[i], pk[i] - sn))
        fout.close()
Exemple #16
0
def calc_pkhalo(aa, suff):
    if rank ==0 : print('Read in central/satellite catalogs')
    #cencat = BigFileCatalog(project+sim+'/fastpm_%0.4f/cencat'%aa)
    cencat = BigFileCatalog(scratch2+sim+'/fastpm_%0.4f/cencat-16node'%aa)
    cencat = BigFileCatalog(scratch1+sim+'/fastpm_%0.4f/'%aa+\
                        'LL-0.200','')
    rsdfac = read_conversions(scratch1+sim+'/fastpm_%0.4f/'%aa)
    # Compute the power spectrum
    los = [0,0,1]
    cpos = cencat['Position'].compute()
    start = time()

    cenmesh = pm.paint(cencat['Position'])
    h1mesh = cenmesh
    end = time()
    if rank ==0 : print('Time taken to mesh = ', end - start)
    start = time()
    #pkh1h1   = FFTPower(h1mesh,mode='1d',kmin=0.025,dk=0.0125).power
    pkh1h1   = FFTPower(h1mesh/h1mesh.cmean(),mode='1d').power
    end = time()
    if rank ==0 : print('Time taken to power = ', end - start)
    # Extract the quantities we want and write the file.
    kk   = pkh1h1['k']
    sn   = pkh1h1.attrs['shotnoise']
    pk   = np.abs(pkh1h1['power'])
    if rank ==0 : 
        fout = open("../data/L%04d/Halocat_pks_1d_%0.4f.txt"%(bs, aa),"w")
        fout.write("# Subtracting SN={:15.5e}.\n".format(sn))
        fout.write("# {:>8s} {:>15s}\n".format("k","Pk_0_HI"))
        for i in range(kk.size):
            fout.write("{:10.5f} {:15.5e}\n".format(kk[i],pk[i]-sn))
        fout.close()
Exemple #17
0
def savenoisep2d(Nmu=4):
    for ia, aa  in enumerate([0.3333, 0.2000, 0.1429]):
        zz = 1/aa-1
        for iw, wopt in enumerate(['opt', 'pess']):
        #for iw, wopt in enumerate(['opt']):
            for it, thopt in enumerate(['opt', 'pess', 'reas']):
            #for it, thopt in enumerate([ 'reas']):
                if rank == 0: print(aa, wopt, thopt)
                dpath = '/global/cscratch1/sd/chmodi/m3127/21cm_cleaning/recon/fastpm_%0.4f/wedge_kmin%0.2f_%s/'%(aa, 0.03, wopt)
                dpath += 'L%04d-N%04d-R//thermal-%s-hex/ZA/opt_s999_h1massA_fourier_rsdpos/'%(bs, nc, thopt)
                ofolder = '../../data/ZArecon-rsd/kmin-003_wedge-%s/thermal-%s-hex/Nmu%d/'%(wopt, thopt, Nmu)
                try: os.makedirs(ofolder)
                except: pass
                fname = ofolder + 'pnoise-L%04d_%0.4f.txt'%(bs, aa)
                if args.pp : fname = fname[:-4] + '-up.txt'
                try:
                    rep = np.loadtxt(fname).T
                    rpfit = [{'k':rep[0], 'power':rep[i+1]} for i in range(3)]
                except:
                    pass
                if args.pp:
                    ivar = BigFileMesh(dpath+'/ivarmesh_up', 'ivar').paint()
                else:
                    ivar = BigFileMesh(dpath+'/ivarmesh', 'ivar').paint()

                svar = (ivar.r2c()**-0.5).c2r()
                p0 = FFTPower(svar, mode='2d', Nmu=Nmu).power
                if rank == 0: np.savetxt(fname, p0['power'].real)
Exemple #18
0
def savestd():
    #for ia, aa  in enumerate([0.3333, 0.2000, 0.1429]):
    for ia, aa in enumerate([0.1429]):
        #for ia, aa  in enumerate([0.3333, 0.2000, 0.1429]):
        zz = 1 / aa - 1
        for iw, wopt in enumerate(['opt', 'pess']):
            #for iw, wopt in enumerate(['opt']):
            for it, thopt in enumerate(['opt', 'pess', 'reas']):
                #for it, thopt in enumerate([ 'pess']):
                if rank == 0: print(aa, wopt, thopt)
                dpath = '/global/cscratch1/sd/chmodi/m3127/21cm_cleaning/recon/fastpm_%0.4f/wedge_kmin%0.2f_%s/' % (
                    aa, 0.03, wopt)
                dpath += 'L%04d-N%04d-R//thermal-%s-hex/ZA/opt_s999_h1massA_fourier_rsdpos/' % (
                    bs, nc, thopt)
                ofolder = '../../data/ZArecon-rsd/kmin-003_wedge-%s/thermal-%s-hex/' % (
                    wopt, thopt)
                fname = ofolder + 'std-L%04d_%0.4f.txt' % (bs, aa)
                fxname = ofolder + 'xstd-L%04d_%0.4f.txt' % (bs, aa)
                if args.pp: fname = fname[:-4] + '-up.txt'
                if args.pp: fxname = fxname[:-4] + '-up.txt'
                try:
                    rep = np.loadtxt(fname + 's').T
                except:
                    try:
                        if args.pp:
                            std = BigFileMesh(dpath + '/stdrecon_up-noise',
                                              'std').paint()
                            ss = BigFileMesh(dpath + '/datap_up', 's').paint()
                        else:
                            std = BigFileMesh(dpath + '/stdrecon-noise',
                                              'std').paint()
                            ss = BigFileMesh(dpath + '/datap', 's').paint()

                        p0 = FFTPower(std, mode='1d').power
                        px = FFTPower(std, second=ss, mode='1d').power
                        if rank == 0:
                            np.savetxt(fname,
                                       np.stack([p0['k']] +
                                                [p0['power'].real]).T,
                                       header='k, p0')
                        if rank == 0:
                            np.savetxt(fxname,
                                       np.stack([px['k']] +
                                                [px['power'].real]).T,
                                       header='k, px')
                    except Exception as e:
                        print(e)
Exemple #19
0
def evaluate2d(model, data, M0=0, kmin=None, dk=None, Nmu=5, retmesh=False, los=[0, 0, 1]):
    '''return position order:
    xm.power, xs.power, xd.power, 
    pm1.power, pm2.power, 
    ps1.power, ps2.power, 
    pd1.power, pd2.power, 
    data_preview, model_preview
    '''
    from nbodykit.lab import FieldMesh, FFTPower, ProjectedFFTPower

    if kmin is None: kmin = 0 
    if dk is None: dk = 2*numpy.pi/model.s.BoxSize[0]

    model.mapp += M0
    data.mapp += M0

    if abs(model.mapp.cmean()) > 1e-3: modmappmean = model.mapp.cmean()
    else: modmappmean = 1.
    if abs(data.mapp.cmean()) > 1e-3: datmappmean = data.mapp.cmean()
    else: datmappmean = 1.
    modmappmean, datmappmean = 1., 1.
        
    xm = FFTPower(first=FieldMesh(model.mapp/modmappmean), 
                  second=FieldMesh(data.mapp/datmappmean), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])
    xd = FFTPower(first=FieldMesh(model.d), second=FieldMesh(data.d), mode='2d', kmin=kmin, dk=dk, 
                  Nmu=Nmu, los=[0, 0, 1])
    xs = FFTPower(first=FieldMesh(model.s), second=FieldMesh(data.s), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, 
                  los=[0, 0, 1])

    pm1 = FFTPower(first=FieldMesh(model.mapp/modmappmean), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])
    pd1 = FFTPower(first=FieldMesh(model.d), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])
    ps1 = FFTPower(first=FieldMesh(model.s), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])

    pm2 = FFTPower(first=FieldMesh(data.mapp/datmappmean), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])
    pd2 = FFTPower(first=FieldMesh(data.d), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])
    ps2 = FFTPower(first=FieldMesh(data.s), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])

    if retmesh:
        data_preview = dict(s=[], d=[], mapp=[])
        model_preview = dict(s=[], d=[], mapp=[])

        for axes in [[1, 2], [0, 2], [0, 1]]:
            data_preview['d'].append(data.d.preview(axes=axes))
            data_preview['s'].append(data.s.preview(axes=axes))
            data_preview['mapp'].append(data.mapp.preview(axes=axes))
            model_preview['d'].append(model.d.preview(axes=axes))
            model_preview['s'].append(model.s.preview(axes=axes))
            model_preview['mapp'].append(model.mapp.preview(axes=axes))
        return xm.power, xs.power, xd.power, pm1.power, pm2.power, ps1.power, ps2.power, pd1.power, pd2.power,\
            data_preview, model_preview
    else:
        return xm.power, xs.power, xd.power, pm1.power, pm2.power, ps1.power, ps2.power, pd1.power, pd2.power
Exemple #20
0
def make_galaxy_pk(scale_factor,nc,seed,bs=1536,T=40,B=2,simpath=sc_simpath,outpath=sc_outpath,Rsm=0):
    
    aa = scale_factor # since particle IDs are ordered only need to load at one redshift
    zz = 1/aa-1
    dgrow = cosmo.scale_independent_growth_factor(zz)

    fname = get_filename(nc,seed,T=T,B=B)
    spath = simpath + fname
    opath = outpath + fname
    galpath = opath + '/hod/'

    try: os.makedirs(opath+'spectra/')
    except : pass
    
    zz = 1/aa-1
        
    pm = ParticleMesh(BoxSize=bs, Nmesh=[nc, nc, nc], dtype='f8')
    rank = pm.comm.rank
    dyn = BigFileCatalog(spath +  '/fastpm_%0.4f/1'%aa)
        
    # Load Matter Mesh
    fpos = dyn['Position'].compute()
    mlay = pm.decompose(fpos)
    mmesh = pm.paint(fpos, layout=mlay)
    mmesh /= mmesh.cmean()

    # Load halo mesh: HOD parameters fixed for now...
    mmin = 10**12.5; m1fac = 20
    cendir ='cencat-aa-%.04f-Mmin-%.1f-M1f-%.1f-alpha-0p8-subvol'%(aa,np.log10(mmin), m1fac)
    satdir ='satcat-aa-%.04f-Mmin-%.1f-M1f-%.1f-alpha-0p8-subvol'%(aa,np.log10(mmin), m1fac)
    
    cencat = BigFileCatalog(galpath + cendir)
    satcat = BigFileCatalog(galpath + satdir)    
        
    hpos = np.concatenate((cencat['Position'],satcat['Position']))
    hlay = pm.decompose(hpos)
    hmesh = pm.paint(hpos, layout=hlay)
    hmesh /= hmesh.cmean()

    phm = FFTPower(mmesh, second=hmesh, mode='1d').power
    k, phm = phm['k'],  phm['power'].real
        
    phh = FFTPower(hmesh, mode='1d').power
    k, phh = phh['k'],  phh['power'].real

    np.savetxt(opath+'spectra/pks-%04d-%04d-%04d-gal.txt'%(aa*10000, bs, nc), np.vstack([k, phh, phm]).T.real, header='k, phh, phm/ ', fmt='%0.4e')
Exemple #21
0
def calc_bias(aa, mcut, suff):
    '''Compute the bias(es) for the HI'''
    if rank == 0:
        print("Processing a={:.4f}...".format(aa))
        print('Reading DM mesh...')
    dm    = BigFileMesh(scratch1+sim+'/fastpm_%0.4f/'%aa+\
                        '/1-mesh/N%04d'%nc,'').paint()
    dm /= dm.cmean()
    if rank == 0: print('Computing DM P(k)...')
    pkmm = FFTPower(dm, mode='1d').power
    k, pkmm = pkmm['k'], pkmm['power']  # Ignore shotnoise.
    if rank == 0: print('Done.')
    #
    if rank == 0: print('Reading central/satellite catalogs...')
    cencat = BigFileCatalog(scratch2 + sim +
                            '/fastpm_%0.4f/cencat-16node' % aa)
    satcat = BigFileCatalog(scratch2 + sim + '/fastpm_%0.4f/satcat' % aa +
                            suff)
    if rank == 0: print('Catalogs read.')
    #
    if rank == 0: print('Computing HI masses...')
    cencat['HImass'] = HI_hod(cencat['Mass'], aa, mcut)
    satcat['HImass'] = HI_hod(satcat['Mass'], aa, mcut)
    rankHImass       = cencat['HImass'].sum().compute() +\
                       satcat['HImass'].sum().compute()
    rankHImass = np.array([rankHImass])
    totHImass = np.zeros(1, dtype='float')
    comm.Allreduce(rankHImass, totHImass, MPI.SUM)
    totHImass = totHImass[0]
    cencat['HImass'] /= totHImass / float(nc)**3
    satcat['HImass'] /= totHImass / float(nc)**3
    if rank == 0: print('HI masses done.')
    #
    if rank == 0: print('Combining catalogs and computing P(k)...')
    allcat = MultipleSpeciesCatalog(['cen', 'sat'], cencat, satcat)
    h1mesh = allcat.to_mesh(BoxSize=bs, Nmesh=[nc, nc, nc], weight='HImass')
    pkh1h1 = FFTPower(h1mesh, mode='1d').power
    pkh1h1 = pkh1h1['power'] - pkh1h1.attrs['shotnoise']
    pkh1mm = FFTPower(h1mesh, second=dm, mode='1d').power['power']
    if rank == 0: print('Done.')
    # Compute the biases.
    b1x = np.abs(pkh1mm / (pkmm + 1e-10))
    b1a = np.abs(pkh1h1 / (pkmm + 1e-10))**0.5
    if rank == 0: print("Finishing processing a={:.4f}.".format(aa))
    return (k, b1x, b1a, np.abs(pkmm))
Exemple #22
0
def main(ns, ns1, ns2):
    if ns.verbose:
        setup_logging('info')

    cat1 = read_cat(ns1)
    mesh1 = cat1.to_mesh(interlaced=True, compensated=True, window='tsc', Nmesh=ns.nmesh)

    if ns1 is not ns2:
        cat2 = read_cat(ns2)
        mesh2 = cat2.to_mesh(interlaced=True, compensated=True, window='tsc', Nmesh=ns.nmesh)
    else:
        mesh2 = None

    if ns1.with_rsd != ns2.with_rsd:
        warnings.warn("Two catalogs have different with-rsd settings, this may not be intended.")

    if ns.mode is None:
        if ns1.with_rsd or ns2.with_rsd:
            ns.mode = '2d'
        else:
            ns.mode = '1d'

    if ns.unique_k:
        dk = 0
    else:
        dk = None

    r = FFTPower(mesh1, second=mesh2, mode=ns.mode, dk=dk)

    basename = ns.output.rsplit('.', 1)[0]
    if ns.output.endswith('.json'):
        r.save(ns.output)
    elif ns.output.endswith('.txt'):
        if cat1.comm.rank == 0:
            for var in r.power.data.dtype.names:
                numpy.savetxt(basename + '-%s.txt' % var,
                    r.power[var].real
                )

    if ns.with_plot:
        if cat1.comm.rank == 0:
            figure = make_plot(r)
            figure.savefig(basename + '.png')
Exemple #23
0
def compute_power(output, Nmesh=4096):
    """Compute the compensated power spectrum from a catalogue."""
    catcdm = BigFileCatalog(output, dataset='1/', header='Header')
    assert 1 - catcdm.attrs['Time'] < 0.01
    catcdm.to_mesh(Nmesh=Nmesh,
                   resampler='cic',
                   compensated=True,
                   interlaced=True)
    pkcdm = FFTPower(catcdm, mode='1d', Nmesh=Nmesh)
    return pkcdm.power
Exemple #24
0
 def write_power(d, path, a):
     meshsource = FieldMesh(d)
     r = FFTPower(meshsource, mode='1d')
     if config.pm.comm.rank == 0:
         print('Writing matter power spectrum at %s' % path)
         # only root rank saves
         numpy.savetxt(path, 
             numpy.array([
               r.power['k'], r.power['power'].real, r.power['modes'],
               r.power['power'].real / solver.cosmology.scale_independent_growth_factor(1.0 / a - 1) ** 2,
             ]).T,
             comments='# k p N p/D**2')
Exemple #25
0
def calc_bias(aa,h1mesh, outfolder, fname):
    '''Compute the bias(es) for the HI'''

    if rank==0: print('Calculating bias')
    if rank==0:
        print("Processing a={:.4f}...".format(aa))
        print('Reading DM mesh...')
    if ncsim == 10240:
        dm    = BigFileMesh(scratchyf+sim+'/fastpm_%0.4f/'%aa+\
                            '/1-mesh/N%04d'%nc,'').paint()
    else:
        dm    = BigFileMesh(project+sim+'/fastpm_%0.4f/'%aa+\
                        '/dmesh_N%04d/1/'%nc,'').paint()
    dm   /= dm.cmean()
    if rank==0: print('Computing DM P(k)...')
    pkmm  = FFTPower(dm,mode='1d').power
    k,pkmm= pkmm['k'],pkmm['power']  # Ignore shotnoise.
    if rank==0: print('Done.')
    #

    pkh1h1 = FFTPower(h1mesh,mode='1d').power
    kk = pkh1h1.coords['k']

    pkh1h1 = pkh1h1['power']-pkh1h1.attrs['shotnoise']
    pkh1mm = FFTPower(h1mesh,second=dm,mode='1d').power['power']
    if rank==0: print('Done.')
    # Compute the biases.
    b1x = np.abs(pkh1mm/(pkmm+1e-10))
    b1a = np.abs(pkh1h1/(pkmm+1e-10))**0.5
    if rank==0: print("Finishing processing a={:.4f}.".format(aa))

    #
    if rank==0:
        fout = open(outfolder + "{}_bias_{:6.4f}.txt".format(fname, aa),"w")
        fout.write("# {:>8s} {:>10s} {:>10s} {:>15s}\n".\
                   format("k","b1_x","b1_a","Pkmm"))
        for i in range(1,kk.size):
            fout.write("{:10.5f} {:10.5f} {:10.5f} {:15.5e}\n".\
                       format(kk[i],b1x[i],b1a[i],pkmm[i].real))
        fout.close()
Exemple #26
0
def fiddlebiasgal(aa, suff, nc=nc, mcfv=[1.], saveb=False, bname='h1bias', ofolder=None):
    '''Fiddle bias for galaxies'''

    if ofolder is None: ofolder = project + '/%s/fastpm_%0.4f/'%(sim, aa)
    pm = ParticleMesh(BoxSize = bs, Nmesh = [nc, nc, nc])

    print('Read in catalogs')
    cencat = BigFileCatalog(project + sim + '/fastpm_%0.4f/cencat'%aa)
    satcat = BigFileCatalog(project + sim + '/fastpm_%0.4f/satcat'%aa+suff)

    cpos, spos = cencat['Position'], satcat['Position']
    cmass, smass = cencat['Mass'], satcat['Mass']
    pos = np.concatenate((cpos, spos), axis=0)

    dm = BigFileMesh(project + sim + '/fastpm_%0.4f/'%aa + '/dmesh_N%04d'%nc, '1').paint()
    pkm = FFTPower(dm/dm.cmean(), mode='1d').power
    k, pkm = pkm['k'], pkm['power']

    b1, b1sq = np.zeros((k.size, len(mcfv))), np.zeros((k.size, len(mcfv)))

    for imc, mcf in enumerate(mcfv):
        print(mcf)
        ch1mass =  HI_masscutfiddle(cmass, aa, mcutf=mcf)   
        sh1mass =  HI_masscutfiddle(smass, aa, mcutf=mcf)   
        h1mass = np.concatenate((ch1mass, sh1mass), axis=0)    
        #
        h1mesh = pm.paint(pos, mass=h1mass)    
        pkh1 = FFTPower(h1mesh/h1mesh.cmean(), mode='1d').power['power']
        pkh1m = FFTPower(h1mesh/h1mesh.cmean(), second=dm/dm.cmean(), mode='1d').power['power']
        #Bias
        b1[:, imc] = pkh1m/pkm
        b1sq[:, imc] = pkh1/pkm

    np.savetxt(ofolder+bname+'auto'+suff+'.txt', np.concatenate((k.reshape(-1, 1), b1sq**0.5), axis=1), 
                                           header='mcut factors = %s\nk, pkh1xm/pkm, pkh1/pkm^0.5'%mcfv)
    np.savetxt(ofolder+bname+'cross'+suff+'.txt', np.concatenate((k.reshape(-1, 1), b1), axis=1), 
                                           header='mcut factors = %s\nk, pkh1xm/pkm, pkh1mx/pkm'%mcfv)

    return k, b1, b1sq
Exemple #27
0
def evaluate(model, data):
    from nbodykit.lab import FieldMesh, FFTPower, ProjectedFFTPower

    #print('Means are : ', model.mapp.cmean(), data.mapp.cmean())
    if abs(model.mapp.cmean()) > 1e-3: modmappmean = model.mapp.cmean()
    else: modmappmean = 1.
    if abs(data.mapp.cmean()) > 1e-3: datmappmean = data.mapp.cmean()
    else: datmappmean = 1.
    modmappmean, datmappmean = 1., 1.

    xm = FFTPower(first=FieldMesh(model.mapp / modmappmean),
                  second=FieldMesh(data.mapp / datmappmean),
                  mode='1d')
    xd = FFTPower(first=FieldMesh(model.d),
                  second=FieldMesh(data.d),
                  mode='1d')
    xs = FFTPower(first=FieldMesh(model.s),
                  second=FieldMesh(data.s),
                  mode='1d')

    pm1 = FFTPower(first=FieldMesh(model.mapp / modmappmean), mode='1d')
    pd1 = FFTPower(first=FieldMesh(model.d), mode='1d')
    ps1 = FFTPower(first=FieldMesh(model.s), mode='1d')

    pm2 = FFTPower(first=FieldMesh(data.mapp / datmappmean), mode='1d')
    pd2 = FFTPower(first=FieldMesh(data.d), mode='1d')
    ps2 = FFTPower(first=FieldMesh(data.s), mode='1d')

    data_preview = dict(s=[], d=[], mapp=[])
    model_preview = dict(s=[], d=[], mapp=[])

    for axes in [[1, 2], [0, 2], [0, 1]]:
        data_preview['d'].append(data.d.preview(axes=axes))
        data_preview['s'].append(data.s.preview(axes=axes))
        data_preview['mapp'].append(data.mapp.preview(axes=axes))
        model_preview['d'].append(model.d.preview(axes=axes))
        model_preview['s'].append(model.s.preview(axes=axes))
        model_preview['mapp'].append(model.mapp.preview(axes=axes))

    #data_preview['mapp'] = data.mapp.preview(axes=(0, 1))
    #model_preview['mapp'] = model.mapp.preview(axes=(0, 1))

    return xm.power, xs.power, xd.power, pm1.power, pm2.power, ps1.power, ps2.power, pd1.power, pd2.power, data_preview, model_preview
Exemple #28
0
def evaluate2d1(model, data, field, M0=0, kmin=None, dk=None, Nmu=5, retmesh=False, los=[0, 0, 1]):
    '''return position order:
    xm.power, xs.power, xd.power, 
    pm1.power, pm2.power, 
    ps1.power, ps2.power, 
    pd1.power, pd2.power, 
    data_preview, model_preview
    '''
    from nbodykit.lab import FieldMesh, FFTPower, ProjectedFFTPower

    if kmin is None: kmin = 0 
    if dk is None: dk = 2*numpy.pi/model.s.BoxSize[0]

    model.mapp += M0
    data.mapp += M0

    if abs(model.mapp.cmean()) > 1e-3: modmappmean = model.mapp.cmean()
    else: modmappmean = 1.
    if abs(data.mapp.cmean()) > 1e-3: datmappmean = data.mapp.cmean()
    else: datmappmean = 1.
    modmappmean, datmappmean = 1., 1.
        
    if field == 'mapp':
        x = FFTPower(first=FieldMesh(model.mapp/modmappmean), 
                  second=FieldMesh(data.mapp/datmappmean), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])
        p1 = FFTPower(first=FieldMesh(model.mapp/modmappmean), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])
        p2 = FFTPower(first=FieldMesh(data.mapp/datmappmean), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])

    elif field == 's':
        x = FFTPower(first=FieldMesh(model.s), second=FieldMesh(data.s), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])
        p1 = FFTPower(first=FieldMesh(model.s), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])
        p2 = FFTPower(first=FieldMesh(data.s), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])

    elif field == 'd':
        x = FFTPower(first=FieldMesh(model.d), second=FieldMesh(data.d), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])
        p1 = FFTPower(first=FieldMesh(model.d), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])
        p2 = FFTPower(first=FieldMesh(data.d), mode='2d', kmin=kmin, dk=dk, Nmu=Nmu, los=[0, 0, 1])
    else:
        print('Field not recongnized')
        return 0

    return x.power, p1.power, p2.power
Exemple #29
0
def calc_pk1d(aa, h1mesh, outfolder, fname):
    '''Compute the 1D redshift-space P(k) for the HI'''

    if rank==0: print('Calculating pk1d')
    pkh1h1   = FFTPower(h1mesh,mode='1d',kmin=0.025,dk=0.0125).power
    # Extract the quantities we want and write the file.
    kk   = pkh1h1['k']
    sn   = pkh1h1.attrs['shotnoise']
    pk   = np.abs(pkh1h1['power'])
    if rank==0:
        fout = open(outfolder + fname + "1d_{:6.4f}.txt".format(aa),"w")
        fout.write("# Subtracting SN={:15.5e}.\n".format(sn))
        fout.write("# {:>8s} {:>15s}\n".format("k","Pk_0_HI"))
        for i in range(kk.size):
            fout.write("{:10.5f} {:15.5e}\n".format(kk[i],pk[i]-sn))
        fout.close()
Exemple #30
0
def check_ic_power_spectra(genicfileout, camb_zstr, outdir=".", accuracy=0.07, m_nu=0):
    """Generate the power spectrum for each particle type from the generated simulation files
    and check that it matches the input. This is a consistency test on each simulation output."""
    #Generate power spectra
    output = os.path.join(outdir, genicfileout)
    #Now check that they match what we put into the simulation, from CAMB
    #Reload the CAMB files from disc, just in case something went wrong writing them.
    matterpow = os.path.join(outdir,"camb_linear/ics_matterpow_"+camb_zstr+".dat")
    transfer = os.path.join(outdir, "camb_linear/ics_transfer_"+camb_zstr+".dat")
    #Load DM catalog and try for a baryon catalog
    cats = {1: BigFileCatalog(output, dataset='1/', header='Header')}
    try:
        cats[0] = BigFileCatalog(output, dataset='0/', header='Header')
    except:
        pass
    omegab = cats[1].attrs['OmegaBaryon']
    omega0 = cats[1].attrs['Omega0']
    hubble = cats[1].attrs['HubbleParam']
    npart = int(np.round(np.cbrt(cats[1].attrs['TotNumPart'][1])))
    assert npart > 0
    cambpow = CLASSPowerSpectrum(matterpow, transfer,omega0=omega0, omegab=omegab, omeganu=m_nu/93.14/hubble**2)
    for sp in cats.keys():
        #GenPK output is at PK-[nu,by,DM]-basename(genicfileout)
        cats[sp].to_mesh(Nmesh=npart*2, window='cic', compensated=True, interlaced=True)
        pk = FFTPower(cats[sp], mode='1d', Nmesh=npart*2, dk=5.0e-6)
        #GenPK output is at PK-[nu,by,DM]-basename(genicfileout)
        #Load the power spectra
        #Convert units from kpc/h to Mpc/h
        kk_ic = pk.power['k'][1:]*1e3
        Pk_ic = pk.power['power'][1:].real/1e9
        modes_ic = pk.power['modes'][1:]
        ii = np.isfinite(kk_ic)
        kk_ic = kk_ic[ii]
        Pk_ic = Pk_ic[ii]
        #Load the power spectrum. Note that DM may be total.
        ccsp = sp
        if len(cats) == 1:
            ccsp = -1
            if m_nu > 0:
                ccsp = 3
        Pk_camb = cambpow.get_class_power(species=ccsp)
        (kk_ic, Pk_ic) = modecount_rebin(kk_ic, Pk_ic, modes_ic[ii], Pk_camb, ndesired=npart//2)
        error = plot_ic_power(kk_ic, Pk_ic, Pk_camb(kk_ic), sp=sp, npart=npart, outdir=outdir)
        #Don't worry too much about one failing mode.
        if np.size(np.where(error > accuracy)) > 3:
            raise RuntimeError("Pk accuracy check failed for "+str(sp)+". Max error: "+str(np.max(error)))