[yt-svn] commit/yt: 5 new changesets

Bitbucket commits-noreply at bitbucket.org
Fri Jan 27 10:29:38 PST 2012


5 new commits in yt:


https://bitbucket.org/yt_analysis/yt/changeset/6fdf31a764c3/
changeset:   6fdf31a764c3
branch:      yt
user:        Andrew Myers
date:        2012-01-26 22:15:40
summary:     first stab at adding particle support for Orion
affected #:  3 files

diff -r b00b8a98ec643bf18d1147cf8f398fc715e39d95 -r 6fdf31a764c3db2e7cab310482ebe9cf77a28c3e yt/frontends/orion/data_structures.py
--- a/yt/frontends/orion/data_structures.py
+++ b/yt/frontends/orion/data_structures.py
@@ -26,6 +26,7 @@
 import os
 import re
 import weakref
+import pdb
 
 from collections import defaultdict
 from string import strip, rstrip
@@ -88,7 +89,7 @@
         h.grid_left_edge[self.id,:] = self.LeftEdge[:]
         h.grid_right_edge[self.id,:] = self.RightEdge[:]
         #self.Time = h.gridTimes[self.id,0]
-        #self.NumberOfParticles = h.gridNumberOfParticles[self.id,0]
+        self.NumberOfParticles = 0 # these will be read in later
         self.field_indexes = h.field_indexes
         self.Children = h.gridTree[self.id]
         pIDs = h.gridReverseTree[self.id]
@@ -127,7 +128,39 @@
         self.__cache_endianness(self.levels[-1].grids[-1])
         AMRHierarchy.__init__(self,pf, self.data_style)
         self._populate_hierarchy()
-        
+        self._read_particles()
+
+    def _read_particles(self):
+        """
+        reads in particles and assigns them to grids
+
+        """
+        self.grid_particle_count = na.zeros(len(self.grids))
+        fn = self.pf.fullplotdir + "/StarParticles"
+        with open(fn, 'r') as f:
+            lines = f.readlines()
+            self.num_stars = int(lines[0].strip())
+            for line in lines[1:]:
+                particle_position_x = float(line.split(' ')[1])
+                particle_position_y = float(line.split(' ')[2])
+                particle_position_z = float(line.split(' ')[3])
+                coord = [particle_position_x, particle_position_y, particle_position_z]
+                # for each particle, determine which grids contain it
+                # copied from object_finding_mixin.py
+                mask=na.ones(self.num_grids)
+                for i in xrange(len(coord)):
+                    na.choose(na.greater(self.grid_left_edge[:,i],coord[i]), (mask,0), mask)
+                    na.choose(na.greater(self.grid_right_edge[:,i],coord[i]), (0,mask), mask)
+                    ind = na.where(mask == 1)
+            selected_grids = self.grids[ind]
+            # in orion, particles always live on the finest level.
+            # so, we want to assign the particle to the finest of
+            # the grids we just found
+            grid = sorted(selected_grids, key=lambda grid: grid.Level)[-1]
+            ind = na.where(self.grids == grid)[0][0]
+            self.grid_particle_count[ind] += 1
+            self.grids[ind].NumberOfParticles += 1
+
     def readGlobalHeader(self,filename,paranoid_read):
         """
         read the global header file for an Orion plotfile output.
@@ -308,7 +341,7 @@
         mylog.debug("Creating grid objects")
         self.grids = na.concatenate([level.grids for level in self.levels])
         self.grid_levels = na.concatenate([level.ngrids*[level.level] for level in self.levels])
-        self.grid_levels = na.array(self.grid_levels.reshape((self.num_grids,1)),dtype='int32')
+        self.grid_levels = self.grid_levels.reshape((self.num_grids,1))
         grid_dcs = na.concatenate([level.ngrids*[self.dx[level.level]] for level in self.levels],axis=0)
         self.grid_dxs = grid_dcs[:,0].reshape((self.num_grids,1))
         self.grid_dys = grid_dcs[:,1].reshape((self.num_grids,1))
@@ -488,7 +521,6 @@
                 param, vals = map(strip,map(rstrip,line.split("=")))
             except ValueError:
                 mylog.error("ValueError: '%s'", line)
-                continue
             if orion2enzoDict.has_key(param):
                 paramName = orion2enzoDict[param]
                 t = map(parameterDict[paramName], vals.split())
@@ -509,7 +541,7 @@
 
         self.parameters["TopGridRank"] = len(self.parameters["TopGridDimensions"])
         self.dimensionality = self.parameters["TopGridRank"]
-        self.domain_dimensions = na.array(self.parameters["TopGridDimensions"],dtype='int32')
+        self.domain_dimensions = self.parameters["TopGridDimensions"]
         self.refine_by = self.parameters["RefineBy"]
 
         if self.parameters.has_key("ComovingCoordinates") and bool(self.parameters["ComovingCoordinates"]):


diff -r b00b8a98ec643bf18d1147cf8f398fc715e39d95 -r 6fdf31a764c3db2e7cab310482ebe9cf77a28c3e yt/frontends/orion/fields.py
--- a/yt/frontends/orion/fields.py
+++ b/yt/frontends/orion/fields.py
@@ -22,6 +22,9 @@
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 """
+
+import numpy as na
+
 from yt.utilities.physical_constants import \
     mh, kboltz
 from yt.data_objects.field_info_container import \
