Skip to content
myGUI.py 13.3 KiB
Newer Older
Martin Drechsler's avatar
Martin Drechsler committed
# -*- coding: utf-8 -*-
"""
Created on Thu May 31 14:22:48 2018

@author: Usuario
"""

from pyqtgraph.Qt import QtGui
from resources.myWidgets import anal_control_signal, digital_control_signal, activation_button, burleighWM, coherentWM, kick_ions_hard, kick_ions_soft
Martin Drechsler's avatar
Martin Drechsler committed
from PyQt5.QtWidgets import QMainWindow, QPushButton
Martin Drechsler's avatar
Martin Drechsler committed
from PyQt5.QtCore import QTimer
from pyqtgraph import dockarea
import pyqtgraph as pg
from resources.myToolbar import myToolbarMenu
import qdarkstyle
import os
os.environ['PYQTGRAPH_QT_LIB'] = 'PyQt5'
###############################################################################
class GuiMainWindow(QMainWindow):
     def __init__(self):
        super().__init__()
        
        self.initUI()
        
     def initUI(self):  
        
        self.win = QtGui.QMainWindow()
        self.win.setWindowTitle('My GUI')
        self.win.setWindowIcon(QtGui.QIcon('snuffles.png'))

    
        self.area = dockarea.DockArea()
        self.win.setCentralWidget(self.area)
        self.cw = QtGui.QWidget()
        self.win.show()
###############################################################################



        # Here I create the layouts
        self.layout397 = pg.LayoutWidget()
        self.layout866 =  pg.LayoutWidget()
        self.layoutPI =  pg.LayoutWidget()
        self.layoutIMG =  pg.LayoutWidget()
        self.layoutWM = pg.LayoutWidget()
        self.layoutWM_coherent = pg.LayoutWidget()
        
        self.layout397_scan = pg.LayoutWidget()
        self.layout866_scan = pg.LayoutWidget()
        self.layout423_scan = pg.LayoutWidget()
        self.layout_trap_electrodes = pg.LayoutWidget()
        self.layout_activate = pg.LayoutWidget()

        # Here I create the docks
        self.s1 = 100
        self.s2 = 100
        self.d397 = dockarea.Dock("Dock397", size=(self.s1, self.s2))  
        self.d866 = dockarea.Dock("Dock866", size=(self.s1, self.s2))  
        self.dPI = dockarea.Dock("DockPI", size=(self.s1, self.s2))   
        self.dWM = dockarea.Dock("DockWM", size=(self.s1, self.s2))
        self.dWM_coherent = dockarea.Dock("DockWM_coherent", size=(self.s1, self.s2))
        
        self.d397_scan = dockarea.Dock("Dock 397 scan", size=(self.s1, self.s2))
        self.d866_scan = dockarea.Dock("Dock 866 scan", size=(self.s1, self.s2))
        self.d423_scan = dockarea.Dock("Dock 423 scan", size=(self.s1, self.s2))
        self.dtrap_electrodes = dockarea.Dock("Dock Trap Electrodes", size=(self.s1, self.s2))
        self.dactivate = dockarea.Dock(" ",  hideTitle=False, size = (self.s1/4, self.s2))
        self.dactivate.hideTitleBar()

        # Here I add the docks
        self.area.addDock(self.dtrap_electrodes)
        self.area.addDock(self.d397, 'bottom', self.dtrap_electrodes)
        self.area.addDock(self.d866, 'bottom', self.d397)
Martin Drechsler's avatar
Martin Drechsler committed
        self.area.addDock(self.dWM)
        self.area.addDock(self.dWM_coherent)
Martin Drechsler's avatar
Martin Drechsler committed
        self.area.addDock(self.dPI, 'bottom', self.dWM)
        
        self.area.addDock(self.d397_scan, 'right', self.d397)
        self.area.addDock(self.d423_scan, 'right', self.dPI)
        self.area.addDock(self.d866_scan, 'right', self.d866)
