From 5a17aade109e4539d3476647fc4d92eda10ee58e Mon Sep 17 00:00:00 2001 From: "Michael D. M. Dryden" <mdryden@chem.utoronto.ca> Date: Fri, 20 Nov 2015 12:01:07 -0500 Subject: [PATCH] Add current offset trimming. --- dstat-interface/dstat_comm.py | 20 +++++-- .../interface/dstatinterface.glade | 5 ++ dstat-interface/interface/exp_int.py | 54 ++++++++++++++++++- dstat-interface/interface/exp_window.py | 1 + 4 files changed, 74 insertions(+), 6 deletions(-) diff --git a/dstat-interface/dstat_comm.py b/dstat-interface/dstat_comm.py index 2b83bd9..e4fc8f6 100644 --- a/dstat-interface/dstat_comm.py +++ b/dstat-interface/dstat_comm.py @@ -207,10 +207,15 @@ 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', + 'r30k_trim', 'r300k_trim', 'r3M_trim', + 'r30M_trim', 'r100M_trim'] else: raise VarError(parameters['version'], "Invalid version parameter.") self.gain = self.__gaintable[int(self.parameters['gain'])] + self.gain_trim = int( + settings[self.__gain_trim_table[int(self.parameters['gain'])]][1]) self.commands = ["EA", "EG"] @@ -299,7 +304,8 @@ class Experiment(object): scan, data = data_input voltage, current = struct.unpack('<Hl', data) #uint16 + int32 return (scan, - [(voltage-32768)*3000./65536, current*(1.5/self.gain/8388607)]) + [(voltage-32768)*3000./65536, + (current+self.gain_trim)*(1.5/self.gain/8388607)]) def data_postprocessing(self): """No data postprocessing done by default, can be overridden @@ -342,7 +348,8 @@ class Chronoamp(Experiment): # 2*uint16 + int32 seconds, milliseconds, current = struct.unpack('<HHl', data) return (scan, - [seconds+milliseconds/1000., current*(1.5/self.gain/8388607)]) + [seconds+milliseconds/1000., + (current+self.gain_trim)*(1.5/self.gain/8388607)]) class PDExp(Chronoamp): """Photodiode/PMT experiment""" @@ -521,10 +528,13 @@ class SWVExp(Experiment): scan, data = input_data # uint16 + int32 voltage, forward, reverse = struct.unpack('<Hll', data) + f_trim = forward+self.gain_trim + r_trim = reverse+self.gain_trim + return (scan, [(voltage-32768)*3000./65536, - (forward-reverse)*(1.5/self.gain/8388607), - forward*(1.5/self.gain/8388607), - reverse*(1.5/self.gain/8388607)]) + (f_trim-r_trim)*(1.5/self.gain/8388607), + f_trim*(1.5/self.gain/8388607), + r_trim*(1.5/self.gain/8388607)]) class DPVExp(SWVExp): diff --git a/dstat-interface/interface/dstatinterface.glade b/dstat-interface/interface/dstatinterface.glade index e3cb0d6..9a3b47c 100644 --- a/dstat-interface/interface/dstatinterface.glade +++ b/dstat-interface/interface/dstatinterface.glade @@ -52,6 +52,11 @@ <col id="1" translatable="yes">pot</col> <col id="2" translatable="yes">Potentiometry</col> </row> + <row> + <col id="0">8</col> + <col id="1" translatable="yes">cal</col> + <col id="2" translatable="yes">Offset Calibration</col> + </row> </data> </object> <object class="GtkAboutDialog" id="aboutdialog1"> diff --git a/dstat-interface/interface/exp_int.py b/dstat-interface/interface/exp_int.py index 0450462..b6410b2 100644 --- a/dstat-interface/interface/exp_int.py +++ b/dstat-interface/interface/exp_int.py @@ -244,4 +244,56 @@ class POT(ExpInterface): """Adds entry listings to superclass's self.entry dict""" super(POT, self).__init__('interface/potexp.glade') - self.entry['time'] = self.builder.get_object('time_entry') \ No newline at end of file + self.entry['time'] = self.builder.get_object('time_entry') + +class CAL(ExpInterface): + """Experiment class for Calibrating gain.""" + def __init__(self): + """Adds entry listings to superclass's self.entry dict""" + super(CAL, self).__init__('interface/calib.glade') + + self.entry['time'] = self.builder.get_object('time_entry') + self.entry['R100'] = self.builder.get_object('100_entry') + self.entry['R3k'] = self.builder.get_object('3k_entry') + self.entry['R30k'] = self.builder.get_object('30k_entry') + self.entry['R300k'] = self.builder.get_object('300k_entry') + self.entry['R3M'] = self.builder.get_object('3M_entry') + self.entry['R30M'] = self.builder.get_object('30M_entry') + self.entry['R100M'] = self.builder.get_object('100M_entry') + + def on_read_button_clicked(self, data=None): + __main__.MAIN.on_pot_stop_clicked() + + gobject.source_remove(__main__.MAIN.ocp_proc) + dstat_comm.read_settings() + self.entry['R100'].set_text(str( + dstat_comm.settings['r100_trim'][1])) + self.entry['R3k'].set_text(str( + dstat_comm.settings['r3k_trim'][1])) + self.entry['R30k'].set_text(str( + dstat_comm.settings['r30k_trim'][1])) + self.entry['R300k'].set_text(str( + dstat_comm.settings['r300k_trim'][1])) + self.entry['R3M'].set_text(str( + dstat_comm.settings['r3M_trim'][1])) + self.entry['R30M'].set_text(str( + dstat_comm.settings['r30M_trim'][1])) + self.entry['R100M'].set_text(str( + dstat_comm.settings['r100M_trim'][1])) + + __main__.MAIN.start_ocp() + + def on_write_button_clicked(self, data=None): + __main__.MAIN.on_pot_stop_clicked() + gobject.source_remove(__main__.MAIN.ocp_proc) + + dstat_comm.settings['r100_trim'][1] = self.entry['R100'].get_text() + dstat_comm.settings['r3k_trim'][1] = self.entry['R3k'].get_text() + dstat_comm.settings['r30k_trim'][1] = self.entry['R30k'].get_text() + dstat_comm.settings['r300k_trim'][1] = self.entry['R300k'].get_text() + dstat_comm.settings['r3M_trim'][1] = self.entry['R3M'].get_text() + dstat_comm.settings['r30M_trim'][1] = self.entry['R30M'].get_text() + dstat_comm.settings['r100M_trim'][1] = self.entry['R100M'].get_text() + dstat_comm.write_settings() + + __main__.MAIN.start_ocp() \ No newline at end of file diff --git a/dstat-interface/interface/exp_window.py b/dstat-interface/interface/exp_window.py index f5bf561..0aebdb5 100644 --- a/dstat-interface/interface/exp_window.py +++ b/dstat-interface/interface/exp_window.py @@ -32,6 +32,7 @@ class Experiments: self.classes['acv'] = exp.ACV() self.classes['pde'] = exp.PD() self.classes['pot'] = exp.POT() + self.classes['cal'] = exp.CAL() #fill exp_section exp_section = self.builder.get_object('exp_section_box') -- GitLab