@@ -135,3 +138,38 @@
 def _Temperature(field,data):
     return (data.pf["Gamma"]-1.0)*data.pf["mu"]*mh*data["ThermalEnergy"]/(kboltz*data["Density"])
 add_field("Temperature",function=_Temperature,units=r"\rm{Kelvin}",take_log=False)
+
+# particle fields
+
+def particle_func(p_field, dtype='float64'):
+    def _Particles(field, data):
+        io = data.hierarchy.io
+        if not data.NumberOfParticles > 0:
+            return na.array([], dtype=dtype)
+        else:
+            return io._read_particles(data, p_field).astype(dtype)
+
+    return _Particles
+
+_particle_field_list = ["mass", 
+                        "position_x",
+                        "position_y",
+                        "position_z",
+                        "momentum_x",
+                        "momentum_y",
+                        "momentum_z",
+                        "angmomen_x",
+                        "angmomen_y",
+                        "angmomen_z",
+                        "mlast",
+                        "mdeut",
+                        "n",
+                        "mdot",
+                        "burnstate",
+                        "id"]
+
+for pf in _particle_field_list:
+    pfunc = particle_func("particle_%s" % (pf))
+    add_field("particle_%s" % pf, function=pfunc,
+              validators = [ValidateSpatial(0)],
+              particle_type=True)


diff -r b00b8a98ec643bf18d1147cf8f398fc715e39d95 -r 6fdf31a764c3db2e7cab310482ebe9cf77a28c3e yt/frontends/orion/io.py
--- a/yt/frontends/orion/io.py
+++ b/yt/frontends/orion/io.py
@@ -39,11 +39,46 @@
     def modify(self, field):
         return field.swapaxes(0,2)
 
+    def _read_particles(self, grid, field): 
+        """
+        parses the Orion Star Particle text files
+        
+        """
+        index = {'particle_mass': 0,
+                 'particle_position_x': 1,
+                 'particle_position_y': 2,
+                 'particle_position_z': 3,
+                 'particle_momentum_x': 4,
+                 'particle_momentum_y': 5,
+                 'particle_momentum_z': 6,
+                 'particle_angmomen_x': 7,
+                 'particle_angmomen_y': 8,
+                 'particle_angmomen_z': 9,
+                 'particle_mlast': 10,
+                 'particle_mdeut': 11,
+                 'particle_n': 12,
+                 'particle_mdot': 13,
+                 'particle_burnstate': 14,
+                 'particle_id': 15}
+
+        def read(line, field):
+            return float(line.split(' ')[index[field]])
+
+        fn = grid.pf.fullplotdir + "/StarParticles"
+        with open(fn, 'r') as f:
+            lines = f.readlines()
+            particles = []
+            for line in lines[1:]:
+                particles.append(read(line, field))
+                
+        return na.array(particles)
+
     def _read_data_set(self,grid,field):
         """
         reads packed multiFABs output by BoxLib in "NATIVE" format.
 
         """
+
         filen = os.path.expanduser(grid.filename[field])
         off = grid._offset[field]
         inFile = open(filen,'rb')



https://bitbucket.org/yt_analysis/yt/changeset/389328b3894e/
changeset:   389328b3894e
branch:      yt
user:        Andrew Myers
date:        2012-01-26 22:22:59
summary:     merging in some changes I accidently overrode
affected #:  1 file

diff -r 6fdf31a764c3db2e7cab310482ebe9cf77a28c3e -r 389328b3894e8281048c2468a30787af70c6b4db yt/frontends/orion/data_structures.py
--- a/yt/frontends/orion/data_structures.py
+++ b/yt/frontends/orion/data_structures.py
@@ -341,7 +341,7 @@
         mylog.debug("Creating grid objects")
         self.grids = na.concatenate([level.grids for level in self.levels])
         self.grid_levels = na.concatenate([level.ngrids*[level.level] for level in self.levels])
-        self.grid_levels = self.grid_levels.reshape((self.num_grids,1))
+        self.grid_levels = na.array(self.grid_levels.reshape((self.num_grids,1)),dtype='int32')
         grid_dcs = na.concatenate([level.ngrids*[self.dx[level.level]] for level in self.levels],axis=0)
         self.grid_dxs = grid_dcs[:,0].reshape((self.num_grids,1))
         self.grid_dys = grid_dcs[:,1].reshape((self.num_grids,1))
@@ -521,6 +521,7 @@
                 param, vals = map(strip,map(rstrip,line.split("=")))
             except ValueError:
                 mylog.error("ValueError: '%s'", line)
+                continue
             if orion2enzoDict.has_key(param):
                 paramName = orion2enzoDict[param]
                 t = map(parameterDict[paramName], vals.split())
@@ -541,7 +542,7 @@
 
         self.parameters["TopGridRank"] = len(self.parameters["TopGridDimensions"])
         self.dimensionality = self.parameters["TopGridRank"]
-        self.domain_dimensions = self.parameters["TopGridDimensions"]
+        self.domain_dimensions = na.array(self.parameters["TopGridDimensions"],dtype='int32')
         self.refine_by = self.parameters["RefineBy"]
 
         if self.parameters.has_key("ComovingCoordinates") and bool(self.parameters["ComovingCoordinates"]):



https://bitbucket.org/yt_analysis/yt/changeset/b79b37c2536c/
changeset:   b79b37c2536c
branch:      yt
user:        Andrew Myers
date:        2012-01-26 23:39:39
summary:     don't need pdb anymore
affected #:  1 file

diff -r 389328b3894e8281048c2468a30787af70c6b4db -r b79b37c2536cc0a9a31e219e4e9c79feb257e73e yt/frontends/orion/data_structures.py
--- a/yt/frontends/orion/data_structures.py
+++ b/yt/frontends/orion/data_structures.py
@@ -26,7 +26,6 @@
 import os
 import re
 import weakref
-import pdb
 
 from collections import defaultdict
 from string import strip, rstrip



https://bitbucket.org/yt_analysis/yt/changeset/3971d2d44d68/
changeset:   3971d2d44d68
branch:      yt
user:        Andrew Myers
date:        2012-01-27 01:26:52
summary:     a couple of fixes for the particle reader
affected #:  2 files

