[Yt-svn] yt: Adding basic, prelimianry Celeritas support

hg at spacepope.org hg at spacepope.org
Wed Mar 24 13:01:43 PDT 2010


hg Repository: yt
details:   yt/rev/f7a45b5105fc
changeset: 1476:f7a45b5105fc
user:      Matthew Turk <matthewturk at gmail.com>
date:
Wed Mar 24 13:01:39 2010 -0700
description:
Adding basic, prelimianry Celeritas support

diffstat:

 yt/extensions/image_panner/__init__.py  |   3 +-
 yt/extensions/image_panner/vm_panner.py |  48 ++++++++++++++++++++++-
 2 files changed, 47 insertions(+), 4 deletions(-)

diffs (93 lines):

diff -r 1561615dd7c9 -r f7a45b5105fc yt/extensions/image_panner/__init__.py
--- a/yt/extensions/image_panner/__init__.py	Wed Mar 24 00:24:43 2010 -0700
+++ b/yt/extensions/image_panner/__init__.py	Wed Mar 24 13:01:39 2010 -0700
@@ -22,4 +22,5 @@
 """
 
 from vm_panner import VariableMeshPanner, WindowedVariableMeshPanner, \
-                MultipleWindowVariableMeshPanner, ImageSaver
+                MultipleWindowVariableMeshPanner, ImageSaver, \
+                PanningCeleritasStreamer
diff -r 1561615dd7c9 -r f7a45b5105fc yt/extensions/image_panner/vm_panner.py
--- a/yt/extensions/image_panner/vm_panner.py	Wed Mar 24 00:24:43 2010 -0700
+++ b/yt/extensions/image_panner/vm_panner.py	Wed Mar 24 13:01:39 2010 -0700
@@ -22,6 +22,7 @@
 """
 
 import numpy as na
+import types, os
 from yt.raven import FixedResolutionBuffer, ObliqueFixedResolutionBuffer
 from yt.lagos import data_object_registry, AMRProjBase, AMRSliceBase, \
                      x_dict, y_dict
@@ -194,7 +195,8 @@
         engine_id = len(self.windows)
         an = "_args_%s" % id(self)
         kn = "_kwargs_%s" % id(self)
-        kwargs['callback'] = ImageSaver(engine_id)
+        if 'callback' not in kwargs:
+            kwargs['callback'] = ImageSaver(engine_id)
         self.mec.push({an: args, kn: kwargs}, engine_id)
         exec_string = "%s = %s.h.windowed_image_panner(%s, *%s, **%s)" % (
             self._var_name, self._pf_name, self._source_name, an, kn)
@@ -217,8 +219,10 @@
                     an = "_args_%s" % self._cid
                     kn = "_kwargs_%s" % self._cid
                     self.mec.push({an: args, kn: kwargs}, self.engine_id)
-                    self.mec.execute("%s = %s.%s(*%s, **%s)" % (
-                        vn, self._var_name, fname, an, kn), self.engine_id)
+                    exec_string = "%s = %s.%s(*%s, **%s)" % (
+                        vn, self._var_name, fname, an, kn)
+                    print "Executing %s on %s" % (exec_string, self.engine_id)
+                    self.mec.execute(exec_string, self.engine_id)
                     return self.mec.pull(vn, self.engine_id)
                 return func
             new_dict = {}
@@ -259,6 +263,12 @@
     def _regenerate_buffer(self):
         return
 
+    def _run_callback(self):
+        self.mec.execute("%s._regenerate_buffer()" % self._var_name,
+                         self.engine_id)
+        self.mec.execute("%s.callback(%s.buffer)" % (
+            self._var_name, self._var_name), self.engine_id)
+
 class ImageSaver(object):
     def __init__(self, tile_id):
         self.tile_id = tile_id
@@ -278,3 +288,35 @@
         self.pylab.imshow(na.log10(val), interpolation='nearest')
         self.pylab.savefig("wimage_%03i.png" % self.tile_id)
 
+class PanningCeleritasStreamer(object):
+    _initialized = False
+    def __init__(self, tile_id, cmap = "algae", port = 9988,
+                 zlim = (0.0, 1.0)):
+        self.tile_id = tile_id
+        self._port = port
+        self.cmap = cmap
+        self.zlim = zlim
+
+    def initialize(self, shape):
+        if isinstance(self.cmap, types.StringTypes):
+            import matplotlib.cm
+            self.cmap = matplotlib.cm.get_cmap(self.cmap)
+
+        import celeritas_streamer
+        self.cs = celeritas_streamer.CeleritasStream()
+        #print "Setting shape: %s and port: %s in %s" % (
+        #    shape, self._port, os.getpid())
+        self.cs.setSize(*shape)
+        self.cs.setLocalPort(self._port)
+        self.cs.initialize()
+        self._initialized = True
+
+    def __call__(self, val):
+        if not self._initialized: self.initialize(val.shape)
+        vv = val.copy()
+        na.subtract(vv, self.zlim[0], vv)
+        na.divide(vv, (self.zlim[1]-self.zlim[0]), vv)
+        new_buf = self.cmap(vv)
+        na.multiply(new_buf, 255.0, new_buf)
+        new_buf = new_buf[:,:,:3].astype('uint8')
+        self.cs.readFromRGBMemAndSend(new_buf)



More information about the yt-svn mailing list