import serial
import datetime
+import collections
# TODO: Insert variables for calibration purposes here.
}
# TODO: Adjust aqcuisition parameters here
-aquire = { "DAC_Sweep" : "0.0",#"0.0 + 250.0*int(step/200)", # 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
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(":","")
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():
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")
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, "ADC4 = Is; ADC5 = Va, manually change initial energy" + 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: