From 13c86a60b3ddb624ca1fde0d0b2c0d76550be463 Mon Sep 17 00:00:00 2001
From: Lorenzo Pivetta <lorenzo.pivetta@elettra.eu>
Date: Mon, 18 May 2020 12:49:40 +0200
Subject: [PATCH] Initial import

---
 .gitignore                  |    1 +
 Makefile                    |   18 +
 src/slu-delay-calculator.py | 1413 +++++++++++++++++++++++++++++++++++
 3 files changed, 1432 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 Makefile
 create mode 100644 src/slu-delay-calculator.py

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..8932bf2
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,18 @@
+NAME = slu-delay-calculator-gui
+MAIN = slu-delay-calculator.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/slu-delay-calculator.py b/src/slu-delay-calculator.py
new file mode 100644
index 0000000..1d0a069
--- /dev/null
+++ b/src/slu-delay-calculator.py
@@ -0,0 +1,1413 @@
+#!/usr/bin/python 
+
+import PyTango
+import os
+import numpy as np
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+import time
+import sys
+
+selettore = PyTango.DeviceProxy("sl/laser/calendar_sl.01").activityNum
+print(selettore)
+
+
+try:
+    sistema = sys.argv[1]
+except:
+    sistema = 'slu'
+    
+print(sistema)
+
+devprodic = {}
+devprodic["trls4"] = PyTango.DeviceProxy("sl/motor/trls_sl.04")
+devprodic["trls8"] = PyTango.DeviceProxy("sl/motor/trls_sl.08")
+devprodic["triggerEVR"] = PyTango.DeviceProxy("ec-sl-slpsr-01/evr/ff100000")
+devprodic["triggerSDG1"] = PyTango.DeviceProxy("sl/delay/dgq_slpsr.02")
+devprodic["triggerSDG2"] = PyTango.DeviceProxy("sl/delay/dgq_slpsr.01")
+devprodic["tmu"] = PyTango.DeviceProxy("sl/timing/tmu_sl.01")
+devprodic["minimizzatore_correlazione"] = PyTango.DeviceProxy("f/optimization/optimizer_sldelay_f.01")
+devprodic["feedbackelite1"] = PyTango.DeviceProxy("sl/feedback/rtltf_osc.02")
+
+# imposto subito velocita` 100 per salvare tempo procedura
+devprodic["trls8"].write_attribute("Speed", [-100])
+devprodic["trls4"].write_attribute("Speed", [100])
+
+zero_Slu = 0
+zero_Fel1 = 0
+zero_Fel2 = 0
+zero_Eos1 = 0
+zero_Eos2 = 0
+trlsEOS2pos = 0
+trlsEOS1pos = 0
+trlsSLUpos = 0
+deltasdg1 = 203806.0
+deltasdg2 = 202949.0
+
+####ns12 = 12.675074466
+
+#### Fel1 Elite1, Slu Elite 2
+###Fel1 = TRLS4_78MHz + TRLS8 + Trg_E1
+###Slu = TRLS4_78MHz + Trg_E2 + TRLS_Slu
+###TRLS4_78MHz = Fel1 - Slu + Fel1 - Trg_E2 + TRLS_Slu
+###TRLS8 = Slu - Fel1 - Trg_E1 - Trg_E2 - TRLS_Slu
+###Trg_SDG1
+###Trg_SDG2
+
+#### Fel2 Elite2, Slu + Eos2 + Eehg Elite1
+###Fel2 = TRLS4_78MHz + Trg_E2
+###Slu = TRLS4_78MHz + TRLS8 + Trg_E1 + TRLS_Slu
+###TRLS4_78MHz = Fel2 - Trg_E2
+###TRLS8 = Slu - Fel2 - Trls_Slu + Trg_E2 - Trg_E1
+###Trg_SDG1
+###Trg_SDG2
+
+class MainWindow(QDialog):
+    def __init__(self, parent=None):
+        super(MainWindow, self).__init__(parent)
+        #meglio scrivere per chi faccio i conti
+        self.funzionamento = QLineEdit("No errors")
+        self.funzionamento.setReadOnly(1)
+        self.funzionamento.setStyleSheet("background-color: rgb(0, 255, 0)")
+        #self.funzionamento.setMaximumWidth(40)
+        self.selezione = QLineEdit("")
+        self.selezione.setReadOnly(1)
+        if selettore >= 1 and selettore <= 6:
+            self.selezione.setText('elite1 x fel, elite2 x slu')
+        elif selettore >= 7 and selettore <= 11:
+            self.selezione.setText('elite1 x slu, elite2 x fel')
+        else:
+            self.selezione.setText('not possible to decide what to move accordin sl calendar')
+        self.lanciasalvatrigger = QPushButton("Save Trigger")
+        self.lanciasalvatrigger.clicked.connect(self.pannellosalvatrigger)
+        self.gruppodeltat = QGroupBox("Delta t")
+        self.SLFELdelta_t = QLineEdit("ns")
+        self.SLFELcalcola = QPushButton("Calculate")
+        self.SLFELcalcola.clicked.connect(self.calcola1)
+        self.SLFELcalcola.setToolTip('self.calcola1')
+        self.SLUdelta_t = QLineEdit("ns")
+        self.SLUcalcola = QPushButton("Calculate")
+        self.SLUcalcola.clicked.connect(self.calcola2)
+        self.SLUcalcola.setToolTip('self.calcola2')
+        self.figura = QLabel()
+        pixmap = QPixmap('/home/lfo/devel/fermi/panels/laser/sludelaycalculator/verso_delay_slu.png')
+        self.figura.setPixmap(pixmap)
+        lo_delta = QGridLayout()
+        lo_delta.addWidget(self.figura, 0, 0, 1, 3)
+        if sistema == 'seed':
+            lo_delta.addWidget(QLabel("SLFEL delta t"), 1, 0, 1, 1)
+            lo_delta.addWidget(self.SLFELdelta_t, 1, 1, 1, 1)
+            lo_delta.addWidget(self.SLFELcalcola, 1, 2, 1, 1)
+        else:
+            lo_delta.addWidget(QLabel("SLU delta t"), 1, 0, 1, 1)
+            lo_delta.addWidget(self.SLUdelta_t, 1, 1, 1, 1)
+            lo_delta.addWidget(self.SLUcalcola, 1, 2, 1, 1)
+        self.gruppodeltat.setLayout(lo_delta)
+        #
+        self.gruppobottoni = QGroupBox("")
+        self.apriscope3 = QPushButton('Open scope-laser-03')
+        self.apriscope3.clicked.connect(self.fapriscope3)
+        self.apriscope5 = QPushButton('Open scope-laser-05')
+        self.apriscope5.clicked.connect(self.fapriscope5)
+        self.apritrigger = QPushButton('Open Seed trigger panel')
+        self.apritrigger.clicked.connect(self.fapritrigger)
+        self.aprihdb = QPushButton('Open HDB')
+        self.aprihdb.clicked.connect(self.faprihdb)
+        lo_bottoni = QGridLayout()
+        lo_bottoni.addWidget(self.apriscope3, 0, 0, 1, 3)
+        lo_bottoni.addWidget(self.apriscope5, 1, 0, 1, 3)
+        lo_bottoni.addWidget(self.apritrigger, 2, 0, 1, 3)
+        lo_bottoni.addWidget(self.aprihdb, 3, 0, 1, 3)
+        self.gruppobottoni.setLayout(lo_bottoni)
+        #
+        self.gruppoiniziale = QGroupBox("0 State")
+        self.trg1_state = QLineEdit("TRG Elite1/SDG1")
+        self.trg1_state.setMaximumWidth(150)
+        self.trg1_state.setReadOnly(1)
+        self.trg2_state = QLineEdit("TRG Elite2/SDG2")
+        self.trg2_state.setMaximumWidth(150)
+        self.trg2_state.setReadOnly(1)
+        self.trls4_state = QPushButton("TRLS4")
+        self.trls4_state.clicked.connect(self.apritrls4)
+        self.trls4_state.setMaximumWidth(150)
+        self.FundAlignment_state = QLineEdit("TMU")
+        self.FundAlignment_state.setMaximumWidth(150)
+        self.FundAlignment_state.setReadOnly(1)
+        self.trls8_state = QPushButton("TRLS8")
+        self.trls8_state.clicked.connect(self.apritrls8)
+        self.trls8_state.setMaximumWidth(150)
+        self.SLFELiniziale = QLineEdit("")
+        self.SLFELiniziale.setMaximumWidth(150)
+        self.SLFELiniziale.setReadOnly(1)
+        self.SLUiniziale = QLineEdit("")
+        self.SLUiniziale.setMaximumWidth(150)
+        self.SLUiniziale.setReadOnly(1)
+        #self.EOSiniziale = QLineEdit("#####")
+        #self.EOSiniziale.setDisabled(1)
+        #self.EOSiniziale.setMaximumWidth(150)
+        #self.EOSiniziale.setReadOnly(1)
+        self.trls4_iniziale = QLineEdit("")
+        self.trls4_iniziale.setMaximumWidth(150)
+        self.trls4_iniziale.setReadOnly(1)
+        self.trls8_iniziale = QLineEdit("")
+        self.trls8_iniziale.setMaximumWidth(150)
+        self.trls8_iniziale.setReadOnly(1)
+        self.trgM1_iniziale = QLineEdit("")
+        self.trgM1_iniziale.setMaximumWidth(150)
+        self.trgM1_iniziale.setReadOnly(1)
+        self.trgSDG1_iniziale = QLineEdit("")
+        self.trgSDG1_iniziale.setMaximumWidth(150)
+        self.trgSDG1_iniziale.setReadOnly(1)
+        self.trgM2_iniziale = QLineEdit("")
+        self.trgM2_iniziale.setMaximumWidth(150)
+        self.trgM2_iniziale.setReadOnly(1)
+        self.trgSDG2_iniziale = QLineEdit("")
+        self.trgSDG2_iniziale.setMaximumWidth(150)
+        self.trgSDG2_iniziale.setReadOnly(1)
+        self.FundAlignment_iniziale = QLineEdit("")
+        self.FundAlignment_iniziale.setMaximumWidth(150)
+        self.FundAlignment_iniziale.setReadOnly(1)
+        self.ripristina = QPushButton("Restore 0state")
+        self.ripristina.clicked.connect(self.ripristino)
+        lo_iniziale = QGridLayout()
+        lo_iniziale.addWidget(QLabel("delay SLFEL"), 0, 0, 1, 1)
+        lo_iniziale.addWidget(self.SLFELiniziale, 0, 1, 1, 1)
+        lo_iniziale.addWidget(QLabel("delay SLU"), 1, 0, 1, 1)
+        lo_iniziale.addWidget(self.SLUiniziale, 1, 1, 1, 1)
+        #lo_iniziale.addWidget(QLabel("delay EOS"), 2, 0, 1, 1)
+        #lo_iniziale.addWidget(self.EOSiniziale, 2, 1, 1, 1)
+        lo_iniziale.addWidget(self.trls4_state, 4, 0, 1, 1)
+        lo_iniziale.addWidget(self.trls4_iniziale, 4, 1, 1, 1)
+        lo_iniziale.addWidget(self.trls8_state, 5, 0, 1, 1)
+        lo_iniziale.addWidget(self.trls8_iniziale, 5, 1, 1, 1)
+        lo_iniziale.addWidget(self.trg1_state, 6, 0, 2, 1)
+        lo_iniziale.addWidget(self.trgM1_iniziale, 6, 1, 1, 1)
+        lo_iniziale.addWidget(self.trgSDG1_iniziale, 7, 1, 1, 1)
+        lo_iniziale.addWidget(self.trg2_state, 8, 0, 2, 1)
+        lo_iniziale.addWidget(self.trgM2_iniziale, 8, 1, 1, 1)
+        lo_iniziale.addWidget(self.trgSDG2_iniziale, 9, 1, 1, 1)
+        lo_iniziale.addWidget(self.FundAlignment_state, 10, 0, 1, 1)
+        lo_iniziale.addWidget(self.FundAlignment_iniziale, 10, 1, 1, 1)
+        lo_iniziale.addWidget(self.ripristina, 12, 1, 1, 1)
+        self.gruppoiniziale.setLayout(lo_iniziale)
+        #
+        self.gruppolettura = QGroupBox("Present State")
+        self.SLFELdelay = QLineEdit("")
+        self.SLFELdelay.setMaximumWidth(150)
+        self.SLUdelay = QLineEdit("")
+        self.SLUdelay.setMaximumWidth(150)
+        #self.EOSdelay = QLineEdit("#####")
+        #self.EOSdelay.setDisabled(1)
+        #self.EOSdelay.setMaximumWidth(150)
+        self.trls4_read = QLineEdit("")
+        self.trls4_read.setMaximumWidth(150)
+        self.trls4_speed = QLineEdit("")
+        self.trls4_speed.setMaximumWidth(150)
+        self.trls8_read = QLineEdit("")
+        self.trls8_read.setMaximumWidth(150)
+        self.trls8_speed = QLineEdit("")
+        self.trls8_speed.setMaximumWidth(150)
+        self.trgM1_read = QLineEdit("")
+        self.trgM1_read.setMaximumWidth(150)
+        self.trgSDG1_read = QLineEdit("")
+        self.trgSDG1_read.setMaximumWidth(150)
+        self.trgM2_read = QLineEdit("")
+        self.trgM2_read.setMaximumWidth(150)
+        self.trgSDG2_read = QLineEdit("")
+        self.trgSDG2_read.setMaximumWidth(150)
+        self.FundAlignment_read = QLineEdit("")
+        self.FundAlignment_read.setMaximumWidth(150)
+        self.minimcorr = QPushButton("Delay")
+        self.minimcorr.setMaximumWidth(75)
+        self.minimcorr.clicked.connect(self.switchdelayminimizer)
+        self.feedbackelite1 = QLineEdit("fb Elite1")
+        self.feedbackelite1.setMaximumWidth(75)
+        lo_lettura = QGridLayout()
+        lo_lettura.addWidget(self.SLFELdelay, 0, 0, 1, 2)
+        lo_lettura.addWidget(self.SLUdelay, 1, 0, 1, 2)
+        #lo_lettura.addWidget(self.EOSdelay, 2, 0, 1, 2)
+        lo_lettura.addWidget(self.trls4_read, 4, 0, 1, 2)
+        lo_lettura.addWidget(self.trls8_read, 5, 0, 1, 2)
+        lo_lettura.addWidget(self.trgM1_read, 6, 0, 1, 2)
+        lo_lettura.addWidget(self.trgSDG1_read, 7, 0, 1, 2)
+        lo_lettura.addWidget(self.trgM2_read, 8, 0, 1, 2)
+        lo_lettura.addWidget(self.trgSDG2_read, 9, 0, 1, 2)
+        lo_lettura.addWidget(self.FundAlignment_read, 10, 0, 1, 2)
+        lo_lettura.addWidget(self.minimcorr, 11, 0, 1, 1)
+        lo_lettura.addWidget(self.feedbackelite1, 11, 1, 1, 1)
+        self.gruppolettura.setLayout(lo_lettura)
+        #
+        self.gruppocalcolo = QGroupBox("Calculated Values")
+        self.SLFELdelay_calcolato = QLineEdit("")
+        self.SLFELdelay_calcolato.setMaximumWidth(150)
+        self.SLUdelay_calcolato = QLineEdit("")
+        self.SLUdelay_calcolato.setMaximumWidth(150)
+        #self.EOSdelay_calcolato = QLineEdit("#####")
+        #self.EOSdelay_calcolato.setDisabled(1)
+        #self.EOSdelay_calcolato.setMaximumWidth(150)
+        self.trls4_calcolato = QLineEdit("")
+        self.trls4_calcolato.setMaximumWidth(150)
+        self.trls8_calcolato = QLineEdit("")
+        self.trls8_calcolato.setMaximumWidth(150)
+        self.trgM1_calcolato = QLineEdit("")
+        self.trgM1_calcolato.setMaximumWidth(150)
+        self.trgSDG1_calcolato = QLineEdit("")
+        self.trgSDG1_calcolato.setMaximumWidth(150)
+        self.trgM2_calcolato = QLineEdit("")
+        self.trgM2_calcolato.setMaximumWidth(150)
+        self.trgSDG2_calcolato = QLineEdit("")
+        self.trgSDG2_calcolato.setMaximumWidth(150)
+        self.FundAlignment_calcolato = QLineEdit("")
+        self.FundAlignment_calcolato.setMaximumWidth(150)
+        self.FundAlignment_calcolato.setToolTip('if red a change of phase is required, it will take few minutes, please be patient')
+        self.applica = QPushButton("APPLY")
+        self.applica.clicked.connect(self.disastro)
+        self.comenondetto = QPushButton("UNDO")
+        self.comenondetto.clicked.connect(self.doppiodisastro)
+        lo_calcolo = QGridLayout()
+        lo_calcolo.addWidget(self.SLFELdelay_calcolato, 0, 0, 1, 1)
+        lo_calcolo.addWidget(self.SLUdelay_calcolato, 1, 0, 1, 1)
+        #lo_calcolo.addWidget(self.EOSdelay_calcolato, 2, 0, 1, 1)
+        lo_calcolo.addWidget(self.trls4_calcolato, 4, 0, 1, 1)
+        lo_calcolo.addWidget(self.trls8_calcolato, 5, 0, 1, 1)
+        lo_calcolo.addWidget(self.trgM1_calcolato, 6, 0, 1, 1)
+        lo_calcolo.addWidget(self.trgSDG1_calcolato, 7, 0, 1, 1)
+        lo_calcolo.addWidget(self.trgM2_calcolato, 8, 0, 1, 1)
+        lo_calcolo.addWidget(self.trgSDG2_calcolato, 9, 0, 1, 1)
+        lo_calcolo.addWidget(self.FundAlignment_calcolato, 10, 0, 1, 1)
+        lo_calcolo.addWidget(self.applica, 12, 0, 1, 1)
+        lo_calcolo.addWidget(self.comenondetto, 12, 0, 1, 1)
+        self.comenondetto.hide()
+        self.gruppocalcolo.setLayout(lo_calcolo)
+        #
+        self.logbox = QListWidget()
+        self.logbox.setMaximumHeight(50)
+        #self.logbox.setFont(font_piccolo)
+        lo_pannello = QGridLayout()
+        lo_pannello.addWidget(self.funzionamento, 0, 0, 1, 1)
+        lo_pannello.addWidget(self.selezione, 0, 1, 1, 2)
+        lo_pannello.addWidget(self.lanciasalvatrigger, 0, 3, 1, 1)
+        lo_pannello.addWidget(self.gruppodeltat, 1, 0, 1, 3)
+        lo_pannello.addWidget(self.gruppobottoni, 1, 3, 1, 1)
+        lo_pannello.addWidget(self.gruppoiniziale, 2, 0, 1, 2)
+        lo_pannello.addWidget(self.gruppolettura, 2, 2, 1, 1)
+        lo_pannello.addWidget(self.gruppocalcolo, 2, 3, 1, 1)
+        lo_pannello.addWidget(self.logbox, 3, 0, 1, 4)
+        self.setLayout(lo_pannello)
+        self.show()
+        self.setWindowTitle("SLU EASY DELAY V3")
+        #inizializzazione - lettura parametri
+        try:
+            self.zero_trls4 = devprodic["trls4"].Position[0]
+            self.trls4_iniziale.setText(str(round(self.zero_trls4, 3)))
+            #print(self.zero_trls4)
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["trls4"]) + ' Position. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+        try:
+            self.zero_trls8 = devprodic["trls8"].Position[0]
+            self.trls8_iniziale.setText(str(round(self.zero_trls8, 3)))
+            #print(self.zero_trls8)
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["trls8"]) + ' Position. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+        try:
+            self.zero_trgSDG2 = devprodic["triggerSDG2"].command_inout('GetDelay', 2)*1000000000
+            self.trgSDG2_iniziale.setText(str(round(self.zero_trgSDG2, 1)))
+            #print(self.zero_trgSDG2)
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["triggerSDG2"]) + ' SDG2Delay. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+        try:
+            self.zero_trgSDG1 = devprodic["triggerSDG1"].command_inout('GetDelay', 2)*1000000000
+            self.trgSDG1_iniziale.setText(str(round(self.zero_trgSDG1, 1)))
+            #print(self.zero_trgSDG1)
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["triggerSDG1"]) + ' SDG1Delay. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+        try:
+            self.zero_trgM2 = devprodic["triggerEVR"].Chan2Delay
+            self.trgM2_iniziale.setText(str(round(self.zero_trgM2, 1)))
+            #print(self.zero_trgM2)
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["triggerEVR"]) + ' Chan2Delay. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+        try:
+            self.zero_trgM1 = devprodic["triggerEVR"].Chan1Delay
+            self.trgM1_iniziale.setText(str(round(self.zero_trgM1, 1)))
+            #print(self.zero_trgM1)
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["triggerEVR"]) + ' Chan2Delay. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+        try:
+            self.zero_FundAlignment = devprodic["tmu"].PllFundAlignment
+            self.FundAlignment_iniziale.setText(str(self.zero_FundAlignment))
+            if self.zero_FundAlignment == 1:
+                self.zero_FundAlignment_corretto = 1
+            elif self.zero_FundAlignment == -1:
+                self.zero_FundAlignment_corretto = 0
+            else:
+                tmp = devprodic["tmu"].PllFundPhaseVolt
+                if tmp > 1:
+                    self.zero_FundAlignment_corretto = 1
+                else:
+                    self.zero_FundAlignment_corretto = 0
+            #print(self.zero_FundAlignment)
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["tmu"]) + ' PllFundAlignment. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+        # inizializzazione calcolo delay totale fel e slu
+        if (selettore >= 1 and selettore <= 4) or (selettore >= 5 and selettore <= 6): # elite1 x fel, elite2 x slu
+            self.FEL_tot = self.zero_trls4/1000 + int(self.zero_FundAlignment_corretto)*6.33753723 + self.zero_trls8/1000 + self.zero_trgM1 - zero_Fel1
+            self.SLU_tot = self.zero_trls4/1000 + int(self.zero_FundAlignment_corretto)*6.33753723 + self.zero_trgM2 + trlsSLUpos - zero_Slu
+            #self.EOS_tot = '#####' #self.trls4pos + self.read_values_trg_E2 + trlsEOS1pos - zero_Eos1
+            #print(self.zero_FundAlignment_corretto)
+        elif selettore >= 7 and selettore <= 11: # elite1 x slu, elite2 x fel
+            self.FEL_tot = self.zero_trls4/1000 + int(self.zero_FundAlignment_corretto)*6.33753723 + self.zero_trgM2 - zero_Fel2
+            self.SLU_tot = self.zero_trls4/1000 + int(self.zero_FundAlignment_corretto)*6.33753723 + self.zero_trls8/1000 + self.zero_trgM1 + trlsSLUpos - zero_Slu
+            #self.EOS_tot = '#####' #self.trls4pos + self.trls8pos + self.read_values_trg_E1 + trlsEOS2pos - zero_Eos2
+            #print(self.zero_FundAlignment_corretto)
+        else: # altro
+            if selettore < 1 or selettore > 11:
+                ret = QMessageBox.warning(None, 'UNKNOWN ACTIVITY', 'The calendar for SEED Laser has UNKONWN activity, correct the calendar and launch the program again')
+            self.FEL_tot = '#####'
+            self.SLU_tot = '#####'
+            #self.EOS_tot = '#####'
+            #print(self.zero_FundAlignment_corretto)
+        self.SLFELiniziale.setText(str(round(self.FEL_tot, 3)) + ' ns')
+        self.SLUiniziale.setText(str(round(self.SLU_tot, 3)) + ' ns')
+        #self.EOSiniziale.setText('#####')
+        #timer
+        self.timer = QBasicTimer()
+        self.timer.start(500, self)
+        pass
+
+    def timerEvent(self, event):
+        self.update()
+
+    def closeEvent(self, event):
+        devprodic["trls8"].write_attribute("Speed", [-1])
+        devprodic["trls4"].write_attribute("Speed", [1])
+        self.timer.stop()
+        ret = QMessageBox.warning(None, 'Trigger reference file', 'Do not forget to save the new trigger reference file!')
+
+    def update(self):
+        ###simulazione###
+        #self.read_values_trls4_state = "ON"
+        #self.read_values_trls4_position = -175.5
+        #self.read_values_trls8_state = "ON"
+        #self.read_values_trls8_position = 1099.72
+        #self.read_values_trg_state = "ON"
+        #self.read_values_trg_E1 = 365136
+        #self.read_values_trg_E2 = 365819
+        #self.read_values_trg_SDG1 = 3757
+        #self.read_values_trg_SDG2 = 3027
+        #self.locksta = "Locked on CrossCorrelator Signal"
+        #self.tmu79 = 0.8
+        #self.read_values_fbelite1 = "ON"
+        #self.read_values_corrmin = "ON"
+        ###letture###
+        #self.funzionamento.setText('No errors')
+        #self.funzionamento.setStyleSheet("background-color: rgb(0, 255, 0)")
+        try:
+            tmp = devprodic["trls4"].read_attributes(['State', 'Position'])
+            self.read_values_trls4_state = str(tmp[0].value)
+            self.read_values_trls4_position = tmp[1].value[0]
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["trls4"]) + ' State and Position. fix the problem and procede'
+            self.logbox.insertItem(0, voce)
+        try:
+            tmp = devprodic["trls8"].read_attributes(['State', 'Position'])
+            self.read_values_trls8_state = str(tmp[0].value)
+            self.read_values_trls8_position = tmp[1].value[0]
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["trls8"]) + ' State and Position. fix the problem and procede'
+            self.logbox.insertItem(0, voce)
+        try:
+            self.read_values_trg_SDG2 = devprodic["triggerSDG2"].command_inout('GetDelay', 2)*1000000000
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["triggerSDG2"]) + ' SDG2Delay. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+        try:
+            self.read_values_trg_SDG1 = devprodic["triggerSDG1"].command_inout('GetDelay', 2)*1000000000
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["triggerSDG1"]) + ' SDG1Delay. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+        try:
+            tmp = devprodic["triggerEVR"].read_attributes(['State', 'Chan1Delay', 'Chan2Delay'])
+            self.read_values_trg_state = str(tmp[0].value)
+            self.read_values_trg_E1 = tmp[1].value
+            self.read_values_trg_E2 = tmp[2].value
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["triggerEVR"]) + ' State, Chan1Delay, Chan2Delay. fix the problem and procede'
+            self.logbox.insertItem(0, voce)
+        try:
+            tmp = devprodic["tmu"].read_attributes(['LockStatus', 'PllFundAlignment'])
+            self.read_values_locksta = tmp[0].value
+            self.read_values_FundAlignment = tmp[1].value
+            if self.read_values_FundAlignment == 1:
+                self.read_values_FundAlignment_corretto = 1
+            elif self.read_values_FundAlignment == -1:
+                self.read_values_FundAlignment_corretto = 0
+            else:
+                tmp = devprodic["tmu"].PllFundPhaseVolt
+                if tmp > 1:
+                    self.read_values_FundAlignment_corretto = 1
+                else:
+                    self.read_values_FundAlignment_corretto = 0
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["tmu"]) + ' LockStatus, PllFundAlignment. fix the problem and procede'
+            self.logbox.insertItem(0, voce)
+        try:
+            self.read_values_fbelite1 = str(devprodic["feedbackelite1"].command_inout('State'))
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["feedbackelite1"]) + ' State. fix the problem and procede'
+            self.logbox.insertItem(0, voce)
+        try:
+            self.read_values_corrmin = str(devprodic["minimizzatore_correlazione"].command_inout('State'))
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["minimizzatore_correlazione"]) + ' State. fix the problem and procede'
+            self.logbox.insertItem(0, voce)
+        ##calcolo delay cumulativi###
+        self.trls4pos = self.read_values_trls4_position/1000 + int(self.read_values_FundAlignment_corretto)*6.33753723
+        self.trls8pos = self.read_values_trls8_position/1000
+        if (selettore >= 1 and selettore <= 4) or (selettore >= 5 and selettore <= 6): # elite1 x fel, elite2 x slu
+            self.FEL_tot = self.trls4pos + self.trls8pos + self.read_values_trg_E1 - zero_Fel1
+            self.SLU_tot = self.trls4pos + self.read_values_trg_E2 + trlsSLUpos - zero_Slu
+            #self.EOS_tot = '#####' #self.trls4pos + self.read_values_trg_E2 + trlsEOS1pos - zero_Eos1
+        elif selettore >= 7 and selettore <= 11: # elite1 x slu, elite2 x fel
+            self.FEL_tot = self.trls4pos + self.read_values_trg_E2 - zero_Fel2
+            self.SLU_tot = self.trls4pos + self.trls8pos + self.read_values_trg_E1 + trlsSLUpos - zero_Slu
+            #self.EOS_tot = '#####' #self.trls4pos + self.trls8pos + self.read_values_trg_E1 + trlsEOS2pos - zero_Eos2
+        else: # altro
+            self.FEL_tot = '#####'
+            self.SLU_tot = '#####'
+            #self.EOS_tot = '#####'
+        ###aggiornamento pannello###
+        if self.read_values_trls4_state == "ON" or self.read_values_trls4_state == "RUNNING":
+            self.trls4_state.setStyleSheet("background-color: rgb(0, 255, 0)")
+        elif self.read_values_trls4_state == "MOVING":
+            self.trls4_state.setStyleSheet("background-color: rgb(0, 0, 255)")
+        elif self.read_values_trls4_state == "FAULT" or self.read_values_trls4_state == "ALARM":
+            self.trls4_state.setStyleSheet("background-color: rgb(255, 0, 0)")
+        else:
+            self.trls4_state.setStyleSheet("background-color: rgb(150, 150, 150)")
+        if self.read_values_trls8_state == "ON" or self.read_values_trls8_state == "RUNNING":
+            self.trls8_state.setStyleSheet("background-color: rgb(0, 255, 0)")
+        elif self.read_values_trls8_state == "MOVING":
+            self.trls8_state.setStyleSheet("background-color: rgb(0, 0, 255)")
+        elif self.read_values_trls8_state == "FAULT" or self.read_values_trls8_state == "ALARM":
+            self.trls8_state.setStyleSheet("background-color: rgb(255, 0, 0)")
+        else:
+            self.trls8_state.setStyleSheet("background-color: rgb(150, 150, 150)")
+        if self.read_values_trg_state == "ON" or self.read_values_trg_state == "RUNNING":
+            self.trg1_state.setStyleSheet("background-color: rgb(0, 255, 0)")
+            self.trg2_state.setStyleSheet("background-color: rgb(0, 255, 0)")
+        elif self.read_values_trg_state == "MOVING":
+            self.trg1_state.setStyleSheet("background-color: rgb(0, 0, 255)")
+            self.trg2_state.setStyleSheet("background-color: rgb(0, 0, 255)")
+        elif self.read_values_trg_state == "FAULT" or self.read_values_trg_state == "ALARM":
+            self.trg1_state.setStyleSheet("background-color: rgb(255, 0, 0)")
+            self.trg2_state.setStyleSheet("background-color: rgb(255, 0, 0)")
+        else:
+            self.trg1_state.setStyleSheet("background-color: rgb(150, 150, 150)")
+            self.trg2_state.setStyleSheet("background-color: rgb(150, 150, 150)")
+        if self.read_values_corrmin == "ON":
+            self.minimcorr.setStyleSheet("background-color: rgb(0, 255, 0)")
+            self.minimcorr.setText('Delay:ON')
+        elif self.read_values_corrmin == "RUNNING":
+            self.minimcorr.setStyleSheet("background-color: rgb(0, 0, 255)")
+            self.minimcorr.setText('Delay:RUNNING')
+        elif self.read_values_corrmin == "MOVING":
+            self.minimcorr.setStyleSheet("background-color: rgb(0, 0, 255)")
+            self.minimcorr.setText('Delay:MOVING')
+        elif self.read_values_corrmin == "FAULT":
+            self.minimcorr.setStyleSheet("background-color: rgb(255, 0, 0)")
+            self.minimcorr.setText('Delay:FAULT')
+        elif self.read_values_corrmin == "ALARM":
+            self.minimcorr.setStyleSheet("background-color: rgb(255, 255, 0)")
+            self.minimcorr.setText('Delay:ALARM')
+        elif self.read_values_corrmin == "OFF":
+            self.minimcorr.setStyleSheet("background-color: rgb(255, 255, 255)")
+            self.minimcorr.setText('Delay:OFF')
+        else:
+            self.minimcorr.setStyleSheet("background-color: rgb(150, 150, 150)")
+            self.minimcorr.setText('Delay:???')
+        if self.read_values_fbelite1 == "ON" or self.read_values_fbelite1 == "RUNNING":
+            self.feedbackelite1.setStyleSheet("background-color: rgb(0, 255, 0)")
+        elif self.read_values_fbelite1 == "MOVING":
+            self.feedbackelite1.setStyleSheet("background-color: rgb(0, 0, 255)")
+        elif self.read_values_fbelite1 == "FAULT" or self.read_values_fbelite1 == "ALARM":
+            self.feedbackelite1.setStyleSheet("background-color: rgb(255, 0, 0)")
+        else:
+            self.feedbackelite1.setStyleSheet("background-color: rgb(150, 150, 150)")
+        if self.read_values_locksta == "Locked on Cross Correlator Signal":
+            self.FundAlignment_state.setStyleSheet("background-color: rgb(0, 255, 0)")
+        else:
+            self.FundAlignment_state.setStyleSheet("background-color: rgb(255, 0, 0)")
+        self.trls4_read.setText(str(round(self.read_values_trls4_position, 3)) + " ps")
+        self.trls8_read.setText(str(round(self.read_values_trls8_position, 3)) + " ps")
+        self.trgM1_read.setText(str(round(self.read_values_trg_E1, 3)) + " ns")
+        self.trgM2_read.setText(str(round(self.read_values_trg_E2, 3)) + " ns")
+        self.trgSDG1_read.setText(str(round(self.read_values_trg_SDG1, 3)) + " ns")
+        self.trgSDG2_read.setText(str(round(self.read_values_trg_SDG2, 3)) + " ns")
+        self.FundAlignment_read.setText(str(self.read_values_FundAlignment))
+        self.SLFELdelay.setText(str(round(self.FEL_tot, 3)) + ' ns')
+        self.SLUdelay.setText(str(round(self.SLU_tot, 3)) + ' ns')
+        #self.EOSdelay.setText('#####')
+        pass
+
+    def calcola1(self): # muovi SLFEL
+        print('>>>> SLFEL >>>>')
+        ###verifica validita input###
+        test = str(self.SLFELdelta_t.text().replace(',','.').replace('.','').replace(' ','').replace('ns','').replace('-',''))
+        if test.isdigit(): #verifico se input corretto
+            delta_t = float(self.SLFELdelta_t.text().replace(',','.').replace(' ','').replace('ns',''))
+            print('richiesta ' + str(delta_t))
+        else:
+            print('SL delay not a number')
+            return 
+        ###calcolo###
+        if (selettore >= 1 and selettore <= 4) or (selettore >= 5 and selettore <= 6): # elite1 x fel, elite2 x slu 
+            print('elite1 x fel, elite2 x slu')
+            # divido delta_t in trg e resto
+            resto = (delta_t/12.675074466 - int(delta_t/12.675074466))*12.675074466 #ns, avanzo da dare in pasto ai traslatori
+            trg_e1_tmp = self.read_values_trg_E1 + int(delta_t/12.675074466)*12.675074466 #valore tmp, perche potrebbe cambiare di 1 cilclo per via dei traslatori
+            # valuto corsa disponibile sulla slitta, se delta_t oltre i limiti agisco ancora sul trigger
+            if self.trls8pos + resto >= -6.6 and self.trls8pos + resto <= 6.6:
+                print("caso 1: entro i limiti")
+                self.trls8calc = self.trls8pos + resto
+                self.trg_elite1calc = trg_e1_tmp
+            elif self.trls8pos + resto < -6.6:
+                print("caso 2: sotto i limiti")
+                self.trls8calc = self.trls8pos + resto + 12.675074466
+                self.trg_elite1calc = trg_e1_tmp - 12.675074466
+            elif self.trls8pos + resto > 6.6:
+                print("caso 3: sopra i limiti")
+                self.trls8calc = self.trls8pos + resto - 12.675074466
+                self.trg_elite1calc = trg_e1_tmp + 12.675074466
+            self.trg_elite2calc = self.read_values_trg_E2
+            self.trls4calc = self.trls4pos
+            # ricalcolo i delay per controllo
+            self.slfelcal = self.trls4calc + self.trls8calc + self.trg_elite1calc - zero_Fel1
+            self.slucal = self.trls4calc + self.trg_elite2calc + trlsSLUpos - zero_Slu
+            # valuto spostamento SDG
+            discriminante_ampli1 = int(3.3 + self.trls4calc + 6.6 + self.trls8calc)
+            print('discriminante_ampli1 = int(3.3 + ' + str(self.trls4calc) + ' + 6.6 + ' + str(self.trls8calc) + ') = ' +  str(discriminante_ampli1))
+            discriminante_ampli2 = int(3.3 + self.trls4calc)
+            print('discriminante_ampli1 = int(3.3 + ' + str(self.trls4calc) + ') = ' + str(discriminante_ampli2))
+            self.trg_SDG1calc = deltasdg1 + discriminante_ampli1
+            self.trg_SDG2calc = deltasdg2 + discriminante_ampli2
+        elif selettore >= 7 and selettore <= 11: # elite1 x slu, elite2 x fel
+            print('elite1 x slu, elite2 x fel')
+            resto = (delta_t/12.675074466 - int(delta_t/12.675074466))*12.675074466 #ns, avanzo da dare in pasto ai traslatori
+            trg_e2_tmp = self.read_values_trg_E2 + int(delta_t/12.675074466)*12.675074466#valore tmp, perche potrebbe cambiare di 1 cilclo per via dei traslatori
+            # valuto corsa disponibile sulla slitta, se delta_t oltre i limiti agisco ancora sul trigger
+            if self.trls4pos + resto >= -3.168768615 and self.trls4pos + resto <= 9.6:
+                print("caso 1: trls4 entro i limiti")
+                self.trls4calc = self.trls4pos + resto
+                self.trls8calc = self.trls8pos + (self.trls4pos - self.trls4calc)
+                self.trg_elite2calc = trg_e2_tmp
+                self.trg_elite1calc = self.read_values_trg_E1
+            elif self.trls4pos + resto < -3.168768615:
+                print("caso 2: trls4 sotto i limiti")
+                self.trls4calc = self.trls4pos + resto + 12.675074466
+                self.trls8calc = self.trls8pos + (self.trls4pos - self.trls4calc)
+                self.trg_elite2calc = trg_e2_tmp - 12.675074466
+                self.trg_elite1calc = self.read_values_trg_E1
+            elif self.trls8pos + resto > 9.6:
+                print("caso 3: trls4 sopra i limiti")
+                self.trls4calc = self.trls4pos + resto - 12.675074466
+                self.trls8calc = self.trls8pos + (self.trls4pos - self.trls4calc)
+                self.trg_elite2calc = trg_e2_tmp + 12.675074466
+                self.trg_elite1calc = self.read_values_trg_E1
+            if self.trls8calc >= -6.6 and self.trls8calc <= 6.6:
+                print("caso 1: trls8 entro i limiti")
+                self.trls8calc = self.trls8calc
+            elif self.trls8calc < -6.6:
+                print("caso 2: trls8 sotto i limiti")
+                self.trls8calc = self.trls8calc + 12.675074466
+                self.trg_elite1calc = self.trg_elite1calc - 12.675074466
+            elif self.trls8calc > 6.6:
+                print("caso 3: trls8 sopra i limiti")
+                self.trls8calc = self.trls8calc - 12.675074466
+                self.trg_elite1calc = self.trg_elite1calc + 12.675074466
+            # ricalcolo i delay per controllo
+            self.slfelcal = self.trls4calc + self.trg_elite2calc - zero_Fel2
+            self.slucal = self.trls4calc + self.trls8calc + self.trg_elite1calc + trlsSLUpos - zero_Slu
+            # valuto spostamento SDG
+            discriminante_ampli1 = int(3.3 + self.trls4calc + 6.6 + self.trls8calc)
+            print('discriminante_ampli1 = int(3.3 + ' + str(self.trls4calc) + ' + 6.6 + ' + str(self.trls8calc) + ') = ' +  str(discriminante_ampli1))
+            discriminante_ampli2 = int(3.3 + self.trls4calc)
+            print('discriminante_ampli1 = int(3.3 + ' + str(self.trls4calc) + ') = ' + str(discriminante_ampli2))
+            self.trg_SDG1calc = deltasdg1 + discriminante_ampli1
+            self.trg_SDG2calc = deltasdg2 + discriminante_ampli2
+        else: # altro
+            print('no')
+            self.slfelcal = 'ERROR'
+            self.slucal = 'ERROR'
+            self.trls4calc = 'ERROR'
+            self.trls8calc = 'ERROR'
+            self.trg_elite1calc = 'ERROR'
+            self.trg_elite2calc = 'ERROR'
+            self.trg_SDG1calc = 'ERROR'
+            self.trg_SDG2calc = 'ERROR'
+        ###aggiornamento pannello###
+        self.SLFELdelay_calcolato.setText(str(round(self.slfelcal, 3)) + ' ns')
+        self.SLUdelay_calcolato.setText(str(round(self.slucal, 3)) + ' ns')
+        self.trls4_calcolato.setText(str(round(self.trls4calc*1000, 3)) + ' ps')
+        self.trls8_calcolato.setText(str(round(self.trls8calc*1000, 3)) + ' ps')
+        self.trgM1_calcolato.setText(str(round(self.trg_elite1calc, 3)) + ' ns')
+        self.trgM2_calcolato.setText(str(round(self.trg_elite2calc, 3)) + ' ns')
+        self.trgSDG1_calcolato.setText(str(round(self.trg_SDG1calc, 3)) + ' ns')
+        self.trgSDG2_calcolato.setText(str(round(self.trg_SDG2calc, 3)) + ' ns')
+        if self.trls4calc > 3.168768615 and self.tmu79 >= 1:
+            self.trls4_calcolato.setText(str(round((self.trls4calc - int(self.tmu79)*6.33753723)*1000, 3)) + ' ps')
+            self.fase79_calcolato.setStyleSheet("background-color: rgb(0, 255, 0)")
+            self.fase79_calcolato.setText(' > 1 ')
+            self.fase79_shift = False
+        elif self.trls4calc > 3.168768615 and self.tmu79 <= 1:
+            self.trls4_calcolato.setText(str(round((self.trls4calc - int(self.tmu79)*6.33753723)*1000, 3)) + ' ps')
+            self.fase79_calcolato.setStyleSheet("background-color: rgb(255, 0, 0)")
+            self.fase79_calcolato.setText(' > 1 ')
+            self.fase79_shift = True
+        elif self.trls4calc < 3.168768615 and self.tmu79 >= 1:
+            self.fase79_calcolato.setStyleSheet("background-color: rgb(255, 0, 0)")
+            self.fase79_calcolato.setText(' < 1 ')
+            self.fase79_shift = True
+        elif self.trls4calc < 3.168768615 and self.tmu79 <= 1:
+            self.fase79_calcolato.setStyleSheet("background-color: rgb(0, 255, 0)")
+            self.fase79_calcolato.setText(' < 1 ')
+            self.fase79_shift = False
+        else:
+            self.fase79_calcolato.setStyleSheet("background-color: rgb(180, 180, 180)")
+            self.fase79_calcolato.setText('####')
+            self.fase79_shift = False
+        self.applica.show()
+        self.comenondetto.hide()
+
+    def calcola2(self): # muovi SLU
+        print('>>>> SLU >>>>')
+        ###verifica validita input###
+        test = str(self.SLUdelta_t.text().replace(',','.').replace('.','').replace(' ','').replace('ns','').replace('-',''))
+        if test.isdigit(): #verifico se input corretto
+            delta_t = float(self.SLUdelta_t.text().replace(',','.').replace(' ','').replace('ns',''))
+            print('richiesta ' + str(delta_t))
+        else:
+            print('SLU delay not a number')
+            return 
+        ###calcolo###
+        if (selettore >= 1 and selettore <= 4) or (selettore >= 5 and selettore <= 6): # elite1 x fel, elite2 x slu 
+            print('elite1 x fel, elite2 x slu')
+            resto = (delta_t/12.675074466 - int(delta_t/12.675074466))*12.675074466 #ns, avanzo da dare in pasto ai traslatori
+            trg_e2_tmp = self.read_values_trg_E2 + int(delta_t/12.675074466)*12.675074466 #valore tmp, perche potrebbe cambiare di 1 cilclo per via dei traslatori
+            # valuto corsa disponibile sulla slitta, se delta_t oltre i limiti agisco ancora sul trigger
+            if self.trls4pos + resto >= -3.168768615 and self.trls4pos + resto <= 9.6:
+                print("caso 1: trls4 entro i limiti")
+                self.trls4calc = self.trls4pos + resto
+                self.trls8calc = self.trls8pos + (self.trls4pos - self.trls4calc)
+                self.trg_elite2calc = trg_e2_tmp
+                self.trg_elite1calc = self.read_values_trg_E1
+            elif self.trls4pos + resto < -3.168768615:
+                print("caso 2: trls4 sotto i limiti")
+                self.trls4calc = self.trls4pos + resto + 12.675074466
+                self.trls8calc = self.trls8pos + (self.trls4pos - self.trls4calc)
+                self.trg_elite2calc = trg_e2_tmp - 12.675074466
+                self.trg_elite1calc = self.read_values_trg_E1
+            elif self.trls4pos + resto > 9.6:
+                print("caso 3: trls4 sopra i limiti")
+                self.trls4calc = self.trls4pos + resto - 12.675074466
+                self.trls8calc = self.trls8pos + (self.trls4pos - self.trls4calc)
+                self.trg_elite2calc = trg_e2_tmp + 12.675074466
+                self.trg_elite1calc = self.read_values_trg_E1
+            if self.trls8calc >= -6.6 and self.trls8calc <= 6.6:
+                print("caso 1: trls8 entro i limiti")
+                self.trls8calc = self.trls8calc
+            elif self.trls8calc < -6.6:
+                print("caso 2: trls8 sotto i limiti")
+                self.trls8calc = self.trls8calc + 12.675074466
+                self.trg_elite1calc = self.trg_elite1calc - 12.675074466
+            elif self.trls8calc > 6.6:
+                print("caso 3: trls8 sopra i limiti")
+                self.trls8calc = self.trls8calc - 12.675074466
+                self.trg_elite1calc = self.trg_elite1calc + 12.675074466
+            # ricalcolo i delay per controllo
+            self.slfelcal = self.trls4calc + self.trls8calc + self.trg_elite1calc - zero_Fel1
+            self.slucal = self.trls4calc  + self.trg_elite2calc + trlsSLUpos - zero_Slu
+            # valuto spostamento SDG
+            discriminante_ampli1 = int(3.3 + self.trls4calc + 6.6 + self.trls8calc)
+            print('discriminante_ampli1 = int(3.3 + ' + str(self.trls4calc) + ' + 6.6 + ' + str(self.trls8calc) + ') = ' +  str(discriminante_ampli1))
+            discriminante_ampli2 = int(3.3 + self.trls4calc)
+            print('discriminante_ampli1 = int(3.3 + ' + str(self.trls4calc) + ') = ' + str(discriminante_ampli2))
+            self.trg_SDG1calc = deltasdg1 + discriminante_ampli1
+            self.trg_SDG2calc = deltasdg2 + discriminante_ampli2
+        elif selettore >= 7 and selettore <= 11: # elite1 x slu, elite2 x fel 
+            print('elite1 x slu, elite2 x fel')
+            resto = (delta_t/12.675074466 - int(delta_t/12.675074466))*12.675074466 #ns, avanzo da dare in pasto ai traslatori
+            trg_e1_tmp = self.read_values_trg_E1 + int(delta_t/12.675074466)*12.675074466 #valore tmp, perche potrebbe cambiare di 1 cilclo per via dei traslatori
+             # valuto corsa disponibile sulla slitta, se delta_t oltre i limiti agisco ancora sul trigger
+            if self.trls8pos + resto >= -6.6 and self.trls8pos + resto <= 6.6:
+                self.trls8calc = self.trls8pos + resto
+                print("caso 1: trls8 entro i limiti")
+                self.trg_elite1calc = trg_e1_tmp
+            elif self.trls8pos + resto < -6.6:
+                print("caso 2: trls8 sotto i limiti")
+                self.trls8calc = self.trls8pos + resto + 12.675074466
+                self.trg_elite1calc = trg_e1_tmp - 12.675074466
+            elif self.trls8pos + resto > 6.6:
+                print("caso 3: trls8 sopra i limiti")
+                self.trls8calc = self.trls8pos + resto - 12.675074466
+                self.trg_elite1calc = trg_e1_tmp + 12.675074466
+            self.trg_elite2calc = self.read_values_trg_E2
+            self.trls4calc = self.trls4pos
+            # ricalcolo i delay per controllo
+            self.slfelcal = self.trls4calc + self.trg_elite2calc - zero_Fel2
+            self.slucal = self.trls4calc + self.trls8calc + self.trg_elite1calc + trlsSLUpos - zero_Slu
+            # valuto spostamento SDG
+            discriminante_ampli1 = int(3.3 + self.trls4calc + 6.6 + self.trls8calc)
+            print('discriminante_ampli1 = int(3.3 + ' + str(self.trls4calc) + ' + 6.6 + ' + str(self.trls8calc) + ') = ' +  str(discriminante_ampli1))
+            discriminante_ampli2 = int(3.3 + self.trls4calc)
+            print('discriminante_ampli1 = int(3.3 + ' + str(self.trls4calc) + ') = ' + str(discriminante_ampli2))
+            self.trg_SDG1calc = deltasdg1 + discriminante_ampli1
+            self.trg_SDG2calc = deltasdg2 + discriminante_ampli2
+        else: # altro
+            print('no')
+            self.slfelcal = 'ERROR'
+            self.slucal = 'ERROR'
+            self.trls4calc = 'ERROR'
+            self.trls8calc = 'ERROR'
+            self.trg_elite1calc = 'ERROR'
+            self.trg_elite2calc = 'ERROR'
+            self.trg_SDG1calc = 'ERROR'
+            self.trg_SDG2calc = 'ERROR'
+        # popolo il pannello di numeri
+        self.SLFELdelay_calcolato.setText(str(round(self.slfelcal, 3)) + ' ns')
+        self.SLUdelay_calcolato.setText(str(round(self.slucal, 3)) + ' ns')
+        self.trls4_calcolato.setText(str(round(self.trls4calc*1000, 3)) + ' ps')
+        self.trls8_calcolato.setText(str(round(self.trls8calc*1000, 3)) + ' ps')
+        self.trgM1_calcolato.setText(str(round(self.trg_elite1calc, 3)) + ' ns')
+        self.trgM2_calcolato.setText(str(round(self.trg_elite2calc, 3)) + ' ns')
+        self.trgSDG1_calcolato.setText(str(round(self.trg_SDG1calc, 3)) + ' ns')
+        self.trgSDG2_calcolato.setText(str(round(self.trg_SDG2calc, 3)) + ' ns')
+        if self.trls4calc > 3.168768615 and self.read_values_FundAlignment_corretto == 1:
+            self.trls4calc = self.trls4calc - 6.33753723
+            self.FundAlignment_calc = 1
+            self.trls4_calcolato.setText(str(round(self.trls4calc*1000, 3)) + ' ps')
+            self.FundAlignment_calcolato.setStyleSheet("background-color: rgb(0, 255, 0)")
+            self.FundAlignment_calcolato.setText(str(self.FundAlignment_calc))
+            self.FundAlignment_shift = False
+        elif self.trls4calc > 3.168768615 and self.read_values_FundAlignment_corretto == 0:
+            self.trls4calc = self.trls4calc - 6.33753723
+            self.FundAlignment_calc = 1
+            self.trls4_calcolato.setText(str(round(self.trls4calc*1000, 3)) + ' ps')
+            self.FundAlignment_calcolato.setStyleSheet("background-color: rgb(255, 0, 0)")
+            self.FundAlignment_calcolato.setText(str(self.FundAlignment_calc))
+            self.FundAlignment_shift = True
+        elif self.trls4calc < 3.168768615 and self.read_values_FundAlignment_corretto == 1:
+            self.FundAlignment_calc = -1
+            self.FundAlignment_calcolato.setStyleSheet("background-color: rgb(255, 0, 0)")
+            self.FundAlignment_calcolato.setText(str(self.FundAlignment_calc))
+            self.FundAlignment_shift = True
+        elif self.trls4calc < 3.168768615 and self.read_values_FundAlignment_corretto == 0:
+            self.FundAlignment_calc = -1
+            self.FundAlignment_calcolato.setStyleSheet("background-color: rgb(0, 255, 0)")
+            self.FundAlignment_calcolato.setText(str(self.FundAlignment_calc))
+            self.FundAlignment_shift = False
+        else:
+            self.FundAlignment_calcolato.setStyleSheet("background-color: rgb(180, 180, 180)")
+            self.FundAlignment_calcolato.setText('####')
+            self.FundAlignment_shift = False
+        if self.trls4calc*1000 < -3300 or self.trls4calc*1000 > 3300:
+            self.trls4_calcolato.setStyleSheet("background-color: rgb(255, 0, 0)")
+        else: 
+            self.trls4_calcolato.setStyleSheet("background-color: rgb(255, 255, 255)")
+        if self.trls8calc*1000 < -6600 or self.trls8calc*1000 > 6600:
+            self.trls8_calcolato.setStyleSheet("background-color: rgb(255, 0, 0)")
+        else: 
+            self.trls8_calcolato.setStyleSheet("background-color: rgb(255, 255, 255)")
+        self.applica.show()
+        self.comenondetto.hide()
+
+    def disastro(self):
+        print('salvo stato')
+        procedi = True
+        self.comandifalliti = 0
+        ###salvo vecchi valori###
+        try:
+            self.trls4_old = devprodic["trls4"].Position[0]
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["trls4"]) + ' Position. The script will not chage any value. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+            procedi = False
+        try:
+            self.trls8_old = devprodic["trls8"].Position[0]
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["trls8"]) + ' Position. The script will not chage any value. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+            procedi = False
+        try:
+            self.trgM1_old = devprodic["triggerEVR"].Chan1Delay
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["triggerEVR"]) + ' Chan1Delay. The script will not chage any value. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+            procedi = False
+        try:
+            self.trgM2_old = devprodic["triggerEVR"].Chan2Delay
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["triggerEVR"]) + ' Chan2Delay. The script will not chage any value. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+            procedi = False
+        try:
+            self.trgSDG1_old = devprodic["triggerSDG1"].command_inout('GetDelay', 2)*1000000000
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["triggerSDG1"]) + ' SDG1Delay. The script will not chage any value. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+            procedi = False
+        try:
+            self.trgSDG2_old = devprodic["triggerSDG2"].command_inout('GetDelay', 2)*1000000000
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["triggerSDG2"]) + ' SDG2Delay. The script will not chage any value. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+            procedi = False
+        try:
+            self.FundAlignment_old = devprodic["tmu"].PllFundAlignment
+        except:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            voce = time.ctime()[11:19] + ' Error reading ' + str(devprodic["tmu"]) + ' PllFundAlignment. The script will not chage any value. check with atomic panel and launch this program again'
+            self.logbox.insertItem(0, voce)
+            procedi = False
+        if procedi == True:
+            print('applico valori')
+#            print("trls4" + ' ' + "Speed" + ' ' +  str([100]))
+#            try:
+#                devprodic["trls4"].write_attribute("Speed", [100])
+#            except:
+#                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls4"]) + ' while write_attribute("Speed", [100])'
+#                self.logbox.insertItem(0, voce)
+#                self.comandifalliti = 1
+#            print("trls8" + ' ' + "Speed" + ' ' +  str([-100]))
+#            try:
+#                devprodic["trls8"].write_attribute("Speed", [-100])
+#            except:
+#                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls8"]) + ' while write_attribute("Speed", [-100])'
+#                self.logbox.insertItem(0, voce)
+#                self.comandifalliti = 1
+            if self.FundAlignment_shift and self.FundAlignment_calc >= 1:
+                print('FundAlignment ' + str(self.FundAlignment_calc))
+                print("tmu" + ' ' + "PllFundAlignment" + ' ' +  str(1))
+                try:
+                    devprodic["tmu"].write_attribute("PllFundAlignment", 1)
+                except:
+                    voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["tmu"]) + ' while write_attribute("PllFundAlignment", 1)'
+                    self.logbox.insertItem(0, voce)
+                    self.comandifalliti = 1
+                self.faseperallarmi = 1.5
+                try:
+                    tmp = devprodic["tmu"].get_attribute_config_ex("PllFundPhaseVolt")
+                    tmp[0].alarms.min_alarm = str(self.faseperallarmi - 0.5)
+                    tmp[0].alarms.max_alarm = str(self.faseperallarmi + 0.5)
+                    devprodic["tmu"].set_attribute_config(tmp)
+                except:
+                    voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["tmu"]) + ' while the script set alarm threshold [1.0, 2.0] for attribute PllFundPhaseVolt'
+                    self.logbox.insertItem(0, voce)
+                    self.comandifalliti = 1
+            elif self.FundAlignment_shift and self.FundAlignment_calc < 1:
+                print('FundAlignment ' + str(self.FundAlignment_calc))
+                print("tmu" + ' ' + "PllFundAlignment" + ' ' +  str(-1))
+                try:
+                    devprodic["tmu"].write_attribute("PllFundAlignment", -1)
+                except:
+                    voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["tmu"]) + ' while write_attribute("PllFundAlignment", -1)'
+                    self.logbox.insertItem(0, voce)
+                    self.comandifalliti = 1
+                self.faseperallarmi = 0.5
+                try:
+                    tmp = devprodic["tmu"].get_attribute_config_ex('PllFundPhaseVolt')
+                    tmp[0].alarms.min_alarm = str(self.faseperallarmi - 0.5)
+                    tmp[0].alarms.max_alarm = str(self.faseperallarmi + 0.5)
+                    devprodic["tmu"].set_attribute_config(tmp)
+                except:
+                    voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["tmu"]) + ' while the script set alarm threshold [0.0, 1.0] for attribute PllFundPhaseVolt'
+                    self.logbox.insertItem(0, voce)
+                    self.comandifalliti = 1
+            else:
+                print('FundAlignment no shift')
+            time.sleep(3)
+            print("triggerEVR" + ' ' + "Chan1Delay" + ' ' +  str(self.trg_elite1calc))
+            try:
+                devprodic["triggerEVR"].write_attribute("Chan1Delay", float(self.trg_elite1calc))
+                print('Chan1Delay ' + str(self.trg_elite1calc))
+            except:
+                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerEVR"]) + ' while write_attribute("Chan1Delay", ' + str(self.trg_elite1calc) + ')'
+                self.logbox.insertItem(0, voce)
+                self.comandifalliti = 1
+            time.sleep(0.2)
+            try:
+                tmp = devprodic["triggerEVR"].get_attribute_config_ex("Chan1Delay")
+                tmp[0].alarms.min_alarm = str(self.trg_elite1calc - 1)
+                tmp[0].alarms.max_alarm = str(self.trg_elite1calc + 1)
+                devprodic["triggerEVR"].set_attribute_config(tmp)
+            except:
+                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerEVR"]) + ' while the script set alarm threshold [' + str(self.trg_elite1calc - 1) + ', ' + str(self.trg_elite1calc +1) + '] for attribute Chan1Delay'
+                self.logbox.insertItem(0, voce)
+                self.comandifalliti = 1
+            print("triggerEVR" + ' ' + "Chan2Delay" + ' ' +  str(self.trg_elite2calc))
+            try:
+                devprodic["triggerEVR"].write_attribute("Chan2Delay", float(self.trg_elite2calc))
+                print('Chan2Delay ' + str(self.trg_elite2calc))
+            except:
+                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerEVR"]) + ' while write_attribute("Chan2Delay", ' + str(self.trg_elite2calc) + ')'
+                self.logbox.insertItem(0, voce)
+                self.comandifalliti = 1
+            time.sleep(0.2)
+            try:
+                tmp = devprodic["triggerEVR"].get_attribute_config_ex("Chan2Delay")
+                tmp[0].alarms.min_alarm = str(self.trg_elite2calc - 1)
+                tmp[0].alarms.max_alarm = str(self.trg_elite2calc + 1)
+                devprodic["triggerEVR"].set_attribute_config(tmp)
+            except:
+                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerEVR"]) + ' while the script set alarm threshold [' + str(self.trg_elite2calc - 1) + ', ' + str(self.trg_elite2calc +1) + '] for attribute Chan2Delay'
+                self.logbox.insertItem(0, voce)
+                self.comandifalliti = 1
+            print("triggerSDG1" + ' ' + "SetDelay 2" + ' ' +  str(self.trg_SDG1calc))
+            try:
+                devprodic["triggerSDG1"].command_inout('SetDelay', [2,  float(self.trg_SDG1calc)/1000000000])
+                print('SDG1Delay ' + str(self.trg_SDG1calc))
+            except:
+                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerSDG1"]) + ' while command_inout("SetDelay", [2,' + str(float(self.trg_SDG1calc)/1000000000) + '])'
+                self.logbox.insertItem(0, voce)
+                self.comandifalliti = 1
+            time.sleep(0.2)
+            print("triggerSDG2" + ' ' + "SetDelay 2" + ' ' +  str(self.trg_SDG2calc))
+            try:
+                devprodic["triggerSDG2"].command_inout('SetDelay', [2,  float(self.trg_SDG2calc)/1000000000])
+                print('SDG2Delay ' + str(self.trg_SDG2calc))
+            except:
+                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerSDG2"]) + ' while command_inout("SetDelay", [2,' + str(float(self.trg_SDG2calc)/1000000000) + '])'
+                self.logbox.insertItem(0, voce)
+                self.comandifalliti = 1
+            time.sleep(0.2)
+            print("trls4" + ' ' + "Position" + ' ' +  str(self.trls4calc*1000))
+            esciciclo = 0
+            while devprodic["trls4"].Speed[0] < 99 or esciciclo < 10:
+                esciciclo += 1
+                time.sleep(2)
+                voce = time.ctime()[11:19] + ' waiting trls4... '
+                self.logbox.insertItem(0, voce)
+            try:
+                devprodic["trls4"].write_attribute("Position", [float(self.trls4calc*1000)])
+                print("trls4 " + str(float(self.trls4calc*1000)))
+            except:
+                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls4"]) + ' while write_attribute("Position", [' + str(self.trls4calc*1000) + '])'
+                self.logbox.insertItem(0, voce)
+                self.comandifalliti = 1
+            print("trls8" + ' ' + "Position" + ' ' +  str(self.trls8calc*1000))
+            esciciclo = 0
+            while devprodic["trls8"].Speed[0] > -99 or esciciclo < 10:
+                esciciclo += 1
+                time.sleep(2)
+                voce = time.ctime()[11:19] + ' waiting trls8... '
+                self.logbox.insertItem(0, voce)
+            try:
+                devprodic["trls8"].write_attribute("Position", [float(self.trls8calc*1000)])
+                print("trls8 " + str(self.trls8calc*1000))
+            except:
+                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls8"]) + ' while write_attribute("Position", [' + str(self.trls8calc*1000) + '])'
+                self.logbox.insertItem(0, voce)
+                self.comandifalliti = 1
+            print("done")
+            time.sleep(2)
+#            print("trls4" + ' ' + "Speed" + ' ' +  str([1]))
+#            try:
+#                devprodic["trls4"].write_attribute("Speed", [1])
+#            except:
+#                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls4"]) + ' while write_attribute("Speed", [1])'
+#                self.logbox.insertItem(0, voce)
+#                self.comandifalliti = 1
+#            print("trls8" + ' ' + "Speed" + ' ' +  str([-1]))
+#            try:
+#                devprodic["trls8"].write_attribute("Speed", [-1])
+#            except:
+#                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls8"]) + ' while write_attribute("Speed", [-1])'
+#                self.logbox.insertItem(0, voce)
+#                self.comandifalliti = 1
+            self.applica.hide()
+            self.comenondetto.show()
+            self.lanciasalvatrigger.setStyleSheet("background-color: rgb(200, 200, 200)")
+            if self.comandifalliti == 1:
+                self.funzionamento.setText('!! FAULT !!')
+                self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+            else:
+                self.funzionamento.setText('No errors')
+                self.funzionamento.setStyleSheet("background-color: rgb(0, 255, 0)")
+
+    def doppiodisastro(self):
+        self.comandifalliti = 0
+#        try:
+#            devprodic["trls4"].write_attribute("Speed", [100])
+#        except:
+#            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls4"]) + ' while write_attribute("Speed", [100])'
+#            self.logbox.insertItem(0, voce)
+#            self.comandifalliti = 1
+#        try:
+#            devprodic["trls8"].write_attribute("Speed", [-100])
+#        except:
+#            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls8"]) + ' while write_attribute("Speed", [-100])'
+#            self.logbox.insertItem(0, voce)
+#            self.comandifalliti = 1
+        try:
+            devprodic["tmu"].write_attribute("PllFundAlignment", self.FundAlignment_old)
+            print("tmu " + str(self.FundAlignment_old))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["tmu"]) + ' while write_attribute("PllFundAlignment", ' + str(self.FundAlignment_old) + ')'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        try:
+            tmp = devprodic["tmu"].get_attribute_config_ex('PllFundPhaseVolt')
+            if self.FundAlignment_old > 0:
+                tmp[0].alarms.min_alarm = str(1.0)
+                tmp[0].alarms.max_alarm = str(2.0)
+            else:
+                tmp[0].alarms.min_alarm = str(0.0)
+                tmp[0].alarms.max_alarm = str(1.0)
+            devprodic["tmu"].set_attribute_config(tmp)
+        except:
+            if self.FundAlignment_old > 0:
+                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["tmu"]) + ' while the script set alarm threshold [1.0, 2.0] for attribute PllFundPhaseVolt'
+                self.logbox.insertItem(0, voce)
+                self.comandifalliti = 1
+            else:
+                self.comandifalliti = 1
+                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["tmu"]) + ' while the script set alarm threshold [0.0, 1.0] for attribute PllFundPhaseVolt'
+                self.logbox.insertItem(0, voce)
+        time.sleep(3)
+        try:
+            devprodic["triggerEVR"].write_attribute('Chan1Delay', self.trgM1_old)
+            print('Chan1Delay ' + str(self.trgM1_old))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerEVR"]) + ' while write_attribute("Chan1Delay", ' + str(self.trgM1_old) + ')'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        time.sleep(0.1)
+        try:
+            tmp = devprodic["triggerEVR"].get_attribute_config_ex('Chan1Delay')
+            tmp[0].alarms.min_alarm = str(self.trgM1_old - 1)
+            tmp[0].alarms.max_alarm = str(self.trgM1_old + 1)
+            devprodic["triggerEVR"].set_attribute_config(tmp)
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerEVR"]) + ' while the script set alarm threshold [' + str(self.trgM1_old - 1) + ', ' + str(self.trgM1_old +1) + '] for attribute Chan1Delay'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        try:
+            devprodic["triggerEVR"].write_attribute('Chan2Delay', self.trgM2_old)
+            print('Chan2Delay ' + str(self.trgM2_old))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerEVR"]) + ' while write_attribute("Chan2Delay", ' + str(self.trgM2_old) + ')'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        time.sleep(0.1)
+        try:
+            tmp = devprodic["triggerEVR"].get_attribute_config_ex('Chan2Delay')
+            tmp[0].alarms.min_alarm = str(self.trgM2_old - 1)
+            tmp[0].alarms.max_alarm = str(self.trgM2_old + 1)
+            devprodic["triggerEVR"].set_attribute_config(tmp)
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerEVR"]) + ' while the script set alarm threshold [' + str(self.trgM2_old - 1) + ', ' + str(self.trgM2_old +1) + '] for attribute Chan2Delay'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        try:
+            devprodic["triggerSDG1"].command_inout('SetDelay', [2,  float(self.trgSDG1_old)/1000000000])
+            print('SDG1Delay ' + str(self.trgSDG1_old))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerSDG1"]) + ' while command_inout("SetDelay", [2,' + str(float(self.trgSDG1_old)/1000000000) + '])'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        time.sleep(0.1)
+        try:
+            devprodic["triggerSDG2"].command_inout('SetDelay', [2,  float(self.trgSDG2_old)/1000000000])
+            print('SDG2Delay ' + str(self.trgSDG2_old))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerSDG2"]) + ' while command_inout("SetDelay", [2,' + str(float(self.trgSDG2_old)/1000000000) + '])'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        time.sleep(0.1)
+        try:
+            devprodic["trls4"].write_attribute("Position", [self.trls4_old])
+            print("trls4 " + str(self.trls4_old))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls4"]) + ' while write_attribute("Position", ' + str([self.trls4_old]) + ')'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        try:
+            devprodic["trls8"].write_attribute("Position", [self.trls8_old])
+            print("trls8 " + str(self.trls8_old))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls8"]) + ' while write_attribute("Position", ' + str([self.trls8_old]) + ')'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        print("done")
+        time.sleep(1)
+#        try:
+#            devprodic["trls4"].write_attribute("Speed", [1])
+#        except:
+#            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls4"]) + ' while write_attribute("Speed", [1])'
+#            self.logbox.insertItem(0, voce)
+#            self.comandifalliti = 1
+#        try:
+#            devprodic["trls8"].write_attribute("Speed", [-1])
+#        except:
+#            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls8"]) + ' while write_attribute("Speed", [-1])'
+#            self.logbox.insertItem(0, voce)
+#            self.comandifalliti.append('devprodic["trls4"]', 'Speed', '[-1]')
+        self.applica.show()
+        self.comenondetto.hide()
+        self.lanciasalvatrigger.setStyleSheet("background-color: rgb(200, 200, 200)")
+        if self.comandifalliti == 1:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+        else:
+            self.funzionamento.setText('No errors')
+            self.funzionamento.setStyleSheet("background-color: rgb(0, 255, 0)")
+
+    def ripristino(self):
+        self.comandifalliti = 0
+#        try:
+#            devprodic["trls4"].write_attribute("Speed", [100])
+#        except:
+#            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls4"]) + ' while write_attribute("Speed", [100])'
+#            self.logbox.insertItem(0, voce)
+#            self.comandifalliti = 1
+#        try:
+#            devprodic["trls8"].write_attribute("Speed", [-100])
+#        except:
+#            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls8"]) + ' while write_attribute("Speed", [-100])'
+#            self.logbox.insertItem(0, voce)
+#            self.comandifalliti = 1
+        try:
+            devprodic["tmu"].write_attribute("PllFundAlignment", self.zero_FundAlignment)
+            print("tmu " + str(self.zero_FundAlignment))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["tmu"]) + ' while write_attribute("PllFundAlignment", ' + str(self.zero_FundAlignment) + ')'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        try:
+            tmp = devprodic["tmu"].get_attribute_config_ex('PllFundPhaseVolt')
+            if self.zero_FundAlignment > 0:
+                tmp[0].alarms.min_alarm = str(1.0)
+                tmp[0].alarms.max_alarm = str(2.0)
+            else:
+                tmp[0].alarms.min_alarm = str(0.0)
+                tmp[0].alarms.max_alarm = str(1.0)
+            devprodic["tmu"].set_attribute_config(tmp)
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["tmu"]) + ' while the script load and set new threshold on attribute PllFundPhaseVolt'
+            self.logbox.insertItem(0, voce)
+            if self.zero_FundAlignment > 0:
+                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["tmu"]) + ' while the script set alarm threshold [1.0, 2.0] for attribute PllFundPhaseVolt'
+                self.logbox.insertItem(0, voce)
+                self.comandifalliti = 1
+            else:
+                self.comandifalliti = 1
+                voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["tmu"]) + ' while the script set alarm threshold [0.0, 1.0] for attribute PllFundPhaseVolt'
+                self.logbox.insertItem(0, voce)
+        time.sleep(3)
+        try:
+            devprodic["triggerEVR"].write_attribute('Chan1Delay', self.zero_trgM1)
+            print('Chan1Delay ' + str(self.zero_trgM1))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerEVR"]) + ' while write_attribute("Chan1Delay", ' + str(self.zero_trgM1) + ')'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        time.sleep(0.1)
+        try:
+            tmp = devprodic["triggerEVR"].get_attribute_config_ex('Chan1Delay')
+            tmp[0].alarms.min_alarm = str(self.zero_trgM1 - 1)
+            tmp[0].alarms.max_alarm = str(self.zero_trgM1 + 1)
+            devprodic["triggerEVR"].set_attribute_config(tmp)
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerEVR"]) + ' while the script set alarm threshold [' + str(self.zero_trgM1 - 1) + ', ' + str(self.zero_trgM1 +1) + '] for attribute Chan1Delay'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        try:
+            devprodic["triggerEVR"].write_attribute('Chan2Delay', self.zero_trgM2)
+            print('Chan2Delay ' + str(self.zero_trgM2))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerEVR"]) + ' while write_attribute("Chan2Delay", ' + str(self.zero_trgM2) + ')'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        time.sleep(0.1)
+        try:
+            tmp = devprodic["triggerEVR"].get_attribute_config_ex('Chan2Delay')
+            tmp[0].alarms.min_alarm = str(self.zero_trgM2 - 1)
+            tmp[0].alarms.max_alarm = str(self.zero_trgM2 + 1)
+            devprodic["triggerEVR"].set_attribute_config(tmp)
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerEVR"]) + ' while the script set alarm threshold [' + str(self.zero_trgM2 - 1) + ', ' + str(self.zero_trgM2 +1) + '] for attribute Chan2Delay'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        try:
+            devprodic["triggerSDG1"].command_inout('SetDelay', [2,  float(self.zero_trgSDG1)/1000000000])
+            print('SDG1Delay ' + str(self.zero_trgSDG1))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerSDG1"]) + ' while command_inout("SetDelay", [2,' + str(float(self.zero_trgSDG1)/1000000000) + '])'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        time.sleep(0.1)
+        try:
+            devprodic["triggerSDG2"].command_inout('SetDelay', [2,  float(self.zero_trgSDG2)/1000000000])
+            print('SDG2Delay ' + str(self.zero_trgSDG2))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["triggerSDG2"]) + ' while command_inout("SetDelay", [2,' + str(float(self.zero_trgSDG2)/1000000000) + '])'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        time.sleep(0.1)
+        try:
+            devprodic["trls4"].write_attribute("Position", [self.zero_trls4])
+            print("trls4 " + str(self.zero_trls4))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls4"]) + ' while write_attribute("Position", ' + str([self.zero_trls4]) + ')'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        try:
+            devprodic["trls8"].write_attribute("Position", [self.zero_trls8])
+            print("trls8 " + str(self.zero_trls8))
+        except:
+            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls8"]) + ' while write_attribute("Position", ' + str([self.zero_trls8]) + ')'
+            self.logbox.insertItem(0, voce)
+            self.comandifalliti = 1
+        print("done")
+        time.sleep(1)
+#        try:
+#            devprodic["trls4"].write_attribute("Speed", [1])
+#        except:
+#            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls4"]) + ' while write_attribute("Speed", [1])'
+#            self.logbox.insertItem(0, voce)
+#            self.comandifalliti = 1
+#        try:
+#            devprodic["trls8"].write_attribute("Speed", [-1])
+#        except:
+#            voce = time.ctime()[11:19] + ' Error with ' + str(devprodic["trls8"]) + ' while write_attribute("Speed", [-1])'
+#            self.logbox.insertItem(0, voce)
+#            self.comandifalliti = 1
+        self.applica.show()
+        self.comenondetto.hide()
+        self.lanciasalvatrigger.setStyleSheet("background-color: rgb(200, 200, 200)")
+        if self.comandifalliti == 1:
+            self.funzionamento.setText('!! FAULT !!')
+            self.funzionamento.setStyleSheet("background-color: rgb(255, 0, 0)")
+        else:
+            self.funzionamento.setText('No errors')
+            self.funzionamento.setStyleSheet("background-color: rgb(0, 255, 0)")
+
+
+    def switchdelayminimizer(self):
+        stato = str(devprodic["minimizzatore_correlazione"].command_inout('State'))
+        print(stato)
+        if stato == "OFF":
+            devprodic["minimizzatore_correlazione"].command_inout("On",[0])
+        else:
+            devprodic["minimizzatore_correlazione"].command_inout('Off')
+
+    def pannellosalvatrigger(self):
+        os.chdir('/home/lfo/data/salvatutto/SEED_trigger/')
+        sonoin = os.path.abspath('')
+        indice = 0
+        for file in os.listdir(sonoin):
+            if file.endswith(".csv"):
+                indice = indice +1
+        os.system('python /home/lfo/runtime/panels/bin/slsavetrigger.py &')
+        time.sleep(5)
+        indice1 = 0
+        for file in os.listdir(sonoin):
+            if file.endswith(".csv"):
+                indice1 = indice1 +1
+        if indice1 > indice:
+            self.lanciasalvatrigger.setStyleSheet("background-color: rgb(0, 255, 0)")
+        else:
+            self.lanciasalvatrigger.setStyleSheet("background-color: rgb(255, 0, 0)")
+
+    def faprihdb(self):
+        os.system('/usr/bin/python /home/lfo/python/lavoradacasa/lasedb.py &')
+        pass
+
+    def apritrls4(self):
+        os.system('/runtime/panels/bin/xps sl/motor/trls_sl.04 -title SL_XPS_delay_line_"trls_sl.04" &')
+        pass
+
+    def apritrls8(self):
+        os.system('/runtime/panels/bin/xps sl/motor/trls_sl.08 -title SL_XPS_Elite1_line_"trls_sl.08" &')
+        pass
+
+    def fapriscope3(self):
+        os.system('/usr/bin/vncviewer scope-laser-03 &')
+        pass
+
+    def fapriscope5(self):
+        os.system('/usr/bin/vncviewer scope-laser-05 &')
+        pass
+
+    def fapritrigger(self):
+        os.system('/usr/bin/python /home/lfo/runtime/panels/bin/sltriggerpanel.py &')
+        pass
+
+
+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()
+        dimensione = [screen.width()*0.7, screen.height()*0.7]
+    font_grande = QFont("Arial", round(dimensione[0]/50.0), -1, False)
+    font_importante = QFont("Arial", round(dimensione[0]/150.0), -1, True)
+    font_pannello = QFont("Arial", round(dimensione[0]/200.0), -1, False)
+    app.setFont(font_pannello)
+    window = MainWindow()
+    #window.resize(dimensione[0], dimensione[1])
+    window.show()
+    app.exec_()
-- 
GitLab