Commit before breaking everything
[matches/honours.git] / research / ellipsometry / process.py~
diff --git a/research/ellipsometry/process.py~ b/research/ellipsometry/process.py~
new file mode 100755 (executable)
index 0000000..d61b60b
--- /dev/null
@@ -0,0 +1,146 @@
+#!/usr/bin/python
+import sys
+import os
+import re # Regular expressions - for removing comments
+import odict #ordered dictionary
+import copy
+
+import Gnuplot, Gnuplot.funcutils
+import string
+import time
+import math
+import cmath
+import random
+
+gnuplot = Gnuplot.Gnuplot()
+
+keys = ["wavelength","angle", "psi", "delta", "uncertainty_psi", "uncertainty_delta"]
+
+def getData(fileName):
+       dataFile = open(fileName, "r")
+       #Format is 
+       #wavelength     angle   psi     delta   uncertainty_psi uncertainty_delta
+
+       title = dataFile.readline().strip()
+       
+       #Skip lines before data
+       for i in range(1,4):
+               dataFile.readline()
+
+       data = []
+       
+       line = dataFile.readline()
+       while line != "":
+               values = line.split("   ")
+               if len(values) != len(keys):
+                       sys.stderr.write("Number of on line \""+line.strip() + "\" doesn't match number of keys ("+str(len(keys))+") " + str(keys) +"\n")
+                       sys.exit(1)
+               #sys.stdout.write("Debug: Read line \""+line.strip()+"\"\n")
+               point = {}
+               for i in range(0, len(keys)):
+                       point.update({keys[i]:values[i]})
+               data.append(point)
+               #data.append({"wavelength":values[0], "angle":values[1], "psi":values[2], "delta":values[3], "uncertainty_psi":values[4], "uncertainty_delta":values[4]})
+               line = dataFile.readline()
+
+       return {"title":title, "data":data}
+
+def extractData(line, x, y, conditions):
+       for condition in conditions:
+               [name, value] = condition.split("=")
+               if keys.count(name) <= 0:
+                       sys.stderr.write("Unknown key \""+name+"\" for condition " + str(condition) + "\n")
+                       sys.exit(1)
+               values = value.split(",")
+               match = False
+               for v in values:
+                       #sys.stdout.write(line[name] + " .vs. " + str(v) + "\n")
+                       if float(line[name]) == float(v):
+                               match = True
+                               break
+               if match == False:
+                       #sys.stdout.write("Condition \""+str(condition)+"\" not satisfied ("+str(line[name]) + " .vs. " + str(values[0])+ "\n")
+                       return None
+               #sys.stdout.write("Condition satisfied\n")
+       return [line[x], line[y]]
+
+
+if __name__ == "__main__":
+
+       
+
+       indexStart = 1
+       state = "--raw"
+       for arg in sys.argv:
+               if arg[0] == '-' and arg[1] == '-':
+                       indexStart += 1
+                       state = arg
+       #sys.stdout.write("State is " + state + "\n")
+                       
+
+       if len(sys.argv) - indexStart < 3: 
+               sys.stderr.write("Usage: " +sys.argv[0] + " [options] datafile x y [conditions] outfile\n")
+               sys.exit(1)
+
+       datafile = sys.argv[indexStart]
+       x = sys.argv[indexStart+1]
+       y = sys.argv[indexStart+2]
+
+       error = False
+       for k in [x,y]:
+               if keys.count(k) <= 0:
+                       sys.stderr.write("Unknown key \""+k+"\"\n")
+                       error = True
+       if error:
+               sys.exit(1)
+               
+               
+       conditions = sys.argv[indexStart+3:len(sys.argv)-1]
+       sys.stdout.write("Debug: Conditions are " + str(conditions) + "\n")
+       for condition in conditions:
+               sys.stdout.write("      Debug: Condition " + str(condition.split("=")) + "\n")  
+       outfile = sys.argv[len(sys.argv)-1]
+
+       results = getData(datafile)
+
+       
+       toPlot = map(lambda e : extractData(e, x,y,conditions) , results["data"])
+       toPlot = filter(lambda e : e != None and len(e) == 2, toPlot)
+
+       tmpFile = open(outfile+".tmp", "w")
+       for point in toPlot:
+               tmpFile.write(point[0] + "      " + point[1] + "\n")
+       tmpFile.close()
+
+       if state == "--plot":
+               command = ""
+               command += "set term png size 960,480\n"
+               command += "set output \"" + outfile + "\"\n"
+               command += "set xlabel \"" + x + "\"\n"
+               command += "set ylabel \"" + y + "\"\n"
+               command += "set title \"" + results["title"] + "\"\n"
+               command += "set key outside right\n"
+               command += "plot \"" + outfile + ".tmp\" using 1:2 with points title \""+str(conditions)+"\"\n"
+               command += "exit\n"
+
+               tmpFile = open(outfile+".tmp.plt", "w")
+               tmpFile.write(command)
+               tmpFile.close()
+
+               sys.stdout.write("Calling gnuplot now...\n")
+               #sys.stdout.write("------------------------------------\n")
+               os.system("gnuplot -p "+outfile+".tmp.plt") #2>/dev/null 1>/dev/null")
+               #sys.stdout.write("------------------------------------\n")
+               sys.stdout.write("gnuplot finished.\n")
+
+               os.remove(outfile+".tmp")
+               os.remove(outfile+".tmp.plt")
+               sys.stdout.write("Done!\n")
+       elif state == "--raw":
+               os.system("mv " + outfile+".tmp " + outfile)
+       sys.exit(0)
+       
+
+       
+       
+

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