import os
import re # Regular expressions - for removing comments
import odict #ordered dictionary
+import copy
import Gnuplot, Gnuplot.funcutils
data.append(map(lambda e : float(e), line.split("\t")))
return data
-def GetTCS(data):
+def DoNothing(data):
+ return data
+
+def GetDataSets(directory=".", function=DoNothing):
+ dirs = {}
+ for f in os.listdir(directory):
+ if os.path.isdir(directory+"/"+str(f)) == True:
+ data_set = []
+ for datafile in os.listdir(directory+"/"+str(f)):
+ if datafile.split(".")[1] == "dat":
+ data_set.append(function(map(lambda e : [e[1], e[2]], GetData("./"+str(f)+"/"+str(datafile)))))
+
+ avg = Average(data_set)
+ dirs.update({f : avg})
+ return dirs
+
+
+
+def Derivative(data, a=0, b=1):
result = []
n = 0
dI = 0
dE = 0
for i in range(1, len(data)-1):
- dE = data[i+1][1] - data[i][1]
+ dE = data[i+1][a] - data[i][a]
if (dE != 0):
n = 0
dI = 0
n += 1
- dI += data[i+1][2] - data[i][2]
+ dI += data[i+1][b] - data[i][b]
if (dE != 0):
- result.append([data[i][1], (dI / (n * dE)) ] ) #/ data[i][2]])
+ result.append([data[i][a], (dI / (n * dE)) ] ) #/ data[i][2]])
return result
+def MaxNormalise(data, u=1):
+ maxval = max(data, key = lambda e : e[u])[u]
+
+ result = copy.deepcopy(data)
+ for d in result:
+ d[u] = d[u] / maxval
+
+ return result
+
+def Average(data_sets, u=1):
+ avg = odict.odict()
+ for t in data_sets:
+ for p in t:
+ if p[0] in avg:
+ avg[p[0]][0] += p[u]
+ avg[p[0]][1] += 1
+ else:
+ avg.update({p[0] : [p[u], 1]})
+
+ for a in avg.keys():
+ avg[a] = float(avg[a][0]) / float(avg[a][1])
+ return sorted(avg.items(), key = lambda e : e[0])
+
def Plot(*args):
gnuplot.plot(args)
def FitTCS(data):
pass
+def FullWidthAtHalfMax(data, u=1):
+ maxval = max(data, key = lambda e : e[u])
+ peak = data.index(maxval)
+ maxval = maxval[0]
+ lhs = None
+ rhs = None
+ for i in range(1, len(data)/2):
+ if lhs == None:
+ if (peak-i > 0 and data[peak-i] < 0.50*maxval):
+ lhs = data[peak-i][u]
+ if rhs == None:
+ if (peak+i < len(data) and data[peak+i] < 0.50*maxval):
+ rhs = peak+i
+ if lhs != None and rhs != None:
+ break
+ if rhs == None or lhs == None:
+ return abs(data[len(data)-1][0] - data[0][0])
+ else:
+ return abs(rhs - lhs)
+
+def SaveData(filename, data):
+ out = open(filename, "w", 0)
+ for a in data:
+ out.write(str(a[0]) + "\t" + str(a[1]) + "\n")
+
def main():
if (len(sys.argv) < 2):
#gnuplot("set term postscript colour")
#gnuplot("set output \"test.eps\"")
for i in range(1, len(sys.argv)):
- tcs.append(map(lambda e : [e[1], e[2]], GetData(sys.argv[i])))
+ tcs.append(Derivative(map(lambda e : [e[1], e[2]], GetData(sys.argv[i]))))
#tcs.append(GetTCS(GetData(sys.argv[i])))
if (len(tcs[i-1]) > 0):
- gnuplot.replot(Gnuplot.Data(tcs[i-1], title="", with_="lp"))
+ gnuplot.replot(Gnuplot.Data(tcs[i-1], title=sys.argv[i], with_="lp"))
# Now average the data
- avg = odict.odict()
- for t in tcs:
- for p in t:
- if p[0] in avg:
- avg[p[0]][0] += p[1]
- avg[p[0]][1] += 1
- else:
- avg.update({p[0] : [p[1], 1]})
- for a in avg.keys():
- avg[a] = float(avg[a][0]) / float(avg[a][1])
-
- gnuplot.replot(Gnuplot.Data(sorted(avg.items(), key = lambda e : e[0]), title="Average", with_="l lw 2"))
+ avg = Average(tcs)
+ #gnuplot.replot(Gnuplot.Data(avg, title="Average", with_="l lw 2"))
sys.stdout.write("Save averaged data as (blank for no save): ")
filename = sys.stdin.readline().strip(" \r\n\t")
if (filename != ""):
- out = open(filename, "w", 0)
- for a in sorted(avg.items(), key = lambda e : e[0]):
- out.write(str(a[0]) + "\t" + str(a[1]) + "\n")
+ SaveData(filename, avg)
return 0