From 4c0e4d568625040621807e1a9b83340f29199c80 Mon Sep 17 00:00:00 2001
From: "paolo.cinquegrana@elettra.eu" <paolo.cinquegrana@elettra.eu>
Date: Thu, 12 Oct 2023 09:54:02 +0200
Subject: [PATCH] aggiunto offset per i decimatori

---
 src/SluSourceMonitor.py | 228 +++++++++++++++++++++++-----------------
 1 file changed, 132 insertions(+), 96 deletions(-)

diff --git a/src/SluSourceMonitor.py b/src/SluSourceMonitor.py
index aaff6ce..5801eb6 100644
--- a/src/SluSourceMonitor.py
+++ b/src/SluSourceMonitor.py
@@ -20,7 +20,6 @@ try:
     sacco['archiviatore'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/archiving/hdb++archiver/slu')
     sacco['costanti'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/misc/ranges')
     sacco['interlock'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/interlock/laser_pss')
-    
     sacco['revolution'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/sl/laser/evops_sl.03')
     sacco['SLtemperature'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/sl/cooling/dmm_sl.01')
     sacco['ems3'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/sl/energy_meter/ems_sl.03')
@@ -28,7 +27,6 @@ try:
     sacco['slelitefbin'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/sl/feedback/rtltf_osc.01')
     sacco['slelitefbtime'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/sl/feedback/fbdelay_sl.02')
     sacco['attenuator'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/sl/motor/rots_sl.09')
-    
     sacco['piezo0'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/piezo/tiptilt_slu.04')
     sacco['piezo1'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/piezo/tiptilt_slu.01')
     sacco['piezo2'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/piezo/tiptilt_slu.02')
@@ -43,13 +41,11 @@ try:
     sacco['vuoto2'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/vacuum/vgpi_slu_uh.03')
     sacco['vuoto3'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/vacuum/vgpi_slu_ehf.01')
     sacco['vuoto4'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/vacuum/vgpi_slu_ehf.03')
-
     sacco['decima1'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/f/timing/rttrigger_sl.01')
     sacco['decima2'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/f/timing/rttrigger_sl.02')
     sacco['decima3'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/f/timing/rttrigger_sl.03')
     sacco['decimacheck'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/ec-sl-slpsr-01/rtevr/ff100000')
     sacco['frequenza'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/f/timing/bunchnumber_f')
-    
     sacco['scope6'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/sl/diagnostics/scope_sl.01')
     sacco['trls8_delay'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/sl/motor/trls_sl.08')
     sacco['totem_delay'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/motor/trls_slu.05')
@@ -60,7 +56,6 @@ try:
     sacco['triggerDGQ2'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/sl/delay/dgq_slpsr.02')
     sacco['triggerSDG1'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/sl/delay/sdg_slr.01')
     sacco['triggerSDG2'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/sl/delay/sdg_slr.02')
-
     sacco['pompe'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/vacuum/pumps')
     sacco['valvolaUH1'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/uh/vacuum/vlvp_uh.01')
     sacco['valvolaUH2'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/uh/vacuum/vlvp_uh.02')
@@ -78,11 +73,7 @@ try:
     sacco['sensoreEHF2'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/vacuum/vgpi_slu_ehf.02')
     sacco['sensoreEHF3'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/vacuum/vgpi_slu_ehf.03')
     sacco['sensoreEHF4'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/vacuum/vgpi_slu_ehf.04')
-
     sacco['SLUtemperature'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/cooling/dmm_slu.01')
-    
-
-
 except PyTango.DevFailed:
     print('error defining sacco DeviceProxys')
 
@@ -105,7 +96,6 @@ try:
     sacco['magfeedback'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/feedback/mimofb_mag_slu.01')
     sacco['magfbsequencer'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/seq/recover/fb_weights_mag_slu.01')
     sacco['magccd4'] = PyTango.DeviceProxy('srv-tango-srf-01:20000/slu/diagnostics/ccd_slu.10')
-
     sacco['ldm_kom1'] = PyTango.DeviceProxy('srv-tango-ldm-01:20000/ldm/motor/kom_slu_ldm.01')
     sacco['ldm_kom2'] = PyTango.DeviceProxy('srv-tango-ldm-01:20000/ldm/motor/kom_slu_ldm.02')
     sacco['ldm_rots1'] = PyTango.DeviceProxy('srv-tango-ldm-01:20000/ldm/motor/rots_slu_ldm.01')
@@ -116,7 +106,6 @@ try:
     sacco['ldm_gentec2'] = PyTango.DeviceProxy('srv-tango-ldm-01:20000/ldm/energy_meter/ems_slu_ldm.02')
     sacco['ldm_fb1'] = PyTango.DeviceProxy('srv-tango-ldm-01:20000/ldm/feedback/rtltf_ldm.01')
     sacco['ldm_fb2'] = PyTango.DeviceProxy('srv-tango-ldm-01:20000/ldm/feedback/rtltf_ldm.02')
-
 except PyTango.DevFailed:
     print('error defining sacco DeviceProxys')
 
@@ -187,7 +176,7 @@ class MainWindow(QDialog):
 #        self.contienitab.addTab(self.tab12, "DiProi")
         self.contienitab.addTab(self.tab13, "LDM")
 #        self.contienitab.addTab(self.tab13, "MagneDyn")
-
+        self.lot0 = QGridLayout()
         lot1 = QGridLayout()
         lot2 = QGridLayout()
         lot3 = QGridLayout()
@@ -200,7 +189,7 @@ class MainWindow(QDialog):
         lot10 = QGridLayout()
         lot11 = QGridLayout()
         lot12 = QGridLayout()
-        lot13 = QGridLayout()
+        self.lot13 = QGridLayout()
         lot14 = QGridLayout()
         self.tab1.setLayout(lot1)
         self.tab2.setLayout(lot2)
@@ -214,7 +203,7 @@ class MainWindow(QDialog):
         self.tab10.setLayout(lot10)
         self.tab11.setLayout(lot11)
         self.tab12.setLayout(lot12)
-        self.tab13.setLayout(lot13)
+        self.tab13.setLayout(self.lot13)
         self.tab14.setLayout(lot14)
     #1 monitor
         self.monitor_amplilabel = QLabel("Source")
@@ -398,6 +387,11 @@ class MainWindow(QDialog):
         self.deci1sequence_W = QLineEdit()
         self.deci1sequence = QPushButton('Change sequence')
         self.deci1sequence.clicked.connect(lambda: self.decimasequenza('decima1'))
+        self.deci1offset_r = LineEditRO()
+        self.deci1offset_w = QLineEdit()
+        self.deci1offset_a = QPushButton('Apply')
+        self.deci1offset_a.clicked.connect(lambda: self.decioffset('decima1'))
+        
         self.deci2L = QLabel('SEED / FEL')
         self.deci2R = LineEditRO()
         self.deci2on = QPushButton('ON (random)')
@@ -416,6 +410,11 @@ class MainWindow(QDialog):
         self.deci2sequence_W = QLineEdit()
         self.deci2sequence = QPushButton('Change sequence')
         self.deci2sequence.clicked.connect(lambda: self.decimasequenza('decima2'))
+        self.deci2offset_r = LineEditRO()
+        self.deci2offset_w = QLineEdit()
+        self.deci2offset_a = QPushButton('Apply')
+        self.deci2offset_a.clicked.connect(lambda: self.decioffset('decima2'))
+        
         self.deci3L = QLabel('SLU')
         self.deci3R = LineEditRO()
         self.deci3on = QPushButton('ON (random)')
@@ -434,6 +433,11 @@ class MainWindow(QDialog):
         self.deci3sequence_W = QLineEdit()
         self.deci3sequence = QPushButton('Change sequence')
         self.deci3sequence.clicked.connect(lambda: self.decimasequenza('decima3'))
+        self.deci3offset_r = LineEditRO()
+        self.deci3offset_w = QLineEdit()
+        self.deci3offset_a = QPushButton('Apply')
+        self.deci3offset_a.clicked.connect(lambda: self.decioffset('decima3'))
+        
         self.deciripristino = QPushButton('STOP ALL AND RESTORE CORRECT DELAYS')
         self.deciripristino.clicked.connect(self.decimafermatutto)
         lot4.addWidget(self.decimators, 0, 0, 1, 10)
@@ -450,7 +454,11 @@ class MainWindow(QDialog):
         lot4.addWidget(self.deci1sequence_R, 15, 1, 1, 5)
         lot4.addWidget(self.deci1sequence_W, 16, 0, 1, 5)
         lot4.addWidget(self.deci1sequence, 16, 5)
-        lot4.addWidget(QVLine(), 11, 6, 6, 1)
+        lot4.addWidget(QLabel('Offset'), 17, 0)
+        lot4.addWidget(self.deci1offset_r, 17, 1)
+        lot4.addWidget(self.deci1offset_w, 17, 2)
+        lot4.addWidget(self.deci1offset_a, 17, 3)
+        lot4.addWidget(QVLine(), 11, 6, 7, 1)
         lot4.addWidget(self.deci2L, 11, 7)
         lot4.addWidget(self.deci2R, 11, 8, 1, 5)
         lot4.addWidget(self.deci2on, 12, 7, 1, 2)
@@ -463,7 +471,11 @@ class MainWindow(QDialog):
         lot4.addWidget(self.deci2sequence_R, 15, 8, 1, 5)
         lot4.addWidget(self.deci2sequence_W, 16, 7, 1, 5)
         lot4.addWidget(self.deci2sequence, 16, 12)
-        lot4.addWidget(QVLine(), 11, 13, 6, 1)
+        lot4.addWidget(QLabel('Offset'), 17, 7)
+        lot4.addWidget(self.deci2offset_r, 17, 8)
+        lot4.addWidget(self.deci2offset_w, 17, 9)
+        lot4.addWidget(self.deci2offset_a, 17, 10)
+        lot4.addWidget(QVLine(), 11, 13, 7, 1)
         lot4.addWidget(self.deci3L, 11, 14)
         lot4.addWidget(self.deci3R, 11, 15, 1, 5)
         lot4.addWidget(self.deci3on, 12, 14, 1, 2)
@@ -476,6 +488,10 @@ class MainWindow(QDialog):
         lot4.addWidget(self.deci3sequence_R, 15, 15, 1, 5)
         lot4.addWidget(self.deci3sequence_W, 16, 14, 1, 5)
         lot4.addWidget(self.deci3sequence, 16, 19)
+        lot4.addWidget(QLabel('Offset'), 17, 14)
+        lot4.addWidget(self.deci3offset_r, 17, 15)
+        lot4.addWidget(self.deci3offset_w, 17, 16)
+        lot4.addWidget(self.deci3offset_a, 17, 17)
         lot4.addWidget(self.deciripristino, 20, 0, 1, 20)
     #5 delay
         self.vergogna_figura = plt.figure()
@@ -1048,47 +1064,47 @@ class MainWindow(QDialog):
         lo_bottoni.addWidget(self.LDM_feedback1_state, 13, 1)
         lo_bottoni.addWidget(self.LDM_feedback2, 14, 0)
         lo_bottoni.addWidget(self.LDM_feedback2_state, 14, 1)
-        lot13.addLayout(lo_bottoni, 0, 0, 11, 2)
-        lot13.addWidget(QVLine(), 0, 2, 11, 1)
+        self.lot13.addLayout(lo_bottoni, 0, 0, 11, 2)
+        self.lot13.addWidget(QVLine(), 0, 2, 11, 1)
         riga = 0
         
-        lot13.addWidget(self.LDM_label_MOTOR, riga, 3)
+        self.lot13.addWidget(self.LDM_label_MOTOR, riga, 3)
         riga +=1
-        lot13.addWidget(self.LDM_rots1_b, riga, 3)
-        lot13.addWidget(self.LDM_rots1_r, riga, 4)
-        lot13.addWidget(self.LDM_rots1_w, riga, 5)
-        lot13.addWidget(self.LDM_rots1_a, riga, 6)
-        lot13.addWidget(self.LDM_rots1_relative, riga, 7, 1, 2)
+        self.lot13.addWidget(self.LDM_rots1_b, riga, 3)
+        self.lot13.addWidget(self.LDM_rots1_r, riga, 4)
+        self.lot13.addWidget(self.LDM_rots1_w, riga, 5)
+        self.lot13.addWidget(self.LDM_rots1_a, riga, 6)
+        self.lot13.addWidget(self.LDM_rots1_relative, riga, 7, 1, 2)
         riga +=1
-        lot13.addWidget(self.LDM_rots2_b, riga, 3)
-        lot13.addWidget(self.LDM_rots2_r, riga, 4)
-        lot13.addWidget(self.LDM_rots2_w, riga, 5)
-        lot13.addWidget(self.LDM_rots2_a, riga, 6)
-        lot13.addWidget(self.LDM_rots2_relative, riga, 7, 1, 2)
+        self.lot13.addWidget(self.LDM_rots2_b, riga, 3)
+        self.lot13.addWidget(self.LDM_rots2_r, riga, 4)
+        self.lot13.addWidget(self.LDM_rots2_w, riga, 5)
+        self.lot13.addWidget(self.LDM_rots2_a, riga, 6)
+        self.lot13.addWidget(self.LDM_rots2_relative, riga, 7, 1, 2)
         riga +=1
-        lot13.addWidget(self.LDM_rots3_b, riga, 3)
-        lot13.addWidget(self.LDM_rots3_r, riga, 4)
-        lot13.addWidget(self.LDM_rots3_w, riga, 5)
-        lot13.addWidget(self.LDM_rots3_a, riga, 6)
-        lot13.addWidget(self.LDM_rots3_relative, riga, 7, 1, 2)
+        self.lot13.addWidget(self.LDM_rots3_b, riga, 3)
+        self.lot13.addWidget(self.LDM_rots3_r, riga, 4)
+        self.lot13.addWidget(self.LDM_rots3_w, riga, 5)
+        self.lot13.addWidget(self.LDM_rots3_a, riga, 6)
+        self.lot13.addWidget(self.LDM_rots3_relative, riga, 7, 1, 2)
         riga +=1
-        lot13.addWidget(self.LDM_trls2_b, riga, 3)
-        lot13.addWidget(self.LDM_trls2_r, riga, 4)
-        lot13.addWidget(self.LDM_trls2_w, riga, 5)
-        lot13.addWidget(self.LDM_trls2_a, riga, 6)
-        lot13.addWidget(self.LDM_trls2_relative, riga, 7, 1, 2)
+        self.lot13.addWidget(self.LDM_trls2_b, riga, 3)
+        self.lot13.addWidget(self.LDM_trls2_r, riga, 4)
+        self.lot13.addWidget(self.LDM_trls2_w, riga, 5)
+        self.lot13.addWidget(self.LDM_trls2_a, riga, 6)
+        self.lot13.addWidget(self.LDM_trls2_relative, riga, 7, 1, 2)
         riga +=1
-        lot13.addWidget(self.LDM_kom1_b, riga, 3)
-        lot13.addWidget(self.LDM_kom2_b, riga, 6)
+        self.lot13.addWidget(self.LDM_kom1_b, riga, 3)
+        self.lot13.addWidget(self.LDM_kom2_b, riga, 6)
 #        riga +=1
-        lot13.addWidget(self.LDM_kom1_rx, riga, 4)
-        lot13.addWidget(self.LDM_kom2_rx, riga, 7)
+        self.lot13.addWidget(self.LDM_kom1_rx, riga, 4)
+        self.lot13.addWidget(self.LDM_kom2_rx, riga, 7)
 #        riga +=1
-        lot13.addWidget(self.LDM_kom1_ry, riga, 5)
-        lot13.addWidget(self.LDM_kom2_ry, riga, 8)
+        self.lot13.addWidget(self.LDM_kom1_ry, riga, 5)
+        self.lot13.addWidget(self.LDM_kom2_ry, riga, 8)
         riga +=1
-        lot13.addWidget(self.LDM_kom1_rel, riga, 3, 5, 3)
-        lot13.addWidget(self.LDM_kom2_rel, riga, 6, 5, 3)
+        self.lot13.addWidget(self.LDM_kom1_rel, riga, 3, 5, 3)
+        self.lot13.addWidget(self.LDM_kom2_rel, riga, 6, 5, 3)
     #10 timer
     #11 timex
     #12 diproi
@@ -1162,10 +1178,10 @@ class MainWindow(QDialog):
                 risposta_calendario = ''
             self.beamlineattiva.setText(risposta_calendario)
             self.linea = risposta_calendario 
-#        if self.linea == 'LDM':
-#            self.tab13.show()
-#        else:
-#            self.tab13.hide()
+        if self.linea == 'LDM':
+            self.tab13.setEnabled(1)
+        else:
+            self.tab13.setEnabled(0)
 ####8 log
         try:
             risposta_archiviatore = sacco['archiviatore'].context
@@ -1817,8 +1833,9 @@ class MainWindow(QDialog):
             self.feedbackstopothersauto.setStyleSheet("background-color: lightgray")
 ####4 decimation
         try:
-            tmp = sacco['decima1'].read_attributes(['DelayMode', 'StatusMode', 'Sequence'])
+            tmp = sacco['decima1'].read_attributes(['DelayMode', 'StatusMode', 'Sequence', 'DelayOffset'])
             self.deci1sequence_R.setText(str(tmp[2].value).replace('[', '').replace(']','').replace(' ', ', '))
+            self.deci1offset_r.setText(str(tmp[3].value))
             if tmp[0].value and not tmp[1].value:
                 mod1 = 'Delay'
             elif not tmp[0].value and tmp[1].value:
@@ -1828,8 +1845,9 @@ class MainWindow(QDialog):
         except:
             mod1 = 'unknown'
         try:
-            tmp = sacco['decima2'].read_attributes(['DelayMode', 'StatusMode', 'Sequence'])
+            tmp = sacco['decima2'].read_attributes(['DelayMode', 'StatusMode', 'Sequence', 'DelayOffset'])
             self.deci2sequence_R.setText(str(tmp[2].value).replace('[', '').replace(']','').replace(' ', ', '))
+            self.deci2offset_r.setText(str(tmp[3].value))
             if tmp[0].value and not tmp[1].value:
                 mod2 = 'Delay'
             elif not tmp[0].value and tmp[1].value:
@@ -1839,8 +1857,9 @@ class MainWindow(QDialog):
         except:
             mod2 = 'unknown'
         try:
-            tmp = sacco['decima3'].read_attributes(['DelayMode', 'StatusMode', 'Sequence'])
+            tmp = sacco['decima3'].read_attributes(['DelayMode', 'StatusMode', 'Sequence', 'DelayOffset'])
             self.deci3sequence_R.setText(str(tmp[2].value).replace('[', '').replace(']','').replace(' ', ', '))
+            self.deci3offset_r.setText(str(tmp[3].value))
             if tmp[0].value and not tmp[1].value:
                 mod3 = 'Delay'
             elif not tmp[0].value and tmp[1].value:
@@ -2331,44 +2350,44 @@ class MainWindow(QDialog):
             self.monitor_vacuum.setStyleSheet("background-color: rgb(0, 255, 0)")
             self.contienitab.setTabText(4, "Vacuum")
 ####12 ldm
-#        if self.contienitab.currentIndex() == 8:
-        try:
-            tmp = sacco['ldm_kom1'].read_attributes(['Position_X', 'Position_Y'])
-            self.LDM_kom1_rx.setText(str(round(tmp[0].value, 4)))
-            self.LDM_kom1_ry.setText(str(round(tmp[1].value, 4)))
-        except:
-            self.LDM_kom1_rx.setText('#####')
-            self.LDM_kom1_ry.setText('#####')
-        try:
-            tmp = sacco['ldm_kom2'].read_attributes(['Position_X', 'Position_Y'])
-            self.LDM_kom2_rx.setText(str(round(tmp[0].value, 4)))
-        except:
-            self.LDM_kom2_rx.setText('#####')
-            self.LDM_kom2_ry.setText('#####')
-        try:
-            self.LDM_rots1_r.setText(str(round(sacco['ldm_rots1'].UserPosition, 3)))
-        except:
-            self.LDM_rots1_r.setText('#####')
-        try:
-            self.LDM_rots2_r.setText(str(round(sacco['ldm_rots2'].UserPosition, 3)))
-        except:
-            self.LDM_rots2_r.setText('#####')
-        try:
-            self.LDM_rots3_r.setText(str(round(sacco['ldm_rots3'].UserPosition, 3)))
-        except:
-            self.LDM_rots3_r.setText('#####')
-        try:
-            self.LDM_trls2_r.setText(str(round(sacco['ldm_trls2'].UserPosition, 3)))
-        except:
-            self.LDM_trls2_r.setText('#####')
-        try:
-            self.LDM_feedback1_state.setText(str(sacco['ldm_fb1'].State()))
-        except:
-            self.LDM_feedback1_state.setText('#####')
-        try:
-            self.LDM_feedback2_state.setText(str(sacco['ldm_fb2'].State()))
-        except:
-            self.LDM_feedback2_state.setText('#####')
+        if self.contienitab.currentIndex() == 8:
+            try:
+                tmp = sacco['ldm_kom1'].read_attributes(['Position_X', 'Position_Y'])
+                self.LDM_kom1_rx.setText(str(round(tmp[0].value, 4)))
+                self.LDM_kom1_ry.setText(str(round(tmp[1].value, 4)))
+            except:
+                self.LDM_kom1_rx.setText('#####')
+                self.LDM_kom1_ry.setText('#####')
+            try:
+                tmp = sacco['ldm_kom2'].read_attributes(['Position_X', 'Position_Y'])
+                self.LDM_kom2_rx.setText(str(round(tmp[0].value, 4)))
+            except:
+                self.LDM_kom2_rx.setText('#####')
+                self.LDM_kom2_ry.setText('#####')
+            try:
+                self.LDM_rots1_r.setText(str(round(sacco['ldm_rots1'].UserPosition, 3)))
+            except:
+                self.LDM_rots1_r.setText('#####')
+            try:
+                self.LDM_rots2_r.setText(str(round(sacco['ldm_rots2'].UserPosition, 3)))
+            except:
+                self.LDM_rots2_r.setText('#####')
+            try:
+                self.LDM_rots3_r.setText(str(round(sacco['ldm_rots3'].UserPosition, 3)))
+            except:
+                self.LDM_rots3_r.setText('#####')
+            try:
+                self.LDM_trls2_r.setText(str(round(sacco['ldm_trls2'].UserPosition, 3)))
+            except:
+                self.LDM_trls2_r.setText('#####')
+            try:
+                self.LDM_feedback1_state.setText(str(sacco['ldm_fb1'].State()))
+            except:
+                self.LDM_feedback1_state.setText('#####')
+            try:
+                self.LDM_feedback2_state.setText(str(sacco['ldm_fb2'].State()))
+            except:
+                self.LDM_feedback2_state.setText('#####')
         if self.somethingred != 0:
             self.globallarm.setText('Alarm ON')
             self.globallarm.setStyleSheet("background-color: rgb(255, 0, 0)")
@@ -2384,10 +2403,10 @@ class MainWindow(QDialog):
         self.linea = nuovalinea
         self.beamlineattiva.setText(str(self.linea))
         self.autodeterminazionedeipupoli = 1
-#        if self.linea == 'LDM':
-#            self.tab13.show()
-#        else:
-#            self.tab13.hide()
+        if self.linea == 'LDM':
+            self.tab13.show()
+        else:
+            self.tab13.hide()
 
     def apripss(self):
         os.system('/runtime/bin/laserpss -title Laser_safety_system &')
@@ -3100,6 +3119,23 @@ class MainWindow(QDialog):
                     sacco['triggerSL'].write_attribute(attribrutto, valore)
         csvfile.close()
 
+    def decioffset(self, chi):
+        if chi == 'decima1':
+            cosa = self.deci1offset_w.text()
+        elif chi == 'decima2':
+            cosa = self.deci2offset_w.text()
+        elif chi == 'decima3':
+            cosa = self.deci3offset_w.text()
+        try:
+            sacco[chi].write_attribute('DelayOffset', int(cosa))
+            
+        except:
+            print('error  ' + str(cosa))
+        tmp = sacco[chi].InfiniteCycle
+        sacco[chi].write_attribute('InfiniteCycle', 0)
+        sacco[chi].write_attribute('InfiniteCycle', 1)
+        sacco[chi].write_attribute('InfiniteCycle', tmp)
+
     def apridalaytotem(self):
         os.system('/runtime/bin/motion_controller slu/motor/trls_slu.05 -title SLU_TOTEM_DELAY_LINE &')
 
-- 
GitLab