[yt-svn] commit/yt: 9 new changesets
Bitbucket
commits-noreply at bitbucket.org
Tue Oct 2 18:45:53 PDT 2012
9 new commits in yt:
https://bitbucket.org/yt_analysis/yt/changeset/8fac44601bf5/
changeset: 8fac44601bf5
branch: yt
user: ngoldbaum
date: 2012-09-24 22:44:20
summary: Adding OffAxisProjectionPlot doesn't work yet.
affected #: 1 file
diff -r ae3f6a9e07a18644470391eaa684434ffc14bb8a -r 8fac44601bf5deba62b2f6452308897ed295a6f3 yt/visualization/plot_window.py
--- a/yt/visualization/plot_window.py
+++ b/yt/visualization/plot_window.py
@@ -1084,6 +1084,64 @@
PWViewerMPL.__init__(self,cutting,bounds,origin='center-window',periodic=False,oblique=True)
self.set_axes_unit(axes_unit)
+class OffAxisProjectionPlot(PWViewerMPL):
+ def __init__(self, pf, normal, fields, center='c', width=(1,'unitary'),
+ axes_unit=None, weight_field=None, max_level=None,
+ north_vector=None, volume=None, no_ghost=False, le=None,
+ re=None, interpolated=False):
+ r"""Creates an off axis projection plot from a parameter file
+
+ Given a pf object, a normal vector to project along, and
+ a field name string, this will return a PWViewrMPL object
+ containing the plot.
+
+ The plot can be updated using one of the many helper functions
+ defined in PlotWindow.
+
+ Parameters
+ ----------
+ pf : :class:`yt.data_objects.api.StaticOutput`
+ This is the parameter file object corresponding to the
+ simulation output to be plotted.
+ normal : a sequence of floats
+ The vector normal to the slicing plane.
+ fields : string
+ The name of the field(s) to be plotted.
+ center : A two or three-element vector of sequence floats, 'c', or 'center'
+ The coordinate of the center of the image. If left blanck,
+ the image centers on the location of the maximum density
+ cell. If set to 'c' or 'center', the plot is centered on
+ the middle of the domain.
+ width : A tuple or a float
+ A tuple containing the width of image and the string key of
+ the unit: (width, 'unit'). If set to a float, code units
+ are assumed
+ weight_field : string
+ The name of the weighting field. Set to None for no weight.
+ max_level: int
+ The maximum level to project to.
+ axes_unit : A string
+ The name of the unit for the tick labels on the x and y axes.
+ Defaults to None, which automatically picks an appropriate unit.
+ If axes_unit is '1', 'u', or 'unitary', it will not display the
+ units, and only show the axes name.
+ north-vector : a sequence of floats
+ A vector defining the 'up' direction in the plot. This
+ option sets the orientation of the slicing plane. If not
+ set, an arbitrary grid-aligned north-vector is chosen.
+
+ """
+ (bounds,center_rot) = GetOffAxisBoundsAndCenter(normal,center,width,pf)
+ # Hard-coding the resolution for now
+ projcam = ProjectionCamera(center, normal_vector, width, (800,800), fields,
+ weight=weight_field, volume=volume, no_ghost=no_ghost,
+ le=le, re=re, north_vector=north_vector, pf=pf,
+ interpolated=interpolated)
+ # Hard-coding the origin keyword since the other two options
+ # aren't well-defined for off-axis data objects
+ PWViewerMPL.__init__(self,projcam,bounds,origin='center-window',periodic=False,oblique=True)
+ self.set_axes_unit(axes_unit)
+
_metadata_template = """
%(pf)s<br><br>
https://bitbucket.org/yt_analysis/yt/changeset/79743892acbc/
changeset: 79743892acbc
branch: yt
user: ngoldbaum
date: 2012-09-26 01:35:44
summary: First pass at OffAxisProjectionPlot.
affected #: 3 files
diff -r 8fac44601bf5deba62b2f6452308897ed295a6f3 -r 79743892acbc5d49bbc5067db8077e349a745e1f yt/mods.py
--- a/yt/mods.py
+++ b/yt/mods.py
@@ -122,7 +122,7 @@
get_multi_plot, FixedResolutionBuffer, ObliqueFixedResolutionBuffer, \
callback_registry, write_bitmap, write_image, annotate_image, \
apply_colormap, scale_image, write_projection, write_fits, \
- SlicePlot, OffAxisSlicePlot, ProjectionPlot
+ SlicePlot, OffAxisSlicePlot, ProjectionPlot, OffAxisProjectionPlot
from yt.visualization.volume_rendering.api import \
ColorTransferFunction, PlanckTransferFunction, ProjectionTransferFunction, \
diff -r 8fac44601bf5deba62b2f6452308897ed295a6f3 -r 79743892acbc5d49bbc5067db8077e349a745e1f yt/visualization/api.py
--- a/yt/visualization/api.py
+++ b/yt/visualization/api.py
@@ -66,6 +66,7 @@
from plot_window import \
SlicePlot, \
OffAxisSlicePlot, \
- ProjectionPlot
+ ProjectionPlot, \
+ OffAxisProjectionPlot
diff -r 8fac44601bf5deba62b2f6452308897ed295a6f3 -r 79743892acbc5d49bbc5067db8077e349a745e1f yt/visualization/plot_window.py
--- a/yt/visualization/plot_window.py
+++ b/yt/visualization/plot_window.py
@@ -47,6 +47,7 @@
from .plot_modifications import get_smallest_appropriate_unit, \
callback_registry
from .tick_locators import LogLocator, LinearLocator
+from .volume_rendering.api import off_axis_projection
from yt.utilities.delaunay.triangulate import Triangulation as triang
from yt.config import ytcfg
@@ -157,7 +158,7 @@
center[y_dict[axis]]+width[1]/2]
return (bounds,center)
-def GetOffAxisBoundsAndCenter(normal, center, width, pf, unit='1'):
+def GetOffAxisBoundsAndCenter(normal, center, width, pf, unit='1',depth=None):
if width == None:
width = (pf.domain_width.min(),
pf.domain_width.min())
@@ -168,6 +169,13 @@
width = (width, width)
Wx, Wy = width
width = np.array((Wx/pf[unit], Wy/pf[unit]))
+ if depth != None:
+ if iterable(depth) and isinstance(depth[1],str):
+ d,unit = depth
+ depth = d/pf[unit]
+ elif iterable(depth):
+ raise RuntimeError("Depth must be a float or a (width,\"unit\") tuple")
+ width = np.append(width,depth)
if isinstance(center,str):
if center.lower() == 'm' or center.lower() == 'max':
v, center = pf.h.find_max("Density")
@@ -182,10 +190,13 @@
(normal,perp1,perp2) = ortho_find(normal)
mat = np.transpose(np.column_stack((perp1,perp2,normal)))
center = np.dot(mat,center)
- width = width/pf.domain_width.min()
+ width = width
+
+ if width.shape == (2,):
+ bounds = [-width[0]/2, width[0]/2, -width[1]/2, width[1]/2]
+ else:
+ bounds = [-width[0]/2, width[0]/2, -width[1]/2, width[1]/2, -width[2]/2, width[2]/2]
- bounds = [-width[0]/2, width[0]/2, -width[1]/2, width[1]/2]
-
return (bounds,center)
class PlotWindow(object):
@@ -247,19 +258,24 @@
old_fields = None
if self._frb is not None:
old_fields = self._frb.keys()
- try:
- bounds = self.xlim+self.ylim
- if self.oblique == False:
- self._frb = FixedResolutionBuffer(self.data_source,
- bounds, self.buff_size,
- self.antialias,
+ bounds = self.xlim+self.ylim
+ class_name = self.data_source.__class__.__name__
+ if 'OffAxisProjection' in class_name:
+ self._frb = OffAxisProjectionDummyFRB(self.data_source,
+ bounds, self.buff_size,
+ self.antialias,
periodic=self._periodic)
- else:
- self._frb = ObliqueFixedResolutionBuffer(self.data_source,
- bounds, self.buff_size,
- self.antialias,
- periodic=self._periodic)
- except:
+ elif 'Cutting' in class_name:
+ self._frb = ObliqueFixedResolutionBuffer(self.data_source,
+ bounds, self.buff_size,
+ self.antialias,
+ periodic=self._periodic)
+ elif 'Projection' in class_name or 'Slice' in class_name:
+ self._frb = FixedResolutionBuffer(self.data_source,
+ bounds, self.buff_size,
+ self.antialias,
+ periodic=self._periodic)
+ else:
raise RuntimeError("Failed to repixelize.")
if old_fields is None:
self._frb._get_data_source_fields()
@@ -836,7 +852,10 @@
if 'Slice' in self.data_source.__class__.__name__:
type = 'Slice'
if 'Proj' in self.data_source.__class__.__name__:
- type = 'Projection'
+ if 'OffAxis' in self.data_source.__class__.__name__:
+ type = 'OffAxisProjection'
+ else:
+ type = 'Projection'
weight = self.data_source.weight_field
if 'Cutting' in self.data_source.__class__.__name__:
type = 'OffAxisSlice'
@@ -1084,11 +1103,55 @@
PWViewerMPL.__init__(self,cutting,bounds,origin='center-window',periodic=False,oblique=True)
self.set_axes_unit(axes_unit)
+class OffAxisProjectionDummyFRB(FixedResolutionBuffer):
+ def __init__(self, data_source, bounds, buff_size, antialias = True,
+ periodic = False):
+ self.internal_dict = {}
+ FixedResolutionBuffer.__init__(self, data_source, bounds, buff_size, antialias, periodic)
+
+ def __getitem__(self, item):
+ try:
+ image = self.internal_dict[item]
+ except KeyError:
+ ds = self.data_source
+ image = off_axis_projection(ds.pf, ds.center, ds.normal_vector,
+ ds.width, ds.resolution, item,
+ weight=ds.weight_field, volume=ds.volume,
+ no_ghost=ds.no_ghost, interpolated=ds.interpolated)
+ self.internal_dict[item] = image
+ return image
+
+ def _get_data_source_fields(self):
+ for f in self.data_source.fields:
+ self[f] = None
+
+class OffAxisProjectionDummyDataSource(object):
+ _type_name = 'proj'
+ proj_style = 'integrate'
+ def __init__(self, center, pf, normal_vector, width, fields,
+ interpolated, resolution = (800,800), weight=None,
+ volume=None, no_ghost=False, le=None, re=None,
+ north_vector=None):
+ self.center = center
+ self.pf = pf
+ self.axis = 4 # always true for oblique data objects
+ self.normal_vector = normal_vector
+ self.width = width
+ self.fields = fields
+ self.interpolated = interpolated
+ self.resolution = resolution
+ self.weight_field = weight
+ self.volume = volume
+ self.no_ghost = no_ghost
+ self.le = le
+ self.re = re
+ self.north_vector = north_vector
+
class OffAxisProjectionPlot(PWViewerMPL):
def __init__(self, pf, normal, fields, center='c', width=(1,'unitary'),
- axes_unit=None, weight_field=None, max_level=None,
- north_vector=None, volume=None, no_ghost=False, le=None,
- re=None, interpolated=False):
+ depth=(1,'unitary'), axes_unit=None, weight_field=None,
+ max_level=None, north_vector=None, volume=None, no_ghost=False,
+ le=None, re=None, interpolated=False):
r"""Creates an off axis projection plot from a parameter file
Given a pf object, a normal vector to project along, and
@@ -1116,6 +1179,10 @@
A tuple containing the width of image and the string key of
the unit: (width, 'unit'). If set to a float, code units
are assumed
+ depth : A tuple or a float
+ A tuple containing the depth to project thourhg and the string
+ key of the unit: (width, 'unit'). If set to a float, code units
+ are assumed
weight_field : string
The name of the weighting field. Set to None for no weight.
max_level: int
@@ -1131,15 +1198,17 @@
set, an arbitrary grid-aligned north-vector is chosen.
"""
- (bounds,center_rot) = GetOffAxisBoundsAndCenter(normal,center,width,pf)
+ self.OffAxisProjection = True
+ (bounds,center_rot) = GetOffAxisBoundsAndCenter(normal,center,width,pf,depth=depth)
# Hard-coding the resolution for now
- projcam = ProjectionCamera(center, normal_vector, width, (800,800), fields,
- weight=weight_field, volume=volume, no_ghost=no_ghost,
- le=le, re=re, north_vector=north_vector, pf=pf,
- interpolated=interpolated)
+ fields = ensure_list(fields)[:]
+ width = np.array((bounds[1] - bounds[0], bounds[3] - bounds[2], bounds[5] - bounds[4]))
+ OffAxisProj = OffAxisProjectionDummyDataSource(center_rot, pf, normal, width, fields, interpolated,
+ weight=weight_field, volume=volume, no_ghost=no_ghost,
+ le=le, re=re, north_vector=north_vector)
# Hard-coding the origin keyword since the other two options
# aren't well-defined for off-axis data objects
- PWViewerMPL.__init__(self,projcam,bounds,origin='center-window',periodic=False,oblique=True)
+ PWViewerMPL.__init__(self,OffAxisProj,bounds,origin='center-window',periodic=False,oblique=True)
self.set_axes_unit(axes_unit)
_metadata_template = """
https://bitbucket.org/yt_analysis/yt/changeset/43ac69da0542/
changeset: 43ac69da0542
branch: yt
user: ngoldbaum
date: 2012-10-02 01:55:27
summary: Merging.
affected #: 3 files
diff -r e56c3f9dca02e663bddc24fdd04a30bff793788b -r 43ac69da054290c81e42fdc9d2473e743559e173 yt/mods.py
--- a/yt/mods.py
+++ b/yt/mods.py
@@ -122,7 +122,7 @@
get_multi_plot, FixedResolutionBuffer, ObliqueFixedResolutionBuffer, \
callback_registry, write_bitmap, write_image, annotate_image, \
apply_colormap, scale_image, write_projection, write_fits, \
- SlicePlot, OffAxisSlicePlot, ProjectionPlot
+ SlicePlot, OffAxisSlicePlot, ProjectionPlot, OffAxisProjectionPlot
from yt.visualization.volume_rendering.api import \
ColorTransferFunction, PlanckTransferFunction, ProjectionTransferFunction, \
diff -r e56c3f9dca02e663bddc24fdd04a30bff793788b -r 43ac69da054290c81e42fdc9d2473e743559e173 yt/visualization/api.py
--- a/yt/visualization/api.py
+++ b/yt/visualization/api.py
@@ -66,6 +66,7 @@
from plot_window import \
SlicePlot, \
OffAxisSlicePlot, \
- ProjectionPlot
+ ProjectionPlot, \
+ OffAxisProjectionPlot
diff -r e56c3f9dca02e663bddc24fdd04a30bff793788b -r 43ac69da054290c81e42fdc9d2473e743559e173 yt/visualization/plot_window.py
--- a/yt/visualization/plot_window.py
+++ b/yt/visualization/plot_window.py
@@ -47,6 +47,7 @@
from .plot_modifications import get_smallest_appropriate_unit, \
callback_registry
from .tick_locators import LogLocator, LinearLocator
+from .volume_rendering.api import off_axis_projection
from yt.utilities.delaunay.triangulate import Triangulation as triang
from yt.config import ytcfg
@@ -160,7 +161,7 @@
center[y_dict[axis]]+width[1]/2]
return (bounds,center)
-def GetOffAxisBoundsAndCenter(normal, center, width, pf, unit='1'):
+def GetOffAxisBoundsAndCenter(normal, center, width, pf, unit='1',depth=None):
if width == None:
width = (pf.domain_width.min(),
pf.domain_width.min())
@@ -171,6 +172,13 @@
width = (width, width)
Wx, Wy = width
width = np.array((Wx/pf[unit], Wy/pf[unit]))
+ if depth != None:
+ if iterable(depth) and isinstance(depth[1],str):
+ d,unit = depth
+ depth = d/pf[unit]
+ elif iterable(depth):
+ raise RuntimeError("Depth must be a float or a (width,\"unit\") tuple")
+ width = np.append(width,depth)
if isinstance(center,str):
if center.lower() == 'm' or center.lower() == 'max':
v, center = pf.h.find_max("Density")
@@ -185,9 +193,13 @@
(normal,perp1,perp2) = ortho_find(normal)
mat = np.transpose(np.column_stack((perp1,perp2,normal)))
center = np.dot(mat,center)
+ width = width
+
+ if width.shape == (2,):
+ bounds = [-width[0]/2, width[0]/2, -width[1]/2, width[1]/2]
+ else:
+ bounds = [-width[0]/2, width[0]/2, -width[1]/2, width[1]/2, -width[2]/2, width[2]/2]
- bounds = [-width[0]/2, width[0]/2, -width[1]/2, width[1]/2]
-
return (bounds,center)
class PlotWindow(object):
@@ -249,19 +261,24 @@
old_fields = None
if self._frb is not None:
old_fields = self._frb.keys()
- try:
- bounds = self.xlim+self.ylim
- if self.oblique == False:
- self._frb = FixedResolutionBuffer(self.data_source,
- bounds, self.buff_size,
- self.antialias,
+ bounds = self.xlim+self.ylim
+ class_name = self.data_source.__class__.__name__
+ if 'OffAxisProjection' in class_name:
+ self._frb = OffAxisProjectionDummyFRB(self.data_source,
+ bounds, self.buff_size,
+ self.antialias,
periodic=self._periodic)
- else:
- self._frb = ObliqueFixedResolutionBuffer(self.data_source,
- bounds, self.buff_size,
- self.antialias,
- periodic=self._periodic)
- except:
+ elif 'Cutting' in class_name:
+ self._frb = ObliqueFixedResolutionBuffer(self.data_source,
+ bounds, self.buff_size,
+ self.antialias,
+ periodic=self._periodic)
+ elif 'Projection' in class_name or 'Slice' in class_name:
+ self._frb = FixedResolutionBuffer(self.data_source,
+ bounds, self.buff_size,
+ self.antialias,
+ periodic=self._periodic)
+ else:
raise RuntimeError("Failed to repixelize.")
if old_fields is None:
self._frb._get_data_source_fields()
@@ -838,7 +855,10 @@
if 'Slice' in self.data_source.__class__.__name__:
type = 'Slice'
if 'Proj' in self.data_source.__class__.__name__:
- type = 'Projection'
+ if 'OffAxis' in self.data_source.__class__.__name__:
+ type = 'OffAxisProjection'
+ else:
+ type = 'Projection'
weight = self.data_source.weight_field
if 'Cutting' in self.data_source.__class__.__name__:
type = 'OffAxisSlice'
@@ -1090,6 +1110,114 @@
PWViewerMPL.__init__(self,cutting,bounds,origin='center-window',periodic=False,oblique=True)
self.set_axes_unit(axes_unit)
+class OffAxisProjectionDummyFRB(FixedResolutionBuffer):
+ def __init__(self, data_source, bounds, buff_size, antialias = True,
+ periodic = False):
+ self.internal_dict = {}
+ FixedResolutionBuffer.__init__(self, data_source, bounds, buff_size, antialias, periodic)
+
+ def __getitem__(self, item):
+ try:
+ image = self.internal_dict[item]
+ except KeyError:
+ ds = self.data_source
+ image = off_axis_projection(ds.pf, ds.center, ds.normal_vector,
+ ds.width, ds.resolution, item,
+ weight=ds.weight_field, volume=ds.volume,
+ no_ghost=ds.no_ghost, interpolated=ds.interpolated)
+ self.internal_dict[item] = image
+ return image
+
+ def _get_data_source_fields(self):
+ for f in self.data_source.fields:
+ self[f] = None
+
+class OffAxisProjectionDummyDataSource(object):
+ _type_name = 'proj'
+ proj_style = 'integrate'
+ def __init__(self, center, pf, normal_vector, width, fields,
+ interpolated, resolution = (800,800), weight=None,
+ volume=None, no_ghost=False, le=None, re=None,
+ north_vector=None):
+ self.center = center
+ self.pf = pf
+ self.axis = 4 # always true for oblique data objects
+ self.normal_vector = normal_vector
+ self.width = width
+ self.fields = fields
+ self.interpolated = interpolated
+ self.resolution = resolution
+ self.weight_field = weight
+ self.volume = volume
+ self.no_ghost = no_ghost
+ self.le = le
+ self.re = re
+ self.north_vector = north_vector
+
+class OffAxisProjectionPlot(PWViewerMPL):
+ def __init__(self, pf, normal, fields, center='c', width=(1,'unitary'),
+ depth=(1,'unitary'), axes_unit=None, weight_field=None,
+ max_level=None, north_vector=None, volume=None, no_ghost=False,
+ le=None, re=None, interpolated=False):
+ r"""Creates an off axis projection plot from a parameter file
+
+ Given a pf object, a normal vector to project along, and
+ a field name string, this will return a PWViewrMPL object
+ containing the plot.
+
+ The plot can be updated using one of the many helper functions
+ defined in PlotWindow.
+
+ Parameters
+ ----------
+ pf : :class:`yt.data_objects.api.StaticOutput`
+ This is the parameter file object corresponding to the
+ simulation output to be plotted.
+ normal : a sequence of floats
+ The vector normal to the slicing plane.
+ fields : string
+ The name of the field(s) to be plotted.
+ center : A two or three-element vector of sequence floats, 'c', or 'center'
+ The coordinate of the center of the image. If left blanck,
+ the image centers on the location of the maximum density
+ cell. If set to 'c' or 'center', the plot is centered on
+ the middle of the domain.
+ width : A tuple or a float
+ A tuple containing the width of image and the string key of
+ the unit: (width, 'unit'). If set to a float, code units
+ are assumed
+ depth : A tuple or a float
+ A tuple containing the depth to project thourhg and the string
+ key of the unit: (width, 'unit'). If set to a float, code units
+ are assumed
+ weight_field : string
+ The name of the weighting field. Set to None for no weight.
+ max_level: int
+ The maximum level to project to.
+ axes_unit : A string
+ The name of the unit for the tick labels on the x and y axes.
+ Defaults to None, which automatically picks an appropriate unit.
+ If axes_unit is '1', 'u', or 'unitary', it will not display the
+ units, and only show the axes name.
+ north-vector : a sequence of floats
+ A vector defining the 'up' direction in the plot. This
+ option sets the orientation of the slicing plane. If not
+ set, an arbitrary grid-aligned north-vector is chosen.
+
+ """
+ self.OffAxisProjection = True
+ (bounds,center_rot) = GetOffAxisBoundsAndCenter(normal,center,width,pf,depth=depth)
+ # Hard-coding the resolution for now
+ fields = ensure_list(fields)[:]
+ width = np.array((bounds[1] - bounds[0], bounds[3] - bounds[2], bounds[5] - bounds[4]))
+ OffAxisProj = OffAxisProjectionDummyDataSource(center_rot, pf, normal, width, fields, interpolated,
+ weight=weight_field, volume=volume, no_ghost=no_ghost,
+ le=le, re=re, north_vector=north_vector)
+ # Hard-coding the origin keyword since the other two options
+ # aren't well-defined for off-axis data objects
+ PWViewerMPL.__init__(self,OffAxisProj,bounds,origin='center-window',periodic=False,oblique=True)
+ self.set_axes_unit(axes_unit)
+
_metadata_template = """
%(pf)s<br><br>
https://bitbucket.org/yt_analysis/yt/changeset/b2263e35caa7/
changeset: b2263e35caa7
branch: yt
user: ngoldbaum
date: 2012-10-02 02:32:21
summary: Implementing Matt's suggestions. See PR 281.
affected #: 2 files
diff -r 43ac69da054290c81e42fdc9d2473e743559e173 -r b2263e35caa7eeaf80daace4b177229c4647936e yt/visualization/fixed_resolution.py
--- a/yt/visualization/fixed_resolution.py
+++ b/yt/visualization/fixed_resolution.py
@@ -28,6 +28,7 @@
x_dict, \
y_dict, \
axis_names
+from .volume_rendering.api import off_axis_projection
import _MPL
import numpy as np
import weakref
@@ -384,3 +385,24 @@
self.bounds).transpose()
self[item] = buff
return buff
+
+
+class OffAxisProjectionFixedResolutionBuffer(FixedResolutionBuffer):
+ def __init__(self, data_source, bounds, buff_size, antialias = True,
+ periodic = False):
+ self.data = {}
+ FixedResolutionBuffer.__init__(self, data_source, bounds, buff_size, antialias, periodic)
+
+ def __getitem__(self, item):
+ if item in self.data: return self.data[item]
+ mylog.info("Making a fixed resolutuion buffer of (%s) %d by %d" % \
+ (item, self.buff_size[0], self.buff_size[1]))
+ ds = self.data_source
+ buff = off_axis_projection(ds.pf, ds.center, ds.normal_vector,
+ ds.width, ds.resolution, item,
+ weight=ds.weight_field, volume=ds.volume,
+ no_ghost=ds.no_ghost, interpolated=ds.interpolated)
+ self[item] = buff
+ return buff
+
+
diff -r 43ac69da054290c81e42fdc9d2473e743559e173 -r b2263e35caa7eeaf80daace4b177229c4647936e yt/visualization/plot_window.py
--- a/yt/visualization/plot_window.py
+++ b/yt/visualization/plot_window.py
@@ -43,11 +43,11 @@
write_image, apply_colormap
from .fixed_resolution import \
FixedResolutionBuffer, \
- ObliqueFixedResolutionBuffer
+ ObliqueFixedResolutionBuffer, \
+ OffAxisProjectionFixedResolutionBuffer
from .plot_modifications import get_smallest_appropriate_unit, \
callback_registry
from .tick_locators import LogLocator, LinearLocator
-from .volume_rendering.api import off_axis_projection
from yt.utilities.delaunay.triangulate import Triangulation as triang
from yt.config import ytcfg
@@ -262,24 +262,10 @@
if self._frb is not None:
old_fields = self._frb.keys()
bounds = self.xlim+self.ylim
- class_name = self.data_source.__class__.__name__
- if 'OffAxisProjection' in class_name:
- self._frb = OffAxisProjectionDummyFRB(self.data_source,
- bounds, self.buff_size,
- self.antialias,
- periodic=self._periodic)
- elif 'Cutting' in class_name:
- self._frb = ObliqueFixedResolutionBuffer(self.data_source,
- bounds, self.buff_size,
- self.antialias,
- periodic=self._periodic)
- elif 'Projection' in class_name or 'Slice' in class_name:
- self._frb = FixedResolutionBuffer(self.data_source,
- bounds, self.buff_size,
- self.antialias,
- periodic=self._periodic)
- else:
- raise RuntimeError("Failed to repixelize.")
+ self._frb = self._frb_generator(self.data_source,
+ bounds, self.buff_size,
+ self.antialias,
+ periodic=self._periodic)
if old_fields is None:
self._frb._get_data_source_fields()
else:
@@ -852,16 +838,7 @@
if mpl_kwargs is None: mpl_kwargs = {}
axis = axis_names[self.data_source.axis]
weight = None
- if 'Slice' in self.data_source.__class__.__name__:
- type = 'Slice'
- if 'Proj' in self.data_source.__class__.__name__:
- if 'OffAxis' in self.data_source.__class__.__name__:
- type = 'OffAxisProjection'
- else:
- type = 'Projection'
- weight = self.data_source.weight_field
- if 'Cutting' in self.data_source.__class__.__name__:
- type = 'OffAxisSlice'
+ type = self._plot_type
names = []
for k, v in self.plots.iteritems():
if axis:
@@ -909,6 +886,9 @@
raise YTNotInsideNotebook
class SlicePlot(PWViewerMPL):
+ _plot_type = 'Slice'
+ _frb_generator = FixedResolutionBuffer
+
def __init__(self, pf, axis, fields, center='c', width=None, axes_unit=None,
origin='center-window'):
r"""Creates a slice plot from a parameter file
@@ -984,6 +964,9 @@
self.set_axes_unit(axes_unit)
class ProjectionPlot(PWViewerMPL):
+ __plot_type = 'Projection'
+ _frb_generator = FixedResolutionBuffer
+
def __init__(self, pf, axis, fields, center='c', width=None, axes_unit=None,
weight_field=None, max_level=None, origin='center-window'):
r"""Creates a projection plot from a parameter file
@@ -1063,6 +1046,9 @@
self.set_axes_unit(axes_unit)
class OffAxisSlicePlot(PWViewerMPL):
+ _plot_type = 'OffAxisSlice'
+ _frb_generator = ObliqueFixedResolutionBuffer
+
def __init__(self, pf, normal, fields, center='c', width=(1,'unitary'),
axes_unit=None, north_vector=None):
r"""Creates an off axis slice plot from a parameter file
@@ -1110,31 +1096,10 @@
PWViewerMPL.__init__(self,cutting,bounds,origin='center-window',periodic=False,oblique=True)
self.set_axes_unit(axes_unit)
-class OffAxisProjectionDummyFRB(FixedResolutionBuffer):
- def __init__(self, data_source, bounds, buff_size, antialias = True,
- periodic = False):
- self.internal_dict = {}
- FixedResolutionBuffer.__init__(self, data_source, bounds, buff_size, antialias, periodic)
-
- def __getitem__(self, item):
- try:
- image = self.internal_dict[item]
- except KeyError:
- ds = self.data_source
- image = off_axis_projection(ds.pf, ds.center, ds.normal_vector,
- ds.width, ds.resolution, item,
- weight=ds.weight_field, volume=ds.volume,
- no_ghost=ds.no_ghost, interpolated=ds.interpolated)
- self.internal_dict[item] = image
- return image
-
- def _get_data_source_fields(self):
- for f in self.data_source.fields:
- self[f] = None
-
class OffAxisProjectionDummyDataSource(object):
_type_name = 'proj'
proj_style = 'integrate'
+ _key_fields = []
def __init__(self, center, pf, normal_vector, width, fields,
interpolated, resolution = (800,800), weight=None,
volume=None, no_ghost=False, le=None, re=None,
@@ -1155,6 +1120,9 @@
self.north_vector = north_vector
class OffAxisProjectionPlot(PWViewerMPL):
+ _plot_type = 'OffAxisProjection'
+ _frb_generator = OffAxisProjectionFixedResolutionBuffer
+
def __init__(self, pf, normal, fields, center='c', width=(1,'unitary'),
depth=(1,'unitary'), axes_unit=None, weight_field=None,
max_level=None, north_vector=None, volume=None, no_ghost=False,
https://bitbucket.org/yt_analysis/yt/changeset/c00c65ad909e/
changeset: c00c65ad909e
branch: yt
user: ngoldbaum
date: 2012-10-02 03:05:25
summary: Fixing set_width to work with OffAxisProjectionPlot.
affected #: 2 files
diff -r b2263e35caa7eeaf80daace4b177229c4647936e -r c00c65ad909e0ad93ca6df617ce83c8475acf29f yt/visualization/fixed_resolution.py
--- a/yt/visualization/fixed_resolution.py
+++ b/yt/visualization/fixed_resolution.py
@@ -398,8 +398,11 @@
mylog.info("Making a fixed resolutuion buffer of (%s) %d by %d" % \
(item, self.buff_size[0], self.buff_size[1]))
ds = self.data_source
+ width = (self.bounds[1] - self.bounds[0],
+ self.bounds[3] - self.bounds[2],
+ self.bounds[5] - self.bounds[4])
buff = off_axis_projection(ds.pf, ds.center, ds.normal_vector,
- ds.width, ds.resolution, item,
+ width, ds.resolution, item,
weight=ds.weight_field, volume=ds.volume,
no_ghost=ds.no_ghost, interpolated=ds.interpolated)
self[item] = buff
diff -r b2263e35caa7eeaf80daace4b177229c4647936e -r c00c65ad909e0ad93ca6df617ce83c8475acf29f yt/visualization/plot_window.py
--- a/yt/visualization/plot_window.py
+++ b/yt/visualization/plot_window.py
@@ -261,7 +261,10 @@
old_fields = None
if self._frb is not None:
old_fields = self._frb.keys()
- bounds = self.xlim+self.ylim
+ if self.zlim:
+ bounds = self.xlim+self.ylim+self.zlim
+ else:
+ bounds = self.xlim+self.ylim
self._frb = self._frb_generator(self.data_source,
bounds, self.buff_size,
self.antialias,
@@ -306,6 +309,7 @@
nWx, nWy = Wx/factor, Wy/factor
self.xlim = (centerx - nWx*0.5, centerx + nWx*0.5)
self.ylim = (centery - nWy*0.5, centery + nWy*0.5)
+
@invalidate_data
def pan(self, deltas):
@@ -352,12 +356,16 @@
dy = bounds[3] - bounds[2]
self.xlim = (self.center[0] - dx/2., self.center[0] + dx/2.)
self.ylim = (self.center[1] - dy/2., self.center[1] + dy/2.)
- mylog.info("xlim = %f %f" %self.xlim)
- mylog.info("ylim = %f %f" %self.ylim)
else:
- self.xlim = bounds[0:2]
- self.ylim = bounds[2:]
-
+ self.xlim = tuple(bounds[0:2])
+ self.ylim = tuple(bounds[2:4])
+ if len(bounds) == 6:
+ self.zlim = tuple(bounds[4:6])
+ mylog.info("xlim = %f %f" %self.xlim)
+ mylog.info("ylim = %f %f" %self.ylim)
+ if self.zlim:
+ mylog.info("zlim = %f %f" %self.zlim)
+
@invalidate_data
def set_width(self, width, unit = '1'):
"""set the width of the plot window
@@ -403,14 +411,20 @@
width = (Wx,Wy)
width = [w / self.pf[unit] for w in width]
- centerx = (self.xlim[1] + self.xlim[0])/2
- centery = (self.ylim[1] + self.ylim[0])/2
+ centerx = (self.xlim[1] + self.xlim[0])/2.
+ centery = (self.ylim[1] + self.ylim[0])/2.
self.xlim = (centerx - width[0]/2.,
centerx + width[0]/2.)
self.ylim = (centery - width[1]/2.,
centery + width[1]/2.)
+ if hasattr(self,'zlim'):
+ centerz = (self.zlim[1] + self.zlim[0])/2.
+ mw = max(width)
+ self.zlim = (centerz - mw/2.,
+ centerz + mw/2.)
+
@invalidate_data
def set_center(self, new_center, unit = '1'):
"""Sets a new center for the plot window
@@ -1173,7 +1187,6 @@
set, an arbitrary grid-aligned north-vector is chosen.
"""
- self.OffAxisProjection = True
(bounds,center_rot) = GetOffAxisBoundsAndCenter(normal,center,width,pf,depth=depth)
# Hard-coding the resolution for now
fields = ensure_list(fields)[:]
https://bitbucket.org/yt_analysis/yt/changeset/18e031b3973d/
changeset: 18e031b3973d
branch: yt
user: ngoldbaum
date: 2012-10-02 07:34:58
summary: Fixing a couple of typos.
affected #: 1 file
diff -r de5451397981bca072e120ea53540e571ff56669 -r 18e031b3973db3c99d302b95b7b96e6f340fac73 yt/data_objects/universal_fields.py
--- a/yt/data_objects/universal_fields.py
+++ b/yt/data_objects/universal_fields.py
@@ -1002,7 +1002,7 @@
def _BMagnitude(field,data):
"""This assumes that your front end has provided Bx, By, Bz in
units of Gauss. If you use MKS, make sure to write your own
- MagneticEnergy field to deal with non-unitary \mu_0.
+ BMagnitude field to deal with non-unitary \mu_0.
"""
return np.sqrt((data["Bx"]**2 + data["By"]**2 + data["Bz"]**2))
add_field("BMagnitude",
@@ -1012,7 +1012,7 @@
def _PlasmaBeta(field,data):
"""This assumes that your front end has provided Bx, By, Bz in
units of Gauss. If you use MKS, make sure to write your own
- MagneticEnergy field to deal with non-unitary \mu_0.
+ PlasmaBeta field to deal with non-unitary \mu_0.
"""
return data['Pressure']/data['MagneticEnergy']
add_field("PlasmaBeta",
https://bitbucket.org/yt_analysis/yt/changeset/454d7e8a63d6/
changeset: 454d7e8a63d6
branch: yt
user: ngoldbaum
date: 2012-10-03 00:37:32
summary: Merging.
affected #: 1 file
diff -r bbc25a5eaac852d67c4b17d1c65431876555623a -r 454d7e8a63d686f63e7191731abe46286eeb8143 yt/data_objects/universal_fields.py
--- a/yt/data_objects/universal_fields.py
+++ b/yt/data_objects/universal_fields.py
@@ -1002,7 +1002,7 @@
def _BMagnitude(field,data):
"""This assumes that your front end has provided Bx, By, Bz in
units of Gauss. If you use MKS, make sure to write your own
- MagneticEnergy field to deal with non-unitary \mu_0.
+ BMagnitude field to deal with non-unitary \mu_0.
"""
return np.sqrt((data["Bx"]**2 + data["By"]**2 + data["Bz"]**2))
add_field("BMagnitude",
@@ -1012,7 +1012,7 @@
def _PlasmaBeta(field,data):
"""This assumes that your front end has provided Bx, By, Bz in
units of Gauss. If you use MKS, make sure to write your own
- MagneticEnergy field to deal with non-unitary \mu_0.
+ PlasmaBeta field to deal with non-unitary \mu_0.
"""
return data['Pressure']/data['MagneticEnergy']
add_field("PlasmaBeta",
https://bitbucket.org/yt_analysis/yt/changeset/0d164fe973b2/
changeset: 0d164fe973b2
branch: yt
user: ngoldbaum
date: 2012-10-03 00:37:54
summary: Merging
affected #: 4 files
diff -r 454d7e8a63d686f63e7191731abe46286eeb8143 -r 0d164fe973b282445477f7f7e0d41c749998f523 yt/mods.py
--- a/yt/mods.py
+++ b/yt/mods.py
@@ -122,7 +122,7 @@
get_multi_plot, FixedResolutionBuffer, ObliqueFixedResolutionBuffer, \
callback_registry, write_bitmap, write_image, annotate_image, \
apply_colormap, scale_image, write_projection, write_fits, \
- SlicePlot, OffAxisSlicePlot, ProjectionPlot
+ SlicePlot, OffAxisSlicePlot, ProjectionPlot, OffAxisProjectionPlot
from yt.visualization.volume_rendering.api import \
ColorTransferFunction, PlanckTransferFunction, ProjectionTransferFunction, \
diff -r 454d7e8a63d686f63e7191731abe46286eeb8143 -r 0d164fe973b282445477f7f7e0d41c749998f523 yt/visualization/api.py
--- a/yt/visualization/api.py
+++ b/yt/visualization/api.py
@@ -66,6 +66,7 @@
from plot_window import \
SlicePlot, \
OffAxisSlicePlot, \
- ProjectionPlot
+ ProjectionPlot, \
+ OffAxisProjectionPlot
diff -r 454d7e8a63d686f63e7191731abe46286eeb8143 -r 0d164fe973b282445477f7f7e0d41c749998f523 yt/visualization/fixed_resolution.py
--- a/yt/visualization/fixed_resolution.py
+++ b/yt/visualization/fixed_resolution.py
@@ -28,6 +28,7 @@
x_dict, \
y_dict, \
axis_names
+from .volume_rendering.api import off_axis_projection
import _MPL
import numpy as np
import weakref
@@ -384,3 +385,27 @@
self.bounds).transpose()
self[item] = buff
return buff
+
+
+class OffAxisProjectionFixedResolutionBuffer(FixedResolutionBuffer):
+ def __init__(self, data_source, bounds, buff_size, antialias = True,
+ periodic = False):
+ self.data = {}
+ FixedResolutionBuffer.__init__(self, data_source, bounds, buff_size, antialias, periodic)
+
+ def __getitem__(self, item):
+ if item in self.data: return self.data[item]
+ mylog.info("Making a fixed resolutuion buffer of (%s) %d by %d" % \
+ (item, self.buff_size[0], self.buff_size[1]))
+ ds = self.data_source
+ width = (self.bounds[1] - self.bounds[0],
+ self.bounds[3] - self.bounds[2],
+ self.bounds[5] - self.bounds[4])
+ buff = off_axis_projection(ds.pf, ds.center, ds.normal_vector,
+ width, ds.resolution, item,
+ weight=ds.weight_field, volume=ds.volume,
+ no_ghost=ds.no_ghost, interpolated=ds.interpolated)
+ self[item] = buff
+ return buff
+
+
diff -r 454d7e8a63d686f63e7191731abe46286eeb8143 -r 0d164fe973b282445477f7f7e0d41c749998f523 yt/visualization/plot_window.py
--- a/yt/visualization/plot_window.py
+++ b/yt/visualization/plot_window.py
@@ -43,7 +43,8 @@
write_image, apply_colormap
from .fixed_resolution import \
FixedResolutionBuffer, \
- ObliqueFixedResolutionBuffer
+ ObliqueFixedResolutionBuffer, \
+ OffAxisProjectionFixedResolutionBuffer
from .plot_modifications import get_smallest_appropriate_unit, \
callback_registry
from .tick_locators import LogLocator, LinearLocator
@@ -160,7 +161,7 @@
center[y_dict[axis]]+width[1]/2]
return (bounds,center)
-def GetOffAxisBoundsAndCenter(normal, center, width, pf, unit='1'):
+def GetOffAxisBoundsAndCenter(normal, center, width, pf, unit='1',depth=None):
if width == None:
width = (pf.domain_width.min(),
pf.domain_width.min())
@@ -171,6 +172,13 @@
width = (width, width)
Wx, Wy = width
width = np.array((Wx/pf[unit], Wy/pf[unit]))
+ if depth != None:
+ if iterable(depth) and isinstance(depth[1],str):
+ d,unit = depth
+ depth = d/pf[unit]
+ elif iterable(depth):
+ raise RuntimeError("Depth must be a float or a (width,\"unit\") tuple")
+ width = np.append(width,depth)
if isinstance(center,str):
if center.lower() == 'm' or center.lower() == 'max':
v, center = pf.h.find_max("Density")
@@ -185,9 +193,13 @@
(normal,perp1,perp2) = ortho_find(normal)
mat = np.transpose(np.column_stack((perp1,perp2,normal)))
center = np.dot(mat,center)
+ width = width
+
+ if width.shape == (2,):
+ bounds = [-width[0]/2, width[0]/2, -width[1]/2, width[1]/2]
+ else:
+ bounds = [-width[0]/2, width[0]/2, -width[1]/2, width[1]/2, -width[2]/2, width[2]/2]
- bounds = [-width[0]/2, width[0]/2, -width[1]/2, width[1]/2]
-
return (bounds,center)
class PlotWindow(object):
@@ -249,20 +261,14 @@
old_fields = None
if self._frb is not None:
old_fields = self._frb.keys()
- try:
+ if self.zlim:
+ bounds = self.xlim+self.ylim+self.zlim
+ else:
bounds = self.xlim+self.ylim
- if self.oblique == False:
- self._frb = FixedResolutionBuffer(self.data_source,
- bounds, self.buff_size,
- self.antialias,
- periodic=self._periodic)
- else:
- self._frb = ObliqueFixedResolutionBuffer(self.data_source,
- bounds, self.buff_size,
- self.antialias,
- periodic=self._periodic)
- except:
- raise RuntimeError("Failed to repixelize.")
+ self._frb = self._frb_generator(self.data_source,
+ bounds, self.buff_size,
+ self.antialias,
+ periodic=self._periodic)
if old_fields is None:
self._frb._get_data_source_fields()
else:
@@ -303,6 +309,7 @@
nWx, nWy = Wx/factor, Wy/factor
self.xlim = (centerx - nWx*0.5, centerx + nWx*0.5)
self.ylim = (centery - nWy*0.5, centery + nWy*0.5)
+
@invalidate_data
def pan(self, deltas):
@@ -349,12 +356,16 @@
dy = bounds[3] - bounds[2]
self.xlim = (self.center[0] - dx/2., self.center[0] + dx/2.)
self.ylim = (self.center[1] - dy/2., self.center[1] + dy/2.)
- mylog.info("xlim = %f %f" %self.xlim)
- mylog.info("ylim = %f %f" %self.ylim)
else:
- self.xlim = bounds[0:2]
- self.ylim = bounds[2:]
-
+ self.xlim = tuple(bounds[0:2])
+ self.ylim = tuple(bounds[2:4])
+ if len(bounds) == 6:
+ self.zlim = tuple(bounds[4:6])
+ mylog.info("xlim = %f %f" %self.xlim)
+ mylog.info("ylim = %f %f" %self.ylim)
+ if self.zlim:
+ mylog.info("zlim = %f %f" %self.zlim)
+
@invalidate_data
def set_width(self, width, unit = '1'):
"""set the width of the plot window
@@ -400,14 +411,20 @@
width = (Wx,Wy)
width = [w / self.pf[unit] for w in width]
- centerx = (self.xlim[1] + self.xlim[0])/2
- centery = (self.ylim[1] + self.ylim[0])/2
+ centerx = (self.xlim[1] + self.xlim[0])/2.
+ centery = (self.ylim[1] + self.ylim[0])/2.
self.xlim = (centerx - width[0]/2.,
centerx + width[0]/2.)
self.ylim = (centery - width[1]/2.,
centery + width[1]/2.)
+ if hasattr(self,'zlim'):
+ centerz = (self.zlim[1] + self.zlim[0])/2.
+ mw = max(width)
+ self.zlim = (centerz - mw/2.,
+ centerz + mw/2.)
+
@invalidate_data
def set_center(self, new_center, unit = '1'):
"""Sets a new center for the plot window
@@ -835,13 +852,7 @@
if mpl_kwargs is None: mpl_kwargs = {}
axis = axis_names[self.data_source.axis]
weight = None
- if 'Slice' in self.data_source.__class__.__name__:
- type = 'Slice'
- if 'Proj' in self.data_source.__class__.__name__:
- type = 'Projection'
- weight = self.data_source.weight_field
- if 'Cutting' in self.data_source.__class__.__name__:
- type = 'OffAxisSlice'
+ type = self._plot_type
names = []
for k, v in self.plots.iteritems():
if axis:
@@ -889,6 +900,9 @@
raise YTNotInsideNotebook
class SlicePlot(PWViewerMPL):
+ _plot_type = 'Slice'
+ _frb_generator = FixedResolutionBuffer
+
def __init__(self, pf, axis, fields, center='c', width=None, axes_unit=None,
origin='center-window'):
r"""Creates a slice plot from a parameter file
@@ -964,6 +978,9 @@
self.set_axes_unit(axes_unit)
class ProjectionPlot(PWViewerMPL):
+ __plot_type = 'Projection'
+ _frb_generator = FixedResolutionBuffer
+
def __init__(self, pf, axis, fields, center='c', width=None, axes_unit=None,
weight_field=None, max_level=None, origin='center-window'):
r"""Creates a projection plot from a parameter file
@@ -1043,6 +1060,9 @@
self.set_axes_unit(axes_unit)
class OffAxisSlicePlot(PWViewerMPL):
+ _plot_type = 'OffAxisSlice'
+ _frb_generator = ObliqueFixedResolutionBuffer
+
def __init__(self, pf, normal, fields, center='c', width=(1,'unitary'),
axes_unit=None, north_vector=None):
r"""Creates an off axis slice plot from a parameter file
@@ -1090,6 +1110,95 @@
PWViewerMPL.__init__(self,cutting,bounds,origin='center-window',periodic=False,oblique=True)
self.set_axes_unit(axes_unit)
+class OffAxisProjectionDummyDataSource(object):
+ _type_name = 'proj'
+ proj_style = 'integrate'
+ _key_fields = []
+ def __init__(self, center, pf, normal_vector, width, fields,
+ interpolated, resolution = (800,800), weight=None,
+ volume=None, no_ghost=False, le=None, re=None,
+ north_vector=None):
+ self.center = center
+ self.pf = pf
+ self.axis = 4 # always true for oblique data objects
+ self.normal_vector = normal_vector
+ self.width = width
+ self.fields = fields
+ self.interpolated = interpolated
+ self.resolution = resolution
+ self.weight_field = weight
+ self.volume = volume
+ self.no_ghost = no_ghost
+ self.le = le
+ self.re = re
+ self.north_vector = north_vector
+
+class OffAxisProjectionPlot(PWViewerMPL):
+ _plot_type = 'OffAxisProjection'
+ _frb_generator = OffAxisProjectionFixedResolutionBuffer
+
+ def __init__(self, pf, normal, fields, center='c', width=(1,'unitary'),
+ depth=(1,'unitary'), axes_unit=None, weight_field=None,
+ max_level=None, north_vector=None, volume=None, no_ghost=False,
+ le=None, re=None, interpolated=False):
+ r"""Creates an off axis projection plot from a parameter file
+
+ Given a pf object, a normal vector to project along, and
+ a field name string, this will return a PWViewrMPL object
+ containing the plot.
+
+ The plot can be updated using one of the many helper functions
+ defined in PlotWindow.
+
+ Parameters
+ ----------
+ pf : :class:`yt.data_objects.api.StaticOutput`
+ This is the parameter file object corresponding to the
+ simulation output to be plotted.
+ normal : a sequence of floats
+ The vector normal to the slicing plane.
+ fields : string
+ The name of the field(s) to be plotted.
+ center : A two or three-element vector of sequence floats, 'c', or 'center'
+ The coordinate of the center of the image. If left blanck,
+ the image centers on the location of the maximum density
+ cell. If set to 'c' or 'center', the plot is centered on
+ the middle of the domain.
+ width : A tuple or a float
+ A tuple containing the width of image and the string key of
+ the unit: (width, 'unit'). If set to a float, code units
+ are assumed
+ depth : A tuple or a float
+ A tuple containing the depth to project thourhg and the string
+ key of the unit: (width, 'unit'). If set to a float, code units
+ are assumed
+ weight_field : string
+ The name of the weighting field. Set to None for no weight.
+ max_level: int
+ The maximum level to project to.
+ axes_unit : A string
+ The name of the unit for the tick labels on the x and y axes.
+ Defaults to None, which automatically picks an appropriate unit.
+ If axes_unit is '1', 'u', or 'unitary', it will not display the
+ units, and only show the axes name.
+ north-vector : a sequence of floats
+ A vector defining the 'up' direction in the plot. This
+ option sets the orientation of the slicing plane. If not
+ set, an arbitrary grid-aligned north-vector is chosen.
+
+ """
+ (bounds,center_rot) = GetOffAxisBoundsAndCenter(normal,center,width,pf,depth=depth)
+ # Hard-coding the resolution for now
+ fields = ensure_list(fields)[:]
+ width = np.array((bounds[1] - bounds[0], bounds[3] - bounds[2], bounds[5] - bounds[4]))
+ OffAxisProj = OffAxisProjectionDummyDataSource(center_rot, pf, normal, width, fields, interpolated,
+ weight=weight_field, volume=volume, no_ghost=no_ghost,
+ le=le, re=re, north_vector=north_vector)
+ # Hard-coding the origin keyword since the other two options
+ # aren't well-defined for off-axis data objects
+ PWViewerMPL.__init__(self,OffAxisProj,bounds,origin='center-window',periodic=False,oblique=True)
+ self.set_axes_unit(axes_unit)
+
_metadata_template = """
%(pf)s<br><br>
https://bitbucket.org/yt_analysis/yt/changeset/ac4b312b5d6f/
changeset: ac4b312b5d6f
branch: yt
user: ngoldbaum
date: 2012-10-03 03:34:17
summary: Fixing some bugs found during testing.
affected #: 4 files
diff -r 0d164fe973b282445477f7f7e0d41c749998f523 -r ac4b312b5d6fac59499a2b8bc5aa6cc3faabd0f2 yt/data_objects/universal_fields.py
--- a/yt/data_objects/universal_fields.py
+++ b/yt/data_objects/universal_fields.py
@@ -1007,7 +1007,7 @@
return np.sqrt((data["Bx"]**2 + data["By"]**2 + data["Bz"]**2))
add_field("BMagnitude",
function=_BMagnitude,
- display_name=r"|B|", units="\rm{Gauss}")
+ display_name=r"|B|", units=r"\rm{Gauss}")
def _PlasmaBeta(field,data):
"""This assumes that your front end has provided Bx, By, Bz in
diff -r 0d164fe973b282445477f7f7e0d41c749998f523 -r ac4b312b5d6fac59499a2b8bc5aa6cc3faabd0f2 yt/visualization/fixed_resolution.py
--- a/yt/visualization/fixed_resolution.py
+++ b/yt/visualization/fixed_resolution.py
@@ -404,8 +404,9 @@
buff = off_axis_projection(ds.pf, ds.center, ds.normal_vector,
width, ds.resolution, item,
weight=ds.weight_field, volume=ds.volume,
- no_ghost=ds.no_ghost, interpolated=ds.interpolated)
- self[item] = buff
+ no_ghost=ds.no_ghost, interpolated=ds.interpolated,
+ north_vector=ds.north_vector)
+ self[item] = buff.swapaxes(0,1)
return buff
diff -r 0d164fe973b282445477f7f7e0d41c749998f523 -r ac4b312b5d6fac59499a2b8bc5aa6cc3faabd0f2 yt/visualization/plot_window.py
--- a/yt/visualization/plot_window.py
+++ b/yt/visualization/plot_window.py
@@ -187,15 +187,15 @@
else:
raise RuntimeError('center keyword \"%s\" not recognized'%center)
- # Transforming to the cutting plane coordinate system
- center = np.array(center)
- center = (center - pf.domain_left_edge)/pf.domain_width - 0.5
- (normal,perp1,perp2) = ortho_find(normal)
- mat = np.transpose(np.column_stack((perp1,perp2,normal)))
- center = np.dot(mat,center)
- width = width
+ if width.shape == (2,):
+ # Transforming to the cutting plane coordinate system
+ center = np.array(center)
+ center = (center - pf.domain_left_edge)/pf.domain_width - 0.5
+ (normal,perp1,perp2) = ortho_find(normal)
+ mat = np.transpose(np.column_stack((perp1,perp2,normal)))
+ center = np.dot(mat,center)
+ width = width
- if width.shape == (2,):
bounds = [-width[0]/2, width[0]/2, -width[1]/2, width[1]/2]
else:
bounds = [-width[0]/2, width[0]/2, -width[1]/2, width[1]/2, -width[2]/2, width[2]/2]
@@ -261,7 +261,7 @@
old_fields = None
if self._frb is not None:
old_fields = self._frb.keys()
- if self.zlim:
+ if hasattr(self,'zlim'):
bounds = self.xlim+self.ylim+self.zlim
else:
bounds = self.xlim+self.ylim
@@ -363,7 +363,7 @@
self.zlim = tuple(bounds[4:6])
mylog.info("xlim = %f %f" %self.xlim)
mylog.info("ylim = %f %f" %self.ylim)
- if self.zlim:
+ if hasattr(self,'zlim'):
mylog.info("zlim = %f %f" %self.zlim)
@invalidate_data
@@ -853,6 +853,8 @@
axis = axis_names[self.data_source.axis]
weight = None
type = self._plot_type
+ if type in ['Projection','OffAxisProjection']:
+ weight = self.data_source.weight_field
names = []
for k, v in self.plots.iteritems():
if axis:
@@ -978,7 +980,7 @@
self.set_axes_unit(axes_unit)
class ProjectionPlot(PWViewerMPL):
- __plot_type = 'Projection'
+ _plot_type = 'Projection'
_frb_generator = FixedResolutionBuffer
def __init__(self, pf, axis, fields, center='c', width=None, axes_unit=None,
diff -r 0d164fe973b282445477f7f7e0d41c749998f523 -r ac4b312b5d6fac59499a2b8bc5aa6cc3faabd0f2 yt/visualization/volume_rendering/camera.py
--- a/yt/visualization/volume_rendering/camera.py
+++ b/yt/visualization/volume_rendering/camera.py
@@ -1681,7 +1681,8 @@
def off_axis_projection(pf, center, normal_vector, width, resolution,
field, weight = None,
- volume = None, no_ghost = False, interpolated = False):
+ volume = None, no_ghost = False, interpolated = False,
+ north_vector = None):
r"""Project through a parameter file, off-axis, and return the image plane.
This function will accept the necessary items to integrate through a volume
@@ -1740,8 +1741,9 @@
"""
projcam = ProjectionCamera(center, normal_vector, width, resolution,
- field, weight=weight, pf=pf, volume=volume,
- no_ghost=no_ghost, interpolated=interpolated)
+ field, weight=weight, pf=pf, volume=volume,
+ no_ghost=no_ghost, interpolated=interpolated,
+ north_vector=north_vector)
image = projcam.snapshot()
if weight is not None:
pf.field_info.pop("temp_weightfield")
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