add Ecol.py script
This commit is contained in:
53
Ecol.py
Normal file
53
Ecol.py
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
from slic.core.adjustable import Adjustable, PVAdjustable
|
||||||
|
from slic.core.device import SimpleDevice
|
||||||
|
|
||||||
|
class EcolScaler(Adjustable):
|
||||||
|
def __init__(self, ID="ECOL-SCALER", factor=1):
|
||||||
|
super().__init__(ID)
|
||||||
|
self.factor = factor
|
||||||
|
mag01 = Magnet("SARCL02-MQUA130")
|
||||||
|
mag02 = Magnet("SARCL02-MQUA150")
|
||||||
|
mag03 = Magnet("SARCL02-MQSK160")
|
||||||
|
mag04 = Magnet("SARCL02-MQUA210")
|
||||||
|
mag05 = Magnet("SARCL02-MQUA250")
|
||||||
|
mag06 = Magnet("SARCL02-MQKS300")
|
||||||
|
mag07 = Magnet("SARCL02-MQUA310")
|
||||||
|
mag08 = Magnet("SARCL02-MQUA350")
|
||||||
|
mag09 = Magnet("SARCL02-MQSK420")
|
||||||
|
mag10 = Magnet("SARCL02-MQUA430")
|
||||||
|
mag11 = Magnet("SARCL02-MQUA460")
|
||||||
|
self.magnets = SimpleDevice(
|
||||||
|
ID,
|
||||||
|
m01=mag01,
|
||||||
|
m02=mag02,
|
||||||
|
m02=mag03,
|
||||||
|
m02=mag04,
|
||||||
|
m02=mag05,
|
||||||
|
m02=mag06,
|
||||||
|
m02=mag07,
|
||||||
|
m02=mag08,
|
||||||
|
m02=mag09,
|
||||||
|
m02=mag10,
|
||||||
|
m02=mag11
|
||||||
|
)
|
||||||
|
def get_current_value(self):
|
||||||
|
return self.factor
|
||||||
|
def set_target_value(self, factor):
|
||||||
|
old_factor = self.factor
|
||||||
|
self.factor = factor
|
||||||
|
print(old_factor, factor)
|
||||||
|
tasks = []
|
||||||
|
for m in self.magnets:
|
||||||
|
current = m.get()
|
||||||
|
t = m.set(current / old_factor * factor)
|
||||||
|
for t in tasks:
|
||||||
|
t.wait()
|
||||||
|
def is_moving(self):
|
||||||
|
return any(m.is_moving() for m in self.magnets)
|
||||||
|
|
||||||
|
class Magnet(PVAdjustable):
|
||||||
|
def __init__(self, ID):
|
||||||
|
pvn_set = ID + ":I-SET"
|
||||||
|
pvn_read = ID + ":I-READ"
|
||||||
|
super().__init__(pvn_set, pvn_read, accuracy=0.01)
|
||||||
|
|
22
magnets.py
22
magnets.py
@ -1,11 +1,7 @@
|
|||||||
from slic.core.adjustable import Adjustable, PVAdjustable
|
from slic.core.adjustable import Adjustable, PVAdjustable
|
||||||
from slic.core.device import SimpleDevice
|
from slic.core.device import SimpleDevice
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MagnetsScaler(Adjustable):
|
class MagnetsScaler(Adjustable):
|
||||||
|
|
||||||
def __init__(self, ID="MAGNETS-SCALER", factor=1):
|
def __init__(self, ID="MAGNETS-SCALER", factor=1):
|
||||||
super().__init__(ID)
|
super().__init__(ID)
|
||||||
self.factor = factor
|
self.factor = factor
|
||||||
@ -16,35 +12,23 @@ class MagnetsScaler(Adjustable):
|
|||||||
m1=mag1,
|
m1=mag1,
|
||||||
# m2=mag2
|
# m2=mag2
|
||||||
)
|
)
|
||||||
self._magnets = [
|
|
||||||
mag1,
|
|
||||||
# mag2
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def get_current_value(self):
|
def get_current_value(self):
|
||||||
return self.factor
|
return self.factor
|
||||||
|
|
||||||
def set_target_value(self, factor):
|
def set_target_value(self, factor):
|
||||||
old_factor = self.factor
|
old_factor = self.factor
|
||||||
self.factor = factor
|
self.factor = factor
|
||||||
print(old_factor, factor)
|
print(old_factor, factor)
|
||||||
tasks = [] # we collect tasks to run in parallel, ...
|
tasks = [] # we collect tasks to run in parallel, ...
|
||||||
for m in self._magnets:
|
for m in self.magnets:
|
||||||
current = m.get()
|
current = m.get()
|
||||||
print(current, current / old_factor * factor)
|
print(current, current / old_factor * factor)
|
||||||
t = m.set(current / old_factor * factor)
|
t = m.set(current / old_factor * factor)
|
||||||
for t in tasks: # ... then we need to wait for all tasks to finish
|
for t in tasks: # ... then we need to wait for all tasks to finish
|
||||||
t.wait()
|
t.wait()
|
||||||
|
|
||||||
def is_moving(self):
|
def is_moving(self):
|
||||||
return any(m.is_moving() for m in self.magnets)
|
return any(m.is_moving() for m in self.magnets)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Magnet(PVAdjustable):
|
class Magnet(PVAdjustable):
|
||||||
|
|
||||||
def __init__(self, ID):
|
def __init__(self, ID):
|
||||||
pvn_set = ID + ":I-SET"
|
pvn_set = ID + ":I-SET"
|
||||||
pvn_read = ID + ":I-READ"
|
pvn_read = ID + ":I-READ"
|
||||||
@ -52,7 +36,3 @@ class Magnet(PVAdjustable):
|
|||||||
# super().__init__(pvn_set, pvn_read, pvname_moving=pvn_comp) # COMP updates only once per second, so we cannot use it.
|
# super().__init__(pvn_set, pvn_read, pvname_moving=pvn_comp) # COMP updates only once per second, so we cannot use it.
|
||||||
super().__init__(pvn_set, pvn_read, accuracy=0.01)
|
super().__init__(pvn_set, pvn_read, accuracy=0.01)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user