Automatic commit. Thu Sep 27 12:00:14 WST 2012
[matches/honours.git] / research / TCS / process.py
index feac2d6..ff186fb 100755 (executable)
@@ -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):
@@ -58,14 +129,29 @@ def main():
 
        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(GetTCS(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(tcs[i-1])
+                       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"))
        
-       print("Press enter to exit")
-       sys.stdin.readline()
+       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
 

UCC git Repository :: git.ucc.asn.au