# HG changeset patch # User Matthew Turk # Date 1283351065 25200 # Branch yt # Node ID 7d396548900696d93a2481c40fdf07a6ce510e6d # Parent 8ef67bebbef533054a6ddda1dffe0b5d34960ec5 Changed how_to_develop, added a small new callback to the image panner, removed old files diff -r 8ef67bebbef533054a6ddda1dffe0b5d34960ec5 -r 7d396548900696d93a2481c40fdf07a6ce510e6d doc/REORG_NOTES --- a/doc/REORG_NOTES Mon Aug 30 22:44:08 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -* creating yt/frontends for the front end to each code - - created a uniform set of files for each: - data_structures.py - definitions.py - fields.py - io.py - misc.py \ No newline at end of file diff -r 8ef67bebbef533054a6ddda1dffe0b5d34960ec5 -r 7d396548900696d93a2481c40fdf07a6ce510e6d doc/REORG_NOTES~ --- a/doc/REORG_NOTES~ Mon Aug 30 22:44:08 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -* as part of new \ No newline at end of file diff -r 8ef67bebbef533054a6ddda1dffe0b5d34960ec5 -r 7d396548900696d93a2481c40fdf07a6ce510e6d doc/how_to_develop_yt.txt --- a/doc/how_to_develop_yt.txt Mon Aug 30 22:44:08 2010 -0700 +++ b/doc/how_to_develop_yt.txt Wed Sep 01 07:24:25 2010 -0700 @@ -53,7 +53,7 @@ yt is organized into several sub-packages, each of which governs a different conceptual regime. - frontends + frontends This is where interfaces to codes are created. Within each subdirectory of yt/frontends/ there must exist the following files, even if empty: diff -r 8ef67bebbef533054a6ddda1dffe0b5d34960ec5 -r 7d396548900696d93a2481c40fdf07a6ce510e6d make_apipy.py --- a/make_apipy.py Mon Aug 30 22:44:08 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -ss = """\"\"\" -API for %s - -Author: Matthew Turk -Affiliation: UCSD -Author: J.S. Oishi -Affiliation: KIPAC/SLAC/Stanford -Author: Britton Smith -Affiliation: MSU -Homepage: http://yt.enzotools.org/ -License: - Copyright (C) 2010 Matthew Turk. All Rights Reserved. - - This file is part of yt. - - yt is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -\"\"\" -""" - -import sys, os -n = sys.argv[-1] - -fn = os.path.join(os.path.abspath(n), "api.py") -#if os.path.exists(fn): - #print "%s exists! Not overwriting." % fn -bn = n.replace("/",".") - -print "%s -> %s" % (bn, fn) - -open(fn, "w").write(ss % (bn)) diff -r 8ef67bebbef533054a6ddda1dffe0b5d34960ec5 -r 7d396548900696d93a2481c40fdf07a6ce510e6d make_setuppy.py --- a/make_setuppy.py Mon Aug 30 22:44:08 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -ss = r"""#!/usr/bin/env python -import setuptools -import os, sys, os.path - -import os.path - -def configuration(parent_package='',top_path=None): - from numpy.distutils.misc_util import Configuration - config = Configuration('%s',parent_package,top_path) - config.make_config_py() # installs __config__.py - config.make_svn_version_py() - return config -""" - -import sys, os -n = sys.argv[-1] - -fn = os.path.join(os.path.abspath(n), "setup.py") -if os.path.exists(fn): - print "%s exists! Not overwriting." % fn -bn = os.path.basename(n) - -print "%s -> %s" % (bn, fn) - -open(fn, "w").write(ss % bn) diff -r 8ef67bebbef533054a6ddda1dffe0b5d34960ec5 -r 7d396548900696d93a2481c40fdf07a6ce510e6d yt/__init__.py --- a/yt/__init__.py Mon Aug 30 22:44:08 2010 -0700 +++ b/yt/__init__.py Wed Sep 01 07:24:25 2010 -0700 @@ -7,55 +7,58 @@ An ever-growing collection of documentation is also available at http://yt.enzotools.org/doc/ . Additionally, there is a -project site at http://yt.enzotools.org/ with recipes, a wiki, a subversion -changelog and a bug-reporting system. +project site at http://yt.enzotools.org/ with recipes, a wiki, a variety of +ways of peering into the version control, and a bug-reporting system. -YT is divided into several packages, all named after characters from Snow -Crash. +YT is divided into several packages. -Lagos -===== +frontends +--------- -Lagos deals with data structures. It defines things like EnzoGrid, EnzoData, -Enzo2DData, EnzoSphere, etc. If you want to handle actual data, use Lagos. +This is where interfaces to codes are created. Within each subdirectory of +yt/frontends/ there must exist the following files, even if empty: -Raven -===== +* data_structures.py, where subclasses of AMRGridPatch, StaticOutput and + AMRHierarchy are defined. +* io.py, where a subclass of IOHandler is defined. +* misc.py, where any miscellaneous functions or classes are defined. +* definitions.py, where any definitions specific to the frontend are + defined. (i.e., header formats, etc.) -Raven is the plotting interface. All data plotting goes through -Raven. +visualization +------------- -Enki -==== +This is where all visualization modules are stored. This includes plot +collections, the volume rendering interface, and pixelization frontends. -Enki is the package used to create data, and instantiate runs. It supports -creating Enzo Problems, and then using SWIG-interfaced Enzo calls to -actually create the data for those problems. Additionally, facilities are -being developed to use Enki to directly execute runs. +data_objects +------------ -Right now, Enki is still largely experimental. It provides some primitive -methods for interacting with Enzo, but more work needs to be done before -it reaches its vision. +All objects that handle data, processed or unprocessed, not explicitly +defined as visualization are located in here. This includes the base +classes for data regions, covering grids, time series, and so on. This +also includes derived fields and derived quantities. -Fido -==== +analysis_modules +---------------- -Fido is the messenger/protector of data. It takes data outputs, puts them -wherever you want, and then calls a function handler to deal with that data. -Ultimately Fido will deal with all file-handling; submission of runs to a -central (user-specific) database is in the works, and Fido will be the -entity that moves the files in and out of storage. +This is where all mechanisms for processing data live. This includes +things like clump finding, halo profiling, halo finding, and so on. This +is something of a catchall, but it serves as a level of greater +abstraction that simply data selection and modification. -Deliverator -=========== +gui +--- -The Deliverator is a TurboGears-based system for querying and displaying -images. Images are dumped from Raven into local, web-accessible storage -space, and then metadata about those images is submitted to The Deliverator. -The user (you) then goes to the Deliverator website and views those plots. +This is where all GUI components go. Typically this will be some small +tool used for one or two things, which contains a launching mechanism on +the command line. -The base package YT provides facilities for configuration files and logging (via -the Python logger.) +utilities +--------- + +All broadly useful code that doesn't clearly fit in one of the other +categories goes here. Author: Matthew Turk Affiliation: KIPAC/SLAC/Stanford diff -r 8ef67bebbef533054a6ddda1dffe0b5d34960ec5 -r 7d396548900696d93a2481c40fdf07a6ce510e6d yt/visualization/image_panner/vm_panner.py --- a/yt/visualization/image_panner/vm_panner.py Mon Aug 30 22:44:08 2010 -0700 +++ b/yt/visualization/image_panner/vm_panner.py Wed Sep 01 07:24:25 2010 -0700 @@ -456,6 +456,32 @@ self.pylab.imshow(na.log10(val), interpolation='nearest') self.pylab.savefig("wimage_%03i.png" % self.tile_id) +class TransportAppender(object): + def __init__(self, transport): + """ + This is a simple callback that appends the latest buffer to the + supplied *transport* object. + """ + self.transport = transport + + def __call__(self, val): + from yt.utilities.amr_utils import write_png_to_file + from yt.visualization.image_writer import map_to_colors + image = na.log10(val) + mi = na.nanmin(image[~na.isinf(image)]) + ma = na.nanmax(image[~na.isinf(image)]) + color_bounds = mi, ma + image = (image - color_bounds[0])/(color_bounds[1] - color_bounds[0]) + to_plot = map_to_colors(image, "algae") + to_plot = na.clip(to_plot, 0, 255) + tf = tempfile.TemporaryFile() + write_png_to_file(to_plot, tf) + tf.seek(0) + s = tf.read() + response_body = "data:image/png;base64," + base64.encodestring(s) + tf.close() + self.transport.append(response_body) + class PanningCeleritasStreamer(object): _initialized = False def __init__(self, tile_id, cmap = "algae", port = 9988,