Пример #1
0
# 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]
Пример #2
0
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!"
Пример #3
0
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()
Пример #4
0
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!"