Automatic commit. Thu Aug 9 10:00:04 WST 2012
[matches/honours.git] / research / TCS / interface.py
index d5510fc..86c5e82 100755 (executable)
@@ -12,6 +12,7 @@ import time
 import serial
 import datetime
 
+import collections
 
 
 # TODO: Insert variables for calibration purposes here.
@@ -31,14 +32,15 @@ calibrate = {
 }
 
 # TODO: Adjust aqcuisition parameters here
-aquire = { "DAC_Sweep" : "2200.0 - 50.0*int(step/1000)", # DAC Sweep value (t is in STEPS, not seconds!)
+aquire = { "DAC_Sweep" : "0.0 + 50.0*int(step/60)", # DAC Sweep value (t is in STEPS, not seconds!)
        "ADC_Averages" : 200,
        "ADC_Vi" : 5, # ADC channel to read back Vi (set by DAC) through
        "ADC_Is" : 4, # ADC channel to read back Is through
        "ADC_Ie" : 4, # ADC channel to read back Ie through
        "DAC_Settle" : 0.0, # Time in seconds to wait for DAC to stabilise
        #"response_wait" : 0.2, # Time to wait in seconds between sending data and reading back
-       "start_date" : None
+       "start_date" : None,
+       "open_files" : []
 }
 
 #Setup the serial connection parameters
@@ -55,21 +57,30 @@ ser = serial.Serial(
        rtscts=0
 )
 
-parameters = {
-       "Accelerating Voltage" : None,
-       "Focus Voltage" : None,
-       "Deflection Voltage" : None,
-       "Venault Voltage" : None,
-       "Initial Voltage" : None,
-       "Heating Current" : None,
-       "Heating Voltage" : None,
-       "Chamber Pressure" : None,
-       "602 0.1 Battery" : None,
-       "602 0.03 Battery" : None,
-       "602 0.01 Battery" : None,
-       "602 0.003 Battery" : None,
-       "602 0.001 Battery" : None
-}
+parameters = OrderedDict([
+       ("Accelerating Voltage" , None),
+       ("Focus Voltage" , None),
+       ("Deflection Voltage" , None),
+       ("Venault Voltage" , None),
+       ("Initial Voltage" , None),
+       ("Heating Current" , None),
+       ("Heating Voltage" , None),
+       ("Chamber Pressure" , None),
+       ("610B Zero" , None),
+       ("602 Zero" , None),
+       ("610B Scale" , None),
+       ("602 Scale" , None),
+       ("602 0.1 Battery" , None),
+       ("602 0.03 Battery" , None),
+       ("602 0.01 Battery" , None),
+       ("602 0.003 Battery" , None),
+       ("602 0.001 Battery" , None), 
+       ("ADC Battery" , None),
+       ("ADC Regulator" , None),
+       ("Title" , None),
+       ("Comment" , None),
+       ("Data" , None),
+])
 
 def getTime():
        return str(datetime.datetime.now()).split(" ")[1].split(".")[0].replace(":","")
@@ -77,6 +88,22 @@ def getTime():
 def getDate():
        return str(datetime.datetime.now()).split(" ")[0]
 
+# Used for when I press Control-C to stop things
+def set_exit_handler(func):
+    if os.name == "nt":
+        try:
+            import win32api
+            win32api.SetConsoleCtrlHandler(func, True)
+        except ImportError:
+            version = “.”.join(map(str, sys.version_info[:2]))
+            raise Exception(”pywin32 not installed for Python ” + version)
+    else:
+        import signal
+        signal.signal(signal.SIGTERM, func)
+
+def exit_handler():
+       
+
 def init():
 
        
@@ -104,9 +131,9 @@ def init():
 
        output.write("# Initialise " + str(datetime.datetime.now()) + "\n")
 
-       for field in calibrate:
-               output.write("# calibrate["+str(field)+"] = "+str(calibrate[field]) + "\n")
-       output.write("\n")
+       #for field in calibrate:
+       #       output.write("# calibrate["+str(field)+"] = "+str(calibrate[field]) + "\n")
+       #output.write("\n")
        for field in aquire:
                output.write("# aquire["+str(field)+"] = "+str(aquire[field]) + "\n")
 
@@ -117,65 +144,102 @@ def main():
 
        init()
        
-       if (loadCalibration_DAC() == False):
-               if (calibrateDAC() == False):
-                       return -1
-       if (loadCalibration_ADC(aquire["ADC_Is"]) == False):
-               if (calibrateADC_usingDAC(aquire["ADC_Is"], False) == False):
-                       if (calibrateADC(aquire["ADC_Is"]) == False):
-                               return -1
-
-       if (loadCalibration_ADC(aquire["ADC_Vi"]) == False):
-               if (calibrateADC_usingDAC(aquire["ADC_Vi"], True) == False):
-                       if (calibrateADC(aquire["ADC_Vi"]) == False):
-                               return -1
+       # I haven't ever used calibrated results, and yet this code is still here, why???
+       #if (loadCalibration_DAC() == False):
+       #       if (calibrateDAC() == False):
+       #               return -1
+       #if (loadCalibration_ADC(aquire["ADC_Is"]) == False):
+       #       if (calibrateADC_usingDAC(aquire["ADC_Is"], False) == False):
+       #               if (calibrateADC(aquire["ADC_Is"]) == False):
+       #                       return -1
+
+       #if (loadCalibration_ADC(aquire["ADC_Vi"]) == False):
+       #       if (calibrateADC_usingDAC(aquire["ADC_Vi"], True) == False):
+       #               if (calibrateADC(aquire["ADC_Vi"]) == False):
+       #                       return -1
        
 
        # Make directory for today, backup calibration files
        os.system("mkdir -p " + getDate())
-       os.system("cp *.dat " + getDate() +"/")
+       #os.system("cp *.dat " + getDate() +"/")
 
-       #checkList()
+       checkList()
 
        
        
+               
 
        # Experiment
        # TODO: Modify data to record here
        sweep = 1
-       #record_data([4, 5], getDate()+"/"+str(getTime())+".dat", None, None, "Measure emission&sample current varying with time, constant initial energy.")
        while True:
                os.system("mkdir -p " + getDate())
-               record_data([4, 5], getDate()+"/"+str(getTime())+".dat", None, 2300, "Measure Ie and Is .Sweep DOWN " + str(sweep) + " (started on " + aquire["start_date"]+")")
+               record_data([4, 5], getDate()+"/"+str(getTime())+".dat", None, 4000)
                sweep += 1
        
 
-def checkList():
+def checkList(output_file):
+       try:
+               input_file = open(getDate()+"/checklist", "r")
+       except:
+               input_file = None
+
+       if (input_file != None):
+               for line in input_file:
+                       k = line.split("=")
+                       item = k[0].strip(" \r\n")
+                       value = k[1].strip(" \r\n")
+                       if (item in parameters):
+                               parameters[item] = value
+       
+               print("Checklist found. Overwrite? [Y/n]")
+               response = sys.stdin.readline().strip(" \r\n")
+               if (response == "" or response == "y" or response == "Y"):
+                       input_file = None
        
-       output = open(getDate()+"/checklist", "w", 0)
+       if (input_file == None):
+               for item in parameters:
+                       sys.stdout.write("\""+str(item)+"\" = " + str(parameters[item]) + " New value?: ")
+                       response = sys.stdin.readline().strip("\r\n ")
+                       if (response != ""):
+                               parameters[item] = response
+                       sys.stdout.write("\n")
+                       
+
+       checklist = open(getDate()+"/checklist", "w", 0)
        for item in parameters:
-               sys.stdout.write("Enter value for \""+str(item)+"\": ")
-               parameters[item] = sys.stdin.readline().strip("\r\n ")
-               sys.stdout.write("\n")
-               output.write(str(parameters[item]) + "\n")
+               checklist.write("# "+str(item) + " = " + str(parameters[item]) + "\n")
+               output_file.write("# "+str(item) + " = " + str(parameters[item]) + "\n")
+
 
 
-def record_data(ADC_channels, output, pollTime = None, dac_max = None, comment = None):
+def record_data(ADC_channels, output, pollTime = None, dac_max = None):
+       
        if (output != None):
                output = [open(output, "w", 0), sys.stdout]
-               if (comment == None):
-                       print("Enter a comment for the experiment.")
-                       comment = sys.stdin.readline().strip("\r\n ")
-               output[0].write("# Comment: "+str(comment)+"\n")
+               checkList(output[0])
        else:
                output = [sys.stdout]
 
+       for field in aquire:
+               for out in output:
+                       out.write("# aquire["+str(field)+"] = "+str(aquire[field]) + "\n")
+       
+       for out in output:
+               out.write("# Checklist:\n")
+
+       for field in checklist:
+               for out in output:
+                       out.write("# "+str(field)+" = " + str(checklist[field]) + "\n")
+
+
        start_time = time.time()
        
        for out in output:
+               out.write("\n")
                out.write("# Experiment " + str(datetime.datetime.now()) + "\n")
                out.write("# Polling for " + str(pollTime) + "s.\n")
-               out.write("# DAC = " + str(aquire["DAC_Sweep"]) + "\n")
+               out.write("\n")
                out.write("# Data:\n")
                out.write("# time\tDAC")
                for channel in ADC_channels:

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