Martin Drechsler's avatar
Martin Drechsler committed
        #self.area.addDock(self.dactivate, 'right', self.dtrap_electrodes)
        self.area.moveDock(self.dWM, 'above', self.dtrap_electrodes)
        self.area.moveDock(self.dWM_coherent, 'above', self.dWM)
        
        self.area.moveDock(self.dPI, 'above', self.d423_scan)


        # Here I add the layouts to the corresponding dock
        self.d397.addWidget(self.layout397)
        self.d866.addWidget(self.layout866)
        self.dPI.addWidget(self.layoutPI)
        self.dWM.addWidget(self.layoutWM)
        self.dWM_coherent.addWidget(self.layoutWM_coherent)
        self.d397_scan.addWidget(self.layout397_scan)
        self.d866_scan.addWidget(self.layout866_scan)
        self.d423_scan.addWidget(self.layout423_scan)
        self.dtrap_electrodes.addWidget(self.layout_trap_electrodes)
Martin Drechsler's avatar
Martin Drechsler committed
        #self.dactivate.addWidget(self.layout_activate)

############ creating the controls ########################
        
        self.piezoA397 = anal_control_signal('piezoA397', 13, ao_type ='cavity_piezo' , out_minimum=0, out_maximum=4, out_step=0.01) 
        self.piezoB397 = anal_control_signal('piezoB397', 7, ao_type ='cavity_piezo', out_step = 0.01)
        self.piezoA866 = anal_control_signal('piezoA866', 14, ao_type ='cavity_piezo', out_minimum=0, out_maximum=4, out_step=0.01)
        self.piezoB866 = anal_control_signal('piezoB866', 9, ao_type ='cavity_piezo', out_step = 0.01, out_minimum= -2, out_maximum= 10)
        self.piezoA423 = anal_control_signal('piezoA423', 8, ao_type ='laser_piezo', out_step = 0.01)
        self.trapDCA = anal_control_signal('DC A', 2, ao_type ='electrode')
        self.trapDCB = anal_control_signal('DC B', 1, ao_type ='electrode')
        self.trapCompC = anal_control_signal('Comp C', 4, ao_type ='electrode')
Martin Drechsler's avatar
Martin Drechsler committed
        self.trapCompC.sb.setEnabled(False)
        self.trapCompD = anal_control_signal('Comp D', 5, ao_type ='electrode')
        self.trapCompOven = anal_control_signal('Comp Oven', 0, ao_type ='electrode')
        self.trapCompExYb = anal_control_signal('Comp Ex Yb', 6, ao_type ='electrode')
        
        
        
        self.shutter397 = digital_control_signal('shutter397', 0)
        self.shutter866 = digital_control_signal('shutter866', 2)
        self.shutter423 = digital_control_signal('shutter423', 1)
        self.shutterLED = digital_control_signal('shutterLED', 3)
Martin Drechsler's avatar
Martin Drechsler committed

        self.soft_kick_button = QPushButton('kick!')
        self.soft_kick_button.clicked.connect(lambda: kick_ions_soft(self.shutter866, self.trapDCA, self.trapDCB))
        self.hard_kick_button = QPushButton('kick!!')
        self.hard_kick_button.clicked.connect(lambda: kick_ions_hard(self.shutter866, self.trapDCA, self.trapDCB))        
#############Toolbar and initial loading of config ############################
Martin Drechsler's avatar
Martin Drechsler committed
        self.toolbar = myToolbarMenu(self.win, anal_control_signal._registry )
        self.toolbar.load(anal_control_signal._registry)
        #print('Defined analog outputs: \n', self.toolbar.aosDicc.keys())
Martin Drechsler's avatar
Martin Drechsler committed
        
        self.autosave_timer = QTimer()
        self.autosave_timer.timeout.connect(lambda: self.toolbar.save(anal_control_signal._registry))
        self.autosave_timer.start(10000)
        
