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

Multiprocessed UI for LSV (Other experiment types broken) Stop button implemented.

parent 3a091d5b
Branches
Tags
No related merge requests found
......@@ -99,9 +99,10 @@ class Experiment:
self.data_postprocessing()
self.plot.updateline(self, 0)
self.plot.redraw()
# self.plot.updateline(self, 0)
# self.plot.redraw()
print "pipe closed"
self.main_pipe.close()
self.ser.close()
def data_handler(self):
......@@ -115,15 +116,21 @@ class Experiment:
while True:
try:
voltage, current = struct.unpack('<Hl', recv_p.recv()) #uint16 + int32
if self.main_pipe.poll():
if self.main_pipe.recv() == 'a':
self.ser.write('a')
return
voltage, current = struct.unpack('<Hl', recv_p.recv()) #uint16 + int32
#(line, [data])
self.main_pipe.send((0, [(voltage-32768)*3000./65536, current*(1.5/self.gain/8388607)]))
# self.data[0].append((voltage-32768)*3000./65536)
# self.data[1].append(current*(1.5/self.gain/8388607))
# if ((time.time() - updatetime) > .2):
# self.plot.updateline(self, 0)
# self.plot.redraw()
# updatetime = float(time.time())
self.data[0].append((voltage-32768)*3000./65536)
self.data[1].append(current*(1.5/self.gain/8388607))
if ((time.time() - updatetime) > .2):
self.plot.updateline(self, 0)
self.plot.redraw()
updatetime = float(time.time())
except EOFError:
print "empty"
break
......@@ -187,7 +194,8 @@ class chronoamp(Experiment):
break
class lsv_exp(Experiment):
def __init__(self, parameters, view_parameters, plot_instance, databuffer_instance):
def __init__(self, parameters, view_parameters, plot_instance, databuffer_instance, send_pipe):
self.main_pipe = send_pipe
self.parameters = parameters
self.view_parameters = view_parameters
self.plot = plot_instance
......
......@@ -375,6 +375,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_pot_stop_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
......
......@@ -240,8 +240,20 @@ class main:
if parameters['start'] == parameters['stop']:
raise InputError(parameters['start'],"Start cannot equal Stop.")
self.current_exp = comm.lsv_exp(parameters, view_parameters, self.plot, self.rawbuffer)
self.current_exp.run(self.serial_liststore.get_value(self.serial_combobox.get_active_iter(), 0))
# self.current_exp.run(self.serial_liststore.get_value(self.serial_combobox.get_active_iter(), 0))
self.line = 0
self.recv_p, self.send_p = multiprocessing.Pipe(duplex=True)
self.current_exp = comm.lsv_exp(parameters, view_parameters, self.plot, self.rawbuffer, self.send_p)
self.p = multiprocessing.Process(target=self.current_exp.run, args=(self.serial_liststore.get_value(self.serial_combobox.get_active_iter(), 0), ))
self.p.start()
self.send_p.close()
self.plot_proc = gobject.timeout_add(200, self.experiment_running_plot)
gobject.idle_add(self.experiment_running)
elif selection == 2: #CV
parameters['clean_mV'] = int(self.cv.clean_mV.get_text())
......@@ -340,17 +352,38 @@ class main:
except AssertionError as e:
self.spinner.stop()
self.statusbar.push(self.error_context_id, str(e))
def experiment_running(self):
try:
if self.recv_p.poll():
self.line, data = self.recv_p.recv()
print self.line, data
for i in range(len(data)):
self.current_exp.data[self.line+i].append(data[i])
return True
except EOFError:
self.experiment_done()
return False
def experiment_running_plot(self):
self.plot.updateline(self.current_exp, self.line)
self.plot.redraw()
return True
def experiment_done(self):
gobject.source_remove(self.plot_proc) #stop automatic plot update
self.experiment_running_plot() #make sure all data updated on plot
self.databuffer.set_text("")
self.databuffer.place_cursor(self.databuffer.get_start_iter())
self.rawbuffer.set_text("")
self.rawbuffer.place_cursor(self.rawbuffer.get_start_iter())
for col in zip(*self.current_exp.data):
for row in col:
self.rawbuffer.insert_at_cursor(str(row)+ "\t")
self.rawbuffer.insert_at_cursor("\n")
if self.current_exp.data_extra:
for col in zip(*self.current_exp.data_extra):
......@@ -360,7 +393,12 @@ class main:
self.spinner.stop()
def on_pot_stop_clicked(self, data=None):
if self.recv_p:
print "stop"
self.recv_p.send('a')
def on_file_save_exp_activate(self, menuitem, data=None):
if self.current_exp:
self.save = save.npSave(self.current_exp)
......
......@@ -61,4 +61,6 @@ class plotbox:
self.axe1.relim()
self.axe1.autoscale(True, axis = 'y')
self.figure.canvas.draw()
return True
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