[Yt-svn] yt-commit r510 - trunk/yt/lagos

mturk at wrangler.dreamhost.com mturk at wrangler.dreamhost.com
Fri May 30 09:40:17 PDT 2008


Author: mturk
Date: Fri May 30 09:40:15 2008
New Revision: 510
URL: http://yt.spacepope.org/changeset/510

Log:
Added -- *reluctantly* -- another field to the DerivedField definition, which
describes whether or not a field is in all the grids.  If it's not, then pff,
it gets zero'd out.  This enables us, for instance, to do projections of the
field 'dark matter density.'



Modified:
   trunk/yt/lagos/BaseDataTypes.py
   trunk/yt/lagos/BaseGridType.py
   trunk/yt/lagos/DerivedFields.py

Modified: trunk/yt/lagos/BaseDataTypes.py
==============================================================================
--- trunk/yt/lagos/BaseDataTypes.py	(original)
+++ trunk/yt/lagos/BaseDataTypes.py	Fri May 30 09:40:15 2008
@@ -297,6 +297,27 @@
         else: # Can't find the field, try as it might
             raise exceptions.KeyError(field)
 
+    def get_data(self, fields=None, in_grids=False):
+        if self._grids == None:
+            self._get_list_of_grids()
+        points = []
+        #if not self.has_key('dx'):
+            #self._generate_coords()
+        if not fields:
+            fields_to_get = self.fields
+        else:
+            fields_to_get = ensure_list(fields)
+        mylog.debug("Going to obtain %s (%s)", fields_to_get, self.fields)
+        for field in fields_to_get:
+            if self.data.has_key(field):
+                continue
+            mylog.info("Getting field %s from %s", field, len(self._grids))
+            if field not in self.hierarchy.field_list and not in_grids:
+                if self._generate_field(field):
+                    continue # True means we already assigned it
+            self[field] = na.concatenate(
+                [self._get_data_from_grid(grid, field)
+                 for grid in self._grids])
 
 class EnzoOrthoRayBase(Enzo1DData):
     def __init__(self, axis, coords, fields=None, pf=None, **kwargs):
@@ -320,28 +341,6 @@
                     & (self.py < self.pf.hierarchy.gridRightEdge[:,self.py_ax]))
         self._grids = self.hierarchy.grids[y]
 
-    def get_data(self, fields=None, in_grids=False):
-        if self._grids == None:
-            self._get_list_of_grids()
-        points = []
-        #if not self.has_key('dx'):
-            #self._generate_coords()
-        if not fields:
-            fields_to_get = self.fields
-        else:
-            fields_to_get = ensure_list(fields)
-        mylog.debug("Going to obtain %s (%s)", fields_to_get, self.fields)
-        for field in fields_to_get:
-            if self.data.has_key(field):
-                continue
-            mylog.info("Getting field %s from %s", field, len(self._grids))
-            if field not in self.hierarchy.field_list and not in_grids:
-                if self._generate_field(field):
-                    continue # True means we already assigned it
-            self[field] = na.concatenate(
-                [self._get_data_from_grid(grid, field)
-                 for grid in self._grids])
-
     def _get_data_from_grid(self, grid, field):
         # We are orthogonal, so we can feel free to make assumptions
         # for the sake of speed.
@@ -545,7 +544,9 @@
         sl = tuple(sl)
         if fieldInfo.has_key(field) and fieldInfo[field].particle_type:
             return grid[field]
-        if not grid.has_key(field):
+        elif field in fieldInfo and fieldInfo[field].not_in_all:
+            dv = grid[field][sl]
+        elif not grid.has_key(field):
             conv_factor = 1.0
             if fieldInfo.has_key(field):
                 conv_factor = fieldInfo[field]._convert_function(self)

Modified: trunk/yt/lagos/BaseGridType.py
==============================================================================
--- trunk/yt/lagos/BaseGridType.py	(original)
+++ trunk/yt/lagos/BaseGridType.py	Fri May 30 09:40:15 2008
@@ -97,8 +97,11 @@
                 try:
                     self[field] = self.readDataFast(field) * conv_factor
                 except self._read_exception:
-                    if field in fieldInfo and fieldInfo[field].particle_type:
-                        self[field] = na.array([],dtype='float64')
+                    if field in fieldInfo:
+                        if fieldInfo[field].particle_type:
+                            self[field] = na.array([],dtype='float64')
+                        if fieldInfo[field].not_in_all:
+                            self[field] = na.zeros(self.ActiveDimensions, dtype='float64')
                     else: raise
             else:
                 self._generate_field(field)

Modified: trunk/yt/lagos/DerivedFields.py
==============================================================================
--- trunk/yt/lagos/DerivedFields.py	(original)
+++ trunk/yt/lagos/DerivedFields.py	Fri May 30 09:40:15 2008
@@ -130,7 +130,7 @@
                  units = "", projected_units = "",
                  take_log = True, validators = None,
                  particle_type = False, vector_field=False,
-                 display_field = True,
+                 display_field = True, not_in_all=False,
                  projection_conversion = "cm"):
         self.name = name
         self._function = function
@@ -148,6 +148,7 @@
         self.vector_field = vector_field
         self.projection_conversion = projection_conversion
         self.display_field = display_field
+        self.not_in_all = not_in_all
     def check_available(self, data):
         for validator in self.validators:
             validator(data)
@@ -350,8 +351,10 @@
 add_field("particle mass", function=particle_func("particle_mass"),
           validators=[ValidateSpatial(0)], particle_type=True)
 
-add_field("Dark matter density", function=lambda a,b:None,
-          display_field=False)
+add_field("Dark matter density", function=lambda a,b: None,
+          validators=[ValidateDataField("Dark matter density"),
+                      ValidateSpatial(0)],
+          not_in_all = True)
 
 def _ParticleMass(field, data):
     particles = data["particle_mass"].astype('float64') * \



More information about the yt-svn mailing list