open( '/n/home04/adiazrivero/conv_powerspec/particle_level/nbar/hbugfix/nbar_%s_%s.txt' % (name, numb), 'rb')) N_part = dicti['N_part'] nbar = dicti['nbar'] #for 600 kpc box print 'nbar = %.3f' % nbar #mesh = BigFileMesh('/n/dvorkin_lab/anadr/%s_%s_%s_%s_h0.6909.bigfile' % (name,numb,nmesh,bs),'Field') meshdir = '/n/dvorkin_lab/anadr/%s_%s_%s_%s_hbugfix.bigfile' % (name, numb, nmesh, bs) mesh = BigFileMesh(meshdir, 'Field') print 'loaded mesh from %s' % meshdir one_plus_delta = mesh.paint(mode='real') #compensate for wrong h before l = bs / nmesh V = l**3 n = one_plus_delta.value * nbar N = n * V print('input number of particles:%s // recovered number: %s' % (N_part, N.sum())) ################################################## #average map \approx host ################################################## rho = n * mpart m_tot = np.sum(rho) * l**2
def load_TNG_map(TNG_basepath, snapNum, field, pm): assert field in ['dm', 'Mstar', 'ne', 'T', 'nHI', 'neVz', 'MstarVz'] #Try directly loading map. If it does not exist, paint the map and save it for future use. address = TNG_basepath + '/snapdir_' + str(snapNum).zfill( 3) + '/' + field + 'map_Nmesh' + str(pm.Nmesh[0]) try: TNGmap = BigFileMesh(address, dataset='Field').to_real_field() except: if field == 'dm': pos = [] for mdi in range(3): pos.append( load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType='dm', field='Coordinates', mdi=mdi)) pos = np.array(pos).T mass = 1.0 * pm.Nmesh.prod() / comm.allreduce(len(pos), op=MPI.SUM) layout = pm.decompose(pos) pos1 = layout.exchange(pos) del pos TNGmap = pm.create(type="real") TNGmap.paint(pos1, mass=mass, layout=None, hold=False) del pos1 elif field == 'Mstar': mass = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType='stars', field='Masses') pos = np.zeros((len(mass), 3), dtype=np.float32) for mdi in range(3): pos[:, mdi] = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType='stars', field='Coordinates', mdi=mdi) layout = pm.decompose(pos) pos1 = layout.exchange(pos) del pos mass1 = layout.exchange(mass) del mass TNGmap = pm.create(type="real") TNGmap.paint(pos1, mass=mass1, layout=None, hold=False) del pos1, mass1 elif field == 'ne': raise NotImplementedError elif field == 'T': raise NotImplementedError elif field == 'nHI': def nHI(mass, XHI): h = 0.6774 XH = 0.76 mp = 1.6726219e-27 Msun10 = 1.989e40 BoxSize = 205. Mpc_cm = 3.085677581e24 return Msun10 / h / (BoxSize / args.Nmesh * Mpc_cm / h)**3 * mass * XH / mp * XHI gasmass = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType='gas', field='Masses') XHI = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType='gas', field='NeutralHydrogenAbundance') mass = nHI(gasmass, XHI) pos = np.zeros((len(mass), 3), dtype=np.float32) for mdi in range(3): pos[:, mdi] = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType='gas', field='Coordinates', mdi=mdi) layout = pm.decompose(pos) pos1 = layout.exchange(pos) del pos mass1 = layout.exchange(mass) del mass TNGmap = pm.create(type="real") TNGmap.paint(pos1, mass=mass1, layout=None, hold=False) del pos1, mass1 elif field == 'ne_vz': raise NotImplementedError elif field == 'Mstar_vz': raise NotImplementedError FieldMesh(TNGmap).save(address) return TNGmap
def load_TNG_map(TNG_basepath, snapNum, field, pm): assert field in ['dm', 'Mstar', 'ne', 'nT', 'nHI', 'neVz', 'MstarVz'] #Try directly loading map. If it does not exist, paint the map and save it for future use. address = TNG_basepath + '/snapdir_' + str(snapNum).zfill( 3) + '/' + field + 'map_Nmesh' + str(pm.Nmesh[0]) try: TNGmap = BigFileMesh(address, dataset='Field').to_real_field() except: if field == 'dm': partType = 'dm' elif field in ['Mstar', 'MstarVz']: partType = 'stars' elif field in ['ne', 'nT', 'nHI', 'neVz']: partType = 'gas' if field == 'Mstar': mass = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='Masses') elif field == 'ne': gasmass = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='Masses') Xe = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='ElectronAbundance') a = scalefactor(TNG_basepath, snapNum) mass = n_cm3(gasmass, Xe, a, pm.Nmesh[0]) del gasmass, Xe elif field == 'nT': def temperature(Xe, u): XH = 0.76 kb = 1.38064852e-23 mp = 1.6726219e-27 ufac = 1e6 #u: (km/s)^2 -> (m/s)^2 mu = 4. / (1. + 3. * XH + 4. * XH * Xe) * mp T = 2. / 3. * ufac * u / kb * mu return T Xe = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='ElectronAbundance') u = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='InternalEnergy') T = temperature(Xe, u) del u gasmass = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='Masses') a = scalefactor(TNG_basepath, snapNum) ne = n_cm3(gasmass, Xe, a, pm.Nmesh[0]) del gasmass, Xe mass = ne * T del ne, T elif field == 'nHI': gasmass = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='Masses') XHI = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='NeutralHydrogenAbundance') a = scalefactor(TNG_basepath, snapNum) mass = n_cm3(gasmass, XHI, a, pm.Nmesh[0]) del gasmass, XHI elif field == 'neVz': gasmass = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='Masses') Xe = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='ElectronAbundance') a = scalefactor(TNG_basepath, snapNum) ne = n_cm3(gasmass, Xe, a, pm.Nmesh[0]) vz = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='Velocities', mdi=2) * a**0.5 mass = ne * vz del ne, vz elif field == 'MstarVz': mass = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='Masses') a = scalefactor(TNG_basepath, snapNum) vz = load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='Velocities', mdi=2) * a**0.5 mass = mass * vz del vz pos = [] for mdi in range(3): pos.append( load_TNG_data(TNG_basepath=TNG_basepath, snapNum=snapNum, partType=partType, field='Coordinates', mdi=mdi)) pos = np.array(pos).T layout = pm.decompose(pos) pos1 = layout.exchange(pos) if field == 'dm': mass1 = 1.0 * pm.Nmesh.prod() / pm.comm.allreduce(len(pos), op=MPI.SUM) else: mass1 = layout.exchange(mass) del mass del pos TNGmap = pm.create(type="real") TNGmap.paint(pos1, mass=mass1, layout=None, hold=False) del pos1, mass1 FieldMesh(TNGmap).save(address) return TNGmap