diff --git a/src/SluDelayCalculator.py b/src/SluDelayCalculator.py
index d681ff3d9adeddff7d9ac16ce15a9b6fbe501f87..0f802183447e4029de7495b9e7372fb85c365edb 100644
--- a/src/SluDelayCalculator.py
+++ b/src/SluDelayCalculator.py
@@ -8,6 +8,7 @@ from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 import time
 import sys
+import csv
 
 selettore = PyTango.DeviceProxy("srv-tango-srf-01:20000/sl/laser/calendar_sl.01").activityNum
 
@@ -19,6 +20,8 @@ devprodic["triggerEVR"] = PyTango.DeviceProxy("srv-tango-srf-01:20000/ec-sl-slps
 devprodic["triggerEVR2"] = PyTango.DeviceProxy("srv-tango-srf-01:20000/ec-sl-slpsr-01/evr/ff200000")
 devprodic["triggerS1"] = PyTango.DeviceProxy("srv-tango-srf-01:20000/sl/delay/dgq_slpsr.02")
 devprodic["triggerS2"] = PyTango.DeviceProxy("srv-tango-srf-01:20000/sl/delay/dgq_slpsr.01")
+devprodic["sdg1"] = PyTango.DeviceProxy("srv-tango-srf-01:20000/sl/delay/sdg_slr.01")
+devprodic["sdg2"] = PyTango.DeviceProxy("srv-tango-srf-01:20000/sl/delay/sdg_slr.02")
 devprodic["tmu"] = PyTango.DeviceProxy("srv-tango-srf-01:20000/sl/timing/tmu_sl.01")
 devprodic["minimizzatore_correlazione"] = PyTango.DeviceProxy("srv-tango-srf-01:20000/f/optimization/optimizer_sldelay_f.01")
 devprodic["feedbackelite1"] = PyTango.DeviceProxy("srv-tango-srf-01:20000/sl/feedback/rtltf_osc.02")
@@ -45,6 +48,7 @@ zeroS2_fel1 = devprodic["costanti"].offset_fel1_sdg2 #con tmufundalignment -1, t
 zeroS1_fel2 = devprodic["costanti"].offset_fel2_sdg1 #con tmufundalignment -1, trls 0, trls8 0
 zeroS2_fel2 = devprodic["costanti"].offset_fel2_sdg2 #con tmufundalignment -1, trls 0, trls8 0
 
+
 ####ns12 = 12.675074466
 ####ns6 = 6.337537233
 
@@ -913,12 +917,242 @@ class MainWindow(QDialog):
         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)
