diff --git a/.gitignore b/.gitignore
index a819e33815ef5594cde4f4585d3266d75150fa5c..868139ac84a3c9d54009d39932c400f70aa6b886 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,5 @@ paver-minilib.zip
dist
setup.py
*.egg-info
+last_params
+last_params.yml
diff --git a/dstat_interface/dstat_comm.py b/dstat_interface/dstat_comm.py
old mode 100644
new mode 100755
index 4667581b3ea166bf63e754724b0786194055e894..0e8469b73f40ec0539de0da8e45b9f40c0a36cb1
--- a/dstat_interface/dstat_comm.py
+++ b/dstat_interface/dstat_comm.py
@@ -355,7 +355,7 @@ class Experiment(object):
self.__gaintable = [1e2, 3e2, 3e3, 3e4, 3e5, 3e6, 3e7, 5e8]
elif minor >= 2:
self.__gaintable = [1, 1e2, 3e3, 3e4, 3e5, 3e6, 3e7, 1e8]
- self.__gain_trim_table = [None, 'r100_trim', 'r3k_trim',
+ self.__gain_trim_table = ['r100_trim', 'r100_trim', 'r3k_trim',
'r30k_trim', 'r300k_trim', 'r3M_trim',
'r30M_trim', 'r100M_trim']
else:
@@ -366,8 +366,11 @@ class Experiment(object):
settings[self.__gain_trim_table[int(self.parameters['gain'])]][1])
self.commands = ["EA", "EG"]
-
- self.commands[0] += (self.parameters['adc_buffer'])
+
+ if self.parameters['buffer_true']:
+ self.commands[0] += "2"
+ else:
+ self.commands[0] += "0"
self.commands[0] += " "
self.commands[0] += (self.parameters['adc_rate'])
self.commands[0] += " "
@@ -375,7 +378,7 @@ class Experiment(object):
self.commands[0] += " "
self.commands[1] += (self.parameters['gain'])
self.commands[1] += " "
- self.commands[1] += (self.parameters['re_short'])
+ self.commands[1] += (str(int(self.parameters['short_true'])))
self.commands[1] += " "
def run(self, ser, ctrl_pipe, data_pipe):
@@ -610,10 +613,10 @@ class PDExp(Chronoamp):
self.datalength = 2
self.databytes = 8
self.xmin = 0
- self.xmax = self.parameters['time']
+ self.xmax = int(self.parameters['time'])
- if self.parameters['shutter']:
- if self.parameters['sync']:
+ if self.parameters['shutter_true']:
+ if self.parameters['sync_true']:
self.commands.append("EZ")
self.commands[-1] += str(self.parameters['sync_freq'])
self.commands[-1] += " "
@@ -630,14 +633,14 @@ class PDExp(Chronoamp):
self.commands[-1] += " "
self.commands[-1] += str(self.parameters['time'])
self.commands[-1] += " "
- if self.parameters['interlock']:
+ if self.parameters['interlock_true']:
self.commands[-1] += "1"
else:
self.commands[-1] += "0"
self.commands[-1] += " "
- if self.parameters['shutter']:
- if self.parameters['sync']:
+ if self.parameters['shutter_true']:
+ if self.parameters['sync_true']:
self.commands.append("Ez")
else:
self.commands.append("E1")
@@ -680,8 +683,8 @@ class LSVExp(Experiment):
self.data = [[], []]
self.datalength = 2
self.databytes = 6 # uint16 + int32
- self.xmin = self.parameters['start']
- self.xmax = self.parameters['stop']
+ self.xmin = int(self.parameters['start'])
+ self.xmax = int(self.parameters['stop'])
self.commands += "E"
self.commands[2] += "L"
@@ -689,10 +692,10 @@ class LSVExp(Experiment):
self.commands[2] += " "
self.commands[2] += str(self.parameters['dep_s'])
self.commands[2] += " "
- self.commands[2] += str(int(self.parameters['clean_mV']*
+ self.commands[2] += str(int(int(self.parameters['clean_mV'])*
(65536./3000)+32768))
self.commands[2] += " "
- self.commands[2] += str(int(self.parameters['dep_mV']*
+ self.commands[2] += str(int(int(self.parameters['dep_mV'])*
(65536./3000)+32768))
self.commands[2] += " "
self.commands[2] += str(self.parameters['start'])
@@ -713,8 +716,8 @@ class CVExp(Experiment):
self.data = [[], []]
self.datalength = 2 * self.parameters['scans'] # x and y for each scan
self.databytes = 6 # uint16 + int32
- self.xmin = self.parameters['v1']
- self.xmax = self.parameters['v2']
+ self.xmin = int(self.parameters['v1'])
+ self.xmax = int(self.parameters['v2'])
self.commands += "E"
self.commands[2] += "C"
@@ -722,10 +725,10 @@ class CVExp(Experiment):
self.commands[2] += " "
self.commands[2] += str(self.parameters['dep_s'])
self.commands[2] += " "
- self.commands[2] += str(int(self.parameters['clean_mV']*
+ self.commands[2] += str(int(int(self.parameters['clean_mV'])*
(65536./3000)+32768))
self.commands[2] += " "
- self.commands[2] += str(int(self.parameters['dep_mV']*
+ self.commands[2] += str(int(int(self.parameters['dep_mV'])*
(65536./3000)+32768))
self.commands[2] += " "
self.commands[2] += str(self.parameters['v1'])
@@ -751,8 +754,8 @@ class SWVExp(Experiment):
self.datalength = 2 * self.parameters['scans']
self.databytes = 10
- self.xmin = self.parameters['start']
- self.xmax = self.parameters['stop']
+ self.xmin = int(self.parameters['start'])
+ self.xmax = int(self.parameters['stop'])
self.data_extra = [[], []]
@@ -762,11 +765,11 @@ class SWVExp(Experiment):
self.commands[2] += " "
self.commands[2] += str(self.parameters['dep_s'])
self.commands[2] += " "
- self.commands[2] += str(int(self.parameters['clean_mV']*
- (65536./3000)+32768))
+ self.commands[2] += str(int(int(self.parameters['clean_mV'])*
+ (65536./3000)+32768))
self.commands[2] += " "
- self.commands[2] += str(int(self.parameters['dep_mV']*
- (65536./3000)+32768))
+ self.commands[2] += str(int(int(self.parameters['dep_mV'])*
+ (65536./3000)+32768))
self.commands[2] += " "
self.commands[2] += str(self.parameters['start'])
self.commands[2] += " "
@@ -808,8 +811,8 @@ class DPVExp(SWVExp):
self.datalength = 2
self.databytes = 10
- self.xmin = self.parameters['start']
- self.xmax = self.parameters['stop']
+ self.xmin = int(self.parameters['start'])
+ self.xmax = int(self.parameters['stop'])
self.data_extra = [[], []]
@@ -819,11 +822,11 @@ class DPVExp(SWVExp):
self.commands[2] += " "
self.commands[2] += str(self.parameters['dep_s'])
self.commands[2] += " "
- self.commands[2] += str(int(self.parameters['clean_mV']*
- (65536./3000)+32768))
+ self.commands[2] += str(int(int(self.parameters['clean_mV'])*
+ (65536./3000)+32768))
self.commands[2] += " "
- self.commands[2] += str(int(self.parameters['dep_mV']*
- (65536./3000)+32768))
+ self.commands[2] += str(int(int(self.parameters['dep_mV'])*
+ (65536./3000)+32768))
self.commands[2] += " "
self.commands[2] += str(self.parameters['start'])
self.commands[2] += " "
diff --git a/dstat_interface/interface/adc_pot.py b/dstat_interface/interface/adc_pot.py
old mode 100644
new mode 100755
index 6fdbd598d6b09238110150b51cff247779738241..0a0561680c5c4008a5d854ba8727da28c3994183
--- a/dstat_interface/interface/adc_pot.py
+++ b/dstat_interface/interface/adc_pot.py
@@ -20,6 +20,9 @@
import gtk
+from errors import InputError, VarError, ErrorLogger
+_logger = ErrorLogger(sender="dstat_adc_pot")
+
v1_1_gain = [(0, "100 Ω (15 mA FS)", 0),
(1, "300 Ω (5 mA FS)", 1),
(2, "3 kΩ (500 µA FS)", 2),
@@ -37,34 +40,98 @@ v1_2_gain = [(0, "Bypass", 0),
(5, "3 MΩ (500 nA FS)", 5),
(6, "30 MΩ (50 nA FS)", 6),
(7, "100 MΩ (15 nA FS)", 7)]
+
-class adc_pot:
+class adc_pot(object):
def __init__(self):
self.builder = gtk.Builder()
self.builder.add_from_file('interface/adc_pot.glade')
self.builder.connect_signals(self)
self.cell = gtk.CellRendererText()
- self.buffer_toggle = self.builder.get_object('buffer_checkbutton')
- self.short_toggle = self.builder.get_object('short_checkbutton')
-
+ ui_keys = ['buffer_true',
+ 'short_true',
+ 'pga_index',
+ 'srate_index',
+ 'gain_index'
+ ]
+ ui_cont = map(self.builder.get_object, ['buffer_checkbutton',
+ 'short_checkbutton',
+ 'pga_combobox',
+ 'srate_combobox',
+ 'gain_combobox'
+ ]
+ )
+ self.ui = dict(zip(ui_keys, ui_cont))
+
#initialize comboboxes
- self.pga_combobox = self.builder.get_object('pga_combobox')
- self.pga_combobox.pack_start(self.cell, True)
- self.pga_combobox.add_attribute(self.cell, 'text', 1)
- self.pga_combobox.set_active(1)
+ self.ui['pga_index'].pack_start(self.cell, True)
+ self.ui['pga_index'].add_attribute(self.cell, 'text', 1)
+ self.ui['pga_index'].set_active(1)
- self.srate_combobox = self.builder.get_object('srate_combobox')
- self.srate_combobox.pack_start(self.cell, True)
- self.srate_combobox.add_attribute(self.cell, 'text', 1)
- self.srate_combobox.set_active(7)
+ self.ui['srate_index'].pack_start(self.cell, True)
+ self.ui['srate_index'].add_attribute(self.cell, 'text', 1)
+ self.ui['srate_index'].set_active(7)
- self.gain_combobox = self.builder.get_object('gain_combobox')
self.gain_liststore = self.builder.get_object('gain_liststore')
- self.gain_combobox.pack_start(self.cell, True)
- self.gain_combobox.add_attribute(self.cell, 'text', 1)
- self.gain_combobox.set_active(2)
+ self.ui['gain_index'].pack_start(self.cell, True)
+ self.ui['gain_index'].add_attribute(self.cell, 'text', 1)
+ self.ui['gain_index'].set_active(2)
+
+ self._params = {}
+
+ @property
+ def params(self):
+ """Dict of parameters."""
+ try:
+ self._get_params()
+ except InputError as e:
+ raise e
+ finally:
+ return self._params
+
+ def _get_params(self):
+ """Updates self._params from UI."""
+ for i in self.ui:
+ self._params[i] = self.ui[i].get_active()
+
+ srate_model = self.ui['srate_index'].get_model()
+ self._params['adc_rate'] = srate_model[self._params['srate_index']][2]
+ srate = srate_model[self._params['srate_index']][1]
+
+ if srate.endswith("kHz"):
+ sample_rate = float(srate.rstrip(" kHz"))*1000
+ else:
+ sample_rate = float(srate.rstrip(" Hz"))
+ self._params['adc_rate_hz'] = sample_rate
+
+ pga_model = self.ui['srate_index'].get_model()
+ self._params['adc_pga'] = pga_model[self._params['pga_index']][2]
+
+ gain_model = self.ui['gain_index'].get_model()
+ self._params['gain'] = gain_model[self._params['gain_index']][2]
+ if self._params['gain_index'] not in range(len(gain_model)):
+ raise InputError(self._params['gain_index'],
+ "Select a potentiostat gain.")
+
+ @params.setter
+ def params(self, params):
+ if self._params is {}:
+ self._params = dict.fromkeys(self.ui.keys())
+
+ for i in self._params:
+ try:
+ self._params[i] = params[i]
+ except KeyError as e:
+ _logger.error("Invalid parameter key: %s" % e, "WAR")
+ self._set_params()
+
+ def _set_params(self):
+ """Updates UI with new parameters."""
+ for i in self.ui:
+ self.ui[i].set_active(self._params[i])
+
def set_version(self, version):
""" Sets menus for DStat version. """
self.gain_liststore.clear()
@@ -75,4 +142,5 @@ class adc_pot:
elif version[1] >= 2:
for i in v1_2_gain:
self.gain_liststore.append(i)
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/dstat_interface/interface/dstatinterface.glade b/dstat_interface/interface/dstatinterface.glade
index 62df9c0df9852d8742b1f5dbb3432243d016c357..dc598cee90b4821b36b2cde4b743378830c713c6 100644
--- a/dstat_interface/interface/dstatinterface.glade
+++ b/dstat_interface/interface/dstatinterface.glade
@@ -734,6 +734,16 @@ Thanks to Christian Fobel for help with Dropbot Plugin
False
gtk-save
+
+
+
+
+
+
+
+