Python wrapper for running instances of trisurf-ng
Samo Penic
2017-01-14 3ccf5d1c706eecc15da8d17ca381706892cb9f76
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/python3
from trisurf import tsmgr
from trisurf import trisurf
from trisurf import statistics
 
print("Running trisurf version "+ tsmgr.getTrisurfVersion())
Runs=[]
Nshell=25
 
#--------- F = 0 ------------
#kapa_list=[10,20,30,40,50]
#p=[5,10,15,20,25]
 
#N=5*Nshell**2+2
#Nc_list=[int(N*pp/100)  for pp in p]
 
#for kapa in kapa_list:
#    for Nc in Nc_list:
#        run=trisurf.Runner(tape='tape_Nc'+str(Nc)+'_k'+str(kapa))
#        run.setMaindir(("N", "k", "V", "_Nc", "_c","_w"),  ("nshell","xk0","constvolswitch","number_of_vertices_with_c0","c0", "w"))
#        run.setSubdir("run0")
#        Runs.append(run)
 
#----------------------------
#--------- F = 0 ------------
kapa_list=[15,16,17,18,19,20,21,22]
#p=[5,7.5,10,12.5]
p=[8,8.5,9,9.5,10.5,11,11.5,12]
 
N=5*Nshell**2+2
Nc_list=[int(N*pp/100)  for pp in p]
#print(Nc_list)
 
#spremenil sem, ker nimam vseh podatkov!!!
kapa_list=[15,16,18,19,20,21,21,22]
Nc_list=[156,234,312,390]
 
for kapa in kapa_list:
    for Nc in Nc_list:
        #print('tape_Nc'+str(Nc)+'_k'+str(kapa))
        run=trisurf.Runner(tape='tape_Nc'+str(Nc)+'_k'+str(kapa))
        run.setMaindir(("N", "k", "V", "_Nc", "_c","_w"),  ("nshell","xk0","constvolswitch","number_of_vertices_with_c0","c0", "w"))
        run.setSubdir("run0")
        Runs.append(run)
 
#----------------------------
 
#kapa_list=[20,30]
#p=[10]
#
#N=5*Nshell**2+2
#Nc_list=[int(N*pp/100)  for pp in p]
#
#for kapa in kapa_list:
#    for Nc in Nc_list:
#        run=trisurf.Runner(snapshot='is_from_N25k'+str(kapa)+'V0_Nc312_c1.0.vtu')
#        run.setMaindir(("N", "k", "V", "_Nc", "_c","_w","_F"),  ("nshell","xk0","constvolswitch","number_of_vertices_with_c0","c0", "w","F"))
#        run.setSubdir("run0")
#
#        Runs.append(run)
 
#----------------------------
 
 
 
#Nov format:
#hosts=({'name':'Hestia','address':'127.0.0.1', 'runs':Runs,  'username':'samo'},)
 
def analyze(run, **kwargs):
    host=kwargs.get('host', None)
    print("Demo analysis")
    print("Analysis on host "+host['name']+" for run "+run.Dir.fullpath()+" completed")
    print("here comes info on the run variable:")
    print(run)
    print("here comes info on the host variable:")
    print(host)
    print("here comes info on the args variable:")
    print(kwargs.get('args',None))
 
def plothbar(run, **kwargs):
    import matplotlib.pyplot as plt
 
    def smooth(y, box_pts):
        import numpy as np
        box = np.ones(box_pts)/box_pts
        y_smooth = np.convolve(y, box, mode='same')
        return y_smooth
    table=trisurf.Statistics(run.Dir.fullpath(),filename='data_tspoststat.csv').getTable()
    plt.plot(table['hbar'], '.')
    plt.title(run.Dir.fullpath())
    plt.xlabel('Iteration')
    plt.ylabel('hbar')
    smooth_window=10
    smoothed=smooth(table['hbar'],smooth_window)
    plt.plot(tuple(range(int(smooth_window/2),len(smoothed)-int(smooth_window/2))),smoothed[int(smooth_window/2):-int(smooth_window/2)])
    plt.show()
    print
    #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.
    return False
 
def plotrunningavginteractive(run, **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()
    def running_avg(col):
        import numpy as np
        avg=[]    
        for i in range(0,len(col)):
            avg.append(np.average(col[:-i]))
        return avg
    def spawned_viewer(n):
        vtk.Renderer(kwargs.get('args', None),kwargs.get('host',None),run, n)
 
    fig=plt.figure(1)
    ra=running_avg(table['hbar'])
    plt.plot(ra)
    plt.title('Running average')
    plt.ylabel('1/n sum_i=niter^n(hbar_i)')
    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))
        p=Process(target=spawned_viewer, args=(math.floor(event.xdata)-1,))
        p.start()
    cid = fig.canvas.mpl_connect('button_press_event', onclick)
    plt.show()
    plt.close(1)
#start manager with configured runs
tsmgr.start(Runs, analyses={'analyze1':analyze, 'plotrunningavg':plotrunningavginteractive, 'plothbar':plothbar})
 
#statistics.combine(Runs)
#statistics.combine([Runs[1],Runs[2]])