From 84378cf9cfb19aa45ef4898412a269c08e398078 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Sat, 17 Sep 2022 09:57:43 +0200 Subject: [PATCH 01/10] added python ignore list --- .gitignore | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..73358ad --- /dev/null +++ b/.gitignore @@ -0,0 +1,139 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + From aa90834b7dbe39fae5478246b8ed721323d6c720 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Sat, 17 Sep 2022 09:58:15 +0200 Subject: [PATCH 02/10] added separate magnet file --- magnet.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 magnet.py diff --git a/magnet.py b/magnet.py new file mode 100644 index 0000000..fa8f9d0 --- /dev/null +++ b/magnet.py @@ -0,0 +1,14 @@ +from slic.core.adjustable import PVAdjustable + + +class Magnet(PVAdjustable): + + def __init__(self, ID, accuracy=0.01): + pvn_set = ID + ":I-SET" + pvn_read = ID + ":I-READ" + super().__init__(pvn_set, pvn_read, accuracy=accuracy) +# pvn_comp = ID + ":I_COMP" +# super().__init__(pvn_set, pvn_read, pvname_moving=pvn_comp) # COMP updates only once per second, so we cannot use it as moving status + + + From 349ddfa57fe96a27562f314a001f6488e54a9ff5 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Sat, 17 Sep 2022 09:58:53 +0200 Subject: [PATCH 03/10] added missing import for EcolScaler --- sfop.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sfop.py b/sfop.py index 7e31c0c..5876602 100644 --- a/sfop.py +++ b/sfop.py @@ -1,5 +1,9 @@ +from Ecol import EcolScaler from magnets import MagnetsScaler -mags = MagnetsScaler() -ecol = EcolScaler() + +ecol = EcolScaler() +mags = MagnetsScaler() + + From 8ee20f927851c6b40cdcef1ce4768c5c35ece559 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Sat, 17 Sep 2022 09:59:39 +0200 Subject: [PATCH 04/10] use separate magnet file; fixed enumeration typos --- Ecol.py | 27 +++++++++++++-------------- magnets.py | 11 ++++------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/Ecol.py b/Ecol.py index f8f818a..de96331 100644 --- a/Ecol.py +++ b/Ecol.py @@ -1,6 +1,9 @@ from slic.core.adjustable import Adjustable, PVAdjustable from slic.core.device import SimpleDevice +from magnet import Magnet + + class EcolScaler(Adjustable): def __init__(self, ID="ECOL-SCALER", factor=1): super().__init__(ID) @@ -20,15 +23,15 @@ class EcolScaler(Adjustable): ID, m01=mag01, m02=mag02, - m02=mag03, - m02=mag04, - m02=mag05, - m02=mag06, - m02=mag07, - m02=mag08, - m02=mag09, - m02=mag10, - m02=mag11 + m03=mag03, + m04=mag04, + m05=mag05, + m06=mag06, + m07=mag07, + m08=mag08, + m09=mag09, + m10=mag10, + m11=mag11 ) def get_current_value(self): return self.factor @@ -45,9 +48,5 @@ class EcolScaler(Adjustable): 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/magnets.py b/magnets.py index 78fcd8e..2c352de 100644 --- a/magnets.py +++ b/magnets.py @@ -1,6 +1,9 @@ from slic.core.adjustable import Adjustable, PVAdjustable from slic.core.device import SimpleDevice +from magnet import Magnet + + class MagnetsScaler(Adjustable): def __init__(self, ID="MAGNETS-SCALER", factor=1): super().__init__(ID) @@ -28,11 +31,5 @@ class MagnetsScaler(Adjustable): 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" -# pvn_comp = ID + ":I_COMP" -# 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) + From 08ac0c408e1101438bcfc4d0d0b6751e109f9ea2 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Sat, 17 Sep 2022 10:01:24 +0200 Subject: [PATCH 05/10] removed unused import; formatting --- Ecol.py | 6 +++++- magnets.py | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Ecol.py b/Ecol.py index de96331..4af7e86 100644 --- a/Ecol.py +++ b/Ecol.py @@ -1,10 +1,11 @@ -from slic.core.adjustable import Adjustable, PVAdjustable +from slic.core.adjustable import Adjustable from slic.core.device import SimpleDevice from magnet import Magnet class EcolScaler(Adjustable): + def __init__(self, ID="ECOL-SCALER", factor=1): super().__init__(ID) self.factor = factor @@ -33,8 +34,10 @@ class EcolScaler(Adjustable): m10=mag10, m11=mag11 ) + def get_current_value(self): return self.factor + def set_target_value(self, factor): old_factor = self.factor self.factor = factor @@ -45,6 +48,7 @@ class EcolScaler(Adjustable): 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) diff --git a/magnets.py b/magnets.py index 2c352de..7d65dd4 100644 --- a/magnets.py +++ b/magnets.py @@ -1,10 +1,11 @@ -from slic.core.adjustable import Adjustable, PVAdjustable +from slic.core.adjustable import Adjustable from slic.core.device import SimpleDevice from magnet import Magnet class MagnetsScaler(Adjustable): + def __init__(self, ID="MAGNETS-SCALER", factor=1): super().__init__(ID) self.factor = factor @@ -15,8 +16,10 @@ class MagnetsScaler(Adjustable): m1=mag1, # m2=mag2 ) + def get_current_value(self): return self.factor + def set_target_value(self, factor): old_factor = self.factor self.factor = factor @@ -28,6 +31,7 @@ class MagnetsScaler(Adjustable): 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) From ba71e6e4d2fb29d8df551aec3d0fc2765e5744d9 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Sat, 17 Sep 2022 10:09:29 +0200 Subject: [PATCH 06/10] made MagnetsScaler fully generic for any number of magnets; added missing tasks.append; removed some prints --- magnets.py | 14 ++++---------- sfop.py | 2 +- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/magnets.py b/magnets.py index 7d65dd4..5ee87b7 100644 --- a/magnets.py +++ b/magnets.py @@ -6,16 +6,11 @@ from magnet import Magnet class MagnetsScaler(Adjustable): - def __init__(self, ID="MAGNETS-SCALER", factor=1): + def __init__(self, ID, magnet_names, factor=1): super().__init__(ID) self.factor = factor - mag1 = Magnet("SINEG01-MSOL010") -# mag2 = Magnet("SINEG01-MSOL010") - self.magnets = SimpleDevice( - ID, - m1=mag1, -# m2=mag2 - ) + mags = {f"m{i+1}": Magnet(n) for i, n in enumerate(magnet_names)} + self.magnets = SimpleDevice(ID, **mags) def get_current_value(self): return self.factor @@ -23,12 +18,11 @@ class MagnetsScaler(Adjustable): 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: current = m.get() - print(current, current / old_factor * factor) t = m.set(current / old_factor * factor) + tasks.append(t) for t in tasks: # ... then we need to wait for all tasks to finish t.wait() diff --git a/sfop.py b/sfop.py index 5876602..7234380 100644 --- a/sfop.py +++ b/sfop.py @@ -3,7 +3,7 @@ from magnets import MagnetsScaler ecol = EcolScaler() -mags = MagnetsScaler() +mags = MagnetsScaler("MAGNETS_SCALER", ["SINEG01-MSOL010"]) From 629ef11b92092b3fb2857e295455a4f7f3498a9c Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Sat, 17 Sep 2022 10:15:39 +0200 Subject: [PATCH 07/10] forward the ID correctly --- magnet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/magnet.py b/magnet.py index fa8f9d0..30d0172 100644 --- a/magnet.py +++ b/magnet.py @@ -6,7 +6,7 @@ class Magnet(PVAdjustable): def __init__(self, ID, accuracy=0.01): pvn_set = ID + ":I-SET" pvn_read = ID + ":I-READ" - super().__init__(pvn_set, pvn_read, accuracy=accuracy) + super().__init__(pvn_set, pvn_read, accuracy=accuracy, ID=ID) # pvn_comp = ID + ":I_COMP" # super().__init__(pvn_set, pvn_read, pvname_moving=pvn_comp) # COMP updates only once per second, so we cannot use it as moving status From c88503fc4ff5956ec1442a06adfa08f89ee81556 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Sat, 17 Sep 2022 10:16:07 +0200 Subject: [PATCH 08/10] EcolScaler uses generic MagnetsScaler --- Ecol.py | 65 +++++++++++++++------------------------------------------ 1 file changed, 17 insertions(+), 48 deletions(-) diff --git a/Ecol.py b/Ecol.py index 4af7e86..f6d85fc 100644 --- a/Ecol.py +++ b/Ecol.py @@ -1,56 +1,25 @@ -from slic.core.adjustable import Adjustable -from slic.core.device import SimpleDevice - -from magnet import Magnet +from magnets import MagnetsScaler -class EcolScaler(Adjustable): +MAGNET_NAMES = ( + "SARCL02-MQUA130", + "SARCL02-MQUA150", + "SARCL02-MQSK160", + "SARCL02-MQUA210", + "SARCL02-MQUA250", + "SARCL02-MQKS300", + "SARCL02-MQUA310", + "SARCL02-MQUA350", + "SARCL02-MQSK420", + "SARCL02-MQUA430", + "SARCL02-MQUA460" +) - 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, - m03=mag03, - m04=mag04, - m05=mag05, - m06=mag06, - m07=mag07, - m08=mag08, - m09=mag09, - m10=mag10, - m11=mag11 - ) - def get_current_value(self): - return self.factor +class EcolScaler(MagnetsScaler): - 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) + def __init__(self, ID="ECOL-SCALER", magnet_names=MAGNET_NAMES, factor=1): + super().__init__(ID, magnet_names, factor=factor) From b657aaa47abb4598d0a7c0fbb54a6a1d2890a754 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Sat, 17 Sep 2022 10:17:50 +0200 Subject: [PATCH 09/10] file naming --- Ecol.py => ecol.py | 0 sfop.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename Ecol.py => ecol.py (100%) diff --git a/Ecol.py b/ecol.py similarity index 100% rename from Ecol.py rename to ecol.py diff --git a/sfop.py b/sfop.py index 7234380..ff653d1 100644 --- a/sfop.py +++ b/sfop.py @@ -1,4 +1,4 @@ -from Ecol import EcolScaler +from ecol import EcolScaler from magnets import MagnetsScaler From e46c6077dc45a6ed1e161040044e25090554aa20 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Sat, 17 Sep 2022 10:31:57 +0200 Subject: [PATCH 10/10] consistency ID naming scheme --- sfop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sfop.py b/sfop.py index ff653d1..c72a127 100644 --- a/sfop.py +++ b/sfop.py @@ -3,7 +3,7 @@ from magnets import MagnetsScaler ecol = EcolScaler() -mags = MagnetsScaler("MAGNETS_SCALER", ["SINEG01-MSOL010"]) +mags = MagnetsScaler("MAGNETS-SCALER", ["SINEG01-MSOL010"])