Repository navigation
Expand file tree
/
Copy pathbootstrap_module.py
More file actions
executable file
·70 lines (59 loc) · 2.29 KB
/
Copy pathbootstrap_module.py
File metadata and controls
executable file
·70 lines (59 loc) · 2.29 KB
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
#!/usr/bin/env python2
"""
Calculates mean and standart deviation for a set of retrieved FES
The averaging is performed at every point by bootstrapping
"""
import glob
import os
import time
from multiprocessing import Pool
import numpy as np
import bootstrapped.bootstrap as bs
import bootstrapped.stats_functions as bs_stats
def calc_average(filename):
# set up arrays of right size from first folder
tempdata = np.transpose(np.genfromtxt(folders[0] + filename))
data = np.ndarray(shape=(len(folders), len(tempdata[0])), dtype=float)
means = np.ndarray(shape=(len(tempdata[0])), dtype=float)
stddev = np.ndarray(shape=(len(tempdata[0])), dtype=float)
colvar = tempdata[0]
data[0] = tempdata[1]
# loop over all other folders
for i in range(1, len(folders)):
data[i] = np.transpose(np.genfromtxt(folders[i]+filename))[1]
# all data is read, perform the bootstrap
for j in range(len(colvar)):
means[j] = bs.bootstrap(data[:, j], stat_func=bs_stats.mean, num_iterations=5000).value
stddev[j] = bs.bootstrap(data[:, j], stat_func=bs_stats.std, num_iterations=5000).value
# copy header from one infile
comments = ''
for line in open(folders[0]+filename):
if line.startswith('#'):
comments += line
else:
comments = comments[:-2] # remove last newline
break
# write data to file
outdata = np.transpose(np.vstack((colvar, means, stddev)))
np.savetxt('bootstr_avg/'+filename, np.asmatrix(outdata), header=comments,
fmt='%1.16f', delimiter=' ', newline='\n')
print('Averaging of FES file {} finished'.format(filename))
return
if __name__ == '__main__':
starttime = time.time()
# get list of folders and fesfiles
folders = glob.glob('[0-9]*' + os.path.sep)
files = [os.path.basename(f) for f in glob.glob(folders[0]+'/fes.b1.iter*')]
if os.path.exists('bootstr_avg'):
os.rename('bootstr_avg', 'bck.bootstr_avg')
os.mkdir('bootstr_avg')
try:
os.system('taskset -p 0xff %d' % os.getpid()) # needed because of numpy
pool = Pool(6)
pool.map(calc_average, files)
finally:
pool.close()
pool.join()
print('The job took {} seconds to complete'.format(time.time()-starttime))
else:
exit(-1)