commit | author | age
|
d2f7b0
|
1 |
from . import trisurf |
SP |
2 |
|
|
3 |
|
29660c
|
4 |
def analysis(*args): |
c1504d
|
5 |
"""Decorator for adding the analysis functions to function lists""" |
SP |
6 |
def analysis_decorator(analysis_function): |
|
7 |
trisurf._analysis_list[analysis_name]=analysis_function |
|
8 |
def wrapper(*args, **kwargs): |
|
9 |
analysis_function(*args,**kwargs) |
|
10 |
return wrapper |
29660c
|
11 |
if len(args) == 1 and callable(args[0]): #no arguments |
SP |
12 |
analysis_name=args[0].__name__ |
|
13 |
return analysis_decorator(args[0]) |
|
14 |
else: |
|
15 |
analysis_name=args[0] |
|
16 |
return analysis_decorator |
c1504d
|
17 |
|
SP |
18 |
|
29660c
|
19 |
@analysis |
d2f7b0
|
20 |
def demo(run, **kwargs): |
SP |
21 |
host=kwargs.get('host', None) |
|
22 |
print("Demo analysis") |
|
23 |
print("Analysis on host "+host['name']+" for run "+run.Dir.fullpath()+" completed") |
|
24 |
print("here comes info on the run variable:") |
|
25 |
print(run) |
|
26 |
print("here comes info on the host variable:") |
|
27 |
print(host) |
|
28 |
print("here comes info on the args variable:") |
|
29 |
print(kwargs.get('args',None)) |
|
30 |
|
|
31 |
|
d55834
|
32 |
# can be wrapped to specify scalar_field) |
c1504d
|
33 |
@analysis('plotrunningavginteractive') |
158201
|
34 |
def plotrunningavginteractive(run, scalar_field='hbar', ylabel="1/n sum_i=niter^n(hbar_i)", **kwargs): |
d2f7b0
|
35 |
import matplotlib.pyplot as plt |
SP |
36 |
from trisurf import VTKRendering as vtk |
|
37 |
import math |
|
38 |
from multiprocessing import Process |
|
39 |
table=trisurf.Statistics(run.Dir.fullpath(),filename='data_tspoststat.csv').getTable() |
|
40 |
def running_avg(col): |
|
41 |
import numpy as np |
|
42 |
avg=[] |
|
43 |
for i in range(0,len(col)): |
|
44 |
avg.append(np.average(col[:-i])) |
|
45 |
return avg |
|
46 |
def spawned_viewer(n): |
d55834
|
47 |
vtk.Renderer(kwargs.get('args', None),kwargs.get('host',None),run, timestep=n,scalar_field=scalar_field) |
d2f7b0
|
48 |
|
SP |
49 |
fig=plt.figure(1) |
158201
|
50 |
ra=running_avg(table[scalar_field]) |
M |
51 |
l=len(table[scalar_field]) |
d2f7b0
|
52 |
plt.plot(ra) |
SP |
53 |
plt.title('Running average') |
158201
|
54 |
plt.ylabel(ylabel) |
d2f7b0
|
55 |
plt.xlabel('n') |
SP |
56 |
def onclick(event): |
|
57 |
#print('button=%d, x=%d, y=%d, xdata=%f, ydata=%f' % (event.button, event.x, event.y, event.xdata, event.ydata)) |
|
58 |
p=Process(target=spawned_viewer, args=(l-math.floor(event.xdata)-1,)) |
|
59 |
p.start() |
|
60 |
cid = fig.canvas.mpl_connect('button_press_event', onclick) |
|
61 |
plt.show() |
|
62 |
plt.close(1) |
|
63 |
|
|
64 |
|
|
65 |
# ------------------------------- |
|
66 |
# these functions should be wrapped |
|
67 |
# ------------------------------- |
c1504d
|
68 |
@analysis('plotColumnFromPostProcess') |
d2f7b0
|
69 |
def plotColumnFromPostProcess(run, filename='data_tspoststat.csv', column='hbar', **kwargs): |
SP |
70 |
import matplotlib.pyplot as plt |
|
71 |
|
|
72 |
def smooth(y, box_pts): |
|
73 |
import numpy as np |
|
74 |
box = np.ones(box_pts)/box_pts |
|
75 |
y_smooth = np.convolve(y, box, mode='same') |
|
76 |
return y_smooth |
|
77 |
table=trisurf.Statistics(run.Dir.fullpath(),filename=filename).getTable() |
|
78 |
plt.plot(table[column], '.') |
|
79 |
plt.title(run.Dir.fullpath()) |
|
80 |
plt.xlabel('Iteration') |
|
81 |
plt.ylabel(column) |
|
82 |
smooth_window=10 |
|
83 |
smoothed=smooth(table[column],smooth_window) |
|
84 |
plt.plot(tuple(range(int(smooth_window/2),len(smoothed)-int(smooth_window/2))),smoothed[int(smooth_window/2):-int(smooth_window/2)]) |
|
85 |
plt.show() |
|
86 |
print |
|
87 |
#if return False or no return statement, the analysis will continue with next running instance in the list. if return True, the analysis will stop after this run. |
|
88 |
return False |
|
89 |
|
|
90 |
|