###############################################################################
        #here I connect the spinboxes to the daq analog outputs: 
        for ao in anal_control_signal._registry:
            ao.connectSpinBoxesToDaq()
   
        
        print('Analog control pinout:')
        for ao in anal_control_signal._registry:
            print(ao.name + ' -> ' + 'ao' + str(ao.ch))         


###############################################################################

        #activate button
        self.actB = activation_button()
        self.layout_activate.addWidget(self.actB.button)
###############################################################################
        #Adding the controls:
        
        ######### 397 ###########
        self.layout397.addWidget(QtGui.QLabel('397'), 0, 0)
        self.layout397.addWidget(QtGui.QLabel(self.piezoA397.name), 1, 0), self.layout397.addWidget(self.piezoA397.sb, 1, 1)
        self.layout397.addWidget(QtGui.QLabel(self.piezoB397.name), 2, 0), self.layout397.addWidget(self.piezoB397.sb, 2, 1)
        self.layout397.addWidget(QtGui.QLabel(self.shutter397.name), 3, 0), self.layout397.addWidget(self.shutter397.cb, 3, 1)
        
        self.layout397_scan.addWidget(QtGui.QLabel('397 Scan piezo B'), 0, 0)
        self.layout397_scan.addWidget(QtGui.QLabel('start'), 1, 0), self.layout397_scan.addWidget(self.piezoB397.scan_sb_start, 1, 1)
        self.layout397_scan.addWidget(QtGui.QLabel('stop'), 2, 0), self.layout397_scan.addWidget(self.piezoB397.scan_sb_stop, 2, 1)
        self.layout397_scan.addWidget(QtGui.QLabel('period'), 3, 0), self.layout397_scan.addWidget(self.piezoB397.scan_sb_period, 3, 1)
        self.layout397_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), self.layout397_scan.addWidget(self.piezoB397.scan_button, 4, 1)
        self.layout397_scan.addWidget(self.piezoB397.scanLabelValue, 5, 0)
        self.layout397_scan.addWidget(self.piezoB397.scanpBar, 5, 1)
        
        #########################
        
        ######### 866 ###########
        self.layout866.addWidget(QtGui.QLabel('866'), 0, 0)
        self.layout866.addWidget(QtGui.QLabel(self.piezoA866.name), 1, 0), self.layout866.addWidget(self.piezoA866.sb, 1, 1)
        self.layout866.addWidget(QtGui.QLabel(self.piezoB866.name), 2, 0), self.layout866.addWidget(self.piezoB866.sb, 2, 1)
        self.layout866.addWidget(QtGui.QLabel(self.shutter866.name), 3, 0), self.layout866.addWidget(self.shutter866.cb, 3, 1)
        self.layout866.addWidget(QtGui.QLabel("866 WM"), 3, 2), self.layout866.addWidget(self.shutterLED.cb, 3, 3)
        self.layout866.addWidget(QtGui.QLabel("Blink"), 4, 0), self.layout866.addWidget(self.shutter866.blink_cb, 4, 1)        
        self.layout866.addWidget(self.layout866.addWidget(self.shutter866.blink_time_sb, 4, 2))   
        
        self.layout866_scan.addWidget(QtGui.QLabel('866 Scan piezo B'), 0, 0)
        self.layout866_scan.addWidget(QtGui.QLabel('start'), 1, 0), self.layout866_scan.addWidget(self.piezoB866.scan_sb_start, 1, 1)
        self.layout866_scan.addWidget(QtGui.QLabel('stop'), 2, 0), self.layout866_scan.addWidget(self.piezoB866.scan_sb_stop, 2, 1)
        self.layout866_scan.addWidget(QtGui.QLabel('period'), 3, 0), self.layout866_scan.addWidget(self.piezoB866.scan_sb_period, 3, 1)
        self.layout866_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), self.layout866_scan.addWidget(self.piezoB866.scan_button, 4, 1)
        self.layout866_scan.addWidget(self.piezoB866.scanLabelValue, 5, 0)
        self.layout866_scan.addWidget(self.piezoB866.scanpBar, 5, 1)
        #########################
        
        ######### PI ###########
        self.layoutPI.addWidget(QtGui.QLabel('Photoion'), 0, 0)
        self.layoutPI.addWidget(QtGui.QLabel(self.piezoA423.name), 1, 0), self.layoutPI.addWidget(self.piezoA423.sb, 1, 1)
        self.layoutPI.addWidget(QtGui.QLabel(self.shutter423.name), 2, 0), self.layoutPI.addWidget(self.shutter423.cb, 2, 1)
        #self.layoutPI.addWidget(QtGui.QLabel(self.shutterLED.name), 3, 0), self.layoutPI.addWidget(self.shutterLED.cb, 3, 1)
        
        self.layout423_scan.addWidget(QtGui.QLabel('423 Scan piezo A'), 0, 0)
        self.layout423_scan.addWidget(QtGui.QLabel('start'), 1, 0), self.layout423_scan.addWidget(self.piezoA423.scan_sb_start, 1, 1)
        self.layout423_scan.addWidget(QtGui.QLabel('stop'), 2, 0), self.layout423_scan.addWidget(self.piezoA423.scan_sb_stop, 2, 1)
        self.layout423_scan.addWidget(QtGui.QLabel('period'), 3, 0), self.layout423_scan.addWidget(self.piezoA423.scan_sb_period, 3, 1)
        self.layout423_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), self.layout423_scan.addWidget(self.piezoA423.scan_button, 4, 1)
        self.layout423_scan.addWidget(self.piezoA423.scanLabelValue, 5, 0)
        self.layout423_scan.addWidget(self.piezoA423.scanpBar, 5, 1)
        
