Skip to content
Snippets Groups Projects
Commit 5413c106 authored by Michael DM Dryden's avatar Michael DM Dryden
Browse files

Implemented LSV and global dstat/ADC settings. Separated interfaces into...

Implemented LSV and global dstat/ADC settings. Separated interfaces into different files. Experiment outputs appropriate instrument commands.
parent 72d32a91
Branches
Tags
No related merge requests found
Showing
with 1604 additions and 411 deletions
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkListStore" id="ExpComboListStore">
<columns>
<!-- column-name index -->
<column type="guint"/>
<!-- column-name name -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0">0</col>
<col id="1" translatable="yes">Chronoamperometry</col>
</row>
<row>
<col id="0">1</col>
<col id="1" translatable="yes">Linear Sweep Voltammetry</col>
</row>
<row>
<col id="0">2</col>
<col id="1" translatable="yes">Cyclic Voltammetry</col>
</row>
<row>
<col id="0">3</col>
<col id="1" translatable="yes">Square Wave Voltammetry</col>
</row>
<row>
<col id="0">4</col>
<col id="1" translatable="yes">AC Voltammetry</col>
</row>
<row>
<col id="0">5</col>
<col id="1" translatable="yes">Photodiode</col>
</row>
</data>
</object>
<object class="GtkAboutDialog" id="aboutdialog1">
<property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="type_hint">dialog</property>
<property name="program_name">Dstat Interface</property>
<property name="version">0.1</property>
<property name="copyright" translatable="yes">© Michael Dryden 2014</property>
<property name="license" translatable="yes">GNU</property>
<property name="authors">Michael Dryden</property>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
<child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="layout_style">end</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<object class="GtkTextBuffer" id="databuffer1"/>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="yalign">0.47999998927116394</property>
<property name="stock">gtk-missing-image</property>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes">Main</property>
<property name="default_width">800</property>
<property name="default_height">500</property>
<signal name="destroy" handler="on_window1_destroy" swapped="no"/>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuBar" id="menubar1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="menuitem1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_File</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menu1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="gtk_new">
<property name="label">gtk-new</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_gtk_new_activate" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="gtk-open">
<property name="label">gtk-open</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="gtk-save">
<property name="label">gtk-save</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="gtk-save-as">
<property name="label">gtk-save-as</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="gtk_quit">
<property name="label">gtk-quit</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_gtk_quit_activate" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="menuitem2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Edit</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menu2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="imagemenuitem7">
<property name="label">gtk-copy</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="imagemenuitem8">
<property name="label">gtk-paste</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="gtk_view">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_View</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menu5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="push_status">
<property name="label">Push Status</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_push_status_activate" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="pop_status">
<property name="label">Pop Status</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_pop_status_activate" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="clear_status">
<property name="label">Clear Status</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_clear_status_activate" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="menuitem4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Help</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menu3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="gtk_about">
<property name="label">gtk-about</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_gtk_about_activate" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHPaned" id="hpaned1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Experiment</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="padding">10</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="expcombobox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">ExpComboListStore</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">never</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="resize">False</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<object class="GtkNotebook" id="notebook1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
</child>
<child type="tab">
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">page 1</property>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkTextView" id="datatextview1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">False</property>
<property name="buffer">databuffer1</property>
</object>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">page 2</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child type="tab">
<placeholder/>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkStatusbar" id="statusbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
......@@ -7,8 +7,10 @@
objects = {
/* Begin PBXFileReference section */
5FAED9CD1900FBDA00A9DDD4 /* dstatInterface.glade */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = dstatInterface.glade; sourceTree = "<group>"; };
5FAED9CE1900FE6B00A9DDD4 /* test2.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = test2.py; sourceTree = "<group>"; };
5FCB541B190591CD00CEB148 /* interface */ = {isa = PBXFileReference; lastKnownFileType = folder; path = interface; sourceTree = "<group>"; };
5FCB541D1905923800CEB148 /* interface_test.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = interface_test.py; sourceTree = "<group>"; };
5FCB54231905B6EE00CEB148 /* dstat_comm.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = dstat_comm.py; sourceTree = "<group>"; };
5FDC0DFD18FDAD79003F857A /* main.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = main.py; sourceTree = "<group>"; };
5FDC1E4218FF9572007AD04D /* glade1.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = glade1.py; sourceTree = "<group>"; };
5FDC1E4318FF9A95007AD04D /* test1.glade */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = test1.glade; sourceTree = "<group>"; };
......@@ -18,8 +20,10 @@
5FDC0DF218FDACDA003F857A = {
isa = PBXGroup;
children = (
5FCB541D1905923800CEB148 /* interface_test.py */,
5FCB54231905B6EE00CEB148 /* dstat_comm.py */,
5FCB541B190591CD00CEB148 /* interface */,
5FAED9CE1900FE6B00A9DDD4 /* test2.py */,
5FAED9CD1900FBDA00A9DDD4 /* dstatInterface.glade */,
5FDC1E4318FF9A95007AD04D /* test1.glade */,
5FDC0DFD18FDAD79003F857A /* main.py */,
5FDC1E4218FF9572007AD04D /* glade1.py */,
......
#!/usr/bin/env python
def lsv_exp(adc_buffer, adc_rate, adc_pga, gain, start, stop, slope):
s = "L "
s += (adc_buffer)
s += " "
s += (adc_rate)
s += " "
s += (adc_pga)
s += " "
s += (gain)
s += " "
s += str(start)
s += " "
s += str(stop)
s += " "
s += str(slope)
print s
# print ("L ", adc_buffer, adc_rate, adc_pga, gain, start, stop, slope)
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkListStore" id="gain_liststore">
<columns>
<!-- column-name index -->
<column type="guint"/>
<!-- column-name label -->
<column type="gchararray"/>
<!-- column-name command -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0">0</col>
<col id="1" translatable="yes">100 Ω (15 mA FS)</col>
<col id="2" translatable="yes">0</col>
</row>
<row>
<col id="0">1</col>
<col id="1" translatable="yes">300 Ω (5 mA FS)</col>
<col id="2" translatable="yes">1</col>
</row>
<row>
<col id="0">2</col>
<col id="1" translatable="yes">3 kΩ (500 µA FS)</col>
<col id="2" translatable="yes">2</col>
</row>
<row>
<col id="0">3</col>
<col id="1" translatable="yes">30 kΩ (50 µA FS)</col>
<col id="2" translatable="yes">3</col>
</row>
<row>
<col id="0">4</col>
<col id="1" translatable="yes">300 kΩ (5 µA FS)</col>
<col id="2" translatable="yes">4</col>
</row>
<row>
<col id="0">5</col>
<col id="1" translatable="yes">3 MΩ (500 nA FS)</col>
<col id="2" translatable="yes">5</col>
</row>
<row>
<col id="0">6</col>
<col id="1" translatable="yes">30 MΩ (50 nA FS)</col>
<col id="2" translatable="yes">6</col>
</row>
<row>
<col id="0">7</col>
<col id="1" translatable="yes">500 MΩ (3 nA FS)</col>
<col id="2" translatable="yes">7</col>
</row>
</data>
</object>
<object class="GtkListStore" id="pga_liststore">
<columns>
<!-- column-name index -->
<column type="guint"/>
<!-- column-name label -->
<column type="gchararray"/>
<!-- column-name command -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0">0</col>
<col id="1" translatable="yes">1x</col>
<col id="2" translatable="yes">0x0</col>
</row>
<row>
<col id="0">1</col>
<col id="1" translatable="yes">2x</col>
<col id="2" translatable="yes">0x1</col>
</row>
<row>
<col id="0">2</col>
<col id="1" translatable="yes">4x</col>
<col id="2" translatable="yes">0x2</col>
</row>
<row>
<col id="0">3</col>
<col id="1" translatable="yes">8x</col>
<col id="2" translatable="yes">0x3</col>
</row>
<row>
<col id="0">4</col>
<col id="1" translatable="yes">16x</col>
<col id="2" translatable="yes">0x4</col>
</row>
<row>
<col id="0">5</col>
<col id="1" translatable="yes">32x</col>
<col id="2" translatable="yes">0x5</col>
</row>
<row>
<col id="0">6</col>
<col id="1" translatable="yes">64x</col>
<col id="2" translatable="yes">0x6</col>
</row>
</data>
</object>
<object class="GtkListStore" id="srate_liststore">
<columns>
<!-- column-name index -->
<column type="guint"/>
<!-- column-name label -->
<column type="gchararray"/>
<!-- column-name command -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0">0</col>
<col id="1" translatable="yes">2.5 Hz</col>
<col id="2" translatable="yes">0x03</col>
</row>
<row>
<col id="0">1</col>
<col id="1" translatable="yes">5 Hz</col>
<col id="2" translatable="yes">0x13</col>
</row>
<row>
<col id="0">2</col>
<col id="1" translatable="yes">10 Hz</col>
<col id="2" translatable="yes">0x23</col>
</row>
<row>
<col id="0">3</col>
<col id="1" translatable="yes">15 Hz</col>
<col id="2" translatable="yes">0x33</col>
</row>
<row>
<col id="0">4</col>
<col id="1" translatable="yes">25 Hz</col>
<col id="2" translatable="yes">0x43</col>
</row>
<row>
<col id="0">5</col>
<col id="1" translatable="yes">30 Hz</col>
<col id="2" translatable="yes">0x53</col>
</row>
<row>
<col id="0">6</col>
<col id="1" translatable="yes">50 Hz</col>
<col id="2" translatable="yes">0x63</col>
</row>
<row>
<col id="0">7</col>
<col id="1" translatable="yes">60 Hz</col>
<col id="2" translatable="yes">0x72</col>
</row>
<row>
<col id="0">8</col>
<col id="1" translatable="yes">100 Hz</col>
<col id="2" translatable="yes">0x82</col>
</row>
<row>
<col id="0">9</col>
<col id="1" translatable="yes">500 Hz</col>
<col id="2" translatable="yes">0x92</col>
</row>
<row>
<col id="0">10</col>
<col id="1" translatable="yes">1 kHz</col>
<col id="2" translatable="yes">0xA1</col>
</row>
<row>
<col id="0">11</col>
<col id="1" translatable="yes">2 kHz</col>
<col id="2" translatable="yes">0xB0</col>
</row>
<row>
<col id="0">12</col>
<col id="1" translatable="yes">3.75 kHz</col>
<col id="2" translatable="yes">0xC0</col>
</row>
<row>
<col id="0">13</col>
<col id="1" translatable="yes">7.5 kHz</col>
<col id="2" translatable="yes">0xD0</col>
</row>
<row>
<col id="0">14</col>
<col id="1" translatable="yes">15 kHz</col>
<col id="2" translatable="yes">0xE0</col>
</row>
<row>
<col id="0">15</col>
<col id="1" translatable="yes">30 kHz</col>
<col id="2" translatable="yes">0xF0</col>
</row>
</data>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkFrame" id="adc_frame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">out</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="bottom_padding">5</property>
<property name="left_padding">5</property>
<property name="right_padding">5</property>
<child>
<object class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<property name="row_spacing">2</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Gain of the ADC's programmable gain amplifier. Default is 2 - gives full scale input.</property>
<property name="label" translatable="yes">PGA Setting</property>
</object>
</child>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Sample Rate</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="buffer_checkbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_EXPAND</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">The ADC's input buffer greatly increases input impedance. Should generally be enabled.</property>
<property name="label" translatable="yes">Input Buffer</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="pga_combobox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">pga_liststore</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="srate_combobox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">srate_liststore</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">ADC Settings</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">2</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="pstat_frame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">out</property>
<child>
<object class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="bottom_padding">5</property>
<property name="left_padding">5</property>
<property name="right_padding">5</property>
<child>
<object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Gain of the I-V converter. Increasing this improves S/N, unlike the ADC's PGA.</property>
<property name="label" translatable="yes">Gain</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="gain_combobox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">gain_liststore</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Potentiostat Settings</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">2</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
#!/usr/bin/env python
import gtk
class adc_pot:
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')
#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.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.gain_combobox = self.builder.get_object('gain_combobox')
self.gain_combobox.pack_start(self.cell, True)
self.gain_combobox.add_attribute(self.cell, 'text', 1)
self.gain_combobox.set_active(1)
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkListStore" id="ca list">
<columns>
<!-- column-name index -->
<column type="guint"/>
<!-- column-name millivolts -->
<column type="gint"/>
<!-- column-name seconds -->
<column type="guint"/>
</columns>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="default_width">300</property>
<property name="default_height">500</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkViewport" id="viewport1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Potential (mV)</property>
</object>
</child>
<child>
<object class="GtkEntry" id="potential_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char"></property>
<property name="width_chars">5</property>
<property name="text" translatable="yes">0</property>
<property name="xalign">1</property>
<property name="truncate_multiline">True</property>
<property name="invisible_char_set">True</property>
<property name="caps_lock_warning">False</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options"/>
<property name="y_options">GTK_SHRINK</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Time (s)</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="time_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char"></property>
<property name="width_chars">5</property>
<property name="text" translatable="yes">0</property>
<property name="xalign">1</property>
<property name="truncate_multiline">True</property>
<property name="invisible_char_set">True</property>
<property name="caps_lock_warning">False</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options"/>
<property name="y_options">GTK_SHRINK</property>
</packing>
</child>
<child>
<object class="GtkButton" id="add_button">
<property name="label">gtk-add</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkButton" id="remove_button">
<property name="label">gtk-remove</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkTreeView" id="treeview1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">ca list</property>
<property name="search_column">0</property>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>
#!/usr/bin/env python
import gtk
class chronoamp:
def __init__(self):
self.builder = gtk.Builder()
self.builder.add_from_file('interface/chronoamp.glade')
self.builder.connect_signals(self)
self.cell = gtk.CellRendererText()
\ No newline at end of file
This diff is collapsed.
#!/usr/bin/env python
import gtk
class cv:
def __init__(self):
self.builder = gtk.Builder()
self.builder.add_from_file('interface/cv.glade')
self.builder.connect_signals(self)
This diff is collapsed.
#!/usr/bin/env python
import gtk
class lsv:
def __init__(self):
self.builder = gtk.Builder()
self.builder.add_from_file('interface/lsv.glade')
self.builder.connect_signals(self)
self.start_entry = self.builder.get_object('start_entry')
self.stop_entry = self.builder.get_object('stop_entry')
self.slope_entry = self.builder.get_object('slope_entry')
\ No newline at end of file
#!/usr/bin/env python
import sys
try:
import pygtk
pygtk.require('2.0')
except:
pass
try:
import gtk
except:
print('GTK not available')
sys.exit(1)
import interface.adc_pot as adc_pot
import interface.chronoamp as chronoamp
import interface.lsv as lsv
import interface.cv as cv
import dstat_comm as comm
class Error(Exception):
pass
class InputError(Error):
"""Exception raised for errors in the input.
Attributes:
expr -- input expression in which the error occurred
msg -- error message
"""
def __init__(self, expr, msg):
self.expr = expr
self.msg = msg
class main:
def __init__(self):
self.builder = gtk.Builder()
self.builder.add_from_file('interface/dstatinterface.glade')
self.builder.connect_signals(self)
self.cell = gtk.CellRendererText()
#create instance of interface components
self.statusbar = self.builder.get_object('statusbar')
self.window = self.builder.get_object('window1')
self.aboutdialog = self.builder.get_object('aboutdialog1')
self.adc_pot = adc_pot.adc_pot()
self.chronoamp = chronoamp.chronoamp()
self.lsv = lsv.lsv()
self.cv = cv.cv()
self.error_context_id = self.statusbar.get_context_id("error")
#fill exp_section
self.exp_section = self.builder.get_object('exp_section_box')
self.chronoamp_container = self.chronoamp.builder.get_object('scrolledwindow1')
self.chronoamp_container.reparent(self.exp_section)
self.lsv_container = self.lsv.builder.get_object('scrolledwindow1')
self.lsv_container.reparent(self.exp_section)
self.cv_container = self.cv.builder.get_object('scrolledwindow1')
self.cv_container.reparent(self.exp_section)
#fill adc_pot_box
self.adc_pot_box = self.builder.get_object('gain_adc_box')
self.adc_pot_container = self.adc_pot.builder.get_object('vbox1')
self.adc_pot_container.reparent(self.adc_pot_box)
#initialize experiment selection combobox
self.expcombobox = self.builder.get_object('expcombobox')
self.expcombobox.pack_start(self.cell, True)
self.expcombobox.add_attribute(self.cell, 'text', 1)
self.expcombobox.set_active(0)
self.mainwindow = self.builder.get_object('window1')
self.mainwindow.set_title("Dstat Interface 0.1")
self.mainwindow.show_all()
# self.chronoamp_container.hide()
self.lsv_container.hide()
self.cv_container.hide()
def exp_param_show(self, selection):
self.chronoamp_container.hide()
self.lsv_container.hide()
self.cv_container.hide()
self.statusbar.remove_all(self.error_context_id)
if selection == 0:
self.chronoamp_container.show()
elif selection == 1:
self.lsv_container.show()
elif selection == 2:
self.cv_container.show()
else:
self.statusbar.push(self.error_context_id, "Experiment not yet implemented")
def on_window1_destroy(self, object, data=None):
print "quit with cancel"
gtk.main_quit()
# This is the same as above but for our menu item.
def on_gtk_quit_activate(self, menuitem, data=None):
print "quit from menu"
gtk.main_quit()
def on_gtk_about_activate(self, menuitem, data=None):
print "help about selected"
self.response = self.aboutdialog.run() #waits for user to click close - could test response with if
self.aboutdialog.hide()
def on_expcombobox_changed(self, data=None):
self.exp_param_show(self.expcombobox.get_active())
def on_pot_start_clicked(self, data=None):
selection = self.expcombobox.get_active()
if selection == 0: #CA
pass
elif selection == 1: #LSV
if self.adc_pot.buffer_toggle.get_active(): #True if box checked
adc_buffer = "0x2"
else:
adc_buffer = "0x0"
self.srate_model = self.adc_pot.srate_combobox.get_model()
self.pga_model = self.adc_pot.pga_combobox.get_model()
self.gain_model = self.adc_pot.gain_combobox.get_model()
adc_rate = self.srate_model.get_value(self.adc_pot.srate_combobox.get_active_iter(), 2) #third column
adc_pga = self.pga_model.get_value(self.adc_pot.pga_combobox.get_active_iter(), 2)
gain = self.gain_model.get_value(self.adc_pot.gain_combobox.get_active_iter(), 2)
try:
self.statusbar.remove_all(self.error_context_id)
start = int(self.lsv.start_entry.get_text())
stop = int(self.lsv.stop_entry.get_text())
slope = int(self.lsv.slope_entry.get_text())
#check parameters are within hardware limits
if (start > 1499 or start < -1500):
raise InputError(start,"Start parameter exceeds hardware limits.")
if (stop > 1499 or stop < -1500):
raise InputError(stop,"Stop parameter exceeds hardware limits.")
if (slope > 2000 or slope < 1):
raise InputError(slope,"Slope parameter exceeds hardware limits.")
if start == stop:
raise InputError(start,"Start cannot equal Stop.")
comm.lsv_exp(adc_buffer, adc_rate, adc_pga, gain, start, stop, slope)
except ValueError:
self.statusbar.push(self.error_context_id, "Experiment parameters must be integers.")
except InputError as e:
self.statusbar.push(self.error_context_id, e.msg)
elif selection == 2: #CV
pass
else:
pass
if __name__ == "__main__":
main = main()
gtk.main()
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment