Python wrapper for running instances of trisurf-ng
Samo Penic
2019-08-15 d5ddc0a56d9f52f27fb6edcc2fa1caf66fdb9eb0
trisurf/analyses.py
@@ -1,6 +1,22 @@
from . import trisurf
def analysis(*args):
   """Decorator for adding the analysis functions to function lists"""
   def analysis_decorator(analysis_function):
      trisurf._analysis_list[analysis_name]=analysis_function
      def wrapper(*args, **kwargs):
         analysis_function(*args,**kwargs)
      return wrapper
   if len(args) == 1 and callable(args[0]): #no arguments
      analysis_name=args[0].__name__
      return analysis_decorator(args[0])
   else:
      analysis_name=args[0]
      return analysis_decorator
@analysis
def demo(run, **kwargs):
   host=kwargs.get('host', None)
   print("Demo analysis")
@@ -13,12 +29,14 @@
   print(kwargs.get('args',None))
def plotrunningavginteractive(run, **kwargs):
# can be wrapped to specify scalar_field)
@analysis('plotrunningavginteractive')
def plotrunningavginteractive(run, scalar_field='hbar', ylabel="1/n sum_i=niter^n(hbar_i)", **kwargs):
   import matplotlib.pyplot as plt
   from trisurf import VTKRendering as vtk
   import math
   from multiprocessing import Process
   table=trisurf.Statistics(run.Dir.fullpath(),filename='data_tspoststat.csv').getTable()
   table=trisurf.Statistics(run.Dir.fullpath(),filename='poststat.csv').getTable()
   def running_avg(col):
      import numpy as np
      avg=[]   
@@ -26,14 +44,14 @@
         avg.append(np.average(col[:-i]))
      return avg
   def spawned_viewer(n):
      vtk.Renderer(kwargs.get('args', None),kwargs.get('host',None),run, n)
      vtk.Renderer(kwargs.get('args', None),kwargs.get('host',None),run, timestep=n,scalar_field=scalar_field)
   fig=plt.figure(1)
   ra=running_avg(table['hbar'])
   l=len(table['hbar'])
   ra=running_avg(table[scalar_field])
   l=len(table[scalar_field])
   plt.plot(ra)
   plt.title('Running average')
   plt.ylabel('1/n sum_i=niter^n(hbar_i)')
   plt.ylabel(ylabel)
   plt.xlabel('n')
   def onclick(event):
      #print('button=%d, x=%d, y=%d, xdata=%f, ydata=%f' % (event.button, event.x, event.y, event.xdata, event.ydata))
@@ -47,8 +65,8 @@
# -------------------------------
# these functions should be wrapped
# -------------------------------
def plotColumnFromPostProcess(run, filename='data_tspoststat.csv', column='hbar', **kwargs):
@analysis('plotColumnFromPostProcess')
def plotColumnFromPostProcess(run, filename='poststat.csv', column='hbar', **kwargs):
   import matplotlib.pyplot as plt
   def smooth(y, box_pts):