Source code for plotPerfusionCoefs

#!/usr/bin/env python
# 13.07.2007, c
import os
import os.path as op
from optparse import OptionParser
try:
    import pylab
except:
    pylab = None

import numpy as nm

from sfepy.base.base import import_file
from sfepy.homogenization.coefficients import Coefficients

##
# c: 13.07.2007, r: 03.04.2008
[docs]def show_array( arr, name ): pylab.ion() fig = pylab.figure() ax = fig.add_subplot( 111 ) ax.set_title( name ) ax.xaxis.tick_top() ax.title.set_y( 1.05 ) # raise it up a bit for tick top if arr.ndim == 1: arr = arr[:,nm.newaxis] pylab.imshow( arr, aspect = 'auto', interpolation = 'nearest', origin = 'lower' ) ax.set_ylim( ax.get_ylim()[::-1] ) pylab.colorbar() fig.canvas.draw() pylab.ioff() return fig
## # c: 13.07.2007, r: 03.04.2008
[docs]def plot_history( arr, name ): pylab.ion() fig = pylab.figure() ax = fig.add_subplot( 111 ) ax.set_title( name ) ax.hold( True ) legend = [] if arr.ndim == 2: arr = arr[...,nm.newaxis] for ir in range( arr.shape[1] ): for ic in range( arr.shape[2] ): ax.plot( arr[0:,ir,ic] ) legend.append( '%d%d' % (ir, ic) ) ax.legend( legend ) fig.canvas.draw() pylab.ioff() return fig
## # 16.07.2007, c
[docs]def plot_volume_fractions( vfs, name ): pylab.ion() fig = pylab.figure() ax = fig.add_subplot( 111 ) ax.set_title( name ) labels = [] vals = [] for key, val in vfs.iteritems(): labels.append( r'$|%s|$' % key[6:] ) vals.append( val ) ax.pie( vals, labels = labels, autopct = '%.2f%%' ) ax.axis( 'image' ) fig.canvas.draw() pylab.ioff() return fig
## # c: 20.06.2008, r: 23.06.2008
[docs]def load_coefs( filename ): coefs = Coefficients.from_file_hdf5( filename ) try: options = import_file( coefs.filename ).options except: options = None if options is not None: plot_info = options['plot_info'] tex_names = options['tex_names'] else: plot_info = coefs.get('plot_info', {}) tex_names = coefs.get('tex_names', {}) return coefs, plot_info, tex_names
## # c: 28.08.2007, r: 23.06.2008
[docs]def plot_and_save( filename_in, dir_name, fname = None, keys = None, interactive = True ): """If keys == None take all.""" if fname is None: def get_filename( name, format ): return op.join( dir_name, name + '.%s' % format ) else: def get_filename( name, format ): d_name = op.join( dir_name, name ) try: os.mkdir( d_name ) except: pass return op.join( d_name, '%s.%s' % (fname, format) ) coefs, plot_info, tex_names = load_coefs( filename_in ) all_keys = coefs.to_dict().keys() print 'all:', all_keys if keys is None: keys = all_keys else: keys = keys.split() print 'selected:', keys format = 'png' vfs = {} for key, val in coefs.to_dict().iteritems(): if key.startswith( 'volume' ): if key == 'volume_y': continue if key not in keys: continue vfs[key] = val print key, nm.asarray( val ).shape if vfs: fig = plot_volume_fractions( vfs, r'volume fractions' ) fig.savefig( get_filename( 'coef_vf', format ) ) pylab.rcParams['lines.linewidth'] = 3.0 pylab.rcParams['legend.fontsize'] = 20.0 pylab.rcParams['axes.labelsize'] = 20.0 pylab.rcParams['xtick.labelsize'] = 20.0 pylab.rcParams['ytick.labelsize'] = 20.0 for key, val in coefs.to_dict().iteritems(): if not plot_info.has_key( key ): continue if key not in keys: continue val = nm.asarray( val ) kind = plot_info[key][0] name = tex_names[key] fig_name = 'coef' + key print kind, name, fig_name for indx in plot_info[key][1]: if indx == '...': suffix = '' else: suffix = indx if kind == 'mtx': fig = show_array( eval( 'val[%s]' % indx ), name ) elif kind == 'th': fig = plot_history( eval( 'val[%s]' % indx ), name ) fig.savefig( get_filename( fig_name + suffix, format ) ) if interactive: pylab.show() else: return coefs, plot_info, tex_names
usage = """%prog [options] filename_in""" help = { 'dir_name' : 'output directory [default: %default]', 'keys' : 'plot only selected keys [default: %default]', } ## # c: 13.07.2007, r: 19.06.2008
[docs]def main(): install_dir = op.dirname( __file__ ) version = open( op.join( install_dir, 'VERSION' ) ).readlines()[0][:-1] parser = OptionParser( usage = usage, version = "%prog " + version ) parser.add_option( "-d", "", metavar = 'dir_name', action = "store", dest = "dir_name", default = '.', help = help['dir_name'] ) parser.add_option( "-k", "--keys", metavar = 'keys', action = "store", dest = "keys", default = None, help = help['keys'] ) (options, args) = parser.parse_args() if (len( args ) >= 1): filenames_in = args[0:]; else: parser.print_help(), return if len( filenames_in ) == 1: plot_and_save( filenames_in[0], options.dir_name, keys = options.keys ) else: for iseq, filename_in in enumerate( filenames_in ): try: fname = op.splitext( op.basename( filename_in ) )[0][6:] except: fname = '%d' % iseq plot_and_save( filename_in, options.dir_name, fname = fname, keys = options.keys )
if __name__ == '__main__': main() ######### # Example: ./plot_perfusion_coefs.py --keys="BiotH H BiotMHR" coefs\:input_bones_bones_micro.h5