Beispiel #1
0
def load_sightline_scatter_data(sim, ray_id, output=3195):
    fn = '../../data/unanalyzed_spectra/ray_%s_%i_%i.h5' % (sim, output,
                                                            ray_id)
    plot_data = h5.File(fn, 'r')['grid']

    l = YTArray(plot_data['l'], 'cm')
    l = np.array(l.in_units('kpc'))

    temperature = np.array(plot_data['temperature'])
    density = np.array(plot_data['density'])
    metallicity = np.array(
        plot_data['metallicity']
    ) * 77.22007722007721  # converting from code units to zsun
    vx = np.array(plot_data['relative_velocity_x']) / 1e5  # converting to km/s
    vy = np.array(plot_data['relative_velocity_y']) / 1e5  # converting to km/s
    vz = np.array(plot_data['relative_velocity_z']) / 1e5  # converting to km/s

    vlos = np.array(plot_data['velocity_los']) / 1e5
    dl = np.array(plot_data['dl'])

    # O VI and H I column densities
    oden = np.array(plot_data['O_p5_number_density'])
    ocol = dl * np.array(oden)
    sicol = dl * np.array(plot_data['Si_p2_number_density'])
    hcol = dl * np.array(plot_data['H_p0_number_density'])

    return l, temperature, density, metallicity, vlos, ocol, sicol
plt.savefig('Coal_cumulative2.png')

# plt.figure()
# plt.loglog(Pbins.in_units('day'),Coalbins.in_units('yr'),ls='-',color='k')
# plt.xlabel(r'$\mathrm{Orbital\,Period\,(days)}$')
# plt.ylabel(r'$\mathrm{coalescence\,time\,(years)}$')
#
# plt.figure()
# plt.loglog(Abins.in_units('AU'),Coalbins.in_units('yr'),ls='-',color='k')
# plt.xlabel(r'$\mathrm{Semimajor\,axis\,(AU)}$')
# plt.ylabel(r'$\mathrm{coalescence\,time\,(years)}$')

plt.figure()
ax = plt.gca()
plt.loglog(Pbins.in_units('day'),Coalbins.in_units('yr'),ls='-',color='k')
plt.xlabel(r'$\mathrm{Orbital\,Period\,(days)}$')
plt.ylabel(r'$\mathrm{coalescence\,time\,(years)}$')

ax.set_xlim(Pbins.in_units('day').min(),Pbins.in_units('day').max())
# ax.set_ylim(Coalbins.in_units('yr').min(),Coalbins.in_units('yr').max())
ax.set_ylim(1e9,1e12)

xtickloc = [2,3,4,5,8,10,20]
ax.set_xticks(xtickloc)
ax.set_xticklabels(xtickloc)

ax2 = plt.twiny()
ax2.set_xscale('log')
ax2.set_xlim(ax.get_xlim())
tickloc = Pbins[::len(Pbins)/5]
Beispiel #3
0
def plot_vel(filament,ds,dataset,fil=-1,maskarray=False):
    #Routine to plot velocity of particles along a filament
    #Set gravitational constant
    G = YTQuantity(6.67408E-11,'m**3/(kg * s**2)')
    #Gather velocity and density values from disk, done in parallel to speed computation
    #We first gather a list of the profiles on the disk, then reshape this into a list of [density,other] profiles
    #This is then iterated over in parallel to load the correct data
    filelist = sorted(os.listdir(''.join(['/shome/mackie/data/',dataset,'/profiles'])))
    profnumbers = len(filelist)/2
    files = [ [filelist[i],filelist[i+profnumbers]] for i in range(profnumbers)] 
    del filelist,profnumbers
    



    storage = {}
    for stor,file_in_dir in ytpar.parallel_objects(files,storage=storage):
        
        #Determines correct index to give to segment profiles
        filnum = int(file_in_dir[0][7:10])
        segnum = int(file_in_dir[0][13:16])
        #Calc total density for each segment 
        densprof = yt.load(''.join(['/shome/mackie/data/',dataset,'/profiles/',file_in_dir[0]]))
        dm = densprof.data['dark_matter_density'].in_units('g/cm**3')
        dens = densprof.data['density'].in_units('g/cm**3')
        totaldens = dm + dens
        del densprof,dm,dens
        #Get velocity profiles
        velprof = yt.load(''.join(['/shome/mackie/data/',dataset,'/profiles/',file_in_dir[1]]))
        vel = velprof.data['cylindrical_radial_velocity'].in_units('km/s')

        stor.result = (vel,totaldens)
        stor.result_id = (filnum,segnum)



        
    #Restruct dict into np array of correct structure.
    vel_profs = [ [] for i in range(len(filament))]
    densprofs = [ [] for i in range(len(filament))]
    x = yt.load(''.join(['/shome/mackie/data/',dataset,'/profiles/',file_in_dir[0]])).data['x']
    xarr = [[] for i in range(len(filament))]
    for key,values in sorted(storage.items()):
        filnum,segnum = key
        vel,dens = values
        xarr[filnum].append(x.in_units('Mpc'))
        
        vel_profs[filnum].append(vel.in_units('km/s'))
        densprofs[filnum].append(dens)
    for i in range(len(xarr)):
        xarr[i] = YTArray(np.array(xarr[i]),'Mpc')
        vel_profs[i] = YTArray(np.array(vel_profs[i]),'km/s')
    vel_profs = YTArray(np.array(vel_profs),'km/s')
    xarr = YTArray(np.array(xarr),'Mpc')
    del storage
    #Turn into np arrays for QoL
    densprofs = np.array(densprofs)
    #Gather x bins from disk
    
    #Determine masses and thus escape velocities
    
      
    mass = [get_masses(densprofs[i],x,filament[i],ds,accumulate=True) for i in range(len(filament))]

    mass = np.array(mass)
    mass = YTArray(mass,'g')
    print mass[1][1]
    
    del densprofs
    
    print xarr[1][1]

    vel_ratio = ( ( (2*G* mass) / xarr) ** (1.0/2.0))
    vel_ratio = vel_ratio.in_units('km/s')

    if yt.is_root():                        
        print mass[1][1]
        print xarr[1][1]
        print vel_ratio[1][1]
        
#vel_ratio is **approx** escape vel, used to ratio later
    #Generate ratio of velocity to escape velocity
    vel_profs = (vel_profs.in_units('km/s')/vel_ratio.in_units('km/s'))
    del vel_ratio
    



    if fil > -1:
        
        length_plot =  plot_vel_fil(vel_profs[fil].v,gen_dists(filament[fil],ds),x)
    else:
        length_plot = None

    if maskarray:
        print"Masking Data"
        vel_profs = np.ma.masked(vel_profs, mask = ~maskarray,fill_value=np.nan)
    #Flatten vel profs, ought to bemore elegant solution
    vel_prof_flatten = []    
    for fil in vel_profs:
        for seg in fil:
            vel_prof_flatten.append(seg)
    vel_profs = np.array(vel_prof_flatten)
    del vel_prof_flatten

    plot = probmap.prob_heat_map(vel_profs,'radial_velocity',x=x)
    
    return plot,length_plot