Simplify the beam line activation logic

This commit is contained in:
Ryan Tang 2022-09-09 16:20:56 -04:00
parent 180af57c91
commit 9ccb10c9ad

View File

@ -60,13 +60,14 @@ class BeamRectElement():
canvas.itemconfig(self.beamPipe, fill = 'grey10')
def Activate(self):
self.Active = True
if self.Color == 'White' :
self.Color = 'Red'
canvas.itemconfig(self.beamPipe, fill = 'Red')
else:
self.Color = 'White'
canvas.itemconfig(self.beamPipe, fill = 'White')
def Blink(self):
if self.Active == True:
if self.Color == 'White' :
self.Color = 'Red'
canvas.itemconfig(self.beamPipe, fill = 'Red')
else:
self.Color = 'White'
canvas.itemconfig(self.beamPipe, fill = 'White')
class BeamCircleElement():
def __init__(self, Center, Size, Color):
@ -93,7 +94,7 @@ class DetectorStation():
def __init__(self, Center, Size, Name, Color):
self.Name = Name
self.ULC = [Center[0] - Size/2, Center[1] - Size/2]
self.Detector = canvas.create_oval(self.ULC[0], self.ULC[1], self.ULC[0] + Size, self.ULC[1]+Size, fill = Color, outline = Color)
self.Detector = canvas.create_oval(self.ULC[0], self.ULC[1], self.ULC[0] + Size, self.ULC[1]+Size, fill = Color, width = 0)
self.label = Label(canvas, text = Name, bg = Color, cursor = "hand1")
self.label.place(x=Center[0], y=Center[1], anchor = "center")
@ -103,14 +104,12 @@ class DetectorStation():
canvas.tag_bind(self.Detector, '<Enter>', self.HopOver)
canvas.tag_bind(self.Detector, '<Leave>', self.Leave)
def SetColor(Color):
def SetColor(self, Color):
canvas.itemconfig(self.Detector, fill = Color)
self.label.config(bg = Color)
def onClick(self, event):
global ActiveBeamLine
ActiveBeamLine = self.Name
print("========== ", ActiveBeamLine)
print("========== ", self.Name)
bl0.Deactivate()
bl1.Deactivate()
bl1a.Deactivate(); bl1a_1.Deactivate()
@ -122,6 +121,9 @@ class DetectorStation():
bl2c.Deactivate()
bl2c_1.Deactivate()
bl2c_2.Deactivate()
SetActiveBeamLine(self.Name)
return self.Name
def HopOver(self, event):
@ -133,11 +135,16 @@ class DetectorStation():
def GetName(self):
return self.Name
def Activate(self, OnOff):
def SetActiveBeamLine( ):
if OnOff == True:
self.SetColor('Pink')
else:
self.SetColor('Pink4')
global ActiveBeamLine
if ActiveBeamLine == "Gamma\nStation":
def SetActiveBeamLine(BeamLineName):
if BeamLineName == "Gamma\nStation":
bl0.Activate()
bl1.Activate()
@ -156,7 +163,15 @@ def SetActiveBeamLine( ):
bl2c_1.Deactivate()
bl2c_2.Deactivate()
elif ActiveBeamLine == "CATRiNA" :
GammaStation.Activate(True)
Catrina.Activate(False)
Resolut.Activate(False)
Anasen.Activate(False)
SPS.Activate(False)
Clarion2.Activate(False)
elif BeamLineName == "CATRiNA" :
bl0.Activate()
bl1.Activate()
@ -176,7 +191,14 @@ def SetActiveBeamLine( ):
bl2c_1.Deactivate()
bl2c_2.Deactivate()
elif ActiveBeamLine == "RESOLUT" :
GammaStation.Activate(False)
Catrina.Activate(True)
Resolut.Activate(False)
Anasen.Activate(False)
SPS.Activate(False)
Clarion2.Activate(False)
cursor="hand1"
elif BeamLineName == "RESOLUT" :
bl0.Activate()
bl1.Deactivate()
@ -196,7 +218,14 @@ def SetActiveBeamLine( ):
bl2c_1.Deactivate()
bl2c_2.Deactivate()
elif ActiveBeamLine == "ANASEN" :
GammaStation.Activate(False)
Catrina.Activate(False)
Resolut.Activate(True)
Anasen.Activate(False)
SPS.Activate(False)
Clarion2.Activate(False)
elif BeamLineName == "ANASEN" :
bl0.Activate()
bl1.Deactivate()
@ -216,7 +245,14 @@ def SetActiveBeamLine( ):
bl2c_1.Deactivate()
bl2c_2.Deactivate()
elif ActiveBeamLine == "SPS" :
GammaStation.Activate(False)
Catrina.Activate(False)
Resolut.Activate(False)
Anasen.Activate(True)
SPS.Activate(False)
Clarion2.Activate(False)
elif BeamLineName == "SPS" :
bl0.Activate()
bl1.Deactivate()
@ -236,7 +272,15 @@ def SetActiveBeamLine( ):
bl2c_1.Activate()
bl2c_2.Deactivate()
elif ActiveBeamLine == "CLARION-2" :
GammaStation.Activate(False)
Catrina.Activate(False)
Resolut.Activate(False)
Anasen.Activate(False)
SPS.Activate(True)
Clarion2.Activate(False)
elif BeamLineName == "CLARION-2" :
bl0.Activate()
bl1.Deactivate()
@ -256,6 +300,13 @@ def SetActiveBeamLine( ):
bl2c_1.Deactivate()
bl2c_2.Activate()
GammaStation.Activate(False)
Catrina.Activate(False)
Resolut.Activate(False)
Anasen.Activate(False)
SPS.Activate(False)
Clarion2.Activate(True)
############################## Start GUI
#windowSize = [3840, 1500]# 4K width
@ -281,7 +332,7 @@ canvas.pack( expand = True, fill = BOTH)
#==================== Beam line
#++++++++++++++++ source
RFsource1 = BeamRectElement( [windowSize[0]*0.9, windowSize[1]*0.95], [100, 40], 0, 'olivedrab')
RFsource1 = BeamRectElement( [windowSize[0]*0.9, windowSize[1]*0.8], [100, 40], 0, 'olivedrab')
RFsource2 = BeamRectElement( RFsource1.GetExitPos(), [20, 80], 0, 'olivedrab')
blS = BeamRectElement( RFsource2.GetExitPos(), [10, 200], 0, 'white')
@ -449,12 +500,32 @@ exit_button.place(x = windowSize[0] - 200, y = 50)
###################### Beam line activation
global ActiveBeamLine
ActiveBeamLine = Catrina.GetName()
Catrina.onClick(Event);
def update():
label['text'] = "Pressure : "+ str(randint(0, 1000)) + " bar"
SetActiveBeamLine()
bl0.Blink()
bl1.Blink()
bl1a.Blink();
bl1a_1.Blink()
bl1b.Blink()
bl1c.Blink()
bl0a.Blink();
bl3.Blink()
bl2a.Blink();
bl2a_1.Blink()
bl2b.Blink()
bl2c.Blink()
bl2c_1.Blink()
bl2c_2.Blink()
window.after(1000, update) # run itself again after 1000 ms
update()