source: util/src/AnalysePASFromEllipsoids.py.in@ a3ffb44

Last change on this file since a3ffb44 was e1a46d, checked in by Frederik Heber <heber@…>, 16 years ago

All of my python script put into ESPACK and adapted with @PYTHON@ and so on.

  • Property mode set to 100755
File size: 2.4 KB
Line 
1#!@PYTHON@
2
3import sys,math
4
5wrerr=sys.stderr.write
6wrout=sys.stdout.write
7
8# get arguments
9if (len(sys.argv) < 3):
10 print "Usage: "+sys.argv[0]+" <dir> <datafile> <bin-length>"
11 sys.exit(1)
12else:
13 dir=sys.argv[1]
14 data=sys.argv[2]
15 length=float(sys.argv[3])
16
17input=open(dir+"/"+data,"r")
18abc=[]
19for line in input:
20 if "#" in line:
21 continue
22 entries=line.split()
23 for n in range(3):
24 abc.append(abs(float(entries[n+4])))
25input.close()
26
27# simply output all sorted pairs
28wrout("Output of sorted data pairs ... ")
29output = open(dir+"/"+data+".out", "w")
30output.write("#Nr. absolute value\n")
31abc.sort()
32for i in range(len(abc)):
33 output.write("%d\t %lg\n" % (i, abc[i]))
34output.close()
35wrout("done.\n")
36
37# then bin and output
38nr=int(((abc[-1])/length)+0.5)
39bin=[] # contains list of values
40print "Number of bins "+str(nr)+" with length "+str(length)+"."
41# initialise bins with 0
42wrout("Gathering into bins ... ")
43for i in range(nr):
44 bin.append([0])
45# go through all values and increase bin
46for i in range(len(abc)):
47 index=int(((abc[i])/length)-0.5)
48 bin[index][0]+=1
49 bin[index].append(abc[i])
50 #print ("%lg goes into bin %d, containg %d." % (abc[i], index, bin[index][0]))
51wrout("done.\n")
52
53wrout("Output of bins to file ... ")
54output = open(dir+"/"+data+".bin","w")
55output.write("#Bin -- length: %lg\t -- count\taverage\terror\n" % (length))
56max=[0, 0, 0]
57MAX=[-1,-1,-1]
58for i in range(nr):
59 # determine greatest three bins
60 for n in range(3):
61 if (bin[i][0]>max[n]):
62 for m in range(n,2):
63 max[m+1] = max[m]
64 MAX[m+1] = MAX[m]
65 max[n] = bin[i][0]
66 MAX[n] = i
67 break
68 # calculate average and error per bin
69 average=0
70 error=0
71 if bin[i][0] != 0:
72 for m in range(1,bin[i][0]+1):
73 average+=bin[i][m]*bin[i][m]
74 average=math.sqrt(average/bin[i][0])
75 for m in range(1,bin[i][0]+1):
76 tmp=bin[i][m]-average
77 error+=tmp*tmp
78 error=math.sqrt(error)/bin[i][0]
79 #output
80 output.write("%d\t %lg\t%lg\t%lg\n" % (i, bin[i][0], average, error))
81output.close()
82wrout("done.\n")
83
84# output average of each of the three greatest bins
85for n in range(3):
86 average=0
87 error=0
88 if bin[ MAX[n] ][0] != 0:
89 for m in range(1,bin[ MAX[n] ][0]+1):
90 average+=bin[ MAX[n] ][m]*bin[ MAX[n] ][m]
91 average=math.sqrt(average/bin[ MAX[n] ][0])
92 for m in range(1,bin[ MAX[n] ][0]+1):
93 tmp=bin[ MAX[n] ][m]-average
94 error+=tmp*tmp
95 error=math.sqrt(error)/bin[ MAX[n] ][0]
96 print "Bin "+str(MAX[n])+" has "+str(max[n])+" values, average is "+str(average)+" +/- "+str(error)+"."
Note: See TracBrowser for help on using the repository browser.