From 9acbe7a7a5bc1092ec3aacb33f9b3aadac69e744 Mon Sep 17 00:00:00 2001 From: Lorenzo Pivetta <lorenzo.pivetta@elettra.eu> Date: Wed, 3 Jun 2020 15:34:15 +0200 Subject: [PATCH] Initial import --- Makefile | 18 ++ src/pil-trigger.py | 729 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 747 insertions(+) create mode 100644 Makefile create mode 100644 src/pil-trigger.py diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1e7eb7b --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +NAME = pil-trigger-gui +MAIN = pil-trigger.py + +DIRNAME = $(NAME:-gui=) +PY_FILES += $(wildcard src/*.py) + +default: bin ${PY_FILES} + @cp ${PY_FILES} bin/${DIRNAME} + @echo "#!/bin/bash\nexec ${DIRNAME}/${MAIN}" > bin/${NAME} + @chmod +x bin/${NAME} bin/${DIRNAME}/${MAIN} + +bin: + @test -d $@ || mkdir -p $@/${DIRNAME} + +clean: + @rm -fr bin/ src/*~ + +.PHONY: clean diff --git a/src/pil-trigger.py b/src/pil-trigger.py new file mode 100644 index 0000000..94fbf19 --- /dev/null +++ b/src/pil-trigger.py @@ -0,0 +1,729 @@ +#!/usr/bin/python + +# restore PIL trigger values and reset Legend BWD interlock +import PyTango +import os +import csv +import time +from PyQt4.QtCore import * +from PyQt4.QtGui import * +import sys + +devicetrgEVR = PyTango.DeviceProxy('ec-pil-plpsr-01/evr/ff100000') +devicetrgDGQ = PyTango.DeviceProxy('pil/delay/dgq_pil.01') +devicetrgSDG = PyTango.DeviceProxy('pil/delay/sdg_pil.01') + +nomecartella = '/home/lfo/data/salvatutto/PIL_trigger/' +os.chdir(nomecartella) +defaultreffile = 'auto' + + +class MainWindow(QDialog): + def __init__(self, parent = None): + super(MainWindow, self).__init__(parent) + #canali + self.scialuppa = [] + self.riga0 = canaleEVR('PIL MASTER', devicetrgEVR, 0, 'Shift all the signals') + self.riga0.sorgente = 'EVR 0' + self.scialuppa.append(self.riga0) + self.riga1 = canaleEVR('TRG PLR01', devicetrgEVR, 1, 'spctm100, hera, trls_pil.02, ccd legend, gentec, spctm500') + self.riga1.sorgente = 'EVR 1' + self.scialuppa.append(self.riga1) + self.riga2 = canaleEVR('CCD INJ & LHL', devicetrgEVR, 2, 'ccd_pil.05, ccd_pil.06, ccd_lhl.01, ccd_lhl.02, ccd_lhl.03') + self.riga2.sorgente = 'EVR 2' + self.scialuppa.append(self.riga2) + self.riga3 = canaleEVR('TRG INJ', devicetrgEVR, 3, 'eml_pil.01') + self.riga3.sorgente = 'EVR 3' + self.scialuppa.append(self.riga3) + self.riga4 = canaleEVR('TRG LHL', devicetrgEVR, 8, 'eml_lhl.01, trls_lhl.02') + self.riga4.sorgente = 'EVR 8' + self.scialuppa.append(self.riga4) + self.riga5 = canaleEVR('CCD PLR01', devicetrgEVR, 9, 'ccd_pil.01, ccd_pil.02, ccd_pil.03, ccd_pil.04') + self.riga5.sorgente = 'EVR 9' + self.scialuppa.append(self.riga5) + self.riga6 = canaleEVR('TRG CTF', devicetrgEVR, 10, 'eml_ctf.01, ccd_ctf.01') + self.riga6.sorgente = 'EVR 10' + self.scialuppa.append(self.riga6) + self.riga7 = canaleEVR('CCD CTF', devicetrgEVR, 11, 'ccd_ctf.02') + self.riga7.sorgente = 'EVR 11' + self.scialuppa.append(self.riga7) + self.riga8 = canaleEVR('CCD LH Trasport', devicetrgEVR, 12, 'ccd_lhl.04') + self.riga8.sorgente = 'EVR 12' + self.scialuppa.append(self.riga8) + self.riga9 = canaleEVR('SCOPE', devicetrgEVR, 13, 'scope-laser-01') + self.riga9.sorgente = 'EVR 13' + self.scialuppa.append(self.riga9) + self.riga10 = canaleDGQ('Laser Master', devicetrgDGQ, 1, 'Shift pump lasers and sdg') + self.riga10.sorgente = 'DGQ 1' + self.scialuppa.append(self.riga10) + self.riga11 = canaleDGQ('EVO 15', devicetrgDGQ, 2, 'evo 15') + self.riga11.sorgente = 'DGQ 2' + self.scialuppa.append(self.riga11) + self.riga12 = canaleDGQ('EVO HE1', devicetrgDGQ, 3, 'evo HE1') + self.riga12.sorgente = 'DGQ 3' + self.scialuppa.append(self.riga12) + self.riga13 = canaleDGQ('EVO HE2', devicetrgDGQ, 4, 'evo HE2') + self.riga13.sorgente = 'DGQ 4' + self.scialuppa.append(self.riga13) + self.riga14 = canaleDGQ('SDG', devicetrgDGQ, 5, 'SDG') + self.riga14.sorgente = 'DGQ 5' + self.scialuppa.append(self.riga14) + self.riga15 = canaleDGQ('PAM', devicetrgDGQ, 6, 'pam_pil.01') + self.riga15.sorgente = 'DGQ 6' + self.scialuppa.append(self.riga15) + self.riga16 = canaleDGQ('Mercury', devicetrgDGQ, 7, 'trls_pil.01') + self.riga16.sorgente = 'DGQ 7' + self.scialuppa.append(self.riga16) + self.riga17 = canaleDGQ('CH H', devicetrgDGQ, 8, 'not connected') + self.riga17.sorgente = 'DGQ 8' + self.scialuppa.append(self.riga17) + self.riga18 = canaleSDG('PC1', devicetrgSDG, 1, 'PC1') + self.riga18.sorgente = 'SDG 1' + self.scialuppa.append(self.riga18) + self.riga19 = canaleSDG('PC2', devicetrgSDG, 2, 'PC2') + self.riga19.sorgente = 'SDG 2' + self.scialuppa.append(self.riga19) + self.titoli = titolicanali(self.riga0.name.geometry(), self.riga0.devicelist.geometry(), self.riga0.delay_read.geometry(), self.riga0.delay_reference.geometry(), self.riga0.delay_write.geometry(), self.riga0.delay_alarm_low.geometry(), self.riga0.delay_alarm_hi.geometry(), self.riga0.width_read.geometry(), self.riga0.width_write.geometry(), self.riga0.enable_read.geometry(), self.riga0.enable_write.geometry(), self.riga0.applica.geometry()) + self.titoli.sorgente = 'titoli 0' + self.scialuppa.append(self.titoli) + self.scrollArea = QScrollArea(self) + self.scrollArea.setWidgetResizable(True) + self.scrollAreaWidgetContents = QWidget(self.scrollArea) + self.scrollArea.setWidget(self.scrollAreaWidgetContents) + #lo_canali = QVBoxLayout() + lo_canali = QVBoxLayout(self.scrollAreaWidgetContents) + lo_canali.addWidget(self.titoli) + lo_canali.addWidget(self.riga0) + lo_canali.addWidget(self.riga1) + lo_canali.addWidget(self.riga2) + lo_canali.addWidget(self.riga3) + lo_canali.addWidget(self.riga4) + lo_canali.addWidget(self.riga5) + lo_canali.addWidget(self.riga6) + lo_canali.addWidget(self.riga7) + lo_canali.addWidget(self.riga8) + lo_canali.addWidget(self.riga9) + lo_canali.addWidget(self.riga10) + lo_canali.addWidget(self.riga11) + lo_canali.addWidget(self.riga12) + lo_canali.addWidget(self.riga13) + lo_canali.addWidget(self.riga14) + lo_canali.addWidget(self.riga15) + lo_canali.addWidget(self.riga16) + lo_canali.addWidget(self.riga17) + lo_canali.addWidget(self.riga18) + lo_canali.addWidget(self.riga19) + lo_canali.setSpacing(0) + for i in range(len(self.scialuppa)): + self.scialuppa[i].delay_alarm_low.hide() + self.scialuppa[i].delay_alarm_hi.hide() + self.scialuppa[i].width_read.hide() + self.scialuppa[i].width_write.hide() + self.scialuppa[i].enable_write.hide() + #altro + self.tempodiriferimento = 0 + self.ladatadelfile = QLineEdit('') + self.ladatadelfile.setReadOnly(1) + self.ladatadelfile.setStyleSheet("background-color: rgb(220, 220, 220)") + self.ladatadelfile.setMinimumWidth(200) + self.EVR_State = QLineEdit('EVR ') + self.EVR_State.setReadOnly(1) + self.DGQ_State = QLineEdit('DGQ ') + self.DGQ_State.setReadOnly(1) + self.SDG_State = QLineEdit('SDG ') + self.SDG_State.setReadOnly(1) + self.DGQ_init = QPushButton('DGQ init') + self.DGQ_init.clicked.connect(self.funzioneapplicatutti) + self.SDG_bwd = QPushButton('reset BWD') + self.SDG_bwd.clicked.connect(self.funzioneapplicatutti) + self.dataflielabel = QLabel('Ref.file:') + self.dataflielabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter) + self.cambiareferencefile = QPushButton('Change ref file') + self.cambiareferencefile.clicked.connect(self.cambiaref) + self.savereferencefile = QPushButton('save read to reference file') + self.savereferencefile.clicked.connect(self.funzionesavereferencefile) + self.copyreadtowrite = QPushButton('copy READ to WRITE') + self.copyreadtowrite.clicked.connect(self.funzionecopyreadtowrite) + self.copyreferencetowrite = QPushButton('copy Ref. value to WRITE') + self.copyreferencetowrite.clicked.connect(self.funzionecopyreferencetowrite) + self.applicatutti = QPushButton('Apply all') + self.applicatutti.clicked.connect(self.funzioneapplicatutti) + self.fixalarmthreshold = QPushButton('fix alarms thresholds') + self.fixalarmthreshold.clicked.connect(self.manosanta) + self.showmore = QCheckBox('show more') + self.showmore.clicked.connect(self.funzioneshowmore) + lo = QGridLayout() + lo.addWidget(self.EVR_State, 1, 0, 1, 1) + lo.addWidget(self.DGQ_State, 1, 1, 1, 1) + lo.addWidget(self.DGQ_init, 1, 2, 1, 1) + lo.addWidget(self.SDG_State, 1, 3, 1, 1) + lo.addWidget(self.SDG_bwd, 1, 4, 1, 1) + lo.addWidget(self.dataflielabel, 1, 5, 1, 1) + lo.addWidget(self.ladatadelfile, 1, 6, 1, 3) + lo.addWidget(self.cambiareferencefile, 1, 9, 1, 1) + lo.addWidget(self.scrollArea, 10, 0, 10, 10) + lo.addWidget(self.savereferencefile, 20, 0, 1, 2) + lo.addWidget(self.copyreadtowrite, 20, 2, 1, 2) + lo.addWidget(self.copyreferencetowrite, 20, 4, 1, 2) + lo.addWidget(self.applicatutti, 20, 6, 1, 2) + lo.addWidget(self.fixalarmthreshold, 20, 8, 1, 2) +# lo.addWidget(self.showmore, 21, 4, 1, 2) + self.setLayout(lo) + self.setWindowTitle("PIL trigger") + self.show() + self.setStyleSheet("QDialog {background-color: rgb(255, 255, 200)}") + #creo il timer + self.timer = QBasicTimer() + self.timer.start(5000, self) + self.update() + + def __del__(self): + self.timer.stop() + pass + + def timerEvent(self, event): + self.update() + + def update(self): + tempista1 = time.time() + # cerco e confronto file reference + files = os.listdir(nomecartella) + ultimo = max(files, key = os.path.getctime) + if defaultreffile == 'auto': + if self.tempodiriferimento != time.localtime(int(os.path.getmtime(ultimo))): + self.tempodiriferimento = time.localtime(int(os.path.getmtime(ultimo))) + if self.tempodiriferimento.tm_min < 10: + self.ladatadelfile.setText(ultimo + ', date ' + str(self.tempodiriferimento.tm_year) + '/' + str(self.tempodiriferimento.tm_mon) + '/' + str(self.tempodiriferimento.tm_mday) + ' ' + str(self.tempodiriferimento.tm_hour) + ':0' + str(self.tempodiriferimento.tm_min)) + else: + self.ladatadelfile.setText(ultimo + ', date ' + str(self.tempodiriferimento.tm_year) + '/' + str(self.tempodiriferimento.tm_mon) + '/' + str(self.tempodiriferimento.tm_mday) + ' ' + str(self.tempodiriferimento.tm_hour) + ':' + str(self.tempodiriferimento.tm_min)) + with open(ultimo) as csvfile: + dizionarioriferimenti = {} + spamreader = csv.reader(csvfile, delimiter=',') + for row in spamreader: + dizionarioriferimenti[row[0]] = row[1] + csvfile.close() + for i in range(len(self.scialuppa)): + if self.scialuppa[i].sorgente == 'titoli 0': + print('') + elif 'DGQ' in self.scialuppa[i].sorgente: + self.scialuppa[i].delay_reference.setText(str(dizionarioriferimenti[self.scialuppa[i].sorgente])) + else: + self.scialuppa[i].delay_reference.setText(dizionarioriferimenti[self.scialuppa[i].sorgente]) + print('Ref.file letto ' + str(time.time()-tempista1)) + else: + ultimo = defaultreffile + self.tempodiriferimento = time.localtime(int(os.path.getmtime(ultimo))) + if self.tempodiriferimento.tm_min < 10: + self.ladatadelfile.setText(ultimo + ', date ' + str(self.tempodiriferimento.tm_year) + '/' + str(self.tempodiriferimento.tm_mon) + '/' + str(self.tempodiriferimento.tm_mday) + ' ' + str(self.tempodiriferimento.tm_hour) + ':0' + str(self.tempodiriferimento.tm_min)) + else: + self.ladatadelfile.setText(ultimo + ', date ' + str(self.tempodiriferimento.tm_year) + '/' + str(self.tempodiriferimento.tm_mon) + '/' + str(self.tempodiriferimento.tm_mday) + ' ' + str(self.tempodiriferimento.tm_hour) + ':' + str(self.tempodiriferimento.tm_min)) + with open(ultimo) as csvfile: + dizionarioriferimenti = {} + spamreader = csv.reader(csvfile, delimiter=',') + for row in spamreader: + dizionarioriferimenti[row[0]] = row[1] + csvfile.close() + for i in range(len(self.scialuppa)): + if self.scialuppa[i].sorgente == 'titoli 0': + print('') + elif 'DGQ' in self.scialuppa[i].sorgente: + self.scialuppa[i].delay_reference.setText(str(dizionarioriferimenti[self.scialuppa[i].sorgente])) + else: + self.scialuppa[i].delay_reference.setText(dizionarioriferimenti[self.scialuppa[i].sorgente]) + print('Ref.file letto ' + str(time.time()-tempista1)) + #lettura stati device + tempista2 = time.time() + lettura_stato_evr = str(devicetrgEVR.State()) + lettura_stato_dgq = str(devicetrgDGQ.State()) + lettura_stato_sdg = str(devicetrgSDG.State()) + if lettura_stato_evr == 'ON': + self.EVR_State.setText('EVR ' + str(lettura_stato_evr)) + self.EVR_State.setStyleSheet("background-color: rgb(0, 255, 0)") + else: + self.EVR_State.setText('EVR ' + str(lettura_stato_evr)) + self.EVR_State.setStyleSheet("background-color: rgb(255, 0, 0)") + if lettura_stato_dgq == 'ON': + self.DGQ_State.setText('DGQ ' + str(lettura_stato_dgq)) + self.DGQ_State.setStyleSheet("background-color: rgb(0, 255, 0)") + else: + self.DGQ_State.setText('DGQ ' + str(lettura_stato_dgq)) + self.DGQ_State.setStyleSheet("background-color: rgb(255, 0, 0)") + if lettura_stato_sdg == 'ON': + self.SDG_State.setText('SDG ' + str(lettura_stato_sdg)) + self.SDG_State.setStyleSheet("background-color: rgb(0, 255, 0)") + else: + self.SDG_State.setText('SDG ' + str(lettura_stato_sdg)) + self.SDG_State.setStyleSheet("background-color: rgb(255, 0, 0)") + print('stati letti ' + str(time.time()-tempista2)) + #leggo tutto EVR + tempista3 = time.time() + EVR_ritardi = devicetrgEVR.ChanDelay + time.sleep(0.05) + #EVR_durate = devicetrgEVR.ChanWidth + #time.sleep(0.05) + EVR_abilitazioni = devicetrgEVR.ChanEnable + for i in range(len(self.scialuppa)): + [strumento, canale] = self.scialuppa[i].sorgente.split(' ') + if strumento == 'EVR': + self.scialuppa[i].delay_read.setText(str(EVR_ritardi[int(canale)])) + #self.scialuppa[i].width_read.setText(str(EVR_durate[int(canale)])) + self.scialuppa[i].enable_write.setChecked(EVR_abilitazioni[int(canale)]) + if EVR_abilitazioni[int(canale)]: + self.scialuppa[i].enable_read.setStyleSheet("background-color: rgb(0, 255, 0)") + else: + self.scialuppa[i].enable_read.setStyleSheet("background-color: rgb(255, 0, 0)") + print('EVR letto ' + str(time.time()-tempista3)) + #leggo canali DGQ + tempista4 = time.time() + leggipropriotutto = self.showmore.isChecked() + self.riga10.funzioneaggiornavalori(leggipropriotutto) + time.sleep(0.05) + self.riga11.funzioneaggiornavalori(leggipropriotutto) + time.sleep(0.05) + self.riga12.funzioneaggiornavalori(leggipropriotutto) + time.sleep(0.05) + self.riga13.funzioneaggiornavalori(leggipropriotutto) + time.sleep(0.05) + self.riga14.funzioneaggiornavalori(leggipropriotutto) + time.sleep(0.05) + self.riga15.funzioneaggiornavalori(leggipropriotutto) + time.sleep(0.05) + self.riga16.funzioneaggiornavalori(leggipropriotutto) + time.sleep(0.05) + self.riga17.funzioneaggiornavalori(leggipropriotutto) + time.sleep(0.05) + print('DGQ letto ' + str(time.time()-tempista4)) + #leggo canali SDG + tempista5 = time.time() + self.riga18.funzioneaggiornavalori() + time.sleep(0.05) + self.riga19.funzioneaggiornavalori() + print('SDG letto ' + str(time.time()-tempista5)) + # comparazione read-reference + tempista6 = time.time() + for i in range(len(self.scialuppa)): + if self.scialuppa[i].sorgente != 'titoli 0': + if float(self.scialuppa[i].delay_read.text()) != float(self.scialuppa[i].delay_reference.text()): + self.scialuppa[i].delay_read.setStyleSheet("background-color: rgb(255, 150, 150)") + else: + self.scialuppa[i].delay_read.setStyleSheet("background-color: rgb(220, 220, 220)") + print('confronto fatto ' + str(time.time()-tempista6)) + tempista7 = time.time() + print('Done ' + str(tempista7-tempista1)) + + def funzionecopyreadtowrite(self): + for i in range(len(self.scialuppa)): + [strumento, canale] = self.scialuppa[i].sorgente.split(' ') + if strumento != 'titoli': + self.scialuppa[i].delay_write.setValue(float(self.scialuppa[i].delay_read.text())) + + def funzionecopyreferencetowrite(self): + for i in range(len(self.scialuppa)): + [strumento, canale] = self.scialuppa[i].sorgente.split(' ') + if strumento != 'titoli': + self.scialuppa[i].delay_write.setValue(float(self.scialuppa[i].delay_reference.text())) + + def funzioneshowmore(self): + if self.showmore.isChecked(): + for i in range(len(self.scialuppa)): + self.scialuppa[i].width_read.show() + self.scialuppa[i].width_write.show() + self.scialuppa[i].enable_write.show() + window.resize(larghezzaaltezza[0]/3, larghezzaaltezza[1]/2) + else: + for i in range(len(self.scialuppa)): + self.scialuppa[i].width_read.hide() + self.scialuppa[i].width_write.hide() + self.scialuppa[i].enable_write.hide() + window.resize(larghezzaaltezza[0]/4, larghezzaaltezza[1]/2) + + def funzionesavereferencefile(self): + self.msgBox = QMessageBox() + self.msgBox.setIcon(QMessageBox.Question) + self.msgBox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) + self.msgBox.setText("Are you sure?") + risp = self.msgBox.exec_() + if risp == 1024: + files = os.listdir(nomecartella) + ultimo = max(files, key = os.path.getctime) + tmp0 = ultimo.split('.') + tmp = tmp0[0].split('_') + tmp[0] = str(int(tmp[0])+1) + commento, ok = QInputDialog.getText(self, 'Add comment', 'Add comment') + nuovofile = tmp[0] + '_' + commento + '.' + tmp0[1] + with open(nuovofile, 'wb') as csvfile: + spamwriter = csv.writer(csvfile) + for i in range(len(self.scialuppa)): + if self.scialuppa[i].sorgente == 'titoli 0': + print(' ') +# elif 'DGQ' in self.scialuppa[i].sorgente: +# dato = float(self.scialuppa[i].delay_read.text()) +# riga = [str(self.scialuppa[i].sorgente), str(dato)] +# spamwriter.writerow(riga) + else: + riga = [str(self.scialuppa[i].sorgente), str(self.scialuppa[i].delay_read.text())] + print(riga) + spamwriter.writerow(riga) + csvfile.close() + testo = 'file saved as ' + nuovofile + chiarifica = QMessageBox() + chiarifica.setIcon(QMessageBox.Information) + chiarifica.setWindowTitle('Save PIL trigger') + chiarifica.setText(testo) + chiarifica.setStyleSheet("background-color: rgb(255, 255, 200)") + chiarifica.exec_() + pass + + def funzioneapplicatutti(self): + for i in range(len(self.scialuppa)): + if self.scialuppa[i].sorgente != 'titoli 0': + self.scialuppa[i].funzioneapplica() + + def cambiaref(self): + # change reference file + filename = QFileDialog.getOpenFileName() + nuovoreference = filename.split('/')[-1] + global defaultreffile + defaultreffile = nuovoreference + + def inizializzaquantum(self): + devicetrgDGQ.command_inout('Init') + + def resetSDGbwd(self): + devicetrgSDG.command_inout('ResetBwd') + + def manosanta(self): + # fix alarms thresholds + canali = [0, 1, 2, 3, 8, 9, 10, 11, 12, 13] + for corridore in range(len(canali)): + lettura = eval('devicetrgEVR.Chan' + str(canali[corridore]) + 'Delay') + altro = eval('devicetrgEVR.get_attribute_config_ex("Chan' + str(canali[corridore]) + 'Delay")') + print(type(lettura)) + altro[0].alarms.min_alarm = str(float(lettura) - 1.0) + altro[0].alarms.max_alarm = str(float(lettura) + 1.0) + altro[0].alarms.min_warning = 'Not specified' + altro[0].alarms.max_warning = 'Not specified' + devicetrgEVR.set_attribute_config(altro) + time.sleep(0.3) + # DGQ + canali = [1, 2, 3, 4, 5, 6, 7, 8] + for corridore in range(len(canali)): + lettura = eval('devicetrgDGQ.Chan' + str(canali[corridore]) + 'Delay') + altro = eval('devicetrgDGQ.get_attribute_config_ex("Chan' + str(canali[corridore]) + 'Delay")') + print(type(lettura)) + altro[0].alarms.min_alarm = str(float(lettura) - 1.0) + altro[0].alarms.max_alarm = str(float(lettura) + 1.0) + altro[0].alarms.min_warning = 'Not specified' + altro[0].alarms.max_warning = 'Not specified' + devicetrgDGQ.set_attribute_config(altro) + time.sleep(0.3) + # SDG + lettura = devicetrgSDG.Channel1Delay + altro = devicetrgSDG.get_attribute_config_ex('Channel1Delay') + altro[0].alarms.min_alarm = str(float(lettura) - 0.1) + altro[0].alarms.max_alarm = str(float(lettura) + 0.1) + altro[0].alarms.min_warning = 'Not specified' + altro[0].alarms.max_warning = 'Not specified' + devicetrgSDG.set_attribute_config(altro) + time.sleep(0.5) + lettura = devicetrgSDG.Channel2Delay + altro = devicetrgSDG.get_attribute_config_ex('Channel2Delay') + altro[0].alarms.min_alarm = str(float(lettura) - 0.1) + altro[0].alarms.max_alarm = str(float(lettura) + 0.1) + altro[0].alarms.min_warning = 'Not specified' + altro[0].alarms.max_warning = 'Not specified' + devicetrgSDG.set_attribute_config(altro) + +class canaleEVR(QWidget): + def __init__(self, nome, dev, ch, info, parent = None): + super(canaleEVR, self).__init__(parent) + self.name = QLabel('EVR - ' + nome) + self.name.setMinimumWidth(180) + self.devicelist = QPushButton('i') + self.devicelist.clicked.connect(lambda: self.funzionemostradevice(info)) + self.devicelist.setMaximumWidth(20) + self.delay_read = QLineEdit('') + self.delay_read.setReadOnly(1) + self.delay_read.setFont(font_importante) + self.delay_read.setStyleSheet("background-color: rgb(220, 220, 220)") + self.delay_reference = QLineEdit('') + self.delay_reference.setReadOnly(1) + self.delay_reference.setStyleSheet("background-color: rgb(220, 220, 220)") + self.delay_write = QDoubleSpinBox() + self.delay_write.setDecimals(3) + self.delay_write.setMaximum(10000000.000) + self.delay_write.setSingleStep(12.675) + self.delay_alarm_low = QLineEdit('') + self.delay_alarm_low.setStyleSheet("background-color: rgb(220, 220, 220)") + self.delay_alarm_hi = QLineEdit('') + self.delay_alarm_hi.setStyleSheet("background-color: rgb(220, 220, 220)") + self.width_read = QLineEdit('') + self.width_read.setReadOnly(1) + self.width_read.setStyleSheet("background-color: rgb(220, 220, 220)") + self.width_write = QLineEdit('') + self.enable_read = QLineEdit('') + self.enable_read.setMaximumWidth(20) + self.enable_write = QCheckBox() + self.applica = QPushButton('Apply') + self.applica.clicked.connect(lambda: self.funzioneapplica()) + self.dev = dev + self.ch = ch + layoutriga = QHBoxLayout() + layoutriga.addWidget(self.name) + layoutriga.addWidget(self.devicelist) + layoutriga.addWidget(self.delay_reference) + layoutriga.addWidget(self.delay_read) + layoutriga.addWidget(self.delay_write) + layoutriga.addWidget(self.delay_alarm_low) + layoutriga.addWidget(self.delay_alarm_hi) + layoutriga.addWidget(self.width_read) + layoutriga.addWidget(self.width_write) + layoutriga.addWidget(self.enable_read) + layoutriga.addWidget(self.enable_write) + layoutriga.addWidget(self.applica) + self.setLayout(layoutriga) + def funzionemostradevice(self, info): + msg = QMessageBox() + msg.setIcon(QMessageBox.Information) + msg.setInformativeText(info) + titolone = self.sorgente.split(' ') + msg.setText('Event receiver channel ' + str(titolone[1])) + msg.setWindowTitle('Info') + msg.exec_() + def funzioneapplica(self): + print(self.delay_write.value()) + eval('self.dev.write_attribute("Chan' + str(self.ch) + 'Delay", float(self.delay_write.value()))') + +class canaleDGQ(QWidget): + def __init__(self, nome, dev, ch, info, parent = None): + super(canaleDGQ, self).__init__(parent) + self.name = QLabel('DGQ - ' + nome) + self.name.setMinimumWidth(180) + self.devicelist = QPushButton('i') + self.devicelist.clicked.connect(lambda: self.funzionemostradevice(info)) + self.devicelist.setMaximumWidth(20) + self.delay_read = QLineEdit('') + self.delay_read.setReadOnly(1) + self.delay_read.setFont(font_importante) + self.delay_read.setStyleSheet("background-color: rgb(220, 220, 220)") + self.delay_reference = QLineEdit('') + self.delay_reference.setReadOnly(1) + self.delay_reference.setStyleSheet("background-color: rgb(220, 220, 220)") + self.delay_write = QDoubleSpinBox() + self.delay_write.setDecimals(3) + self.delay_write.setMaximum(20000000.000) + self.delay_write.setSingleStep(0.25) + self.delay_alarm_low = QLineEdit('') + self.delay_alarm_low.setStyleSheet("background-color: rgb(220, 220, 220)") + self.delay_alarm_hi = QLineEdit('') + self.delay_alarm_hi.setStyleSheet("background-color: rgb(220, 220, 220)") + self.width_read = QLineEdit('') + self.width_read.setReadOnly(1) + self.width_read.setStyleSheet("background-color: rgb(220, 220, 220)") + self.width_write = QLineEdit('') + self.enable_read = QLineEdit('') + self.enable_read.setMaximumWidth(20) + self.enable_write = QCheckBox() + self.applica = QPushButton('Apply') + self.applica.clicked.connect(lambda: self.funzioneapplica()) + self.dev = dev + self.ch = ch + layoutriga = QHBoxLayout() + layoutriga.addWidget(self.name) + layoutriga.addWidget(self.devicelist) + layoutriga.addWidget(self.delay_reference) + layoutriga.addWidget(self.delay_read) + layoutriga.addWidget(self.delay_write) + layoutriga.addWidget(self.delay_alarm_low) + layoutriga.addWidget(self.delay_alarm_hi) + layoutriga.addWidget(self.width_read) + layoutriga.addWidget(self.width_write) + layoutriga.addWidget(self.enable_read) + layoutriga.addWidget(self.enable_write) + layoutriga.addWidget(self.applica) + self.setLayout(layoutriga) + def funzionemostradevice(self, info): + msg = QMessageBox() + msg.setIcon(QMessageBox.Information) + msg.setInformativeText(info) + titolone = self.sorgente.split(' ') + msg.setText('Quantum channel ' + str(titolone[1])) + msg.setWindowTitle('Info') + msg.exec_() + def funzioneapplica(self): + valore = self.delay_write.value() + print(valore) + eval('self.dev.write_attribute("chan' + str(self.ch) + 'delay, valore)') + def funzioneaggiornavalori(self, tutto): + try: + ritardo = eval('self.dev.chan' + str(self.ch) + 'delay') + abilitazione = eval('self.dev.chan' + str(self.ch) + 'enable') + if tutto: + durata = eval('self.dev.chan' + str(self.ch) + 'width') + except: + ritardo = -99999 + abilitazione = False + if tutto: + durata = -99999 + if abilitazione: + self.enable_read.setStyleSheet("background-color: rgb(0, 255, 0)") + self.enable_write.setChecked(abilitazione) + else: + self.enable_read.setStyleSheet("background-color: rgb(255, 0, 0)") + self.enable_write.setChecked(abilitazione) + self.delay_read.setText(str(ritardo)) + if tutto: + self.width_read.setText(str(durata)) + +class canaleSDG(QWidget): + def __init__(self, nome, dev, ch, info, parent = None): + super(canaleSDG, self).__init__(parent) + self.name = QLabel('SDG - ' + nome) + self.name.setMinimumWidth(180) + self.devicelist = QPushButton('i') + self.devicelist.clicked.connect(lambda: self.funzionemostradevice(info)) + self.devicelist.setMaximumWidth(20) + self.delay_read = QLineEdit('') + self.delay_read.setReadOnly(1) + self.delay_read.setFont(font_importante) + self.delay_read.setStyleSheet("background-color: rgb(220, 220, 220)") + self.delay_reference = QLineEdit('') + self.delay_reference.setReadOnly(1) + self.delay_reference.setStyleSheet("background-color: rgb(220, 220, 220)") + self.delay_write = QDoubleSpinBox() + self.delay_write.setDecimals(3) + self.delay_write.setMaximum(20000000.000) + self.delay_write.setSingleStep(0.25) + self.delay_alarm_low = QLineEdit('') + self.delay_alarm_low.setStyleSheet("background-color: rgb(220, 220, 220)") + self.delay_alarm_hi = QLineEdit('') + self.delay_alarm_hi.setStyleSheet("background-color: rgb(220, 220, 220)") + self.width_read = QLineEdit('') + self.width_write = QLineEdit('') + self.enable_read = QLineEdit('') + self.enable_read.setMaximumWidth(20) + self.enable_write = QCheckBox() + self.applica = QPushButton('Apply') + self.applica.clicked.connect(lambda: self.funzioneapplica()) + self.dev = dev + self.ch = ch + layoutriga = QHBoxLayout() + layoutriga.addWidget(self.name) + layoutriga.addWidget(self.devicelist) + layoutriga.addWidget(self.delay_reference) + layoutriga.addWidget(self.delay_read) + layoutriga.addWidget(self.delay_write) + layoutriga.addWidget(self.delay_alarm_low) + layoutriga.addWidget(self.delay_alarm_hi) + layoutriga.addWidget(self.width_read) + layoutriga.addWidget(self.width_write) + layoutriga.addWidget(self.enable_read) + layoutriga.addWidget(self.enable_write) + layoutriga.addWidget(self.applica) + self.setLayout(layoutriga) + def funzionemostradevice(self, info): + msg = QMessageBox() + msg.setIcon(QMessageBox.Information) + msg.setInformativeText(info) + titolone = self.sorgente.split(' ') + msg.setText('SDG channel ' + str(titolone[1])) + msg.setWindowTitle('Info') + msg.exec_() + def funzioneapplica(self): + valore = self.delay_write.value() + eval('self.dev.command_inout("SetDelay", [' + str(self.ch) + ', valore])') + def funzioneaggiornavalori(self): + try: + ritardo = eval('self.dev.Channel' + str(self.ch) + 'Delay') + abilitazione = eval('self.dev.Channel' + str(self.ch) + 'State') + self.delay_read.setText(str(ritardo)) + except: + self.delay_read.setText(str(-99999)) + abilitazione = False + if abilitazione: + self.enable_read.setStyleSheet("background-color: rgb(0, 255, 0)") + self.enable_write.setChecked(abilitazione) + else: + self.enable_read.setStyleSheet("background-color: rgb(255, 0, 0)") + self.enable_write.setChecked(abilitazione) + + +class titolicanali(QWidget): + def __init__(self, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, parent = None): + super(titolicanali, self).__init__(parent) + self.name = QLabel('NAME') + self.name.setGeometry(in1) + self.name.setAlignment(Qt.AlignRight) + self.devicelist = QLabel(' ') + self.devicelist.setGeometry(in2) + self.delay_read = QLabel('READ') + self.delay_read.setFont(font_importante) + self.delay_read.setAlignment(Qt.AlignRight) + self.delay_read.setGeometry(in3) + self.delay_reference = QLabel('Ref. value') + self.delay_reference.setAlignment(Qt.AlignRight) + self.delay_reference.setGeometry(in4) + self.delay_write = QLabel('') + self.delay_write.setAlignment(Qt.AlignRight) + self.delay_write.setGeometry(in5) + self.delay_alarm_low = QLabel('Alarm lo') + self.delay_alarm_low.setAlignment(Qt.AlignRight) + self.delay_alarm_low.setGeometry(in6) + self.delay_alarm_hi = QLabel('Alarm hi') + self.delay_alarm_hi.setAlignment(Qt.AlignRight) + self.delay_alarm_hi.setGeometry(in7) + self.width_read = QLabel('Width R') + self.width_read.setAlignment(Qt.AlignRight) + self.width_read.setGeometry(in8) + self.width_write = QLabel('Width W') + self.width_write.setAlignment(Qt.AlignRight) + self.width_write.setGeometry(in9) + self.enable_read = QLabel(' ') + self.enable_read.setGeometry(in10) + self.enable_write = QLabel('ACTIVE') + self.enable_write.setAlignment(Qt.AlignRight) + self.enable_write.setGeometry(in11) + self.applica = QLabel(' ') + self.applica.setGeometry(in12) + layoutriga = QHBoxLayout() + layoutriga.addWidget(self.name) + layoutriga.addWidget(self.devicelist) + layoutriga.addWidget(self.delay_reference) + layoutriga.addWidget(self.delay_read) + layoutriga.addWidget(self.delay_write) + layoutriga.addWidget(self.delay_alarm_low) + layoutriga.addWidget(self.delay_alarm_hi) + layoutriga.addWidget(self.width_read) + layoutriga.addWidget(self.width_write) + layoutriga.addWidget(self.enable_read) + layoutriga.addWidget(self.enable_write) + layoutriga.addWidget(self.applica) + self.setLayout(layoutriga) + + +if __name__ == '__main__': + app = QApplication([]) + try: + tmpdim = sys.argv[1] + tmpdim = tmpdim.split('x') + dimensione = [float(tmpdim[0]), float(tmpdim[1])] + except: + screen = QDesktopWidget().screenGeometry() + larghezzaaltezza = [screen.width(), screen.height()] + print(larghezzaaltezza) + if max(larghezzaaltezza) > 3000: + dimensione = max(larghezzaaltezza)*0.38 + elif max(larghezzaaltezza) > 2000: + dimensione = max(larghezzaaltezza)*0.6 + elif max(larghezzaaltezza) > 1000: + dimensione = max(larghezzaaltezza)*0.7 + else: + dimensione = max(larghezzaaltezza)*2 + font_grande = QFont("Arial", round(dimensione/100.0), -1, False) + font_importante = QFont("Arial", round(dimensione/130.0), 1, True) + font_pannello = QFont("Arial", round(dimensione/140.0), -1, False) + app.setFont(font_pannello) + window = MainWindow() + window.resize(larghezzaaltezza[0]/4, larghezzaaltezza[1]/2) + window.show() + app.exec_() -- GitLab