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

Implemented PD/PMT experiment. (would be nice to have automatic RE/CE shorting though)

parent 4395bd02
Branches feature/pmt
Tags
No related merge requests found
......@@ -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):
......
......@@ -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):
......
......@@ -2,6 +2,11 @@
<interface>
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkAdjustment" id="voltage_adjustment">
<property name="upper">3000</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
......@@ -26,28 +31,6 @@
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkEntry" id="voltage_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char"></property>
<property name="width_chars">8</property>
<property name="text" translatable="yes">0</property>
<property name="xalign">1</property>
<property name="invisible_char_set">True</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_FILL</property>
<property name="y_padding">3</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="time_entry">
<property name="visible">True</property>
......@@ -94,6 +77,21 @@
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHScale" id="voltage_scale">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">voltage_adjustment</property>
<property name="restrict_to_fill_level">False</property>
<property name="fill_level">100</property>
<property name="round_digits">1</property>
<property name="digits">0</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
......@@ -107,7 +105,6 @@
<property name="can_focus">False</property>
<property name="xpad">20</property>
<property name="ypad">20</property>
<property name="label" translatable="yes">Experiment not yet implemented</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
......@@ -118,6 +115,9 @@
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
......
......@@ -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.")
......
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