+        nomefile = '/home/lfo/data/salvatutto/SEED_trigger/' + str(indice+1) + '.csv'
+        listaEVR1 = [0, 1, 2, 3, 8, 9, 10, 11, 12, 13]
+        listaDGQ1 = [1, 2, 3, 4, 5, 6, 7, 8]
+        listaSDG1 = [1, 2]
+        listaEVR2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
+        listaDGQ2 = [1, 2, 3, 4, 5, 6, 7, 8]
+        listaSDG2 = [1, 2]
+        datidasalvare = []
+        nomidasalvare = []
+        #leggo dati
+        tmp = devprodic["triggerEVR"].ChanDelay
+        for corridore in range(len(tmp)):
+            if corridore in listaEVR1:
+                nomidasalvare.append("EVR1 " + str(corridore))
+                datidasalvare.append(tmp[corridore])
+        for corridore in range(len(listaDGQ1)):
+            tmp = devprodic["triggerS2"].command_inout('GetDelay', listaDGQ1[corridore])
+            nomidasalvare.append("DGQ1 " + str(corridore+1))
+            datidasalvare.append(str(tmp))
+        tmp = devprodic["sdg1"].Channel1Delay
+        nomidasalvare.append("SDG1 1")
+        datidasalvare.append(str(tmp))
+        tmp = devprodic["sdg1"].Channel2Delay
+        nomidasalvare.append("SDG1 2")
+        datidasalvare.append(str(tmp))
+        for corridore in range(len(listaDGQ2)):
+            tmp = devprodic["triggerS1"].command_inout('GetDelay', listaDGQ2[corridore])
+            nomidasalvare.append("DGQ2 " + str(corridore+1))
+            datidasalvare.append(str(tmp))
+        tmp = devprodic["sdg2"].Channel1Delay
+        nomidasalvare.append("SDG2 1")
+        datidasalvare.append(str(tmp))
+        tmp = devprodic["sdg2"].Channel2Delay
+        nomidasalvare.append("SDG2 2")
+        datidasalvare.append(str(tmp))
+        tmp = devprodic["triggerEVR2"].ChanDelay
+        for corridore in range(len(tmp)):
+            if corridore in listaEVR2:
+                nomidasalvare.append("EVR2 " + str(corridore))
+                datidasalvare.append(tmp[corridore])
+        #verifico che tutti i numeri siano numeri
+        collettorediproblemi = 0
+        for corridore in range(len(datidasalvare)):
+            try:
+                a = float(datidasalvare[corridore])
+                if a == -1:
+                    collettorediproblemi = 1
+            except:
+                print('!!!!!!!!!!!!!!!')
+                print(nomidasalvare[corridore] + ' ' + datidasalvare[corridore])
+                collettorediproblemi = 1
+        if collettorediproblemi == 0: # se non ci sono problemi creo nuovo file e lo riempio
+            print('tutto ok')
+            #salvo nuovo file
+            with open(nomefile, 'w', newline='') as csvfile:
+                spamwriter = csv.writer(csvfile)
+                for ind in range(len(datidasalvare)):
+                    riga = [nomidasalvare[ind], str(datidasalvare[ind])]
+                    spamwriter.writerow(riga)
+            csvfile.close()
+            QMessageBox.warning(None, 'Save SEED trigger', 'file saved: ' + nomefile)
+        else:
+            QMessageBox.warning(None, 'Save SEED trigger', 'problems reading 1 or more delays. please try again')
+        
+        # sistemo eventuali allarmi
+        # EVR1
+        for corridore in range(len(listaEVR1)):
+            print('EVR1 ch' + str(corridore))
+            applicalo =0
+            lettura = eval('devprodic["triggerEVR"].Chan' + str(listaEVR1[corridore]) + 'Delay')
+            altro = eval('devprodic["triggerEVR"].get_attribute_config_ex("Chan' + str(listaEVR1[corridore]) + 'Delay")')
+            if altro[0].alarms.min_alarm != str(float(lettura) - 1.0):
+                altro[0].alarms.min_alarm = str(float(lettura) - 1.0)
+                applicalo = 1
+            if altro[0].alarms.max_alarm != str(float(lettura) + 1.0):
+                altro[0].alarms.max_alarm = str(float(lettura) + 1.0)
+                applicalo = 1
+            if altro[0].alarms.min_warning != 'Not specified':
+                altro[0].alarms.min_warning = 'Not specified'
+                applicalo = 1
+            if altro[0].alarms.max_warning != 'Not specified':
+                altro[0].alarms.max_warning = 'Not specified'
+                applicalo = 1
+            if applicalo == 1:
+                devprodic["triggerEVR"].set_attribute_config(altro)
+                print('alarm updated')
+            time.sleep(0.1)
+        # EVR2
+        for corridore in range(len(listaEVR2)):
+            print('EVR2 ch' + str(corridore))
+            applicalo =0
+            lettura = eval('devprodic["triggerEVR2"].Chan' + str(listaEVR2[corridore]) + 'Delay')
+            altro = eval('devprodic["triggerEVR2"].get_attribute_config_ex("Chan' + str(listaEVR2[corridore]) + 'Delay")')
+            if altro[0].alarms.min_alarm != str(float(lettura) - 1.0):
+                altro[0].alarms.min_alarm = str(float(lettura) - 1.0)
+                applicalo = 1
+            if altro[0].alarms.max_alarm != str(float(lettura) + 1.0):
+                altro[0].alarms.max_alarm = str(float(lettura) + 1.0)
+                applicalo = 1
+            if altro[0].alarms.min_warning != 'Not specified':
+                altro[0].alarms.min_warning = 'Not specified'
+                applicalo = 1
+            if altro[0].alarms.max_warning != 'Not specified':
+                altro[0].alarms.max_warning = 'Not specified'
+                applicalo = 1
+            if applicalo == 1:
+                devprodic["triggerEVR2"].set_attribute_config(altro)
+                print('alarm updated')
+            time.sleep(0.1)
+        # DGQ1
+        for corridore in range(len(listaDGQ1)):
+            print('DGQ1 ch' + str(corridore))
+            applicalo =0
+            lettura = eval('devprodic["triggerS2"].Chan' + str(listaDGQ1[corridore]) + 'Delay')
+            altro = eval('devprodic["triggerS2"].get_attribute_config_ex("Chan' + str(listaDGQ1[corridore]) + 'Delay")')
+            if altro[0].alarms.min_alarm != str(float(lettura) - 1.0):
+                altro[0].alarms.min_alarm = str(float(lettura) - 1.0)
+                applicalo = 1
+            if altro[0].alarms.max_alarm != str(float(lettura) + 1.0):
+                altro[0].alarms.max_alarm = str(float(lettura) + 1.0)
+                applicalo = 1
+            if altro[0].alarms.min_warning != 'Not specified':
+                altro[0].alarms.min_warning = 'Not specified'
+                applicalo = 1
+            if altro[0].alarms.max_warning != 'Not specified':
+                altro[0].alarms.max_warning = 'Not specified'
+                applicalo = 1
+            if applicalo == 1:
+                devprodic["triggerS2"].set_attribute_config(altro)
+                print('alarm updated')
+            time.sleep(0.2)
+        # DGQ2
+        for corridore in range(len(listaDGQ2)):
+            print('DGQ2 ch' + str(corridore))
+            applicalo =0
+            lettura = eval('devprodic["triggerS1"].Chan' + str(listaDGQ2[corridore]) + 'Delay')
+            altro = eval('devprodic["triggerS1"].get_attribute_config_ex("Chan' + str(listaDGQ2[corridore]) + 'Delay")')
+            if altro[0].alarms.min_alarm != str(float(lettura) - 1.0):
+                altro[0].alarms.min_alarm = str(float(lettura) - 1.0)
+                applicalo = 1
+            if altro[0].alarms.max_alarm != str(float(lettura) + 1.0):
+                altro[0].alarms.max_alarm = str(float(lettura) + 1.0)
+                applicalo = 1
+            if altro[0].alarms.min_warning != 'Not specified':
+                altro[0].alarms.min_warning = 'Not specified'
+                applicalo = 1
+            if altro[0].alarms.max_warning != 'Not specified':
+                altro[0].alarms.max_warning = 'Not specified'
+                applicalo = 1
+            if applicalo == 1:
+                devprodic["triggerS1"].set_attribute_config(altro)
+                print('alarm updated')
+            time.sleep(0.2)
+        # SDG1
+        applicalo =0
+        print('SDG1')
+        lettura = devprodic["sdg1"].Channel1Delay
+        altro = devprodic["sdg1"].get_attribute_config_ex('Channel1Delay')
+        if altro[0].alarms.min_alarm != str(float(lettura) - 1.0):
+            altro[0].alarms.min_alarm = str(float(lettura) - 1.0)
+            applicalo = 1
+        if altro[0].alarms.max_alarm != str(float(lettura) + 1.0):
+            altro[0].alarms.max_alarm = str(float(lettura) + 1.0)
+            applicalo = 1
+        if altro[0].alarms.min_warning != 'Not specified':
+            altro[0].alarms.min_warning = 'Not specified'
+            applicalo = 1
+        if altro[0].alarms.max_warning != 'Not specified':
+            altro[0].alarms.max_warning = 'Not specified'
+            applicalo = 1
+        if applicalo == 1:
+            devprodic["sdg1"].set_attribute_config(altro)
+            print('alarm updated')
+        time.sleep(0.2)
+        applicalo =0
+        lettura = devprodic["sdg1"].Channel2Delay
+        altro = devprodic["sdg1"].get_attribute_config_ex('Channel2Delay')
+        if altro[0].alarms.min_alarm != str(float(lettura) - 1.0):
+            altro[0].alarms.min_alarm = str(float(lettura) - 1.0)
+            applicalo = 1
+        if altro[0].alarms.max_alarm != str(float(lettura) + 1.0):
+            altro[0].alarms.max_alarm = str(float(lettura) + 1.0)
+            applicalo = 1
+        if altro[0].alarms.min_warning != 'Not specified':
+            altro[0].alarms.min_warning = 'Not specified'
+            applicalo = 1
+        if altro[0].alarms.max_warning != 'Not specified':
+            altro[0].alarms.max_warning = 'Not specified'
+            applicalo = 1
+        if applicalo == 1:
+            devprodic["sdg1"].set_attribute_config(altro)
+            print('alarm updated')
+        # SDG1
+        applicalo =0
+        print('SDG2')
+        lettura = devprodic["sdg2"].Channel1Delay
+        altro = devprodic["sdg2"].get_attribute_config_ex('Channel1Delay')
+        if altro[0].alarms.min_alarm != str(float(lettura) - 1.0):
+            altro[0].alarms.min_alarm = str(float(lettura) - 1.0)
+            applicalo = 1
+        if altro[0].alarms.max_alarm != str(float(lettura) + 1.0):
+            altro[0].alarms.max_alarm = str(float(lettura) + 1.0)
+            applicalo = 1
+        if altro[0].alarms.min_warning != 'Not specified':
+            altro[0].alarms.min_warning = 'Not specified'
+            applicalo = 1
+        if altro[0].alarms.max_warning != 'Not specified':
+            altro[0].alarms.max_warning = 'Not specified'
+            applicalo = 1
+        if applicalo == 1:
+            devprodic["sdg2"].set_attribute_config(altro)
+        time.sleep(0.2)
+        applicalo =0
+        lettura = devprodic["sdg2"].Channel2Delay
+        altro = devprodic["sdg2"].get_attribute_config_ex('Channel2Delay')
+        if altro[0].alarms.min_alarm != str(float(lettura) - 1.0):
+            altro[0].alarms.min_alarm = str(float(lettura) - 1.0)
+            applicalo = 1
+        if altro[0].alarms.max_alarm != str(float(lettura) + 1.0):
+            altro[0].alarms.max_alarm = str(float(lettura) + 1.0)
+            applicalo = 1
+        if altro[0].alarms.min_warning != 'Not specified':
+            altro[0].alarms.min_warning = 'Not specified'
+            applicalo = 1
+        if altro[0].alarms.max_warning != 'Not specified':
+            altro[0].alarms.max_warning = 'Not specified'
+            applicalo = 1
+        if applicalo == 1:
+            devprodic["sdg2"].set_attribute_config(altro)
+        #verifica
         indice1 = 0
         for file in os.listdir(sonoin):
             if file.endswith(".csv"):
                 indice1 = indice1 +1
+        print(indice)
+        print(indice1)
         if indice1 > indice:
             self.lanciasalvatrigger.setStyleSheet("background-color: rgb(0, 255, 0)")
         else: