[Yt-svn] yt: 4 new changesets

hg at spacepope.org hg at spacepope.org
Fri Sep 3 15:30:27 PDT 2010


hg Repository: yt
details:   yt/rev/e8db4ba02229
changeset: 3377:e8db4ba02229
user:      Matthew Turk <matthewturk at gmail.com>
date:
Thu Sep 02 21:28:28 2010 -0700
description:
Fixes for RAMSES and updating setup.py for enzo_test entry point

hg Repository: yt
details:   yt/rev/a332a51c273f
changeset: 3378:a332a51c273f
user:      Matthew Turk <matthewturk at gmail.com>
date:
Thu Sep 02 21:42:44 2010 -0700
description:
Updates to answer testing

hg Repository: yt
details:   yt/rev/9f8fb27e2fc1
changeset: 3379:9f8fb27e2fc1
user:      Matthew Turk <matthewturk at gmail.com>
date:
Fri Sep 03 15:30:11 2010 -0700
description:
Fixes to Gadget data from the GDF format.  Mostly stylistic, but also set the
particle fields to be recognized as such, which means they can be accessed
directly.  This script should now work:

import yt.frontends.gadget.data_structures as gds

file='decay_100.gyt.hdf5'
gf = gds.GadgetStaticOutput(file)
dd = gf.h.all_data()
px = dd["particle_position_x"]

hg Repository: yt
details:   yt/rev/a16fa728b1fc
changeset: 3380:a16fa728b1fc
user:      Matthew Turk <matthewturk at gmail.com>
date:
Fri Sep 03 15:30:24 2010 -0700
description:
Merge

diffstat:

 setup.py                                            |   2 +-
 yt/analysis_modules/halo_merger_tree/merger_tree.py |   7 ++-
 yt/data_objects/derived_quantities.py               |   9 +-
 yt/frontends/gadget/data_structures.py              |  71 +++++++++--------------
 yt/frontends/gadget/fields.py                       |  32 ++++++++++
 yt/frontends/gadget/io.py                           |  14 ++--
 yt/frontends/ramses/data_structures.py              |  12 ++-
 yt/frontends/ramses/io.py                           |   2 +
 yt/utilities/answer_testing/api.py                  |   4 +
 yt/utilities/answer_testing/hydro_tests.py          |   1 +
 yt/utilities/answer_testing/runner.py               |   3 +
 11 files changed, 97 insertions(+), 60 deletions(-)

diffs (truncated from 365 to 300 lines):

diff -r d134c2c665ec -r a16fa728b1fc setup.py
--- a/setup.py	Thu Sep 02 19:41:12 2010 -0700
+++ b/setup.py	Fri Sep 03 15:30:24 2010 -0700
@@ -56,7 +56,7 @@
                            'pdf' : ['pypdf']},
         entry_points = { 'console_scripts' : [
                             'yt = yt.utilities.command_line:run_main',
-                            'enzo_test = yt.extensions.enzo_test:run_main',
+                            'enzo_test = yt.utilities.answer_testing.runner:run_main',
                        ]},
         author="Matthew J. Turk",
         author_email="matthewturk at gmail.com",
diff -r d134c2c665ec -r a16fa728b1fc yt/analysis_modules/halo_merger_tree/merger_tree.py
--- a/yt/analysis_modules/halo_merger_tree/merger_tree.py	Thu Sep 02 19:41:12 2010 -0700
+++ b/yt/analysis_modules/halo_merger_tree/merger_tree.py	Fri Sep 03 15:30:24 2010 -0700
@@ -27,7 +27,7 @@
 import os, glob, md5, time, gc, sys
 import h5py
 import types
-import sqlite3 as sql
+
 from yt.funcs import *
 
 from yt.analysis_modules.halo_finding.halo_objects import \
@@ -35,6 +35,7 @@
 from yt.analysis_modules.halo_profiler.multi_halo_profiler import \
     HaloProfiler
 from yt.convenience import load
