From d896a50e0bc99e258e424a1186e07abcb84219b9 Mon Sep 17 00:00:00 2001 From: reiche Date: Tue, 6 May 2025 17:53:09 +0200 Subject: [PATCH] Initial Round of Sandbox implementation --- OpticsModel.py | 42 +++++++++++++++++++++++++++++++++++++++++- sandbox.py | 33 +++++++++++++++++++++++++++++---- 2 files changed, 70 insertions(+), 5 deletions(-) diff --git a/OpticsModel.py b/OpticsModel.py index e80fd13..5aafe44 100644 --- a/OpticsModel.py +++ b/OpticsModel.py @@ -16,6 +16,43 @@ class Model: # hook up events self.eventHandling() + def updateEnergy(self,E0): + self.om.forceEnergyAt('SINLH02.MBND100', E0*1e6) + + def updateElement(self,name,val): + + if 'MQUA' in name: + self.om.setRegExpElement(name[0:7], name[8:15], 'k1', float(val[0])) + if 'MSEX' in name: + self.om.setRegExpElement(name[0:7], name[8:15], 'k2', float(val[0])) + if 'MBND' in name: + self.om.setRegExpElement(name[0:7], 'MBND', 'angle', float(val[0])) + if 'UMOD' in name: + self.om.setRegExpElement(name[0:7], 'UMOD', 'K', float(val[0])) + if 'UIND' in name: + self.om.setRegExpElement(name[0:7], name[8:15], 'K', float(val[0])) + if 'SATUN' in name: + kx = 0 + ky = 1 + if 'LV' in val[1]: + kx = 1 + ky = 0 + if 'C' in val[1]: + kx = 0.5 + ky=0.5 + self.om.setRegExpElement(name[0:7], name[8:15], 'kx', kx) + self.om.setRegExpElement(name[0:7], name[8:15], 'ky', ky) + if 'RSYS' in name: + grad = float(val[0]) + phase = float(val[1]) + if 'CB' in name[0:7]: + grad = grad/ 4. + elif 'XB' in name[0:7] or 'SINSB03' in name or 'SINSB04' in name: + grad = grad/2 + self.om.setRegExpElement(name[0:7], 'RACC', 'Gradient', grad) + self.om.setRegExpElement(name[0:7], 'RACC', 'Phase', phase) + + def getElements(self): return self.om.listElement('*', 1) @@ -62,7 +99,7 @@ class Model: - + ##### very old code should be become obsolete after some nice matching files def updateModel(self): file ='SwissFELRef.json' with open(file) as f: @@ -97,6 +134,9 @@ class Model: else: print('Unknown tag:', key, data['settings'][key]) +##############################33 +# tracking + def eventHandling(self): self.parent.UITrack.clicked.connect(self.track) diff --git a/sandbox.py b/sandbox.py index ab55d92..239220a 100644 --- a/sandbox.py +++ b/sandbox.py @@ -13,11 +13,38 @@ class Sandbox: def __init__(self, parent=None,machine=False): self.parent=parent self.machine=machine - self.parent.MagReStart.editingFinished.connect(self.updateSandbox) self.parent.MagReFilter.editingFinished.connect(self.updateSandbox) + self.parent.Mach2ModMag.clicked.connect(self.updateModelEvent) + self.parent.SB2ModMag.clicked.connect(self.updateModelEvent) + self.parent.Mach2ModUnd.clicked.connect(self.updateModelEvent) + self.parent.SB2ModUnd.clicked.connect(self.updateModelEvent) + + def updateModelEvent(self): + if self.parent.sender() is self.parent.Mach2ModMag: + self.updateModel(self.parent.MagSB,2,True) + elif self.parent.sender() is self.parent.SB2ModMag: + self.updateModel(self.parent.MagSB, 1, True) + elif self.parent.sender() is self.parent.Mach2ModUnd: + self.updateModel(self.parent.UndSB, 3, False) + self.updateModel(self.parent.RFSB, 3, False) + elif self.parent.sender() is self.parent.SB2ModUnd: + self.updateModel(self.parent.UndSB, 1, False) + self.updateModel(self.parent.RFSB, 1, False) + def updateModel(self,sb,col,single): + for i in range(sb.rowCount()): + field=str(sb.item(i,0).text()) + val = str(sb.item(i, col).text()) + if val == '---': + continue + if single: + val = [val] + else: + val = [val,str(sb.item(i+1,col).text())] + self.parent.model.updateElement(field.replace('-','.'),val) + self.updateSandbox() def updateSandbox(self): @@ -61,10 +88,9 @@ class Sandbox: values = [] colors = [] for key in machine.keys(): - sbvalue = [key[0:7]] + sbvalue = [key[0:7]+'-RSYS'] sbcolor = [CWhite] mokey = key[0:7]+'.RACC100' - print(mokey) scl=1. if 'CB' in mokey: scl = 4 @@ -191,6 +217,5 @@ class Sandbox: sbcol.append(CRed) values.append(sbval) colors.append(sbcol) - self.updateSandboxCommon(sb, values, colors, labels)