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
[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): 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 = [],[],[] total_cnt = 0 for i in range(0,6): if self.obj.nparts[i] > 0: if (1<<i) & (self.obj.rto.ZOOM_LOWRES): total_cnt += COUNT.get(i) self.obj.logOutput('reading %s...' % PARTS.get(i)) tmp = readsnap(s,'pos',PARTS.get(i),**self.obj.rto.pygr_OPTS)/h lowres_x.extend(tmp[:,0]) lowres_y.extend(tmp[:,1]) lowres_z.extend(tmp[:,2]) 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 lowres_x = None lowres_y = None lowres_z = None return if GAS: self.gpos = readsnap(s,'pos','gas',**self.obj.rto.pygr_OPTS) / h self.gvel = readsnap(s,'vel','gas',**self.obj.rto.pygr_OPTS) * vfactor self.gmass = readsnap(s,'mass','gas',**self.obj.rto.pygr_OPTS) * MCONVERT/h self.grho = readsnap(s,'rho', 'gas',**self.obj.rto.pygr_OPTS) self.grho = self.grho.astype(np.float64) * MCONVERT * h**2 / LCONVERT**3 self.gTemp = readsnap(s,'u','gas',units=1,**self.obj.rto.pygr_OPTS) #self.gu = readsnap(s,'u','gas',**self.obj.rto.pygr_OPTS) self.gsfr = readsnap(s,'sfr','gas',**self.obj.rto.pygr_OPTS) self.gHSML = readsnap(s,'hsml','gas',**self.obj.rto.pygr_OPTS) / h self.gnh = readsnap(s,'nh','gas',**self.obj.rto.pygr_OPTS) self.gne = readsnap(s,'ne','gas',**self.obj.rto.pygr_OPTS) if self.obj.snapAttribs.flagMetals: self.gZ = readsnap(s,'z','gas',**self.obj.rto.pygr_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.obj.rto.pygr_OPTS) self.gsigma = readsnap(s,'sigma','gas',**self.obj.rto.pygr_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.obj.rto.pygr_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.obj.rto.pygr_OPTS) / h self.svel = readsnap(s,'vel', 'star',**self.obj.rto.pygr_OPTS) * vfactor self.smass = readsnap(s,'mass','star',**self.obj.rto.pygr_OPTS) * MCONVERT/h if self.obj.snapAttribs.flagMetals: self.sZ = readsnap(s,'z','star',**self.obj.rto.pygr_OPTS) else: self.sZ = np.zeros(self.n_star,dtype=np.float32) if self.obj.snapAttribs.flagAge: self.sage = readsnap(s,'age','star',**self.obj.rto.pygr_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.obj.rto.pygr_OPTS) if self.massTable[1] > 0: self.dmmass = self.massTable[1] * MCONVERT/h else: self.dmmass = readsnap(s,'mass','dm',**self.obj.rto.pygr_OPTS) * MCONVERT/h if CONSERVE: self.obj.logOutput('CONSERVE_MEMORY=1, not reading in dmpos & dmvel!',indent=1) return self.dmpos = readsnap(s,'pos', 'dm',**self.obj.rto.pygr_OPTS) / h self.dmvel = readsnap(s,'vel', 'dm',**self.obj.rto.pygr_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')