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

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


9 new commits in yt:

https://bitbucket.org/yt_analysis/yt/commits/ff0af19d197d/
Changeset:   ff0af19d197d
Branch:      yt
User:        atmyers
Date:        2016-03-03 21:19:49+00:00
Summary:     give the option to force data regeneration in amr_kdtree
Affected #:  1 file

diff -r 9321ff69146d0129738ece9ffc181212fb2c648f -r ff0af19d197d9d62bdf691a6ac541ccd7a0d3b7c yt/utilities/amr_kdtree/amr_kdtree.py
--- a/yt/utilities/amr_kdtree/amr_kdtree.py
+++ b/yt/utilities/amr_kdtree/amr_kdtree.py
@@ -181,12 +181,11 @@
                          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
+        self.regenerate_data = self.fields is None or \
+                               len(self.fields) != len(new_fields) or \
+                               self.fields != new_fields or force
         self.fields = new_fields
 
         if self.log_fields is not None:
@@ -325,7 +324,6 @@
         node.data = brick
         if not self._initialized:
             self.brick_dimensions.append(dims)
-        self.regenerate_data = False
         return brick
 
     def locate_brick(self, position):


https://bitbucket.org/yt_analysis/yt/commits/c4c69b6ebc5c/
Changeset:   c4c69b6ebc5c
Branch:      yt
User:        atmyers
Date:        2016-03-03 21:20:37+00:00
Summary:     hook up interpolated projections to the VolumeSource
Affected #:  2 files

diff -r ff0af19d197d9d62bdf691a6ac541ccd7a0d3b7c -r c4c69b6ebc5c63813e8fad92e651966c6a918014 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
@@ -175,7 +175,7 @@
     sc.camera = camera
     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 ff0af19d197d9d62bdf691a6ac541ccd7a0d3b7c -r c4c69b6ebc5c63813e8fad92e651966c6a918014 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
@@ -161,6 +162,7 @@
             raise RuntimeError("transfer_function not of correct type")
         if isinstance(transfer_function, ProjectionTransferFunction):
             self.sampler_type = 'projection'
+            self.volume.set_fields([self.field], [False], True, True)
 
         self.transfer_function = transfer_function
         return self
@@ -217,7 +219,7 @@
         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
