From cdb43c2d23f568092930a0a00ab7f54ad43f38ab Mon Sep 17 00:00:00 2001 From: Didier Voulot Date: Sat, 17 Sep 2022 08:07:48 +0200 Subject: [PATCH] add Ecol.py script --- Ecol.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 0 magnets.py | 22 +--------------------- sfop.py | 2 +- 4 files changed, 55 insertions(+), 22 deletions(-) create mode 100644 Ecol.py mode change 100644 => 100755 README.md diff --git a/Ecol.py b/Ecol.py new file mode 100644 index 0000000..f8f818a --- /dev/null +++ b/Ecol.py @@ -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) + diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/magnets.py b/magnets.py index 9aae526..78fcd8e 100644 --- a/magnets.py +++ b/magnets.py @@ -1,11 +1,7 @@ from slic.core.adjustable import Adjustable, PVAdjustable from slic.core.device import SimpleDevice - - - class MagnetsScaler(Adjustable): - def __init__(self, ID="MAGNETS-SCALER", factor=1): super().__init__(ID) self.factor = factor @@ -16,35 +12,23 @@ class MagnetsScaler(Adjustable): m1=mag1, # m2=mag2 ) - self._magnets = [ - mag1, -# mag2 - ] - - 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 = [] # we collect tasks to run in parallel, ... - for m in self._magnets: + for m in self.magnets: current = m.get() print(current, 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 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" @@ -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, accuracy=0.01) - - - - diff --git a/sfop.py b/sfop.py index 689d95c..7e31c0c 100644 --- a/sfop.py +++ b/sfop.py @@ -1,5 +1,5 @@ from magnets import MagnetsScaler mags = MagnetsScaler() - +ecol = EcolScaler()