Source code for skid_reader

import numpy as np
import os,sys
sp = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0,'%s/../../classes' % sp)
from galaxy import Galaxy


###########################################
## LOAD LARGE TEXT FILES (single column) ##
###########################################
[docs]def iter_loadtxt(filename, skiprows=0): 'function to load large single-column text files quickly' vals=[] with open(filename,'r') as infile: for _ in range(skiprows): next(infile) for line in infile: if line.strip(): vals.append(int(line)) return np.asarray(vals)
[docs]def read_skid(obj): n_gas = obj.nparts[0] n_dm = obj.nparts[1] n_star = obj.nparts[4] obj.logOutput('READING SKID') ##################### ## STATFILE ##################### f = open(obj.locs.SKID_STATFILE,'r') num_gals = len(f.readlines()) f.close() obj.num_galaxies = num_gals if num_gals < 1: return 1 #/* # * Things to print out: # * 0: group id, 1: number of particles, 2: total mass, 3: gas mass, # * 4: star mass, 5: maximum circular velocity, 6: 1/2 mass circular velocity # * 7: outer circular velocity, 8: radius of max circular velocity, # * 9: 1/2 mass radius, 10: outer radius, 11: 1-D velocity dispersion, # * 12-14: center, 15-17: CM velocity, 18-20: pos. of most bound particle. # */ obj.logOutput('reading .stat file for galaxies...',indent=1) f = open(obj.locs.SKID_STATFILE,'r') data = np.genfromtxt(f) #data = np.genfromtxt(f,usecols=(12,13,14,10,9,3,4,5,6,7,15,16,17,0)) f.close() if num_gals == 1: cm_x = np.asarray([data[12]]) cm_y = np.asarray([data[13]]) cm_z = np.asarray([data[14]]) gal_or = np.asarray([data[10]]) gal_hr = np.asarray([data[9]]) gal_gmass = np.asarray([data[3]]) gal_smass = np.asarray([data[4]]) max_cv = np.asarray([data[5]]) hmr_cv = np.asarray([data[6]]) fmr_cv = np.asarray([data[7]]) cmv_x = np.asarray([data[15]]) cmv_y = np.asarray([data[16]]) cmv_z = np.asarray([data[17]]) #gal_id = np.asarray([data[13]]) max_cv_r = np.asarray([data[8]]) sigma1d = np.asarray([data[11]]) else: cm_x = data[:,12] cm_y = data[:,13] cm_z = data[:,14] gal_or = data[:,10] gal_hr = data[:,9] gal_gmass = data[:,3] gal_smass = data[:,4] max_cv = data[:,5] hmr_cv = data[:,6] fmr_cv = data[:,7] cmv_x = data[:,15] cmv_y = data[:,16] cmv_z = data[:,17] #gal_id = data[:,13] max_cv_r = data[:,8] sigma1d = data[:,11] data = None c = obj.conversionFactors cm_x += 0.5 cm_y += 0.5 cm_z += 0.5 cm_x *= c.TIPSY_L_convert cm_y *= c.TIPSY_L_convert cm_z *= c.TIPSY_L_convert gal_hr *= c.TIPSY_L_convert gal_or *= c.TIPSY_L_convert gal_gmass *= c.TIPSY_M_convert gal_smass *= c.TIPSY_M_convert max_cv *= c.TIPSY_V_convert hmr_cv *= c.TIPSY_V_convert fmr_cv *= c.TIPSY_V_convert cmv_x *= c.TIPSY_V_convert cmv_y *= c.TIPSY_V_convert cmv_z *= c.TIPSY_V_convert max_cv_r *= c.TIPSY_L_convert sigma1d *= c.TIPSY_V_convert for i in range(0,num_gals): obj.galaxies.append(Galaxy(cm_x[i],cm_y[i],cm_z[i], cmv_x[i],cmv_y[i],cmv_z[i], gal_gmass[i],gal_smass[i], gal_hr[i],gal_or[i])) obj.galaxies[i].total_mass = gal_gmass[i] + gal_smass[i] obj.galaxies[i].sigma1d = sigma1d[i] obj.galaxies[i].max_cv = max_cv[i] obj.galaxies[i].max_cv_r = max_cv_r[i] obj.galaxies[i].HMR_cv = hmr_cv[i] obj.galaxies[i].FMR_cv = fmr_cv[i] cm_x = None cm_y = None cm_z = None gal_or = None gal_hr = None gal_gmass = None gal_smass = None max_cv = None hmr_cv = None fmr_cv = None cmv_x = None cmv_y = None cmv_z = None max_cv_r = None sigma1d = None ##################### ## GROUPFILE ##################### obj.logOutput('reading .grp file for particles...',indent=1) skid_part_list = iter_loadtxt(obj.locs.SKID_GRPFILE,skiprows=1) skid_part_list = skid_part_list.astype(np.int32) skid_part_list -= 1 plists = obj.particleLists plists.galaxy_glist = skid_part_list[0:n_gas] if n_star > 0: plists.galaxy_slist = skid_part_list[n_gas+n_dm::] else: plists.galaxy_slist = np.zeros(0,dtype=np.int32) skid_part_list = None return