@@ -226,6 +228,8 @@
         """
         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:


https://bitbucket.org/yt_analysis/yt/commits/b2536986a9c4/
Changeset:   b2536986a9c4
Branch:      yt
User:        atmyers
Date:        2016-03-04 00:20:32+00:00
Summary:     use keyword arguments here for clarity
Affected #:  1 file

diff -r c4c69b6ebc5c63813e8fad92e651966c6a918014 -r b2536986a9c466ae1b905adae7b2ab3e513129b2 yt/visualization/volume_rendering/render_source.py
--- a/yt/visualization/volume_rendering/render_source.py
+++ b/yt/visualization/volume_rendering/render_source.py
@@ -162,7 +162,8 @@
             raise RuntimeError("transfer_function not of correct type")
         if isinstance(transfer_function, ProjectionTransferFunction):
             self.sampler_type = 'projection'
-            self.volume.set_fields([self.field], [False], True, True)
+            self.volume.set_fields([self.field], log_fields=[False], 
+                                   no_ghost=True, force=True)
 
         self.transfer_function = transfer_function
         return self


https://bitbucket.org/yt_analysis/yt/commits/ef4854cf2a71/
Changeset:   ef4854cf2a71
Branch:      yt
User:        atmyers
Date:        2016-03-04 00:29:06+00:00
Summary:     documenting the interpolated option for set_sampler
Affected #:  1 file

diff -r b2536986a9c466ae1b905adae7b2ab3e513129b2 -r ef4854cf2a711c7adcd68c77ab39e48f85a6bad9 yt/visualization/volume_rendering/render_source.py
--- a/yt/visualization/volume_rendering/render_source.py
+++ b/yt/visualization/volume_rendering/render_source.py
@@ -226,6 +226,13 @@
         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)


https://bitbucket.org/yt_analysis/yt/commits/d77b2ec2d03b/
Changeset:   d77b2ec2d03b
Branch:      yt
User:        xarthisius
Date:        2016-03-04 02:58:41+00:00
Summary:     Add flag to indicate if kdtree's node needs to be regenerated
Affected #:  3 files

diff -r ef4854cf2a711c7adcd68c77ab39e48f85a6bad9 -r d77b2ec2d03b55dd733571d591133639f2eac1ad 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
@@ -183,9 +183,10 @@
 
     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 or force
+        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:
@@ -283,7 +284,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()
@@ -296,7 +297,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 = []
@@ -322,6 +323,7 @@
                                 nre.copy(),
                                 dims.astype('int64'))
         node.data = brick
+        node.dirty = False
         if not self._initialized:
             self.brick_dimensions.append(dims)
         return brick

diff -r ef4854cf2a711c7adcd68c77ab39e48f85a6bad9 -r d77b2ec2d03b55dd733571d591133639f2eac1ad 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 ef4854cf2a711c7adcd68c77ab39e48f85a6bad9 -r d77b2ec2d03b55dd733571d591133639f2eac1ad 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):


https://bitbucket.org/yt_analysis/yt/commits/57d8b4c9f466/
Changeset:   57d8b4c9f466
Branch:      yt
User:        atmyers
Date:        2016-03-04 02:16:31+00:00
Summary:     changing this so I don't break the interactive rendering
Affected #:  1 file

diff -r ef4854cf2a711c7adcd68c77ab39e48f85a6bad9 -r 57d8b4c9f466a475a4e3e24021f3f0473d4c5b4a yt/utilities/amr_kdtree/amr_kdtree.py
--- a/yt/utilities/amr_kdtree/amr_kdtree.py
+++ b/yt/utilities/amr_kdtree/amr_kdtree.py
@@ -188,7 +188,7 @@
                                self.fields != new_fields or force
         self.fields = new_fields
 
-        if self.log_fields is not None:
+        if self.log_fields is not None and not self.regenerate_data:
             flip_log = map(operator.ne, self.log_fields, log_fields)
         else:
             flip_log = [False] * len(log_fields)
@@ -198,6 +198,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)
@@ -214,6 +215,8 @@
     def traverse(self, viewpoint=None):
         for node in kd_traverse(self.tree.trunk, viewpoint=viewpoint):
             yield self.get_brick_data(node)
+        if self.regenerate_data:
+            self.regenerate_data = False
 
     def slice_traverse(self, viewpoint = None):
         if not hasattr(self.ds.index, "grid"):


https://bitbucket.org/yt_analysis/yt/commits/9a4567663559/
Changeset:   9a4567663559
Branch:      yt
User:        atmyers
Date:        2016-03-04 03:08:10+00:00
Summary:     reset flip log if regenerating.
Affected #:  1 file

diff -r d77b2ec2d03b55dd733571d591133639f2eac1ad -r 9a456766355994ce5d8e357a7e671ba63f490585 yt/utilities/amr_kdtree/amr_kdtree.py
--- a/yt/utilities/amr_kdtree/amr_kdtree.py
+++ b/yt/utilities/amr_kdtree/amr_kdtree.py
@@ -189,7 +189,7 @@
         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)


https://bitbucket.org/yt_analysis/yt/commits/6805cd9825c9/
Changeset:   6805cd9825c9
Branch:      yt
User:        atmyers
Date:        2016-03-04 03:10:26+00:00
Summary:     merging
Affected #:  1 file

diff -r 9a456766355994ce5d8e357a7e671ba63f490585 -r 6805cd9825c95b17e027697ed2edd617e7ca0c2f yt/utilities/amr_kdtree/amr_kdtree.py
--- a/yt/utilities/amr_kdtree/amr_kdtree.py
+++ b/yt/utilities/amr_kdtree/amr_kdtree.py
@@ -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)


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