Martin Drechsler's avatar
Martin Drechsler committed
        
        #########################
        
        ######### trap electrodes ###########
        self.layout_trap_electrodes.addWidget(QtGui.QLabel('Trap electrodes'), 0, 0)
        self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapDCA.name), 1, 1), self.layout_trap_electrodes.addWidget(self.trapDCA.sb, 1, 2)
        self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapDCB.name), 2, 1), self.layout_trap_electrodes.addWidget(self.trapDCB.sb, 2, 2)
Martin Drechsler's avatar
Martin Drechsler committed
        self.layout_trap_electrodes.addWidget(self.soft_kick_button, 1, 0)
        self.layout_trap_electrodes.addWidget(self.hard_kick_button, 2, 0)
        
        self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapCompC.name), 1, 3), self.layout_trap_electrodes.addWidget(self.trapCompC.sb, 1, 4)
        self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapCompD.name), 2, 3), self.layout_trap_electrodes.addWidget(self.trapCompD.sb, 2, 4)
        self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapCompOven.name), 1, 5), self.layout_trap_electrodes.addWidget(self.trapCompOven.sb, 1, 6)
        self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapCompExYb.name), 2, 5), self.layout_trap_electrodes.addWidget(self.trapCompExYb.sb, 2, 6)
        
###########################################################
        #all shutter start in False: 
        self.shutters = [self.shutter397, self.shutter866, self.shutter423, self.shutterLED]
        try:
            for sh in self.shutters:
                sh.DO.set_out(True)
        except:
            pass    
###############################################################################
        #   read wavemeter
        self.wavemeter = burleighWM(self.layoutWM, self.dWM)
        self.wm_coherent = coherentWM(self.layoutWM_coherent, self.dWM_coherent)

###############################################################################

if __name__ == '__main__':
    app = QtGui.QApplication([])
    myGuiMainWIndow = GuiMainWindow()
    app.setStyleSheet(qdarkstyle.load_stylesheet_from_environment(is_pyqtgraph=True)) # set dark style
    app_icon = QtGui.QIcon()
    app_icon.addFile('snuffles.png')
    app.setWindowIcon(app_icon)
    sys.exit(app.exec_())
    
#if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
#    QtGui.QApplication.instance().exec_()