diff -r b79b37c2536cc0a9a31e219e4e9c79feb257e73e -r 3971d2d44d68915a101776fb98a1fa8674cac976 yt/frontends/orion/data_structures.py
--- a/yt/frontends/orion/data_structures.py
+++ b/yt/frontends/orion/data_structures.py
@@ -151,14 +151,15 @@
                     na.choose(na.greater(self.grid_left_edge[:,i],coord[i]), (mask,0), mask)
                     na.choose(na.greater(self.grid_right_edge[:,i],coord[i]), (0,mask), mask)
                     ind = na.where(mask == 1)
-            selected_grids = self.grids[ind]
-            # in orion, particles always live on the finest level.
-            # so, we want to assign the particle to the finest of
-            # the grids we just found
-            grid = sorted(selected_grids, key=lambda grid: grid.Level)[-1]
-            ind = na.where(self.grids == grid)[0][0]
-            self.grid_particle_count[ind] += 1
-            self.grids[ind].NumberOfParticles += 1
+                selected_grids = self.grids[ind]
+                # in orion, particles always live on the finest level.
+                # so, we want to assign the particle to the finest of
+                # the grids we just found
+                if len(selected_grids) != 0:
+                    grid = sorted(selected_grids, key=lambda grid: grid.Level)[-1]
+                    ind = na.where(self.grids == grid)[0][0]
+                    self.grid_particle_count[ind] += 1
+                    self.grids[ind].NumberOfParticles += 1
 
     def readGlobalHeader(self,filename,paranoid_read):
         """


diff -r b79b37c2536cc0a9a31e219e4e9c79feb257e73e -r 3971d2d44d68915a101776fb98a1fa8674cac976 yt/frontends/orion/io.py
--- a/yt/frontends/orion/io.py
+++ b/yt/frontends/orion/io.py
@@ -69,8 +69,14 @@
             lines = f.readlines()
             particles = []
             for line in lines[1:]:
-                particles.append(read(line, field))
-                
+                if grid.NumberOfParticles > 0:
+                    x = read(line, "particle_position_x")
+                    y = read(line, "particle_position_y") 
+                    z = read(line, "particle_position_z") 
+                    if (grid.LeftEdge[0] < x < grid.RightEdge[0] and
+                        grid.LeftEdge[1] < y < grid.RightEdge[1] and
+                        grid.LeftEdge[2] < z < grid.RightEdge[2]):
+                        particles.append(read(line, field))
         return na.array(particles)
 
     def _read_data_set(self,grid,field):



https://bitbucket.org/yt_analysis/yt/changeset/6d8bfb101da0/
changeset:   6d8bfb101da0
branch:      yt
user:        Andrew Myers
date:        2012-01-27 16:38:41
summary:     particles in Orion tested and working
affected #:  1 file

diff -r 3971d2d44d68915a101776fb98a1fa8674cac976 -r 6d8bfb101da035580ef9140ec994e5104b275dce yt/frontends/orion/io.py
--- a/yt/frontends/orion/io.py
+++ b/yt/frontends/orion/io.py
@@ -70,12 +70,11 @@
             particles = []
             for line in lines[1:]:
                 if grid.NumberOfParticles > 0:
-                    x = read(line, "particle_position_x")
-                    y = read(line, "particle_position_y") 
-                    z = read(line, "particle_position_z") 
-                    if (grid.LeftEdge[0] < x < grid.RightEdge[0] and
-                        grid.LeftEdge[1] < y < grid.RightEdge[1] and
-                        grid.LeftEdge[2] < z < grid.RightEdge[2]):
+                    coord = read(line, "particle_position_x"), \
+                            read(line, "particle_position_y"), \
+                            read(line, "particle_position_z") 
+                    if ( (grid.LeftEdge < coord).all() and 
+                         (coord <= grid.RightEdge).all() ):
                         particles.append(read(line, field))
         return na.array(particles)

Repository URL: https://bitbucket.org/yt_analysis/yt/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.



More information about the yt-svn mailing list