X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=research%2FTCS%2Fprocess.py;h=ff186fb72838ad2c824f04131ce88b1657ea878d;hb=d6bdb39c05481f4deef15a535452a31a7019d09c;hp=c27975905c95dc5129cb936f48633f35fd907e29;hpb=bb17b8b51e56de0189083afeb5db8b58b9e1f268;p=matches%2Fhonours.git diff --git a/research/TCS/process.py b/research/TCS/process.py index c2797590..ff186fb7 100755 --- a/research/TCS/process.py +++ b/research/TCS/process.py @@ -12,42 +12,147 @@ import sys import os import re # Regular expressions - for removing comments import odict #ordered dictionary +import copy -def main(): - - if (len(sys.argv) != 2): - sys.stderr.write(sys.argv[0] + " - Require 1 argument (filename)\n") - return 1 +import Gnuplot, Gnuplot.funcutils - input_file = open(sys.argv[1], "r") - data = odict.odict([]) +gnuplot = Gnuplot.Gnuplot() + +def GetData(filename): + input_file = open(filename, "r") + data = [] for line in input_file: line = re.sub("#.*", "", line).strip("\r\n ") if len(line) == 0: continue - line = line.split("\t") - #sys.stdout.write(str(line)) - if float(line[1]) in data: - data[float(line[1])].append(float(line[2])) - else: - data[float(line[1])] = [float(line[2])] + data.append(map(lambda e : float(e), line.split("\t"))) + return 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 - - for dac in data.keys(): - avg = sum(data[dac], 0.0) / len(data[dac]) - data[dac] = avg +def Derivative(data, a=0, b=1): result = [] - for i in range(0, len(data.keys())-1): - dE = data.keys()[i+1] - data.keys()[i] - dI = data[data.keys()[i+1]] - data[data.keys()[i]] - result.append((data.keys()[i], dI/dE)) - sys.stdout.write(str(data.keys()[i]) + "\t" + str(data[data.keys()[i]]) + "\t" + str(dI/dE) + "\n") + n = 0 + dI = 0 + dE = 0 + for i in range(1, len(data)-1): + dE = data[i+1][a] - data[i][a] + if (dE != 0): + n = 0 + dI = 0 + + n += 1 + dI += data[i+1][b] - data[i][b] + if (dE != 0): + 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 dac in data: - # sys.stdout.write(str(dac) + "\t" + str(data[dac]) + "\n") + 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): + sys.stderr.write(sys.argv[0] + " - Require arguments (filename)\n") + return 1 + + tcs = [] + gnuplot("set style data lp") + gnuplot("set key outside right") + #gnuplot("set title \"Au on Si (50min 3.5A 3-6 e-8mbar)\"") + #gnuplot("set xlabel \"E (DAC Counts)\"") + #gnuplot("set ylabel \"S(E) (ADC/DAC Counts)\"") + #gnuplot("set term postscript colour") + #gnuplot("set output \"test.eps\"") + for i in range(1, len(sys.argv)): + 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=sys.argv[i], with_="lp")) + + # Now average the data + + + + 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 != ""): + SaveData(filename, avg) + return 0