X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=research%2FTCS%2Fprocess.py;h=ff186fb72838ad2c824f04131ce88b1657ea878d;hb=d6bdb39c05481f4deef15a535452a31a7019d09c;hp=bc2aae0d9d136a095e92d62d0f9d21620b27a077;hpb=145d3c5838a0ad1f57fcdcdf2e496a32428b7859;p=matches%2Fhonours.git diff --git a/research/TCS/process.py b/research/TCS/process.py index bc2aae0d..ff186fb7 100755 --- a/research/TCS/process.py +++ b/research/TCS/process.py @@ -12,6 +12,7 @@ import sys import os import re # Regular expressions - for removing comments import odict #ordered dictionary +import copy import Gnuplot, Gnuplot.funcutils @@ -27,29 +28,99 @@ def GetData(filename): 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): + + + result = copy.deepcopy(data) + if (len(data) <= 0): + return result + maxval = max(data, key = lambda e : e[u])[u] + + 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): @@ -65,34 +136,22 @@ def main(): #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(DoNothing(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