[Yt-svn] yt-commit r512 - in trunk/yt: lagos reason
mturk at wrangler.dreamhost.com
mturk at wrangler.dreamhost.com
Sat May 31 00:59:58 PDT 2008
Author: mturk
Date: Sat May 31 00:59:57 2008
New Revision: 512
URL: http://yt.spacepope.org/changeset/512
Log:
* Added one-dprofiles to reason
* Added write_out method to most/all 3D data objects (and reason)
* Generalized subscriber method location
* Fixed bug with subscribers being left active after termination
* Started cleaning up the data-hierarchy a bit more.
* Fixed projections with conversion factors for multiple projected fields
so much of this would be so much easier with traitsui...
closed #78
Modified:
trunk/yt/lagos/BaseDataTypes.py
trunk/yt/lagos/Profiles.py
trunk/yt/reason/App.py
trunk/yt/reason/Functions.py
trunk/yt/reason/Notebook.py
trunk/yt/reason/Windows.py
Modified: trunk/yt/lagos/BaseDataTypes.py
==============================================================================
--- trunk/yt/lagos/BaseDataTypes.py (original)
+++ trunk/yt/lagos/BaseDataTypes.py Sat May 31 00:59:57 2008
@@ -192,6 +192,21 @@
def _generate_field_in_grids(self, fieldName):
pass
+ _key_fields = None
+ def write_out(self, filename, fields=None, format="%0.16e"):
+ if fields is None: fields=sorted(self.data.keys())
+ if self._key_fields is None: raise ValueError
+ field_order = self._key_fields[:]
+ for field in field_order: self[field]
+ field_order += [field for field in fields if field not in field_order]
+ fid = open(filename,"w")
+ fid.write("\t".join(["#"] + field_order + ["\n"]))
+ field_data = na.array([self.data[field] for field in field_order])
+ for line in range(field_data.shape[1]):
+ field_data[:,line].tofile(fid, sep="\t", format=format)
+ fid.write("\n")
+ fid.close()
+
class GridPropertiesMixin(object):
def select_grids(self, level):
@@ -320,6 +335,7 @@
for grid in self._grids])
class EnzoOrthoRayBase(Enzo1DData):
+ _key_fields = ['x','y','z','dx','dy','dz']
def __init__(self, axis, coords, fields=None, pf=None, **kwargs):
"""
Dimensionality is reduced to one, and an ordered list of points at an
@@ -359,6 +375,7 @@
return gf[na.where(grid.child_mask[sl])]
class Enzo2DData(EnzoData, GridPropertiesMixin):
+ _key_fields = ['x','y','z','dx','dy','dz']
"""
Class to represent a set of :class:`EnzoData` that's 2-D in nature, and
thus does not have as many actions as the 3-D data types.
@@ -665,6 +682,7 @@
return na.where(k)
class EnzoProjBase(Enzo2DData):
+ _key_fields = ['px','py','pdx','pdy']
def __init__(self, axis, field, weight_field = None,
max_level = None, center = None, pf = None,
source=None, **kwargs):
@@ -801,7 +819,7 @@
if self._weight is not None:
field_data = field_data / coord_data[3,:].reshape((1,coord_data.shape[1]))
else:
- field_data *= convs
+ field_data *= convs[...,na.newaxis]
mylog.info("Level %s done: %s final", \
level, coord_data.shape[1])
dx = grids_to_project[0].dx# * na.ones(coord_data.shape[0], dtype='float64')
@@ -958,6 +976,7 @@
return d
class Enzo3DData(EnzoData, GridPropertiesMixin):
+ _key_fields = ['x','y','z','dx','dy','dz']
"""
Class describing a cluster of data points, not necessarily sharing any
particular attribute.
Modified: trunk/yt/lagos/Profiles.py
==============================================================================
--- trunk/yt/lagos/Profiles.py (original)
+++ trunk/yt/lagos/Profiles.py Sat May 31 00:59:57 2008
@@ -169,6 +169,15 @@
inv_bin_indices[bin] = na.where(bin_indices == bin)
return (mi, inv_bin_indices)
+ def write_out(self, filename, format="%0.16e"):
+ fid = open(filename,"w")
+ fields = [field for field in sorted(self._data.keys()) if field != "UsedBins"]
+ fid.write("\t".join(["#"] + fields + ["\n"]))
+ field_data = na.array([self._data[field] for field in fields])
+ for line in range(field_data.shape[1]):
+ field_data[:,line].tofile(fid, sep="\t", format=format)
+ fid.write("\n")
+ fid.close()
class BinnedProfile2D(BinnedProfile):
def __init__(self, data_source,
@@ -266,3 +275,19 @@
bin_indices_y = na.digitize(sd_y, self[self.y_bin_field])
# Now we set up our inverse bin indices
return (mi, bin_indices_x, bin_indices_y)
+
+ def write_out(self, filename, format="%0.16e"):
+ fid = open(filename,"w")
+ fields = [field for field in sorted(self._data.keys()) if field != "UsedBins"]
+ fid.write("\t".join(["#"] + [self.x_bin_field, self.y_bin_field]
+ + fields + ["\n"]))
+ x,y = na.meshgrid(self._data[self.y_bin_field],
+ self._data[self.y_bin_field])
+ field_data = [x.ravel(), y.ravel()]
+ field_data += [self._data[field].ravel() for field in fields
+ if field not in [self.x_bin_field, self.y_bin_field]]
+ field_data = na.array(field_data)
+ for line in range(field_data.shape[1]):
+ field_data[:,line].tofile(fid, sep="\t", format=format)
+ fid.write("\n")
+ fid.close()
Modified: trunk/yt/reason/App.py
==============================================================================
--- trunk/yt/reason/App.py (original)
+++ trunk/yt/reason/App.py Sat May 31 00:59:57 2008
@@ -26,11 +26,12 @@
from yt.reason import *
-_StaticOutputMenuItems = ["proj","slice"]
-_SphereObjectMenuItems = ["phase","cutting"]
-_ProjObjectMenuItems = []
+_StaticOutputMenuItems = ["proj","slice","export",]
+_SphereObjectMenuItems = ["phase","profile","cutting","export",]
+_ProjObjectMenuItems = ["export",]
_SliceObjectMenuItems = []
-_CuttingPlaneObjectMenuItems = []
+_CuttingPlaneObjectMenuItems = ["export",]
+_ProfileObjectMenuItems = ["export",]
class ReasonMainWindow(wx.Frame):
def __init__(self, *args, **kwds):
@@ -54,6 +55,7 @@
self.__do_layout()
Publisher().subscribe(self.MessagePageDeleted, ('page_deleted'))
+ self.Bind(wx.EVT_CLOSE, self.OnClose)
def __setup_controls(self):
@@ -83,6 +85,7 @@
'mainwindow':self,
'data_objects':self.data_objects,
'pylab':pylab,
+ 'add_profile':self.__add_profile_wrapper,
'add_phase':self.__add_phase_wrapper}
wx.py.buffer.Buffer.updateNamespace = \
get_new_updateNamespace(self.locals)
@@ -120,13 +123,20 @@
self.PopupMenuIds["slice"] = self.PopupMenu.Append(-1, "Slice")
self.PopupMenuIds["proj"] = self.PopupMenu.Append(-1, "Project")
self.PopupMenuIds["phase"] = self.PopupMenu.Append(-1, "Phase Plot")
+ self.PopupMenuIds["profile"] = self.PopupMenu.Append(-1, "Profile Plot")
self.PopupMenuIds["cutting"] = self.PopupMenu.Append(-1, "Cutting Plane")
self.PopupMenuIds["extract"] = self.PopupMenu.Append(-1, "Extract Set")
+ self.PopupMenuIds["cube"] = self.PopupMenu.Append(-1, "Extract Cube")
+ self.PopupMenuIds["export"] = self.PopupMenu.Append(-1, "Export Data")
self.Bind(wx.EVT_MENU, self._add_slice, self.PopupMenuIds["slice"])
self.Bind(wx.EVT_MENU, self._add_proj, self.PopupMenuIds["proj"])
self.Bind(wx.EVT_MENU, self._add_phase, self.PopupMenuIds["phase"])
+ self.Bind(wx.EVT_MENU, self._add_profile, self.PopupMenuIds["profile"])
self.Bind(wx.EVT_MENU, self._add_cutting, self.PopupMenuIds["cutting"])
+ #self.Bind(wx.EVT_MENU, self._extract_set, self.PopupMenuIds["extract"])
+ #self.Bind(wx.EVT_MENU, self._extract_cube, self.PopupMenuIds["cube"])
+ self.Bind(wx.EVT_MENU, self._export_data_object, self.PopupMenuIds["export"])
def __setup_data_tree(self):
@@ -253,6 +263,7 @@
z = str(eso["CosmologyCurrentRedshift"])
except:
z = "N/A"
+ mylog.info("Adding output %s", fn)
tid = wx.TreeItemData((eso, str(eso["InitialTime"]), z, _StaticOutputMenuItems))
self.outputs.append(eso)
ni = self.data_tree.AppendItem(self.output_root, "%s" % (eso.basename), data=tid)
@@ -269,6 +280,12 @@
# These all get passed in
self._add_data_object(title, sphere, _SphereObjectMenuItems)
+ def __add_profile_wrapper(self, obj):
+ """
+ Add a profile plot from an arbitrary object.
+ """
+ pass
+
def __add_phase_wrapper(self, obj):
"""
Add a phase plot from an arbitrary object.
@@ -282,8 +299,40 @@
wx.SafeYield(onlyIfNeeded = True)
self.plot_panel.UpdateSubscriptions(page)
+ def _add_profile(self, event=None, data_object = None):
+ MyID = wx.NewId()
+ parent_id = None
+ if data_object is None: parent_id, data_object = self.get_output()
+ p1ds = Profile1DSetup(data_object, self)
+ if not p1ds.ShowModal() == wx.ID_OK:
+ p1ds.Destroy()
+ return
+ argdict = p1ds.return_argdict()
+ if argdict is None:
+ p1ds.Destroy()
+ return
+ if argdict['lower_bound']is None:
+ argdict['lower_bound']= \
+ self.__find_min(data_object, argdict['bin_field'])
+ if argdict['upper_bound'] is None:
+ argdict['upper_bound'] = \
+ self.__find_max(data_object, argdict['bin_field'])
+ self._add_page_to_notebook(
+ Profile1DPlotPage(parent=self.plot_panel.nb,
+ status_bar=self.status_bar,
+ data_object = data_object,
+ argdict = argdict, CreationID = MyID,
+ mw = self),
+ "Profile Plot %s" % MyID, MyID)
+ if parent_id is not None:
+ self._add_data_object("Profile: %s" % (argdict['bin_field']),
+ self.windows[-1].plot.data,
+ _ProfileObjectMenuItems, parent_id)
+
+
def _add_phase(self, event=None, data_object = None):
MyID = wx.NewId()
+ parent_id = None
if data_object is None: parent_id, data_object = self.get_output()
p2ds = Profile2DSetup(data_object, self)
if not p2ds.ShowModal() == wx.ID_OK:
@@ -307,6 +356,12 @@
argdict = argdict, CreationID = MyID,
mw = self),
"Phase Plot %s" % MyID, MyID)
+ if parent_id is not None:
+ self.pid = parent_id
+ self._add_data_object("Phase: %s, %s" % (argdict['x_bin_field'],
+ argdict['y_bin_field']),
+ self.windows[-1].plot.data,
+ _ProfileObjectMenuItems, parent_id)
def __find_min(self, data_object, field):
return data_object[field].min()
@@ -340,7 +395,7 @@
mw = self, CreationID=MyID),
"%s - Projection - %s" % (data_object.basename, ax),
MyID)
- self._add_data_object("Proj: %s %s" % (data_object, ax),
+ self._add_data_object("Proj: %s %s" % (data_object.parameter_file, ax),
self.windows[-1].plot.data,
_ProjObjectMenuItems, parent_id)
print "Adding with ID:", MyID
@@ -367,6 +422,25 @@
_SliceObjectMenuItems, parent_id)
for w in self.windows[-3:]: w.ChangeWidth(1,'1')
+ def _export_data_object(self, event):
+ parent_id, data_object = self.get_output()
+ # Get a file name and then attempt to export.
+ dlg = wx.FileDialog( \
+ self, message="Save Data As ...", defaultDir=os.getcwd(), \
+ defaultFile="exported.dat", wildcard="dat (*.dat)|*.dat", style=wx.SAVE)
+ if dlg.ShowModal() == wx.ID_OK:
+ try:
+ path = dlg.GetPath()
+ data_object.write_out(path)
+ except (ValueError, AttributeError), exc:
+ print exc, dir(exc)
+ err = wx.MessageDialog(None, "Error",
+ "The writing out has failed.\n\n" + \
+ "See the console for more information.")
+ err.ShowModal()
+ err.Destroy()
+ dlg.Destroy()
+
def __add_cutting_wrapper(self, parameter_file, normal):
self._add_cutting(parameter_file=parameter_file, normal=normal)
@@ -425,6 +499,10 @@
def OnExit(self, event):
self.Close()
+ def OnClose(self, event):
+ Publisher().unsubAll()
+ self.Destroy()
+
def OnInspectFields(self, event):
p = FieldFunctionInspector(self, -1)
p.Show()
@@ -436,10 +514,7 @@
"", wildcard, wx.OPEN)
if dialog.ShowModal() == wx.ID_OK:
file = dialog.GetPath()
- print file
self._add_static_output(file)
- #self.RefreshOutputs()
- #print ChooseField(self.outputs[-1])
dialog.Destroy()
def OnOpenEditor(self, event):
Modified: trunk/yt/reason/Functions.py
==============================================================================
--- trunk/yt/reason/Functions.py (original)
+++ trunk/yt/reason/Functions.py Sat May 31 00:59:57 2008
@@ -26,6 +26,14 @@
from yt.reason import *
+subscription_pairs = [("width","ChangeWidthFromMessage"),
+ ("field","ChangeFieldFromMessage"),
+ ("limits","ChangeLimitsFromMessage"),
+ ("center","ChangeCenterFromMessage"),
+ ("field_param","ChangeFieldParamFromMessage"),
+ ("wipe","WipePlotDataFromMessage"),
+ ("cmap","ChangeColorMapFromMessage")]
+
def QueryFields(outputfile, only_display_fields = False):
fields = []
for f in outputfile.hierarchy.derived_field_list:
Modified: trunk/yt/reason/Notebook.py
==============================================================================
--- trunk/yt/reason/Notebook.py (original)
+++ trunk/yt/reason/Notebook.py Sat May 31 00:59:57 2008
@@ -68,14 +68,7 @@
Publisher().sendMessage("page_changed",page)
def UpdateSubscriptions(self, page):
- pairs = [("width","ChangeWidthFromMessage"),
- ("field","ChangeFieldFromMessage"),
- ("limits","ChangeLimitsFromMessage"),
- ("center","ChangeCenterFromMessage"),
- ("field_param","ChangeFieldParamFromMessage"),
- ("wipe","WipePlotDataFromMessage"),
- ("cmap","ChangeColorMapFromMessage")]
- for m,f in pairs:
+ for m,f in subscription_pairs:
Publisher().unsubAll(("viewchange",m))
if not hasattr(page,'CreationID'): return
cti = page.CreationID
@@ -90,7 +83,7 @@
else: toSubscribe.append(page)
for p in toSubscribe:
Publisher().subscribe(self.MessageLogger)
- for m, f in pairs:
+ for m, f in subscription_pairs:
ff = getattr(p,f)
if ff is None: continue
Publisher().subscribe(ff, ('viewchange',m))
@@ -723,8 +716,9 @@
self.velocities.Enable(False)
self.particles.Enable(False)
-class PhasePlotPage(PlotPage):
- def __init__(self, parent, status_bar, data_object, argdict, mw=None, CreationID = -1):
+class ProfilePlotPage(PlotPage):
+ def __init__(self, parent, status_bar, data_object, argdict, mw=None,
+ CreationID = -1):
self.data_object = data_object
self.argdict = argdict
@@ -743,7 +737,6 @@
PlotPage.SetupMenu(self)
self.popupmenu.AppendSeparator()
self.take_log_menu = self.popupmenu.AppendCheckItem(-1, "Take Log")
- self.take_log_menu.Check(self.plot._log_z)
self.Bind(wx.EVT_MENU, self.take_log, self.take_log_menu)
@@ -761,6 +754,66 @@
self.SetSizer(self.MainSizer)
self.Layout()
+ def UpdateAvailableFields(self):
+ self.z_field.SetItems(sorted(self.QueryAvailableFields()))
+
+ def switch_z(self, event=None):
+ if self.plot is None: return
+ self.plot.switch_z(self.z_field.GetStringSelection())
+ self.UpdateCanvas()
+
+ def UpdateCanvas(self, only_fig=False):
+ if self.IsShown():
+ if not only_fig: self.plot._redraw_image()
+ self.figure_canvas.draw()
+
+ def take_log(self, event):
+ self.plot.set_log_field(self.take_log_menu.IsChecked())
+ self.UpdateCanvas()
+
+class Profile1DPlotPage(ProfilePlotPage):
+ def AddField(self, event=None):
+ pf1daf = Profile1DAddField(self.data_object, self)
+ if pf1daf.ShowModal() == wx.ID_OK:
+ argdict = pf1daf.return_argdict()
+ if argdict is None:
+ pf1daf.Destroy()
+ self.UpdateAvailableFields()
+ return
+ self.data.add_fields(**argdict)
+ self.UpdateAvailableFields()
+ self.z_field.SetSelection(
+ self.z_field.GetItems().index(argdict['fields']))
+ self.switch_z()
+ pf1daf.Destroy()
+
+ def SetupMenu(self):
+ ProfilePlotPage.SetupMenu(self)
+ self.take_log_menu.Check(self.plot._log_y)
+
+ def QueryAvailableFields(self):
+ fields = []
+ for field in self.data.keys():
+ if field != self.data.bin_field:
+ fields.append(field)
+ return fields
+
+ def makePlot(self, event=None):
+ self.data = lagos.BinnedProfile1D(self.data_object, **self.argdict)
+ self.data.pf = self.data_object.pf
+ self.data.hierarchy = self.data_object.pf.h
+ # Now, unfortunately, we prompt for the field
+ self.AddField(None)
+ self.plot = be.Profile1DPlot(self.data,
+ [self.argdict['bin_field'],
+ self.z_field.GetStringSelection()],
+ id = wx.NewId(),
+ figure=self.figure, axes=self.axes)
+
+ def UpdateStatusBar(self, event):
+ pass
+
+class PhasePlotPage(ProfilePlotPage):
def AddField(self, event=None):
pf2daf = Profile2DAddField(self.data_object, self)
if pf2daf.ShowModal() == wx.ID_OK:
@@ -776,6 +829,10 @@
self.switch_z()
pf2daf.Destroy()
+ def SetupMenu(self):
+ ProfilePlotPage.SetupMenu(self)
+ self.take_log_menu.Check(self.plot._log_z)
+
def makePlot(self, event=None):
self.data = lagos.BinnedProfile2D(self.data_object, **self.argdict)
self.data.pf = self.data_object.pf
@@ -806,9 +863,6 @@
yi = na.digitize(na.array([y]), self.plot.y_bins)-1
return self.plot.vals[yi, xi]
- def UpdateAvailableFields(self):
- self.z_field.SetItems(sorted(self.QueryAvailableFields()))
-
def QueryAvailableFields(self):
fields = []
for field in self.data.keys():
@@ -817,20 +871,6 @@
fields.append(field)
return fields
- def take_log(self, event):
- self.plot.set_log_field(self.take_log_menu.IsChecked())
- self.UpdateCanvas()
-
- def switch_z(self, event=None):
- if self.plot is None: return
- self.plot.switch_z(self.z_field.GetStringSelection())
- self.UpdateCanvas()
-
- def UpdateCanvas(self, only_fig=False):
- if self.IsShown():
- if not only_fig: self.plot._redraw_image()
- self.figure_canvas.draw()
-
def ChangeLimits(self, zmin, zmax):
self.plot.set_zlim(zmin,zmax)
self.figure_canvas.draw()
Modified: trunk/yt/reason/Windows.py
==============================================================================
--- trunk/yt/reason/Windows.py (original)
+++ trunk/yt/reason/Windows.py Sat May 31 00:59:57 2008
@@ -26,6 +26,148 @@
from yt.reason import *
+class Profile1DAddField(wx.Dialog):
+ def __init__(self, data_object, parent):
+ wx.Dialog.__init__(self, parent, -1, title="Add Field to 1D Profile")
+
+ fields = [field for field in QueryFields(data_object)
+ if field not in [parent.data.bin_field,
+ parent.data.keys()]]
+
+ border = wx.BoxSizer(wx.VERTICAL)
+ inner_border = wx.BoxSizer(wx.VERTICAL)
+
+ sbox = wx.StaticBox(self, -1, "Y Field Specifications")
+ box = wx.StaticBoxSizer(sbox, wx.VERTICAL)
+ gbs = wx.GridBagSizer(5, 5)
+ self.y_field = wx.Choice(self, -1, choices=fields, name="Y")
+ text = wx.StaticText(self, -1, "Weighting Field")
+ self.y_weight = wx.Choice(self, -1, choices=[''] + fields, name="Weight")
+ if "CellMassMsun" in fields: self.y_weight.Select(fields.index("CellMassMsun")+1)
+ self.y_accx = wx.CheckBox(self, -1, "X Accumulation")
+ self.y_accx.SetValue(False)
+
+ gbs.Add(self.y_field, (0,0), (1,2))
+ gbs.Add(text, (1,0))
+ gbs.Add(self.y_weight, (2,0), (1,2))
+ gbs.Add(self.y_accx, (3,0), (1,2))
+ box.Add(gbs, 1, wx.EXPAND | wx.ALL)
+ inner_border.Add(box, 1, wx.EXPAND)
+ inner_border.AddSpacer(15)
+
+ gbs = wx.GridBagSizer(5,5)
+ ok_button = wx.Button(self, wx.ID_OK, "OK")
+ ok_button.SetDefault()
+ cancel_button = wx.Button(self, wx.ID_CANCEL, "Cancel")
+ gbs.Add(ok_button, (1,0), flag=wx.EXPAND)
+ gbs.Add(cancel_button, (1,1), flag=wx.EXPAND)
+ inner_border.Add(gbs, 0, wx.EXPAND)
+
+ border.Add(inner_border, 1, wx.EXPAND|wx.ALL, 25)
+ self.SetSizer(border)
+ self.Fit()
+
+ def return_argdict(self):
+ argdict = {}
+ try:
+ argdict['fields'] = str(self.y_field.GetStringSelection())
+ argdict['weight'] = str(self.y_weight.GetStringSelection())
+ argdict['accumulation'] = self.y_accx.GetValue()
+ if argdict['weight'] == '': argdict['weight'] = None
+ except ValueError:
+ return None
+ return argdict
+
+class Profile1DSetup(wx.Dialog):
+ def __init__(self, data_object, parent):
+ wx.Dialog.__init__(self, parent, -1, title="Setup 1D Profile")
+
+ fields = QueryFields(data_object)
+
+ border = wx.BoxSizer(wx.VERTICAL)
+ inner_border = wx.BoxSizer(wx.VERTICAL)
+
+ sbox = wx.StaticBox(self, -1, "X Field Specifications")
+ box = wx.StaticBoxSizer(sbox, wx.VERTICAL)
+ gbs = wx.GridBagSizer(5, 5)
+ self.x_field = wx.Choice(self, -1, choices=fields, name="X")
+ text = wx.StaticText(self, -1, "Bin Count")
+ self.x_bins = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER)
+ self.x_bins.SetValue('16')
+ self.x_bc = wx.CheckBox(self, -1, "Auto-bounds")
+ self.x_bc.SetValue(True)
+ self.Bind(wx.EVT_CHECKBOX, self.OnToggleXBounds, self.x_bc)
+ self.x_min = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER)
+ self.x_max = wx.TextCtrl(self, -1, style=wx.TE_PROCESS_ENTER)
+ self.x_log = wx.CheckBox(self, -1, "Take Log")
+ self.x_log.SetValue(True)
+
+ gbs.Add(self.x_field, (0,0), (1,2))
+ gbs.Add(text, (1,0))
+ gbs.Add(self.x_bins, (1,1))
+ gbs.Add(self.x_bc, (2,0))
+ gbs.Add(self.x_min, (2,1))
+ gbs.Add(self.x_max, (3,1))
+ gbs.Add(self.x_log, (4,0))
+ box.Add(gbs, 1, wx.EXPAND | wx.ALL)
+ inner_border.Add(box, 1, wx.EXPAND)
+ inner_border.AddSpacer(15)
+
+ gbs = wx.GridBagSizer(5,5)
+ self.lazy_reader = wx.CheckBox(self, -1, "Memory Conservative")
+ self.Bind(wx.EVT_CHECKBOX, self.OnToggleLaziness, self.lazy_reader)
+ ok_button = wx.Button(self, wx.ID_OK, "OK")
+ ok_button.SetDefault()
+ cancel_button = wx.Button(self, wx.ID_CANCEL, "Cancel")
+ gbs.Add(self.lazy_reader, (0,0), (1,2), flag=wx.ALIGN_LEFT)
+ gbs.Add(ok_button, (1,0), flag=wx.EXPAND)
+ gbs.Add(cancel_button, (1,1), flag=wx.EXPAND)
+ inner_border.Add(gbs, 0, wx.EXPAND)
+
+ self.OnToggleXBounds(None)
+
+ border.Add(inner_border, 1, wx.EXPAND|wx.ALL, 25)
+ self.SetSizer(border)
+ self.Fit()
+
+ def __toggle(self, b,mi,ma):
+ en = b.GetValue()
+ mi.Enable(not en)
+ ma.Enable(not en)
+ if en:
+ mi.SetValue("Min")
+ ma.SetValue("Max")
+ else:
+ mi.SetValue("")
+ ma.SetValue("")
+
+ def OnToggleLaziness(self, event):
+ if self.lazy_reader.GetValue():
+ if self.x_bc.GetValue():
+ self.x_bc.SetValue(False)
+ self.OnToggleXBounds(None)
+
+ def OnToggleXBounds(self, event):
+ self.__toggle(self.x_bc, self.x_min, self.x_max)
+
+ def return_argdict(self):
+ argdict = {}
+ try:
+ if self.lazy_reader.GetValue():
+ argdict['lazy_reader'] = True
+ argdict['lower_bound'] = float(self.x_min.GetValue())
+ argdict['upper_bound'] = float(self.x_max.GetValue())
+ else:
+ argdict['lazy_reader'] = False
+ argdict['lower_bound'] = None
+ argdict['upper_bound'] = None
+ argdict['log_space'] = self.x_log.GetValue()
+ argdict['n_bins'] = int(self.x_bins.GetValue())
+ argdict['bin_field'] = str(self.x_field.GetStringSelection())
+ except ValueError:
+ return None
+ return argdict
+
class Profile2DAddField(wx.Dialog):
def __init__(self, data_object, parent):
wx.Dialog.__init__(self, parent, -1, title="Add Field to 2D Profile")
@@ -212,6 +354,12 @@
return None
return argdict
+class ExtractSetSetup(wx.Dialog):
+ pass
+
+class ExtractCubeSetup(wx.Dialog):
+ pass
+
class ProjectionSetup(wx.Dialog):
def __init__(self, data_object, parent):
wx.Dialog.__init__(self, parent, -1, title="Setup Projection")
More information about the yt-svn
mailing list