# sorted dm ids, then all relevant dm physical properties # sorted star ids, then all relevant star physical properties import readsubf import numpy as np import readsnapHDF5 as rs from base_lookup import directory #HERE #import CalcHsml #=============================================================================================== resnap_name = "base102" base = directory(resnap_name)[0] snapnum = 313 #directory(resnap_name)[1] print resnap_name snapname = base + "/snapdir_"+str(snapnum).zfill(3)+ "/snap_"+str(snapnum).zfill(3) #snapname = base + "/snapdir_"+str(snapnum).zfill(3)+"_SAVE"+ "/snap_"+str(snapnum).zfill(3) print "snapname ", snapname #=============================================================================================== cat = readsubf.subfind_catalog(base,snapnum,masstab=True) nsubs = cat.nsubs print str(nsubs) + " subhalos!\n" parttype_list = [0,1,4]
def run_series(base_id="base102", snap_num=313): import numpy as np import readsubf import os from base_lookup import directory from run_J_align import run_J_align from subsnap_write import subsnap_write import time import glob ############# #Control Parameters base = directory(base_id)[0] snap_num = 313 #directory(base_id)[1] save_dir = base_id + "/" resnap_folder = 'resnaps/' subsnap_folder = save_dir+'subsnaps/' # Overwrite past analysis? overw = 0 # (Analysis restricted to only primary subhalos in given group) # Analyze subhalos within a given mass range: M_botlim = 10. M_toplim = 1000. # Analyze set # of subhalos? analyze_N = 3#-1. # JOB CONTROL: #Concurrent jobs? job_limit = 10 #Time between job submission? wait_time = 1 #seconds ############################################################################################ if not os.path.exists(save_dir): os.system('mkdir '+save_dir) if not os.path.exists(subsnap_folder): os.system('mkdir '+subsnap_folder) cat = readsubf.subfind_catalog(base,snap_num,masstab=True) sub_ids = cat.group_firstsub M_subs = cat.sub_mass[sub_ids] ind = np.logical_and(M_subs >= M_botlim, M_subs < M_toplim) M_subs = M_subs[ind] sub_ids = sub_ids[ind] #N_subs = np.uint32(M_subs.size) # Can insert specific subhalos instead: sub_ids = [469] if analyze_N > 0.: sub_ids = sub_ids[0:analyze_N] print "Will submit "+str(len(sub_ids))+" jobs.\n" raw_input("Press Enter to continue...") ################################################################################################# resnap = resnap_folder+base_id+"_"+"S"+str(snap_num).zfill(3)+'.resnap' #Write intermediate .snap files: subsnap_write(resnap_name=resnap,base=base,snap_num=snap_num,sub_ids=sub_ids,save_dir=save_dir) # Job group control: grp_name = "/bd_decomp" add_grp = "bgadd -L "+str(job_limit)+" "+grp_name mod_grp = "bgmod -L "+str(job_limit)+" "+grp_name os.system(add_grp) os.system(mod_grp) ################################################ def submit_job(base_id, base, snap_num, sub_id, dat_list, save_dir): if overw == 0: subsnap_name = save_dir+str(sub_id).zfill(5)+".dat" if subsnap_name in dat_list: print subsnap_name print "Done with this one!" else: print "Could not find ",subsnap_name,"... submitting job." #run_bd(base_id, base, snap_num, sub_id, grp_name) run_J_align(base_id, base, snap_num, sub_id, grp_name) print "Waiting ",str(wait_time), "seconds to submit next job..." time.sleep(wait_time) else: #run_bd(base_id, base, snap_num, sub_id, grp_name) run_J_align(base_id, base, snap_num, sub_id, grp_name) print "Waiting ",str(wait_time), "seconds to submit next job..." time.sleep(wait_time) ################################################ dat_list = glob.glob(save_dir+'*.dat') n_matches = len(sub_ids) for i in np.arange(n_matches): print str(i) +" of "+str(n_matches) submit_job(base_id=base_id,base=base,snap_num=snap_num,sub_id=sub_ids[i],dat_list=dat_list,save_dir=save_dir) print "Job submission done!"
def DensityProjection(save_dir, base_id, halo_id, pos, mass, hsml): import matplotlib matplotlib.use('agg') import matplotlib.pyplot as plt import pylab import numpy as np import os import SphMap import readsnapHDF5 as rs import base_lookup as bl #map resolution nx=256 ny=256 #non-zero -> take these values min_dens=1.0 max_dens=100.0 #################################################################################################### #################################################################################################### base = bl.directory(base_id)[0] snapnum = bl.directory(base_id)[1] #################################################################################################### x_width = pos[:,0].max()-pos[:,0].min() y_width = pos[:,1].max()-pos[:,1].min() z_width = pos[:,2].max()-pos[:,2].min() box=np.array([x_width*1.1,y_width*1.1,z_width*1.1], dtype="float32") center = np.array([0.,0.,0.,]) for i in range(3): center[i] = pos[:,i].min() + box[i]/2. #Face-on Projection dim0=0 dim1=1 map_face = SphMap.CalcDensProjection(pos, hsml, mass, mass, nx, ny, box[0], box[1], box[2], center[0], center[1], center[2], dim0, dim1, 1, 1) #Edge-on Projection dim0=0 dim1=2 map_edge = SphMap.CalcDensProjection(pos, hsml, mass, mass, nx, ny, box[0], box[1], box[2], center[0], center[1], center[2], dim0, dim1, 1, 1) if not os.path.exists(save_dir+"projections/"): os.system('mkdir '+save_dir+"projections/") #os.path.mkdir(save_dir) filename_out= save_dir + "projections/"+ str(halo_id) +"_proj.dat" f = open(filename_out,'wb') np.array([nx],dtype=np.uint32).tofile(f) np.array([ny],dtype=np.uint32).tofile(f) map_face.astype("float32").tofile(f) map_edge.astype("float32").tofile(f) f.close() map = map_face #Make image map = map * 10.0**10.0 fig = plt.figure( figsize = (10.,10.) ) pylab.spectral() ma=map.max()/2. mi=ma/10000.0 ma=np.log10(ma) mi=np.log10(mi) print 'mean density of map = ', map.mean() map=np.log10(map) print map.min(), map.max() print mi,ma map[map<mi]=mi map[map>ma]=ma print 'min/max map=', map.min(), map.max() #plt.imshow(np.array(map).T,origin='lower', interpolation='nearest',extent=[center[0]-box[0]/2., center[0]+box[0]/2., center[1]-box[1]/2., center[1]+box[1]/2.],vmin=np.log10(min_dens), vmax=np.log10(max_dens)) plt.imshow(np.array(map).T,origin='lower', interpolation='nearest',extent=[center[0]-box[0]/2., center[0]+box[0]/2., center[1]-box[1]/2., center[1]+box[1]/2.]) plt.axis([center[0]-box[0]/2., center[0]+box[0]/2., center[1]-box[1]/2., center[1]+box[1]/2.]) plt.xlabel('kpc/$h$', fontsize=20) plt.ylabel('kpc/$h$', fontsize=20) #plt.savefig(imagebase+str(num).zfill(3)+".eps") plt.savefig(save_dir + "projections/"+ str(halo_id)+"_face.png") plt.clf() map = map_edge #Make image map = map * 10.0**10.0 fig = plt.figure( figsize = (10.,10.) ) pylab.spectral() ma=map.max()/2. mi=ma/10000.0 ma=np.log10(ma) mi=np.log10(mi) print 'mean density of map = ', map.mean() map=np.log10(map) print map.min(), map.max() print mi,ma map[map<mi]=mi map[map>ma]=ma print 'min/max map=', map.min(), map.max() #plt.imshow(np.array(map).T,origin='lower', interpolation='nearest',extent=[center[0]-box[0]/2., center[0]+box[0]/2., center[1]-box[1]/2., center[1]+box[1]/2.],vmin=np.log10(min_dens), vmax=np.log10(max_dens)) plt.imshow(np.array(map).T,origin='lower', interpolation='nearest',extent=[center[0]-box[0]/2., center[0]+box[0]/2., center[1]-box[1]/2., center[1]+box[1]/2.]) plt.axis([center[0]-box[0]/2., center[0]+box[0]/2., center[1]-box[1]/2., center[1]+box[1]/2.]) plt.xlabel('kpc/$h$', fontsize=20) plt.ylabel('kpc/$h$', fontsize=20) #plt.savefig(imagebase+str(num).zfill(3)+".eps") plt.savefig(save_dir + "projections/"+ str(halo_id)+"_edge.png") plt.clf()
def run_series(base_id="base400", snap_num=314): import numpy as np # import readsubf import readsubfHDF5 import os from base_lookup import directory from run_find_disks import run_find_disks # from run_J_profile import run_J_profile from subsnap_write import subsnap_write import time import glob ############# # Control Parameters base = directory(base_id)[0] snap_num = 311 # snap_num = 314 #directory(base_id)[1] # snap_num = 189 #for z = 2 # snap_num = 250 base_dir = base_id + "/" save_dir = base_dir + "snap" + str(snap_num).zfill(3) + "/" resnap_folder = "resnaps/" subsnap_folder = save_dir + "subsnaps/" dat_folder = "data/" # Overwrite past analysis? overw = 1 # (Analysis restricted to only primary subhalos in given group) # Analyze subhalos within a given mass range: M_botlim = 100.0 M_toplim = 1000.0 # Analyze set # of subhalos? analyze_N = -1 # JOB CONTROL: # Concurrent jobs? job_limit = 10 # Time between job submission? wait_time = 10 # seconds ############################################################################################ if not os.path.exists(base_dir): os.system("mkdir " + base_dir) if not os.path.exists(save_dir): os.system("mkdir " + save_dir) if not os.path.exists(subsnap_folder): os.system("mkdir " + subsnap_folder) # cat = readsubf.subfind_catalog(base,snap_num,masstab=True) cat = readsubfHDF5.subfind_catalog(base, snap_num) sub_ids = cat.group_firstsub M_subs = cat.sub_mass[sub_ids] ind = np.logical_and(M_subs >= M_botlim, M_subs < M_toplim) M_subs = M_subs[ind] sub_ids = sub_ids[ind] # N_subs = np.uint32(M_subs.size) # Can insert specific subhalos instead: # sub_ids = [1136, 1302, 1536] # sub_ids = [8037] # sub_ids = [4987] # sub_ids = [0] """ sub_ids = [4024,\ 4987,\ 5517,\ 5704,\ 5791,\ 6265,\ 6911,\ 7542,\ 7721,\ 7746,\ 8005,\ 8037] """ if analyze_N > 0.0: sub_ids = sub_ids[0:analyze_N] print "Will submit " + str(len(sub_ids)) + " jobs.\n" raw_input("Press Enter to continue...") ################################################################################################# resnap = resnap_folder + base_id + "_" + "S" + str(snap_num).zfill(3) + ".resnap" # Write intermediate .snap files: subsnap_write(resnap_name=resnap, base=base, snap_num=snap_num, sub_ids=sub_ids, save_dir=save_dir) # Job group control: grp_name = "/bd_decomp" add_grp = "bgadd -L " + str(job_limit) + " " + grp_name mod_grp = "bgmod -L " + str(job_limit) + " " + grp_name os.system(add_grp) os.system(mod_grp) ################################################ def submit_job(base_id, base, snap_num, sub_id, dat_list, dat_dir): if overw == 0: subsnap_name = dat_dir + str(sub_id).zfill(5) + ".dat" if subsnap_name in dat_list: print subsnap_name print "Done with this one!" else: print "Could not find ", subsnap_name, "... submitting job." # run_bd(base_id, base, snap_num, sub_id, grp_name) run_find_disks(base_id, base, snap_num, sub_id, grp_name) # run_J_profile(base_id, base, snap_num, sub_id, grp_name) print "Waiting ", str(wait_time), "seconds to submit next job..." time.sleep(wait_time) else: # run_bd(base_id, base, snap_num, sub_id, grp_name) run_find_disks(base_id, base, snap_num, sub_id, grp_name) # run_J_profile(base_id, base, snap_num, sub_id, grp_name) print "Waiting ", str(wait_time), "seconds to submit next job..." time.sleep(wait_time) ################################################ dat_dir = save_dir + dat_folder dat_list = glob.glob(dat_dir + "*.dat") n_matches = len(sub_ids) for i in np.arange(n_matches): print str(i + 1) + " of " + str(n_matches) submit_job(base_id=base_id, base=base, snap_num=snap_num, sub_id=sub_ids[i], dat_list=dat_list, dat_dir=dat_dir) print "Job submission done!"