diff --git a/dstat-interface/dstat_comm.py b/dstat-interface/dstat_comm.py index 9e7abf1022bb231e2abff7a6a73dfa70e1267c6e..fab46b668b728a22e8a735cba4989b830960df3f 100644 --- a/dstat-interface/dstat_comm.py +++ b/dstat-interface/dstat_comm.py @@ -253,6 +253,28 @@ class Chronoamp(Experiment): return (scan, [seconds+milliseconds/1000., current*(1.5/self.gain/8388607)]) +class PDExp(Chronoamp): + """Photodiode/PMT experiment""" + def __init__(self, parameters, main_pipe): + super(Chronoamp, self).__init__(parameters, main_pipe) # Don't want to call CA's init + + self.datatype = "linearData" + self.xlabel = "Time (s)" + self.ylabel = "Current (A)" + self.data = [[], []] + self.datalength = 2 + self.databytes = 8 + self.xmin = 0 + self.xmax = self.parameters['time'] + + self.commands += "R" + self.commands[2] += "1" + self.commands[2] += " " + self.commands[2] += str(int(65536-self.parameters['voltage']*(65536./3000))) + self.commands[2] += " " + self.commands[2] += str(self.parameters['time']) + self.commands[2] += " " + class PotExp(Experiment): """Potentiometry experiment""" def __init__(self, parameters, main_pipe): diff --git a/dstat-interface/interface/exp_int.py b/dstat-interface/interface/exp_int.py index 2e67a1ee6c9d3bed9272ce06b78d5ee4c9d97963..7b75ee6a2195c76bed70327c3c40621adc53eee6 100644 --- a/dstat-interface/interface/exp_int.py +++ b/dstat-interface/interface/exp_int.py @@ -200,9 +200,17 @@ class PD(ExpInterface): """Adds entry listings to superclass's self.entry dict""" super(PD, self).__init__('interface/pd.glade') - self.entry['voltage'] = self.builder.get_object('voltage_entry') + self.entry['voltage'] = self.builder.get_object('voltage_adjustment') self.entry['time'] = self.builder.get_object('time_entry') + def get_params(self): + """Returns a dict of parameters for experiment.""" + parameters = {} + parameters['voltage'] = int(self.entry['voltage'].get_value()) + parameters['time'] = int(self.entry['time'].get_text()) + + return parameters + class POT(ExpInterface): """Experiment class for Potentiometry.""" def __init__(self): diff --git a/dstat-interface/interface/pd.glade b/dstat-interface/interface/pd.glade index a9e34be9cf87887bf799313f66c17c33d7967b26..5e87db990c80a655d1f07b792fb62816518918ef 100644 --- a/dstat-interface/interface/pd.glade +++ b/dstat-interface/interface/pd.glade @@ -2,6 +2,11 @@ + + 3000 + 1 + 10 + False @@ -26,28 +31,6 @@ 2 2 True - - - True - True - - 8 - 0 - 1 - True - False - False - True - True - - - 1 - 2 - - GTK_FILL - 3 - - True @@ -94,6 +77,21 @@ GTK_FILL + + + True + True + voltage_adjustment + False + 100 + 1 + 0 + + + 1 + 2 + + False @@ -107,7 +105,6 @@ False 20 20 - Experiment not yet implemented @@ -118,6 +115,9 @@ 1 + + + diff --git a/dstat-interface/main.py b/dstat-interface/main.py index 49aa8e79eb58cf973dc07a10fae6bba1663b4560..0bf67c7855d8db993c6f924466e42bd4ac608f92 100755 --- a/dstat-interface/main.py +++ b/dstat-interface/main.py @@ -503,6 +503,34 @@ class Main(object): self.experiment_running_plot) gobject.idle_add(self.experiment_running) return + + elif selection == 6: # PD + parameters.update(self.exp_window.get_params('pde')) + + if (parameters['time'] <= 0): + raise InputError(parameters['clean_s'], + "Time must be greater than zero.") + if (parameters['time'] > 65535): + raise InputError(parameters['clean_s'], + "Time must fit in 16-bit counter.") + + self.recv_p, self.send_p = multiprocessing.Pipe(duplex=True) + self.current_exp = comm.PDExp(parameters, self.send_p) + + self.plot.clearall() + self.plot.changetype(self.current_exp) + + self.current_exp.run_wrapper( + self.serial_liststore.get_value( + self.serial_combobox.get_active_iter(), 0)) + + self.send_p.close() + + self.plot_proc = gobject.timeout_add(200, + self.experiment_running_plot) + gobject.idle_add(self.experiment_running) + return + elif selection == 7: # POT if not (self.version[0] >= 1 and self.version[1] >= 2): self.statusbar.push(self.error_context_id, @@ -535,6 +563,7 @@ class Main(object): self.experiment_running_plot) gobject.idle_add(self.experiment_running) return + else: self.statusbar.push(self.error_context_id, "Experiment not yet implemented.")