Source code for particleData

from readgadget import *
import numpy as np

[docs]class ParticleData(object): """Class container for holding particle data. """ def __init__(self,obj): self.obj = obj self.opts = obj.rto.pygr_OPTS
[docs] def getParticleIDs(self, GAS=0, STAR=1, DM=0): if GAS: self.gIDs = readsnap(self.obj.snap,'pid','gas', **self.obj.rto.pygr_OPTS) if STAR: self.sIDs = readsnap(self.obj.snap,'pid','star',**self.obj.rto.pygr_OPTS) if DM: self.dmIDs = readsnap(self.obj.snap,'pid','dm', **self.obj.rto.pygr_OPTS)
[docs] def deleteParticleIDs(self): if hasattr(self,'gIDs'): del self.gIDs if hasattr(self,'sIDs'): del self.sIDs if hasattr(self,'dmIDs'): del self.dmIDs
[docs] def getRawParticleData(self): self.raw_grho = readsnap(self.obj.snap,'rho','gas',**self.obj.rto.pygr_OPTS) self.raw_gu = readsnap(self.obj.snap,'u', 'gas',**self.obj.rto.pygr_OPTS)
[docs] def getParticleData(self, GAS=1, STAR=1, DM=1, DISK=0, BULGE=0, BNDRY=0, LOWRES=0, GRHO_UNITS=1, METALARRAY=0,CONSERVE=0,VEL=1,NE=1): self.opts = self.obj.rto.pygr_OPTS MCONVERT = self.obj.conversionFactors.MCONVERT LCONVERT = self.obj.conversionFactors.LCONVERT vfactor = self.obj.conversionFactors.vfactor s = self.obj.snap h = self.obj.h if LOWRES > 0: PARTS = {0:'gas',1:'dm',2:'disk',3:'bulge',4:'star',5:'bndry'} COUNT = {0:self.obj.nparts[0],1:self.obj.nparts[1],2:self.obj.nparts[2], 3:self.obj.nparts[3],4:self.obj.nparts[4],5:self.obj.nparts[5]} lowres_x, lowres_y, lowres_z, lowres_mass = [],[],[],[] total_cnt = 0 for i in range(0,6): if self.obj.nparts[i] > 0: if (1<<i) & LOWRES: total_cnt += COUNT.get(i) self.obj.logOutput('reading %s...' % PARTS.get(i)) tmp = readsnap(s,'pos',PARTS.get(i),**self.opts)/h lowres_x.extend(tmp[:,0]) lowres_y.extend(tmp[:,1]) lowres_z.extend(tmp[:,2]) tmp = readsnap(s,'mass',PARTS.get(i),**self.opts) * MCONVERT/h lowres_mass.extend(tmp) self.lowrespos = np.zeros((total_cnt,3),dtype=np.float32) self.lowrespos[:,0] = lowres_x self.lowrespos[:,1] = lowres_y self.lowrespos[:,2] = lowres_z self.lowresmass = np.asarray(lowres_mass) lowres_x = None lowres_y = None lowres_z = None lowres_mass = None return if GAS: self.gpos = readsnap(s,'pos', 'gas',**self.opts) / h self.gvel = readsnap(s,'vel', 'gas',**self.opts) * vfactor self.gmass = readsnap(s,'mass','gas',**self.opts) * MCONVERT/h self.grho = readsnap(s,'rho', 'gas',**self.opts) self.grho = self.grho.astype(np.float64) * MCONVERT * h**2 / LCONVERT**3 self.gTemp = readsnap(s,'u', 'gas',units=1,**self.opts) self.gu = readsnap(s,'u', 'gas',**self.opts) self.gsfr = readsnap(s,'sfr', 'gas',**self.opts) self.gHSML = readsnap(s,'hsml','gas',**self.opts) / h self.gnh = readsnap(s,'nh', 'gas',**self.opts) if NE: self.gne = readsnap(s,'ne','gas',**self.opts) if self.obj.snapAttribs.flagMetals: self.gZ = readsnap(s,'z','gas',**self.opts) else: self.gZ = np.zeros(self.obj.nparts[0],dtype=np.float32) if self.obj.snapAttribs.flagFH2: self.gfH2 = readsnap(s,'fh2','gas',**self.opts) #self.gsigma = readsnap(s,'sigma','gas',**self.opts) else: self.gfH2 = np.zeros(self.obj.nparts[0],dtype=np.float32) #self.gsigma = np.zeros(self.obj.nparts[0],dtype=np.float32) if METALARRAY and self.obj.snapAttribs.flagMetals > 1: self.zarray = readsnap(s,'metals','gas',**self.opts) ## grho currently in Msun/kpc^3, lets now move to g/cm^3 if GRHO_UNITS: self.grho *= self.obj.constants.Msun_in_g ## to grams self.grho /= self.obj.constants.kpc_to_cm**3 ## to cm^3 self.grho /= self.obj.snapAttribs.time**3 ## to physical if self.obj.file_type == 'TIPSY': self.gpos *= h self.gpos += 0.5 self.gpos *= LCONVERT self.gHSML *= LCONVERT * h if STAR: if self.obj.snapAttribs.n_star > 0: self.spos = readsnap(s,'pos', 'star',**self.opts) / h self.svel = readsnap(s,'vel', 'star',**self.opts) * vfactor self.smass = readsnap(s,'mass','star',**self.opts) * MCONVERT/h if self.obj.snapAttribs.flagMetals: self.sZ = readsnap(s,'z','star',**self.opts) else: self.sZ = np.zeros(self.n_star,dtype=np.float32) if self.obj.snapAttribs.flagAge: self.sage = readsnap(s,'age','star',**self.opts) else: self.sage = np.zeros(self.n_star,dtype=np.float32) else: self.spos = np.zeros((0,3),dtype=np.float32) self.svel = np.zeros((0,3),dtype=np.float32) self.smass = np.zeros(0,dtype=np.float32) self.sZ = np.zeros(0,dtype=np.float32) self.sage = np.zeros(0,dtype=np.float32) if self.obj.file_type == 'TIPSY': self.spos *= h self.spos += 0.5 self.spos *= LCONVERT if DM: self.massTable = readhead(s,'mass',**self.opts) if self.massTable[1] > 0: self.dmmass = self.massTable[1] * MCONVERT/h else: self.dmmass = readsnap(s,'mass','dm',**self.opts) * MCONVERT/h if CONSERVE: self.obj.logOutput('CONSERVE_MEMORY=1, not reading in dmpos! (no maxrad calc)',indent=1) return self.dmpos = readsnap(s,'pos', 'dm',**self.opts) / h if VEL: self.dmvel = readsnap(s,'vel', 'dm',**self.opts) * vfactor if self.obj.file_type == 'TIPSY': self.dmpos *= h self.dmpos += 0.5 self.dmpos *= LCONVERT
[docs] def cleanUp(self): self.deleteParticleData() self.deleteParticleIDs()
[docs] def deleteAttribute(self,attrib): if hasattr(self, attrib): delattr(self,attrib)
[docs] def deleteParticleData(self): 'Function to delete particle data from the object for storing' self.deleteAttribute('gpos') self.deleteAttribute('gvel') self.deleteAttribute('gmass') self.deleteAttribute('grho') self.deleteAttribute('gTemp') self.deleteAttribute('gsfr') self.deleteAttribute('gZ') self.deleteAttribute('gHSML') self.deleteAttribute('gnh') self.deleteAttribute('gne') self.deleteAttribute('gfH2') self.deleteAttribute('gsigma') self.deleteAttribute('zarray') self.deleteAttribute('spos') self.deleteAttribute('svel') self.deleteAttribute('smass') self.deleteAttribute('sZ') self.deleteAttribute('sage') self.deleteAttribute('dmpos') self.deleteAttribute('dmvel') self.deleteAttribute('dmmass') self.deleteAttribute('lowrespos')