5 # @purpose Process TCS data
13 import re # Regular expressions - for removing comments
14 import odict #ordered dictionary
17 import Gnuplot, Gnuplot.funcutils
19 gnuplot = Gnuplot.Gnuplot()
21 def GetData(filename):
22 input_file = open(filename, "r")
24 for line in input_file:
25 line = re.sub("#.*", "", line).strip("\r\n ")
28 data.append(map(lambda e : float(e), line.split("\t")))
34 def GetDataSets(directory=".", function=DoNothing):
36 for f in os.listdir(directory):
37 if os.path.isdir(directory+"/"+str(f)) == True:
39 for datafile in os.listdir(directory+"/"+str(f)):
40 if datafile.split(".")[1] == "dat":
41 data_set.append(function(map(lambda e : [e[1], e[2]], GetData("./"+str(f)+"/"+str(datafile)))))
43 avg = Average(data_set)
44 dirs.update({f : avg})
49 def Derivative(data, a=0, b=1):
54 for i in range(1, len(data)-1):
55 dE = data[i+1][a] - data[i][a]
61 dI += data[i+1][b] - data[i][b]
63 result.append([data[i][a], (dI / (n * dE)) ] ) #/ data[i][2]])
66 def MaxNormalise(data, u=1):
69 result = copy.deepcopy(data)
72 maxval = max(data, key = lambda e : e[u])[u]
79 def Average(data_sets, u=1):
87 avg.update({p[0] : [p[u], 1]})
90 avg[a] = float(avg[a][0]) / float(avg[a][1])
91 return sorted(avg.items(), key = lambda e : e[0])
99 def FullWidthAtHalfMax(data, u=1):
100 maxval = max(data, key = lambda e : e[u])
101 peak = data.index(maxval)
105 for i in range(1, len(data)/2):
107 if (peak-i > 0 and data[peak-i] < 0.50*maxval):
108 lhs = data[peak-i][u]
110 if (peak+i < len(data) and data[peak+i] < 0.50*maxval):
112 if lhs != None and rhs != None:
114 if rhs == None or lhs == None:
115 return abs(data[len(data)-1][0] - data[0][0])
117 return abs(rhs - lhs)
119 def SaveData(filename, data):
120 out = open(filename, "w", 0)
122 out.write(str(a[0]) + "\t" + str(a[1]) + "\n")
126 if (len(sys.argv) < 2):
127 sys.stderr.write(sys.argv[0] + " - Require arguments (filename)\n")
131 gnuplot("set style data lp")
132 gnuplot("set key outside right")
133 #gnuplot("set title \"Au on Si (50min 3.5A 3-6 e-8mbar)\"")
134 #gnuplot("set xlabel \"E (DAC Counts)\"")
135 #gnuplot("set ylabel \"S(E) (ADC/DAC Counts)\"")
136 #gnuplot("set term postscript colour")
137 #gnuplot("set output \"test.eps\"")
138 for i in range(1, len(sys.argv)):
139 tcs.append(Derivative(map(lambda e : [e[1], e[2]], GetData(sys.argv[i]))))
140 #tcs.append(GetTCS(GetData(sys.argv[i])))
141 if (len(tcs[i-1]) > 0):
142 gnuplot.replot(Gnuplot.Data(tcs[i-1], title=sys.argv[i], with_="lp"))
144 # Now average the data
149 #gnuplot.replot(Gnuplot.Data(avg, title="Average", with_="l lw 2"))
151 sys.stdout.write("Save averaged data as (blank for no save): ")
152 filename = sys.stdin.readline().strip(" \r\n\t")
154 SaveData(filename, avg)
159 if __name__ == "__main__":