[yt-svn] commit/yt: ngoldbaum: Merged in atmyers/yt (pull request #2014)

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Wed Mar 9 09:41:53 PST 2016


1 new commit in yt:

https://bitbucket.org/yt_analysis/yt/commits/7cf5b3ebcc59/
Changeset:   7cf5b3ebcc59
Branch:      yt
User:        ngoldbaum
Date:        2016-03-09 17:41:48+00:00
Summary:     Merged in atmyers/yt (pull request #2014)

Allow the new volume renderings to work with ProjectionTransferFunction. Closes #1103.
Affected #:  5 files

diff -r c74d00a0b3ce8086dc90a2734061a524c6ff277e -r 7cf5b3ebcc5925d1e84fea66f16fa4e598411d6c yt/utilities/amr_kdtree/amr_kdtree.py
--- a/yt/utilities/amr_kdtree/amr_kdtree.py
+++ b/yt/utilities/amr_kdtree/amr_kdtree.py
@@ -28,6 +28,7 @@
     add_pygrids, \
     find_node, \
     kd_is_leaf, \
+    set_dirty, \
     depth_traverse, \
     depth_first_touch, \
     kd_traverse, \
@@ -165,7 +166,6 @@
         self.brick_dimensions = []
         self.sdx = ds.index.get_smallest_dx()
 
-        self.regenerate_data = True
         self._initialized = False
         try:
             self._id_offset = ds.index.grids[0]._id_offset
@@ -181,15 +181,15 @@
                          min_level=min_level, max_level=max_level,
                          data_source=data_source)
 
-    def set_fields(self, fields, log_fields, no_ghost):
+    def set_fields(self, fields, log_fields, no_ghost, force=False):
         new_fields = self.data_source._determine_fields(fields)
-        self.regenerate_data = \
-            self.fields is None or \
-            len(self.fields) != len(new_fields) or \
-            self.fields != new_fields
+        regenerate_data = self.fields is None or \
+                          len(self.fields) != len(new_fields) or \
+                          self.fields != new_fields or force
+        set_dirty(self.tree.trunk, regenerate_data)
         self.fields = new_fields
 
-        if self.log_fields is not None:
+        if self.log_fields is not None and not regenerate_data:
             flip_log = map(operator.ne, self.log_fields, log_fields)
         else:
             flip_log = [False] * len(log_fields)
@@ -199,6 +199,7 @@
         del self.bricks, self.brick_dimensions
         self.brick_dimensions = []
         bricks = []
+
         for b in self.traverse():
             map(_apply_log, b.my_data, flip_log, log_fields)
             bricks.append(b)
@@ -284,7 +285,7 @@
         return scatter_image(self.comm, owners[1], image)
 
     def get_brick_data(self, node):
-        if node.data is not None and not self.regenerate_data:
+        if node.data is not None and not node.dirty:
             return node.data
         grid = self.ds.index.grids[node.grid - self._id_offset]
         dds = grid.dds.ndarray_view()
@@ -297,7 +298,7 @@
         assert(np.all(grid.LeftEdge <= nle))
         assert(np.all(grid.RightEdge >= nre))
 
-        if grid in self.current_saved_grids and not self.regenerate_data:
+        if grid in self.current_saved_grids and not node.dirty:
             dds = self.current_vcds[self.current_saved_grids.index(grid)]
         else:
             dds = []
@@ -323,9 +324,9 @@
                                 nre.copy(),
                                 dims.astype('int64'))
         node.data = brick
+        node.dirty = False
         if not self._initialized:
             self.brick_dimensions.append(dims)
-        self.regenerate_data = False
         return brick
 
     def locate_brick(self, position):

diff -r c74d00a0b3ce8086dc90a2734061a524c6ff277e -r 7cf5b3ebcc5925d1e84fea66f16fa4e598411d6c yt/utilities/lib/amr_kdtools.pxd
--- a/yt/utilities/lib/amr_kdtools.pxd
+++ b/yt/utilities/lib/amr_kdtools.pxd
@@ -26,6 +26,7 @@
     cdef public Node right
     cdef public Node parent
     cdef public int grid
