From 637594bb829eeefdea52ecc14fcb70fd1f6c1da3 Mon Sep 17 00:00:00 2001 From: Benjamin Labrecque Date: Thu, 16 Jul 2026 09:50:04 +0200 Subject: [PATCH] feature: add new service postmortemlog --- docs/ioc/ioc_overview.md | 2 +- .../postmortemlog/current/app/pyproject.toml | 47 + .../app/src/agebd_postmortemlog/__init__.py | 1 + .../app/src/agebd_postmortemlog/main.py | 31 + .../app/src/agebd_postmortemlog/service.py | 93 ++ .../current/app/tests/test_app.py | 9 + services/postmortemlog/current/app/uv.lock | 275 ++++ .../ioc/AGEBD-CPCL-POSTMORTEMLOG_main.subs | 129 ++ .../AGEBD-CPCL-POSTMORTEMLOG_parameters.yaml | 6 + .../current/ioc/POSTMORTEMLOG.template | 37 + .../postmortemlog/current/ioc/startup.script | 1 + .../current/qt/A_BD_PostMortemLog.ui | 1197 +++++++++++++++++ .../AGEBD-SERVICE-POSTMORTEMLOG.service | 16 + 13 files changed, 1843 insertions(+), 1 deletion(-) create mode 100644 services/postmortemlog/current/app/pyproject.toml create mode 100644 services/postmortemlog/current/app/src/agebd_postmortemlog/__init__.py create mode 100644 services/postmortemlog/current/app/src/agebd_postmortemlog/main.py create mode 100644 services/postmortemlog/current/app/src/agebd_postmortemlog/service.py create mode 100644 services/postmortemlog/current/app/tests/test_app.py create mode 100644 services/postmortemlog/current/app/uv.lock create mode 100644 services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_main.subs create mode 100644 services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_parameters.yaml create mode 100644 services/postmortemlog/current/ioc/POSTMORTEMLOG.template create mode 100644 services/postmortemlog/current/ioc/startup.script create mode 100644 services/postmortemlog/current/qt/A_BD_PostMortemLog.ui create mode 100644 services/postmortemlog/current/systemd/AGEBD-SERVICE-POSTMORTEMLOG.service diff --git a/docs/ioc/ioc_overview.md b/docs/ioc/ioc_overview.md index fd4b8de..4a9d401 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-ORBITBUMP | | +| AGEBD-CPCL-POSTMORTEMLOG | | diff --git a/services/postmortemlog/current/app/pyproject.toml b/services/postmortemlog/current/app/pyproject.toml new file mode 100644 index 0000000..dc6c4c3 --- /dev/null +++ b/services/postmortemlog/current/app/pyproject.toml @@ -0,0 +1,47 @@ +[project] +name = "agebd-postmortemlog" +version = "0.1.0" +description = "AGEBD-POSTMORTEMLOG 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/postmortemlog/current/app/src/agebd_postmortemlog/__init__.py b/services/postmortemlog/current/app/src/agebd_postmortemlog/__init__.py new file mode 100644 index 0000000..1800c27 --- /dev/null +++ b/services/postmortemlog/current/app/src/agebd_postmortemlog/__init__.py @@ -0,0 +1 @@ +from .service import PVs, Service diff --git a/services/postmortemlog/current/app/src/agebd_postmortemlog/main.py b/services/postmortemlog/current/app/src/agebd_postmortemlog/main.py new file mode 100644 index 0000000..0c762eb --- /dev/null +++ b/services/postmortemlog/current/app/src/agebd_postmortemlog/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_postmortemlog 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 = "POSTMORTEMLOG" + 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/postmortemlog/current/app/src/agebd_postmortemlog/service.py b/services/postmortemlog/current/app/src/agebd_postmortemlog/service.py new file mode 100644 index 0000000..f0d50db --- /dev/null +++ b/services/postmortemlog/current/app/src/agebd_postmortemlog/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-POSTMORTEMLOG: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-POSTMORTEMLOG: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-POSTMORTEMLOG: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/postmortemlog/current/app/tests/test_app.py b/services/postmortemlog/current/app/tests/test_app.py new file mode 100644 index 0000000..3da58c5 --- /dev/null +++ b/services/postmortemlog/current/app/tests/test_app.py @@ -0,0 +1,9 @@ +from agebd_postmortemlog 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/postmortemlog/current/app/uv.lock b/services/postmortemlog/current/app/uv.lock new file mode 100644 index 0000000..4d2e5ff --- /dev/null +++ b/services/postmortemlog/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-postmortemlog" +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/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_main.subs b/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_main.subs new file mode 100644 index 0000000..ff33687 --- /dev/null +++ b/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_main.subs @@ -0,0 +1,129 @@ +file POSTMORTEMLOG.template { + pattern + { DEVICE } + { AGEBD-POSTMORTEMLOG } +} + +file POSTMORTEMLOG_15min10Hz.template { + pattern + { NAME INP} + # ---------- BEAM CURRENT -------------- + { CURRBPM AGEBD-DBPM3CURR:CURRENT-AVG } + { CURRPCT ARS07-DPCT-0000:CURR } + # ---------- BEAM LIFETIME -------------- + { TAUBPM AGEBD-TAUBPM:TAU } + { TAUPCT AGEBD-TAUPCT:TAU } + # ---------- TUNES -------------- + { QX AGEBD-TUNEBUMP:QX } + { QY AGEBD-TUNEBUMP:QY } + { QZ AGEBD-TUNEBUMP:QZ } + # ---------- LOSSES -------------- + { ARS01-DDRM-0375 ARS01-DDRM-0375:FET1_DOSE } + { ABRTL-DDRM-0670 ABRTL-DDRM-0670:FET1_BIAS_DOSE } + { ABRTL-DDRM-0950 ABRTL-DDRM-0950:FET1_DOSE } + { ARS01-DDRM-1530 ARS01-DDRM-1530:FET1_BIAS_DOSE } + { X05LA-DDRM-0330 X05LA-DDRM-0330:FET1_BIAS_DOSE } + { ARS05-DDRM-1530 ARS05-DDRM-1530:FET1_BIAS_DOSE } + { ARS05-DDRM-3500 ARS05-DDRM-3500:FET1_BIAS_DOSE } + { X09LA-DDRM-0330 X09LA-DDRM-0330:FET1_BIAS_DOSE } + { ARS09-DDRM-1530 ARS09-DDRM-1530:FET1_BIAS_DOSE } + { ARS09-DDRM-3500 ARS09-DDRM-3500:FET2_BIAS_DOSE } + { ARS12-DDRM-1530 ARS12-DDRM-1530:FET1_BIAS_DOSE } + { ARS12-DDRM-3500 ARS12-DDRM-3500:FET2_BIAS_DOSE } + { ARS12-DDRM-4400 ARS12-DDRM-4400:FET2_BIAS_DOSE } + { ARS12-DDRM-5480 ARS12-DDRM-5480:FET1_BIAS_DOSE } + # ---------- RF -------------- + { MASTERFREQ-SET AGERF-MO01:FREQ-SET } + { MASTERFREQ-GET AGERF-MO01:FREQ-GET } + { RFPOW-0140-INP ARS05-RCAV-0140:CO1i-POWER-MAX } + { RFPOW-0060-INP ARS05-RCAV-0060:CO1i-POWER-MAX } + { RFPOW-0230-INP ARS05-RCAV-0230:CO1i-POWER-MAX } + { RFPOW-0310-INP ARS05-RCAV-0310:CO1i-POWER-MAX } + { RFPOW-0060-REF ARS05-RCAV-0060:CO1r-POWER-MAX } + { RFPOW-0140-REF ARS05-RCAV-0140:CO1r-POWER-MAX } + { RFPOW-0230-REF ARS05-RCAV-0230:CO1r-POWER-MAX } + { RFPOW-0310-REF ARS05-RCAV-0310:CO1r-POWER-MAX } + # ---------- BEAM SIZE -------------- + { X01DD-SIGX X01DD-FE-CAM1:SIG-X } + { X01DD-SIGY X01DD-FE-CAM1:SIG-Y } + { X08DB-SIGX X08DB-FE-CAM1:SIG-X } + { X08DB-SIGY X08DB-FE-CAM1:SIG-Y } + # ---------- VACUUM -------------- + { VACMAX ARIVA-VMAVE:PRESS-MAX } + { VACMAXFE ARIVA-VMAVE-FE:PRESS-MAX } + { ARS01-VMCC-0110 ARS01-VMCC-0110:PRESSURE } + { ARS01-VMCC-0210 ARS01-VMCC-0210:PRESSURE } + { ARS01-VMCC-0225 ARS01-VMCC-0225:PRESSURE } + { ARS01-VMCC-0310 ARS01-VMCC-0310:PRESSURE } + { ARS01-VMCC-1550 ARS01-VMCC-1550:PRESSURE } + { ARS01-VMCC-3510 ARS01-VMCC-3510:PRESSURE } + { ARS01-VMCC-5460 ARS01-VMCC-5460:PRESSURE } + { ARS02-VMCC-0110 ARS02-VMCC-0110:PRESSURE } + { ARS02-VMCC-0210 ARS02-VMCC-0210:PRESSURE } + { ARS02-VMCC-0310 ARS02-VMCC-0310:PRESSURE } + { ARS02-VMCC-1550 ARS02-VMCC-1550:PRESSURE } + { ARS02-VMCC-3510 ARS02-VMCC-3510:PRESSURE } + { ARS02-VMCC-5460 ARS02-VMCC-5460:PRESSURE } + { ARS03-VMCC-0110 ARS03-VMCC-0110:PRESSURE } + { ARS03-VMCC-0320 ARS03-VMCC-0320:PRESSURE } + { ARS03-VMCC-1550 ARS03-VMCC-1550:PRESSURE } + { ARS03-VMCC-3510 ARS03-VMCC-3510:PRESSURE } + { ARS03-VMCC-5460 ARS03-VMCC-5460:PRESSURE } + { ARS04-VMCC-0110 ARS04-VMCC-0110:PRESSURE } + { ARS04-VMCC-1550 ARS04-VMCC-1550:PRESSURE } + { ARS04-VMCC-3510 ARS04-VMCC-3510:PRESSURE } + { ARS04-VMCC-5460 ARS04-VMCC-5460:PRESSURE } + { ARS05-VMCC-0110 ARS05-VMCC-0110:PRESSURE } + { ARS05-VMCC-0115 ARS05-VMCC-0115:PRESSURE } + { ARS05-VMCC-0210 ARS05-VMCC-0210:PRESSURE } + { ARS05-VMCC-0215 ARS05-VMCC-0215:PRESSURE } + { ARS05-VMCC-0310 ARS05-VMCC-0310:PRESSURE } + { ARS05-VMCC-0315 ARS05-VMCC-0315:PRESSURE } + { ARS05-VMCC-0410 ARS05-VMCC-0410:PRESSURE } + { ARS05-VMCC-0415 ARS05-VMCC-0415:PRESSURE } + { ARS05-VMCC-0510 ARS05-VMCC-0510:PRESSURE } + { ARS05-VMCC-0520 ARS05-VMCC-0520:PRESSURE } + { ARS05-VMCC-0530 ARS05-VMCC-0530:PRESSURE } + { ARS05-VMCC-0810 ARS05-VMCC-0810:PRESSURE } + { ARS05-VMCC-1550 ARS05-VMCC-1550:PRESSURE } + { ARS05-VMCC-3510 ARS05-VMCC-3510:PRESSURE } + { ARS05-VMCC-5460 ARS05-VMCC-5460:PRESSURE } + { ARS06-VMCC-0110 ARS06-VMCC-0110:PRESSURE } + { ARS06-VMCC-1550 ARS06-VMCC-1550:PRESSURE } + { ARS06-VMCC-3510 ARS06-VMCC-3510:PRESSURE } + { ARS06-VMCC-5460 ARS06-VMCC-5460:PRESSURE } + { ARS07-VMCC-0010 ARS07-VMCC-0010:PRESSURE } + { ARS07-VMCC-0120 ARS07-VMCC-0120:PRESSURE } + { ARS07-VMCC-0210 ARS07-VMCC-0210:PRESSURE } + { ARS07-VMCC-1550 ARS07-VMCC-1550:PRESSURE } + { ARS07-VMCC-3510 ARS07-VMCC-3510:PRESSURE } + { ARS07-VMCC-5460 ARS07-VMCC-5460:PRESSURE } + { ARS08-VMCC-0110 ARS08-VMCC-0110:PRESSURE } + { ARS08-VMCC-1550 ARS08-VMCC-1550:PRESSURE } + { ARS08-VMCC-3510 ARS08-VMCC-3510:PRESSURE } + { ARS08-VMCC-5460 ARS08-VMCC-5460:PRESSURE } + { ARS09-VMCC-0110 ARS09-VMCC-0110:PRESSURE } + { ARS09-VMCC-0120 ARS09-VMCC-0120:PRESSURE } + { ARS09-VMCC-0410 ARS09-VMCC-0410:PRESSURE } + { ARS09-VMCC-0510 ARS09-VMCC-0510:PRESSURE } + { ARS09-VMCC-0810 ARS09-VMCC-0810:PRESSURE } + { ARS09-VMCC-1550 ARS09-VMCC-1550:PRESSURE } + { ARS09-VMCC-3510 ARS09-VMCC-3510:PRESSURE } + { ARS09-VMCC-5460 ARS09-VMCC-5460:PRESSURE } + { ARS10-VMCC-0110 ARS10-VMCC-0110:PRESSURE } + { ARS10-VMCC-1550 ARS10-VMCC-1550:PRESSURE } + { ARS10-VMCC-3510 ARS10-VMCC-3510:PRESSURE } + { ARS10-VMCC-5460 ARS10-VMCC-5460:PRESSURE } + { ARS11-VMCC-0110 ARS11-VMCC-0110:PRESSURE } + { ARS11-VMCC-0210 ARS11-VMCC-0210:PRESSURE } + { ARS11-VMCC-0310 ARS11-VMCC-0310:PRESSURE } + { ARS11-VMCC-0410 ARS11-VMCC-0410:PRESSURE } + { ARS11-VMCC-0510 ARS11-VMCC-0510:PRESSURE } + { ARS11-VMCC-1550 ARS11-VMCC-1550:PRESSURE } + { ARS11-VMCC-3510 ARS11-VMCC-3510:PRESSURE } + { ARS11-VMCC-5460 ARS11-VMCC-5460:PRESSURE } + { ARS12-VMCC-0110 ARS12-VMCC-0110:PRESSURE } + { ARS12-VMCC-1550 ARS12-VMCC-1550:PRESSURE } + { ARS12-VMCC-3510 ARS12-VMCC-3510:PRESSURE } + { ARS12-VMCC-5460 ARS12-VMCC-5460:PRESSURE } +} \ No newline at end of file diff --git a/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_parameters.yaml b/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_parameters.yaml new file mode 100644 index 0000000..ff8e70f --- /dev/null +++ b/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_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/postmortemlog/current/ioc/POSTMORTEMLOG.template b/services/postmortemlog/current/ioc/POSTMORTEMLOG.template new file mode 100644 index 0000000..857d84a --- /dev/null +++ b/services/postmortemlog/current/ioc/POSTMORTEMLOG.template @@ -0,0 +1,37 @@ +# This is a template for preaparing an IOC providing BD Service specific PVs +# Access Security Groups: +# DEFAULT - logt wenn EGU oder so veraendert werden +# LOG - logt wenn neuer wert geschrieben wird +# PROTECTED - verhindert versuchte caputs auf alle fields ausser VAL +# READONLY - verhindert versuchte caputs und aktiviert caputlog +# Input links can specify CA, CP, or CPP. +# If the input link specifies CA, it will be forced to be a Channel Access link. +# If the input link specifies CP, it will also be forced to be a Channel Access link; in addition, it will cause the record containing the input link to process whenever a monitor is posted, no matter what the record's SCAN field specifies. +# If the input link specifies CPP, it means the same thing as CP, except that the record will be processed if and only if the record itself specifies passive in its SCAN field. Output links can specify CA, which will simply cause them to be Channel Access links. +# + +record(ao, "$(DEVICE):AO") { + field(DESC, "Analog Output Record (ao)") + field(ASG, "PROTECTED") + field(VAL, "0") + field(PINI, "YES") +} + +record(bo, "$(DEVICE):BO") { + field(DESC, "Binary Output Record (bo)") + field(ASG, "READONLY") + field(ZSV, "MINOR") + field(OSV, "NO_ALARM") + field(VAL, "1") + field(PINI, "YES") +} + +# TODO: ok? +record(bo, "$(DEVICE):CALLBACK") { + field(DESC, "Callback PV to listen to for changes") + field(ASG, "READONLY") + field(ZSV, "MINOR") + field(OSV, "NO_ALARM") + field(VAL, "1") + field(PINI, "YES") +} \ No newline at end of file diff --git a/services/postmortemlog/current/ioc/startup.script b/services/postmortemlog/current/ioc/startup.script new file mode 100644 index 0000000..0fa52ff --- /dev/null +++ b/services/postmortemlog/current/ioc/startup.script @@ -0,0 +1 @@ +epicsEnvSet("ENGINEER", "armborst") diff --git a/services/postmortemlog/current/qt/A_BD_PostMortemLog.ui b/services/postmortemlog/current/qt/A_BD_PostMortemLog.ui new file mode 100644 index 0000000..0d48d96 --- /dev/null +++ b/services/postmortemlog/current/qt/A_BD_PostMortemLog.ui @@ -0,0 +1,1197 @@ + + + MainWindow + + + Qt::WindowModal + + + + 0 + 0 + 1200 + 1275 + + + + MainWindow + + + false + + + + + + + + + 1460 + 210 + 70 + 20 + + + + + + + 1460 + 150 + 70 + 20 + + + + Reload + + + RELOAD + + + A + + + AGEBD-ALH:POSTMORTEMLOG-GUIRELOAD + + + caCalc::TriggerZeroToOne + + + + + + 1450 + 260 + 91 + 21 + + + + 99999 + + + true + + + AGEBD-MASTER:LOG + + + + + + 5 + 5 + 1190 + 1265 + + + + 3 + + + + Live + + + + + 5 + 415 + 1175 + 200 + + + + Horizontal Tune (nominal: Qx = 39.37) + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-QX + + + + 42 + 99 + 228 + + + + + + + caCartesianPlot::Sticks + + + caCartesianPlot::NoSymbol + + + + + + + 255 + 255 + 255 + + + + + 42 + 99 + 228 + + + + caCartesianPlot::User + + + caCartesianPlot::Auto + + + -870;30 + + + + + + true + + + false + + + 9 + + + caCartesianPlot::linear + + + + + + 5 + 620 + 1175 + 200 + + + + Vertival Tune (nominal: Qy = 15.22) + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-QY + + + + 139 + 26 + 150 + + + + + + + caCartesianPlot::Sticks + + + caCartesianPlot::NoSymbol + + + + + + + 255 + 255 + 255 + + + + + 139 + 26 + 150 + + + + caCartesianPlot::User + + + caCartesianPlot::Auto + + + -870;30 + + + + + + true + + + false + + + 9 + + + caCartesianPlot::linear + + + + + + 5 + 1030 + 1175 + 200 + + + + Vertival Beam Size (nominal: Sig_y = 10) + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-X01DD-SIGY + + + + 118 + 23 + 130 + + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-X08DB-SIGY + + + caCartesianPlot::Lines + + + caCartesianPlot::NoSymbol + + + + 154 + 30 + 170 + + + + + + + + 255 + 255 + 255 + + + + + 139 + 26 + 150 + + + + caCartesianPlot::User + + + caCartesianPlot::Auto + + + -870;30 + + + + + + true + + + false + + + 9 + + + caCartesianPlot::linear + + + + + + 5 + 825 + 1175 + 200 + + + + Horizontal Beam Size (nominal: Sig_x = 9) + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-X01DD-SIGX + + + + 38 + 92 + 208 + + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-X08DB-SIGX + + + caCartesianPlot::Lines + + + caCartesianPlot::NoSymbol + + + + 46 + 113 + 248 + + + + + + + + 255 + 255 + 255 + + + + + 42 + 99 + 228 + + + + caCartesianPlot::User + + + caCartesianPlot::Auto + + + -870;30 + + + + + + true + + + false + + + 9 + + + caCartesianPlot::linear + + + + + + 5 + 5 + 1175 + 200 + + + + Stored Beam Current + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-CURRPCT + + + + 0 + 255 + 0 + + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-CURRBPM + + + caCartesianPlot::Lines + + + caCartesianPlot::NoSymbol + + + + 0 + 200 + 0 + + + + + + + + 255 + 255 + 255 + + + + + 0 + 200 + 0 + + + + caCartesianPlot::User + + + caCartesianPlot::Auto + + + -870;30 + + + + + + true + + + false + + + 9 + + + caCartesianPlot::linear + + + + + + 5 + 210 + 1175 + 200 + + + + Beam Lifetime + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-TAUBPM + + + caCartesianPlot::FatDots + + + + 38 + 92 + 208 + + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-TAUPCT + + + caCartesianPlot::FatDots + + + caCartesianPlot::NoSymbol + + + + 46 + 113 + 248 + + + + + + + + 255 + 255 + 255 + + + + + 42 + 99 + 228 + + + + caCartesianPlot::User + + + caCartesianPlot::User + + + -870;30 + + + 0;15 + + + true + + + false + + + 9 + + + caCartesianPlot::linear + + + + + + Last + + + + + 5 + 1030 + 1175 + 200 + + + + Vertival Beam Size (nominal: Sig_y = 10) + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-X01DD-SIGY-LAST + + + + 118 + 23 + 130 + + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-X08DB-SIGY-LAST + + + caCartesianPlot::Lines + + + caCartesianPlot::NoSymbol + + + + 154 + 30 + 170 + + + + + + + + 255 + 255 + 255 + + + + + 139 + 26 + 150 + + + + caCartesianPlot::User + + + caCartesianPlot::Auto + + + -870;30 + + + + + + true + + + false + + + 9 + + + caCartesianPlot::linear + + + + + + 5 + 5 + 1175 + 200 + + + + Stored Beam Current + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-CURRPCT-LAST + + + + 0 + 255 + 0 + + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-CURRBPM-LAST + + + caCartesianPlot::Lines + + + caCartesianPlot::NoSymbol + + + + 0 + 200 + 0 + + + + + + + + 255 + 255 + 255 + + + + + 0 + 200 + 0 + + + + caCartesianPlot::User + + + caCartesianPlot::Auto + + + -870;30 + + + + + + true + + + false + + + 9 + + + caCartesianPlot::linear + + + + + + 5 + 415 + 1175 + 200 + + + + Horizontal Tune (nominal: Qx = 39.37) + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-QX-LAST + + + + 42 + 99 + 228 + + + + + + + caCartesianPlot::Sticks + + + caCartesianPlot::NoSymbol + + + + + + + 255 + 255 + 255 + + + + + 42 + 99 + 228 + + + + caCartesianPlot::User + + + caCartesianPlot::Auto + + + -870;30 + + + + + + true + + + false + + + 9 + + + caCartesianPlot::linear + + + + + + 5 + 825 + 1175 + 200 + + + + Horizontal Beam Size (nominal: Sig_x = 9) + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-X01DD-SIGX-LAST + + + + 38 + 92 + 208 + + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-X08DB-SIGX-LAST + + + caCartesianPlot::Lines + + + caCartesianPlot::NoSymbol + + + + 46 + 113 + 248 + + + + + + + + 255 + 255 + 255 + + + + + 42 + 99 + 228 + + + + caCartesianPlot::User + + + caCartesianPlot::Auto + + + -870;30 + + + + + + true + + + false + + + 9 + + + caCartesianPlot::linear + + + + + + 5 + 620 + 1175 + 200 + + + + Vertival Tune (nominal: Qy = 15.22) + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-QY-LAST + + + + 139 + 26 + 150 + + + + + + + caCartesianPlot::Sticks + + + caCartesianPlot::NoSymbol + + + + + + + 255 + 255 + 255 + + + + + 139 + 26 + 150 + + + + caCartesianPlot::User + + + caCartesianPlot::Auto + + + -870;30 + + + + + + true + + + false + + + 9 + + + caCartesianPlot::linear + + + + + + 5 + 210 + 1175 + 200 + + + + Beam Lifetime + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-TAUBPM-LAST + + + caCartesianPlot::FatDots + + + + 38 + 92 + 208 + + + + AGEBD-POSTMORTEMLOG:BUFFER-TIME;AGEBD-POSTMORTEMLOG:BUFFER-TAUPCT-LAST + + + caCartesianPlot::FatDots + + + caCartesianPlot::NoSymbol + + + + 46 + 113 + 248 + + + + + + + + 255 + 255 + 255 + + + + + 42 + 99 + 228 + + + + caCartesianPlot::User + + + caCartesianPlot::User + + + -870;30 + + + 0;15 + + + true + + + false + + + 9 + + + caCartesianPlot::linear + + + + + + Historic + + + + + Debug + + + + + 0 + 40 + 1187 + 1200 + + + + QTextEdit::NoWrap + + + + + + 250 + 5 + 241 + 30 + + + + Update Logs + + + AGEBD-MASTER:POSTMORTEMLOG-LOGS-REQ + + + Update Logs + + + + 160 + 160 + 160 + + + + + + + 1 + + + + + + 0 + 5 + 241 + 30 + + + + Test Trigger Post Mortem + + + AGEBD-POSTMORTEMLOG:TEST + + + Test Trigger Post Mortem + + + + 160 + 160 + 160 + + + + + + + 1 + + + + + + + + + caMessageButton + QPushButton +
caMessageButton
+
+ + caLineEdit + QLineEdit +
caLineEdit
+
+ + caCartesianPlot + QwtPlot +
caCartesianPlot
+
+ + caCalc + QLabel +
caCalc
+
+ + wmSignalPropagator + QLabel +
wmSignalPropagator
+
+ + QwtPlot + QFrame +
qwt_plot.h
+
+
+ + + + cacalc_2 + emitSignal(bool) + wmsignalpropagator + reloadwindow() + + + 1460 + 159 + + + 1460 + 222 + + + + + calineedit + textChanged(QString) + textBrowser + setHtml(QString) + + + 1495 + 270 + + + 600 + 671 + + + + +
diff --git a/services/postmortemlog/current/systemd/AGEBD-SERVICE-POSTMORTEMLOG.service b/services/postmortemlog/current/systemd/AGEBD-SERVICE-POSTMORTEMLOG.service new file mode 100644 index 0000000..eb0ff43 --- /dev/null +++ b/services/postmortemlog/current/systemd/AGEBD-SERVICE-POSTMORTEMLOG.service @@ -0,0 +1,16 @@ +[Unit] +Description=AGEBD-SERVICE-POSTMORTEMLOG +After=network.target + +[Service] +Environment=AGEBD_ENV={{ agebd_env }} +ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh POSTMORTEMLOG +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-POSTMORTEMLOG.service +# systemctl --user start AGEBD-SERVICE-POSTMORTEMLOG