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

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Wed May 11 11:27:16 PDT 2016


1 new commit in yt:

https://bitbucket.org/yt_analysis/yt/commits/8b661ffb2b26/
Changeset:   8b661ffb2b26
Branch:      yt
User:        chummels
Date:        2016-05-11 18:27:03+00:00
Summary:     Merged in atmyers/yt (pull request #2161)

[BUGFIX] Enforce periodicity in annotate_particles. Closes Issue #543.
Affected #:  1 file

diff -r db993aae188791672893608249078d43a42b50cb -r 8b661ffb2b26c38a26c90e1c2854b9cb32bb9a34 yt/visualization/plot_modifications.py
--- a/yt/visualization/plot_modifications.py
+++ b/yt/visualization/plot_modifications.py
@@ -27,7 +27,7 @@
 from yt.funcs import \
     mylog, iterable
 from yt.extern.six import add_metaclass
-from yt.units.yt_array import YTQuantity, YTArray
+from yt.units.yt_array import YTQuantity, YTArray, uhstack
 from yt.visualization.image_writer import apply_colormap
 from yt.utilities.lib.geometry_utils import triangle_plane_intersect
 from yt.utilities.lib.pixelization_routines import \
@@ -1519,21 +1519,53 @@
         field_x = "particle_position_%s" % axis_names[xax]
         field_y = "particle_position_%s" % axis_names[yax]
         pt = self.ptype
-        gg = ( ( reg[pt, field_x] >= x0 ) & ( reg[pt, field_x] <= x1 )
-           &   ( reg[pt, field_y] >= y0 ) & ( reg[pt, field_y] <= y1 ) )
+        self.periodic_x = plot.data.ds.periodicity[xax]
+        self.periodic_y = plot.data.ds.periodicity[yax]
+        self.LE = plot.data.ds.domain_left_edge[xax], \
+                  plot.data.ds.domain_left_edge[yax]
+        self.RE = plot.data.ds.domain_right_edge[xax], \
+                  plot.data.ds.domain_right_edge[yax]
+        period_x = plot.data.ds.domain_width[xax]
+        period_y = plot.data.ds.domain_width[yax]
+        particle_x, particle_y = self._enforce_periodic(reg[pt, field_x],
+                                                        reg[pt, field_y],
+                                                        x0, x1, period_x,
+                                                        y0, y1, period_y)
+        gg = ( ( particle_x >= x0 ) & ( particle_x <= x1 )
+           &   ( particle_y >= y0 ) & ( particle_y <= y1 ) )
         if self.minimum_mass is not None:
             gg &= (reg[pt, "particle_mass"] >= self.minimum_mass)
             if gg.sum() == 0: return
         plot._axes.hold(True)
         px, py = self.convert_to_plot(plot,
-                    [np.array(reg[pt, field_x][gg][::self.stride]),
-                     np.array(reg[pt, field_y][gg][::self.stride])])
+                    [np.array(particle_x[gg][::self.stride]),
+                     np.array(particle_y[gg][::self.stride])])
         plot._axes.scatter(px, py, edgecolors='None', marker=self.marker,
                            s=self.p_size, c=self.color,alpha=self.alpha)
         plot._axes.set_xlim(xx0,xx1)
         plot._axes.set_ylim(yy0,yy1)
         plot._axes.hold(False)
 
+    def _enforce_periodic(self,
+                          particle_x,
+                          particle_y,
+                          x0, x1, period_x,
+                          y0, y1, period_y):
+        #  duplicate particles if periodic in that direction AND if the plot
+        #  extends outside the domain boundaries.
+        if self.periodic_x and x0 > self.LE[0]:
+            particle_x = uhstack((particle_x, particle_x + period_x))
+            particle_y = uhstack((particle_y, particle_y))
+        if self.periodic_x and x1 < self.RE[0]:
+            particle_x = uhstack((particle_x, particle_x - period_x))
+            particle_y = uhstack((particle_y, particle_y))
+        if self.periodic_y and y0 > self.LE[1]:
+            particle_y = uhstack((particle_y, particle_y + period_y))
+            particle_x = uhstack((particle_x, particle_x))
+        if self.periodic_y and y1 < self.RE[1]:
+            particle_y = uhstack((particle_y, particle_y - period_y))
+            particle_x = uhstack((particle_x, particle_x))
+        return particle_x, particle_y
 
     def _get_region(self, xlim, ylim, axis, data):
         LE, RE = [None]*3, [None]*3

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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-svn-spacepope.org/attachments/20160511/5d454d8d/attachment.html>


More information about the yt-svn mailing list