+    cdef public bint dirty
     cdef public np.int64_t node_id
     cdef public np.int64_t node_ind
     cdef np.float64_t left_edge[3]

diff -r c74d00a0b3ce8086dc90a2734061a524c6ff277e -r 7cf5b3ebcc5925d1e84fea66f16fa4e598411d6c yt/utilities/lib/amr_kdtools.pyx
--- a/yt/utilities/lib/amr_kdtools.pyx
+++ b/yt/utilities/lib/amr_kdtools.pyx
@@ -38,6 +38,7 @@
                   np.ndarray[np.float64_t, ndim=1] right_edge,
                   int grid,
                   np.int64_t node_id):
+        self.dirty = False
         self.left = left
         self.right = right
         self.parent = parent
@@ -49,6 +50,7 @@
         self.node_id = node_id
         self.split == NULL
 
+
     def print_me(self):
         print 'Node %i' % self.node_id
         print '\t le: %e %e %e' % (self.left_edge[0], self.left_edge[1],
@@ -135,6 +137,10 @@
     else:
         return 0
 
+def set_dirty(Node trunk, bint state):
+    for node in depth_traverse(trunk):
+        node.dirty = state
+
 def kd_traverse(Node trunk, viewpoint=None):
     if viewpoint is None:
         for node in depth_traverse(trunk):

diff -r c74d00a0b3ce8086dc90a2734061a524c6ff277e -r 7cf5b3ebcc5925d1e84fea66f16fa4e598411d6c yt/visualization/volume_rendering/off_axis_projection.py
--- a/yt/visualization/volume_rendering/off_axis_projection.py
+++ b/yt/visualization/volume_rendering/off_axis_projection.py
@@ -173,7 +173,7 @@
 
     sc.add_source(vol)
 
-    vol.set_sampler(camera)
+    vol.set_sampler(camera, interpolated=False)
     assert (vol.sampler is not None)
 
     mylog.debug("Casting rays")

diff -r c74d00a0b3ce8086dc90a2734061a524c6ff277e -r 7cf5b3ebcc5925d1e84fea66f16fa4e598411d6c yt/visualization/volume_rendering/render_source.py
--- a/yt/visualization/volume_rendering/render_source.py
+++ b/yt/visualization/volume_rendering/render_source.py
@@ -20,7 +20,8 @@
 from .transfer_functions import TransferFunction, \
     ProjectionTransferFunction, ColorTransferFunction
 from .utils import new_volume_render_sampler, data_source_or_all, \
-    get_corners, new_projection_sampler, new_mesh_sampler
+    get_corners, new_projection_sampler, new_mesh_sampler, \
+    new_interpolated_projection_sampler
 from yt.visualization.image_writer import apply_colormap
 from yt.data_objects.image_array import ImageArray
 from .zbuffer_array import ZBuffer
@@ -160,6 +161,8 @@
             raise RuntimeError("transfer_function not of correct type")
         if isinstance(transfer_function, ProjectionTransferFunction):
             self.sampler_type = 'projection'
+            self.volume.set_fields([self.field], log_fields=[False], 
+                                   no_ghost=True, force=True)
 
         self.transfer_function = transfer_function
         return self
@@ -217,15 +220,24 @@
         self.volume.set_fields(fields, log_fields, no_ghost)
         self.field = fields
 
-    def set_sampler(self, camera):
+    def set_sampler(self, camera, interpolated=True):
         """Sets a volume render sampler
 
         The type of sampler is determined based on the ``sampler_type`` attribute
         of the VolumeSource. Currently the ``volume_render`` and ``projection``
         sampler types are supported.
+
+        The 'interpolated' argument is only meaningful for projections. If True,
+        the data is first interpolated to the cell vertices, and then tri-linearly
+        interpolated to the ray sampling positions. If False, then the cell-centered
+        data is simply accumulated along the ray. Interpolation is always performed
+        for volume renderings.
+
         """
         if self.sampler_type == 'volume-render':
             sampler = new_volume_render_sampler(camera, self)
+        elif self.sampler_type == 'projection' and interpolated:
+            sampler = new_interpolated_projection_sampler(camera, self)
         elif self.sampler_type == 'projection':
             sampler = new_projection_sampler(camera, self)
         else:

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