Commit 0ae0b306 authored by Martin Drechsler's avatar Martin Drechsler
parents 9b046dd7 5a2ae12c
......@@ -2,7 +2,11 @@
"""
Here the class of control signals are created. There are two types: analog and digital.
"""
from drivers.ADoutputs import daq_AO, daq_DO
import sys
if sys.platform == 'linux':
from drivers.ADoutputs_linux import daq_AO, daq_DO
else:
from drivers.ADoutputs import daq_AO, daq_DO
from PyQt5 import QtCore
from subclasses.controllayouts import LaserControlLayout
from subclasses.controllayouts import LaserScanLayout
......@@ -104,7 +108,7 @@ class anal_control_signal(QtCore.QObject):
class digital_control_signal(QtCore.QObject):
_registry = []
def __init__(self, name, channel, inverse=False):
def __init__(self, name, channel, inverse=True):
super().__init__()
self._registry.append(self)
......@@ -112,6 +116,7 @@ class digital_control_signal(QtCore.QObject):
self.ch = channel
self.initial_value = 0
self.DO = daq_DO(self.ch)
self.inverse = inverse
def make_connections(self, frontend):
......@@ -122,6 +127,12 @@ class digital_control_signal(QtCore.QObject):
@QtCore.pyqtSlot(int)
def when_change_digital(self, state):
if state == QtCore.Qt.Checked:
self.DO.set_out(True)
if self.inverse:
self.DO.set_out(True)
else:
self.DO.set_out(False)
else:
self.DO.set_out(False)
\ No newline at end of file
if self.inverse:
self.DO.set_out(False)
else:
self.DO.set_out(True)
\ No newline at end of file
......@@ -89,6 +89,7 @@ class CameraGuiMainWindow(QMainWindow):
# image layout
self.img = pg.ImageItem(border="w")
self.img.rotate(90)
self.imv = pg.ImageView(imageItem=self.img, view=self.imageView)
self.imv.ui.roiBtn.setText('Useless')
self.dCameraView.addWidget(self.imv)
......@@ -271,6 +272,7 @@ class CameraGuiMainWindow(QMainWindow):
#@QtCore.pyqtSlot()
def measurement_ending(self):
print('entering gui measure ending')
self.cameraButton.setEnabled(True)
self.measurementFrame.startMeasureButton.setEnabled(True)
self.measurementFrame.saveMeasureButton.setEnabled(True)
......
......@@ -56,12 +56,12 @@ class ControlGui(QtGui.QFrame):
self.laser397_control_layout = LaserControlLayout('397', checkboxes=['shutter397'], spinboxes = ['piezoA397', 'piezoB397'])
self.laser397_scan_layout = LaserScanLayout(name='piezoA397', signal_to_scan_layout=self.laser397_control_layout)
self.laser397_scan_layout = LaserScanLayout(name='piezoB397', signal_to_scan_layout=self.laser397_control_layout)
self.dock_397.addWidget(self.laser397_control_layout, 0, 0)
self.dock_397_scan.addWidget(self.laser397_scan_layout, 0, 1)
self.laser866_control_layout = LaserControlLayout('866', checkboxes=['shutter866', 'shuter866WM'], spinboxes = ['piezoA866', 'piezoB866'])
self.laser866_scan_layout = LaserScanLayout(name='piezoA866', signal_to_scan_layout=self.laser866_control_layout)
self.laser866_control_layout = LaserControlLayout('866', checkboxes=['shutter866', 'shutter866WM'], spinboxes = ['piezoA866', 'piezoB866'], blinkCheckbox = ['shutter866'])
self.laser866_scan_layout = LaserScanLayout(name='piezoB866', signal_to_scan_layout=self.laser866_control_layout)
self.dock_866.addWidget(self.laser866_control_layout)
self.dock_866_scan.addWidget(self.laser866_scan_layout)
......@@ -87,7 +87,6 @@ class ControlGui(QtGui.QFrame):
self.electrodes_control_layout.addWidget(self.electrodes_control_layout.spinboxes['compExYb'], 1, 5)
self.toolbar = myToolbarMenu(self)
self.toolbar.load()
self.autosave_timer = QtCore.QTimer()
self.autosave_timer.timeout.connect(lambda: self.toolbar.save('config.ini'))
self.autosave_timer.start(10000)
......
......@@ -749,10 +749,11 @@ class AndorBase(SDK3Camera):
def live_acquisition_loop(self):
t = threading.currentThread()
timeout = self.ExposureTime.getValue() * 5000
while getattr(t, "do_run", True):
a_s, px_encoding, xs, ys, bufs = self._live_acq_auxs
try:
pData, lData = SDK3.WaitBuffer(self.handle, 10000)
pData, lData = SDK3.WaitBuffer(self.handle, int(timeout))
except:
return
img = create_aligned_array(xs*ys, 'uint16')
......
......@@ -5,7 +5,6 @@ from drivers.dummyAndor import AndorZyla
from cameraGui import CameraGuiMainWindow
from zylaCameraWorker import CameraWorker
#from measurement import MeasurementWorker, MeasurementGui
from MCDAQcontrolsignals import anal_control_signal
from MCDAQcontrolsignals import digital_control_signal
from controlGui import ControlGui
......@@ -20,24 +19,24 @@ if __name__ == "__main__":
camera = AndorZyla(0)
piezoA397 = anal_control_signal('piezoA397', channel=0, ao_type='cavity_piezo', out_minimum = 0, out_maximum = 4)
piezoB397 = anal_control_signal('piezoB397', channel=1, ao_type='cavity_piezo')
piezoA866 = anal_control_signal('piezoA866', channel=2, ao_type='cavity_piezo', out_minimum = 0, out_maximum = 4)
piezoB866 = anal_control_signal('piezoB866', channel=3, ao_type='cavity_piezo')
piezo423 = anal_control_signal('piezo423', channel=4, ao_type='laser_piezo')
piezoA397 = anal_control_signal('piezoA397', channel=13, ao_type='cavity_piezo', out_minimum = 0, out_maximum = 4)
piezoB397 = anal_control_signal('piezoB397', channel=7, ao_type='cavity_piezo')
piezoA866 = anal_control_signal('piezoA866', channel=14, ao_type='cavity_piezo', out_minimum = 0, out_maximum = 4)
piezoB866 = anal_control_signal('piezoB866', channel=9, ao_type='cavity_piezo', out_minimum = -2, out_maximum = 10)
piezo423 = anal_control_signal('piezo423', channel=3, ao_type='laser_piezo')
trapDCA = anal_control_signal('dcA', channel = 5, ao_type='electrode')
trapDCB = anal_control_signal('dcB', channel = 6, ao_type='electrode')
trapCOMPC = anal_control_signal('compC', channel = 7, ao_type='electrode')
trapCOMPD = anal_control_signal('compD', channel = 8, ao_type='electrode')
trapOven = anal_control_signal('compOven', channel = 9, ao_type='electrode')
trapExYb = anal_control_signal('compExYb', channel = 10, ao_type='electrode')
trapDCA = anal_control_signal('dcA', channel = 2, ao_type='electrode')
trapDCB = anal_control_signal('dcB', channel = 1, ao_type='electrode')
trapCOMPC = anal_control_signal('compC', channel = 4, ao_type='electrode')
trapCOMPD = anal_control_signal('compD', channel = 5, ao_type='electrode')
trapOven = anal_control_signal('compOven', channel = 0, ao_type='electrode')
trapExYb = anal_control_signal('compExYb', channel = 6, ao_type='electrode')
shutter866 = digital_control_signal('shutter866', channel = 0)
shutter397 = digital_control_signal('shutter397', channel = 1)
shutter423 = digital_control_signal('shutter423', channel = 2)
shutter866WM = digital_control_signal('shutter866WM', channel = 3)
shutter866 = digital_control_signal('shutter866', channel = 2, inverse=False)
shutter397 = digital_control_signal('shutter397', channel = 0, inverse=False)
shutter423 = digital_control_signal('shutter423', channel = 1, inverse=False)
shutter866WM = digital_control_signal('shutter866WM', channel = 3, inverse=False)
controlGui = ControlGui()
mcDAQthread = QtCore.QThread()
......@@ -65,5 +64,6 @@ if __name__ == "__main__":
cameraThread.start()
mcDAQthread.start()
controlGui.toolbar.load()
sys.exit(app.exec_())
......@@ -7,10 +7,9 @@ Created on Thu Jul 5 12:17:30 2018
from PyQt5.QtCore import QSettings
from PyQt5 import QtGui
from PyQt5.QtWidgets import QAction, QFileDialog, QInputDialog, QWidget
from PyQt5.QtWidgets import QAction, QFileDialog, QWidget
from threading import Thread
from subclasses.controllayouts import LaserControlLayout
from subclasses.controllayouts import LaserControlLayout, LaserScanLayout
#%%
class myToolbarMenu(QWidget):
......@@ -23,14 +22,29 @@ class myToolbarMenu(QWidget):
self.MainGuiWindow = win
self.sbsDicc = dict()
self.cbsDicc = dict()
self.incorporate_toolbar(self.MainGuiWindow)
self.fillSpinBoxesDict()
self.fillCheckBoxesDict()
def fillSpinBoxesDict(self):
for l in LaserControlLayout._registry:
for sb_name in l.spinboxes:
self.sbsDicc[sb_name] = l.spinboxes[sb_name]
for l in LaserScanLayout._registry:
for sb_name in l.spinboxes:
self.sbsDicc['_'.join([l.name, sb_name])] = l.spinboxes[sb_name]
def fillCheckBoxesDict(self):
for l in LaserControlLayout._registry:
for cb_name in l.checkboxes:
self.cbsDicc[cb_name] = l.checkboxes[cb_name]
def createElectrodesDict(self):
d = dict()
......@@ -83,6 +97,9 @@ class myToolbarMenu(QWidget):
for text, spinb in self.sbsDicc.items():
settings.setValue(text, spinb.value())
for text, checkb in self.cbsDicc.items():
settings.setValue(text, checkb.isChecked())
settings.endGroup()
......@@ -98,6 +115,14 @@ class myToolbarMenu(QWidget):
spinb.setValue( float(spinbox_saved_value) )
except TypeError:
spinb.setValue( float(spinb.value()) )
for text, checkb in self.cbsDicc.items():
checkbox_saved_value = settings.value(text)
if checkbox_saved_value in ['true', 'True', True]:
checkb.setChecked(True)
else:
checkb.setChecked(False)
settings.endGroup()
def save_as(self, window):
......
......@@ -22,13 +22,19 @@ class Storage(object):
Class to handle data saving.
"""
def __init__(self):
self.directory = '.'
"""
By default, directory is set to the current directory.
"""
self.directory = os.getcwd()
def set_directory(self, directory):
self.directory = directory
def create_data_file(self, *args):
"""
Creates a file to store data. Name is set automatically.
*args should be strings, with the column titles of the data to be saved.
"""
saving_directory = "/".join([self.directory, self.get_date_string()])
if not os.path.exists(saving_directory):
os.makedirs(saving_directory)
......@@ -51,12 +57,20 @@ class Storage(object):
def append_data_to_current_file(self, row):
"""
This will append a row to the last data file created.
row should be a list with the values to append.
"""
with open(self.get_current_data_filename(), 'ab') as f:
#data = np.column_stack(args)
np.savetxt(f, [row])
f.flush()
def append_metadata_to_current_file(self, *args):
"""
This appends metadata to the last metadata file created.
*args should be dictionaries, each of them will be stored.
"""
for arg in args:
for key, value in arg.items():
with open(self.get_current_metadata_filename(), 'a') as f:
......
......@@ -7,8 +7,8 @@ This is a temporary script file.
import cv2
cap = cv2.VideoCapture(0)
cap1 = cv2.VideoCapture(1)
cap = cv2.VideoCapture(2)
cap1 = cv2.VideoCapture(3)
while(True):
# Capture frame-by-frame
......
......@@ -26,7 +26,7 @@ class BasicAcquisitonParameters(pTypes.GroupParameter):
['12-bit (high well capacity)', '12-bit (low noise)', '16-bit (low noise & high well capacity)']}
)
self.addChild({'name': 'Readout Time', 'type': 'float', 'value': 0, 'readonly': True})
self.addChild({'name': 'Spurious Noise Filter', 'type': 'list', 'values': ['True', 'False']})
self.addChild({'name': 'Spurious Noise Filter', 'type': 'list', 'values': [True, False]})
self.addChild({'name': 'Sensor Temperature', 'type': 'float', 'value': 25, 'readonly': True})
self.addChild({'name': 'Temperature Status', 'type': 'str', 'value': '?', 'readonly': True})
......
......@@ -9,187 +9,216 @@ from resources.messages import show_warning
class CustomSpinBox(pg.SpinBox):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.opts['suffix'] == 'V': # fixing a context menu with some scales
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self._on_context_menu)
self.popMenu = QtGui.QMenu(self)
self.act_2_step = QtGui.QAction('2 mV step', self)
self.act_5_step = QtGui.QAction('5 mV step', self)
self.act_10_step = QtGui.QAction('10 mV step', self)
self.act_100_step = QtGui.QAction('100 mV step', self)
self.popMenu.addAction(self.act_2_step)
self.popMenu.addAction(self.act_5_step)
self.popMenu.addAction(self.act_10_step)
self.popMenu.addAction(self.act_100_step)
self.act_2_step.triggered.connect(lambda: self.setSingleStep(0.002))
self.act_5_step.triggered.connect(lambda: self.setSingleStep(0.005))
self.act_10_step.triggered.connect(lambda: self.setSingleStep(0.01))
self.act_100_step.triggered.connect(lambda: self.setSingleStep(0.1))
def _on_context_menu(self, point):
# show context menu
self.popMenu.exec_(self.mapToGlobal(point))
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.opts['suffix'] == 'V': # fixing a context menu with some scales
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self._on_context_menu)
self.popMenu = QtGui.QMenu(self)
self.act_2_step = QtGui.QAction('2 mV step', self)
self.act_5_step = QtGui.QAction('5 mV step', self)
self.act_10_step = QtGui.QAction('10 mV step', self)
self.act_100_step = QtGui.QAction('100 mV step', self)
self.popMenu.addAction(self.act_2_step)
self.popMenu.addAction(self.act_5_step)
self.popMenu.addAction(self.act_10_step)
self.popMenu.addAction(self.act_100_step)
self.act_2_step.triggered.connect(lambda: self.setSingleStep(0.002))
self.act_5_step.triggered.connect(lambda: self.setSingleStep(0.005))
self.act_10_step.triggered.connect(lambda: self.setSingleStep(0.01))
self.act_100_step.triggered.connect(lambda: self.setSingleStep(0.1))
def _on_context_menu(self, point):
# show context menu
self.popMenu.exec_(self.mapToGlobal(point))
class LaserControlLayout(pg.LayoutWidget):
"""
A class for creating a layout with spinboxes and checkboxes to control a laser.
"""
_registry = []
def __init__(self, name, spinboxes = ['sbA', 'sbB'], checkboxes = ['cbA', 'cbB'], custom_geometry = False):
super().__init__()
self._registry.append(self)
self.name = name
if custom_geometry != True:
self.layout.addWidget(QtGui.QLabel(self.name), 0, 0)
self.spinboxes = {}
self.checkboxes = {}
for i, sb_name in enumerate(spinboxes, start = 1):
self.spinboxes[sb_name] = CustomSpinBox(siPrefix=True, suffix='V')
if custom_geometry != True:
self.addWidget(QtGui.QLabel(sb_name), i, 0)
self.addWidget(self.spinboxes[sb_name], i, 1)
for i, cb_name in enumerate(checkboxes, start = 0):
self.checkboxes[cb_name] = QtGui.QCheckBox()
if custom_geometry != True:
row = len(spinboxes) + 1
self.addWidget(QtGui.QLabel(cb_name), row, 2*i)
self.addWidget(self.checkboxes[cb_name], row, 2*i + 1)
def blink(self, cb):
pass
def freeze(self):
for sb in self.spinboxes:
self.spinboxes[sb].setEnabled(False)
for cb in self.checkboxes:
self.checkboxes[cb].setEnabled(False)
def unfreeze(self):
for sb in self.spinboxes:
self.spinboxes[sb].setEnabled(True)
for cb in self.checkboxes:
self.checkboxes[cb].setEnabled(True)
"""
A class for creating a layout with spinboxes and checkboxes to control a laser.
"""
_registry = []
blinkSignal = QtCore.pyqtSignal(bool, float)
def __init__(self, name, spinboxes = ['sbA', 'sbB'], checkboxes = ['cbA', 'cbB'], custom_geometry = False, blinkCheckbox = []):
super().__init__()
self._registry.append(self)
self.name = name
if custom_geometry != True:
self.layout.addWidget(QtGui.QLabel(self.name), 0, 0)
self.spinboxes = {}
self.checkboxes = {}
for i, sb_name in enumerate(spinboxes, start = 1):
self.spinboxes[sb_name] = CustomSpinBox(siPrefix=True, suffix='V')
if custom_geometry != True:
self.addWidget(QtGui.QLabel(sb_name), i, 0)
self.addWidget(self.spinboxes[sb_name], i, 1)
for i, cb_name in enumerate(checkboxes, start = 0):
self.checkboxes[cb_name] = QtGui.QCheckBox()
if custom_geometry != True:
row = len(spinboxes) + 1
self.addWidget(QtGui.QLabel(cb_name), row, 2*i)
self.addWidget(self.checkboxes[cb_name], row, 2*i + 1)
self.blinkCheckboxes = {}
self.blinkSpinboxes = {}
self.blinkTimers = {}
for i, cb_name in enumerate(blinkCheckbox, start=0):
self.blinkCheckboxes[cb_name] = QtGui.QCheckBox()
self.blinkCheckboxes[cb_name].stateChanged.connect(lambda: self.blink(cb_name))
self.blinkSpinboxes[cb_name] = CustomSpinBox(siPrefix=True, suffix='s', value = 1)
self.blinkSpinboxes[cb_name].setMinimum(0.01)
self.blinkTimers[cb_name] = QtCore.QTimer()
self.blinkTimers[cb_name].timeout.connect(self.checkboxes[cb_name].toggle)
if custom_geometry != True:
row = 2 + len(self.spinboxes)
self.addWidget(QtGui.QLabel('blink '+cb_name), row, 0)
self.addWidget(self.blinkCheckboxes[cb_name], row, 1)
self.addWidget(self.blinkSpinboxes[cb_name], row, 2)
def freeze(self):
for sb in self.spinboxes:
self.spinboxes[sb].setEnabled(False)
for cb in self.checkboxes:
self.checkboxes[cb].setEnabled(False)
def unfreeze(self):
for sb in self.spinboxes:
self.spinboxes[sb].setEnabled(True)
for cb in self.checkboxes:
self.checkboxes[cb].setEnabled(True)
def blink(self, cb_name):
T = self.blinkSpinboxes[cb_name].value()
if self.blinkCheckboxes[cb_name].isChecked():
print(' '.join((cb_name, 'blinking with period: ')), T)
self._initial_state = self.checkboxes[cb_name].isChecked()
self.blinkTimers[cb_name].start(T*1e3)
else:
print(' '.join((cb_name, 'blinking stopped')))
self.blinkTimers[cb_name].stop()
self.checkboxes[cb_name].setChecked(self._initial_state)
class LaserScanLayout(pg.LayoutWidget):
"""
A class for creating a layout for scanning a laser piezo.
It is important that the name parameter coincides with the name of the spinbox to scan.
"""
_registry = []
scanActionSignal = QtCore.pyqtSignal(object)
def __init__(self, name, signal_to_scan_layout, feedforward_enables = False):
super().__init__()
self._registry.append(self)
self.name = name
self.signal_to_scan_layout = signal_to_scan_layout
self.addWidget(QtGui.QLabel(self.name), 0, 0)
self.spinboxes = {}
self.spinboxes['start'] = CustomSpinBox(siPrefix=True, suffix='V')
self.spinboxes['stop'] = CustomSpinBox(siPrefix=True, suffix='V')
self.spinboxes['period'] = CustomSpinBox(siPrefix=True, suffix='s', step=1)
self.scan_button = QPushButton('Start scan')
self.scanpBar = QProgressBar(self)
self.scanLabelValue = QLabel(self)
self.addWidget(QtGui.QLabel('start'), 1, 0),
self.addWidget(self.spinboxes['start'], 1, 1)
self.addWidget(QtGui.QLabel('stop'), 2, 0)
self.addWidget(self.spinboxes['stop'], 2, 1)
self.addWidget(QtGui.QLabel('period'), 3, 0),
self.addWidget(self.spinboxes['period'], 3, 1)
self.addWidget(QtGui.QLabel('Scanning'), 4, 0)
self.addWidget(self.scan_button, 4, 1)
self.addWidget(self.scanLabelValue, 5, 0)
self.addWidget(self.scanpBar, 5, 1)
"""
A class for creating a layout for scanning a laser piezo.
It is important that the name parameter coincides with the name of the spinbox to scan.
"""
_registry = []
scanActionSignal = QtCore.pyqtSignal(object)
def __init__(self, name, signal_to_scan_layout):
super().__init__()
self._registry.append(self)
self.name = name
self.signal_to_scan_layout = signal_to_scan_layout
self.addWidget(QtGui.QLabel(self.name), 0, 0)
self.spinboxes = {}
self.spinboxes['start'] = CustomSpinBox(siPrefix=True, suffix='V')
self.spinboxes['stop'] = CustomSpinBox(siPrefix=True, suffix='V')
self.spinboxes['period'] = CustomSpinBox(siPrefix=True, suffix='s', step=1)
self.spinboxes['period'].setMinimum(0)
self.scan_button = QPushButton('Start scan')
self.scanpBar = QProgressBar(self)
self.scanLabelValue = QLabel(self)
self.addWidget(QtGui.QLabel('start'), 1, 0),
self.addWidget(self.spinboxes['start'], 1, 1)
self.addWidget(QtGui.QLabel('stop'), 2, 0)
self.addWidget(self.spinboxes['stop'], 2, 1)
self.addWidget(QtGui.QLabel('period'), 3, 0),
self.addWidget(self.spinboxes['period'], 3, 1)
self.addWidget(QtGui.QLabel('Scanning'), 4, 0)
self.addWidget(self.scan_button, 4, 1)
self.addWidget(self.scanLabelValue, 5, 0)
self.addWidget(self.scanpBar, 5, 1)
self.scan_button.clicked.connect(self._scan_button_clicked)
def name(self):
return self.name
@QtCore.pyqtSlot()
def _scan_button_clicked(self):
start = self.spinboxes['start'].value()
stop = self.spinboxes['stop'].value()
period = self.spinboxes['period'].value()
dt = 5.0e-3
first_value = float(self.signal_to_scan_layout.spinboxes[self.name].value())
scan_array = scanFunctions.create_scan_array(start, stop, period, first_value, dt)
scan_array_gen = scanFunctions.yield_scan_array(scan_array)
if first_value > float(stop) or first_value < float(start):
details = 'Remember remember the fifth of November.' + '\n' + 'Also remember that scan starts from the value of the corresponding spin box'
show_warning('Scan can not start outside scan range and scan start should be lower than scan stop', details_text= details)
elif len(scan_array) < 5:
show_warning('%i steps are too few, you need at least 5 steps' % (len(scan_array)) )
elif stop==start:
show_warning('Oh dear, you might be trying to scan from 0 to 0. Plase never do that again.')
else:
self.scanActionSignal.emit(scan_array_gen)
self.scan_button.setText('Stop scan')
self.signal_to_scan_layout.spinboxes[self.name].setEnabled(False)
self.spinboxes['start'].setEnabled(False)
self.spinboxes['stop'].setEnabled(False)
self.spinboxes['period'].setEnabled(False)
self.scan_button.setStyleSheet("background-color: green")
self.scan_button.setText('Scanning')
@QtCore.pyqtSlot(float)
def scan_step(self, val):
self.pBarEvent(val)
self.scan_button.clicked.connect(self._scan_button_clicked)
def name(self):
return self.name
@QtCore.pyqtSlot()
def _scan_button_clicked(self):
start = self.spinboxes['start'].value()
stop = self.spinboxes['stop'].value()
period = self.spinboxes['period'].value()
dt = 5.0e-3
first_value = float(self.signal_to_scan_layout.spinboxes[self.name].value())
scan_array = scanFunctions.create_scan_array(start, stop, period, first_value, dt)
scan_array_gen = scanFunctions.yield_scan_array(scan_array)
if first_value > float(stop) or first_value < float(start):
details = 'Remember remember the fifth of November.' + '\n' + 'Also remember that scan starts from the value of the corresponding spin box'
show_warning('Scan can not start outside scan range and scan start should be lower than scan stop', details_text= details)
elif len(scan_array) < 5:
show_warning('%i steps are too few, you need at least 5 steps' % (len(scan_array)) )
elif stop==start:
show_warning('Oh dear, you might be trying to scan from 0 to 0. Plase never do that again.')
else:
self.scanActionSignal.emit(scan_array_gen)
self.scan_button.setText('Stop scan')
self.signal_to_scan_layout.spinboxes[self.name].setEnabled(False)
self.spinboxes['start'].setEnabled(False)
self.spinboxes['stop'].setEnabled(False)
self.spinboxes['period'].setEnabled(False)
self.scan_button.setStyleSheet("background-color: green")
self.scan_button.setText('Scanning')
@QtCore.pyqtSlot(float)
def scan_step(self, val):
self.pBarEvent(val)
@QtCore.pyqtSlot(float)
def scan_end(self, val):
self.signal_to_scan_layout.spinboxes[self.name].setValue(val)
self.scan_button.setText('Start scan')
self.scan_button.setStyleSheet('background-color: None')
self.signal_to_scan_layout.spinboxes[self.name].setEnabled(True)
self.spinboxes['start'].setEnabled(True)
self.spinboxes['stop'].setEnabled(True)
self.spinboxes['period'].setEnabled(True)
def pBarEvent(self, current_step):
start = self.spinboxes['start'].value()
stop = self.spinboxes['stop'].value()
self.scanpBar.setValue( 100 * float(current_step-float(start))/float(stop-start) )
self.scanLabelValue.setText("%.2f" % current_step + ' V')
def freeze(self):
self.scan_button.setEnabled(False)
def unfreeze(self):
self.scan_button.setEnabled(True)
@QtCore.pyqtSlot(float)
def scan_end(self, val):
self.signal_to_scan_layout.spinboxes[self.name].setValue(val)
self.scan_button.setText('Start scan')
self.scan_button.setStyleSheet('background-color: None')
self.signal_to_scan_layout.spinboxes[self.name].setEnabled(True)
self.spinboxes['start'].setEnabled(True)
self.spinboxes['stop'].setEnabled(True)
self.spinboxes['period'].setEnabled(True)
def pBarEvent(self, current_step):
start = self.spinboxes['start'].value()
stop = self.spinboxes['stop'].value()
self.scanpBar.setValue( 100 * float(current_step-float(start))/float(stop-start) )
self.scanLabelValue.setText("%.2f" % current_step + ' V')
def freeze(self):
self.scan_button.setEnabled(False)
def unfreeze(self):
self.scan_button.setEnabled(True)
if __name__ == '__main__':
import sys
from PyQt5.QtWidgets import QMainWindow
sys.path.append("/home/martindrech/Documents/total_control_app")
app = QtGui.QApplication([])
frame = QtGui.QFrame()
area = dockarea.DockArea()
grid = QtGui.QGridLayout()
frame.setLayout(grid)
myDock = dockarea.Dock('397', (100, 100))
area.addDock(myDock)
grid.addWidget(area, 0, 0)
l = LaserControlLayout('397', checkboxes = ['cb1', 'cb2', 'cb3'])
l_scan = LaserScanLayout('397 scan')
myDock.addWidget(l)
myDock.addWidget(l_scan)
frame.show()
sys.exit(app.exec_())
\ No newline at end of file
import sys
from PyQt5.QtWidgets import QMainWindow
sys.path.append("/home/martindrech/Documents/total_control_app")
app = QtGui.QApplication([])
frame = QtGui.QFrame()
area = dockarea.DockArea()
grid = QtGui.QGridLayout()
frame.setLayout(grid)
myDock = dockarea.Dock('397', (100, 100))
area.addDock(myDock)
grid.addWidget(area, 0, 0)
l = LaserControlLayout('397', checkboxes = ['cb1', 'cb2', 'cb3'])
l_scan = LaserScanLayout('397 scan')
myDock.addWidget(l)
myDock.addWidget(l_scan)
frame.show()
sys.exit(app.exec_())
\ No newline at end of file
......@@ -110,9 +110,9 @@ class CameraWorker(QtCore.QObject):
)
self.cam.SimplePreAmpGainControl.setString(
params.child('Basic acq parameters').child('Dynamic Range').value()
)
)
self.cam.SpuriousNoiseFilter.setValue(
params.child('Basic acq parameters').child('Spurious Noise Filter').value()
params.child('Basic acq parameters').child('Spurious Noise Filter').value()=='True'
)
@QtCore.pyqtSlot(int)
......@@ -157,11 +157,13 @@ class CameraWorker(QtCore.QObject):
def simple_scan_measurement_end(self):
self._stop_acquisition_loop()
self.cam.TriggerMode.setString('Internal')
self.cam.helper.imageAquiredSignal.disconnect(self.new_image_acquired_with_trigger)
self.cam.helper.imageAquiredSignal.connect(self.new_image_acquired)
self.measurementEndingSignal.emit()
print('exiting scan ending in worker')
def simple_scan_measurement_step(self):
try:
......
Markdown is supported
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