+from yt.utilities.logger import ytLogger as mylog
 try:
     from yt.utilities.kdtree import *
 except ImportError:
@@ -44,6 +45,10 @@
     ParallelAnalysisInterface, \
     parallel_blocking_call
 
+try:
+    import sqlite3 as sql
+except ImportError:
+    mylog.error("sqlite3 not imported!")
 
 column_types = {
 "GlobalHaloID":"INTEGER",
diff -r d134c2c665ec -r a16fa728b1fc yt/data_objects/derived_quantities.py
--- a/yt/data_objects/derived_quantities.py	Thu Sep 02 19:41:12 2010 -0700
+++ b/yt/data_objects/derived_quantities.py	Fri Sep 03 15:30:24 2010 -0700
@@ -29,6 +29,7 @@
 
 from yt.funcs import *
 
+from yt.utilities.data_point_utilities import FindBindingEnergy
 from yt.utilities.parallel_tools.parallel_analysis_interface import \
     ParallelAnalysisInterface
 from yt.funcs import \
@@ -267,10 +268,10 @@
     try:
         pot = G*_cudaIsBound(data, truncate, kinetic/G)
     except (ImportError, AssertionError):
-        pot = G*PointCombine.FindBindingEnergy(data["CellMass"],
-                                               data['x'],data['y'],data['z'],
-                                               truncate, kinetic/G)
-    mylog.info("Boundedness check took %0.3e seconds", time.time()-t1)
+        pot = G*FindBindingEnergy(data["CellMass"],
+                                  data['x'],data['y'],data['z'],
+                                  truncate, kinetic/G)
+        mylog.info("Boundedness check took %0.3e seconds", time.time()-t1)
     return [(pot / kinetic)]
 def _combIsBound(data, bound):
     return bound
diff -r d134c2c665ec -r a16fa728b1fc yt/frontends/gadget/data_structures.py
--- a/yt/frontends/gadget/data_structures.py	Thu Sep 02 19:41:12 2010 -0700
+++ b/yt/frontends/gadget/data_structures.py	Fri Sep 03 15:30:24 2010 -0700
@@ -26,8 +26,8 @@
 """
 
 import h5py
-import numpy as np
-import ipdb
+import numpy as na
+from itertools import izip
 
 from yt.funcs import *
 from yt.data_objects.grid_patch import \
@@ -42,41 +42,25 @@
 class GadgetGrid(AMRGridPatch):
     _id_offset = 0
     def __init__(self, hierarchy, id,dimensions,left_index,
-            level,parent_id,particle_count,Parent=[],Children=[]):
+                 level, parent_id, particle_count):
         AMRGridPatch.__init__(self, id, filename = hierarchy.filename,
                               hierarchy = hierarchy)
         self.id = id
-        self.address = '/data/grid_%010i'%id
-        self.dimensions = dimensions
-        self.left_index = left_index
-        self.level = level
+        self.ActiveDimensions = dimensions
+        self.start_index = left_index
         self.Level = level
-        self.parent_id = parent_id
-        self.particle_count = particle_count
+        self._parent_id = parent_id
+        self.Parent = None # Only one parent per grid
+        self.Children = []
+        self.NumberOfParticles = particle_count
         
         try:
-            padd =self.address+'/particles'
+            padd = '/data/grid_%010i/particles' % id
             self.particle_types = self.hierarchy._handle[padd].keys()
         except:
             self.particle_types =  ()
         self.filename = hierarchy.filename
         
-        self.Parent = Parent
-        self.Children = Children
-        
-    def _setup_dx(self):
-        # So first we figure out what the index is.  We don't assume
-        # that dx=dy=dz , at least here.  We probably do elsewhere.
-        if len(self.Parent)>0:
-            self.dds = self.Parent[0].dds / self.pf.refine_by
-        else:
-            LE, RE = self.hierarchy.grid_left_edge[self.id,:], \
-                     self.hierarchy.grid_right_edge[self.id,:]
-            self.dds = np.array((RE-LE)/self.ActiveDimensions)
-        if self.pf.dimensionality < 2: self.dds[1] = 1.0
-        if self.pf.dimensionality < 3: self.dds[2] = 1.0
-        self.data['dx'], self.data['dy'], self.data['dz'] = self.dds
-        
     def __repr__(self):
         return 'GadgetGrid_%05i'%self.id
         
@@ -116,30 +100,31 @@
         
     def _parse_hierarchy(self):
         f = self._handle # shortcut
-        npa = np.array
+        npa = na.array
         
-        grid_levels = npa(f['/grid_level'],dtype='int')
-        self.grid_left_edge  = npa(f['/grid_left_index'],dtype='int')
-        self.grid_dimensions = npa(f['/grid_dimensions'],dtype='int')
-        self.grid_right_edge = self.grid_left_edge + self.grid_dimensions 
-        grid_particle_count = npa(f['/grid_particle_count'],dtype='int')
-        self.grid_parent_id = npa(f['/grid_parent_id'],dtype='int')
-        self.max_level = np.max(self.grid_levels)
+        self.grid_levels.flat[:] = f['/grid_level'][:].astype("int32")
+        self.grid_left_edge[:]  = f['/grid_left_index'][:]
+        self.grid_dimensions[:] = f['/grid_dimensions'][:]
+        self.grid_right_edge[:] = self.grid_left_edge + self.grid_dimensions 
+        self.grid_particle_count.flat[:] = f['/grid_particle_count'][:].astype("int32")
+        grid_parent_id = f['/grid_parent_id'][:]
+        self.max_level = na.max(self.grid_levels)
         
-        args = zip(range(self.num_grids),grid_levels,self.grid_parent_id,
-            self.grid_left_edge,self.grid_dimensions, grid_particle_count)
-        grids = [self.grid(self,j,d,le,lvl,p,n) for j,lvl,p, le, d, n in args]
-        self.grids = npa(grids,dtype='object')
+        args = izip(xrange(self.num_grids), self.grid_levels,
+                    grid_parent_id, self.grid_left_edge,
+                    self.grid_dimensions, self.grid_particle_count)
+        self.grids = na.array([self.grid(self,j,d,le,lvl,p,n)
+                               for j,lvl,p, le, d, n in args],
+                           dtype='object')
         
         
         
     def _populate_grid_objects(self):    
-        ipdb.set_trace()
         for g in self.grids:
-            if g.parent_id>=0:
-                parent = self.grids[g.parent_id]
-                g.Parent = g.Parent + [parent,]
-                parent.Children = parent.Children + [g,]
+            if g._parent_id >= 0:
+                parent = self.grids[g._parent_id]
+                g.Parent = parent
+                parent.Children.append(g)
         for g in self.grids:
             g._prepare_grid()
             g._setup_dx()
diff -r d134c2c665ec -r a16fa728b1fc yt/frontends/gadget/fields.py
--- a/yt/frontends/gadget/fields.py	Thu Sep 02 19:41:12 2010 -0700
+++ b/yt/frontends/gadget/fields.py	Fri Sep 03 15:30:24 2010 -0700
@@ -40,6 +40,26 @@
 
 add_field = add_gadget_field
 
+translation_dict = {"particle_position_x" : "position_x",
+                    "particle_position_y" : "position_y",
+                    "particle_position_z" : "position_z",
+                   }
+
+def _generate_translation(mine, theirs):
+    pfield = mine.startswith("particle")
+    add_field(theirs, function=lambda a, b: b[mine], take_log=True,
+              particle_type = pfield)
+
+for f,v in translation_dict.items():
+    if v not in GadgetFieldInfo:
+        # Note here that it's the yt field that we check for particle nature
+        pfield = f.startswith("particle")
+        add_field(v, function=lambda a,b: None, take_log=False,
+                  validators = [ValidateDataField(v)],
+                  particle_type = pfield)
+    print "Setting up translator from %s to %s" % (v, f)
+    _generate_translation(v, f)
+
 
 #for f,v in translation_dict.items():
 #    add_field(f, function=lambda a,b: None, take_log=True,
@@ -49,9 +69,21 @@
 #        validators = [ValidateDataField(v)],
 #        units=r"\rm{cm}")
           
+
           
 add_field("position_x", function=lambda a,b: None, take_log=True,
           validators = [ValidateDataField("position_x")],
+          particle_type = True,
+          units=r"\rm{cm}")
+
+add_field("position_y", function=lambda a,b: None, take_log=True,
+          validators = [ValidateDataField("position_y")],
+          particle_type = True,
+          units=r"\rm{cm}")
+
+add_field("position_z", function=lambda a,b: None, take_log=True,
+          validators = [ValidateDataField("position_z")],
+          particle_type = True,
           units=r"\rm{cm}")
 
 add_field("VEL", function=lambda a,b: None, take_log=True,
diff -r d134c2c665ec -r a16fa728b1fc yt/frontends/gadget/io.py
--- a/yt/frontends/gadget/io.py	Thu Sep 02 19:41:12 2010 -0700
+++ b/yt/frontends/gadget/io.py	Fri Sep 03 15:30:24 2010 -0700
@@ -24,7 +24,7 @@
 """
 
 import h5py
-import numpy as np
+import numpy as na
 
 from yt.utilities.io_handler import \
     BaseIOHandler
@@ -32,15 +32,15 @@
 class IOHandlerGadget(BaseIOHandler):
     _data_style = 'gadget_infrastructure'
     def _read_data_set(self, grid, field):
-        data = ()
+        data = []
         fh = h5py.File(grid.filename,mode='r')
         for ptype in grid.particle_types:
-            address = '%s/particles/%s/%s'%(grid.address,field)
-            dat += fh[address].read(),
-        if len(data)>0:
-            data = np.vstack(data)
+            address = '/data/grid_%010i/particles/%s/%s' % (grid.id, ptype, field)
+            data.append(fh[address][:])
+        if len(data) > 0:
+            data = na.vstack(data)
         fh.close()
-        return np.array(data)
+        return na.array(data)
     def _read_field_names(self,grid): 
         adr = grid.Address
         fh = h5py.File(grid.filename,mode='r')
diff -r d134c2c665ec -r a16fa728b1fc yt/frontends/ramses/data_structures.py
--- a/yt/frontends/ramses/data_structures.py	Thu Sep 02 19:41:12 2010 -0700
+++ b/yt/frontends/ramses/data_structures.py	Fri Sep 03 15:30:24 2010 -0700
@@ -23,6 +23,10 @@
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 """
 
+import numpy as na
+import stat
+import weakref
+
 from yt.funcs import *
 from yt.data_objects.grid_patch import \
       AMRGridPatch
@@ -32,6 +36,8 @@
       StaticOutput
 import _ramses_reader
 from .fields import RAMSESFieldContainer
+from yt.utilities.definitions import \
+    mpc_conversion
 from yt.utilities.io_handler import \
     io_registry
 
@@ -351,12 +357,10 @@
         self.conversion_factors = defaultdict(lambda: 1.0)
         self.time_units['1'] = 1
         self.units['1'] = 1.0
-        self.units['unitary'] = 1.0 / (self["DomainRightEdge"] - self["DomainLeftEdge"]).max()
+        self.units['unitary'] = 1.0 / (self.domain_right_edge - self.domain_left_edge).max()
         seconds = 1 #self["Time"]
         self.time_units['years'] = seconds / (365*3600*24.0)
         self.time_units['days']  = seconds / (3600*24.0)



More information about the yt-svn mailing list