X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=research%2FTCS%2Finterface.py;h=7553ab4dddc81319768f780a5031fb3491e05a12;hb=719c502e645607bc071ffbf41a455db899bef8a7;hp=19946edec603c553b29e439be23cd547510a77b5;hpb=2da1156b8c7e1030043e91cd64d45760993c26e4;p=matches%2Fhonours.git diff --git a/research/TCS/interface.py b/research/TCS/interface.py index 19946ede..7553ab4d 100755 --- a/research/TCS/interface.py +++ b/research/TCS/interface.py @@ -13,7 +13,10 @@ import serial import datetime import odict +import Gnuplot, Gnuplot.funcutils +import subprocess +gnuplot = Gnuplot.Gnuplot() # TODO: Insert variables for calibration purposes here. calibrate = { @@ -32,8 +35,8 @@ calibrate = { } # TODO: Adjust aqcuisition parameters here -aquire = { "DAC_Sweep" : "0.0 + 25.0*int(step/120)", # DAC Sweep value (t is in STEPS, not seconds!) - "ADC_Averages" : 200, +aquire = { "DAC_Sweep" : "0.0 + 1.0*int(step)", # DAC Sweep value (t is in STEPS, not seconds!) + "ADC_Averages" : 100, #"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 @@ -56,30 +59,34 @@ ser = serial.Serial( xonxoff=0, rtscts=0 ) - +#Using an ordered dictionary, so results will be determined (or prompted for) in this order. +# Put things that are being changed a lot near the top of the list. parameters = odict.odict([ - ("Accelerating Voltage" , None), - ("Focus Voltage" , None), + ("Chamber Pressure" , None), # Chamber pressure now automatically determined ("Deflection Voltage" , None), + ("Title" , None), + ("Comment" , None), + ("602 Scale" , None), ("Venault Voltage" , None), + ("Accelerating Voltage" , None), + ("Focus Voltage" , None), + ("Initial Voltage" , None), ("Heating Current" , None), - ("Heating Voltage" , None), - ("Chamber Pressure" , None), - ("610B Zero" , None), + ("Heating Voltage (across filament)" , None), + ("Heating Voltage (across power supply)", None), + #("610B Zero" , None), ("602 Zero" , None), - ("610B Scale" , None), - ("602 Scale" , None), + #("610B 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 Regulator" , None), ("Sample", None), ("Sample Angle", None), - ("Title" , None), - ("Comment" , None), + ("ADC Regulator" , None), ("Data" , None), ("Parameters last checked", None) ]) @@ -90,6 +97,18 @@ def getTime(): def getDate(): return str(datetime.datetime.now()).split(" ")[0] +def getPressure(): + + try: + p = subprocess.Popen("./pressure/get_pressure.sh", stdout=subprocess.PIPE) + #p = subprocess.Popen("./this_program_does_not_exist.sh", stdout=subprocess.PIPE) + #result = float("a") + result = float(p.stdout.readline().strip(" \r\n\t")) + except: + return 0.0 + return result + + # Used for when I press Control-C to stop things def set_exit_handler(func): if os.name == "nt": @@ -152,12 +171,15 @@ def init(): # pass #while (ser.readline().strip("\r\n ") != "#"): # pass - time.sleep(1.0) + #time.sleep(1.0) ser.write("a "+str(aquire["ADC_Averages"]) + "\r\n") - print(ser.readline().strip("\r\n")) - print(ser.readline().strip("\r\n")) - print(ser.readline().strip("\r\n")) + ser.readline().strip("\r\n") + ser.readline().strip("\r\n") + ser.readline().strip("\r\n") + #print(ser.readline().strip("\r\n")) + #print(ser.readline().strip("\r\n")) + #print(ser.readline().strip("\r\n")) #print("Writing config information to config.dat...") #output = log_open("config.dat", "w", 1) @@ -205,10 +227,23 @@ def main(): # Experiment # TODO: Modify data to record here sweep = 1 + #for i in range(0,1): while True: os.system("mkdir -p " + getDate()) - record_data([4, 5], getDate()+"/"+str(getTime())+".dat", None, 4000) + record_data([5], getDate()+"/"+str(getTime())+".dat", None, 4001) + + try: + pass + #os.system("echo \"Sweep number " + str(sweep) + " completed\" | festival --tts") + except: + pass sweep += 1 + #setDAC(500) + + try: + os.system("echo \"Experiment complete\" | festival --tts") + except: + pass def checkList(): @@ -226,10 +261,13 @@ def checkList(): value = k[1].strip("# \r\n") if (item in parameters): - parameters[item] = value + if item == "Chamber Pressure": + parameters[item] = getPressure() + else: + parameters[item] = value - print("Checklist found. Overwrite? [Y/n]") - response = sys.stdin.readline().strip(" \r\n") + #print("Checklist found. Overwrite? [Y/n]") + response = "" #sys.stdin.readline().strip(" \r\n") if (response == "" or response == "y" or response == "Y"): input_file = log_open(getDate()+"/checklist.old", "w") for item in parameters: @@ -242,8 +280,16 @@ def checkList(): for item in parameters: if item == "Parameters last checked": continue + if item == "Chamber Pressure": + #sys.stdout.write("\""+str(item)+"\" = " + str(parameters[item]) + " - get new pressure... ") + parameters[item] = getPressure() + #sys.stdout.write(str(parameters[item]) + "\n") + continue + sys.stdout.write("\""+str(item)+"\" = " + str(parameters[item]) + " New value?: ") response = sys.stdin.readline().strip("\r\n ") + if (response == "!"): + break if (response != ""): parameters[item] = response sys.stdout.write("\n") @@ -260,8 +306,11 @@ def checkList(): def record_data(ADC_channels, output, pollTime = None, dac_max = None): if (output != None): + gnuplot("set title \""+str(output)+"\"") output = [log_open(output, "w"), sys.stdout] + else: + gnuplot("set title \"\"") output = [sys.stdout] for field in aquire: @@ -271,6 +320,8 @@ def record_data(ADC_channels, output, pollTime = None, dac_max = None): for out in output: out.write("# Parameters:\n") + parameters["Chamber Pressure"] = getPressure() # Update chamber pressure + for field in parameters: for out in output: out.write("# "+str(field)+" = " + str(parameters[field]) + "\n") @@ -278,6 +329,10 @@ def record_data(ADC_channels, output, pollTime = None, dac_max = None): start_time = time.time() + gnuplot("set xlabel \"DAC (counts)\"") + gnuplot("set ylabel \"ADC (counts)\"") + + for out in output: out.write("\n") out.write("# Experiment " + str(datetime.datetime.now()) + "\n") @@ -290,9 +345,11 @@ def record_data(ADC_channels, output, pollTime = None, dac_max = None): out.write("\n") step = 0 + data = [] # Keep track of data for dynamic plotting dacValue = int(eval(aquire["DAC_Sweep"])) if (setDAC(dacValue) == False): setDAC(dacValue) + time.sleep(2.0) while (pollTime == None or time.time() < start_time + pollTime): if (aquire["DAC_Sweep"] != None): nextDacValue = int(eval(aquire["DAC_Sweep"])) @@ -324,13 +381,22 @@ def record_data(ADC_channels, output, pollTime = None, dac_max = None): end_time = time.time() for out in output: - out.write(str((measure_start + (end_time - measure_start)/2.0 - start_time))) + measure_time = measure_start + (end_time - measure_start)/2.0 - start_time + out.write(str(measure_time)) out.write("\t"+str(dacValue)) + data.append([measure_time, dacValue]) + for adc in raw_adc: out.write("\t" + str(adc[1]) + "\t" + str(adc[2])) + data[len(data)-1].append(adc[1]) + data[len(data)-1].append(adc[2]) out.write("\n") - + #gnuplot("set yrange [0:1023]") + #gnuplot("set xrange [0:4000]") + gnuplot("set xlabel \"DAC (counts)\"") + gnuplot("set ylabel \"Sample Current (ADC counts)\"") + gnuplot.plot(Gnuplot.Data(data, title="t = "+str(measure_time), with_="lp", using="2:3")) for out in output: if out != sys.stdout: log_close(out)