From 8ce97e701f8bbd12760c039f335bad995c73a281 Mon Sep 17 00:00:00 2001 From: Benjamin Labrecque Date: Thu, 16 Jul 2026 13:37:48 +0200 Subject: [PATCH] feature: add new service tune --- docs/ioc/ioc_overview.md | 2 +- services/tune/current/app/pyproject.toml | 47 + .../current/app/src/agebd_tune/__init__.py | 1 + .../tune/current/app/src/agebd_tune/main.py | 31 + .../current/app/src/agebd_tune/service.py | 93 + services/tune/current/app/tests/test_app.py | 9 + services/tune/current/app/uv.lock | 275 ++ .../current/ioc/AGEBD-CPCL-TUNE_main.subs | 4 + .../ioc/AGEBD-CPCL-TUNE_parameters.yaml | 6 + services/tune/current/ioc/TUNE.template | 439 ++++ services/tune/current/ioc/startup.script | 1 + services/tune/current/qt/A_BD_Tune.ui | 2300 +++++++++++++++++ .../systemd/AGEBD-SERVICE-TUNE.service | 16 + 13 files changed, 3223 insertions(+), 1 deletion(-) create mode 100644 services/tune/current/app/pyproject.toml create mode 100644 services/tune/current/app/src/agebd_tune/__init__.py create mode 100644 services/tune/current/app/src/agebd_tune/main.py create mode 100644 services/tune/current/app/src/agebd_tune/service.py create mode 100644 services/tune/current/app/tests/test_app.py create mode 100644 services/tune/current/app/uv.lock create mode 100644 services/tune/current/ioc/AGEBD-CPCL-TUNE_main.subs create mode 100644 services/tune/current/ioc/AGEBD-CPCL-TUNE_parameters.yaml create mode 100644 services/tune/current/ioc/TUNE.template create mode 100644 services/tune/current/ioc/startup.script create mode 100644 services/tune/current/qt/A_BD_Tune.ui create mode 100644 services/tune/current/systemd/AGEBD-SERVICE-TUNE.service diff --git a/docs/ioc/ioc_overview.md b/docs/ioc/ioc_overview.md index 843d604..eb2d865 100644 --- a/docs/ioc/ioc_overview.md +++ b/docs/ioc/ioc_overview.md @@ -8,4 +8,4 @@ The ports are configured in the [service registry](../../docs/ioc/ioc_overview.m | AGEBD-CPCL-NTURNS | IOC providing PVs for the DBPM3 stage0 and stage1 nr. of turns calculation service | | AGEBD-CPCL-DBPM3CURR | | | AGEBD-CPCL-TAUBPM | | -| AGEBD-CPCL-PLOTS | | +| AGEBD-CPCL-TUNE | | diff --git a/services/tune/current/app/pyproject.toml b/services/tune/current/app/pyproject.toml new file mode 100644 index 0000000..0c62707 --- /dev/null +++ b/services/tune/current/app/pyproject.toml @@ -0,0 +1,47 @@ +[project] +name = "agebd-tune" +version = "0.1.0" +description = "AGEBD-TUNE Service" +requires-python = "==3.10.*" +dependencies = [ + "agebd", +] + +[dependency-groups] +dev = [ + "pyepics>=3.5.8", + "pytest>=8.4.2", + "ruff>=0.15.20", +] + +[tool.uv.sources] +# Path is relative to where agebd package is deployed on hla +# machines (see CI/CD in .gitea/workflows) +agebd = { path = "../../../../packages/agebd", editable = true } + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.uv] +package = true + +[tool.pytest.ini_options] +pythonpath = ["src"] +env = [ + "AGEBD_ENV=local", +] + +[tool.ruff] +include = [ + "src/**/*.py", + "tests/**/*.py", +] +line-length = 100 + +[tool.ruff.lint] +# use isort to sort imports +extend-select = ["I"] + +[tool.ruff.lint.isort] +known-first-party = ["agebd"] diff --git a/services/tune/current/app/src/agebd_tune/__init__.py b/services/tune/current/app/src/agebd_tune/__init__.py new file mode 100644 index 0000000..1800c27 --- /dev/null +++ b/services/tune/current/app/src/agebd_tune/__init__.py @@ -0,0 +1 @@ +from .service import PVs, Service diff --git a/services/tune/current/app/src/agebd_tune/main.py b/services/tune/current/app/src/agebd_tune/main.py new file mode 100644 index 0000000..f3eaab0 --- /dev/null +++ b/services/tune/current/app/src/agebd_tune/main.py @@ -0,0 +1,31 @@ +import typer + +from agebd.enums import LogLevel +from agebd.runner import CallbackRunner +from agebd.utils import init_logging +from agebd_tune import PVs, Service + + +# TODO: remove: cicd test 10 + +def main( + log_level: LogLevel = typer.Option( + LogLevel.INFO, + "--log-level", + "-l", + # Looks at the OS env variable first. If empty, falls back to "INFO" + envvar="AGEBD_LOG_LEVEL", + # help="Set log level: DEBUG, INFO, WARNING, ERROR, CRITICAL", + case_sensitive=False, + ), +): + init_logging(log_level) + service_name = "TUNE" + pvs = PVs(service_name=service_name) + service = Service(name=service_name, pvs=pvs) + runner = CallbackRunner(service=service) + runner.start() + + +if __name__ == "__main__": + typer.run(main) diff --git a/services/tune/current/app/src/agebd_tune/service.py b/services/tune/current/app/src/agebd_tune/service.py new file mode 100644 index 0000000..be08b40 --- /dev/null +++ b/services/tune/current/app/src/agebd_tune/service.py @@ -0,0 +1,93 @@ +import time + +from epics import dbr + +from agebd.pv import LocalPVLink +from agebd.service.base import BaseService +from agebd.service.pvs import BasePVs +from agebd.utils import printgetversion +from agebd.pv import get_pv_class + +__version__ = printgetversion(__file__) + +PV = get_pv_class() + + +class PVs(BasePVs): + # Option 1: + ## Service specific PVs from dedicated IOC + my_pv1 = PV("AGEBD-TUNE:AO") # TODO: is this a good PV to use? + + ## Service specific PVs from other IOCs + # ... + + def __init__(self, service_name: str, pv_factory=PV): + super().__init__(service_name, pv_factory) + PV = pv_factory + + # TODO: can we do this cleaner? Maybe mechanism for + # settings initial values in dev mode (e.g. ini file) + if isinstance(self.onoff, LocalPVLink): + self.onoff.value = True + + # Option 2: + ## Service specific PVs from dedicated IOC + self.my_pv2 = PV( + "AGEBD-TUNE:BO" + ) # TODO: is this a good PV to use? + + ## Service specific PVs from other IOCs + # ... + + # TODO: class attribute names usually lowercase + # usually it is advisable to trigger the mainloop of a service on changes of certain PVs: + self.CallbackPV = PV( + "AGEBD-TUNE:CALLBACK", auto_monitor=dbr.DBE_VALUE + ) # TODO: ok? + + +class Service(BaseService[PVs]): + def __init__( + self, + name: str, + pvs: PVs, + version: str = __version__, + sleep_interval: float = 0.1, + ): + super().__init__(name, pvs, version, sleep_interval) + + # TODO: What is this for? + self.path = "sls/bd/bin" + + def update(self): + # when callback is fired, this code will be executed + if self.CallbackFired: + ####################################################################################### + ####################################################################################### + # here goes all the code that your service + # is supposed to be running when the callback is fired + time.sleep(1) + ####################################################################################### + ####################################################################################### + + # callback done + self.CallbackFired = 0 + + ####################################################################################### + ####################################################################################### + # here goes all the code that your service + # is supposed to be running in any case, e.g., + + # update some pvs/vals + my_pv1_random_val = str(time.clock_gettime_ns(0))[-1] + self.pvs.my_pv1.put(my_pv1_random_val) + # self.pvs.my_pv2.put("MY_PV2 value") + + # get some pvs/vals + self.val1 = self.pvs.my_pv1.get() + self.val2 = self.pvs.my_pv2.get() + + # maybe sleep to limit the update loop execution rate + time.sleep(1) + ####################################################################################### + ####################################################################################### diff --git a/services/tune/current/app/tests/test_app.py b/services/tune/current/app/tests/test_app.py new file mode 100644 index 0000000..2afcc45 --- /dev/null +++ b/services/tune/current/app/tests/test_app.py @@ -0,0 +1,9 @@ +from agebd_tune import PVs, Service + + +def test_app(): + service_name = "DUMMY" + pvs = PVs(service_name=service_name) + service = Service(name=service_name, pvs=pvs) + service.CallbackFired = 1 + service.update() diff --git a/services/tune/current/app/uv.lock b/services/tune/current/app/uv.lock new file mode 100644 index 0000000..38d5733 --- /dev/null +++ b/services/tune/current/app/uv.lock @@ -0,0 +1,275 @@ +version = 1 +revision = 3 +requires-python = "==3.10.*" + +[[package]] +name = "agebd" +version = "0.1.0" +source = { editable = "../../../../packages/agebd" } +dependencies = [ + { name = "typer" }, +] + +[package.metadata] +requires-dist = [{ name = "typer", specifier = ">=0.23.2" }] + +[package.metadata.requires-dev] +dev = [ + { name = "pyright", specifier = ">=1.1.410" }, + { name = "pytest", specifier = ">=8.4.2" }, + { name = "ruff", specifier = ">=0.15.19" }, +] + +[[package]] +name = "agebd-tune" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "agebd" }, +] + +[package.dev-dependencies] +dev = [ + { name = "pyepics" }, + { name = "pytest" }, + { name = "ruff" }, +] + +[package.metadata] +requires-dist = [{ name = "agebd", editable = "../../../../packages/agebd" }] + +[package.metadata.requires-dev] +dev = [ + { name = "pyepics", specifier = ">=3.5.8" }, + { name = "pytest", specifier = ">=8.4.2" }, + { name = "ruff", specifier = ">=0.15.20" }, +] + +[[package]] +name = "annotated-doc" +version = "0.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, +] + +[[package]] +name = "packaging" +version = "26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "pyepics" +version = "3.5.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pyparsing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/57/29e1e9ef11ba2a3419f489946ae1d8190025a1e4f4e1c1686758bb2b6e0a/pyepics-3.5.10.tar.gz", hash = "sha256:f390cf9be40aba757b9528888114bc14d8db01086d0c93914720b1772460375b", size = 6150481, upload-time = "2026-05-20T18:44:36.336Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/36/e517fd83bd97d6bfe4105e0c6b322070c5cc36fb56a8fab2866e319f8804/pyepics-3.5.10-py3-none-any.whl", hash = "sha256:c9fac2c54f2b595268e66fc348cf5ec24e63718e7dbd07d73d1b37d4da6bfee1", size = 5332376, upload-time = "2026-05-20T18:44:34.242Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + +[[package]] +name = "ruff" +version = "0.15.21" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/36/6f65aa9989acdec45d417192d8f4e7921931d8a6cf87ac74bce3eed98a8e/ruff-0.15.21.tar.gz", hash = "sha256:d0cfc841c572283c36548f82664a54ce6565567f1b0d5b4cf2caac693d8b7500", size = 4769401, upload-time = "2026-07-09T20:01:34.005Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/c6/ede15cac6839f3dbce52565c8f5164a8210e669c7bc4decb03e5bdf47d0d/ruff-0.15.21-py3-none-linux_armv6l.whl", hash = "sha256:63ea0e965e5d73c90e95b2434beeafc70820536717f561b32ab6e777cb9bdf5d", size = 10854342, upload-time = "2026-07-09T20:00:53.998Z" }, + { url = "https://files.pythonhosted.org/packages/28/9d/d825b07ee7ea9e2d61df92a860033c94e06e7300d50a1c2653aac27d24fe/ruff-0.15.21-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0f212c5d7d54c01bbfe6dcab02b724a39300f3e34ed7acbe995ccb320a2c58bd", size = 11139539, upload-time = "2026-07-09T20:00:57.809Z" }, + { url = "https://files.pythonhosted.org/packages/f5/de/3b107712e642f063c7a9e0887c427b22cb44097de5aab36c05f2e280670c/ruff-0.15.21-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e6312e41bc96791299614995ea3a977c5857c3b5662b1ecef6755b02b87cb646", size = 10595437, upload-time = "2026-07-09T20:01:00.006Z" }, + { url = "https://files.pythonhosted.org/packages/9a/6f/b4523cc90ba239ede441447a19d0c968846a3012e5a0b0c5b62831a3d5e3/ruff-0.15.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d65b4831c6b2a4ba8ee6faa84049d44d982b7a706e622c4094c509e51673be", size = 10990053, upload-time = "2026-07-09T20:01:02.187Z" }, + { url = "https://files.pythonhosted.org/packages/92/cc/c6a9872a5375f0628875481cf2f66b13d7d865bf3ca2e57f91c7e762d976/ruff-0.15.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c5a913a589120ce67933d5d05fd6ddbcc2481c6a054980ee767f7414c72b4fd", size = 10666096, upload-time = "2026-07-09T20:01:04.299Z" }, + { url = "https://files.pythonhosted.org/packages/ab/97/c621f7a17e097f1790fa3af6374138823b330b2d03fc38337945daca212c/ruff-0.15.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef04b681d02ad4dc9620f00f83ac5c22f652d0e9a9cfe431d219b16ad5ccc41", size = 11537011, upload-time = "2026-07-09T20:01:06.771Z" }, + { url = "https://files.pythonhosted.org/packages/ea/51/d928727e476e25ccc57c6f449ffd80241a651a973ad949d39cfb2a771d28/ruff-0.15.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16d090c0740916594157e75b80d666eab8e78083b39b3b0e1d698f4670a17b86", size = 12347101, upload-time = "2026-07-09T20:01:08.859Z" }, + { url = "https://files.pythonhosted.org/packages/1e/88/8cd62026802b16018ad06931d87997cf795ba2a6239ab659606c87d96bf0/ruff-0.15.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a10e74757dd65004d779b73e2f3c5210156d9980b41224d50d2ebcf1db51e67", size = 11572001, upload-time = "2026-07-09T20:01:11.092Z" }, + { url = "https://files.pythonhosted.org/packages/b2/97/f63084cf55444fc110e8cb985ebfcc592af47f597d44453d778cb81bc156/ruff-0.15.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bab0905d2f29e0d9fbc3c373ed23db0095edaa3f71f1f4f519ec15134d9e85c8", size = 11549239, upload-time = "2026-07-09T20:01:13.27Z" }, + { url = "https://files.pythonhosted.org/packages/9d/77/f107da4a2874b7715914b03f09ba9c54424de3ff8a1cc5d015d3ee2ce0ac/ruff-0.15.21-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:00eca240af5789fec6fe7df74c088cc1f9644ed83027113468efba7c92b94075", size = 11535340, upload-time = "2026-07-09T20:01:15.206Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e9/601deb322d3303a7bf212b0100ead6f2ee3f6a044d89c30f2f92bf83c731/ruff-0.15.21-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262ab31557a75141325e32d3357f3597645a7f084e732b6b054dde428ecd9341", size = 10964048, upload-time = "2026-07-09T20:01:17.723Z" }, + { url = "https://files.pythonhosted.org/packages/ea/2e/0f2176d1e99c15192caea19c8c3a0a955246b4cb4de795042eeb616345cd/ruff-0.15.21-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:659c4e7a4212f83306045ec7c5e5a356d16d9a6ef4ae0c7a4d872914fc655d9d", size = 10667055, upload-time = "2026-07-09T20:01:19.73Z" }, + { url = "https://files.pythonhosted.org/packages/48/60/abd74a02e0c4214f12a68becfd30af7165cfdcb0e661ecdc60bbb949c09a/ruff-0.15.21-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9e866eab611a5f959d36df2d10e446973a3610bc42b0c15b31dc27977d59c233", size = 11242043, upload-time = "2026-07-09T20:01:21.947Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c6/583075d8ccabb4b229345edcaf1545eb3d8d6be90f686a479d7e94088bbf/ruff-0.15.21-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e89bc93c0d3803ba870b55c29671bad9dc6d94bb1eb181b056b52eb05b52854f", size = 11648064, upload-time = "2026-07-09T20:01:24.023Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3c/37d0ecb729a7cc2d393ea7dce316fc585680f35d93b8d62139d7d0a3700c/ruff-0.15.21-py3-none-win32.whl", hash = "sha256:01f8d5be84823c172b389e123174f781f9daf86d6c58719d603f941932195cdd", size = 10896555, upload-time = "2026-07-09T20:01:26.941Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b8/e43466b2a6067ce91e669068f6e28d6c719a920f014b070d5c8731725de3/ruff-0.15.21-py3-none-win_amd64.whl", hash = "sha256:d4b8d9a2f0f12b816b50447f6eccb9f4bb01a6b82c86b50fb3b5354b458dc6d3", size = 12038772, upload-time = "2026-07-09T20:01:29.497Z" }, + { url = "https://files.pythonhosted.org/packages/dd/75/e90ab9aeece218a9fc5a5bc3ec97d0ee6bb3c4ff95869463c1de58e29a1c/ruff-0.15.21-py3-none-win_arm64.whl", hash = "sha256:6e83115d4b9377c1cbc13abf0e051f069fab0ef815ea0504a8a008cee24dd0a8", size = 11375265, upload-time = "2026-07-09T20:01:31.772Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + +[[package]] +name = "typer" +version = "0.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "rich" }, + { name = "shellingham" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/37/78/fda3361b56efc27944f24225f6ecd13d96d6fcfe37bd0eb34e2f4c63f9fc/typer-0.27.0.tar.gz", hash = "sha256:629bd12ea5d13a17148125d9a264f949eb171fb3f120f9b04d85873cab054fa5", size = 203430, upload-time = "2026-07-15T19:21:07.007Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/03/26a383c9e58c213199d1aad1c3d353cfc22d4444ec6d2c0bf8ad02523843/typer-0.27.0-py3-none-any.whl", hash = "sha256:6f4b27631e47f077871b7dc30e933ec0131c1390fbe0e387ea5574b5bac9ccf1", size = 122716, upload-time = "2026-07-15T19:21:05.553Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] diff --git a/services/tune/current/ioc/AGEBD-CPCL-TUNE_main.subs b/services/tune/current/ioc/AGEBD-CPCL-TUNE_main.subs new file mode 100644 index 0000000..16e587d --- /dev/null +++ b/services/tune/current/ioc/AGEBD-CPCL-TUNE_main.subs @@ -0,0 +1,4 @@ +file TUNE.template { + pattern { DEVICE } + { AGEBD-TUNE } +} \ No newline at end of file diff --git a/services/tune/current/ioc/AGEBD-CPCL-TUNE_parameters.yaml b/services/tune/current/ioc/AGEBD-CPCL-TUNE_parameters.yaml new file mode 100644 index 0000000..ff8e70f --- /dev/null +++ b/services/tune/current/ioc/AGEBD-CPCL-TUNE_parameters.yaml @@ -0,0 +1,6 @@ +cpu_architecture: x86_64 +epics_version: 7.0.8 +ioc_host: sls-vserv-bd-01{{ agebd_env }} +ioc_port: {{ ioc_port }} +os: RHEL8 +os_id: rhel diff --git a/services/tune/current/ioc/TUNE.template b/services/tune/current/ioc/TUNE.template new file mode 100644 index 0000000..ad157d3 --- /dev/null +++ b/services/tune/current/ioc/TUNE.template @@ -0,0 +1,439 @@ +# HLA Service Control Parameters + +record(ao, "$(DEVICE):SVD-CLEAN-Neigenvalues") { + field(DESC, "Nr of EV in SVD") + field(VAL, "3") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-TbTFirstIndex") { + field(DESC, "Index of first TbT data point to use") + field(VAL, "0") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-TbTLastIndex") { + field(DESC, "Index of last TbT data point to use") + field(VAL, "511") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-NAveraging") { + field(DESC, "Nr. of samples to take for averaging") + field(VAL, "1") + field(PREC, "0") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-ZeroPaddingN") { + field(DESC, "Add zeropadding to obtain N datapoints") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-ROI-Xi") { + field(DESC, "First datapoint for hor. peak search") + field(VAL, "0.1") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-ROI-Xf") { + field(DESC, "Last datapoint for hor. peak search") + field(VAL, "0.5") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-ROI-Yi") { + field(DESC, "First datapoint for ver. peak search") + field(VAL, "0.1") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-ROI-Yf") { + field(DESC, "Last datapoint for ver. peak search") + field(VAL, "0.5") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-ROI-Zi") { + field(DESC, "First datapoint for long. peak search") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-ROI-Zf") { + field(DESC, "Last datapoint for long. peak search") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-HOR-PING-ISET") { + field(DESC, "default current value for x pinger") + field(VAL, "20") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-HOR-PING-DELAY") { + field(DESC, "default delay value for x pinger") + field(VAL, "80") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-VER-PING-ISET") { + field(DESC, "default current value for y pinger") + field(VAL, "20") + field(PINI, "YES") +} + +record(ao, "$(DEVICE):CONTROL-VER-PING-DELAY") { + field(DESC, "default delay value for y pinger") + field(VAL, "80") + field(PINI, "YES") +} + + +# # HLA Service Output/Result Parameters + +record(ao, "$(DEVICE):HORIZONTAL-PEAK1-FREQ") { + field(DESC, "Horizontal tune frequency") +} + +record(ao, "$(DEVICE):HORIZONTAL-PEAK1-AMP") { + field(DESC, "Horizontal tune amplitude") +} + +record(ao, "$(DEVICE):HORIZONTAL-PEAK2-FREQ") { + field(DESC, "Horizontal sideband 1 frequency") +} + +record(ao, "$(DEVICE):HORIZONTAL-PEAK2-AMP") { + field(DESC, "Horizontal sideband 1 amplitude") +} + +record(ao, "$(DEVICE):HORIZONTAL-PEAK3-FREQ") { + field(DESC, "Horizontal sideband 2 frequency") +} + +record(ao, "$(DEVICE):HORIZONTAL-PEAK3-AMP") { + field(DESC, "Horizontal sideband 2 amplitude") +} + +record(ao, "$(DEVICE):VERTICAL-PEAK1-FREQ") { + field(DESC, "Vertical tune frequency") +} + +record(ao, "$(DEVICE):VERTICAL-PEAK1-AMP") { + field(DESC, "Vertical tune amplitude") +} + +record(ao, "$(DEVICE):VERTICAL-PEAK2-FREQ") { + field(DESC, "Vertical sideband 1 frequency") +} + +record(ao, "$(DEVICE):VERTICAL-PEAK2-AMP") { + field(DESC, "Vertical sideband 1 amplitude") +} + +record(ao, "$(DEVICE):VERTICAL-PEAK3-FREQ") { + field(DESC, "Vertical sideband 2 frequency") +} + +record(ao, "$(DEVICE):VERTICAL-PEAK3-AMP") { + field(DESC, "Vertical sideband 2 amplitude") +} + +record(ao, "$(DEVICE):LONGITUDINAL-PEAK1-FREQ") { + field(DESC, "Longitudinal tune frequency") +} + +record(ao, "$(DEVICE):LONGITUDINAL-PEAK1-AMP") { + field(DESC, "Longitudinal tune amplitude") +} + +record(ao, "$(DEVICE):LONGITUDINAL-PEAK2-FREQ") { + field(DESC, "Longitudinal sideband 1 frequency") +} + +record(ao, "$(DEVICE):LONGITUDINAL-PEAK2-AMP") { + field(DESC, "Longitudinal sideband 1 amplitude") +} + +record(ao, "$(DEVICE):LONGITUDINAL-PEAK3-FREQ") { + field(DESC, "Longitudinal sideband 2 frequency") +} + +record(ao, "$(DEVICE):LONGITUDINAL-PEAK3-AMP") { + field(DESC, "Longitudinal sideband 2 amplitude") +} + +record(waveform, "$(DEVICE):HORIZONTAL-SPEC-ALL") { + field(DESC, "Entire measured horizontal spectrum") + field(NELM, "16384") + field(FTVL, "FLOAT") +} + +record(waveform, "$(DEVICE):HORIZONTAL-SPEC-ROI") { + field(DESC, "Entire measured horizontal spectrum") + field(NELM, "4096") + field(FTVL, "FLOAT") +} + +record(waveform, "$(DEVICE):VERTICAL-SPEC-ALL") { + field(DESC, "Entire measured vertical spectrum") + field(NELM, "16384") + field(FTVL, "FLOAT") +} + +record(waveform, "$(DEVICE):VERTICAL-SPEC-ROI") { + field(DESC, "Entire measured vertical spectrum") + field(NELM, "4096") + field(FTVL, "FLOAT") +} + +record(waveform, "$(DEVICE):LONGITUDINAL-SPEC-ALL") { + field(DESC, "Entire measured longitudinal spectrum") + field(NELM, "16384") + field(FTVL, "FLOAT") +} + +record(waveform, "$(DEVICE):LONGITUDINAL-SPEC-ROI") { + field(DESC, "Entire measured longitudinal spectrum") + field(NELM, "4096") + field(FTVL, "FLOAT") +} + + +record (ao,"$(DEVICE):Q1_NAFF"){ + field (DESC, "Horizontal tune calculated using NAFF") + field (VAL, 0) + field (EGU, "") +} + +record (ao,"$(DEVICE):Q2_NAFF"){ + field (DESC, "Vertical tune calculated using NAFF") + field (VAL, 0) + field (EGU, "") +} + +record (ao,"$(DEVICE):NPOINTS"){ + field (DESC, "Number of points in pos/fft waveform") + field (VAL, 16384) + field (EGU, "") +} + +record(waveform, "$(DEVICE):SPEC-SAMPLE-ALL") { + field(DESC, "FFT spectrum tune axis") + field(NELM, "16384") + field(FTVL, "FLOAT") +} + +record(waveform, "$(DEVICE):OSCILLATION-X-ALL") { + field(DESC, "Entire measured horizontal oscillation") + field(NELM, "16384") + field(FTVL, "FLOAT") +} + +record(waveform, "$(DEVICE):OSCILLATION-Y-ALL") { + field(DESC, "Entire measured vertical oscillation") + field(NELM, "16384") + field(FTVL, "FLOAT") +} + +record(waveform, "$(DEVICE):OSCILLATION-SAMPLE-ALL") { + field(DESC, "Sample index for oscillations") + field(NELM, "16384") + field(FTVL, "FLOAT") +} + +record (ao,"$(DEVICE):CONTROL-NAFF"){ + field (DESC, "Control NAFF calc.") + field (VAL, 1) + field (EGU, "") +} + +record (ao,"$(DEVICE):SINGLE-BPM"){ + field (VAL, 0) +} + +record (ao,"$(DEVICE):SVD-CLEAN"){ + field (VAL, 0) +} + +record (ao,"$(DEVICE):MEAS-TIME"){ + field (DESC, "Time for measurement") + field (VAL, 0) + field (EGU, "ms") +} + +record (ao,"$(DEVICE):DUMMY1"){ + field (DESC, "Dummy PV with value 1") + field (VAL, 1) +} + +record(stringout, "$(DEVICE):BPM-SELECT-SINGLE") { + field(DESC, "String defining selected BPM") + field(VAL, "ARS07-DBPM-0840") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM-01") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA-01") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM-02") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA-02") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM-03") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA-03") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM-04") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA-04") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM-05") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA-05") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM-06") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA-06") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM-07") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA-07") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM-08") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA-08") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM-09") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA-09") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM-10") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA-10") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM-11") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA-11") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPM-12") { + field(DESC, "Select BPMs") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo,"$(DEVICE):BPM-SELECT-BPMA-12") { + field(DESC, "Select BPMAs") + field(VAL, "0") + field(PINI, "YES") +} + +record (ao,"$(DEVICE):NAFF-HARMONICS"){ + field(DESC, "Number") + field(VAL, "5") + field(EGU, "") + field(PINI, "YES") + field(DRVH, "20") + field(DRVL, "1") +} diff --git a/services/tune/current/ioc/startup.script b/services/tune/current/ioc/startup.script new file mode 100644 index 0000000..0fa52ff --- /dev/null +++ b/services/tune/current/ioc/startup.script @@ -0,0 +1 @@ +epicsEnvSet("ENGINEER", "armborst") diff --git a/services/tune/current/qt/A_BD_Tune.ui b/services/tune/current/qt/A_BD_Tune.ui new file mode 100644 index 0000000..844a7bc --- /dev/null +++ b/services/tune/current/qt/A_BD_Tune.ui @@ -0,0 +1,2300 @@ + + + MainWindow + + + + 0 + 0 + 950 + 780 + + + + + 1600 + 800 + + + + MainWindow + + + + + + 20 + 400 + 911 + 331 + + + + 0 + + + + Oscillation plot + + + + + 10 + 10 + 421 + 271 + + + + Horizontal beam oscillation + + + Turn + + + x [mm] + + + AGEBD-TUNE:OSCILLATION-SAMPLE-ALL;AGEBD-TUNE:OSCILLATION-X-ALL + + + caCartesianPlot::NoSymbol + + + + 0 + 255 + 0 + + + + + + + caCartesianPlot::Auto + + + caCartesianPlot::Auto + + + 0;0 + + + 0;1 + + + + + + 460 + 10 + 431 + 271 + + + + Vertical beam oscillation + + + Turn + + + y [mm] + + + AGEBD-TUNE:OSCILLATION-SAMPLE-ALL;AGEBD-TUNE:OSCILLATION-Y-ALL + + + caCartesianPlot::NoSymbol + + + + 0 + 255 + 0 + + + + + + + caCartesianPlot::Auto + + + caCartesianPlot::Auto + + + 0;0.5 + + + + + + Tune plot + + + + + 10 + 10 + 421 + 271 + + + + Horizontal tune spectrum + + + Tune + + + Amplitude + + + AGEBD-TUNE:SPEC-SAMPLE-ALL;AGEBD-TUNE:HORIZONTAL-SPEC-ALL + + + caCartesianPlot::NoSymbol + + + + 0 + 255 + 0 + + + + + + + caCartesianPlot::Sticks + + + caCartesianPlot::User + + + caCartesianPlot::Auto + + + 0;0.5 + + + + + + 460 + 10 + 431 + 271 + + + + Vertical tune spectrum + + + Tune + + + Amplitude + + + AGEBD-TUNE:SPEC-SAMPLE-ALL;AGEBD-TUNE:VERTICAL-SPEC-ALL + + + caCartesianPlot::NoSymbol + + + + 0 + 255 + 0 + + + + + + + caCartesianPlot::Sticks + + + caCartesianPlot::User + + + caCartesianPlot::Auto + + + 0;0.5 + + + + + + + + 20 + 20 + 141 + 171 + + + + Tune loop control + + + + + 10 + 30 + 129 + 132 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + true + + + false + + + 28 + + + 28 + + + true + + + false + + + AGEBD-ALH:TUNE-ALIVE + + + caLed::Alarm + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + true + + + false + + + 28 + + + 28 + + + true + + + false + + + AGEBD-ALH:TUNE-ONOFF-RB + + + caLed::Alarm + + + + + + + Program alive + + + + + + + Measurement +running + + + Qt::AlignCenter + + + + + + + Activate +measurement + + + true + + + AGEBD-ALH:TUNE-ONOFF + + + + + + + + + + 180 + 20 + 281 + 141 + + + + Results + + + + + 10 + 110 + 111 + 20 + + + + + 10 + + + + Meas. time [ms] + + + + + + 130 + 110 + 71 + 20 + + + + AGEBD-TUNE:MEAS-TIME + + + + + + 10 + 30 + 211 + 71 + + + + + + + + 10 + + + + Q1 + + + + + + + AGEBD-TUNE:VERTICAL-PEAK1-FREQ + + + 4 + + + caLineEdit::User + + + caLineEdit::Channel + + + 100.000000000000000 + + + -100.000000000000000 + + + + + + + + 10 + + + + Q2 + + + + + + + AGEBD-TUNE:HORIZONTAL-PEAK1-FREQ + + + 4 + + + caLineEdit::User + + + 100.000000000000000 + + + -100.000000000000000 + + + + + + + + 10 + + + + FFT + + + Qt::AlignCenter + + + + + + + + 10 + + + + NAFF + + + Qt::AlignCenter + + + + + + + AGEBD-TUNE:Q1_NAFF + + + 4 + + + caLineEdit::User + + + caLineEdit::Channel + + + 100.000000000000000 + + + -100.000000000000000 + + + + + + + AGEBD-TUNE:Q2_NAFF + + + 4 + + + caLineEdit::User + + + caLineEdit::Channel + + + 100.000000000000000 + + + -100.000000000000000 + + + + + + + + + + 20 + 200 + 911 + 191 + + + + 2 + + + + Tune analysis settings + + + + + 190 + 10 + 91 + 141 + + + + SVD cleaning + + + + + 10 + 30 + 71 + 21 + + + + + Arial + 11 + 75 + true + + + + Enable + + + false + + + AGEBD-TUNE:SVD-CLEAN + + + + + + 10 + 90 + 71 + 41 + + + + 2 + + + 0 + + + AGEBD-TUNE:SVD-CLEAN-Neigenvalues + + + false + + + caNumeric::User + + + 115.000000000000000 + + + 1.000000000000000 + + + + + + 10 + 60 + 81 + 31 + + + + + 10 + + + + # Singular +values + + + + + + + 500 + 10 + 211 + 121 + + + + Region of Interest + + + + + 10 + 30 + 191 + 81 + + + + + + + + 45 + 20 + + + + + 9 + + + + 2 + + + AGEBD-TUNE:CONTROL-ROI-Yi + + + caSpinbox::User + + + caSpinbox::User + + + 1.000000000000000 + + + 0.000000000000000 + + + + + + + + 10 + + + + From + + + Qt::AlignCenter + + + + + + + + 45 + 20 + + + + + 9 + + + + 2 + + + 0.000000000000000 + + + AGEBD-TUNE:CONTROL-ROI-Xf + + + caSpinbox::User + + + caSpinbox::User + + + 1.000000000000000 + + + 0.000000000000000 + + + + + + + + 45 + 20 + + + + + 9 + + + + 2 + + + AGEBD-TUNE:CONTROL-ROI-Xi + + + caSpinbox::User + + + caSpinbox::User + + + 1.000000000000000 + + + 0.000000000000000 + + + + + + + + 10 + + + + Q1 + + + Qt::AlignCenter + + + + + + + + 10 + + + + Q2 + + + Qt::AlignCenter + + + + + + + + 10 + + + + To + + + Qt::AlignCenter + + + + + + + + 45 + 20 + + + + + 9 + + + + 2 + + + 0.000000000000000 + + + AGEBD-TUNE:CONTROL-ROI-Yf + + + caSpinbox::User + + + caSpinbox::User + + + 1.000000000000000 + + + 0.000000000000000 + + + + + + + + + + 290 + 10 + 191 + 111 + + + + Turn selection + + + + + 10 + 30 + 171 + 71 + + + + + + + + 45 + 20 + + + + + 9 + + + + 4 + + + 0 + + + false + + + AGEBD-TUNE:CONTROL-TbTLastIndex + + + caSpinbox::User + + + 4095.000000000000000 + + + 1.000000000000000 + + + + + + + + 10 + + + + First turn + + + + + + + + 10 + + + + Last turn + + + + + + + + 45 + 20 + + + + + 9 + + + + 4 + + + 0 + + + false + + + AGEBD-TUNE:CONTROL-TbTFirstIndex + + + false + + + caSpinbox::User + + + 4094.000000000000000 + + + 0.000000000000000 + + + + + + + + + + 20 + 10 + 141 + 51 + + + + + + + # samples + + + Qt::AlignCenter + + + + + + + 1 + + + 0 + + + true + + + AGEBD-TUNE:CONTROL-NAveraging + + + caNumeric::Channel + + + true + + + caNumeric::User + + + 99.000000000000000 + + + 1.000000000000000 + + + caNumeric::on_top + + + + + + + + + 20 + 60 + 141 + 91 + + + + + + + + Arial + 16 + 75 + true + + + + Calc. NAFF + + + true + + + AGEBD-TUNE:CONTROL-NAFF + + + + + + + + + + 9 + + + + # NAFF +harmonics + + + Qt::AlignCenter + + + + + + + 1 + + + 0 + + + true + + + AGEBD-TUNE:NAFF-HARMONICS + + + caNumeric::Channel + + + true + + + caNumeric::User + + + 99.000000000000000 + + + 1.000000000000000 + + + caNumeric::on_top + + + + + + + + + + + BPM select + + + + + 350 + 50 + 159 + 29 + + + + Recommended: +ARS07-DBPM-0840 + + + + + + 170 + 20 + 159 + 111 + + + + AGEBD-TUNE:BPM-SELECT-SINGLE + + + + ARS01-DBPM-0390 + + + + + ARS01-DBPM-0760 + + + + + ARS01-DBPM-1080 + + + + + ARS01-DBPM-1460 + + + + + ARS01-DBPM-1900 + + + + + ARS01-DBPM-2410 + + + + + ARS01-DBPM-2910 + + + + + ARS01-DBPM-4220 + + + + + ARS01-DBPM-4720 + + + + + ARS01-DBPM-5250 + + + + + ARS01-DBPM-5530 + + + + + ARS01-DBPM-5880 + + + + + ARS02-DBPM-1080 + + + + + ARS02-DBPM-1460 + + + + + ARS02-DBPM-1900 + + + + + ARS02-DBPM-2410 + + + + + ARS02-DBPM-2910 + + + + + ARS02-DBPM-4220 + + + + + ARS02-DBPM-4720 + + + + + ARS02-DBPM-5250 + + + + + ARS02-DBPM-5530 + + + + + ARS02-DBPM-5880 + + + + + ARS03-DBPM-0810 + + + + + ARS03-DBPM-1080 + + + + + ARS03-DBPM-1460 + + + + + ARS03-DBPM-1900 + + + + + ARS03-DBPM-2410 + + + + + ARS03-DBPM-2910 + + + + + ARS03-DBPM-4220 + + + + + ARS03-DBPM-4720 + + + + + ARS03-DBPM-5250 + + + + + ARS03-DBPM-5530 + + + + + ARS03-DBPM-5880 + + + + + ARS04-DBPM-0090 + + + + + ARS04-DBPM-0900 + + + + + ARS04-DBPM-1080 + + + + + ARS04-DBPM-1460 + + + + + ARS04-DBPM-1900 + + + + + ARS04-DBPM-2410 + + + + + ARS04-DBPM-2910 + + + + + ARS04-DBPM-4220 + + + + + ARS04-DBPM-4720 + + + + + ARS04-DBPM-5250 + + + + + ARS04-DBPM-5530 + + + + + ARS04-DBPM-5880 + + + + + ARS05-DBPM-0410 + + + + + ARS05-DBPM-1080 + + + + + ARS05-DBPM-1460 + + + + + ARS05-DBPM-1900 + + + + + ARS05-DBPM-2410 + + + + + ARS05-DBPM-2910 + + + + + ARS05-DBPM-4220 + + + + + ARS05-DBPM-4720 + + + + + ARS05-DBPM-5250 + + + + + ARS05-DBPM-5530 + + + + + ARS05-DBPM-5880 + + + + + ARS06-DBPM-1080 + + + + + ARS06-DBPM-1460 + + + + + ARS06-DBPM-1900 + + + + + ARS06-DBPM-2410 + + + + + ARS06-DBPM-2910 + + + + + ARS06-DBPM-4220 + + + + + ARS06-DBPM-4720 + + + + + ARS06-DBPM-5250 + + + + + ARS06-DBPM-5530 + + + + + ARS06-DBPM-5880 + + + + + ARS07-DBPM-0810 + + + + + ARS07-DBPM-0840 + + + + + ARS07-DBPM-1080 + + + + + ARS07-DBPM-1460 + + + + + ARS07-DBPM-1900 + + + + + ARS07-DBPM-2410 + + + + + ARS07-DBPM-2910 + + + + + ARS07-DBPM-4220 + + + + + ARS07-DBPM-4720 + + + + + ARS07-DBPM-5250 + + + + + ARS07-DBPM-5530 + + + + + ARS07-DBPM-5880 + + + + + ARS08-DBPM-1080 + + + + + ARS08-DBPM-1460 + + + + + ARS08-DBPM-1900 + + + + + ARS08-DBPM-2410 + + + + + ARS08-DBPM-2910 + + + + + ARS08-DBPM-4220 + + + + + ARS08-DBPM-4720 + + + + + ARS08-DBPM-5250 + + + + + ARS08-DBPM-5530 + + + + + ARS08-DBPM-5880 + + + + + ARS09-DBPM-0570 + + + + + ARS09-DBPM-1080 + + + + + ARS09-DBPM-1460 + + + + + ARS09-DBPM-1900 + + + + + ARS09-DBPM-2410 + + + + + ARS09-DBPM-2910 + + + + + ARS09-DBPM-4220 + + + + + ARS09-DBPM-4720 + + + + + ARS09-DBPM-5250 + + + + + ARS09-DBPM-5530 + + + + + ARS09-DBPM-5880 + + + + + ARS10-DBPM-1080 + + + + + ARS10-DBPM-1460 + + + + + ARS10-DBPM-1900 + + + + + ARS10-DBPM-2410 + + + + + ARS10-DBPM-2910 + + + + + ARS10-DBPM-4220 + + + + + ARS10-DBPM-4720 + + + + + ARS10-DBPM-5250 + + + + + ARS10-DBPM-5530 + + + + + ARS10-DBPM-5880 + + + + + ARS11-DBPM-0850 + + + + + ARS11-DBPM-1080 + + + + + ARS11-DBPM-1460 + + + + + ARS11-DBPM-1900 + + + + + ARS11-DBPM-2410 + + + + + ARS11-DBPM-2910 + + + + + ARS11-DBPM-4220 + + + + + ARS11-DBPM-4720 + + + + + ARS11-DBPM-5250 + + + + + ARS11-DBPM-5530 + + + + + ARS11-DBPM-5880 + + + + + ARS12-DBPM-0970 + + + + + ARS12-DBPM-1080 + + + + + ARS12-DBPM-1460 + + + + + ARS12-DBPM-1900 + + + + + ARS12-DBPM-2410 + + + + + ARS12-DBPM-2910 + + + + + ARS12-DBPM-4220 + + + + + ARS12-DBPM-4720 + + + + + ARS12-DBPM-5250 + + + + + ARS12-DBPM-5530 + + + + + ARS12-DBPM-5880 + + + + + + + 30 + 40 + 104 + 24 + + + + + 0 + 0 + + + + + Arial + 12 + 50 + false + + + + Single BPM + + + false + + + AGEBD-TUNE:SINGLE-BPM + + + + + + Other settings + + + + + 460 + 0 + 151 + 121 + + + + BPM trigger + + + + + 10 + 30 + 131 + 80 + + + + + + + -Trigger on pinger + + + Restart analysis script + + + /opt/gfa/python-3.8/latest/bin/python /sls/diag/bin/s_di_bpm_cmd.py put_trig_on_pinger + + + + + + + + + + + -Trigger on extraction + + + Restart analysis script + + + /opt/gfa/python-3.8/latest/bin/python /sls/diag/bin/s_di_bpm_cmd.py put_trig_on_extraction + + + + + + + + + + + -Trigger on 3 Hz + + + Restart analysis script + + + /opt/gfa/python-3.8/latest/bin/python /sls/diag/bin/s_di_bpm_cmd.py put_trig_on_3hz + + + + + + + + + + + + + 10 + 0 + 441 + 151 + + + + Pinger settings + + + + + 10 + 30 + 421 + 114 + + + + + + + + Lucida Sans Typewriter + 10 + + + + ARS01-MKIK-0320:I-READ-POS + + + + + + + + 20 + 16777215 + + + + + + + ARS01-MKIK-0290:CTRL-ON-OFF + + + + + + + + 10 + + + + Pinger V + + + + + + + + 10 + + + + Set current +[A] + + + Qt::AlignCenter + + + + + + + + 10 + + + + 4 + + + false + + + ABOMA-VME-KY-EVR0:OUT3-Delay-SP + + + + + + + + 150 + 20 + + + + + 10 + + + + 3 + + + false + + + ARS01-MKIK-0320:I-SET + + + + + + + + 10 + + + + Pinger H + + + + + + + + Lucida Sans Typewriter + 10 + + + + ARS01-MKIK-0290:I-READ-POS + + + + + + + + 10 + + + + Timing Delay +[us] + + + Qt::AlignCenter + + + + + + + + 20 + 16777215 + + + + + + + ARS01-MKIK-0320:CTRL-ON-OFF + + + + + + + + 10 + + + + Read current +[A] + + + Qt::AlignCenter + + + + + + + + 10 + + + + 4 + + + false + + + ABOMA-VME-KY-EVR0:OUT2-Delay-SP + + + + + + + + 150 + 20 + + + + + 10 + + + + 3 + + + false + + + ARS01-MKIK-0290:I-SET + + + + + + + + + + 750 + 30 + 71 + 31 + + + + ARS07-CECL-DBPM3-1:EEVR-EVENT0-ID + + + + + + 620 + 30 + 121 + 31 + + + + + 10 + + + + BPM Trigger ID +ARS07-DBPM-0840 + + + Qt::AutoText + + + Qt::AlignCenter + + + + + + + + + 0 + 0 + 950 + 25 + + + + + + + + caNumeric + QFrame +
caNumeric
+
+ + caMenu + QComboBox +
caMenu
+
+ + caToggleButton + QCheckBox +
caToggleButton
+
+ + caSpinbox + QFrame +
caSpinbox
+
+ + caLed + QWidget +
caLed
+
+ + caLineEdit + QLineEdit +
caLineEdit
+
+ + caCartesianPlot + QwtPlot +
caCartesianPlot
+
+ + caShellCommand + QWidget +
caShellCommand
+
+ + QwtPlot + QFrame +
qwt_plot.h
+
+
+ + +
diff --git a/services/tune/current/systemd/AGEBD-SERVICE-TUNE.service b/services/tune/current/systemd/AGEBD-SERVICE-TUNE.service new file mode 100644 index 0000000..f70014a --- /dev/null +++ b/services/tune/current/systemd/AGEBD-SERVICE-TUNE.service @@ -0,0 +1,16 @@ +[Unit] +Description=AGEBD-SERVICE-TUNE +After=network.target + +[Service] +Environment=AGEBD_ENV={{ agebd_env }} +ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh TUNE +Restart=no + +[Install] +WantedBy=default.target + +# https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html +# systemctl --user daemon-reload +# systemctl --user enable /sls/bd/bin/systemd/AGEBD-SERVICE-TUNE.service +# systemctl --user start AGEBD-SERVICE-TUNE