Merge pull request 'Feature/add new service all migrate python' (#9) from feature/add-new-service-all-migrate-python into main
Deploy / deploy (push) Successful in 48s
Deploy / deploy (push) Successful in 48s
Reviewed-on: #9
This commit was merged in pull request #9.
This commit is contained in:
@@ -8,3 +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-SHIFTTOOL | |
|
||||
|
||||
Generated
+23
-1
@@ -7,11 +7,15 @@ name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "h5py" },
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "typer", specifier = ">=0.23.2" }]
|
||||
requires-dist = [
|
||||
{ name = "h5py", specifier = ">=3.16.0" },
|
||||
{ name = "typer", specifier = ">=0.23.2" },
|
||||
]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
@@ -79,6 +83,24 @@ 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 = "h5py"
|
||||
version = "3.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/db/33/acd0ce6863b6c0d7735007df01815403f5589a21ff8c2e1ee2587a38f548/h5py-3.16.0.tar.gz", hash = "sha256:a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738", size = 446526, upload-time = "2026-03-06T13:49:08.07Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e06f864bedb2c8e7c1358e6c73af48519e317457c444d6f3d332bb4e8fa6d7d9", size = 3724137, upload-time = "2026-03-06T13:47:35.242Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec86d4fffd87a0f4cb3d5796ceb5a50123a2a6d99b43e616e5504e66a953eca3", size = 3090112, upload-time = "2026-03-06T13:47:37.634Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/f5/e15b3d0dc8a18e56409a839e6468d6fb589bc5207c917399c2e0706eeb44/h5py-3.16.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:86385ea895508220b8a7e45efa428aeafaa586bd737c7af9ee04661d8d84a10d", size = 4844847, upload-time = "2026-03-06T13:47:39.811Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8975273c2c5921c25700193b408e28d6bdd0111c37468b2d4e25dcec4cd1d84d", size = 5065352, upload-time = "2026-03-06T13:47:41.489Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/ae/f2adc5d0ca9626db3277a3d87516e124cbc5d0eea0bd79bc085702d04f2c/h5py-3.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1677ad48b703f44efc9ea0c3ab284527f81bc4f318386aaaebc5fede6bbae56f", size = 4839173, upload-time = "2026-03-06T13:47:43.586Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/0b/e0c8c69da1d8838da023a50cd3080eae5d475691f7636b35eff20bb6ef20/h5py-3.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c4dd4cf5f0a4e36083f73172f6cfc25a5710789269547f132a20975bfe2434c", size = 5076216, upload-time = "2026-03-06T13:47:45.315Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdef06507725b455fccba9c16529121a5e1fbf56aa375f7d9713d9e8ff42454d", size = 3183639, upload-time = "2026-03-06T13:47:47.041Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iniconfig"
|
||||
version = "2.3.0"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
AGEBD-DBPM3CURR:ACCUMULATED-BEAM-DOSE
|
||||
@@ -0,0 +1,48 @@
|
||||
[project]
|
||||
name = "agebd-injectionguard"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-INJECTIONGUARD Service"
|
||||
requires-python = "==3.10.*"
|
||||
dependencies = [
|
||||
"agebd",
|
||||
"numpy>=2.0.2",
|
||||
]
|
||||
|
||||
[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"]
|
||||
@@ -0,0 +1 @@
|
||||
from .service import PVs, Service
|
||||
@@ -0,0 +1,31 @@
|
||||
import typer
|
||||
|
||||
from agebd.enums import LogLevel
|
||||
from agebd.runner import CallbackRunner
|
||||
from agebd.utils import init_logging
|
||||
from agebd_injectionguard 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 = "INJECTIONGUARD"
|
||||
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)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,9 @@
|
||||
from agebd_injectionguard 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()
|
||||
+301
@@ -0,0 +1,301 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "h5py" },
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "h5py", specifier = ">=3.16.0" },
|
||||
{ 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-injectionguard"
|
||||
version = "0.1.0"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "agebd" },
|
||||
{ name = "numpy" },
|
||||
]
|
||||
|
||||
[package.dev-dependencies]
|
||||
dev = [
|
||||
{ name = "pyepics" },
|
||||
{ name = "pytest" },
|
||||
{ name = "ruff" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "agebd", editable = "../../../../packages/agebd" },
|
||||
{ name = "numpy", specifier = ">=2.0.2" },
|
||||
]
|
||||
|
||||
[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 = "h5py"
|
||||
version = "3.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/db/33/acd0ce6863b6c0d7735007df01815403f5589a21ff8c2e1ee2587a38f548/h5py-3.16.0.tar.gz", hash = "sha256:a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738", size = 446526, upload-time = "2026-03-06T13:49:08.07Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e06f864bedb2c8e7c1358e6c73af48519e317457c444d6f3d332bb4e8fa6d7d9", size = 3724137, upload-time = "2026-03-06T13:47:35.242Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec86d4fffd87a0f4cb3d5796ceb5a50123a2a6d99b43e616e5504e66a953eca3", size = 3090112, upload-time = "2026-03-06T13:47:37.634Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/f5/e15b3d0dc8a18e56409a839e6468d6fb589bc5207c917399c2e0706eeb44/h5py-3.16.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:86385ea895508220b8a7e45efa428aeafaa586bd737c7af9ee04661d8d84a10d", size = 4844847, upload-time = "2026-03-06T13:47:39.811Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8975273c2c5921c25700193b408e28d6bdd0111c37468b2d4e25dcec4cd1d84d", size = 5065352, upload-time = "2026-03-06T13:47:41.489Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/ae/f2adc5d0ca9626db3277a3d87516e124cbc5d0eea0bd79bc085702d04f2c/h5py-3.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1677ad48b703f44efc9ea0c3ab284527f81bc4f318386aaaebc5fede6bbae56f", size = 4839173, upload-time = "2026-03-06T13:47:43.586Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/0b/e0c8c69da1d8838da023a50cd3080eae5d475691f7636b35eff20bb6ef20/h5py-3.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c4dd4cf5f0a4e36083f73172f6cfc25a5710789269547f132a20975bfe2434c", size = 5076216, upload-time = "2026-03-06T13:47:45.315Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdef06507725b455fccba9c16529121a5e1fbf56aa375f7d9713d9e8ff42454d", size = 3183639, upload-time = "2026-03-06T13:47:47.041Z" },
|
||||
]
|
||||
|
||||
[[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" },
|
||||
]
|
||||
@@ -0,0 +1,31 @@
|
||||
file INJECTIONGUARD_individual.template {
|
||||
pattern { DEVICE }
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} }
|
||||
}
|
||||
|
||||
file INJECTIONGUARD_automated.template {
|
||||
pattern { DEVICE NR Latch Description }
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 01 1 "Beam Dump Kicker"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 02 1 "Dump Valve"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 03 1 "MIS"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 04 1 "VCS"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 05 1 "Linac KV/BB/BY"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 06 1 "RF Linac"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 07 1 "RF Booster"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 08 1 "RF Ring"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 09 1 "Magnets Pulsed"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 10 1 "Magnets Booster"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 11 1 "Magnets Corrector"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 12 1 "Magnets Ring"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 13 1 "Current Limit"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 14 1 "IDs Ready"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 15 1 "Single Bunch Charge"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 16 1 "Injection Quality"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 17 1 "Dump Quality"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 18 1 "Lifetime"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 19 1 "Tune"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 20 0 "Pingers"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 21 1 "Vacuum Pressure"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 22 1 "Orbit Deviation"}
|
||||
{ AGEBD-INJECTIONGUARD{{ agebd_env }} 23 1 "Beam Dump Controller"}
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,87 @@
|
||||
record(bo, "$(DEVICE):CONTROL-BRIDGE-CHECK-$(NR)") {
|
||||
field(DESC, "Only in MD mode: bridge check $(NR)")
|
||||
field(ASG, "PROTECTED")
|
||||
field(FLNK, "$(DEVICE):CHECK-$(NR)-MD")
|
||||
field(VAL, "0")
|
||||
field(ZSV, "NO_ALARM")
|
||||
field(OSV, "MINOR")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(bo, "$(DEVICE):CHECK-$(NR)") {
|
||||
field(DESC, "$(Description)")
|
||||
field(ASG, "PROTECTED")
|
||||
field(FLNK, "$(DEVICE):CHECK-$(NR)-MD")
|
||||
field(ZSV, "MAJOR")
|
||||
field(OSV, "NO_ALARM")
|
||||
field(VAL, "1")
|
||||
field(PINI, "YES")
|
||||
field(HIGH, "1") # Seconds until automatic switch to Alarm
|
||||
}
|
||||
|
||||
record(calc, "$(DEVICE):CHECK-$(NR)-MD") {
|
||||
field(DESC, "Check $(NR) MD, written by IOC")
|
||||
field(ASG, "READONLY")
|
||||
field(FLNK, "$(DEVICE):CHECK-$(NR)-LATCHFWD")
|
||||
field(LOLO, "0.1")
|
||||
field(LLSV, "MAJOR")
|
||||
field(CALC, "A ? 1 : B")
|
||||
field(INPA, "$(DEVICE):CONTROL-BRIDGE-CHECK-$(NR)")
|
||||
field(INPB, "$(DEVICE):CHECK-$(NR)")
|
||||
}
|
||||
|
||||
# forward only alarm states to latch bo
|
||||
record(calcout, "$(DEVICE):CHECK-$(NR)-LATCHFWD") {
|
||||
field(DESC, "Latchfwd for check $(NR)")
|
||||
field(ASG, "READONLY")
|
||||
field(FLNK, "$(DEVICE):CHECK-$(NR)-LATCH")
|
||||
field(CALC, "$(Latch)? ( A? C : B ) : 1")
|
||||
field(PINI, "YES")
|
||||
field(INPA, "$(DEVICE):CONTROL-MODE CP")
|
||||
field(INPB, "$(DEVICE):CHECK-$(NR) CP")
|
||||
field(INPC, "$(DEVICE):CHECK-$(NR)-MD CP")
|
||||
field(OOPT, "When Zero")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(DEVICE):CHECK-$(NR)-LATCH.VAL")
|
||||
}
|
||||
|
||||
# forward current state to latch bo on reset event
|
||||
record(calcout, "$(DEVICE):CHECK-$(NR)-LATCHRST") {
|
||||
field(DESC, "Latchfwd for check $(NR)")
|
||||
field(ASG, "READONLY")
|
||||
field(FLNK, "$(DEVICE):CHECK-$(NR)-LATCH")
|
||||
field(SCAN, "Event")
|
||||
field(EVNT, "5")
|
||||
field(CALC, "$(Latch)? ( A? C : B ) : 1")
|
||||
field(PINI, "YES")
|
||||
field(INPA, "$(DEVICE):CONTROL-MODE")
|
||||
field(INPB, "$(DEVICE):CHECK-$(NR)")
|
||||
field(INPC, "$(DEVICE):CHECK-$(NR)-MD")
|
||||
field(OOPT, "Every Time")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(DEVICE):CHECK-$(NR)-LATCH.VAL")
|
||||
}
|
||||
|
||||
record(bo, "$(DEVICE):CHECK-$(NR)-LATCH") {
|
||||
field(DESC, "$(Description)")
|
||||
field(ASG, "READONLY")
|
||||
field(FLNK, "$(DEVICE):CHECK-SUM-OP-A")
|
||||
field(ZSV, "MINOR")
|
||||
field(OSV, "NO_ALARM")
|
||||
field(VAL, "1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
# emit event for master rearm when alarm state is left and non latched
|
||||
record(calcout, "$(DEVICE):CHECK-$(NR)-REARM-MASTER") {
|
||||
field(DESC, "Rearm Master for non latched checks")
|
||||
field(ASG, "NOACCESS")
|
||||
field(CALC, "!$(Latch)? ( A? C : B ) : 1")
|
||||
field(PINI, "YES")
|
||||
field(INPA, "$(DEVICE):CONTROL-MODE CP")
|
||||
field(INPB, "$(DEVICE):CHECK-$(NR) CP")
|
||||
field(INPC, "$(DEVICE):CHECK-$(NR)-MD CP")
|
||||
field(OOPT, "Transition To Non-zero")
|
||||
field(OEVT, "4")
|
||||
field(ODLY, "0.1")
|
||||
}
|
||||
@@ -0,0 +1,304 @@
|
||||
# HLA Service Control Parameters
|
||||
|
||||
record(mbbo, "$(DEVICE):CONTROL-MODE") {
|
||||
field(DESC, "Mode of Injection Guard")
|
||||
field(ASG, "PROTECTED")
|
||||
field(FLNK, "$(DEVICE):CHECK-SUM")
|
||||
field(ZRST, "User Operation")
|
||||
field(ZRVL, "0")
|
||||
field(ONST, "Machine Development")
|
||||
field(ONVL, "1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
# Local events on this IOC
|
||||
# 1 - secret master trigger inhibited
|
||||
# 2 - gun trigger inhibited
|
||||
# 3 - booster extraction trigger inhibited
|
||||
# 4 - rearm of master trigger if sum signal ok again
|
||||
# 5 - request to reset latches
|
||||
|
||||
record(waveform,"$(DEVICE):LOG") {
|
||||
field(DESC, "Last failed checks")
|
||||
field(ASG, "PROTECTED")
|
||||
field(FTVL, "CHAR")
|
||||
field(NELM, "$(SIZE=60000)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(bo, "$(DEVICE):LOG-PAUSE") {
|
||||
field(DESC, "pause/start logging")
|
||||
field(ASG, "PROTECTED")
|
||||
field(ZNAM, "Start")
|
||||
field(ONAM, "Pause")
|
||||
field(VAL, "1")
|
||||
field(PINI, "YES")
|
||||
field(HIGH, "60") # Seconds until automatic switch back to run
|
||||
}
|
||||
|
||||
record(bo,"$(DEVICE):LOG-CLEAR") {
|
||||
field(DESC, "Clear log of last failed checks")
|
||||
field(ASG, "PROTECTED")
|
||||
field(VAL, "0")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(bi,"$(DEVICE):STATUS-SECRET-MASTER") {
|
||||
field(DESC, "Status of secret master trigger")
|
||||
field(ASG, "READONLY")
|
||||
field(ZSV, "MAJOR" )
|
||||
field(INP, "$(DEVICE):NOACCESS-SECRETMASTER CP")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(bi,"$(DEVICE):NOACCESS-SECRETMASTER") {
|
||||
field(DESC, "Status of secret master trigger")
|
||||
field(ASG, "NOACCESS")
|
||||
field(INP, "AGETI-CVME-MASTER-TMA:SR-Inj-Status-Sel-I CP")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(calcout, "$(DEVICE):AUTO-REARM-MASTER-CALCOUT") {
|
||||
field(DESC, "Automatic rearming of master trigger")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Event")
|
||||
field(EVNT, "4")
|
||||
field(CALC, "(A > 0) ? 1 : 0")
|
||||
field(INPA, "$(DEVICE):CHECK-SUM")
|
||||
field(OOPT, "When Non-zero")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "AGETI-CVME-MASTER-TMA:SR-Inj-Status-Sel")
|
||||
}
|
||||
|
||||
record(calcout, "$(DEVICE):OUTLINK-2-ONBEAM-FORWARD") {
|
||||
field(DESC, "activate secret trigger if checks ok")
|
||||
field(ASG, "READONLY")
|
||||
field(CALC, "(A > 0) ? 0 : 1")
|
||||
field(INPA, "$(DEVICE):CHECK-SUM")
|
||||
field(OOPT, "Transition To Zero")
|
||||
field(ODLY, "0")
|
||||
field(DOPT, "Use OCAL")
|
||||
field(OCAL, "1")
|
||||
field(OUT, "AGETI-CVME-MASTER-TMA:SR-Inj-Status-Sel-I")
|
||||
}
|
||||
|
||||
record(calcout, "$(DEVICE):OUTLINK-2-ONBEAM-INHIBIT") {
|
||||
field(DESC, "disable secret trigger if checks nok")
|
||||
field(ASG, "READONLY")
|
||||
field(CALC, "!A && B ? 0 : 1")
|
||||
field(INPA, "$(DEVICE):CHECK-SUM")
|
||||
field(INPB, "AGETI-CVME-MASTER-TMA:SR-Inj-Status-Sel-I CP")
|
||||
field(OOPT, "When Zero")
|
||||
field(OEVT, "1")
|
||||
field(ODLY, "0")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "AGETI-CVME-MASTER-TMA:SR-Inj-Status-Sel-I")
|
||||
}
|
||||
|
||||
# record(calcout, "$(DEVICE):OUTLINK-2-GUNTRI") {
|
||||
# field(DESC, "disable gun if checks nok")
|
||||
# field(ASG, "READONLY")
|
||||
# field(CALC, "!A && B ? 0 : 1")
|
||||
# field(INPA, "$(DEVICE):CHECK-SUM")
|
||||
# field(INPB, "ALIRF-VME-A-GUN:CH1-MODE CP")
|
||||
# field(OOPT, "Transition To Zero")
|
||||
# field(OEVT, "2")
|
||||
# field(ODLY, "0")
|
||||
# field(DOPT, "Use CALC")
|
||||
# field(OUT, "ALIRF-VME-A-GUN:CH1-MODE")
|
||||
# }
|
||||
|
||||
# record(calcout, "$(DEVICE):OUTLINK-2-BOOEXT") {
|
||||
# field(DESC, "disable booster extraction if checks nok")
|
||||
# field(ASG, "READONLY")
|
||||
# field(CALC, "!A && B ? 0 : 1")
|
||||
# field(INPA, "$(DEVICE):CHECK-SUM")
|
||||
# field(INPB, "AGETI-CVME-MASTER-TMA:Evt-10-Ena-Sel CP")
|
||||
# field(OOPT, "Transition To Zero")
|
||||
# field(OEVT, "3")
|
||||
# field(ODLY, "0")
|
||||
# field(DOPT, "Use CALC")
|
||||
# field(OUT, "AGETI-CVME-MASTER-TMA:Evt-10-Ena-Sel")
|
||||
# }
|
||||
|
||||
# Overall Check SUM
|
||||
record(fanout, "$(DEVICE):CHECK-SUM-FANOUT") {
|
||||
field(DESC, "FANOUT for checksum changes")
|
||||
field(ASG, "READONLY")
|
||||
field(SELM, "All")
|
||||
field(LNK1, "$(DEVICE):OUTLINK-2-ONBEAM-FORWARD")
|
||||
field(LNK2, "$(DEVICE):OUTLINK-2-ONBEAM-INHIBIT")
|
||||
# field(LNK3, "$(DEVICE):OUTLINK-2-GUNTRI")
|
||||
# field(LNK4, "$(DEVICE):OUTLINK-2-BOOEXT")
|
||||
}
|
||||
|
||||
record(mbbi, "$(DEVICE):CHECK-SUM") {
|
||||
field(DESC, "Check SUM overall, written by IOC")
|
||||
field(FLNK, "$(DEVICE):CHECK-SUM-FANOUT")
|
||||
field(ASG, "READONLY")
|
||||
field(ZRST, "Injection Inhibit")
|
||||
field(ZRVL, "0")
|
||||
field(ZRSV, "MAJOR")
|
||||
field(ONST, "Injection Enabled")
|
||||
field(ONVL, "1")
|
||||
field(ONSV, "NO_ALARM")
|
||||
field(TWST, "Linac Mode")
|
||||
field(TWVL, "2")
|
||||
field(TWSV, "MINOR")
|
||||
}
|
||||
|
||||
record(calcout, "$(DEVICE):CHECK-SUM-CALC") {
|
||||
field(DESC, "Check SUM overall, written by IOC")
|
||||
field(FLNK, "$(DEVICE):CHECK-SUM")
|
||||
field(ASG, "READONLY")
|
||||
field(CALC, "!E & !F ? 2 : (A ? B & D : C & D)")
|
||||
field(INPA, "$(DEVICE):CONTROL-MODE")
|
||||
field(INPB, "$(DEVICE):CHECK-SUM-MD")
|
||||
field(INPC, "$(DEVICE):CHECK-SUM-OP")
|
||||
field(INPD, "$(DEVICE):CHECK-SUM-LATCH")
|
||||
field(INPE, "ALI00-SGEN-PSYS:ALBSA-BB-OPEN") # Linac Mode, (0 closed, 1 opened)
|
||||
field(INPF, "ALI00-SGEN-PSYS:ALBSA-KV-OPEN") # Linac Mode, (0 closed, 1 opened)
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(DEVICE):CHECK-SUM")
|
||||
}
|
||||
|
||||
# Check SUMs OP/MD
|
||||
record(calc, "$(DEVICE):CHECK-SUM-OP-A") {
|
||||
field(DESC, "Check SUM OP Mode, written by IOC")
|
||||
field(FLNK, "$(DEVICE):CHECK-SUM-OP")
|
||||
field(ASG, "READONLY")
|
||||
field(CALC, "A & B & C & D & E & F & G & H & I & J & K & L")
|
||||
field(INPA, "$(DEVICE):CHECK-12")
|
||||
field(INPB, "$(DEVICE):CHECK-13")
|
||||
field(INPC, "$(DEVICE):CHECK-14")
|
||||
field(INPD, "$(DEVICE):CHECK-15")
|
||||
field(INPE, "$(DEVICE):CHECK-16")
|
||||
field(INPF, "$(DEVICE):CHECK-17")
|
||||
field(INPG, "$(DEVICE):CHECK-18")
|
||||
field(INPH, "$(DEVICE):CHECK-19")
|
||||
field(INPI, "$(DEVICE):CHECK-20")
|
||||
field(INPJ, "$(DEVICE):CHECK-21")
|
||||
field(INPK, "$(DEVICE):CHECK-22")
|
||||
field(INPL, "$(DEVICE):CHECK-23")
|
||||
}
|
||||
|
||||
record(calc, "$(DEVICE):CHECK-SUM-OP") {
|
||||
field(DESC, "Check SUM OP Mode, written by IOC")
|
||||
field(FLNK, "$(DEVICE):CHECK-SUM-MD-A")
|
||||
field(ASG, "READONLY")
|
||||
field(LOLO, "0.1")
|
||||
field(LLSV, "MAJOR")
|
||||
field(CALC, "A & B & C & D & E & F & G & H & I & J & K & L")
|
||||
field(INPA, "$(DEVICE):CHECK-01")
|
||||
field(INPB, "$(DEVICE):CHECK-02")
|
||||
field(INPC, "$(DEVICE):CHECK-03")
|
||||
field(INPD, "$(DEVICE):CHECK-04")
|
||||
field(INPE, "$(DEVICE):CHECK-05")
|
||||
field(INPF, "$(DEVICE):CHECK-06")
|
||||
field(INPG, "$(DEVICE):CHECK-07")
|
||||
field(INPH, "$(DEVICE):CHECK-08")
|
||||
field(INPI, "$(DEVICE):CHECK-09")
|
||||
field(INPJ, "$(DEVICE):CHECK-10")
|
||||
field(INPK, "$(DEVICE):CHECK-11")
|
||||
field(INPL, "$(DEVICE):CHECK-SUM-OP-A")
|
||||
}
|
||||
|
||||
record(calc, "$(DEVICE):CHECK-SUM-MD-A") {
|
||||
field(DESC, "Check SUM MD Mode, written by IOC")
|
||||
field(FLNK, "$(DEVICE):CHECK-SUM-MD")
|
||||
field(ASG, "READONLY")
|
||||
field(CALC, "A & B & C & D & E & F & G & H & I & J & K & L")
|
||||
field(INPA, "$(DEVICE):CHECK-12-MD")
|
||||
field(INPB, "$(DEVICE):CHECK-13-MD")
|
||||
field(INPC, "$(DEVICE):CHECK-14-MD")
|
||||
field(INPD, "$(DEVICE):CHECK-15-MD")
|
||||
field(INPE, "$(DEVICE):CHECK-16-MD")
|
||||
field(INPF, "$(DEVICE):CHECK-17-MD")
|
||||
field(INPG, "$(DEVICE):CHECK-18-MD")
|
||||
field(INPH, "$(DEVICE):CHECK-19-MD")
|
||||
field(INPI, "$(DEVICE):CHECK-20-MD")
|
||||
field(INPJ, "$(DEVICE):CHECK-21-MD")
|
||||
field(INPK, "$(DEVICE):CHECK-22-MD")
|
||||
field(INPL, "$(DEVICE):CHECK-23-MD")
|
||||
}
|
||||
|
||||
record(calc, "$(DEVICE):CHECK-SUM-MD") {
|
||||
field(DESC, "Check SUM MD Mode, written by IOC")
|
||||
field(FLNK, "$(DEVICE):CHECK-SUM-LATCH-A")
|
||||
field(ASG, "READONLY")
|
||||
field(LOLO, "0.1")
|
||||
field(LLSV, "MAJOR")
|
||||
field(CALC, "A & B & C & D & E & F & G & H & I & J & K & L")
|
||||
field(INPA, "$(DEVICE):CHECK-01-MD")
|
||||
field(INPB, "$(DEVICE):CHECK-02-MD")
|
||||
field(INPC, "$(DEVICE):CHECK-03-MD")
|
||||
field(INPD, "$(DEVICE):CHECK-04-MD")
|
||||
field(INPE, "$(DEVICE):CHECK-05-MD")
|
||||
field(INPF, "$(DEVICE):CHECK-06-MD")
|
||||
field(INPG, "$(DEVICE):CHECK-07-MD")
|
||||
field(INPH, "$(DEVICE):CHECK-08-MD")
|
||||
field(INPI, "$(DEVICE):CHECK-09-MD")
|
||||
field(INPJ, "$(DEVICE):CHECK-10-MD")
|
||||
field(INPK, "$(DEVICE):CHECK-11-MD")
|
||||
field(INPL, "$(DEVICE):CHECK-SUM-MD-A")
|
||||
}
|
||||
|
||||
record(calc, "$(DEVICE):CHECK-SUM-LATCH-A") {
|
||||
field(DESC, "Check SUM LATCH Mode, written by IOC")
|
||||
field(FLNK, "$(DEVICE):CHECK-SUM-LATCH")
|
||||
field(ASG, "READONLY")
|
||||
field(CALC, "A & B & C & D & E & F & G & H & I & J & K & L")
|
||||
field(INPA, "$(DEVICE):CHECK-12-LATCH")
|
||||
field(INPB, "$(DEVICE):CHECK-13-LATCH")
|
||||
field(INPC, "$(DEVICE):CHECK-14-LATCH")
|
||||
field(INPD, "$(DEVICE):CHECK-15-LATCH")
|
||||
field(INPE, "$(DEVICE):CHECK-16-LATCH")
|
||||
field(INPF, "$(DEVICE):CHECK-17-LATCH")
|
||||
field(INPG, "$(DEVICE):CHECK-18-LATCH")
|
||||
field(INPH, "$(DEVICE):CHECK-19-LATCH")
|
||||
field(INPI, "$(DEVICE):CHECK-20-LATCH")
|
||||
field(INPJ, "$(DEVICE):CHECK-21-LATCH")
|
||||
field(INPK, "$(DEVICE):CHECK-22-LATCH")
|
||||
field(INPL, "$(DEVICE):CHECK-23-LATCH")
|
||||
}
|
||||
|
||||
record(calc, "$(DEVICE):CHECK-SUM-LATCH") {
|
||||
field(DESC, "Check SUM LATCH Mode, written by IOC")
|
||||
field(FLNK, "$(DEVICE):CHECK-SUM-CALC")
|
||||
field(ASG, "READONLY")
|
||||
field(LOLO, "0.1")
|
||||
field(LLSV, "MINOR")
|
||||
field(CALC, "A & B & C & D & E & F & G & H & I & J & K & L")
|
||||
field(INPA, "$(DEVICE):CHECK-01-LATCH")
|
||||
field(INPB, "$(DEVICE):CHECK-02-LATCH")
|
||||
field(INPC, "$(DEVICE):CHECK-03-LATCH")
|
||||
field(INPD, "$(DEVICE):CHECK-04-LATCH")
|
||||
field(INPE, "$(DEVICE):CHECK-05-LATCH")
|
||||
field(INPF, "$(DEVICE):CHECK-06-LATCH")
|
||||
field(INPG, "$(DEVICE):CHECK-07-LATCH")
|
||||
field(INPH, "$(DEVICE):CHECK-08-LATCH")
|
||||
field(INPI, "$(DEVICE):CHECK-09-LATCH")
|
||||
field(INPJ, "$(DEVICE):CHECK-10-LATCH")
|
||||
field(INPK, "$(DEVICE):CHECK-11-LATCH")
|
||||
field(INPL, "$(DEVICE):CHECK-SUM-LATCH-A")
|
||||
}
|
||||
|
||||
record(bo, "$(DEVICE):RESET-LATCHES") {
|
||||
field(DESC, "Reset all Latches")
|
||||
field(ASG, "PROTECTED")
|
||||
field(FLNK, "$(DEVICE):RESET-LATCHES-CALCOUT")
|
||||
field(VAL, "0")
|
||||
field(PINI, "YES")
|
||||
field(HIGH, "1") # Seconds until automatic switch to 0
|
||||
}
|
||||
|
||||
record(calcout, "$(DEVICE):RESET-LATCHES-CALCOUT") {
|
||||
field(DESC, "Reset all Latches")
|
||||
field(ASG, "PROTECTED")
|
||||
field(VAL, "0")
|
||||
field(PINI, "YES")
|
||||
field(CALC, "A")
|
||||
field(INPA, "$(DEVICE):RESET-LATCHES")
|
||||
field(OOPT, "Transition To Non-zero")
|
||||
field(OEVT, "5")
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
epicsEnvSet("ENGINEER", "armborst")
|
||||
@@ -0,0 +1,988 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>600</width>
|
||||
<height>1195</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
/* Title */
|
||||
/*-----------------------------------------------*/
|
||||
/* Operation panels */
|
||||
caLabel[statusTip="Operation"]{
|
||||
color: rgba(0, 0, 0, 255);
|
||||
font: bold 18pt;
|
||||
font-family: Sans Serif;
|
||||
padding: 1px;
|
||||
margin: 0px;
|
||||
qproperty-alignment: AlignLeft;
|
||||
qproperty-frameShape: StyledPanel;
|
||||
/*qproperty-geometry: rect(-2 0 1600 33);*/
|
||||
background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1,
|
||||
stop:0 rgba(218, 218, 218, 255),
|
||||
stop:0.5 rgba(200, 200, 200, 255),
|
||||
stop:1 rgba(218, 218, 218, 255));
|
||||
}
|
||||
</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="wmSignalPropagator" name="wmsignalpropagator">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>670</x>
|
||||
<y>140</y>
|
||||
<width>70</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caCalc" name="cacalc_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>670</x>
|
||||
<y>80</y>
|
||||
<width>70</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Reload</string>
|
||||
</property>
|
||||
<property name="variable">
|
||||
<string notr="true">RELOAD</string>
|
||||
</property>
|
||||
<property name="calc">
|
||||
<string notr="true">A</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ALH:INJECTIONGUARD-GUIRELOAD</string>
|
||||
</property>
|
||||
<property name="eventSignal">
|
||||
<enum>caCalc::TriggerZeroToOne</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMenu" name="camenu">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>130</x>
|
||||
<y>36</y>
|
||||
<width>460</width>
|
||||
<height>40</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>16</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:CONTROL-MODE</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>36</y>
|
||||
<width>110</width>
|
||||
<height>40</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>25</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Mode</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_21">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>78</y>
|
||||
<width>580</width>
|
||||
<height>60</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:CHECK-SUM</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Alarm_Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caLineEdit::User</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMessageButton" name="VCS_Reset_Ring">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>652</x>
|
||||
<y>394</y>
|
||||
<width>150</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>9</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Ring Reset</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">ARS00-VCS:PLC_ARS_RESET_REQUEST</string>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">Ring Reset</string>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>212</red>
|
||||
<green>219</green>
|
||||
<blue>157</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="pressMessage">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMessageButton" name="VCS_Reset_LINAC">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>652</x>
|
||||
<y>346</y>
|
||||
<width>150</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>9</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>LI LTB Reset</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">ARS00-VCS:PLC_ALIVA_RESET_REQUEST</string>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">LI LTB Reset</string>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>212</red>
|
||||
<green>219</green>
|
||||
<blue>157</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="pressMessage">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMessageButton" name="VCS_Reset_Booster">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>652</x>
|
||||
<y>370</y>
|
||||
<width>150</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>9</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Boster Reset</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">ARS00-VCS:PLC_ABOVA_RESET_REQUEST</string>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">Boster Reset</string>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>212</red>
|
||||
<green>219</green>
|
||||
<blue>157</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="pressMessage">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMessageButton" name="MIS_Reset">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>722</x>
|
||||
<y>438</y>
|
||||
<width>150</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>MIS Alarm Reset</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">ARS00-MIS-PLC-01:Alarm_Reset</string>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">MIS Alarm Reset</string>
|
||||
</property>
|
||||
<property name="pressMessage">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMessageButton" name="MIS_FE">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>722</x>
|
||||
<y>474</y>
|
||||
<width>150</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>MIS-FE Alarm Reset</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">ACOSA-MIS-FE:ACKERR-REQUEST</string>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">MIS-FE Alarm Reset</string>
|
||||
</property>
|
||||
<property name="releaseMessage">
|
||||
<string notr="true">0</string>
|
||||
</property>
|
||||
<property name="pressMessage">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMessageButton" name="MIS_VCS_ALIVA">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>722</x>
|
||||
<y>544</y>
|
||||
<width>150</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>VCS ALIVA Reset</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">ARS00-VCS:PLC_ALIVA_RESET_REQUEST</string>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">VCS ALIVA Reset</string>
|
||||
</property>
|
||||
<property name="pressMessage">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMessageButton" name="MIS_VCS_ABOVA">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>722</x>
|
||||
<y>506</y>
|
||||
<width>150</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>VCS ABOVA Reset</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">ARS00-VCS:PLC_ABOVA_RESET_REQUEST</string>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">VCS ABOVA Reset</string>
|
||||
</property>
|
||||
<property name="pressMessage">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMessageButton" name="MIS_VCS_ARS">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>726</x>
|
||||
<y>578</y>
|
||||
<width>150</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>VCS ARS Reset</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">ARS00-VCS:PLC_ARS_RESET_REQUEST</string>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">VCS ARS Reset</string>
|
||||
</property>
|
||||
<property name="pressMessage">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>140</y>
|
||||
<width>580</width>
|
||||
<height>1050</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
<string>Checks</string>
|
||||
</attribute>
|
||||
<widget class="caLed" name="caled_33">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>10</y>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="rectangular">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="gradientEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="ledWidth">
|
||||
<number>30</number>
|
||||
</property>
|
||||
<property name="ledHeight">
|
||||
<number>30</number>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:STATUS-SECRET-MASTER</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLed::Alarm</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="Inj_trig_1">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>60</x>
|
||||
<y>10</y>
|
||||
<width>300</width>
|
||||
<height>40</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Sans Serif</family>
|
||||
<pointsize>16</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="acceptDrops">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Master Trigger Freigabe</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="fontScaleMode">
|
||||
<enum>ESimpleLabel::None</enum>
|
||||
</property>
|
||||
<property name="foreground">
|
||||
<color>
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color alpha="0">
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caInclude" name="cainclude">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>110</y>
|
||||
<width>580</width>
|
||||
<height>901</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="macro">
|
||||
<string>checknr=01,bridge=1,latch=1;checknr=02,bridge=1,latch=1;checknr=03,bridge=1,latch=1;checknr=04,bridge=1,latch=1;checknr=05,bridge=1,latch=1;checknr=06,bridge=1,latch=1;checknr=07,bridge=1,latch=1;checknr=08,bridge=1,latch=1;checknr=09,bridge=1,latch=1;checknr=10,bridge=1,latch=1;checknr=11,bridge=1,latch=1;checknr=12,bridge=1,latch=1;checknr=13,bridge=1,latch=1;checknr=14,bridge=1,latch=1;checknr=15,bridge=1,latch=1;checknr=16,bridge=1,latch=1;checknr=17,bridge=1,latch=1;checknr=18,bridge=1,latch=1;checknr=19,bridge=1,latch=1;checknr=20,bridge=0,latch=0;checknr=21,bridge=1,latch=1;checknr=22,bridge=1,latch=1;checknr=23,bridge=1,latch=1</string>
|
||||
</property>
|
||||
<property name="filename" stdset="0">
|
||||
<string notr="true">A_BD_InjectionGuard_inc.ui</string>
|
||||
</property>
|
||||
<property name="numberOfItems" stdset="0">
|
||||
<number>23</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="Line" name="line_7">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>270</x>
|
||||
<y>60</y>
|
||||
<width>20</width>
|
||||
<height>900</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="Line" name="line_8">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>96</y>
|
||||
<width>560</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="Line" name="line_9">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>210</x>
|
||||
<y>60</y>
|
||||
<width>20</width>
|
||||
<height>900</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_10">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>230</x>
|
||||
<y>66</y>
|
||||
<width>40</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Monospace</family>
|
||||
<pointsize>19</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
<stylestrategy>PreferDefault</stylestrategy>
|
||||
</font>
|
||||
</property>
|
||||
<property name="inputMask">
|
||||
<string>OP</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>OP</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:CHECK-SUM-OP</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Alarm_Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caLineEdit::User</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_25">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>340</x>
|
||||
<y>66</y>
|
||||
<width>111</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<italic>false</italic>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="autoFillBackground">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>BRIDGE</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="fontScaleMode">
|
||||
<enum>ESimpleLabel::None</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_11">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>290</x>
|
||||
<y>66</y>
|
||||
<width>40</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Monospace</family>
|
||||
<pointsize>19</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
<stylestrategy>PreferDefault</stylestrategy>
|
||||
</font>
|
||||
</property>
|
||||
<property name="inputMask">
|
||||
<string>M\D</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>MD</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:CHECK-SUM-MD</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Alarm_Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caLineEdit::User</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_8">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>9</x>
|
||||
<y>66</y>
|
||||
<width>201</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Check</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="fontScaleMode">
|
||||
<enum>ESimpleLabel::None</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="Line" name="line_11">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>440</x>
|
||||
<y>60</y>
|
||||
<width>20</width>
|
||||
<height>900</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_12">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>470</x>
|
||||
<y>66</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Monospace</family>
|
||||
<pointsize>19</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
<stylestrategy>PreferDefault</stylestrategy>
|
||||
</font>
|
||||
</property>
|
||||
<property name="inputMask">
|
||||
<string>L\ATC\H</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>LATCH</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:CHECK-SUM-LATCH</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Alarm_Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caLineEdit::User</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMessageButton" name="camessagebutton_14">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>10</y>
|
||||
<width>100</width>
|
||||
<height>40</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Reset</string>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:RESET-LATCHES</string>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">Reset</string>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>160</red>
|
||||
<green>160</green>
|
||||
<blue>160</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="releaseMessage">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="pressMessage">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_2">
|
||||
<attribute name="title">
|
||||
<string>Logs</string>
|
||||
</attribute>
|
||||
<widget class="caMultiLineString" name="camultilinestring">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>38</y>
|
||||
<width>575</width>
|
||||
<height>983</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Monospace</family>
|
||||
<pointsize>10</pointsize>
|
||||
<stylestrategy>PreferDefault</stylestrategy>
|
||||
</font>
|
||||
</property>
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOn</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAsNeeded</enum>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:LOG</string>
|
||||
</property>
|
||||
<property name="fontScaleMode" stdset="0">
|
||||
<enum>caMultiLineString::None</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMessageButton" name="ClearLogs">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>470</x>
|
||||
<y>2</y>
|
||||
<width>101</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Clear Logs</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:LOG-CLEAR</string>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">Clear Logs</string>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>160</red>
|
||||
<green>160</green>
|
||||
<blue>160</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="releaseMessage">
|
||||
<string notr="true">0</string>
|
||||
</property>
|
||||
<property name="pressMessage">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caChoice" name="cachoice_20">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>2</y>
|
||||
<width>101</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:LOG-PAUSE</string>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>160</red>
|
||||
<green>160</green>
|
||||
<blue>160</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caChoice::Default</enum>
|
||||
</property>
|
||||
<property name="stackingMode" stdset="0">
|
||||
<enum>caChoice::Column</enum>
|
||||
</property>
|
||||
<property name="endBit">
|
||||
<number>1</number>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>-2</x>
|
||||
<y>2</y>
|
||||
<width>628</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Sans Serif</family>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<italic>false</italic>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string>Operation</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Injection Guard</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading</set>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>218</red>
|
||||
<green>218</green>
|
||||
<blue>218</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLabel::Default</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMimeDisplay" name="camimedisplay_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>556</x>
|
||||
<y>6</y>
|
||||
<width>40</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">-Wiki</string>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>183</red>
|
||||
<green>157</green>
|
||||
<blue>92</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="labels">
|
||||
<string>Injection Guard</string>
|
||||
</property>
|
||||
<property name="files">
|
||||
<string>https://acceleratorwiki.psi.ch/wiki/Injection_Guard</string>
|
||||
</property>
|
||||
<property name="args">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>caMenu</class>
|
||||
<extends>QComboBox</extends>
|
||||
<header>caMenu</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caChoice</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>caChoice</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caMessageButton</class>
|
||||
<extends>QPushButton</extends>
|
||||
<header>caMessageButton</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>caLabel</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caInclude</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>caInclude</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLed</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>caLed</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>caLineEdit</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caMultiLineString</class>
|
||||
<extends>QPlainTextEdit</extends>
|
||||
<header>caMultiLineString</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caCalc</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>caCalc</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>wmSignalPropagator</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>wmSignalPropagator</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caMimeDisplay</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>caMimeDisplay</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>cacalc_2</sender>
|
||||
<signal>emitSignal(bool)</signal>
|
||||
<receiver>wmsignalpropagator</receiver>
|
||||
<slot>reloadwindow()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>598</x>
|
||||
<y>89</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>608</x>
|
||||
<y>152</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -0,0 +1,243 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>580</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="caToggleButton" name="catogglebutton_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>380</x>
|
||||
<y>6</y>
|
||||
<width>18</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:CONTROL-BRIDGE-CHECK-$(checknr)</string>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color alpha="0">
|
||||
<red>200</red>
|
||||
<green>200</green>
|
||||
<blue>200</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caToggleButton::Default</enum>
|
||||
</property>
|
||||
<property name="trueValue">
|
||||
<string>1</string>
|
||||
</property>
|
||||
<property name="elevation">
|
||||
<enum>caToggleButton::on_top</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLed" name="caled">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>220</x>
|
||||
<y>0</y>
|
||||
<width>40</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="rectangular">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:CHECK-$(checknr)</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLed::Alarm</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLed" name="caled_5">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>280</x>
|
||||
<y>0</y>
|
||||
<width>40</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="rectangular">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:CHECK-$(checknr)-MD</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLed::Alarm</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>200</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Monospace</family>
|
||||
<pointsize>13</pointsize>
|
||||
<stylestrategy>PreferDefault</stylestrategy>
|
||||
</font>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:CHECK-$(checknr).DESC</string>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color alpha="0">
|
||||
<red>160</red>
|
||||
<green>160</green>
|
||||
<blue>164</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Static</enum>
|
||||
</property>
|
||||
<property name="fontScaleMode" stdset="0">
|
||||
<enum>caLineEdit::None</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caFrame" name="caframe">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>0</y>
|
||||
<width>120</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>160</red>
|
||||
<green>160</green>
|
||||
<blue>164</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="backgroundMode">
|
||||
<enum>caFrame::Outline</enum>
|
||||
</property>
|
||||
<property name="visibility">
|
||||
<enum>caFrame::Calc</enum>
|
||||
</property>
|
||||
<property name="visibilityMode">
|
||||
<enum>caFrame::All</enum>
|
||||
</property>
|
||||
<property name="visibilityCalc">
|
||||
<string notr="true">$(latch)</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<widget class="caLed" name="caled_6">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>40</x>
|
||||
<y>0</y>
|
||||
<width>40</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="rectangular">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:CHECK-$(checknr)-LATCH</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLed::Alarm</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="caLed" name="caled_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>376</x>
|
||||
<y>4</y>
|
||||
<width>22</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="rectangular">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="gradientEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="ledWidth">
|
||||
<number>20</number>
|
||||
</property>
|
||||
<property name="ledHeight">
|
||||
<number>20</number>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-INJECTIONGUARD:CONTROL-BRIDGE-CHECK-$(checknr)</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLed::Alarm</enum>
|
||||
</property>
|
||||
<property name="borderColor">
|
||||
<color alpha="0">
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>caToggleButton</class>
|
||||
<extends>QCheckBox</extends>
|
||||
<header>caToggleButton</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caFrame</class>
|
||||
<extends>QFrame</extends>
|
||||
<header>caFrame</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLed</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>caLed</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>caLineEdit</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=AGEBD-SERVICE-INJECTIONGUARD
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Environment=AGEBD_ENV={{ agebd_env }}
|
||||
ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh INJECTIONGUARD
|
||||
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-INJECTIONGUARD.service
|
||||
# systemctl --user start AGEBD-SERVICE-INJECTIONGUARD
|
||||
Generated
+23
-1
@@ -7,11 +7,15 @@ name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "h5py" },
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "typer", specifier = ">=0.23.2" }]
|
||||
requires-dist = [
|
||||
{ name = "h5py", specifier = ">=3.16.0" },
|
||||
{ name = "typer", specifier = ">=0.23.2" },
|
||||
]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
@@ -79,6 +83,24 @@ 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 = "h5py"
|
||||
version = "3.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/db/33/acd0ce6863b6c0d7735007df01815403f5589a21ff8c2e1ee2587a38f548/h5py-3.16.0.tar.gz", hash = "sha256:a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738", size = 446526, upload-time = "2026-03-06T13:49:08.07Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e06f864bedb2c8e7c1358e6c73af48519e317457c444d6f3d332bb4e8fa6d7d9", size = 3724137, upload-time = "2026-03-06T13:47:35.242Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec86d4fffd87a0f4cb3d5796ceb5a50123a2a6d99b43e616e5504e66a953eca3", size = 3090112, upload-time = "2026-03-06T13:47:37.634Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/f5/e15b3d0dc8a18e56409a839e6468d6fb589bc5207c917399c2e0706eeb44/h5py-3.16.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:86385ea895508220b8a7e45efa428aeafaa586bd737c7af9ee04661d8d84a10d", size = 4844847, upload-time = "2026-03-06T13:47:39.811Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8975273c2c5921c25700193b408e28d6bdd0111c37468b2d4e25dcec4cd1d84d", size = 5065352, upload-time = "2026-03-06T13:47:41.489Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/ae/f2adc5d0ca9626db3277a3d87516e124cbc5d0eea0bd79bc085702d04f2c/h5py-3.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1677ad48b703f44efc9ea0c3ab284527f81bc4f318386aaaebc5fede6bbae56f", size = 4839173, upload-time = "2026-03-06T13:47:43.586Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/0b/e0c8c69da1d8838da023a50cd3080eae5d475691f7636b35eff20bb6ef20/h5py-3.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c4dd4cf5f0a4e36083f73172f6cfc25a5710789269547f132a20975bfe2434c", size = 5076216, upload-time = "2026-03-06T13:47:45.315Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdef06507725b455fccba9c16529121a5e1fbf56aa375f7d9713d9e8ff42454d", size = 3183639, upload-time = "2026-03-06T13:47:47.041Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iniconfig"
|
||||
version = "2.3.0"
|
||||
|
||||
Generated
+23
-1
@@ -7,11 +7,15 @@ name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "h5py" },
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "typer", specifier = ">=0.23.2" }]
|
||||
requires-dist = [
|
||||
{ name = "h5py", specifier = ">=3.16.0" },
|
||||
{ name = "typer", specifier = ">=0.23.2" },
|
||||
]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
@@ -81,6 +85,24 @@ 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 = "h5py"
|
||||
version = "3.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/db/33/acd0ce6863b6c0d7735007df01815403f5589a21ff8c2e1ee2587a38f548/h5py-3.16.0.tar.gz", hash = "sha256:a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738", size = 446526, upload-time = "2026-03-06T13:49:08.07Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e06f864bedb2c8e7c1358e6c73af48519e317457c444d6f3d332bb4e8fa6d7d9", size = 3724137, upload-time = "2026-03-06T13:47:35.242Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec86d4fffd87a0f4cb3d5796ceb5a50123a2a6d99b43e616e5504e66a953eca3", size = 3090112, upload-time = "2026-03-06T13:47:37.634Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/f5/e15b3d0dc8a18e56409a839e6468d6fb589bc5207c917399c2e0706eeb44/h5py-3.16.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:86385ea895508220b8a7e45efa428aeafaa586bd737c7af9ee04661d8d84a10d", size = 4844847, upload-time = "2026-03-06T13:47:39.811Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8975273c2c5921c25700193b408e28d6bdd0111c37468b2d4e25dcec4cd1d84d", size = 5065352, upload-time = "2026-03-06T13:47:41.489Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/ae/f2adc5d0ca9626db3277a3d87516e124cbc5d0eea0bd79bc085702d04f2c/h5py-3.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1677ad48b703f44efc9ea0c3ab284527f81bc4f318386aaaebc5fede6bbae56f", size = 4839173, upload-time = "2026-03-06T13:47:43.586Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/0b/e0c8c69da1d8838da023a50cd3080eae5d475691f7636b35eff20bb6ef20/h5py-3.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c4dd4cf5f0a4e36083f73172f6cfc25a5710789269547f132a20975bfe2434c", size = 5076216, upload-time = "2026-03-06T13:47:45.315Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdef06507725b455fccba9c16529121a5e1fbf56aa375f7d9713d9e8ff42454d", size = 3183639, upload-time = "2026-03-06T13:47:47.041Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iniconfig"
|
||||
version = "2.3.0"
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
[project]
|
||||
name = "agebd-orbitbump"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-ORBITBUMP 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"]
|
||||
@@ -0,0 +1 @@
|
||||
from .service import PVs, Service
|
||||
@@ -0,0 +1,31 @@
|
||||
import typer
|
||||
|
||||
from agebd.enums import LogLevel
|
||||
from agebd.runner import CallbackRunner
|
||||
from agebd.utils import init_logging
|
||||
from agebd_orbitbump 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 = "ORBITBUMP"
|
||||
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)
|
||||
@@ -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-ORBITBUMP: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-ORBITBUMP: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-ORBITBUMP: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)
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
@@ -0,0 +1,9 @@
|
||||
from agebd_orbitbump 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()
|
||||
Generated
+297
@@ -0,0 +1,297 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "h5py" },
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "h5py", specifier = ">=3.16.0" },
|
||||
{ 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-orbitbump"
|
||||
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 = "h5py"
|
||||
version = "3.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/db/33/acd0ce6863b6c0d7735007df01815403f5589a21ff8c2e1ee2587a38f548/h5py-3.16.0.tar.gz", hash = "sha256:a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738", size = 446526, upload-time = "2026-03-06T13:49:08.07Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e06f864bedb2c8e7c1358e6c73af48519e317457c444d6f3d332bb4e8fa6d7d9", size = 3724137, upload-time = "2026-03-06T13:47:35.242Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec86d4fffd87a0f4cb3d5796ceb5a50123a2a6d99b43e616e5504e66a953eca3", size = 3090112, upload-time = "2026-03-06T13:47:37.634Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/f5/e15b3d0dc8a18e56409a839e6468d6fb589bc5207c917399c2e0706eeb44/h5py-3.16.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:86385ea895508220b8a7e45efa428aeafaa586bd737c7af9ee04661d8d84a10d", size = 4844847, upload-time = "2026-03-06T13:47:39.811Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8975273c2c5921c25700193b408e28d6bdd0111c37468b2d4e25dcec4cd1d84d", size = 5065352, upload-time = "2026-03-06T13:47:41.489Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/ae/f2adc5d0ca9626db3277a3d87516e124cbc5d0eea0bd79bc085702d04f2c/h5py-3.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1677ad48b703f44efc9ea0c3ab284527f81bc4f318386aaaebc5fede6bbae56f", size = 4839173, upload-time = "2026-03-06T13:47:43.586Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/0b/e0c8c69da1d8838da023a50cd3080eae5d475691f7636b35eff20bb6ef20/h5py-3.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c4dd4cf5f0a4e36083f73172f6cfc25a5710789269547f132a20975bfe2434c", size = 5076216, upload-time = "2026-03-06T13:47:45.315Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdef06507725b455fccba9c16529121a5e1fbf56aa375f7d9713d9e8ff42454d", size = 3183639, upload-time = "2026-03-06T13:47:47.041Z" },
|
||||
]
|
||||
|
||||
[[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" },
|
||||
]
|
||||
@@ -0,0 +1,62 @@
|
||||
file ORBITBUMP_machine.template {
|
||||
pattern
|
||||
{sourcepoint beamline LOX HIX X LOXP HIXP XP LOY HIY Y LOYP HIYP YP BPM1 C1xx C1xpx C1yy C1ypy BPM2 C2xx C2xpx C2yy C2ypy BPM3 C3xx C3xpx C3yy C3ypy BPM4 C4xx C4xpx C4yy C4ypy}
|
||||
# Diagnostic dipole beamlines
|
||||
{X01DD NEMO -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS01-DBPM-1080 -0.0009920 -0.0006308 -0.0001141 0.0001109 ARS01-DBPM-1460 0.9742755 -0.1432472 0.9455447 -0.0865934 ARS01-DBPM-1900 0.9277200 1.0454287 0.1445141 1.5920941 ARS01-DBPM-2410 -0.0809412 -0.0384293 0.0058229 0.1036650}
|
||||
{X08DB DISCO -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS08-DBPM-1900 -0.2500389 -0.0365053 0.0001023 0.0000595 ARS08-DBPM-2410 1.2775662 -0.9246414 0.5814965 -0.4999301 ARS08-DBPM-2910 0.6885552 0.9211364 0.4873898 1.7550023 ARS08-DBPM-4220 -0.2391394 -0.0169593 0.0309046 0.1234665}
|
||||
{X10DG X11HEAT -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS10-DBPM-4720 -0.0187 -0.0188 0 0 ARS10-DBPM-5250 1.6016 -1.2108 0.5496 -0.5376 ARS10-DBPM-5880 0.7075 1.0654 1.1093 1.9515 ARS11-DBPM-0850 0.0026 0.0044 0.0166 0.0304}
|
||||
# User dipole beamlines
|
||||
{X01DA DEBYE -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS01-DBPM-2410 -0.2169694 -0.0006291 0.0001170 0.0000325 ARS01-DBPM-2910 1.2765938 -0.9208697 0.5792863 -0.5011470 ARS01-DBPM-4220 0.6866207 0.9198858 0.4842977 1.7595080 ARS01-DBPM-4720 -0.1924402 0.0258918 0.0307458 0.1239361}
|
||||
{X02DA S-TOMCAT -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS02-DBPM-2410 -0.2089937 0.0072435 0.0001169 0.0000325 ARS02-DBPM-2910 1.2772588 -0.9200089 0.5792866 -0.5011606 ARS02-DBPM-4220 0.6864959 0.9194778 0.4843170 1.7595616 ARS02-DBPM-4720 -0.1833930 0.0352770 0.0307471 0.1239392}
|
||||
{X03DA PEARL -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS03-DBPM-2410 -0.2016647 0.0152728 0.0001171 0.0000326 ARS03-DBPM-2910 1.2831552 -0.9190247 0.5819894 -0.5004911 ARS03-DBPM-4220 0.6905553 0.9206615 0.4875028 1.7552635 ARS03-DBPM-4720 -0.1749243 0.0438144 0.0309089 0.1234182}
|
||||
{X04DB VUV -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS04-DBPM-1900 -0.1917962 0.0214714 0.0001022 0.0000595 ARS04-DBPM-2410 1.2842031 -0.9179380 0.5814999 -0.5000284 ARS04-DBPM-2910 0.6887599 0.9211626 0.4874732 1.7553295 ARS04-DBPM-4220 -0.1710439 0.0514609 0.0309080 0.1234788}
|
||||
{X05DA Optics -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS05-DBPM-2410 -0.2740176 -0.0571105 0.0001170 0.0000321 ARS05-DBPM-2910 1.2732647 -0.9287209 0.5819890 -0.5003730 ARS05-DBPM-4220 0.6913367 0.9213802 0.4873370 1.7548006 ARS05-DBPM-4720 -0.2592981 -0.0408063 0.0308988 0.1233928}
|
||||
{X06DA PXIII -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS06-DBPM-2410 -0.2675305 -0.0508248 0.0001170 0.0000321 ARS06-DBPM-2910 1.2749858 -0.9266845 0.5818007 -0.5004548 ARS06-DBPM-4220 0.6916389 0.9218001 0.4871613 1.7552275 ARS06-DBPM-4720 -0.2517260 -0.0332473 0.0308895 0.1234316}
|
||||
{X07DB nanoXAS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS07-DBPM-1900 -0.2563387 -0.0425222 0.0001023 0.0000596 ARS07-DBPM-2410 1.2761628 -0.9263027 0.5814954 -0.4999177 ARS07-DBPM-2910 0.6888233 0.9216262 0.4873810 1.7549631 ARS07-DBPM-4220 -0.2469055 -0.0248794 0.0309043 0.1234651}
|
||||
{X07DA PolLux -300 300 0 -150 150 0 -300 300 0 -250 250 0 ARS07-DBPM-2410 -0.2606076 -0.0450539 0.0001170 0.0000326 ARS07-DBPM-2910 1.2750718 -0.9205684 0.5819899 -0.4976199 ARS07-DBPM-4220 0.6915728 0.9246379 0.4873668 1.7572153 ARS07-DBPM-4720 -0.2433555 -0.0254434 0.0309006 0.1235450}
|
||||
{X10DA SuperXAS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS10-DBPM-2410 -0.2392400 -0.0226765 0.0001170 0.0000321 ARS10-DBPM-2910 1.2780895 -0.9235140 0.5818007 -0.5005005 ARS10-DBPM-4220 0.6911875 0.9212713 0.4872251 1.7554059 ARS10-DBPM-4720 -0.2190626 -0.0004438 0.0308933 0.1234413}
|
||||
# ID beamlines
|
||||
{X02SA I-TOMCAT -500 500 0 -150 150 0 -500 500 0 -150 150 0 ARS01-DBPM-5250 -0.0161762 0.0645315 -0.0000522 0.0002217 ARS01-DBPM-5880 1.3057217 -3.1586368 0.7340909 -1.7908669 ARS02-DBPM-1080 1.1637103 2.7703664 0.8405251 2.0415012 ARS02-DBPM-1460 0.0473369 0.1176477 0.0354851 0.0914118}
|
||||
{X03MA ADRESS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS02-DBPM-5250 -0.0056074 0.0805576 -0.0000533 0.0001427 ARS02-DBPM-5880 1.2522257 -3.5240592 0.7649336 -2.1576328 ARS03-DBPM-0810 1.1134798 3.0406278 0.8874945 2.4488073 ARS03-DBPM-1080 0.0367597 0.0902093 0.0491615 0.1421129}
|
||||
{X04SA ADDAMS -500 500 0 -150 150 0 -500 500 0 -150 150 0 ARS03-DBPM-5250 0.0006041 0.0811354 -0.0000524 0.0002222 ARS03-DBPM-5880 1.3048037 -3.1594991 0.7340820 -1.7909262 ARS04-DBPM-1080 1.1649402 2.7718322 0.8405182 2.0415768 ARS04-DBPM-1460 0.0441826 0.1145073 0.0354841 0.0914133}
|
||||
{X05LA QUEST -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS04-DBPM-5880 0.0008866 0.0002252 -0.0001045 0.0002529 ARS05-DBPM-0410 0.8976150 -2.8499257 1.0112790 -2.8592349 ARS05-DBPM-1080 1.0880889 5.0183256 0.9137175 4.2390359 ARS05-DBPM-1460 0.0421489 0.1947713 0.0433357 0.2067705}
|
||||
{X06SA PXI -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS05-DBPM-5250 -0.0776973 0.0030268 -0.0000523 0.0002212 ARS05-DBPM-5880 1.3044906 -3.1590695 0.7341239 -1.7906420 ARS06-DBPM-1080 1.1642809 2.7699897 0.8405515 2.0412179 ARS06-DBPM-1460 0.0604868 0.1306028 0.0354886 0.0914055}
|
||||
{X07MA Phoenix/XTreme -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS06-DBPM-5250 -0.0684380 0.0189547 -0.0000531 0.0001447 ARS06-DBPM-5880 1.2508776 -3.5845660 0.7649630 -2.1939024 ARS07-DBPM-0810 1.1137188 2.9863773 0.8875136 2.4060190 ARS07-DBPM-1080 0.0093629 0.0606390 0.0491634 0.1397441}
|
||||
{X08SA micro-XAS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS07-DBPM-5250 -0.0624701 0.0181621 -0.0000523 0.0002216 ARS07-DBPM-5880 1.3039931 -3.1597229 0.7341156 -1.7906968 ARS08-DBPM-1080 1.1652753 2.7714013 0.8405450 2.0412871 ARS08-DBPM-1460 0.0575855 0.1278140 0.0354876 0.0914065}
|
||||
{X09LA PEARL/XIL-II -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS08-DBPM-5880 0.0011254 0.0009724 -0.0000942 0.0002317 ARS09-DBPM-0570 0.8843735 -2.4344684 1.1263977 -3.0082085 ARS09-DBPM-1080 1.0591734 3.0395499 0.9413643 2.7184391 ARS09-DBPM-1460 0.0394021 0.1139547 0.0465775 0.1402264}
|
||||
{X10SA PXII -500 500 0 -150 150 0 -500 500 0 -150 150 0 ARS09-DBPM-5250 -0.0473875 0.0333454 -0.0000523 0.0002213 ARS09-DBPM-5880 1.3047178 -3.1592507 0.7341077 -1.7907518 ARS10-DBPM-1080 1.1639981 2.7701547 0.8405387 2.0413565 ARS10-DBPM-1460 0.0540084 0.1242161 0.0354869 0.0914087}
|
||||
{X11MA SIM -500 500 0 -150 150 0 -500 500 0 -150 150 0 ARS10-DBPM-5250 -0.0383667 0.0514782 -0.0000499 0.0001646 ARS10-DBPM-5880 1.2526899 -3.7342542 0.7640638 -2.2804441 ARS11-DBPM-0850 1.1168967 3.1441871 0.8845808 2.5170397 ARS11-DBPM-1080 0.0219427 0.0928506 0.0546028 0.1626088}
|
||||
{X12SA cSAXS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS11-DBPM-5250 -0.0326376 0.0479239 -0.0000524 0.0002219 ARS11-DBPM-5880 1.3047910 -3.1591765 0.7340995 -1.7908066 ARS12-DBPM-1080 1.1653151 2.7718178 0.8405322 2.0414257 ARS12-DBPM-1460 0.0513287 0.1216036 0.0354860 0.0914097}
|
||||
}
|
||||
|
||||
|
||||
file ORBITBUMP_beamline.template {
|
||||
pattern
|
||||
{sourcepoint beamline DRVL DRVH X XP Y YP }
|
||||
# Diagnostic dipole beamlines
|
||||
{X01DD NEMO -10 10 0 0 0 0 }
|
||||
{X08DB DISCO -10 10 0 0 0 0 }
|
||||
{X10DG X11HEAT -10 10 0 0 0 0 }
|
||||
# User dipole beamlines
|
||||
{X01DA DEBYE -10 10 0 0 0 0 }
|
||||
{X02DA S-TOMCAT -10 10 0 0 0 0 }
|
||||
{X03DA PEARL -10 10 0 0 0 0 }
|
||||
{X04DB VUV -10 10 0 0 0 0 }
|
||||
{X05DA Optics -10 10 0 0 0 0 }
|
||||
{X06DA PXIII -10 10 0 0 0 0 }
|
||||
{X07DB nanoXAS -10 10 0 0 0 0 }
|
||||
{X07DA PolLux -10 10 0 0 0 0 }
|
||||
{X10DA SuperXAS -10 10 0 0 0 0 }
|
||||
# ID beamlines
|
||||
{X02SA I-TOMCAT -10 10 0 0 0 0 }
|
||||
{X03MA ADRESS -10 10 0 0 0 0 }
|
||||
{X04SA ADDAMS -10 10 0 0 0 0 }
|
||||
{X05LA QUEST -10 10 0 0 0 0 }
|
||||
{X06SA PXI -10 10 0 0 0 0 }
|
||||
{X07MA Phoenix/XTreme -10 10 0 0 0 0 }
|
||||
{X08SA micro-XAS -10 10 0 0 0 0 }
|
||||
{X09LA PEARL/XIL-II -10 10 0 0 0 0 }
|
||||
{X10SA PXII -10 10 0 0 0 0 }
|
||||
{X11MA SIM -10 10 0 0 0 0 }
|
||||
{X12SA cSAXS -10 10 0 0 0 0 }
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,87 @@
|
||||
record(ao, "$(sourcepoint)-ORBITBUMP:OFFSET-X") {
|
||||
field(DESC, "Beamline x offset for $(beamline)")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "um")
|
||||
field(PREC, "0")
|
||||
field(VAL, "$(X)")
|
||||
field(PINI, "YES")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-X-TOTAL")
|
||||
field(DRVH, "$(DRVH)")
|
||||
field(DRVL, "$(DRVL)")
|
||||
field(HOPR, "$(DRVH)")
|
||||
field(LOPR, "$(DRVL)")
|
||||
field(HIHI, "10")
|
||||
field(HHSV, "MAJOR")
|
||||
field(HIGH, "1")
|
||||
field(HSV, "MINOR")
|
||||
field(LOW, "-1")
|
||||
field(LSV, "MINOR")
|
||||
field(LOLO, "-10")
|
||||
field(LLSV, "MAJOR")
|
||||
}
|
||||
|
||||
record(ao, "$(sourcepoint)-ORBITBUMP:OFFSET-XP") {
|
||||
field(DESC, "Beamline xp offset for $(beamline)")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "urad")
|
||||
field(PREC, "0")
|
||||
field(VAL, "$(XP)")
|
||||
field(PINI, "YES")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-XP-TOTAL")
|
||||
field(DRVH, "$(DRVH)")
|
||||
field(DRVL, "$(DRVL)")
|
||||
field(HOPR, "$(DRVH)")
|
||||
field(LOPR, "$(DRVL)")
|
||||
field(HIHI, "10")
|
||||
field(HHSV, "MAJOR")
|
||||
field(HIGH, "1")
|
||||
field(HSV, "MINOR")
|
||||
field(LOW, "-1")
|
||||
field(LSV, "MINOR")
|
||||
field(LOLO, "-10")
|
||||
field(LLSV, "MAJOR")
|
||||
}
|
||||
|
||||
record(ao, "$(sourcepoint)-ORBITBUMP:OFFSET-Y") {
|
||||
field(DESC, "Beamline y offset for $(beamline)")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "um")
|
||||
field(PREC, "0")
|
||||
field(VAL, "$(Y)")
|
||||
field(PINI, "YES")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-Y-TOTAL")
|
||||
field(DRVH, "$(DRVH)")
|
||||
field(DRVL, "$(DRVL)")
|
||||
field(HOPR, "$(DRVH)")
|
||||
field(LOPR, "$(DRVL)")
|
||||
field(HIHI, "10")
|
||||
field(HHSV, "MAJOR")
|
||||
field(HIGH, "1")
|
||||
field(HSV, "MINOR")
|
||||
field(LOW, "-1")
|
||||
field(LSV, "MINOR")
|
||||
field(LOLO, "-10")
|
||||
field(LLSV, "MAJOR")
|
||||
}
|
||||
|
||||
record(ao, "$(sourcepoint)-ORBITBUMP:OFFSET-YP") {
|
||||
field(DESC, "Beamline yp offset for $(beamline)")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "urad")
|
||||
field(PREC, "0")
|
||||
field(VAL, "$(YP)")
|
||||
field(PINI, "YES")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-YP-TOTAL")
|
||||
field(DRVH, "$(DRVH)")
|
||||
field(DRVL, "$(DRVL)")
|
||||
field(HOPR, "$(DRVH)")
|
||||
field(LOPR, "$(DRVL)")
|
||||
field(HIHI, "10")
|
||||
field(HHSV, "MAJOR")
|
||||
field(HIGH, "1")
|
||||
field(HSV, "MINOR")
|
||||
field(LOW, "-1")
|
||||
field(LSV, "MINOR")
|
||||
field(LOLO, "-10")
|
||||
field(LLSV, "MAJOR")
|
||||
}
|
||||
@@ -0,0 +1,504 @@
|
||||
# # on request writing total bump values to machine bumps and zero beamline bumps
|
||||
# record(bo, "AGEBD-ORBITBUMP:$(sourcepoint)-COPYOVER") {
|
||||
# field(DESC, "Request zeroing of beamline offsets")
|
||||
# field(ASG, "PROTECTED")
|
||||
# field(PINI, "YES")
|
||||
# field(ZNAM, "Idle")
|
||||
# field(ONAM, "Trigger")
|
||||
# field(OUT, "myDevice:addAndZero.PROC PP")
|
||||
# }
|
||||
|
||||
# record(seq, "AGEBD-ORBITBUMP:$(sourcepoint)-COPYOVER") {
|
||||
# field(DESC, "On trigger: add PV_A to PV_B, zero PV_A")
|
||||
|
||||
# field(DOL1, "myDevice:add_calc NPP NMS") # Value = A + B
|
||||
# field(LNK1, "myDevice:PV_B PP MS") # Step 1: write sum to PV_B
|
||||
|
||||
# field(DLY1, "0.1") # Wait 0.1s before next step
|
||||
|
||||
# field(DOL2, "0") # Value = 0
|
||||
# field(LNK2, "myDevice:PV_A PP MS") # Step 2: zero PV_A
|
||||
# }
|
||||
|
||||
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-X") {
|
||||
field(DESC, "Machine x offset for $(beamline)")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "um")
|
||||
field(PREC, "0")
|
||||
field(VAL, "$(X)")
|
||||
field(PINI, "YES")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-X-TOTAL")
|
||||
field(DRVH, "$(HIX)")
|
||||
field(DRVL, "$(LOX)")
|
||||
field(HOPR, "$(HIX)")
|
||||
field(LOPR, "$(LOX)")
|
||||
field(HIHI, "100")
|
||||
field(HHSV, "MAJOR")
|
||||
field(HIGH, "1")
|
||||
field(HSV, "MINOR")
|
||||
field(LOW, "-1")
|
||||
field(LSV, "MINOR")
|
||||
field(LOLO, "-100")
|
||||
field(LLSV, "MAJOR")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-XP") {
|
||||
field(DESC, "Machine xp offset for $(beamline)")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "urad")
|
||||
field(PREC, "0")
|
||||
field(VAL, "$(XP)")
|
||||
field(PINI, "YES")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-XP-TOTAL")
|
||||
field(DRVH, "$(HIXP)")
|
||||
field(DRVL, "$(LOXP)")
|
||||
field(HOPR, "$(HIXP)")
|
||||
field(LOPR, "$(LOXP)")
|
||||
field(HIHI, "100")
|
||||
field(HHSV, "MAJOR")
|
||||
field(HIGH, "1")
|
||||
field(HSV, "MINOR")
|
||||
field(LOW, "-1")
|
||||
field(LSV, "MINOR")
|
||||
field(LOLO, "-100")
|
||||
field(LLSV, "MAJOR")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-Y") {
|
||||
field(DESC, "Machine y offset for $(beamline)")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "um")
|
||||
field(PREC, "0")
|
||||
field(VAL, "$(Y)")
|
||||
field(PINI, "YES")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-Y-TOTAL")
|
||||
field(DRVH, "$(HIY)")
|
||||
field(DRVL, "$(LOY)")
|
||||
field(HOPR, "$(HIY)")
|
||||
field(LOPR, "$(LOY)")
|
||||
field(HIHI, "100")
|
||||
field(HHSV, "MAJOR")
|
||||
field(HIGH, "1")
|
||||
field(HSV, "MINOR")
|
||||
field(LOW, "-1")
|
||||
field(LSV, "MINOR")
|
||||
field(LOLO, "-100")
|
||||
field(LLSV, "MAJOR")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-YP") {
|
||||
field(DESC, "Machine yp offset for $(beamline)")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "urad")
|
||||
field(PREC, "0")
|
||||
field(VAL, "$(YP)")
|
||||
field(PINI, "YES")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-YP-TOTAL")
|
||||
field(DRVH, "$(HIYP)")
|
||||
field(DRVL, "$(LOYP)")
|
||||
field(HOPR, "$(HIYP)")
|
||||
field(LOPR, "$(LOYP)")
|
||||
field(HIHI, "100")
|
||||
field(HHSV, "MAJOR")
|
||||
field(HIGH, "1")
|
||||
field(HSV, "MINOR")
|
||||
field(LOW, "-1")
|
||||
field(LSV, "MINOR")
|
||||
field(LOLO, "-100")
|
||||
field(LLSV, "MAJOR")
|
||||
}
|
||||
|
||||
# Sum PVs for total desired orbit bumps, i.e., sum of machine and beamline
|
||||
record(calcout, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-X-TOTAL") {
|
||||
field(DESC, "Total x offset for $(beamline)")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Passive")
|
||||
field(PREC, "0")
|
||||
field(CALC, "A + B")
|
||||
field(INPA, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-X")
|
||||
field(INPB, "$(sourcepoint)-ORBITBUMP:OFFSET-X")
|
||||
field(OOPT, "On Change")
|
||||
field(DOPT, "Use CALC")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM1")
|
||||
field(HIHI, "100")
|
||||
field(HHSV, "MAJOR")
|
||||
field(HIGH, "1")
|
||||
field(HSV, "MINOR")
|
||||
field(LOW, "-1")
|
||||
field(LSV, "MINOR")
|
||||
field(LOLO, "-100")
|
||||
field(LLSV, "MAJOR")
|
||||
}
|
||||
|
||||
record(calcout, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-XP-TOTAL") {
|
||||
field(DESC, "Total xp offset for $(beamline)")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Passive")
|
||||
field(PREC, "0")
|
||||
field(CALC, "A + B")
|
||||
field(INPA, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-XP")
|
||||
field(INPB, "$(sourcepoint)-ORBITBUMP:OFFSET-XP")
|
||||
field(OOPT, "On Change")
|
||||
field(DOPT, "Use CALC")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM1")
|
||||
field(HIHI, "100")
|
||||
field(HHSV, "MAJOR")
|
||||
field(HIGH, "1")
|
||||
field(HSV, "MINOR")
|
||||
field(LOW, "-1")
|
||||
field(LSV, "MINOR")
|
||||
field(LOLO, "-100")
|
||||
field(LLSV, "MAJOR")
|
||||
}
|
||||
|
||||
record(calcout, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-Y-TOTAL") {
|
||||
field(DESC, "Total y offset for $(beamline)")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Passive")
|
||||
field(PREC, "0")
|
||||
field(CALC, "A + B")
|
||||
field(INPA, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-Y")
|
||||
field(INPB, "$(sourcepoint)-ORBITBUMP:OFFSET-Y")
|
||||
field(OOPT, "On Change")
|
||||
field(DOPT, "Use CALC")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM1")
|
||||
field(HIHI, "100")
|
||||
field(HHSV, "MAJOR")
|
||||
field(HIGH, "1")
|
||||
field(HSV, "MINOR")
|
||||
field(LOW, "-1")
|
||||
field(LSV, "MINOR")
|
||||
field(LOLO, "-100")
|
||||
field(LLSV, "MAJOR")
|
||||
}
|
||||
|
||||
record(calcout, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-YP-TOTAL") {
|
||||
field(DESC, "Total y offset for $(beamline)")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Passive")
|
||||
field(PREC, "0")
|
||||
field(CALC, "A + B")
|
||||
field(INPA, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-YP")
|
||||
field(INPB, "$(sourcepoint)-ORBITBUMP:OFFSET-YP")
|
||||
field(OOPT, "On Change")
|
||||
field(DOPT, "Use CALC")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM1")
|
||||
field(HIHI, "100")
|
||||
field(HHSV, "MAJOR")
|
||||
field(HIGH, "1")
|
||||
field(HSV, "MINOR")
|
||||
field(LOW, "-1")
|
||||
field(LSV, "MINOR")
|
||||
field(LOLO, "-100")
|
||||
field(LLSV, "MAJOR")
|
||||
}
|
||||
|
||||
# BPM1, C1xx, C1xpx, C1yy, C1ypy,
|
||||
|
||||
record(stringout, "AGEBD-ORBITBUMP:$(sourcepoint)-BPM1") {
|
||||
field(DESC, "$(BPM1)")
|
||||
field(ASG, "READONLY")
|
||||
field(VAL, "$(BPM1)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C1xx") {
|
||||
field(DESC, "Coefficient dx2dx at $(BPM1)")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mm/mm")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C1xx)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C1xpx") {
|
||||
field(DESC, "Coefficient dxp2dx at $(BPM1)")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mm/mrad")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C1xpx)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C1yy") {
|
||||
field(DESC, "Coefficient dy2dy at $(BPM1)")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mm/mm")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C1yy)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C1ypy") {
|
||||
field(DESC, "Coefficient dyp2dy at $(BPM1)")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mm/mrad")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C1ypy)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(calcout, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM1") {
|
||||
field(DESC, "Hor. change for $(BPM1)")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Passive")
|
||||
field(PREC, "3")
|
||||
field(CALC, "A*B/1000 + C*D/1000")
|
||||
field(INPA, "AGEBD-ORBITBUMP:$(sourcepoint)-C1xx")
|
||||
field(INPB, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-X-TOTAL")
|
||||
field(INPC, "AGEBD-ORBITBUMP:$(sourcepoint)-C1xpx")
|
||||
field(INPD, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-XP-TOTAL")
|
||||
field(OOPT, "On Change")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(BPM1):X-B-REF-OP")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM2")
|
||||
}
|
||||
|
||||
record(calcout, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM1") {
|
||||
field(DESC, "Hor. change for $(BPM1)")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Passive")
|
||||
field(PREC, "3")
|
||||
field(CALC, "A*B/1000 + C*D/1000")
|
||||
field(INPA, "AGEBD-ORBITBUMP:$(sourcepoint)-C1yy")
|
||||
field(INPB, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-Y-TOTAL")
|
||||
field(INPC, "AGEBD-ORBITBUMP:$(sourcepoint)-C1ypy")
|
||||
field(INPD, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-YP-TOTAL")
|
||||
field(OOPT, "On Change")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(BPM1):Y-B-REF-OP")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM2")
|
||||
}
|
||||
|
||||
# BPM2, C2xx, C2xpx, C2yy, C2ypy,
|
||||
|
||||
record(stringout, "AGEBD-ORBITBUMP:$(sourcepoint)-BPM2") {
|
||||
field(DESC, "$(BPM2)")
|
||||
field(ASG, "READONLY")
|
||||
field(VAL, "$(BPM2)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C2xx") {
|
||||
field(DESC, "Coefficient dx2dx at $(BPM2)")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mm/mm")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C2xx)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C2xpx") {
|
||||
field(DESC, "Coefficient dxp2dx at $(BPM2)")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mm/mrad")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C2xpx)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C2yy") {
|
||||
field(DESC, "Coefficient dy2dy at $(BPM2)")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mm/mm")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C2yy)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C2ypy") {
|
||||
field(DESC, "Coefficient dyp2dy at $(BPM2)")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mm/mrad")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C2ypy)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(calcout, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM2") {
|
||||
field(DESC, "Hor. change for $(BPM2)")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Passive")
|
||||
field(PREC, "3")
|
||||
field(CALC, "A*B/1000 + C*D/1000")
|
||||
field(INPA, "AGEBD-ORBITBUMP:$(sourcepoint)-C2xx")
|
||||
field(INPB, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-X-TOTAL")
|
||||
field(INPC, "AGEBD-ORBITBUMP:$(sourcepoint)-C2xpx")
|
||||
field(INPD, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-XP-TOTAL")
|
||||
field(INPE, "$(sourcepoint)-ORBITBUMP:OFFSET-X")
|
||||
field(INPF, "$(sourcepoint)-ORBITBUMP:OFFSET-XP")
|
||||
field(OOPT, "On Change")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(BPM2):X-B-REF-OP")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM3")
|
||||
}
|
||||
|
||||
record(calcout, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM2") {
|
||||
field(DESC, "Hor. change for $(BPM2)")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Passive")
|
||||
field(PREC, "3")
|
||||
field(CALC, "A*B/1000 + C*D/1000")
|
||||
field(INPA, "AGEBD-ORBITBUMP:$(sourcepoint)-C2yy")
|
||||
field(INPB, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-Y-TOTAL")
|
||||
field(INPC, "AGEBD-ORBITBUMP:$(sourcepoint)-C2ypy")
|
||||
field(INPD, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-YP-TOTAL")
|
||||
field(OOPT, "On Change")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(BPM2):Y-B-REF-OP")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM3")
|
||||
}
|
||||
|
||||
# BPM3, C3xx, C3xpx, C3yy, C3ypy,
|
||||
|
||||
record(stringout, "AGEBD-ORBITBUMP:$(sourcepoint)-BPM3") {
|
||||
field(DESC, "$(BPM3)")
|
||||
field(VAL, "$(BPM3)")
|
||||
field(ASG, "READONLY")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C3xx") {
|
||||
field(DESC, "Coefficient dx2dx at $(BPM3)")
|
||||
field(EGU, "mm/mm")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C3xx)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C3xpx") {
|
||||
field(DESC, "Coefficient dxp2dx at $(BPM3)")
|
||||
field(EGU, "mm/mrad")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C3xpx)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C3yy") {
|
||||
field(DESC, "Coefficient dy2dy at $(BPM3)")
|
||||
field(EGU, "mm/mm")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C3yy)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C3ypy") {
|
||||
field(DESC, "Coefficient dyp2dy at $(BPM3)")
|
||||
field(EGU, "mm/mrad")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C3ypy)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(calcout, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM3") {
|
||||
field(DESC, "Hor. change for $(BPM3)")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Passive")
|
||||
field(PREC, "3")
|
||||
field(CALC, "A*B/1000 + C*D/1000")
|
||||
field(INPA, "AGEBD-ORBITBUMP:$(sourcepoint)-C3xx")
|
||||
field(INPB, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-X-TOTAL")
|
||||
field(INPC, "AGEBD-ORBITBUMP:$(sourcepoint)-C3xpx")
|
||||
field(INPD, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-XP-TOTAL")
|
||||
field(INPE, "$(sourcepoint)-ORBITBUMP:OFFSET-X")
|
||||
field(INPF, "$(sourcepoint)-ORBITBUMP:OFFSET-XP")
|
||||
field(OOPT, "On Change")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(BPM3):X-B-REF-OP")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM4")
|
||||
}
|
||||
|
||||
record(calcout, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM3") {
|
||||
field(DESC, "Hor. change for $(BPM3)")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Passive")
|
||||
field(PREC, "3")
|
||||
field(CALC, "A*B/1000 + C*D/1000")
|
||||
field(INPA, "AGEBD-ORBITBUMP:$(sourcepoint)-C3yy")
|
||||
field(INPB, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-Y-TOTAL")
|
||||
field(INPC, "AGEBD-ORBITBUMP:$(sourcepoint)-C3ypy")
|
||||
field(INPD, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-YP-TOTAL")
|
||||
field(OOPT, "On Change")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(BPM3):Y-B-REF-OP")
|
||||
field(FLNK, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM4")
|
||||
}
|
||||
|
||||
# BPM4, C4xx, C4xpx, C4yy, C4ypy,
|
||||
|
||||
record(stringout, "AGEBD-ORBITBUMP:$(sourcepoint)-BPM4") {
|
||||
field(DESC, "$(BPM4)")
|
||||
field(ASG, "READONLY")
|
||||
field(VAL, "$(BPM4)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C4xx") {
|
||||
field(DESC, "Coefficient dx2dx at $(BPM4)")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mm/mm")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C4xx)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C4xpx") {
|
||||
field(DESC, "Coefficient dxp2dx at $(BPM4)")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mm/mrad")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C4xpx)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C4yy") {
|
||||
field(DESC, "Coefficient dy2dy at $(BPM4)")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mm/mm")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C4yy)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "AGEBD-ORBITBUMP:$(sourcepoint)-C4ypy") {
|
||||
field(DESC, "Coefficient dyp2dy at $(BPM4)")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mm/mrad")
|
||||
field(PREC, "3")
|
||||
field(VAL, "$(C4ypy)")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(calcout, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM4") {
|
||||
field(DESC, "Hor. change for $(BPM4)")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Passive")
|
||||
field(PREC, "3")
|
||||
field(CALC, "A*B/1000 + C*D/1000")
|
||||
field(INPA, "AGEBD-ORBITBUMP:$(sourcepoint)-C4xx")
|
||||
field(INPB, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-X-TOTAL")
|
||||
field(INPC, "AGEBD-ORBITBUMP:$(sourcepoint)-C4xpx")
|
||||
field(INPD, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-XP-TOTAL")
|
||||
field(INPE, "$(sourcepoint)-ORBITBUMP:OFFSET-X")
|
||||
field(INPF, "$(sourcepoint)-ORBITBUMP:OFFSET-XP")
|
||||
field(OOPT, "On Change")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(BPM4):X-B-REF-OP")
|
||||
}
|
||||
|
||||
record(calcout, "AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM4") {
|
||||
field(DESC, "Hor. change for $(BPM4)")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, "Passive")
|
||||
field(PREC, "3")
|
||||
field(CALC, "A*B/1000 + C*D/1000")
|
||||
field(INPA, "AGEBD-ORBITBUMP:$(sourcepoint)-C4yy")
|
||||
field(INPB, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-Y-TOTAL")
|
||||
field(INPC, "AGEBD-ORBITBUMP:$(sourcepoint)-C4ypy")
|
||||
field(INPD, "AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-YP-TOTAL")
|
||||
field(OOPT, "On Change")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(BPM4):Y-B-REF-OP")
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
# TODO: dev/prod templating
|
||||
@@ -0,0 +1 @@
|
||||
epicsEnvSet("ENGINEER", "armborst")
|
||||
@@ -0,0 +1,409 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>770</width>
|
||||
<height>990</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="caInclude" name="cainclude">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>220</y>
|
||||
<width>750</width>
|
||||
<height>346</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="macro">
|
||||
<string>sourcepoint=X01DA,beamline=Debye;sourcepoint=X02DA,beamline=S-TOMCAT;sourcepoint=X03DA,beamline=PEARL;sourcepoint=X04DB,beamline=VUV;sourcepoint=X05DA,beamline=Optics;sourcepoint=X06DA,beamline=PXIII;sourcepoint=X07DB,beamline=nanoXAS;sourcepoint=X07DA,beamline=PolLux;sourcepoint=X10DA,beamline=SuperXAS</string>
|
||||
</property>
|
||||
<property name="filename" stdset="0">
|
||||
<string notr="true">A_BD_OrbitBump_Operator_inc.ui</string>
|
||||
</property>
|
||||
<property name="numberOfItems" stdset="0">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="verticalSpacing" stdset="0">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caInclude" name="cainclude_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>80</y>
|
||||
<width>750</width>
|
||||
<height>100</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="macro">
|
||||
<string>sourcepoint=X01DD,beamline=NEMO;sourcepoint=X08DB,beamline=DISCO;sourcepoint=X10DG,beamline=X11HEAT</string>
|
||||
</property>
|
||||
<property name="filename" stdset="0">
|
||||
<string notr="true">A_BD_OrbitBump_Operator_inc.ui</string>
|
||||
</property>
|
||||
<property name="numberOfItems" stdset="0">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="verticalSpacing" stdset="0">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>190</y>
|
||||
<width>261</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Dipole Beamlines</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>50</y>
|
||||
<width>291</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Diagnostic Beamlines</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>570</y>
|
||||
<width>261</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>ID Beamlines</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caInclude" name="cainclude_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>600</y>
|
||||
<width>750</width>
|
||||
<height>541</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="macro">
|
||||
<string>sourcepoint=X02SA,beamline=I-TOMCAT;sourcepoint=X03MA,beamline=ADRESS;sourcepoint=X04SA,beamline=ADDAMS;sourcepoint=X05LA,beamline=QUEST;sourcepoint=X06SA,beamline=PXI;sourcepoint=X07MA,beamline=Phoenix/XTreme;sourcepoint=X08SA,beamline=micro-XAS;sourcepoint=X09LA,beamline=PEARL/XIL-II;sourcepoint=X10SA,beamline=PXII;sourcepoint=X11MA,beamline=SIM;sourcepoint=X12SA,beamline=cSAXS</string>
|
||||
</property>
|
||||
<property name="filename" stdset="0">
|
||||
<string notr="true">A_BD_OrbitBump_Operator_inc.ui</string>
|
||||
</property>
|
||||
<property name="numberOfItems" stdset="0">
|
||||
<number>11</number>
|
||||
</property>
|
||||
<property name="verticalSpacing" stdset="0">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>330</x>
|
||||
<y>50</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>X (um)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_5">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>440</x>
|
||||
<y>50</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>15</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>X' (urad)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_6">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>550</x>
|
||||
<y>50</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Y (um)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_7">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>660</x>
|
||||
<y>50</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>15</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Y' (urad)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caRelatedDisplay" name="carelateddisplay">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>598</x>
|
||||
<y>4</y>
|
||||
<width>170</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">Expert Panel All</string>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>183</red>
|
||||
<green>157</green>
|
||||
<blue>92</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="labels">
|
||||
<string>Expert Panel All</string>
|
||||
</property>
|
||||
<property name="files">
|
||||
<string>A_BD_OrbitBump_Expert_all.ui</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_8">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>2</x>
|
||||
<y>2</y>
|
||||
<width>767</width>
|
||||
<height>33</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Sans Serif</family>
|
||||
<pointsize>20</pointsize>
|
||||
<weight>75</weight>
|
||||
<italic>false</italic>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Beamline local Bumps</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading</set>
|
||||
</property>
|
||||
<property name="foreground">
|
||||
<color>
|
||||
<red>255</red>
|
||||
<green>255</green>
|
||||
<blue>255</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>100</red>
|
||||
<green>100</green>
|
||||
<blue>100</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLabel::Static</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caCalc" name="cacalc_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>800</x>
|
||||
<y>260</y>
|
||||
<width>70</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Reload</string>
|
||||
</property>
|
||||
<property name="variable">
|
||||
<string notr="true">RELOAD</string>
|
||||
</property>
|
||||
<property name="calc">
|
||||
<string notr="true">A</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ALH:ORBITBUMP-GUIRELOAD</string>
|
||||
</property>
|
||||
<property name="eventSignal">
|
||||
<enum>caCalc::TriggerZeroToOne</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="wmSignalPropagator" name="wmsignalpropagator">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>800</x>
|
||||
<y>320</y>
|
||||
<width>70</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<zorder>cainclude</zorder>
|
||||
<zorder>cainclude_2</zorder>
|
||||
<zorder>calabel</zorder>
|
||||
<zorder>calabel_2</zorder>
|
||||
<zorder>calabel_3</zorder>
|
||||
<zorder>cainclude_3</zorder>
|
||||
<zorder>calabel_4</zorder>
|
||||
<zorder>calabel_5</zorder>
|
||||
<zorder>calabel_6</zorder>
|
||||
<zorder>calabel_7</zorder>
|
||||
<zorder>calabel_8</zorder>
|
||||
<zorder>carelateddisplay</zorder>
|
||||
<zorder>cacalc_2</zorder>
|
||||
<zorder>wmsignalpropagator</zorder>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>caRelatedDisplay</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>caRelatedDisplay</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>caLabel</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caInclude</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>caInclude</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caCalc</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>caCalc</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>wmSignalPropagator</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>wmSignalPropagator</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>cacalc_2</sender>
|
||||
<signal>emitSignal(bool)</signal>
|
||||
<receiver>wmsignalpropagator</receiver>
|
||||
<slot>reloadwindow()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>844</x>
|
||||
<y>271</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>847</x>
|
||||
<y>327</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -0,0 +1,465 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1801</width>
|
||||
<height>196</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="caInclude" name="cainclude_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>72</y>
|
||||
<width>1790</width>
|
||||
<height>120</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="macro">
|
||||
<string>sourcepoint=$(sourcepoint),beamline=$(beamline)</string>
|
||||
</property>
|
||||
<property name="filename" stdset="0">
|
||||
<string notr="true">A_BD_OrbitBump_Expert_inc.ui</string>
|
||||
</property>
|
||||
<property name="numberOfItems" stdset="0">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="verticalSpacing" stdset="0">
|
||||
<number>1</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>42</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>X (um)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_5">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>354</x>
|
||||
<y>42</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>15</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>X' (urad)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_6">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>462</x>
|
||||
<y>42</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Y (um)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_7">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>574</x>
|
||||
<y>42</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>15</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Y' (urad)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_8">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>686</x>
|
||||
<y>42</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>BPM 1</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_9">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>966</x>
|
||||
<y>42</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>BPM 2</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_10">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1246</x>
|
||||
<y>42</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>BPM 3</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_11">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1526</x>
|
||||
<y>42</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>BPM 4</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_12">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>791</x>
|
||||
<y>42</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>dx</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_13">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>876</x>
|
||||
<y>42</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>dy</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_14">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1071</x>
|
||||
<y>42</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>dx</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_15">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1156</x>
|
||||
<y>42</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>dy</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_16">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1631</x>
|
||||
<y>42</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>dx</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_17">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1351</x>
|
||||
<y>42</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>dx</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_18">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1716</x>
|
||||
<y>42</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>dy</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_19">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1436</x>
|
||||
<y>42</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>dy</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1909</width>
|
||||
<height>33</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Sans Serif</family>
|
||||
<pointsize>20</pointsize>
|
||||
<weight>75</weight>
|
||||
<italic>false</italic>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string> $(sourcepoint) $(beamline)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading</set>
|
||||
</property>
|
||||
<property name="foreground">
|
||||
<color>
|
||||
<red>255</red>
|
||||
<green>255</green>
|
||||
<blue>255</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>100</red>
|
||||
<green>100</green>
|
||||
<blue>100</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLabel::Static</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>caLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>caLabel</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caInclude</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>caInclude</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -0,0 +1,183 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1178</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="caMenu" name="camenu">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>80</x>
|
||||
<y>30</y>
|
||||
<width>460</width>
|
||||
<height>40</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>16</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:BEAMLINE-BEND</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caMenu" name="camenu_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>650</x>
|
||||
<y>30</y>
|
||||
<width>460</width>
|
||||
<height>40</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>16</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:BEAMLINE-ID</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_87">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>270</x>
|
||||
<y>340</y>
|
||||
<width>501</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:BEAMLINECALC</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caLineEdit::User</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_88">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>50</x>
|
||||
<y>110</y>
|
||||
<width>501</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:BEAMLINETYPE-BEND</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caLineEdit::User</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_89">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>270</x>
|
||||
<y>230</y>
|
||||
<width>501</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:BEAMLINETYPE</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caLineEdit::User</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_90">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>630</x>
|
||||
<y>110</y>
|
||||
<width>501</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:BEAMLINETYPE-ID</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caLineEdit::User</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_91">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>260</x>
|
||||
<y>450</y>
|
||||
<width>501</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:BEAMLINE</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caLineEdit::User</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>caMenu</class>
|
||||
<extends>QComboBox</extends>
|
||||
<header>caMenu</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>caLineEdit</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,627 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1790</width>
|
||||
<height>120</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="caLineEdit" name="calineedit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>779</x>
|
||||
<y>1</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>864</x>
|
||||
<y>1</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1059</x>
|
||||
<y>1</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM2</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1144</x>
|
||||
<y>1</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM2</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caSpinbox" name="caspinbox_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>230</x>
|
||||
<y>1</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="integerDigits" stdset="0">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="decimalDigits" stdset="0">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-X</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caSpinbox::Alarm</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caSpinbox::User</enum>
|
||||
</property>
|
||||
<property name="fixedFormat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="maxValue">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="minValue">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caSpinbox" name="caspinbox_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>340</x>
|
||||
<y>1</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="integerDigits" stdset="0">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="decimalDigits" stdset="0">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-XP</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caSpinbox::Alarm</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caSpinbox::User</enum>
|
||||
</property>
|
||||
<property name="fixedFormat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="maxValue">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="minValue">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caSpinbox" name="caspinbox_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>1</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="integerDigits" stdset="0">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="decimalDigits" stdset="0">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-YP</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caSpinbox::Alarm</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caSpinbox::User</enum>
|
||||
</property>
|
||||
<property name="fixedFormat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="maxValue">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="minValue">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caSpinbox" name="caspinbox_5">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>450</x>
|
||||
<y>1</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="integerDigits" stdset="0">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="decimalDigits" stdset="0">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-Y</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caSpinbox::Alarm</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caSpinbox::User</enum>
|
||||
</property>
|
||||
<property name="fixedFormat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="maxValue">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="minValue">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_5">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1619</x>
|
||||
<y>1</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM4</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_6">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1424</x>
|
||||
<y>1</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM3</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_7">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1704</x>
|
||||
<y>1</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-DELTAY-BPM4</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_8">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1339</x>
|
||||
<y>1</y>
|
||||
<width>80</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-DELTAX-BPM3</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_9">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>674</x>
|
||||
<y>1</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-BPM1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_10">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>954</x>
|
||||
<y>1</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-BPM2</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_11">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1234</x>
|
||||
<y>1</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-BPM3</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_12">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1514</x>
|
||||
<y>1</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-BPM4</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caSpinbox" name="caspinbox_6">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>450</x>
|
||||
<y>42</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="integerDigits" stdset="0">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="decimalDigits" stdset="0">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">$(sourcepoint)-ORBITBUMP:OFFSET-Y</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caSpinbox::Alarm</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caSpinbox::User</enum>
|
||||
</property>
|
||||
<property name="fixedFormat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="maxValue">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="minValue">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caSpinbox" name="caspinbox_7">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>230</x>
|
||||
<y>42</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="integerDigits" stdset="0">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="decimalDigits" stdset="0">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">$(sourcepoint)-ORBITBUMP:OFFSET-X</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caSpinbox::Alarm</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caSpinbox::User</enum>
|
||||
</property>
|
||||
<property name="fixedFormat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="maxValue">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="minValue">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caSpinbox" name="caspinbox_8">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>42</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="integerDigits" stdset="0">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="decimalDigits" stdset="0">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">$(sourcepoint)-ORBITBUMP:OFFSET-YP</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caSpinbox::Alarm</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caSpinbox::User</enum>
|
||||
</property>
|
||||
<property name="fixedFormat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="maxValue">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="minValue">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caSpinbox" name="caspinbox_9">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>340</x>
|
||||
<y>42</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="integerDigits" stdset="0">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="decimalDigits" stdset="0">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">$(sourcepoint)-ORBITBUMP:OFFSET-XP</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caSpinbox::Alarm</enum>
|
||||
</property>
|
||||
<property name="precisionMode">
|
||||
<enum>caSpinbox::User</enum>
|
||||
</property>
|
||||
<property name="fixedFormat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="maxValue">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="minValue">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>40</y>
|
||||
<width>225</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Beamline setpoint</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caGraphics" name="cagraphics">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1790</width>
|
||||
<height>120</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_17">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>230</x>
|
||||
<y>80</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-X-TOTAL</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Alarm_Default</enum>
|
||||
</property>
|
||||
<property name="framePresent" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_18">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>450</x>
|
||||
<y>80</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-Y-TOTAL</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Alarm_Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_19">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>560</x>
|
||||
<y>80</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-YP-TOTAL</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Alarm_Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_20">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>340</x>
|
||||
<y>80</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-XP-TOTAL</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Alarm_Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_5">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>80</y>
|
||||
<width>225</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Total Bump</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_6">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>2</y>
|
||||
<width>225</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Machine setpoint</string>
|
||||
</property>
|
||||
</widget>
|
||||
<zorder>cagraphics</zorder>
|
||||
<zorder>calineedit</zorder>
|
||||
<zorder>calineedit_2</zorder>
|
||||
<zorder>calineedit_3</zorder>
|
||||
<zorder>calineedit_4</zorder>
|
||||
<zorder>caspinbox_2</zorder>
|
||||
<zorder>caspinbox_3</zorder>
|
||||
<zorder>caspinbox_4</zorder>
|
||||
<zorder>caspinbox_5</zorder>
|
||||
<zorder>calineedit_5</zorder>
|
||||
<zorder>calineedit_6</zorder>
|
||||
<zorder>calineedit_7</zorder>
|
||||
<zorder>calineedit_8</zorder>
|
||||
<zorder>calineedit_9</zorder>
|
||||
<zorder>calineedit_10</zorder>
|
||||
<zorder>calineedit_11</zorder>
|
||||
<zorder>calineedit_12</zorder>
|
||||
<zorder>caspinbox_6</zorder>
|
||||
<zorder>caspinbox_7</zorder>
|
||||
<zorder>caspinbox_8</zorder>
|
||||
<zorder>caspinbox_9</zorder>
|
||||
<zorder>calabel_3</zorder>
|
||||
<zorder>calineedit_17</zorder>
|
||||
<zorder>calineedit_18</zorder>
|
||||
<zorder>calineedit_19</zorder>
|
||||
<zorder>calineedit_20</zorder>
|
||||
<zorder>calabel_5</zorder>
|
||||
<zorder>calabel_6</zorder>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>caSpinbox</class>
|
||||
<extends>QFrame</extends>
|
||||
<header>caSpinbox</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>caLabel</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caGraphics</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>caGraphics</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>caLineEdit</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -0,0 +1,291 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>770</width>
|
||||
<height>950</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="caInclude" name="cainclude">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>190</y>
|
||||
<width>750</width>
|
||||
<height>346</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="macro">
|
||||
<string>sourcepoint=X01DA,beamline=Debye;sourcepoint=X02DA,beamline=S-TOMCAT;sourcepoint=X03DA,beamline=PEARL;sourcepoint=X04DB,beamline=VUV;sourcepoint=X05DA,beamline=Optics;sourcepoint=X06DA,beamline=PXIII;sourcepoint=X07DB,beamline=nanoXAS;sourcepoint=X07DA,beamline=PolLux;sourcepoint=X10DA,beamline=SuperXAS</string>
|
||||
</property>
|
||||
<property name="filename" stdset="0">
|
||||
<string notr="true">A_BD_OrbitBump_Operator_inc.ui</string>
|
||||
</property>
|
||||
<property name="numberOfItems" stdset="0">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="verticalSpacing" stdset="0">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caInclude" name="cainclude_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>80</y>
|
||||
<width>750</width>
|
||||
<height>80</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="macro">
|
||||
<string>sourcepoint=X01DD,beamline=NEMO;sourcepoint=X08DB,beamline=DISCO</string>
|
||||
</property>
|
||||
<property name="filename" stdset="0">
|
||||
<string notr="true">A_BD_OrbitBump_Operator_inc.ui</string>
|
||||
</property>
|
||||
<property name="numberOfItems" stdset="0">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="verticalSpacing" stdset="0">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>160</y>
|
||||
<width>261</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Dipole Beamlines</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>50</y>
|
||||
<width>291</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Diagnostic Beamlines</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>530</y>
|
||||
<width>261</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>ID Beamlines</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caInclude" name="cainclude_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>560</y>
|
||||
<width>750</width>
|
||||
<height>541</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="macro">
|
||||
<string>sourcepoint=X02SA,beamline=I-TOMCAT;sourcepoint=X03MA,beamline=ADRESS;sourcepoint=X04SA,beamline=ADDAMS;sourcepoint=X05LA,beamline=QUEST;sourcepoint=X06SA,beamline=PXI;sourcepoint=X07MA,beamline=Phoenix/XTreme;sourcepoint=X08SA,beamline=micro-XAS;sourcepoint=X09LA,beamline=PEARL/XIL-II;sourcepoint=X10SA,beamline=PXII;sourcepoint=X11MA,beamline=SIM;sourcepoint=X12SA,beamline=cSAXS</string>
|
||||
</property>
|
||||
<property name="filename" stdset="0">
|
||||
<string notr="true">A_BD_OrbitBump_Operator_inc.ui</string>
|
||||
</property>
|
||||
<property name="numberOfItems" stdset="0">
|
||||
<number>11</number>
|
||||
</property>
|
||||
<property name="verticalSpacing" stdset="0">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>330</x>
|
||||
<y>50</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>X (um)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_5">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>440</x>
|
||||
<y>50</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>X' (urad)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_6">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>550</x>
|
||||
<y>50</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Y (um)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLabel" name="calabel_7">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>660</x>
|
||||
<y>50</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Y' (urad)</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caRelatedDisplay" name="carelateddisplay">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>590</x>
|
||||
<y>10</y>
|
||||
<width>170</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">Expert Panel</string>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>183</red>
|
||||
<green>157</green>
|
||||
<blue>92</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="labels">
|
||||
<string>Expert Panel</string>
|
||||
</property>
|
||||
<property name="files">
|
||||
<string>A_BD_OrbitBump_Expert.ui</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>caRelatedDisplay</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>caRelatedDisplay</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>caLabel</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caInclude</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>caInclude</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -0,0 +1,159 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>750</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="caLabel" name="calabel_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>160</x>
|
||||
<y>0</y>
|
||||
<width>150</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>$(beamline)</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>320</x>
|
||||
<y>0</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-X-TOTAL</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Alarm_Default</enum>
|
||||
</property>
|
||||
<property name="framePresent" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>430</x>
|
||||
<y>0</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-XP-TOTAL</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Alarm_Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>540</x>
|
||||
<y>0</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-Y-TOTAL</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Alarm_Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caLineEdit" name="calineedit_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>650</x>
|
||||
<y>0</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string notr="true">AGEBD-ORBITBUMP:$(sourcepoint)-OFFSET-YP-TOTAL</string>
|
||||
</property>
|
||||
<property name="colorMode">
|
||||
<enum>caLineEdit::Alarm_Default</enum>
|
||||
</property>
|
||||
<property name="alarmHandling">
|
||||
<enum>caLineEdit::onBackground</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caRelatedDisplay" name="carelateddisplay">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>150</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="label">
|
||||
<string notr="true">-$(sourcepoint) Expert</string>
|
||||
</property>
|
||||
<property name="background">
|
||||
<color>
|
||||
<red>183</red>
|
||||
<green>157</green>
|
||||
<blue>92</blue>
|
||||
</color>
|
||||
</property>
|
||||
<property name="labels">
|
||||
<string>$(sourcepoint) Expert</string>
|
||||
</property>
|
||||
<property name="files">
|
||||
<string>A_BD_OrbitBump_Expert.ui</string>
|
||||
</property>
|
||||
<property name="args">
|
||||
<string>sourcepoint=$(sourcepoint),beamline=$(beamline)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>caRelatedDisplay</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>caRelatedDisplay</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>caLabel</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caLineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>caLineEdit</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=AGEBD-SERVICE-ORBITBUMP
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Environment=AGEBD_ENV={{ agebd_env }}
|
||||
ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh ORBITBUMP
|
||||
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-ORBITBUMP.service
|
||||
# systemctl --user start AGEBD-SERVICE-ORBITBUMP
|
||||
@@ -0,0 +1,50 @@
|
||||
[project]
|
||||
name = "agebd-plots"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-PLOTS Service"
|
||||
requires-python = "==3.10.*"
|
||||
dependencies = [
|
||||
"agebd",
|
||||
"matplotlib>=3.10.9",
|
||||
"urllib3>=2.7.0",
|
||||
]
|
||||
# TODO: elog
|
||||
|
||||
[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"]
|
||||
@@ -0,0 +1 @@
|
||||
from .service import PVs, Service
|
||||
@@ -0,0 +1,31 @@
|
||||
import typer
|
||||
|
||||
from agebd.enums import LogLevel
|
||||
from agebd.runner import PeriodicRunner
|
||||
from agebd.utils import init_logging
|
||||
from agebd_plots 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 = "PLOTS"
|
||||
pvs = PVs(service_name=service_name)
|
||||
service = Service(name=service_name, pvs=pvs)
|
||||
runner = PeriodicRunner(service=service)
|
||||
runner.start()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
typer.run(main)
|
||||
@@ -0,0 +1,286 @@
|
||||
import time
|
||||
|
||||
import urllib3
|
||||
|
||||
urllib3.disable_warnings()
|
||||
from datetime import datetime
|
||||
from time import sleep, strftime, time
|
||||
|
||||
import elog
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
from epics import PV
|
||||
from matplotlib.dates import DateFormatter, HourLocator
|
||||
|
||||
from agebd.h5 import h5save
|
||||
from agebd.pv import get_pv_class, get_pv_external_class
|
||||
from agebd.service.base import BaseService
|
||||
from agebd.service.pvs import BasePVs
|
||||
from agebd.utils import printgetversion
|
||||
|
||||
__version__ = printgetversion(__file__)
|
||||
|
||||
PV = get_pv_class()
|
||||
PV_EXTERNAL = get_pv_external_class()
|
||||
|
||||
plt.switch_backend("agg")
|
||||
plt.rcParams.update({"font.size": 18})
|
||||
plt.rcParams["axes.facecolor"] = "white"
|
||||
plt.rcParams["figure.facecolor"] = "white"
|
||||
plt.rcParams["lines.markersize"] = 1
|
||||
plt.rcParams["lines.linewidth"] = 0.2
|
||||
plt.rcParams["agg.path.chunksize"] = 20000
|
||||
|
||||
|
||||
class PVs(BasePVs):
|
||||
light_delivery = PV_EXTERNAL("AGEOP-STATUS:LIGHT-DELIVERY.VAL")
|
||||
shift_type = PV_EXTERNAL("AGEOP-STATUS:DUO-SHIFT-TYPE.VAL")
|
||||
|
||||
# fmt: off
|
||||
buffers_shift = {
|
||||
'ARS07-DPCT-0000:CURR' : PV('AGEBD-PLOTS:CURRENT-PCT-9h-BUFFER'),
|
||||
'AGEBD-DBPM3CURR:CURRENT-AVG' : PV('AGEBD-PLOTS:CURRENT-BPM-9h-BUFFER'),
|
||||
'AGEBD-PARAMS:CURRENT' : PV('AGEBD-PLOTS:CURRENT-9h-BUFFER'),
|
||||
'AGEBD-PARAMS:INJECTION-RATE' : PV('AGEBD-PLOTS:INJECTION-RATE-9h-BUFFER'),
|
||||
'AGEBD-PARAMS:TRANSMISSION' : PV('AGEBD-PLOTS:TRANSMISSION-9h-BUFFER'),
|
||||
'AGEBD-PARAMS:LIFETIME' : PV('AGEBD-PLOTS:LIFETIME-9h-BUFFER'),
|
||||
'ARIVA-VMAVE:PRESS-AVE' : PV('AGEBD-PLOTS:MAVAC-AVG-9h-BUFFER'),
|
||||
'ARIVA-VMAVE:PRESS-MAX' : PV('AGEBD-PLOTS:MAVAC-MAX-9h-BUFFER'),
|
||||
'ARIVA-VMAVE-FE:PRESS-AVE' : PV('AGEBD-PLOTS:FEVAC-AVG-9h-BUFFER'),
|
||||
'ARIVA-VMAVE-FE:PRESS-MAX' : PV('AGEBD-PLOTS:FEVAC-MAX-9h-BUFFER'),
|
||||
'ABRTL-DDRM-0670:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:ABRTL-DDRM-0670-9h-BUFFER'),
|
||||
'ABRTL-DDRM-0950:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:ABRTL-DDRM-0950-9h-BUFFER'),
|
||||
'X05LA-DDRM-0330:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:X05LA-DDRM-0330-9h-BUFFER'),
|
||||
'X05LA-DDRM-0650:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:X05LA-DDRM-0650-9h-BUFFER'),
|
||||
'X09LA-DDRM-0330:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:X09LA-DDRM-0330-9h-BUFFER'),
|
||||
'X09LA-DDRM-0790:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:X09LA-DDRM-0790-9h-BUFFER'),
|
||||
'ARS01-DDRM-0375:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:ARS01-DDRM-0375-9h-BUFFER'),
|
||||
'ARS01-DDRM-1530:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:ARS01-DDRM-1530-9h-BUFFER'),
|
||||
'ARS05-DDRM-1530:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:ARS05-DDRM-1530-9h-BUFFER'),
|
||||
'ARS05-DDRM-3500:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:ARS05-DDRM-3500-9h-BUFFER'),
|
||||
'ARS09-DDRM-1530:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:ARS09-DDRM-1530-9h-BUFFER'),
|
||||
'ARS09-DDRM-3500:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:ARS09-DDRM-3500-9h-BUFFER'),
|
||||
'ARS12-DDRM-1530:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:ARS12-DDRM-1530-9h-BUFFER'),
|
||||
'ARS12-DDRM-3500:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:ARS12-DDRM-3500-9h-BUFFER'),
|
||||
'ARS12-DDRM-4400:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:ARS12-DDRM-4400-9h-BUFFER'),
|
||||
'ARS12-DDRM-5480:FET1_BIAS_DOSE' : PV('AGEBD-PLOTS:ARS12-DDRM-5480-9h-BUFFER'),
|
||||
'X04SA-UIND:GAP-READ' : PV('AGEBD-PLOTS:X04SA-UIND-GAP-9h-BUFFER'),
|
||||
'X10SA-UIND:GAP-READ' : PV('AGEBD-PLOTS:X10SA-UIND-GAP-9h-BUFFER'),
|
||||
'X12SA-UIND:GAP-READ' : PV('AGEBD-PLOTS:X12SA-UIND-GAP-9h-BUFFER'),
|
||||
}
|
||||
|
||||
buffers_week = {
|
||||
'AGEBD-DBPM3CURR:CURRENT-AVG' : PV('AGEBD-PLOTS:CURRENT-BPM-168h-BUFFER'),
|
||||
'ARS07-DPCT-0000:CURR' : PV('AGEBD-PLOTS:CURRENT-PCT-168h-BUFFER'),
|
||||
'AGEBD-TAUBPM:TAU' : PV('AGEBD-PLOTS:TAU-BPM-168h-BUFFER'),
|
||||
'AGEBD-TAUPCT:TAU' : PV('AGEBD-PLOTS:TAU-PCT-168h-BUFFER'),
|
||||
'AGEBD-SCRUBBING:TOPUP-TAU' : PV('AGEBD-PLOTS:TAU-TOPUP-168h-BUFFER'),
|
||||
'AGEBD-TAUBPM:INJRATE' : PV('AGEBD-PLOTS:INJRATE-BPM-168h-BUFFER'),
|
||||
'AGEBD-TAUPCT:INJRATE' : PV('AGEBD-PLOTS:INJRATE-PCT-168h-BUFFER'),
|
||||
'ARIVA-VMAVE:PRESS-AVE' : PV('AGEBD-PLOTS:MAVAC-AVG-168h-BUFFER'),
|
||||
'ARIVA-VMAVE:PRESS-MAX' : PV('AGEBD-PLOTS:MAVAC-MAX-168h-BUFFER'),
|
||||
'ARIVA-VMAVE-FE:PRESS-AVE' : PV('AGEBD-PLOTS:FEVAC-AVG-168h-BUFFER'),
|
||||
'ARIVA-VMAVE-FE:PRESS-MAX' : PV('AGEBD-PLOTS:FEVAC-MAX-168h-BUFFER'),
|
||||
}
|
||||
# fmt: on
|
||||
|
||||
def __init__(self, service_name: str, pv_factory=PV):
|
||||
super().__init__(service_name, pv_factory)
|
||||
|
||||
|
||||
class Service(BaseService[PVs]):
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
pvs: PVs,
|
||||
version: str = __version__,
|
||||
sleep_interval: float = 0.01,
|
||||
):
|
||||
super().__init__(name, pvs, version, sleep_interval)
|
||||
|
||||
self.path_shift = "/sls/op/data/applications/plots_shift/"
|
||||
self.path_weekly = "/sls/op/data/applications/plots_weekly/"
|
||||
self.lastshiftplot = -1
|
||||
self.lastweekplot = -1
|
||||
self.logbook = elog.open(
|
||||
"https://elog-gfa.psi.ch/SLS/",
|
||||
user="robot",
|
||||
password="robot",
|
||||
use_ssl=True,
|
||||
)
|
||||
|
||||
def update(self):
|
||||
pvs = self.pvs
|
||||
|
||||
dtn = datetime.now()
|
||||
minute = dtn.minute
|
||||
hour = dtn.hour
|
||||
weekday = dtn.weekday()
|
||||
day = dtn.day
|
||||
shift_type = pvs.shift_type.get()
|
||||
|
||||
# shift plots
|
||||
if hour in [6, 14, 22] and minute == 30 and hour != self.lastshiftplot:
|
||||
self.lastshiftplot = hour
|
||||
|
||||
print("Preparing shift plots...")
|
||||
print(" ... fetching data")
|
||||
|
||||
data = {pv: pvs.buffers_shift[pv].get() for pv in pvs.buffers_shift}
|
||||
Npts = len(data["ARS07-DPCT-0000:CURR"])
|
||||
tf = int(pvs.buffers_shift["ARS07-DPCT-0000:CURR"].timestamp)
|
||||
timevec = np.array(
|
||||
[datetime.fromtimestamp(t) for t in np.linspace(tf - Npts - 1, tf, Npts)]
|
||||
)
|
||||
data.update({"time": np.array([np.datetime64(t) for t in timevec], dtype="S30")})
|
||||
|
||||
print(" ...saving data")
|
||||
h5save(self.path_shift + "ShiftPlotSLS", data)
|
||||
print(" ...data saved")
|
||||
|
||||
print(" ...preparing plots")
|
||||
Nplots = 1
|
||||
fig = plt.figure(figsize=(16, 9 * Nplots), constrained_layout=True)
|
||||
|
||||
ax = fig.add_subplot(Nplots, 1, 1)
|
||||
ax.plot(timevec, data["ARS07-DPCT-0000:CURR"], "-xg", label="ARS07-DPCT-0000:CURR")
|
||||
ax.tick_params(axis="y", colors="g", which="both")
|
||||
lgnd = ax.legend(loc="lower left", bbox_to_anchor=(0.07, 1))
|
||||
for handle in lgnd.legendHandles:
|
||||
handle._markersize = 7
|
||||
handle._linewidth = 2
|
||||
ax.set_ylabel("Beam current / mA", color="g")
|
||||
ax.set_ylim([-1, 410])
|
||||
ax.set_xlim([timevec[0], timevec[-1]])
|
||||
|
||||
ax = ax.twinx()
|
||||
ax.plot(
|
||||
timevec,
|
||||
data["AGEBD-PARAMS:LIFETIME"],
|
||||
"-xb",
|
||||
label="AGEBD-PARAMS:LIFETIME",
|
||||
alpha=0.5,
|
||||
)
|
||||
ax.tick_params(axis="y", colors="b", which="both")
|
||||
lgnd = ax.legend(loc="lower right", bbox_to_anchor=(0.93, 1))
|
||||
for handle in lgnd.legendHandles:
|
||||
handle._markersize = 7
|
||||
handle._linewidth = 2
|
||||
ax.set_ylabel("Beam lifetime / hours", color="b")
|
||||
ax.set_ylim([-0.1, 41])
|
||||
ax.set_xlim([timevec[0], timevec[-1]])
|
||||
ax.set_xlabel("Time")
|
||||
# Set major ticks every hour and format as HH:MM
|
||||
ax.xaxis.set_major_locator(HourLocator())
|
||||
ax.xaxis.set_major_formatter(DateFormatter("%H:%M"))
|
||||
ax.grid(axis="both")
|
||||
|
||||
print(" ...saving plots")
|
||||
file1 = self.path_shift + strftime("%Y%m%d%H%M%S") + "_ShiftPlotSLS.png"
|
||||
fig.savefig(file1, dpi=192, bbox_inches="tight")
|
||||
plt.close(fig)
|
||||
print(" ...saved")
|
||||
|
||||
if shift_type > 0:
|
||||
print(" ...preparing elog entry...")
|
||||
dict_of_attributes = {
|
||||
"Wann": time(),
|
||||
"Autor": "Plots Logger",
|
||||
"Eintrag": "Status",
|
||||
"Titel": "Plots for last shift",
|
||||
"Encoding": "html",
|
||||
}
|
||||
self.msg_id = self.logbook.post(
|
||||
"",
|
||||
attributes=dict_of_attributes,
|
||||
attachments=[file1],
|
||||
suppress_email_notification=True,
|
||||
attribute_as_param="value",
|
||||
)
|
||||
print(" ...elog entry submitted...")
|
||||
|
||||
# weekly plots
|
||||
if weekday == 2 and hour == 7 and day != self.lastweekplot:
|
||||
self.lastweekplot = day
|
||||
|
||||
print("Preparing weekly plots...")
|
||||
print(" ... fetching data")
|
||||
|
||||
data = {pv: pvs.buffers_week[pv].get() for pv in pvs.buffers_week}
|
||||
Npts = len(data["AGEBD-DBPM3CURR:CURRENT-AVG"])
|
||||
tf = int(pvs.buffers_week["AGEBD-DBPM3CURR:CURRENT-AVG"].timestamp)
|
||||
timevec = np.array(
|
||||
[datetime.fromtimestamp(t) for t in np.linspace(tf - Npts - 1, tf, Npts)]
|
||||
)
|
||||
data.update({"time": np.array([np.datetime64(t) for t in timevec], dtype="S30")})
|
||||
|
||||
print(" ...saving data")
|
||||
h5save(self.path_weekly + "WeeklyPlotSLS", data)
|
||||
print(" ...data saved")
|
||||
|
||||
print(" ...preparing plots")
|
||||
Nplots = 1
|
||||
fig = plt.figure(figsize=(16, 9 * Nplots), constrained_layout=True)
|
||||
|
||||
ax = fig.add_subplot(Nplots, 1, 1)
|
||||
ax.plot(timevec, data["ARS07-DPCT-0000:CURR"], "-xg", label="ARS07-DPCT-0000:CURR")
|
||||
ax.tick_params(axis="y", colors="g", which="both")
|
||||
lgnd = ax.legend(loc="lower left", bbox_to_anchor=(0.07, 1))
|
||||
for handle in lgnd.legendHandles:
|
||||
handle._markersize = 7
|
||||
handle._linewidth = 2
|
||||
ax.set_ylabel("Beam current / mA", color="g")
|
||||
ax.set_ylim([-1, 410])
|
||||
ax.set_xlim([timevec[0], timevec[-1]])
|
||||
|
||||
ax = ax.twinx()
|
||||
ax.plot(timevec, data["AGEBD-TAUBPM:TAU"], "-xb", label="AGEBD-TAUBPM:TAU", alpha=0.5)
|
||||
ax.tick_params(axis="y", colors="b", which="both")
|
||||
lgnd = ax.legend(loc="lower right", bbox_to_anchor=(0.93, 1))
|
||||
for handle in lgnd.legendHandles:
|
||||
handle._markersize = 7
|
||||
handle._linewidth = 2
|
||||
ax.set_ylabel("Beam lifetime / hours", color="b")
|
||||
ax.set_ylim([-0.1, 41])
|
||||
ax.set_xlim([timevec[0], timevec[-1]])
|
||||
ax.xaxis.set_major_locator(HourLocator(byhour=12))
|
||||
ax.xaxis.set_major_formatter(DateFormatter("%a %H:%M"))
|
||||
ax.set_xlabel("Time")
|
||||
ax.grid(axis="both")
|
||||
|
||||
print(" ...saving plots")
|
||||
file2 = self.path_weekly + strftime("%Y%m%d%H%M%S") + "_WeeklyPlotSLS.png"
|
||||
fig.savefig(file2, dpi=192, bbox_inches="tight")
|
||||
plt.close(fig)
|
||||
print(" ...finished")
|
||||
|
||||
if shift_type > 0:
|
||||
print(" ...preparing elog entry...")
|
||||
dict_of_attributes = {
|
||||
"Wann": time(),
|
||||
"Autor": "Plots Logger",
|
||||
"Eintrag": "Status",
|
||||
"Titel": "Plots for last week",
|
||||
"Encoding": "html",
|
||||
}
|
||||
|
||||
print(" ...posting elog entry...")
|
||||
try:
|
||||
self.msg_id = self.logbook.post(
|
||||
"",
|
||||
attributes=dict_of_attributes,
|
||||
attachments=[file2],
|
||||
suppress_email_notification=True,
|
||||
attribute_as_param="value",
|
||||
)
|
||||
print(" ...elog entry submitted...")
|
||||
except:
|
||||
print(" ...elog failed...")
|
||||
|
||||
else:
|
||||
print(" ...no elog entry during shutdown.")
|
||||
|
||||
print(" ...setting all beamlines to offline")
|
||||
pvs.light_delivery.put(1)
|
||||
sleep(0.1)
|
||||
pvs.light_delivery.put(0)
|
||||
@@ -0,0 +1,9 @@
|
||||
from agebd_plots 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()
|
||||
Generated
+454
@@ -0,0 +1,454 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "h5py" },
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "h5py", specifier = ">=3.16.0" },
|
||||
{ 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-plots"
|
||||
version = "0.1.0"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "agebd" },
|
||||
{ name = "matplotlib" },
|
||||
{ name = "urllib3" },
|
||||
]
|
||||
|
||||
[package.dev-dependencies]
|
||||
dev = [
|
||||
{ name = "pyepics" },
|
||||
{ name = "pytest" },
|
||||
{ name = "ruff" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "agebd", editable = "../../../../packages/agebd" },
|
||||
{ name = "matplotlib", specifier = ">=3.10.9" },
|
||||
{ name = "urllib3", specifier = ">=2.7.0" },
|
||||
]
|
||||
|
||||
[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 = "contourpy"
|
||||
version = "1.3.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/12/a3/da4153ec8fe25d263aa48c1a4cbde7f49b59af86f0b6f7862788c60da737/contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934", size = 268551, upload-time = "2025-04-15T17:34:46.581Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2f/6c/330de89ae1087eb622bfca0177d32a7ece50c3ef07b28002de4757d9d875/contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989", size = 253399, upload-time = "2025-04-15T17:34:51.427Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c1/bd/20c6726b1b7f81a8bee5271bed5c165f0a8e1f572578a9d27e2ccb763cb2/contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d", size = 312061, upload-time = "2025-04-15T17:34:55.961Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/fc/a9665c88f8a2473f823cf1ec601de9e5375050f1958cbb356cdf06ef1ab6/contourpy-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9", size = 351956, upload-time = "2025-04-15T17:35:00.992Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/25/eb/9f0a0238f305ad8fb7ef42481020d6e20cf15e46be99a1fcf939546a177e/contourpy-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512", size = 320872, upload-time = "2025-04-15T17:35:06.177Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/32/5c/1ee32d1c7956923202f00cf8d2a14a62ed7517bdc0ee1e55301227fc273c/contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631", size = 325027, upload-time = "2025-04-15T17:35:11.244Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/83/bf/9baed89785ba743ef329c2b07fd0611d12bfecbedbdd3eeecf929d8d3b52/contourpy-1.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f", size = 1306641, upload-time = "2025-04-15T17:35:26.701Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d4/cc/74e5e83d1e35de2d28bd97033426b450bc4fd96e092a1f7a63dc7369b55d/contourpy-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2", size = 1374075, upload-time = "2025-04-15T17:35:43.204Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0c/42/17f3b798fd5e033b46a16f8d9fcb39f1aba051307f5ebf441bad1ecf78f8/contourpy-1.3.2-cp310-cp310-win32.whl", hash = "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0", size = 177534, upload-time = "2025-04-15T17:35:46.554Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/54/ec/5162b8582f2c994721018d0c9ece9dc6ff769d298a8ac6b6a652c307e7df/contourpy-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a", size = 221188, upload-time = "2025-04-15T17:35:50.064Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/33/05/b26e3c6ecc05f349ee0013f0bb850a761016d89cec528a98193a48c34033/contourpy-1.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c", size = 265681, upload-time = "2025-04-15T17:44:59.314Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/25/ac07d6ad12affa7d1ffed11b77417d0a6308170f44ff20fa1d5aa6333f03/contourpy-1.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16", size = 315101, upload-time = "2025-04-15T17:45:04.165Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8f/4d/5bb3192bbe9d3f27e3061a6a8e7733c9120e203cb8515767d30973f71030/contourpy-1.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad", size = 220599, upload-time = "2025-04-15T17:45:08.456Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cycler"
|
||||
version = "0.12.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" },
|
||||
]
|
||||
|
||||
[[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 = "fonttools"
|
||||
version = "4.63.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/84/69/c97f2c18e0db87d2c7b15da1974dace76ae938f1cfa22e2727a648b7ed43/fonttools-4.63.0.tar.gz", hash = "sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0", size = 3597189, upload-time = "2026-05-14T12:04:30.958Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f2/c9/4141c90a90db20f807c7e10bfd689fe53eb8f7f4caff58ee4d4dfe46919f/fonttools-4.63.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e3297a6a4059b4acc3a1e9a8b04741f240a80044eef08ebd32e8b5bcdddce75b", size = 2884632, upload-time = "2026-05-14T12:02:38.56Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/46/ad12b5c10eae602d7ef814b02afa08aacbf89da917fed5b071282b7eadc2/fonttools-4.63.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b1cd75a03ad8cb5bc40c90bfde68c0c47de423aa19e5c0f362b43520645eea94", size = 2429441, upload-time = "2026-05-14T12:02:41.162Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/90/8f/bdca24a84c81d56fffed052229cdcff368f6e05882e526f4558891481f65/fonttools-4.63.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0425b277a59cff3d80ca42162a8de360f318438a2ac83570842a678d826d579", size = 4946346, upload-time = "2026-05-14T12:02:43.41Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/04/59/a639c0e136441ee91a65b56fdf89e5d075927e7a09c559d1b0f5276577db/fonttools-4.63.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d7e5c9973aa04c95650c96e5f5ad865fbf42d62079163ecfab1e01cbc2504c22", size = 4903184, upload-time = "2026-05-14T12:02:45.742Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e6/53/91b7e0cb45b536f3da1b29ba8cbab89f27e8b986809e0b1982303a3f4eca/fonttools-4.63.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cb014d58140a38135f16064c74c652ed57aa0b75cbf8bb59cac821f7edb5334e", size = 4922967, upload-time = "2026-05-14T12:02:48.386Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c7/b7/87439bf44e6b97c5538cd29d0b7e366a5b8ce2cc132a4134fb67fa3f2fa2/fonttools-4.63.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:032038247a96c1690f9f31e377c389383c902531b085aa4e4dabd6f57f870e69", size = 5042799, upload-time = "2026-05-14T12:02:50.424Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ad/7c/8b96c3263b89ef99cded544c0f0636686f85dbd3c211c4dceef0231fca23/fonttools-4.63.0-cp310-cp310-win32.whl", hash = "sha256:a8b33a82979e0a6a34ff435cc81317be1f95ec1ebb7a3a2d1c8a6a54f02ae44e", size = 1519704, upload-time = "2026-05-14T12:02:52.523Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e5/4d/2c2f0069970b6907de8fb5b05c5c0193cc22f717df151d1c7aef1c738f58/fonttools-4.63.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c18358a155d75034911c5ee397a5b44cd19dd325dbb8b35fb60bf421d6a72ac", size = 1568666, upload-time = "2026-05-14T12:02:54.917Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2c/47/c99d5268f354002ce80f8d029cd9d7d872969da1de8b93d32de4dc56d6f4/fonttools-4.63.0-py3-none-any.whl", hash = "sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d", size = 1164562, upload-time = "2026-05-14T12:04:29.092Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "h5py"
|
||||
version = "3.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/db/33/acd0ce6863b6c0d7735007df01815403f5589a21ff8c2e1ee2587a38f548/h5py-3.16.0.tar.gz", hash = "sha256:a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738", size = 446526, upload-time = "2026-03-06T13:49:08.07Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e06f864bedb2c8e7c1358e6c73af48519e317457c444d6f3d332bb4e8fa6d7d9", size = 3724137, upload-time = "2026-03-06T13:47:35.242Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec86d4fffd87a0f4cb3d5796ceb5a50123a2a6d99b43e616e5504e66a953eca3", size = 3090112, upload-time = "2026-03-06T13:47:37.634Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/f5/e15b3d0dc8a18e56409a839e6468d6fb589bc5207c917399c2e0706eeb44/h5py-3.16.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:86385ea895508220b8a7e45efa428aeafaa586bd737c7af9ee04661d8d84a10d", size = 4844847, upload-time = "2026-03-06T13:47:39.811Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8975273c2c5921c25700193b408e28d6bdd0111c37468b2d4e25dcec4cd1d84d", size = 5065352, upload-time = "2026-03-06T13:47:41.489Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/ae/f2adc5d0ca9626db3277a3d87516e124cbc5d0eea0bd79bc085702d04f2c/h5py-3.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1677ad48b703f44efc9ea0c3ab284527f81bc4f318386aaaebc5fede6bbae56f", size = 4839173, upload-time = "2026-03-06T13:47:43.586Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/0b/e0c8c69da1d8838da023a50cd3080eae5d475691f7636b35eff20bb6ef20/h5py-3.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c4dd4cf5f0a4e36083f73172f6cfc25a5710789269547f132a20975bfe2434c", size = 5076216, upload-time = "2026-03-06T13:47:45.315Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdef06507725b455fccba9c16529121a5e1fbf56aa375f7d9713d9e8ff42454d", size = 3183639, upload-time = "2026-03-06T13:47:47.041Z" },
|
||||
]
|
||||
|
||||
[[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 = "kiwisolver"
|
||||
version = "1.5.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d0/67/9c61eccb13f0bdca9307614e782fec49ffdde0f7a2314935d489fa93cd9c/kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a", size = 103482, upload-time = "2026-03-09T13:15:53.382Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/ac/f8/06549565caa026e540b7e7bab5c5a90eb7ca986015f4c48dace243cd24d9/kiwisolver-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32cc0a5365239a6ea0c6ed461e8838d053b57e397443c0ca894dcc8e388d4374", size = 122802, upload-time = "2026-03-09T13:12:37.515Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/84/eb/8476a0818850c563ff343ea7c9c05dcdcbd689a38e01aa31657df01f91fa/kiwisolver-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc0b66c1eec9021353a4b4483afb12dfd50e3669ffbb9152d6842eb34c7e29fd", size = 66216, upload-time = "2026-03-09T13:12:38.812Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f3/c4/f9c8a6b4c21aed4198566e45923512986d6cef530e7263b3a5f823546561/kiwisolver-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86e0287879f75621ae85197b0877ed2f8b7aa57b511c7331dce2eb6f4de7d476", size = 63917, upload-time = "2026-03-09T13:12:40.053Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f1/0e/ba4ae25d03722f64de8b2c13e80d82ab537a06b30fc7065183c6439357e3/kiwisolver-1.5.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:62f59da443c4f4849f73a51a193b1d9d258dcad0c41bc4d1b8fb2bcc04bfeb22", size = 1628776, upload-time = "2026-03-09T13:12:41.976Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/e4/3f43a011bc8a0860d1c96f84d32fa87439d3feedf66e672fef03bf5e8bac/kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9190426b7aa26c5229501fa297b8d0653cfd3f5a36f7990c264e157cbf886b3b", size = 1228164, upload-time = "2026-03-09T13:12:44.002Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4b/34/3a901559a1e0c218404f9a61a93be82d45cb8f44453ba43088644980f033/kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c8277104ded0a51e699c8c3aff63ce2c56d4ed5519a5f73e0fd7057f959a2b9e", size = 1246656, upload-time = "2026-03-09T13:12:45.557Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/87/9e/f78c466ea20527822b95ad38f141f2de1dcd7f23fb8716b002b0d91bbe59/kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8f9baf6f0a6e7571c45c8863010b45e837c3ee1c2c77fcd6ef423be91b21fedb", size = 1295562, upload-time = "2026-03-09T13:12:47.562Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0a/66/fd0e4a612e3a286c24e6d6f3a5428d11258ed1909bc530ba3b59807fd980/kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cff8e5383db4989311f99e814feeb90c4723eb4edca425b9d5d9c3fefcdd9537", size = 2178473, upload-time = "2026-03-09T13:12:50.254Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dc/8e/6cac929e0049539e5ee25c1ee937556f379ba5204840d03008363ced662d/kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ebae99ed6764f2b5771c522477b311be313e8841d2e0376db2b10922daebbba4", size = 2274035, upload-time = "2026-03-09T13:12:51.785Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ca/d3/9d0c18f1b52ea8074b792452cf17f1f5a56bd0302a85191f405cfbf9da16/kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d5cd5189fc2b6a538b75ae45433140c4823463918f7b1617c31e68b085c0022c", size = 2443217, upload-time = "2026-03-09T13:12:53.329Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/45/2a/6e19368803a038b2a90857bf4ee9e3c7b667216d045866bf22d3439fd75e/kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f42c23db5d1521218a3276bb08666dcb662896a0be7347cba864eca45ff64ede", size = 2249196, upload-time = "2026-03-09T13:12:55.057Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/75/2b/3f641dfcbe72e222175d626bacf2f72c3b34312afec949dd1c50afa400f5/kiwisolver-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:94eff26096eb5395136634622515b234ecb6c9979824c1f5004c6e3c3c85ccd2", size = 73389, upload-time = "2026-03-09T13:12:56.496Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/da/88/299b137b9e0025d8982e03d2d52c123b0a2b159e84b0ef1501ef446339cf/kiwisolver-1.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:dd952e03bfbb096cfe2dd35cd9e00f269969b67536cb4370994afc20ff2d0875", size = 64782, upload-time = "2026-03-09T13:12:57.609Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/6f/6fd4f690a40c2582fa34b97d2678f718acf3706b91d270c65ecb455d0a06/kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:295d9ffe712caa9f8a3081de8d32fc60191b4b51c76f02f951fd8407253528f4", size = 59606, upload-time = "2026-03-09T13:15:40.81Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/82/a0/2355d5e3b338f13ce63f361abb181e3b6ea5fffdb73f739b3e80efa76159/kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:51e8c4084897de9f05898c2c2a39af6318044ae969d46ff7a34ed3f96274adca", size = 57537, upload-time = "2026-03-09T13:15:42.071Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c8/b9/1d50e610ecadebe205b71d6728fd224ce0e0ca6aba7b9cbe1da049203ac5/kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b83af57bdddef03c01a9138034c6ff03181a3028d9a1003b301eb1a55e161a3f", size = 79888, upload-time = "2026-03-09T13:15:43.317Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cd/ee/b85ffcd75afed0357d74f0e6fc02a4507da441165de1ca4760b9f496390d/kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf4679a3d71012a7c2bf360e5cd878fbd5e4fcac0896b56393dec239d81529ed", size = 77584, upload-time = "2026-03-09T13:15:44.605Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6b/dd/644d0dde6010a8583b4cd66dd41c5f83f5325464d15c4f490b3340ab73b4/kiwisolver-1.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:41024ed50e44ab1a60d3fe0a9d15a4ccc9f5f2b1d814ff283c8d01134d5b81bc", size = 73390, upload-time = "2026-03-09T13:15:45.832Z" },
|
||||
]
|
||||
|
||||
[[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 = "matplotlib"
|
||||
version = "3.10.9"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "contourpy" },
|
||||
{ name = "cycler" },
|
||||
{ name = "fonttools" },
|
||||
{ name = "kiwisolver" },
|
||||
{ name = "numpy" },
|
||||
{ name = "packaging" },
|
||||
{ name = "pillow" },
|
||||
{ name = "pyparsing" },
|
||||
{ name = "python-dateutil" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/63/1b/4be5be87d43d327a0cf4de1a56e86f7f84c89312452406cf122efe2839e6/matplotlib-3.10.9.tar.gz", hash = "sha256:fd66508e8c6877d98e586654b608a0456db8d7e8a546eb1e2600efd957302358", size = 34811233, upload-time = "2026-04-24T00:14:13.539Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/18/6f/340b04986e67aac6f66c5145ce68bf72c64bed30f92c8913499a6e6b8f99/matplotlib-3.10.9-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77210dce9cb8153dffc967efaae990543392563d5a376d4dd8539bebcb0ed217", size = 8296625, upload-time = "2026-04-24T00:11:43.376Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bb/2f/127081eb83162053ebb9678ceac64220b93a663e0167432566e9c7c82aab/matplotlib-3.10.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1e7698ac9868428e84d2c967424803b2472ff7167d9d6590d4204ed775343c3b", size = 8188790, upload-time = "2026-04-24T00:11:46.556Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fc/b7/d8bcec2626c35f96972bff656299fef4578113ea6193c8fdad324710410c/matplotlib-3.10.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1aa972116abb4c9d201bf245620b433726cb6856f3bef6a78f776a00f5c92d37", size = 8769389, upload-time = "2026-04-24T00:11:48.959Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/12/49/b78e214a527ea732033b7f4d37f7afb504d74ba9d134bd47938230dfb8b1/matplotlib-3.10.9-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae2f11957b27ce53497dd4d7b235c4d4f1faf383dfb39d0c5beb833bff883294", size = 9589657, upload-time = "2026-04-24T00:11:51.915Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5f/15/5246f7b43beae19c74dfee651d58d6cc8112e06f77adb4e88cc04f2e3a23/matplotlib-3.10.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b049278ddce116aaa1c1377ebf58adea909132dfce0281cf7e3a1ea9fc2e2c65", size = 9651983, upload-time = "2026-04-24T00:11:54.766Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/75/77/5acecfe672ba0fa1b8c0454f69ce155d1e6fc5852fa7206bf9afaf767121/matplotlib-3.10.9-cp310-cp310-win_amd64.whl", hash = "sha256:82834c3c292d24d3a8aae77cd2d20019de69d692a34a970e4fdb8d33e2ea3dda", size = 8199701, upload-time = "2026-04-24T00:11:58.389Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2c/2b/0e92ad0ac446633f928a1563db4aa8add407e1924faf0ded5b95b35afb27/matplotlib-3.10.9-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1872fb212a05b729e649754a72d5da61d03e0554d76e80303b6f83d1d2c0552b", size = 8293058, upload-time = "2026-04-24T00:13:56.339Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4b/23/74682fd369f5299ceda438fea2a0662e6383b85c9383fb9cdfcf04713e07/matplotlib-3.10.9-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:985f2238880e2e69093f588f5fe2e46771747febf0649f3cf7f7b7480875317f", size = 8186627, upload-time = "2026-04-24T00:13:58.623Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ca/e8/368aab88f3c4cd8992800f31abfe0670c3e47540ba20a97e9fdbcde594b3/matplotlib-3.10.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6640f75af2c6148293caa0a2b39dd806a492dd66c8a8b04035813e33d0fd2585", size = 8764117, upload-time = "2026-04-24T00:14:01.684Z" },
|
||||
]
|
||||
|
||||
[[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 = "pillow"
|
||||
version = "12.3.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce", size = 47025035, upload-time = "2026-07-01T11:56:38.965Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/25/c2/669d88644cddb1485bd9534e63e8cf476c8e51cb3c3a1297677023505c0e/pillow-12.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a", size = 5392418, upload-time = "2026-07-01T11:53:27.808Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6b/ba/3762f376a2948e3036488d773a146e0ae6ecc2ca03ac20e2615bd0b2ba02/pillow-12.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7", size = 4785287, upload-time = "2026-07-01T11:53:29.761Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/07/50/b5d688cc9c52d4482f3d5bcab6ce20bc2a74a85d2343841c907444a3be2c/pillow-12.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f", size = 6253754, upload-time = "2026-07-01T11:53:32.298Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4e/89/36f4cd76cf4baf05c50ababb976249153f18c959171c7f6ba09a6f217260/pillow-12.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec", size = 6925605, upload-time = "2026-07-01T11:53:34.487Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/eb/c0/4de58cf6633b9e3a6061ef4be6fb91fc3c90b812ece886f531e3c523d777/pillow-12.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468", size = 6327788, upload-time = "2026-07-01T11:53:36.433Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/87/3c/14d53682a19550dbbaf3b598f807d5457646c510805a44c7d7891cd1cd1a/pillow-12.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed", size = 7036288, upload-time = "2026-07-01T11:53:38.712Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/38/1d/36279e3c77efe034e4cc2b0393ee74ffdb5a62391dacbf9b916154f5f0b8/pillow-12.3.0-cp310-cp310-win32.whl", hash = "sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1", size = 6472396, upload-time = "2026-07-01T11:53:40.781Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/48/7c/8fa0039574c476d7c6fa57dd7c32a130436877c6ec1e5ce1cc8ec44878c1/pillow-12.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb", size = 7226887, upload-time = "2026-07-01T11:53:42.764Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fa/17/e324be141d173c1c919428066c3259f21c1b8982e564e01a4a81e96dbdcf/pillow-12.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f", size = 2568039, upload-time = "2026-07-01T11:53:45.372Z" },
|
||||
]
|
||||
|
||||
[[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 = "python-dateutil"
|
||||
version = "2.9.0.post0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "six" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
|
||||
]
|
||||
|
||||
[[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 = "six"
|
||||
version = "1.17.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
|
||||
]
|
||||
|
||||
[[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" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "urllib3"
|
||||
version = "2.7.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" },
|
||||
]
|
||||
@@ -0,0 +1,64 @@
|
||||
file PLOTS_timeaxis.template {
|
||||
pattern
|
||||
{ DEVICE }
|
||||
{ AGEBD-PLOTS{{ agebd_env }} }
|
||||
}
|
||||
|
||||
|
||||
file PLOTS_9h.template {
|
||||
pattern
|
||||
{ DEVICE, NAME, INP }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, CURRENT, AGEBD-PARAMS:CURRENT }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, CURRENT-BPM, AGEBD-DBPM3CURR:CURRENT-AVG }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, CURRENT-PCT, ARS07-DPCT-0000:CURR }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, INJECTION-RATE, AGEBD-PARAMS:INJECTION-RATE }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, TRANSMISSION, AGEBD-PARAMS:TRANSMISSION }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, LIFETIME, AGEBD-PARAMS:LIFETIME }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, MAVAC-AVG, ARIVA-VMAVE:PRESS-AVE }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, MAVAC-MAX, ARIVA-VMAVE:PRESS-MAX }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, FEVAC-AVG, ARIVA-VMAVE-FE:PRESS-AVE }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, FEVAC-MAX, ARIVA-VMAVE-FE:PRESS-MAX }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, ABRTL-DDRM-0670, ABRTL-DDRM-0670:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, ABRTL-DDRM-0950, ABRTL-DDRM-0950:FET1_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, X05LA-DDRM-0330, X05LA-DDRM-0330:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, X05LA-DDRM-0650, X05LA-DDRM-0650:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, X09LA-DDRM-0330, X09LA-DDRM-0330:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, X09LA-DDRM-0790, X09LA-DDRM-0790:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, ARS01-DDRM-0375, ARS01-DDRM-0375:FET1_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, ARS01-DDRM-1530, ARS01-DDRM-1530:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, ARS05-DDRM-1530, ARS05-DDRM-1530:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, ARS05-DDRM-3500, ARS05-DDRM-3500:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, ARS09-DDRM-1530, ARS09-DDRM-1530:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, ARS09-DDRM-3500, ARS09-DDRM-3500:FET2_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, ARS12-DDRM-1530, ARS12-DDRM-1530:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, ARS12-DDRM-3500, ARS12-DDRM-3500:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, ARS12-DDRM-4400, ARS12-DDRM-4400:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, ARS12-DDRM-5480, ARS12-DDRM-5480:FET1_BIAS_DOSE}
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, X02SA-UIND-GAP, AGEOP-STATUS:X02SA-UIND-GAP} # Soft Blue #A0C4FF
|
||||
# { AGEBD-PLOTS{{ agebd_env }}, X03MA-UIND-GAP, AGEOP-STATUS:X03MA-UIND-GAP} # Warm Orange #FFD6A5
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, X04SA-UIND-GAP, AGEOP-STATUS:X04SA-UIND-GAP} # Light Green #CAFFBF
|
||||
# { AGEBD-PLOTS{{ agebd_env }}, X05LA-UIND-GAP, AGEOP-STATUS:X05LA-UIND-GAP} # Coral Red #FFADAD
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, X06SA-UIND-GAP, AGEOP-STATUS:X06SA-UIND-GAP} # Lavender #CDB4DB
|
||||
# { AGEBD-PLOTS{{ agebd_env }}, X07MA-UIND-GAP, AGEOP-STATUS:X07MA-UIND-GAP} # Desert Tan #DDB892
|
||||
# { AGEBD-PLOTS{{ agebd_env }}, X08SA-UIND-GAP, AGEOP-STATUS:X08SA-UIND-GAP} # Peach Pink #FFB5A7
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, X09LB-UIND-GAP, AGEOP-STATUS:X09LB-UIND-GAP} # Aqua Blue #9BF6FF
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, X10SA-UIND-GAP, AGEOP-STATUS:X10SA-UIND-GAP} # Pale Yellow #FDFFB6
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, X11MA-UIND2-GAP, AGEOP-STATUS:X11MA-UIND2-GAP} # Periwinkle #BDB2FF
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, X12SA-UIND-GAP, AGEOP-STATUS:X12SA-UIND-GAP} # Mint Green #B0F2C2
|
||||
}
|
||||
|
||||
file PLOTS_week.template {
|
||||
pattern
|
||||
{ DEVICE, NAME, INP }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, CURRENT-BPM, AGEBD-DBPM3CURR:CURRENT-AVG }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, CURRENT-PCT, ARS07-DPCT-0000:CURR }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, TAU-BPM, AGEBD-TAUBPM:TAU }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, TAU-PCT, AGEBD-TAUPCT:TAU }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, TAU-TOPUP, AGEBD-SCRUBBING:TOPUP-TAU }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, INJRATE-BPM, AGEBD-TAUBPM:INJRATE }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, INJRATE-PCT, AGEBD-TAUPCT:INJRATE }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, MAVAC-AVG, ARIVA-VMAVE:PRESS-AVE }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, MAVAC-MAX, ARIVA-VMAVE:PRESS-MAX }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, FEVAC-AVG, ARIVA-VMAVE-FE:PRESS-AVE }
|
||||
{ AGEBD-PLOTS{{ agebd_env }}, FEVAC-MAX, ARIVA-VMAVE-FE:PRESS-MAX }
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,8 @@
|
||||
## 9 Hour Plots
|
||||
record(compress, "$(DEVICE):$(NAME)-9h-BUFFER") {
|
||||
field(DESC, "9h Buffer for SLS Status Panel")
|
||||
field(SCAN, "1 second")
|
||||
field(INP, "$(INP)")
|
||||
field(ALG, "Circular Buffer")
|
||||
field(NSAM, "32400")
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
# 9 Hour Plots
|
||||
record(waveform, "$(DEVICE):PAST-9-HOURS") {
|
||||
field(DESC, "Time axis for 9h buffer")
|
||||
field(EGU, "h")
|
||||
field(FTVL, "FLOAT")
|
||||
field(DTYP, "sequence")
|
||||
field(NELM, "32400")
|
||||
field(LOPR, "-9.0")
|
||||
field(HOPR, "0.0")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
# 1 Week Plot
|
||||
record(waveform, "$(DEVICE):PAST-168-HOURS") {
|
||||
field(DESC, "Time axis for 1 week buffer")
|
||||
field(EGU, "h")
|
||||
field(FTVL, "FLOAT")
|
||||
field(DTYP, "sequence")
|
||||
field(NELM, "604800")
|
||||
field(LOPR, "-168.0")
|
||||
field(HOPR, "0.0")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
## 1 Week Plot
|
||||
record(compress, "$(DEVICE):$(NAME)-168h-BUFFER") {
|
||||
field(DESC, "1 Week Buffer for SLS Status Panel")
|
||||
field(SCAN, "1 second")
|
||||
field(INP, "$(INP)")
|
||||
field(ALG, "Circular Buffer")
|
||||
field(NSAM, "604800")
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
# Contact
|
||||
:envelope: [Felix Armborst](mailto:felix.armborst@psi.ch)
|
||||
:envelope: [Stefan Mäder](mailto:stefan.maeder@psi.ch)
|
||||
|
||||
**The relevant panels are:** <br/>
|
||||
- 9h Plots for Panels (SLS status / Scrubbing)
|
||||
|
||||
:pushpin:
|
||||
Some useful tools/commands
|
||||
|
||||
```
|
||||
## ssh to you local clone of this repo on sls-lca
|
||||
# (re-)install this ioc
|
||||
ioc install -V --ioc AGEBD-CPCL-PLOTS
|
||||
|
||||
# connect to ioc shell of running ioc and resart via ctrl+x to restart with made changes
|
||||
ioc shell AGEBD-CPCL-PLOTS
|
||||
|
||||
## useful debugging commands
|
||||
# get the most important variables,softioc server port etc
|
||||
ioc boots AGEBD-CPCL-PLOTS
|
||||
ioc records -f SLS --sort name --ioc AGEBD-CPCL-PLOTS >ioc_records.txt
|
||||
ioc duplicates -f SLS
|
||||
|
||||
# make a clean test installation
|
||||
mkdir -p ./TTT; ioc install --instbase ./TTT --clean --ioc AGEBD-CPCL-PLOTS
|
||||
meld ./TTT/AGEBD-CPCL-PLOTS /ioc/AGEBD-CPCL-PLOTS
|
||||
```
|
||||
@@ -0,0 +1,4 @@
|
||||
epicsEnvSet("ENGINEER", "Operation")
|
||||
require array
|
||||
require SynApps
|
||||
addScan 300
|
||||
@@ -0,0 +1,103 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="caNumeric" name="canumeric">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>60</y>
|
||||
<width>100</width>
|
||||
<height>50</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="integerDigits" stdset="0">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="decimalDigits" stdset="0">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string>AGEBD-PLOTS-DEV:AO</string>
|
||||
</property>
|
||||
<property name="maxValue">
|
||||
<double>9.000000000000000</double>
|
||||
</property>
|
||||
<property name="minValue">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caToggleButton" name="catogglebutton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>601</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Toggle AGEBD-ALH-DEV:PLOTS-ONOFF</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string>AGEBD-ALH-DEV:PLOTS-ONOFF</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>6</x>
|
||||
<y>34</y>
|
||||
<width>401</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>13</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Value of AGEBD-PLOTS-DEV:AO</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>caNumeric</class>
|
||||
<extends>QFrame</extends>
|
||||
<header>caNumeric</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caToggleButton</class>
|
||||
<extends>QCheckBox</extends>
|
||||
<header>caToggleButton</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=AGEBD-SERVICE-PLOTS
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Environment=AGEBD_ENV={{ agebd_env }}
|
||||
ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh PLOTS
|
||||
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-PLOTS.service
|
||||
# systemctl --user start AGEBD-SERVICE-PLOTS
|
||||
@@ -0,0 +1,50 @@
|
||||
[project]
|
||||
name = "agebd-postmortemlog"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-POSTMORTEMLOG Service"
|
||||
requires-python = "==3.10.*"
|
||||
dependencies = [
|
||||
"agebd",
|
||||
"matplotlib>=3.10.9",
|
||||
"numpy>=2.0.2",
|
||||
"urllib3>=2.7.0",
|
||||
]
|
||||
|
||||
[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"]
|
||||
@@ -0,0 +1 @@
|
||||
from .service import PVs, Service
|
||||
@@ -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)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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()
|
||||
+456
@@ -0,0 +1,456 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "h5py" },
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "h5py", specifier = ">=3.16.0" },
|
||||
{ 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" },
|
||||
{ name = "matplotlib" },
|
||||
{ name = "numpy" },
|
||||
{ name = "urllib3" },
|
||||
]
|
||||
|
||||
[package.dev-dependencies]
|
||||
dev = [
|
||||
{ name = "pyepics" },
|
||||
{ name = "pytest" },
|
||||
{ name = "ruff" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "agebd", editable = "../../../../packages/agebd" },
|
||||
{ name = "matplotlib", specifier = ">=3.10.9" },
|
||||
{ name = "numpy", specifier = ">=2.0.2" },
|
||||
{ name = "urllib3", specifier = ">=2.7.0" },
|
||||
]
|
||||
|
||||
[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 = "contourpy"
|
||||
version = "1.3.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/12/a3/da4153ec8fe25d263aa48c1a4cbde7f49b59af86f0b6f7862788c60da737/contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934", size = 268551, upload-time = "2025-04-15T17:34:46.581Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2f/6c/330de89ae1087eb622bfca0177d32a7ece50c3ef07b28002de4757d9d875/contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989", size = 253399, upload-time = "2025-04-15T17:34:51.427Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c1/bd/20c6726b1b7f81a8bee5271bed5c165f0a8e1f572578a9d27e2ccb763cb2/contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d", size = 312061, upload-time = "2025-04-15T17:34:55.961Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/fc/a9665c88f8a2473f823cf1ec601de9e5375050f1958cbb356cdf06ef1ab6/contourpy-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9", size = 351956, upload-time = "2025-04-15T17:35:00.992Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/25/eb/9f0a0238f305ad8fb7ef42481020d6e20cf15e46be99a1fcf939546a177e/contourpy-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512", size = 320872, upload-time = "2025-04-15T17:35:06.177Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/32/5c/1ee32d1c7956923202f00cf8d2a14a62ed7517bdc0ee1e55301227fc273c/contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631", size = 325027, upload-time = "2025-04-15T17:35:11.244Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/83/bf/9baed89785ba743ef329c2b07fd0611d12bfecbedbdd3eeecf929d8d3b52/contourpy-1.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f", size = 1306641, upload-time = "2025-04-15T17:35:26.701Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d4/cc/74e5e83d1e35de2d28bd97033426b450bc4fd96e092a1f7a63dc7369b55d/contourpy-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2", size = 1374075, upload-time = "2025-04-15T17:35:43.204Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0c/42/17f3b798fd5e033b46a16f8d9fcb39f1aba051307f5ebf441bad1ecf78f8/contourpy-1.3.2-cp310-cp310-win32.whl", hash = "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0", size = 177534, upload-time = "2025-04-15T17:35:46.554Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/54/ec/5162b8582f2c994721018d0c9ece9dc6ff769d298a8ac6b6a652c307e7df/contourpy-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a", size = 221188, upload-time = "2025-04-15T17:35:50.064Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/33/05/b26e3c6ecc05f349ee0013f0bb850a761016d89cec528a98193a48c34033/contourpy-1.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c", size = 265681, upload-time = "2025-04-15T17:44:59.314Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/25/ac07d6ad12affa7d1ffed11b77417d0a6308170f44ff20fa1d5aa6333f03/contourpy-1.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16", size = 315101, upload-time = "2025-04-15T17:45:04.165Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8f/4d/5bb3192bbe9d3f27e3061a6a8e7733c9120e203cb8515767d30973f71030/contourpy-1.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad", size = 220599, upload-time = "2025-04-15T17:45:08.456Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cycler"
|
||||
version = "0.12.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" },
|
||||
]
|
||||
|
||||
[[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 = "fonttools"
|
||||
version = "4.63.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/84/69/c97f2c18e0db87d2c7b15da1974dace76ae938f1cfa22e2727a648b7ed43/fonttools-4.63.0.tar.gz", hash = "sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0", size = 3597189, upload-time = "2026-05-14T12:04:30.958Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f2/c9/4141c90a90db20f807c7e10bfd689fe53eb8f7f4caff58ee4d4dfe46919f/fonttools-4.63.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e3297a6a4059b4acc3a1e9a8b04741f240a80044eef08ebd32e8b5bcdddce75b", size = 2884632, upload-time = "2026-05-14T12:02:38.56Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/46/ad12b5c10eae602d7ef814b02afa08aacbf89da917fed5b071282b7eadc2/fonttools-4.63.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b1cd75a03ad8cb5bc40c90bfde68c0c47de423aa19e5c0f362b43520645eea94", size = 2429441, upload-time = "2026-05-14T12:02:41.162Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/90/8f/bdca24a84c81d56fffed052229cdcff368f6e05882e526f4558891481f65/fonttools-4.63.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0425b277a59cff3d80ca42162a8de360f318438a2ac83570842a678d826d579", size = 4946346, upload-time = "2026-05-14T12:02:43.41Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/04/59/a639c0e136441ee91a65b56fdf89e5d075927e7a09c559d1b0f5276577db/fonttools-4.63.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d7e5c9973aa04c95650c96e5f5ad865fbf42d62079163ecfab1e01cbc2504c22", size = 4903184, upload-time = "2026-05-14T12:02:45.742Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e6/53/91b7e0cb45b536f3da1b29ba8cbab89f27e8b986809e0b1982303a3f4eca/fonttools-4.63.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cb014d58140a38135f16064c74c652ed57aa0b75cbf8bb59cac821f7edb5334e", size = 4922967, upload-time = "2026-05-14T12:02:48.386Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c7/b7/87439bf44e6b97c5538cd29d0b7e366a5b8ce2cc132a4134fb67fa3f2fa2/fonttools-4.63.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:032038247a96c1690f9f31e377c389383c902531b085aa4e4dabd6f57f870e69", size = 5042799, upload-time = "2026-05-14T12:02:50.424Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ad/7c/8b96c3263b89ef99cded544c0f0636686f85dbd3c211c4dceef0231fca23/fonttools-4.63.0-cp310-cp310-win32.whl", hash = "sha256:a8b33a82979e0a6a34ff435cc81317be1f95ec1ebb7a3a2d1c8a6a54f02ae44e", size = 1519704, upload-time = "2026-05-14T12:02:52.523Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e5/4d/2c2f0069970b6907de8fb5b05c5c0193cc22f717df151d1c7aef1c738f58/fonttools-4.63.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c18358a155d75034911c5ee397a5b44cd19dd325dbb8b35fb60bf421d6a72ac", size = 1568666, upload-time = "2026-05-14T12:02:54.917Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2c/47/c99d5268f354002ce80f8d029cd9d7d872969da1de8b93d32de4dc56d6f4/fonttools-4.63.0-py3-none-any.whl", hash = "sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d", size = 1164562, upload-time = "2026-05-14T12:04:29.092Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "h5py"
|
||||
version = "3.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/db/33/acd0ce6863b6c0d7735007df01815403f5589a21ff8c2e1ee2587a38f548/h5py-3.16.0.tar.gz", hash = "sha256:a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738", size = 446526, upload-time = "2026-03-06T13:49:08.07Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e06f864bedb2c8e7c1358e6c73af48519e317457c444d6f3d332bb4e8fa6d7d9", size = 3724137, upload-time = "2026-03-06T13:47:35.242Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec86d4fffd87a0f4cb3d5796ceb5a50123a2a6d99b43e616e5504e66a953eca3", size = 3090112, upload-time = "2026-03-06T13:47:37.634Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/f5/e15b3d0dc8a18e56409a839e6468d6fb589bc5207c917399c2e0706eeb44/h5py-3.16.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:86385ea895508220b8a7e45efa428aeafaa586bd737c7af9ee04661d8d84a10d", size = 4844847, upload-time = "2026-03-06T13:47:39.811Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8975273c2c5921c25700193b408e28d6bdd0111c37468b2d4e25dcec4cd1d84d", size = 5065352, upload-time = "2026-03-06T13:47:41.489Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/ae/f2adc5d0ca9626db3277a3d87516e124cbc5d0eea0bd79bc085702d04f2c/h5py-3.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1677ad48b703f44efc9ea0c3ab284527f81bc4f318386aaaebc5fede6bbae56f", size = 4839173, upload-time = "2026-03-06T13:47:43.586Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/0b/e0c8c69da1d8838da023a50cd3080eae5d475691f7636b35eff20bb6ef20/h5py-3.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c4dd4cf5f0a4e36083f73172f6cfc25a5710789269547f132a20975bfe2434c", size = 5076216, upload-time = "2026-03-06T13:47:45.315Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdef06507725b455fccba9c16529121a5e1fbf56aa375f7d9713d9e8ff42454d", size = 3183639, upload-time = "2026-03-06T13:47:47.041Z" },
|
||||
]
|
||||
|
||||
[[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 = "kiwisolver"
|
||||
version = "1.5.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d0/67/9c61eccb13f0bdca9307614e782fec49ffdde0f7a2314935d489fa93cd9c/kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a", size = 103482, upload-time = "2026-03-09T13:15:53.382Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/ac/f8/06549565caa026e540b7e7bab5c5a90eb7ca986015f4c48dace243cd24d9/kiwisolver-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32cc0a5365239a6ea0c6ed461e8838d053b57e397443c0ca894dcc8e388d4374", size = 122802, upload-time = "2026-03-09T13:12:37.515Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/84/eb/8476a0818850c563ff343ea7c9c05dcdcbd689a38e01aa31657df01f91fa/kiwisolver-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc0b66c1eec9021353a4b4483afb12dfd50e3669ffbb9152d6842eb34c7e29fd", size = 66216, upload-time = "2026-03-09T13:12:38.812Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f3/c4/f9c8a6b4c21aed4198566e45923512986d6cef530e7263b3a5f823546561/kiwisolver-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86e0287879f75621ae85197b0877ed2f8b7aa57b511c7331dce2eb6f4de7d476", size = 63917, upload-time = "2026-03-09T13:12:40.053Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f1/0e/ba4ae25d03722f64de8b2c13e80d82ab537a06b30fc7065183c6439357e3/kiwisolver-1.5.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:62f59da443c4f4849f73a51a193b1d9d258dcad0c41bc4d1b8fb2bcc04bfeb22", size = 1628776, upload-time = "2026-03-09T13:12:41.976Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/e4/3f43a011bc8a0860d1c96f84d32fa87439d3feedf66e672fef03bf5e8bac/kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9190426b7aa26c5229501fa297b8d0653cfd3f5a36f7990c264e157cbf886b3b", size = 1228164, upload-time = "2026-03-09T13:12:44.002Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4b/34/3a901559a1e0c218404f9a61a93be82d45cb8f44453ba43088644980f033/kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c8277104ded0a51e699c8c3aff63ce2c56d4ed5519a5f73e0fd7057f959a2b9e", size = 1246656, upload-time = "2026-03-09T13:12:45.557Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/87/9e/f78c466ea20527822b95ad38f141f2de1dcd7f23fb8716b002b0d91bbe59/kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8f9baf6f0a6e7571c45c8863010b45e837c3ee1c2c77fcd6ef423be91b21fedb", size = 1295562, upload-time = "2026-03-09T13:12:47.562Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0a/66/fd0e4a612e3a286c24e6d6f3a5428d11258ed1909bc530ba3b59807fd980/kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cff8e5383db4989311f99e814feeb90c4723eb4edca425b9d5d9c3fefcdd9537", size = 2178473, upload-time = "2026-03-09T13:12:50.254Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dc/8e/6cac929e0049539e5ee25c1ee937556f379ba5204840d03008363ced662d/kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ebae99ed6764f2b5771c522477b311be313e8841d2e0376db2b10922daebbba4", size = 2274035, upload-time = "2026-03-09T13:12:51.785Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ca/d3/9d0c18f1b52ea8074b792452cf17f1f5a56bd0302a85191f405cfbf9da16/kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d5cd5189fc2b6a538b75ae45433140c4823463918f7b1617c31e68b085c0022c", size = 2443217, upload-time = "2026-03-09T13:12:53.329Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/45/2a/6e19368803a038b2a90857bf4ee9e3c7b667216d045866bf22d3439fd75e/kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f42c23db5d1521218a3276bb08666dcb662896a0be7347cba864eca45ff64ede", size = 2249196, upload-time = "2026-03-09T13:12:55.057Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/75/2b/3f641dfcbe72e222175d626bacf2f72c3b34312afec949dd1c50afa400f5/kiwisolver-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:94eff26096eb5395136634622515b234ecb6c9979824c1f5004c6e3c3c85ccd2", size = 73389, upload-time = "2026-03-09T13:12:56.496Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/da/88/299b137b9e0025d8982e03d2d52c123b0a2b159e84b0ef1501ef446339cf/kiwisolver-1.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:dd952e03bfbb096cfe2dd35cd9e00f269969b67536cb4370994afc20ff2d0875", size = 64782, upload-time = "2026-03-09T13:12:57.609Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/6f/6fd4f690a40c2582fa34b97d2678f718acf3706b91d270c65ecb455d0a06/kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:295d9ffe712caa9f8a3081de8d32fc60191b4b51c76f02f951fd8407253528f4", size = 59606, upload-time = "2026-03-09T13:15:40.81Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/82/a0/2355d5e3b338f13ce63f361abb181e3b6ea5fffdb73f739b3e80efa76159/kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:51e8c4084897de9f05898c2c2a39af6318044ae969d46ff7a34ed3f96274adca", size = 57537, upload-time = "2026-03-09T13:15:42.071Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c8/b9/1d50e610ecadebe205b71d6728fd224ce0e0ca6aba7b9cbe1da049203ac5/kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b83af57bdddef03c01a9138034c6ff03181a3028d9a1003b301eb1a55e161a3f", size = 79888, upload-time = "2026-03-09T13:15:43.317Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cd/ee/b85ffcd75afed0357d74f0e6fc02a4507da441165de1ca4760b9f496390d/kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf4679a3d71012a7c2bf360e5cd878fbd5e4fcac0896b56393dec239d81529ed", size = 77584, upload-time = "2026-03-09T13:15:44.605Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6b/dd/644d0dde6010a8583b4cd66dd41c5f83f5325464d15c4f490b3340ab73b4/kiwisolver-1.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:41024ed50e44ab1a60d3fe0a9d15a4ccc9f5f2b1d814ff283c8d01134d5b81bc", size = 73390, upload-time = "2026-03-09T13:15:45.832Z" },
|
||||
]
|
||||
|
||||
[[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 = "matplotlib"
|
||||
version = "3.10.9"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "contourpy" },
|
||||
{ name = "cycler" },
|
||||
{ name = "fonttools" },
|
||||
{ name = "kiwisolver" },
|
||||
{ name = "numpy" },
|
||||
{ name = "packaging" },
|
||||
{ name = "pillow" },
|
||||
{ name = "pyparsing" },
|
||||
{ name = "python-dateutil" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/63/1b/4be5be87d43d327a0cf4de1a56e86f7f84c89312452406cf122efe2839e6/matplotlib-3.10.9.tar.gz", hash = "sha256:fd66508e8c6877d98e586654b608a0456db8d7e8a546eb1e2600efd957302358", size = 34811233, upload-time = "2026-04-24T00:14:13.539Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/18/6f/340b04986e67aac6f66c5145ce68bf72c64bed30f92c8913499a6e6b8f99/matplotlib-3.10.9-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77210dce9cb8153dffc967efaae990543392563d5a376d4dd8539bebcb0ed217", size = 8296625, upload-time = "2026-04-24T00:11:43.376Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bb/2f/127081eb83162053ebb9678ceac64220b93a663e0167432566e9c7c82aab/matplotlib-3.10.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1e7698ac9868428e84d2c967424803b2472ff7167d9d6590d4204ed775343c3b", size = 8188790, upload-time = "2026-04-24T00:11:46.556Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fc/b7/d8bcec2626c35f96972bff656299fef4578113ea6193c8fdad324710410c/matplotlib-3.10.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1aa972116abb4c9d201bf245620b433726cb6856f3bef6a78f776a00f5c92d37", size = 8769389, upload-time = "2026-04-24T00:11:48.959Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/12/49/b78e214a527ea732033b7f4d37f7afb504d74ba9d134bd47938230dfb8b1/matplotlib-3.10.9-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae2f11957b27ce53497dd4d7b235c4d4f1faf383dfb39d0c5beb833bff883294", size = 9589657, upload-time = "2026-04-24T00:11:51.915Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5f/15/5246f7b43beae19c74dfee651d58d6cc8112e06f77adb4e88cc04f2e3a23/matplotlib-3.10.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b049278ddce116aaa1c1377ebf58adea909132dfce0281cf7e3a1ea9fc2e2c65", size = 9651983, upload-time = "2026-04-24T00:11:54.766Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/75/77/5acecfe672ba0fa1b8c0454f69ce155d1e6fc5852fa7206bf9afaf767121/matplotlib-3.10.9-cp310-cp310-win_amd64.whl", hash = "sha256:82834c3c292d24d3a8aae77cd2d20019de69d692a34a970e4fdb8d33e2ea3dda", size = 8199701, upload-time = "2026-04-24T00:11:58.389Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2c/2b/0e92ad0ac446633f928a1563db4aa8add407e1924faf0ded5b95b35afb27/matplotlib-3.10.9-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1872fb212a05b729e649754a72d5da61d03e0554d76e80303b6f83d1d2c0552b", size = 8293058, upload-time = "2026-04-24T00:13:56.339Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4b/23/74682fd369f5299ceda438fea2a0662e6383b85c9383fb9cdfcf04713e07/matplotlib-3.10.9-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:985f2238880e2e69093f588f5fe2e46771747febf0649f3cf7f7b7480875317f", size = 8186627, upload-time = "2026-04-24T00:13:58.623Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ca/e8/368aab88f3c4cd8992800f31abfe0670c3e47540ba20a97e9fdbcde594b3/matplotlib-3.10.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6640f75af2c6148293caa0a2b39dd806a492dd66c8a8b04035813e33d0fd2585", size = 8764117, upload-time = "2026-04-24T00:14:01.684Z" },
|
||||
]
|
||||
|
||||
[[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 = "pillow"
|
||||
version = "12.3.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce", size = 47025035, upload-time = "2026-07-01T11:56:38.965Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/25/c2/669d88644cddb1485bd9534e63e8cf476c8e51cb3c3a1297677023505c0e/pillow-12.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a", size = 5392418, upload-time = "2026-07-01T11:53:27.808Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6b/ba/3762f376a2948e3036488d773a146e0ae6ecc2ca03ac20e2615bd0b2ba02/pillow-12.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7", size = 4785287, upload-time = "2026-07-01T11:53:29.761Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/07/50/b5d688cc9c52d4482f3d5bcab6ce20bc2a74a85d2343841c907444a3be2c/pillow-12.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f", size = 6253754, upload-time = "2026-07-01T11:53:32.298Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4e/89/36f4cd76cf4baf05c50ababb976249153f18c959171c7f6ba09a6f217260/pillow-12.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec", size = 6925605, upload-time = "2026-07-01T11:53:34.487Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/eb/c0/4de58cf6633b9e3a6061ef4be6fb91fc3c90b812ece886f531e3c523d777/pillow-12.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468", size = 6327788, upload-time = "2026-07-01T11:53:36.433Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/87/3c/14d53682a19550dbbaf3b598f807d5457646c510805a44c7d7891cd1cd1a/pillow-12.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed", size = 7036288, upload-time = "2026-07-01T11:53:38.712Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/38/1d/36279e3c77efe034e4cc2b0393ee74ffdb5a62391dacbf9b916154f5f0b8/pillow-12.3.0-cp310-cp310-win32.whl", hash = "sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1", size = 6472396, upload-time = "2026-07-01T11:53:40.781Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/48/7c/8fa0039574c476d7c6fa57dd7c32a130436877c6ec1e5ce1cc8ec44878c1/pillow-12.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb", size = 7226887, upload-time = "2026-07-01T11:53:42.764Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fa/17/e324be141d173c1c919428066c3259f21c1b8982e564e01a4a81e96dbdcf/pillow-12.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f", size = 2568039, upload-time = "2026-07-01T11:53:45.372Z" },
|
||||
]
|
||||
|
||||
[[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 = "python-dateutil"
|
||||
version = "2.9.0.post0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "six" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
|
||||
]
|
||||
|
||||
[[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 = "six"
|
||||
version = "1.17.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
|
||||
]
|
||||
|
||||
[[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" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "urllib3"
|
||||
version = "2.7.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" },
|
||||
]
|
||||
@@ -0,0 +1,129 @@
|
||||
file POSTMORTEMLOG.template {
|
||||
pattern
|
||||
{ DEVICE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env}} }
|
||||
}
|
||||
|
||||
file POSTMORTEMLOG_15min10Hz.template {
|
||||
pattern
|
||||
{ DEVICE NAME INP}
|
||||
# ---------- BEAM CURRENT --------------
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} CURRBPM AGEBD-DBPM3CURR:CURRENT-AVG }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} CURRPCT ARS07-DPCT-0000:CURR }
|
||||
# ---------- BEAM LIFETIME --------------
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} TAUBPM AGEBD-TAUBPM:TAU }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} TAUPCT AGEBD-TAUPCT:TAU }
|
||||
# ---------- TUNES --------------
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} QX AGEBD-TUNEBUMP:QX }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} QY AGEBD-TUNEBUMP:QY }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} QZ AGEBD-TUNEBUMP:QZ }
|
||||
# ---------- LOSSES --------------
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS01-DDRM-0375 ARS01-DDRM-0375:FET1_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ABRTL-DDRM-0670 ABRTL-DDRM-0670:FET1_BIAS_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ABRTL-DDRM-0950 ABRTL-DDRM-0950:FET1_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS01-DDRM-1530 ARS01-DDRM-1530:FET1_BIAS_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} X05LA-DDRM-0330 X05LA-DDRM-0330:FET1_BIAS_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-DDRM-1530 ARS05-DDRM-1530:FET1_BIAS_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-DDRM-3500 ARS05-DDRM-3500:FET1_BIAS_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} X09LA-DDRM-0330 X09LA-DDRM-0330:FET1_BIAS_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS09-DDRM-1530 ARS09-DDRM-1530:FET1_BIAS_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS09-DDRM-3500 ARS09-DDRM-3500:FET2_BIAS_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS12-DDRM-1530 ARS12-DDRM-1530:FET1_BIAS_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS12-DDRM-3500 ARS12-DDRM-3500:FET2_BIAS_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS12-DDRM-4400 ARS12-DDRM-4400:FET2_BIAS_DOSE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS12-DDRM-5480 ARS12-DDRM-5480:FET1_BIAS_DOSE }
|
||||
# ---------- RF --------------
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} MASTERFREQ-SET AGERF-MO01:FREQ-SET }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} MASTERFREQ-GET AGERF-MO01:FREQ-GET }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} RFPOW-0140-INP ARS05-RCAV-0140:CO1i-POWER-MAX }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} RFPOW-0060-INP ARS05-RCAV-0060:CO1i-POWER-MAX }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} RFPOW-0230-INP ARS05-RCAV-0230:CO1i-POWER-MAX }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} RFPOW-0310-INP ARS05-RCAV-0310:CO1i-POWER-MAX }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} RFPOW-0060-REF ARS05-RCAV-0060:CO1r-POWER-MAX }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} RFPOW-0140-REF ARS05-RCAV-0140:CO1r-POWER-MAX }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} RFPOW-0230-REF ARS05-RCAV-0230:CO1r-POWER-MAX }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} RFPOW-0310-REF ARS05-RCAV-0310:CO1r-POWER-MAX }
|
||||
# ---------- BEAM SIZE --------------
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} X01DD-SIGX X01DD-FE-CAM1:SIG-X }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} X01DD-SIGY X01DD-FE-CAM1:SIG-Y }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} X08DB-SIGX X08DB-FE-CAM1:SIG-X }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} X08DB-SIGY X08DB-FE-CAM1:SIG-Y }
|
||||
# ---------- VACUUM --------------
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} VACMAX ARIVA-VMAVE:PRESS-MAX }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} VACMAXFE ARIVA-VMAVE-FE:PRESS-MAX }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS01-VMCC-0110 ARS01-VMCC-0110:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS01-VMCC-0210 ARS01-VMCC-0210:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS01-VMCC-0225 ARS01-VMCC-0225:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS01-VMCC-0310 ARS01-VMCC-0310:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS01-VMCC-1550 ARS01-VMCC-1550:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS01-VMCC-3510 ARS01-VMCC-3510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS01-VMCC-5460 ARS01-VMCC-5460:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS02-VMCC-0110 ARS02-VMCC-0110:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS02-VMCC-0210 ARS02-VMCC-0210:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS02-VMCC-0310 ARS02-VMCC-0310:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS02-VMCC-1550 ARS02-VMCC-1550:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS02-VMCC-3510 ARS02-VMCC-3510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS02-VMCC-5460 ARS02-VMCC-5460:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS03-VMCC-0110 ARS03-VMCC-0110:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS03-VMCC-0320 ARS03-VMCC-0320:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS03-VMCC-1550 ARS03-VMCC-1550:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS03-VMCC-3510 ARS03-VMCC-3510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS03-VMCC-5460 ARS03-VMCC-5460:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS04-VMCC-0110 ARS04-VMCC-0110:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS04-VMCC-1550 ARS04-VMCC-1550:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS04-VMCC-3510 ARS04-VMCC-3510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS04-VMCC-5460 ARS04-VMCC-5460:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-0110 ARS05-VMCC-0110:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-0115 ARS05-VMCC-0115:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-0210 ARS05-VMCC-0210:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-0215 ARS05-VMCC-0215:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-0310 ARS05-VMCC-0310:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-0315 ARS05-VMCC-0315:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-0410 ARS05-VMCC-0410:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-0415 ARS05-VMCC-0415:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-0510 ARS05-VMCC-0510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-0520 ARS05-VMCC-0520:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-0530 ARS05-VMCC-0530:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-0810 ARS05-VMCC-0810:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-1550 ARS05-VMCC-1550:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-3510 ARS05-VMCC-3510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS05-VMCC-5460 ARS05-VMCC-5460:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS06-VMCC-0110 ARS06-VMCC-0110:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS06-VMCC-1550 ARS06-VMCC-1550:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS06-VMCC-3510 ARS06-VMCC-3510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS06-VMCC-5460 ARS06-VMCC-5460:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS07-VMCC-0010 ARS07-VMCC-0010:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS07-VMCC-0120 ARS07-VMCC-0120:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS07-VMCC-0210 ARS07-VMCC-0210:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS07-VMCC-1550 ARS07-VMCC-1550:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS07-VMCC-3510 ARS07-VMCC-3510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS07-VMCC-5460 ARS07-VMCC-5460:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS08-VMCC-0110 ARS08-VMCC-0110:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS08-VMCC-1550 ARS08-VMCC-1550:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS08-VMCC-3510 ARS08-VMCC-3510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS08-VMCC-5460 ARS08-VMCC-5460:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS09-VMCC-0110 ARS09-VMCC-0110:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS09-VMCC-0120 ARS09-VMCC-0120:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS09-VMCC-0410 ARS09-VMCC-0410:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS09-VMCC-0510 ARS09-VMCC-0510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS09-VMCC-0810 ARS09-VMCC-0810:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS09-VMCC-1550 ARS09-VMCC-1550:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS09-VMCC-3510 ARS09-VMCC-3510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS09-VMCC-5460 ARS09-VMCC-5460:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS10-VMCC-0110 ARS10-VMCC-0110:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS10-VMCC-1550 ARS10-VMCC-1550:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS10-VMCC-3510 ARS10-VMCC-3510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS10-VMCC-5460 ARS10-VMCC-5460:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS11-VMCC-0110 ARS11-VMCC-0110:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS11-VMCC-0210 ARS11-VMCC-0210:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS11-VMCC-0310 ARS11-VMCC-0310:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS11-VMCC-0410 ARS11-VMCC-0410:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS11-VMCC-0510 ARS11-VMCC-0510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS11-VMCC-1550 ARS11-VMCC-1550:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS11-VMCC-3510 ARS11-VMCC-3510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS11-VMCC-5460 ARS11-VMCC-5460:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS12-VMCC-0110 ARS12-VMCC-0110:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS12-VMCC-1550 ARS12-VMCC-1550:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS12-VMCC-3510 ARS12-VMCC-3510:PRESSURE }
|
||||
{ AGEBD-POSTMORTEMLOG{{ agebd_env }} ARS12-VMCC-5460 ARS12-VMCC-5460:PRESSURE }
|
||||
}
|
||||
@@ -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
|
||||
@@ -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")
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
# Circular Buffer Record for Live Copy of desired PVs
|
||||
record (compress, "$(DEVICE):BUFFER-$(NAME)") {
|
||||
field(DESC, "15min 10Hz buffer for post mortem")
|
||||
field(ASG, "READONLY")
|
||||
field(SCAN, ".1 second")
|
||||
field(INP, "$(INP)")
|
||||
field(ALG, "Circular Buffer")
|
||||
field(NSAM, "9000")
|
||||
}
|
||||
|
||||
# Records for automatically copying EPICS circular buffer Records after beam abort
|
||||
record (waveform, "$(DEVICE):BUFFER-$(NAME)-LAST"){
|
||||
field(DESC, "Copy of post mortem buffer")
|
||||
field(ASG, "READONLY")
|
||||
field(FTVL, "FLOAT")
|
||||
field(NELM, "9000")
|
||||
field(INP, "$(DEVICE):BUFFER-$(NAME) VAL")
|
||||
field(SCAN, "Event") # Process on event
|
||||
field(EVNT, "1") # Event number to trigger
|
||||
}
|
||||
|
||||
# Records for writing to from HLA when viewing beam abort data history
|
||||
record (waveform, "$(DEVICE):BUFFER-$(NAME)-HLA"){
|
||||
field(DESC, "Post mortem buffer filled by HLA")
|
||||
field(ASG, "PROTECTED")
|
||||
field(FTVL, "FLOAT")
|
||||
field(NELM, "9000")
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
epicsEnvSet("ENGINEER", "armborst")
|
||||
require array
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
@@ -0,0 +1,48 @@
|
||||
[project]
|
||||
name = "agebd-scrubbing"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-SCRUBBING Service"
|
||||
requires-python = "==3.10.*"
|
||||
dependencies = [
|
||||
"agebd",
|
||||
"numpy>=2.2.6",
|
||||
]
|
||||
|
||||
[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"]
|
||||
@@ -0,0 +1 @@
|
||||
from .service import PVs, Service
|
||||
@@ -0,0 +1,35 @@
|
||||
import typer
|
||||
|
||||
from agebd.enums import LogLevel
|
||||
from agebd.utils import init_logging
|
||||
from agebd_scrubbing import PVs, Service
|
||||
from agebd_scrubbing.runner import Runner
|
||||
|
||||
# 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,
|
||||
),
|
||||
):
|
||||
"""
|
||||
Uses custom/old Runner because migrating to the agebd Runner would be quite
|
||||
complex.
|
||||
"""
|
||||
init_logging(log_level)
|
||||
service_name = "SCRUBBING"
|
||||
pvs = PVs(service_name=service_name)
|
||||
service = Service(pvs=pvs)
|
||||
runner = Runner(svc=service)
|
||||
runner.start()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
typer.run(main)
|
||||
@@ -0,0 +1,280 @@
|
||||
import traceback
|
||||
from time import perf_counter, sleep
|
||||
|
||||
import numpy as np
|
||||
from epics import poll
|
||||
|
||||
from agebd_scrubbing.service import Service
|
||||
|
||||
|
||||
class Runner:
|
||||
def __init__(self, svc: Service) -> None:
|
||||
self.svc = svc
|
||||
|
||||
def start(self):
|
||||
svc = self.svc
|
||||
pvs = self.svc.pvs
|
||||
|
||||
while not pvs.abort.get():
|
||||
if pvs.onoff.get() == 1:
|
||||
# add callback for triggering the loop
|
||||
if not svc.CallbackActive:
|
||||
pvs.status.put("running")
|
||||
pvs.CallbackPV.add_callback(callback=svc.InjectionCallback, index=1, svc=svc)
|
||||
svc.CallbackActive = 1
|
||||
|
||||
if svc.ChangeTrue or perf_counter() > svc.tl + 0.1:
|
||||
# start time for next loop firing, if no vacuum changes
|
||||
svc.tl = perf_counter()
|
||||
|
||||
# reload control PVs
|
||||
svc.update()
|
||||
|
||||
# check stop/abort conitions if injection is active
|
||||
if svc.injection:
|
||||
# ensure disabled scrubbing during injection
|
||||
svc.pause_scrubbing()
|
||||
|
||||
# ensure correct injector settings
|
||||
if svc.cur > pvs.current_threshold.get():
|
||||
pvs.gun_grid.put(svc.grid_fpfb)
|
||||
else:
|
||||
pvs.gun_grid.put(svc.grid_accum)
|
||||
|
||||
# abort injection when limits exceeded
|
||||
if svc.conditions_abort_injection:
|
||||
# disable injection when upper limit reached
|
||||
svc.stop_injection()
|
||||
print("injection aborted")
|
||||
|
||||
if not svc.abort:
|
||||
svc.abort = 1
|
||||
svc.abort_t0 = perf_counter()
|
||||
|
||||
svc.set_status(svc.states["abort"], wait=60)
|
||||
|
||||
elif svc.conditions_stop_injection:
|
||||
# disable injection when upper limit reached
|
||||
svc.stop_injection()
|
||||
print("injection stopped")
|
||||
|
||||
# start scrubbing if activated
|
||||
if svc.scrubbi > 0:
|
||||
sleep(0.1)
|
||||
svc.start_scrubbing()
|
||||
|
||||
svc.set_status(svc.states["decay + scrub"])
|
||||
|
||||
else:
|
||||
svc.set_status(svc.states["decay - scrub"])
|
||||
|
||||
elif svc.info != svc.states["inject"]:
|
||||
svc.set_status(svc.states["inject"])
|
||||
|
||||
# stop injection and info if master trigger missing
|
||||
elif not svc.trig_master:
|
||||
svc.stop_injection()
|
||||
svc.set_status(svc.states["wait 4 master"])
|
||||
|
||||
# stop injection and info if master mode is not set to manual
|
||||
elif not svc.master_mode == 2:
|
||||
svc.stop_injection()
|
||||
svc.set_status(svc.states["wait 4 manual"])
|
||||
|
||||
# stop injection and wait for 60s if injection was aborted
|
||||
elif svc.abort:
|
||||
svc.stop_injection()
|
||||
dt = perf_counter() - svc.abort_t0
|
||||
|
||||
if dt > 60:
|
||||
svc.abort = 0
|
||||
|
||||
else:
|
||||
svc.set_status(svc.states["abort"], wait=60 - dt)
|
||||
|
||||
sleep(0.1)
|
||||
|
||||
# start warmup cycling if conditions for starting injection are fulfilled
|
||||
elif svc.conditions_start_injection and svc.info not in [
|
||||
svc.states["inject"],
|
||||
svc.states["warmup"],
|
||||
]:
|
||||
svc.set_status(svc.states["warmup"])
|
||||
|
||||
# disable pingers for injection
|
||||
svc.pause_scrubbing()
|
||||
|
||||
# make sure that injection bump and pinger not both fired
|
||||
sleep(0.1)
|
||||
|
||||
# check setpoints for required amount of warmup cycles
|
||||
svc.cycles_BOIN_sp = pvs.cycles_BOIN_sp.get()
|
||||
svc.cycles_BOMB_sp = pvs.cycles_BOMB_sp.get()
|
||||
svc.cycles_BOME_sp = pvs.cycles_BOME_sp.get()
|
||||
svc.cycles_BOEX_sp = pvs.cycles_BOEX_sp.get()
|
||||
svc.cycles_SRIN_sp = pvs.cycles_SRIN_sp.get()
|
||||
|
||||
# set readback of warmup cycle counters to setpoint
|
||||
pvs.cycles_BOIN_rb.put(svc.cycles_BOIN_sp)
|
||||
pvs.cycles_BOMB_rb.put(svc.cycles_BOMB_sp)
|
||||
pvs.cycles_BOME_rb.put(svc.cycles_BOME_sp)
|
||||
pvs.cycles_BOEX_rb.put(svc.cycles_BOEX_sp)
|
||||
pvs.cycles_SRIN_rb.put(svc.cycles_SRIN_sp)
|
||||
svc.cycles_BOIN_rb = svc.cycles_BOIN_sp
|
||||
svc.cycles_BOMB_rb = svc.cycles_BOMB_sp
|
||||
svc.cycles_BOME_rb = svc.cycles_BOME_sp
|
||||
svc.cycles_BOEX_rb = svc.cycles_BOEX_sp
|
||||
svc.cycles_SRIN_rb = svc.cycles_SRIN_sp
|
||||
|
||||
# calculate highest amount of total required warmup cycles
|
||||
svc.cycles_max = np.nanmax(
|
||||
[
|
||||
svc.cycles_BOIN_sp,
|
||||
svc.cycles_BOMB_sp,
|
||||
svc.cycles_BOME_sp,
|
||||
svc.cycles_BOEX_sp,
|
||||
svc.cycles_SRIN_sp,
|
||||
]
|
||||
)
|
||||
|
||||
# calculate highest amount of remaining warmup cycles
|
||||
svc.cycles_rem = svc.cycles_max
|
||||
|
||||
# remove default callback for warmup (secretly since svc.CallbackActive = 0)
|
||||
pvs.CallbackPV.remove_callback(index=1)
|
||||
|
||||
# activate warmup callbacks
|
||||
pvs.cycles_BOIN_cnt.add_callback(
|
||||
callback=svc.WarmupCallback, index=2, svc=svc
|
||||
)
|
||||
pvs.cycles_BOMB_cnt.add_callback(
|
||||
callback=svc.WarmupCallback, index=3, svc=svc
|
||||
)
|
||||
pvs.cycles_BOME_cnt.add_callback(
|
||||
callback=svc.WarmupCallback, index=4, svc=svc
|
||||
)
|
||||
pvs.cycles_BOEX_cnt.add_callback(
|
||||
callback=svc.WarmupCallback, index=5, svc=svc
|
||||
)
|
||||
pvs.cycles_SRIN_cnt.add_callback(
|
||||
callback=svc.WarmupCallback, index=6, svc=svc
|
||||
)
|
||||
# pvs.cycles_ALL_cnt.add_callback(callback=InjectionCallback, index=7, svc=svc)
|
||||
|
||||
# set callback warmup cycle counters to 0
|
||||
svc.wait4warm = {
|
||||
"AGETI-CVME-MASTER-TMA:Evt-BO-Inj-EVRCount-I.VAL": 0,
|
||||
"AGETI-CVME-MASTER-TMA:Evt-BO-MA-B-EVRCount-I.VAL": 0,
|
||||
"AGETI-CVME-MASTER-TMA:Evt-BO-Ramp-EVRCount-I.VAL": 0,
|
||||
"AGETI-CVME-MASTER-TMA:Evt-BO-Ext-EVRCount-I.VAL": 0,
|
||||
"AGETI-CVME-MASTER-TMA:Evt-SR-Inj-EVRCount-I.VAL": 0,
|
||||
}
|
||||
|
||||
svc.tp = perf_counter()
|
||||
|
||||
# do top up analysis
|
||||
svc.topup_dt = (svc.tp - svc.topup_t0) / 60
|
||||
svc.topup_dI = svc.topup_I0 - svc.cur
|
||||
pvs.topup_dt.put(svc.topup_dt)
|
||||
pvs.topup_dI.put(svc.topup_dI)
|
||||
if svc.topup_I0 > 0:
|
||||
if svc.topup_dI / svc.topup_I0 < 1:
|
||||
pvs.topup_tau.put(
|
||||
(-svc.topup_dt / 60) / np.log(1 - svc.topup_dI / svc.topup_I0)
|
||||
)
|
||||
|
||||
elif svc.info == svc.states["warmup"]:
|
||||
if svc.cycles_rem < 1:
|
||||
# start injection
|
||||
svc.start_injection()
|
||||
|
||||
# reactivate default callback by notifying mainloop of its deactivation
|
||||
svc.CallbackActive = 0
|
||||
|
||||
# disable warmup callbacks
|
||||
pvs.cycles_BOIN_cnt.remove_callback(index=2)
|
||||
pvs.cycles_BOMB_cnt.remove_callback(index=3)
|
||||
pvs.cycles_BOME_cnt.remove_callback(index=4)
|
||||
pvs.cycles_BOEX_cnt.remove_callback(index=5)
|
||||
pvs.cycles_SRIN_cnt.remove_callback(index=6)
|
||||
pvs.cycles_ALL_cnt.remove_callback(index=7)
|
||||
|
||||
svc.set_status(svc.states["inject"])
|
||||
|
||||
else:
|
||||
svc.prepare_injection()
|
||||
|
||||
elif svc.info in [svc.states["pause"], svc.states["wait 4 master"]]:
|
||||
if svc.injection:
|
||||
svc.set_status(svc.states["inject"])
|
||||
else:
|
||||
if pvs.trig_pinger_h.get() and pvs.trig_pinger_v.get():
|
||||
svc.set_status(svc.states["decay + scrub"])
|
||||
else:
|
||||
svc.set_status(svc.states["decay - scrub"])
|
||||
|
||||
# stop scrubbing when deactivated
|
||||
elif svc.scrubbi == 0 and svc.scrubbilast > 0:
|
||||
svc.stop_scrubbing()
|
||||
svc.set_status(svc.states["decay - scrub"])
|
||||
|
||||
# if scrubbing activated and lifetime drops below 1 hour --> stop scrubbing
|
||||
elif svc.scrubbi > 0 and svc.tau < 1:
|
||||
svc.pause_scrubbing()
|
||||
svc.set_status(svc.states["decay - scrub"])
|
||||
print("Scrubbing aborted, tau < 1")
|
||||
|
||||
svc.ChangeTrue = 0
|
||||
|
||||
# inform watchdog(s)
|
||||
pvs.running.put(0)
|
||||
|
||||
# wait for callback to fire
|
||||
poll(evt=1.0e-5, iot=0.1)
|
||||
|
||||
else:
|
||||
# WHILE PAUSED REBOOT OF THE SCRUBBING IOC SHOULD NOT DISTURB THE SERVICE
|
||||
|
||||
if svc.CallbackActive:
|
||||
# remove callback
|
||||
pvs.CallbackPV.remove_callback(index=1)
|
||||
svc.CallbackActive = 0
|
||||
|
||||
# reload control PVs
|
||||
svc.update()
|
||||
|
||||
# disable injection and pingers when first paused
|
||||
if svc.info != svc.states["pause"]:
|
||||
svc.stop_injection()
|
||||
svc.pause_scrubbing()
|
||||
|
||||
svc.set_status(svc.states["pause"])
|
||||
pvs.status.put("paused")
|
||||
|
||||
sleep(0.1)
|
||||
|
||||
# sleep and inform watchdog(s)
|
||||
pvs.alive.put(0)
|
||||
|
||||
if pvs.abort.get():
|
||||
# confirm clean abort
|
||||
pvs.status.put("killed")
|
||||
print("Got Killed by Master Service!")
|
||||
pvs.abortreq.put(0)
|
||||
|
||||
# elif svc.crashed:
|
||||
|
||||
# # confirm crash
|
||||
# pvs.status.put('crashed')
|
||||
# print('Service crashed on exception!')
|
||||
# print('----- svc.exception.__traceback__ -----')
|
||||
# print(svc.exception.__traceback__)
|
||||
# print()
|
||||
# print('----- traceback.format_exc() -----')
|
||||
# print(traceback.format_exc())
|
||||
|
||||
else:
|
||||
# confirm unknown exit
|
||||
pvs.status.put("unknown crash")
|
||||
print("Service crashed without exception!")
|
||||
print(traceback.format_exc())
|
||||
@@ -0,0 +1,507 @@
|
||||
from datetime import datetime
|
||||
from time import perf_counter, sleep
|
||||
|
||||
import numpy as np
|
||||
from epics import PV
|
||||
|
||||
from agebd.pv import get_pv_class
|
||||
from agebd.service.pvs import BasePVs
|
||||
from agebd.utils import printgetversion
|
||||
|
||||
__version__ = printgetversion(__file__)
|
||||
|
||||
PV = get_pv_class()
|
||||
|
||||
|
||||
class PVs(BasePVs):
|
||||
cycles_BOIN_sp = PV("AGEBD-SCRUBBING:WARMUPCYCLES-BOIN-SP.VAL")
|
||||
cycles_BOIN_rb = PV("AGEBD-SCRUBBING:WARMUPCYCLES-BOIN-RB.VAL")
|
||||
cycles_BOIN_cnt = PV("AGETI-CVME-MASTER-TMA:Evt-BO-Inj-EVRCount-I.VAL", auto_monitor=True)
|
||||
cycles_BOMB_sp = PV("AGEBD-SCRUBBING:WARMUPCYCLES-BOMB-SP.VAL")
|
||||
cycles_BOMB_rb = PV("AGEBD-SCRUBBING:WARMUPCYCLES-BOMB-RB.VAL")
|
||||
cycles_BOMB_cnt = PV("AGETI-CVME-MASTER-TMA:Evt-BO-MA-B-EVRCount-I.VAL", auto_monitor=True)
|
||||
cycles_BOME_sp = PV("AGEBD-SCRUBBING:WARMUPCYCLES-BOME-SP.VAL")
|
||||
cycles_BOME_rb = PV("AGEBD-SCRUBBING:WARMUPCYCLES-BOME-RB.VAL")
|
||||
cycles_BOME_cnt = PV("AGETI-CVME-MASTER-TMA:Evt-BO-Ramp-EVRCount-I.VAL", auto_monitor=True)
|
||||
cycles_BOEX_sp = PV("AGEBD-SCRUBBING:WARMUPCYCLES-BOEX-SP.VAL")
|
||||
cycles_BOEX_rb = PV("AGEBD-SCRUBBING:WARMUPCYCLES-BOEX-RB.VAL")
|
||||
cycles_BOEX_cnt = PV("AGETI-CVME-MASTER-TMA:Evt-BO-Ext-EVRCount-I.VAL", auto_monitor=True)
|
||||
cycles_SRIN_sp = PV("AGEBD-SCRUBBING:WARMUPCYCLES-SRIN-SP.VAL")
|
||||
cycles_SRIN_rb = PV("AGEBD-SCRUBBING:WARMUPCYCLES-SRIN-RB.VAL")
|
||||
cycles_SRIN_cnt = PV("AGETI-CVME-MASTER-TMA:Evt-SR-Inj-EVRCount-I.VAL", auto_monitor=True)
|
||||
cycles_ALL_cnt = PV("AGETI-CVME-MASTER-TMA:Event-Seq-Cnt-I.VAL", auto_monitor=True)
|
||||
|
||||
## Control PVs
|
||||
# top-up control mode
|
||||
# topumod = PV('.VAL')
|
||||
# top-up mode vacuum limits
|
||||
vac_max = PV("AGEBD-SCRUBBING:CONTROL-VACUUM-MAX.VAL")
|
||||
vac_min = PV("AGEBD-SCRUBBING:CONTROL-VACUUM-MIN.VAL")
|
||||
# top-up mode current limits
|
||||
cur_max = PV("AGEBD-SCRUBBING:CONTROL-CURRENT-MAX.VAL")
|
||||
cur_min = PV("AGEBD-SCRUBBING:CONTROL-CURRENT-MIN.VAL")
|
||||
# top-up mode time limits for injection and decay (periodic refill)
|
||||
tim_inj = PV("AGEBD-SCRUBBING:CONTROL-TIME-MAX.VAL")
|
||||
tim_dec = PV("AGEBD-SCRUBBING:CONTROL-TIME-MIN.VAL")
|
||||
# mbfb gain setpoints for scrubbing
|
||||
mbfbx_gain_sp = PV("AGEBD-SCRUBBING:MBFBX-GAIN-SP.VAL")
|
||||
mbfby_gain_sp = PV("AGEBD-SCRUBBING:MBFBY-GAIN-SP.VAL")
|
||||
mbfbx_gain = PV("ARSGE-CECL-MBFB:MBFB-T-X-DDS-GAIN.VAL")
|
||||
mbfby_gain = PV("ARSGE-CECL-MBFB:MBFB-T-Y-DDS-GAIN.VAL")
|
||||
|
||||
# RDP Scan
|
||||
# pause : set gain to 0 as normal, get current sweep freq, stop sweep, set initial freq of sweep to current freq
|
||||
# start : set gain to sp (i.e., 100) as normal, start sweep
|
||||
mbfby_freq_sp = PV("ARSGE-CECL-MBFB:MBFB-T-Y-DDS-FRQ.VAL")
|
||||
mbfby_sweep_onoff = PV("ARSGE-CECL-MBFB:MBFB-T-Y-DDS-SWEEP-EN.VAL")
|
||||
mbfby_sweepfreq_start = PV("ARSGE-CECL-MBFB:MBFB-T-Y-DDS-SWEEP-FREQ-START.VAL")
|
||||
mbfby_sweepfreq_rb = PV("ARSGE-CECL-MBFB:MBFB-T-Y-DDS-SWEEP-FRQ-RB-REG.VAL")
|
||||
|
||||
vac_dyn = PV("AGEBD-SCRUBBING:CONTROL-VACUUM-DYN.VAL")
|
||||
vac_dyn_frac = PV("AGEBD-SCRUBBING:CONTROL-VACUUM-DYN-FRAC.VAL")
|
||||
|
||||
# grd_max = PV('AGEBD-SCRUBBING:CONTROL-GUNGRID-MAX.VAL')
|
||||
grid_accum = PV("AGEBD-SCRUBBING:CONTROL-GUNGRID-ACCUM.VAL")
|
||||
grid_fpfb = PV("AGEBD-SCRUBBING:CONTROL-GUNGRID-FPFB.VAL")
|
||||
# current above which the feedback mode is started
|
||||
current_threshold = PV("AGEBD-TIMING:CURRENT-THRESHOLD.VAL")
|
||||
|
||||
scrubbing = PV("AGEBD-SCRUBBING:CONTROL-SCRUB.VAL")
|
||||
|
||||
# Input PVs
|
||||
vacs = [
|
||||
# PV('ARIVA-VMAVE:PRESS-MAX.VAL'), # VCS gauges in the Arcs + Straights
|
||||
# PV('ARIVA-VMAVE-FE:PRESS-MAX.VAL'), # VCS gauges in the ring to always the first one after the FE-Valve
|
||||
# PV('ARIVA-VMAVE-ALL:PRESS-MAX.VAL'), # Max of the two above
|
||||
# PV('ARIVA-VMAVE-PSH:PRESS-MAX.VAL'), # VCS gauges in the Photon Shutters/Beam Stoppers of the existing beamlines
|
||||
PV("ARIVA-VMAVE-ALL:PRESS-MAX.VAL"), # Max of three signals: Ring/FE/PSH
|
||||
PV("ARS07-VMCC-0120:PRESSURE.VAL"),
|
||||
]
|
||||
vac_all = PV("ARIVA-VMAVE-ALL:PRESS-MAX.VAL")
|
||||
vac_acc = [
|
||||
PV("ARIVA-VMAVE:PRESS-MAX.VAL"),
|
||||
PV("ARS07-VMCC-0120:PRESSURE.VAL"),
|
||||
]
|
||||
# vac_fe = PV('ARIVA-VMAVE-FE:PRESS-MAX.VAL')
|
||||
# cur = PV('AGEBD-DBPM3CURR:CURRENT-AVG.VAL')
|
||||
cur = PV("ARS07-DPCT-0000:CURR.VAL")
|
||||
# cur1 = PV('ARS07-CECL-DPCT:BDC-DPCT100-SCALED')
|
||||
# cur2 = PV('ARS07-CECL-DPCT2:BDC-DPCT200-SCALED')
|
||||
# curuse = PV('ARS07-DPCT-0000:CHOICE-RB')
|
||||
|
||||
injguard = PV("AGEBD-INJECTIONGUARD:CHECK-SUM.VAL")
|
||||
|
||||
injactive = PV("AGEBD-PARAMS:INJECTION-ACTIVE")
|
||||
|
||||
tau = PV("AGEBD-PARAMS:LIFETIME.VAL")
|
||||
|
||||
# Regulated PVs
|
||||
trig_firego = PV("AGEBD-TIMING:GO.VAL")
|
||||
trig_master = PV("AGETI-CVME-MASTER-TMA:SR-Inj-Status-Sel.VAL")
|
||||
master_mode = PV("AGETI-CVME-MASTER-TMA:FP-Mode-Sel.VAL")
|
||||
trig_secret = PV("AGEBD-INJECTIONGUARD:STATUS-SECRET-MASTER.VAL")
|
||||
# trig_guntxb = PV('ALIRF-VME-A-GUN:CH1-MODE.VAL')
|
||||
# AGETI-CVME-MASTER-TMA:Evt-LI-Gun-Ena-Sel
|
||||
# trig_gunevt = PV('AGETI-CVME-MASTER-TMA:Evt-LI-Gun-Ena-Sel.VAL')
|
||||
# AGETI-CVME-MASTER-TMA:Evt-BO-Inj-Ena-Sel
|
||||
trig_booinj = PV("AGETI-CVME-MASTER-TMA:Evt-BO-Inj-Ena-Sel.VAL")
|
||||
# AGETI-CVME-MASTER-TMA:Evt-BO-MA-B-Ena-Sel
|
||||
# trig_boormp = PV('AGETI-CVME-MASTER-TMA:Evt-Old-BO-HW-Ena-Sel.VAL')
|
||||
trig_bormp1 = PV("AGETI-CVME-MASTER-TMA:Evt-BO-MA-B-Ena-Sel.VAL")
|
||||
# AGETI-CVME-MASTER-TMA:Evt-BO-Ramp-Ena-Sel
|
||||
trig_bormp2 = PV("AGETI-CVME-MASTER-TMA:Evt-BO-Ramp-Ena-Sel.VAL")
|
||||
trig_booext = PV(
|
||||
"AGETI-CVME-MASTER-TMA:Evt-BO-Ext-Ena-Sel.VAL"
|
||||
) # Alias AGETI-CVME-MASTER-TMA:Evt-10
|
||||
trig_rininj = PV(
|
||||
"AGETI-CVME-MASTER-TMA:Evt-SR-Inj-Ena-Sel.VAL"
|
||||
) # Alias AGETI-CVME-MASTER-TMA:Evt-26
|
||||
trig_pinger_h = PV(
|
||||
"AGETI-CVME-MASTER-TMA:Evt-SR-Pinger-H-Ena-Sel.VAL"
|
||||
) # Alias AGETI-CVME-MASTER-TMA:Evt-14-Ena-Sel
|
||||
trig_pinger_v = PV(
|
||||
"AGETI-CVME-MASTER-TMA:Evt-SR-Pinger-V-Ena-Sel.VAL"
|
||||
) # Alias AGETI-CVME-MASTER-TMA:Evt-14-Ena-Sel
|
||||
|
||||
# # injection follow bucket workaround for linac (https://elog-gfa.psi.ch/SLS/64299)
|
||||
# # Before making injection, disable the LLRF phase feedback ...
|
||||
# linac_llrf_phaseFB1 = PV('ALIRF-A1-LLE-DSP:PHASE-FB-SWITCH.VAL')
|
||||
# linac_llrf_phaseFB2 = PV('ALIRF-A2-LLE-DSP:PHASE-FB-SWITCH.VAL')
|
||||
# # ... and disable the phase alarm by setting the phase limits
|
||||
# linac_llrf_phaseFB_PBU_HIHI = PV('ALIRF-PBU:Ph-COMP.HIHI')
|
||||
# linac_llrf_phaseFB_FBU_HIHI = PV('ALIRF-FBU:Ph-COMP.HIHI')
|
||||
# linac_llrf_phaseFB_MOD1_HIHI = PV('ALIRF-AS-1:Ph-COMP.HIHI')
|
||||
# linac_llrf_phaseFB_MOD2_HIHI = PV('ALIRF-AS-2:Ph-COMP.HIHI')
|
||||
# linac_llrf_phaseFB_PBU_LOLO = PV('ALIRF-PBU:Ph-COMP.LOLO')
|
||||
# linac_llrf_phaseFB_FBU_LOLO = PV('ALIRF-FBU:Ph-COMP.LOLO')
|
||||
# linac_llrf_phaseFB_MOD1_LOLO = PV('ALIRF-AS-1:Ph-COMP.LOLO')
|
||||
# linac_llrf_phaseFB_MOD2_LOLO = PV('ALIRF-AS-2:Ph-COMP.LOLO')
|
||||
|
||||
gun_grid = PV("ALIRF-GUN-GRID:V-SET.VAL")
|
||||
# pinger_v = PV('ARS01-MKIK-0320:CTRL-ON-OFF.VAL')
|
||||
# pinger_h = PV('ARS01-MKIK-0290:CTRL-ON-OFF.VAL')
|
||||
|
||||
topup_dt = PV("AGEBD-SCRUBBING:TOPUP-DELTAT.VAL")
|
||||
topup_dI = PV("AGEBD-SCRUBBING:TOPUP-DELTAI.VAL")
|
||||
topup_tau = PV("AGEBD-SCRUBBING:TOPUP-TAU.VAL")
|
||||
|
||||
def __init__(self, service_name: str, pv_factory=PV):
|
||||
super().__init__(service_name, pv_factory)
|
||||
PV = pv_factory
|
||||
|
||||
# Service Callback PVs
|
||||
self.CallbackPV = PV("AGETI-CVME-MASTER-TMA:Evt-Old-BO-SYN.VALA", auto_monitor=True)
|
||||
|
||||
|
||||
class Service:
|
||||
def __init__(self, pvs: PVs):
|
||||
self.pvs = pvs
|
||||
|
||||
self.pvs.started.put(str(datetime.now())[:-7])
|
||||
self.pvs.version.put(__version__)
|
||||
self.pvs.info.put("initialized")
|
||||
|
||||
self.cycles_BOIN_sp = pvs.cycles_BOIN_sp.get()
|
||||
self.cycles_BOIN_rb = pvs.cycles_BOIN_rb.get()
|
||||
self.cycles_BOIN_cnt = pvs.cycles_BOIN_cnt.get()
|
||||
self.cycles_BOMB_sp = pvs.cycles_BOMB_sp.get()
|
||||
self.cycles_BOMB_rb = pvs.cycles_BOMB_rb.get()
|
||||
self.cycles_BOMB_cnt = pvs.cycles_BOMB_cnt.get()
|
||||
self.cycles_BOME_sp = pvs.cycles_BOME_sp.get()
|
||||
self.cycles_BOME_rb = pvs.cycles_BOME_rb.get()
|
||||
self.cycles_BOME_cnt = pvs.cycles_BOME_cnt.get()
|
||||
self.cycles_BOEX_sp = pvs.cycles_BOEX_sp.get()
|
||||
self.cycles_BOEX_rb = pvs.cycles_BOEX_rb.get()
|
||||
self.cycles_BOEX_cnt = pvs.cycles_BOEX_cnt.get()
|
||||
self.cycles_SRIN_sp = pvs.cycles_SRIN_sp.get()
|
||||
self.cycles_SRIN_rb = pvs.cycles_SRIN_rb.get()
|
||||
self.cycles_SRIN_cnt = pvs.cycles_SRIN_cnt.get()
|
||||
self.timerthreadready = 1
|
||||
|
||||
self.cycles_max = np.nanmax(
|
||||
[
|
||||
self.cycles_BOIN_sp,
|
||||
self.cycles_BOMB_sp,
|
||||
self.cycles_BOME_sp,
|
||||
self.cycles_BOEX_sp,
|
||||
self.cycles_SRIN_sp,
|
||||
]
|
||||
)
|
||||
|
||||
self.cycles_rem = self.cycles_max
|
||||
|
||||
self.wait4warm = {
|
||||
"AGETI-CVME-MASTER-TMA:Evt-BO-Inj-EVRCount-I.VAL": 0,
|
||||
"AGETI-CVME-MASTER-TMA:Evt-BO-MA-B-EVRCount-I.VAL": 0,
|
||||
"AGETI-CVME-MASTER-TMA:Evt-BO-Ramp-EVRCount-I.VAL": 0,
|
||||
"AGETI-CVME-MASTER-TMA:Evt-BO-Ext-EVRCount-I.VAL": 0,
|
||||
"AGETI-CVME-MASTER-TMA:Evt-SR-Inj-EVRCount-I.VAL": 0,
|
||||
}
|
||||
|
||||
self.vac = np.max([pv.get() for pv in pvs.vacs])
|
||||
# self.vac_acc = pvs.vac_acc.get()
|
||||
self.vac_acc = np.max([pv.get() for pv in pvs.vac_acc])
|
||||
# self.vac = pvs.vac_fe.get()
|
||||
self.vac_array = np.repeat(self.vac_acc, 10)
|
||||
self.vac_dyn = self.vac * pvs.vac_dyn_frac.get()
|
||||
pvs.vac_dyn.put(self.vac_dyn * 1e9)
|
||||
self.cur = 420
|
||||
self.scrubbi = pvs.scrubbing.get()
|
||||
self.scrubbilast = self.scrubbi
|
||||
|
||||
self.mbfbx_sp = int(pvs.mbfbx_gain_sp.get())
|
||||
self.mbfby_sp = int(pvs.mbfby_gain_sp.get())
|
||||
self.mbfby_sweepfreq_rb = np.round(pvs.mbfby_sweepfreq_rb.get())
|
||||
|
||||
self.topup_t0 = perf_counter()
|
||||
self.topup_I0 = pvs.cur_min.get()
|
||||
self.topup_dI = 0.0
|
||||
self.topup_dt = 0.0
|
||||
|
||||
def getcurr(self):
|
||||
pvs = self.pvs
|
||||
|
||||
self.cur = pvs.cur.get()
|
||||
|
||||
# def start_linac_phasefeedback(self):
|
||||
|
||||
# # injection follow bucket workaround for linac (https://elog-gfa.psi.ch/SLS/64299)
|
||||
# # Before making injection, disable the LLRF phase alarms and feedback ...
|
||||
# pvs.linac_llrf_phaseFB1.put(1)
|
||||
# pvs.linac_llrf_phaseFB2.put(1)
|
||||
|
||||
# pvs.linac_llrf_phaseFB_PBU_HIHI.put(10)
|
||||
# pvs.linac_llrf_phaseFB_FBU_HIHI.put(10)
|
||||
# pvs.linac_llrf_phaseFB_MOD1_HIHI.put(10)
|
||||
# pvs.linac_llrf_phaseFB_MOD2_HIHI.put(10)
|
||||
# pvs.linac_llrf_phaseFB_PBU_LOLO.put(-10)
|
||||
# pvs.linac_llrf_phaseFB_FBU_LOLO.put(-10)
|
||||
# pvs.linac_llrf_phaseFB_MOD1_LOLO.put(-10)
|
||||
# pvs.linac_llrf_phaseFB_MOD2_LOLO.put(-10)
|
||||
# print('phaseFB ON')
|
||||
|
||||
def update(self):
|
||||
pvs = self.pvs
|
||||
|
||||
# (re-)load input PVs
|
||||
self.injection = pvs.injactive.get()
|
||||
self.vac = np.max([pv.get() for pv in pvs.vacs])
|
||||
self.vac_acc = np.max([pv.get() for pv in pvs.vac_acc])
|
||||
|
||||
self.getcurr()
|
||||
|
||||
self.trig_master = pvs.trig_master.get() and pvs.trig_secret.get()
|
||||
self.master_mode = pvs.master_mode.get()
|
||||
self.injguard = pvs.injguard.get()
|
||||
self.info = pvs.info.get().split(",")[0]
|
||||
self.tau = pvs.tau.get()
|
||||
|
||||
# (re-)load control PVs
|
||||
self.vac_max = pvs.vac_max.get() * 1e-9
|
||||
self.vac_dyn = np.max(self.vac_array[:5]) * pvs.vac_dyn_frac.get()
|
||||
pvs.vac_dyn.put(self.vac_dyn * 1e9)
|
||||
|
||||
# roll oldest value arr[0] to end, i.e., arr[-1]
|
||||
self.vac_array = np.roll(self.vac_array, -2)
|
||||
# replace oldest value with new value
|
||||
self.vac_array[-2:] = self.vac_acc
|
||||
|
||||
self.mbfbx_sp = int(pvs.mbfbx_gain_sp.get())
|
||||
self.mbfby_sp = int(pvs.mbfby_gain_sp.get())
|
||||
|
||||
self.vac_min = pvs.vac_min.get() * 1e-9
|
||||
self.cur_max = pvs.cur_max.get()
|
||||
self.cur_min = pvs.cur_min.get()
|
||||
self.grid_accum = pvs.grid_accum.get()
|
||||
self.grid_fpfb = pvs.grid_fpfb.get()
|
||||
self.scrubbilast = self.scrubbi
|
||||
self.scrubbi = pvs.scrubbing.get()
|
||||
|
||||
self.conditions_start_injection = ( # is any lower limit reached?
|
||||
self.vac <= self.vac_min or self.cur <= self.cur_min
|
||||
) and ( # is no upper limit exceeded ?
|
||||
self.cur <= self.cur_max and self.vac <= self.vac_max and self.vac_acc <= self.vac_dyn
|
||||
)
|
||||
|
||||
self.conditions_stop_injection = (
|
||||
# is upper current limit reached/exceeded?
|
||||
self.cur >= self.cur_max or self.vac >= self.vac_max
|
||||
)
|
||||
|
||||
self.conditions_abort_injection = (
|
||||
# is any upper limit reached/exceeded?
|
||||
self.vac_acc >= self.vac_dyn or self.cur > self.cur_max * 1.02
|
||||
# or self.injguard != 1
|
||||
)
|
||||
|
||||
def stop_injection(self):
|
||||
pvs = self.pvs
|
||||
|
||||
# disable super duper master fire trigger
|
||||
pvs.trig_firego.put(0)
|
||||
|
||||
# stop injection events
|
||||
pvs.trig_booinj.put(0)
|
||||
pvs.trig_bormp1.put(0)
|
||||
pvs.trig_bormp2.put(0)
|
||||
pvs.trig_booext.put(0)
|
||||
pvs.trig_rininj.put(0)
|
||||
|
||||
self.injection = 0
|
||||
|
||||
# prepare top-up analysis
|
||||
self.topup_I0 = self.cur
|
||||
self.topup_t0 = perf_counter()
|
||||
|
||||
# # create thread that restarts phase feedback after 2 seconds
|
||||
# if self.timerthreadready:
|
||||
|
||||
# tt = threading.Timer(10, self.start_linac_phasefeedback)
|
||||
# tt.start()
|
||||
# print('threadtimer started....')
|
||||
# self.timerthreadready = 0
|
||||
|
||||
def start_injection(self):
|
||||
pvs = self.pvs
|
||||
|
||||
# # injection follow bucket workaround for linac (https://elog-gfa.psi.ch/SLS/64299)
|
||||
# # Before making injection, disable the LLRF phase alarms and feedback ...
|
||||
# pvs.linac_llrf_phaseFB_PBU_HIHI.put(360)
|
||||
# pvs.linac_llrf_phaseFB_FBU_HIHI.put(360)
|
||||
# pvs.linac_llrf_phaseFB_MOD1_HIHI.put(360)
|
||||
# pvs.linac_llrf_phaseFB_MOD2_HIHI.put(360)
|
||||
# pvs.linac_llrf_phaseFB_PBU_LOLO.put(-360)
|
||||
# pvs.linac_llrf_phaseFB_FBU_LOLO.put(-360)
|
||||
# pvs.linac_llrf_phaseFB_MOD1_LOLO.put(-360)
|
||||
# pvs.linac_llrf_phaseFB_MOD2_LOLO.put(-360)
|
||||
# pvs.linac_llrf_phaseFB1.put(0)
|
||||
# pvs.linac_llrf_phaseFB2.put(0)
|
||||
# print('phaseFB OFF')
|
||||
# self.timerthreadready = 1
|
||||
# sleep(0.5)
|
||||
|
||||
# enable super duper master fire trigger
|
||||
pvs.trig_firego.put(1)
|
||||
|
||||
def prepare_injection(self):
|
||||
pvs = self.pvs
|
||||
|
||||
# ensure correct injector settings
|
||||
if self.cur > pvs.current_threshold.get():
|
||||
pvs.gun_grid.put(self.grid_fpfb)
|
||||
else:
|
||||
pvs.gun_grid.put(self.grid_accum)
|
||||
|
||||
self.cycles_BOIN_rb = (
|
||||
self.cycles_BOIN_sp - self.wait4warm["AGETI-CVME-MASTER-TMA:Evt-BO-Inj-EVRCount-I.VAL"]
|
||||
)
|
||||
self.cycles_BOMB_rb = (
|
||||
self.cycles_BOMB_sp - self.wait4warm["AGETI-CVME-MASTER-TMA:Evt-BO-MA-B-EVRCount-I.VAL"]
|
||||
)
|
||||
self.cycles_BOME_rb = (
|
||||
self.cycles_BOME_sp - self.wait4warm["AGETI-CVME-MASTER-TMA:Evt-BO-Ramp-EVRCount-I.VAL"]
|
||||
)
|
||||
self.cycles_BOEX_rb = (
|
||||
self.cycles_BOEX_sp - self.wait4warm["AGETI-CVME-MASTER-TMA:Evt-BO-Ext-EVRCount-I.VAL"]
|
||||
)
|
||||
self.cycles_SRIN_rb = (
|
||||
self.cycles_SRIN_sp - self.wait4warm["AGETI-CVME-MASTER-TMA:Evt-SR-Inj-EVRCount-I.VAL"]
|
||||
)
|
||||
|
||||
self.cycles_rem = np.nanmax(
|
||||
[
|
||||
self.cycles_BOIN_rb,
|
||||
self.cycles_BOMB_rb,
|
||||
self.cycles_BOME_rb,
|
||||
self.cycles_BOEX_rb,
|
||||
self.cycles_SRIN_rb,
|
||||
]
|
||||
)
|
||||
|
||||
if self.cycles_rem == self.cycles_BOIN_sp:
|
||||
pvs.trig_booinj.put(1)
|
||||
if self.cycles_rem == self.cycles_BOMB_sp:
|
||||
pvs.trig_bormp1.put(1)
|
||||
if self.cycles_rem == self.cycles_BOME_sp:
|
||||
pvs.trig_bormp2.put(1)
|
||||
if self.cycles_rem == self.cycles_BOEX_sp:
|
||||
pvs.trig_booext.put(1)
|
||||
if self.cycles_rem == self.cycles_SRIN_sp:
|
||||
pvs.trig_rininj.put(1)
|
||||
|
||||
pvs.cycles_BOIN_rb.put(self.cycles_BOIN_rb)
|
||||
pvs.cycles_BOMB_rb.put(self.cycles_BOMB_rb)
|
||||
pvs.cycles_BOME_rb.put(self.cycles_BOME_rb)
|
||||
pvs.cycles_BOEX_rb.put(self.cycles_BOEX_rb)
|
||||
pvs.cycles_SRIN_rb.put(self.cycles_SRIN_rb)
|
||||
|
||||
def start_scrubbing(self):
|
||||
pvs = self.pvs
|
||||
|
||||
if self.scrubbi == 1:
|
||||
pvs.trig_pinger_v.put(1)
|
||||
elif self.scrubbi == 2:
|
||||
pvs.trig_pinger_h.put(1)
|
||||
elif self.scrubbi == 3:
|
||||
pvs.trig_pinger_v.put(1)
|
||||
pvs.trig_pinger_h.put(1)
|
||||
elif self.scrubbi == 4:
|
||||
for i in range(self.mbfby_sp):
|
||||
pvs.mbfby_gain.put(i + 1)
|
||||
sleep(0.05)
|
||||
elif self.scrubbi == 5:
|
||||
for i in range(self.mbfbx_sp):
|
||||
pvs.mbfbx_gain.put(i + 1)
|
||||
sleep(0.05)
|
||||
elif self.scrubbi == 6:
|
||||
for i in range(self.mbfby_sp):
|
||||
pvs.mbfby_gain.put(i + 1)
|
||||
sleep(0.05)
|
||||
for i in range(self.mbfbx_sp):
|
||||
pvs.mbfbx_gain.put(i + 1)
|
||||
sleep(0.05)
|
||||
elif self.scrubbi == 7:
|
||||
for i in range(self.mbfby_sp):
|
||||
pvs.mbfby_gain.put(i + 1)
|
||||
sleep(0.05)
|
||||
pvs.mbfby_sweep_onoff.put(1)
|
||||
|
||||
print("scrubbing started...")
|
||||
|
||||
def stop_scrubbing(self):
|
||||
pvs = self.pvs
|
||||
|
||||
pvs.mbfbx_gain.put(0)
|
||||
pvs.mbfby_gain.put(0)
|
||||
pvs.trig_pinger_h.put(0)
|
||||
pvs.trig_pinger_v.put(0)
|
||||
|
||||
if self.scrubbi == 7:
|
||||
self.mbfby_sweepfreq_rb = np.round(pvs.mbfby_sweepfreq_rb.get())
|
||||
pvs.mbfby_sweep_onoff.put(0)
|
||||
pvs.mbfby_sweepfreq_start.put(self.mbfby_sweepfreq_rb)
|
||||
pvs.mbfby_freq_sp.put(self.mbfby_sweepfreq_rb)
|
||||
|
||||
def pause_scrubbing(self):
|
||||
pvs = self.pvs
|
||||
|
||||
if self.scrubbi > 0:
|
||||
pvs.mbfbx_gain.put(0)
|
||||
pvs.mbfby_gain.put(0)
|
||||
pvs.trig_pinger_h.put(0)
|
||||
pvs.trig_pinger_v.put(0)
|
||||
|
||||
if self.scrubbi == 7:
|
||||
self.mbfby_sweepfreq_rb = np.round(pvs.mbfby_sweepfreq_rb.get())
|
||||
pvs.mbfby_sweep_onoff.put(0)
|
||||
pvs.mbfby_sweepfreq_start.put(self.mbfby_sweepfreq_rb)
|
||||
pvs.mbfby_freq_sp.put(self.mbfby_sweepfreq_rb)
|
||||
|
||||
def set_status(self, status, wait=0):
|
||||
pvs = self.pvs
|
||||
|
||||
if self.info != status:
|
||||
self.info = status
|
||||
|
||||
if wait == 0:
|
||||
pvs.info.put(status)
|
||||
|
||||
if wait > 0:
|
||||
pvs.info.put(status + ", Wait {:.0f}s".format(wait))
|
||||
|
||||
## define some "static" class attributes, i.e., persistent over every class call v = vals()
|
||||
# trigger for execution of loop (controlled by PV callback)
|
||||
ChangeTrue = 0
|
||||
# current state of callback
|
||||
CallbackActive = 0
|
||||
# start time for next loop firing, if no vacuum changes
|
||||
tl = perf_counter()
|
||||
# waittime before injection after preparation
|
||||
tp = perf_counter()
|
||||
# status for GUI message
|
||||
status = "Service Restarted"
|
||||
# injection abort status
|
||||
abort = 0
|
||||
# injection abort timer
|
||||
abort_t0 = perf_counter()
|
||||
# states of state machine
|
||||
states = {
|
||||
"abort": "Injection Abort",
|
||||
"decay + scrub": "Decaying Beam, Scrub ON",
|
||||
"decay - scrub": "Decaying Beam, Scrub OFF",
|
||||
"inject": "Injecting",
|
||||
"wait 4 master": "Waiting for Master Trigger",
|
||||
"wait 4 manual": "Master Manual Mode Required",
|
||||
"warmup": "Top Up Save Warmup",
|
||||
"pause": "Service Paused",
|
||||
}
|
||||
|
||||
# define callback function to trigger loop execution on change of corresponding pv change
|
||||
def InjectionCallback(self, pvname=None, value=None, char_value=None, **kw):
|
||||
# trigger execution of loop with actual callback since execution of code here not reliable
|
||||
self.ChangeTrue += 1
|
||||
|
||||
def WarmupCallback(self, pvname=None, value=None, char_value=None, **kw):
|
||||
# trigger execution of loop with actual callback since execution of code here not reliable
|
||||
self.wait4warm[pvname] += 1
|
||||
self.ChangeTrue += 1
|
||||
@@ -0,0 +1,8 @@
|
||||
from agebd_scrubbing import PVs, Service
|
||||
|
||||
|
||||
def test_app():
|
||||
service_name = "DUMMY"
|
||||
pvs = PVs(service_name=service_name)
|
||||
service = Service(pvs=pvs)
|
||||
service.update()
|
||||
Generated
+301
@@ -0,0 +1,301 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "h5py" },
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "h5py", specifier = ">=3.16.0" },
|
||||
{ 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-scrubbing"
|
||||
version = "0.1.0"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "agebd" },
|
||||
{ name = "numpy" },
|
||||
]
|
||||
|
||||
[package.dev-dependencies]
|
||||
dev = [
|
||||
{ name = "pyepics" },
|
||||
{ name = "pytest" },
|
||||
{ name = "ruff" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "agebd", editable = "../../../../packages/agebd" },
|
||||
{ name = "numpy", specifier = ">=2.2.6" },
|
||||
]
|
||||
|
||||
[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 = "h5py"
|
||||
version = "3.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/db/33/acd0ce6863b6c0d7735007df01815403f5589a21ff8c2e1ee2587a38f548/h5py-3.16.0.tar.gz", hash = "sha256:a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738", size = 446526, upload-time = "2026-03-06T13:49:08.07Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e06f864bedb2c8e7c1358e6c73af48519e317457c444d6f3d332bb4e8fa6d7d9", size = 3724137, upload-time = "2026-03-06T13:47:35.242Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec86d4fffd87a0f4cb3d5796ceb5a50123a2a6d99b43e616e5504e66a953eca3", size = 3090112, upload-time = "2026-03-06T13:47:37.634Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/f5/e15b3d0dc8a18e56409a839e6468d6fb589bc5207c917399c2e0706eeb44/h5py-3.16.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:86385ea895508220b8a7e45efa428aeafaa586bd737c7af9ee04661d8d84a10d", size = 4844847, upload-time = "2026-03-06T13:47:39.811Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8975273c2c5921c25700193b408e28d6bdd0111c37468b2d4e25dcec4cd1d84d", size = 5065352, upload-time = "2026-03-06T13:47:41.489Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/ae/f2adc5d0ca9626db3277a3d87516e124cbc5d0eea0bd79bc085702d04f2c/h5py-3.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1677ad48b703f44efc9ea0c3ab284527f81bc4f318386aaaebc5fede6bbae56f", size = 4839173, upload-time = "2026-03-06T13:47:43.586Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/0b/e0c8c69da1d8838da023a50cd3080eae5d475691f7636b35eff20bb6ef20/h5py-3.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c4dd4cf5f0a4e36083f73172f6cfc25a5710789269547f132a20975bfe2434c", size = 5076216, upload-time = "2026-03-06T13:47:45.315Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdef06507725b455fccba9c16529121a5e1fbf56aa375f7d9713d9e8ff42454d", size = 3183639, upload-time = "2026-03-06T13:47:47.041Z" },
|
||||
]
|
||||
|
||||
[[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" },
|
||||
]
|
||||
@@ -0,0 +1,4 @@
|
||||
file SCRUBBING.template {
|
||||
pattern { DEVICE }
|
||||
{ AGEBD-SCRUBBING{{ agebd_env }} }
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,290 @@
|
||||
# HLA Service Control Parameters
|
||||
|
||||
record(mbbo, "$(DEVICE):CONTROL-SCRUB") {
|
||||
field(DESC, "Scrubbing Mode")
|
||||
field(ASG, "PROTECTED")
|
||||
field(ZRST, "Off")
|
||||
field(ZRVL, "0")
|
||||
field(ONST, "Vertical Pinger")
|
||||
field(ONVL, "1")
|
||||
field(TWST, "Horizontal Pingers")
|
||||
field(TWVL, "2")
|
||||
field(THST, "Both Pingers")
|
||||
field(THVL, "3")
|
||||
field(FRST, "Vertical MBFB")
|
||||
field(FRVL, "4")
|
||||
field(FVST, "Horizontal MBFB")
|
||||
field(FVVL, "5")
|
||||
field(SXST, "Both MBFBs")
|
||||
field(SXVL, "6")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):CONTROL-VACUUM-MAX") {
|
||||
field(DESC, "Stop injection at this vacuum pressure")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "1e-9 mbar")
|
||||
field(VAL, "360")
|
||||
field(PREC, "3")
|
||||
field(FLNK, "$(DEVICE):CONTROL-VACUUM-MAX-PLOT")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):CONTROL-VACUUM-DYN") {
|
||||
field(DESC, "Stop injection at this vacuum pressure")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "1e-9 mbar")
|
||||
field(VAL, "27")
|
||||
field(PREC, "3")
|
||||
field(FLNK, "$(DEVICE):CONTROL-VACUUM-DYN-PLOT")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):CONTROL-VACUUM-DYN-FRAC") {
|
||||
field(DESC, "Fraction defining dynamic pressure ")
|
||||
field(ASG, "PROTECTED")
|
||||
field(VAL, "1.2")
|
||||
field(PREC, "3")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):CONTROL-VACUUM-MIN") {
|
||||
field(DESC, "Start injection at this vacuum pressure")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "1e-9 mbar")
|
||||
field(VAL, "0")
|
||||
field(PREC, "3")
|
||||
field(FLNK, "$(DEVICE):CONTROL-VACUUM-MIN-PLOT")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(calc, "$(DEVICE):CONTROL-VACUUM-MAX-PLOT") {
|
||||
field(DESC, "Stop injection at this vacuum pressure")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mbar")
|
||||
field(PREC, "-5")
|
||||
field(CALC, "A/1e9")
|
||||
field(INPA, "$(DEVICE):CONTROL-VACUUM-MAX")
|
||||
}
|
||||
|
||||
record(calc, "$(DEVICE):CONTROL-VACUUM-DYN-PLOT") {
|
||||
field(DESC, "Stop injection at this vacuum pressure")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mbar")
|
||||
field(PREC, "-5")
|
||||
field(CALC, "A/1e9")
|
||||
field(INPA, "$(DEVICE):CONTROL-VACUUM-DYN")
|
||||
}
|
||||
|
||||
record(calc, "$(DEVICE):CONTROL-VACUUM-MIN-PLOT") {
|
||||
field(DESC, "Stop injection at this vacuum pressure")
|
||||
field(ASG, "READONLY")
|
||||
field(EGU, "mbar")
|
||||
field(PREC, "-5")
|
||||
field(CALC, "A/1e9")
|
||||
field(INPA, "$(DEVICE):CONTROL-VACUUM-MIN")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):CONTROL-CURRENT-MAX") {
|
||||
field(DESC, "Stop injection at this current")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "mA")
|
||||
field(VAL, "403")
|
||||
field(PREC, "3")
|
||||
field(PINI, "YES")
|
||||
field(DRVH, "425")
|
||||
field(DRVL, "0")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):CONTROL-CURRENT-MIN") {
|
||||
field(DESC, "Start injection at this current")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "mA")
|
||||
field(VAL, "400")
|
||||
field(PREC, "3")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):CONTROL-TIME-MAX") {
|
||||
field(DESC, "Stop injection after this time")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "s")
|
||||
field(VAL, "30")
|
||||
field(PREC, "3")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):CONTROL-TIME-MIN") {
|
||||
field(DESC, "Start injection after this time")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "s")
|
||||
field(VAL, "300")
|
||||
field(PREC, "3")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):MBFBY-GAIN-SP") {
|
||||
field(DESC, "MBFBy Gain SP for scrubbing")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "%")
|
||||
field(VAL, "1")
|
||||
field(PREC, "3")
|
||||
field(PINI, "YES")
|
||||
field(DRVH, "100")
|
||||
field(DRVL, "0")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):MBFBX-GAIN-SP") {
|
||||
field(DESC, "MBFBx Gain SP for scrubbing")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "%")
|
||||
field(VAL, "1")
|
||||
field(PREC, "3")
|
||||
field(PINI, "YES")
|
||||
field(DRVH, "100")
|
||||
field(DRVL, "0")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):CONTROL-GUNGRID-ACCUM") {
|
||||
field(DESC, "Gungrid val for accumulation")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "V")
|
||||
field(VAL, "100")
|
||||
field(PREC, "3")
|
||||
field(PINI, "YES")
|
||||
field(DRVH, "180")
|
||||
field(DRVL, "40")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):CONTROL-GUNGRID-FPFB") {
|
||||
field(DESC, "Gungrid val for FPFB Injection")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "V")
|
||||
field(VAL, "160")
|
||||
field(PREC, "3")
|
||||
field(PINI, "YES")
|
||||
field(DRVH, "180")
|
||||
field(DRVL, "40")
|
||||
}
|
||||
|
||||
# HLA Service Output/Result Parameters
|
||||
|
||||
record(ao, "$(DEVICE):TOPUP-TAU") {
|
||||
field(DESC, "Average tau since last top up")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "h")
|
||||
field(VAL, "100")
|
||||
field(PREC, "3")
|
||||
field(VAL, "-1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):TOPUP-DELTAT") {
|
||||
field(DESC, "Time since last top up")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "min")
|
||||
field(VAL, "100")
|
||||
field(PREC, "3")
|
||||
field(VAL, "-1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):TOPUP-DELTAI") {
|
||||
field(DESC, "Current change since last top up")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "mA")
|
||||
field(VAL, "100")
|
||||
field(PREC, "3")
|
||||
field(VAL, "-1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):WARMUPCYCLES-BOIN-SP") {
|
||||
field(DESC, "Warmup cycles for booster injection")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "")
|
||||
field(VAL, "15")
|
||||
field(PREC, "1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):WARMUPCYCLES-BOMB-SP") {
|
||||
field(DESC, "Warmup cycles for ABOMA-B")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "")
|
||||
field(VAL, "5")
|
||||
field(PREC, "1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):WARMUPCYCLES-BOME-SP") {
|
||||
field(DESC, "Warmup cycles for ABOMA-ELSE")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "")
|
||||
field(VAL, "15")
|
||||
field(PREC, "1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):WARMUPCYCLES-BOEX-SP") {
|
||||
field(DESC, "Warmup cycles for booster extraction")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "")
|
||||
field(VAL, "15")
|
||||
field(PREC, "1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):WARMUPCYCLES-SRIN-SP") {
|
||||
field(DESC, "Warmup cycles for SR Injection")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "")
|
||||
field(VAL, "15")
|
||||
field(PREC, "1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):WARMUPCYCLES-BOIN-RB") {
|
||||
field(DESC, "Warmup cycles for booster injection")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "")
|
||||
field(VAL, "15")
|
||||
field(PREC, "1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):WARMUPCYCLES-BOMB-RB") {
|
||||
field(DESC, "Warmup cycles for ABOMA-B")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "")
|
||||
field(VAL, "5")
|
||||
field(PREC, "1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):WARMUPCYCLES-BOME-RB") {
|
||||
field(DESC, "Warmup cycles for ABOMA-ELSE")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "")
|
||||
field(VAL, "15")
|
||||
field(PREC, "1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):WARMUPCYCLES-BOEX-RB") {
|
||||
field(DESC, "Warmup cycles for booster extraction")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "")
|
||||
field(VAL, "15")
|
||||
field(PREC, "1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):WARMUPCYCLES-SRIN-RB") {
|
||||
field(DESC, "Warmup cycles for SR Injection")
|
||||
field(ASG, "PROTECTED")
|
||||
field(EGU, "")
|
||||
field(VAL, "15")
|
||||
field(PREC, "1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
epicsEnvSet("ENGINEER", "armborst")
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=AGEBD-SERVICE-SCRUBBING
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Environment=AGEBD_ENV={{ agebd_env }}
|
||||
ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh SCRUBBING
|
||||
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-SCRUBBING.service
|
||||
# systemctl --user start AGEBD-SERVICE-SCRUBBING
|
||||
@@ -0,0 +1,48 @@
|
||||
[project]
|
||||
name = "agebd-shifttool"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-SHIFTTOOL Service"
|
||||
requires-python = "==3.10.*"
|
||||
dependencies = [
|
||||
"agebd",
|
||||
]
|
||||
# TODO: elog
|
||||
|
||||
[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"]
|
||||
@@ -0,0 +1 @@
|
||||
from .service import PVs, Service
|
||||
@@ -0,0 +1,31 @@
|
||||
import typer
|
||||
|
||||
from agebd.enums import LogLevel
|
||||
from agebd.runner import CallbackRunner
|
||||
from agebd.utils import init_logging
|
||||
from agebd_shifttool 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 = "SHIFTTOOL"
|
||||
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)
|
||||
@@ -0,0 +1,269 @@
|
||||
import locale
|
||||
import time
|
||||
from datetime import datetime
|
||||
from time import time
|
||||
|
||||
import elog
|
||||
|
||||
from agebd.pv import get_pv_class
|
||||
from agebd.service.base import BaseService
|
||||
from agebd.service.pvs import BasePVs
|
||||
from agebd.utils import printgetversion
|
||||
|
||||
# Setze die Locale auf Deutsch (z. B. 'de_DE' oder 'de_CH' für Schweiz)
|
||||
locale.setlocale(locale.LC_TIME, "de_CH.UTF-8") # oder 'de_CH.UTF-8'
|
||||
|
||||
__version__ = printgetversion(__file__)
|
||||
|
||||
PV = get_pv_class()
|
||||
|
||||
|
||||
class PVs(BasePVs):
|
||||
req_MakeElog = PV("AGEOP-SHIFTTOOL:REQ-SHIFT-ENTRY.VAL")
|
||||
req_UpdateTeam = PV("AGEOP-SHIFTTOOL:REQ-UPDATE-TEAM.VAL")
|
||||
|
||||
shift = PV("AGEOP-SHIFTTOOL:TXT-SHIFT.VAL")
|
||||
crew = PV("AGEOP-SHIFTTOOL:TXT-SHIFT-CREW.VAL")
|
||||
|
||||
operators = [
|
||||
PV("AGEOP-SHIFTTOOL:TXT-OPERATOR-01.VAL"),
|
||||
PV("AGEOP-SHIFTTOOL:TXT-OPERATOR-02.VAL"),
|
||||
PV("AGEOP-SHIFTTOOL:TXT-OPERATOR-03.VAL"),
|
||||
PV("AGEOP-SHIFTTOOL:TXT-OPERATOR-04.VAL"),
|
||||
PV("AGEOP-SHIFTTOOL:TXT-OPERATOR-05.VAL"),
|
||||
]
|
||||
links = {
|
||||
"Problem-01": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Problem-01.VAL"),
|
||||
"https://elog-gfa.psi.ch/sls/?cmd=Neu&pEintrag=Problem&pAutor=Rast%2C%20Streich%2C%20Weber&pEffekt=Downtime",
|
||||
],
|
||||
"Problem-02": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Problem-02.VAL"),
|
||||
"https://elog-gfa.psi.ch/sls/?cmd=Neu&pEintrag=Problem&pAutor=Rast%2C%20Streich%2C%20Weber&pEffekt=Beamdrop",
|
||||
],
|
||||
"Problem-03": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Problem-03.VAL"),
|
||||
"https://elog-gfa.psi.ch/sls/?cmd=Neu&pEintrag=Problem&pAutor=Rast%2C%20Streich%2C%20Weber&pEffekt=Lifetime",
|
||||
],
|
||||
"Problem-04": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Problem-04.VAL"),
|
||||
"https://elog-gfa.psi.ch/sls/?cmd=Neu&pEintrag=Problem&pAutor=Rast%2C%20Streich%2C%20Weber&pEffekt=Beamsize",
|
||||
],
|
||||
"Problem-05": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Problem-05.VAL"),
|
||||
"https://elog-gfa.psi.ch/sls/?cmd=Neu&pEintrag=Problem&pAutor=Rast%2C%20Streich%2C%20Weber&pEffekt=keiner",
|
||||
],
|
||||
"Problem-06": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Problem-06.VAL"),
|
||||
"https://elog-gfa.psi.ch/sls/?cmd=Neu&pEintrag=Problem&pAutor=Rast%2C%20Streich%2C%20Weber&pEffekt=anderer",
|
||||
],
|
||||
"Optimierung-01": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Optimierung-01.VAL"),
|
||||
"https://elog-gfa.psi.ch/sls/?cmd=Neu&pEintrag=Tuning&pAutor=Rast%2C%20Streich%2C%20Weber&pTitel=Optimierung%20Transfer",
|
||||
],
|
||||
"Optimierung-02": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Optimierung-02.VAL"),
|
||||
"https://elog-gfa.psi.ch/sls/?cmd=Neu&pEintrag=Tuning&pAutor=Rast%2C%20Streich%2C%20Weber&pTitel=Optimierung%20Tau%2FYsig",
|
||||
],
|
||||
"Optimierung-03": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Optimierung-03.VAL"),
|
||||
"https://elog-gfa.psi.ch/sls/?cmd=Neu&pEintrag=Tuning&pAutor=Rast%2C%20Streich%2C%20Weber&pTitel=Optimierung",
|
||||
],
|
||||
"Optimierung-04": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Optimierung-04.VAL"),
|
||||
"https://elog-gfa.psi.ch/sls/?cmd=Neu&pEintrag=Tuning&pAutor=Rast%2C%20Streich%2C%20Weber&pTitel=Optimierung",
|
||||
],
|
||||
"Optimierung-05": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Optimierung-05.VAL"),
|
||||
"https://elog-gfa.psi.ch/sls/?cmd=Neu&pEintrag=Tuning&pAutor=Rast%2C%20Streich%2C%20Weber&pTitel=Optimierung",
|
||||
],
|
||||
"Optimierung-06": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Optimierung-06.VAL"),
|
||||
"https://elog-gfa.psi.ch/sls/?cmd=Neu&pEintrag=Tuning&pAutor=Rast%2C%20Streich%2C%20Weber&pTitel=Optimierung",
|
||||
],
|
||||
"Piquet": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Piquet.VAL"),
|
||||
],
|
||||
"Info": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-Info.VAL"),
|
||||
],
|
||||
"AktuellesProtokoll": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-AktuellesProtokoll.VAL"),
|
||||
],
|
||||
"AndereEintraege-01": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-AndereEintraege-01.VAL"),
|
||||
],
|
||||
"AndereEintraege-02": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-AndereEintraege-02.VAL"),
|
||||
],
|
||||
"AndereEintraege-03": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-AndereEintraege-03.VAL"),
|
||||
],
|
||||
"ListenAnzeigen-01": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-ListenAnzeigen-01.VAL"),
|
||||
],
|
||||
"ListenAnzeigen-02": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-ListenAnzeigen-02.VAL"),
|
||||
],
|
||||
"ListenAnzeigen-03": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-ListenAnzeigen-03.VAL"),
|
||||
],
|
||||
"ListenAnzeigen-04": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-ListenAnzeigen-04.VAL"),
|
||||
],
|
||||
"PiquetWoche": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-PiquetWoche.VAL"),
|
||||
],
|
||||
"OffeneAuftraege": [
|
||||
PV("AGEOP-SHIFTTOOL:LINK-OffeneAuftraege.VAL"),
|
||||
],
|
||||
}
|
||||
|
||||
minisave = [
|
||||
PV("AGEBD-PARAMS:LIFETIME.VAL"),
|
||||
PV("AGEBD-DBPM3CURR:CURRENT-AVG.VAL"),
|
||||
PV("AGEBD-PARAMS:INJECTION-RATE.VAL"),
|
||||
PV("AGEBD-DBPM3CURR:ACCUMULATED-BEAM-DOSE.VAL"),
|
||||
PV("AGEOP-CPCL-TRANSMISSION:ICT-BRTL_2_BPM-RING.VAL"),
|
||||
PV("ARSGE-CECL-FOFB1:X-RMS-UM.VAL"),
|
||||
PV("ARSGE-CECL-FOFB1:Y-RMS-UM.VAL"),
|
||||
PV("X01DD-FE-ABS1:STATUS.VAL"),
|
||||
PV("X08DB-FE-ABS1:STATUS.VAL"),
|
||||
PV("X01DA-FE-ABS1:STATUS.VAL"),
|
||||
PV("X01DA-OP-PSYS:SH-A-OPEN.VAL"),
|
||||
PV("X02DA-FE-ABS1:STATUS.VAL"),
|
||||
PV("X02DA-OP-PSYS:SH-A-OPEN.VAL"),
|
||||
PV("X06DA-FE-ABS1:STATUS.VAL"),
|
||||
PV("X06DA-OP-PSYS:SH-A-OPEN.VAL"),
|
||||
PV("X07DA-FE-ABS1:STATUS.VAL"),
|
||||
PV("X07D-OP-PSYS:SH-A-OPEN.VAL"),
|
||||
PV("X07DB-FE-ABS1:STATUS.VAL"),
|
||||
PV("X07D-OP-PSYS:SH-B-OPEN.VAL"),
|
||||
PV("X10DA-FE-ABS1:STATUS.VAL"),
|
||||
PV("X10DA-OP-PSYS:SH-A-OPEN.VAL"),
|
||||
PV("X04SA-UIND:GAP-READ.VAL"),
|
||||
PV("X04SA-UIND:SCTRL.VAL"),
|
||||
PV("X06SA-UIND:GAP-READ.VAL"),
|
||||
PV("X06SA-UIND:SCTRL.VAL"),
|
||||
PV("X09LB-UIND:GAP-READ.VAL"),
|
||||
PV("X09LB-UIND:SCTRL.VAL"),
|
||||
PV("X10SA-UIND:GAP-READ.VAL"),
|
||||
PV("X10SA-UIND:SCTRL.VAL"),
|
||||
PV("X12SA-UIND:GAP-READ.VAL"),
|
||||
PV("X12SA-UIND:SCTRL.VAL"),
|
||||
]
|
||||
|
||||
NShiftTasks = PV("AGEOP-SHIFTTOOL:CNT-TODO.VAL")
|
||||
|
||||
def __init__(self, service_name: str, pv_factory=PV):
|
||||
super().__init__(service_name, pv_factory)
|
||||
PV = pv_factory
|
||||
|
||||
self.CallbackPV = PV("AGEOP-SHIFTTOOL:REQ-CALC.VAL")
|
||||
|
||||
|
||||
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)
|
||||
|
||||
# FACILITY = SLS
|
||||
self.logbook = elog.open(
|
||||
"https://elog-gfa.psi.ch/SLS/",
|
||||
user="robot",
|
||||
password="robot",
|
||||
use_ssl=True,
|
||||
)
|
||||
self.path = "/sls/op/data/applications/minisave/"
|
||||
|
||||
def minisave(self):
|
||||
|
||||
# table overview of current machine and beamline parameters
|
||||
|
||||
return
|
||||
|
||||
def update(self):
|
||||
pvs = self.pvs
|
||||
|
||||
if self.CallbackFired:
|
||||
self.req_UpdateTeam = pvs.req_UpdateTeam.get()
|
||||
self.req_MakeElog = pvs.req_MakeElog.get()
|
||||
print(self.req_UpdateTeam, self.req_MakeElog)
|
||||
|
||||
# if shift crew update request detected update current shift crew
|
||||
if self.req_UpdateTeam or self.req_MakeElog:
|
||||
pvs.req_UpdateTeam.put(0)
|
||||
print("Team aktualisieren")
|
||||
|
||||
self.logtxt = []
|
||||
self.logtxt.append("Eingetragene Mannschaft:")
|
||||
self.date = datetime.now()
|
||||
self.hour = int(self.date.strftime("%H"))
|
||||
|
||||
# Format the date
|
||||
self.day_abbr = self.date.strftime(
|
||||
"%a"
|
||||
) # Abbreviated weekday (e.g., "Mi" for Mittwoch)
|
||||
self.date_str = self.date.strftime(
|
||||
"%d-%b-%Y"
|
||||
) # Day-Month-Year (e.g., "17-Jun-2026")
|
||||
self.week_num = self.date.isocalendar()[1] # ISO calendar week number (e.g., 25)
|
||||
self.timestamp = f"{self.day_abbr} {self.date_str} KW{self.week_num}"
|
||||
|
||||
if self.hour > 4 and self.hour < 8:
|
||||
self.shift = "Früh-Schicht"
|
||||
elif self.hour > 12 and self.hour < 16:
|
||||
self.shift = "Spät-Schicht"
|
||||
elif self.hour > 20:
|
||||
self.shift = "Nacht-Schicht"
|
||||
else:
|
||||
self.shift = "Verschlafen"
|
||||
|
||||
self.shift += ", " + self.timestamp
|
||||
pvs.shift.put(self.shift)
|
||||
|
||||
self.operators = []
|
||||
for op in pvs.operators:
|
||||
op = op.get(as_string=True)
|
||||
if len(op) > 1:
|
||||
self.operators.append(op)
|
||||
|
||||
print(self.operators)
|
||||
self.crew = ", ".join(self.operators)
|
||||
pvs.crew.put(self.crew)
|
||||
self.logtxt.append(self.crew)
|
||||
print(self.crew)
|
||||
|
||||
# if shift entry request detected and current shift entry not yet made, make it
|
||||
if self.req_MakeElog:
|
||||
pvs.req_MakeElog.put(0)
|
||||
print("Schicht eintragen")
|
||||
|
||||
# Write to elog
|
||||
self.logtxt = "".join(self.logtxt)
|
||||
|
||||
self.dict_of_attributes = {
|
||||
"Wann": time(),
|
||||
"Autor": self.crew,
|
||||
"Eintrag": "Schicht-Übergabe",
|
||||
"Titel": self.shift,
|
||||
"Encoding": "html",
|
||||
}
|
||||
|
||||
print(" ...elog entry prepared...")
|
||||
|
||||
self.msg_id = self.logbook.post(
|
||||
self.logtxt,
|
||||
attributes=self.dict_of_attributes,
|
||||
suppress_email_notification=True,
|
||||
attribute_as_param="value",
|
||||
)
|
||||
print(" ...elog entry submitted...")
|
||||
|
||||
# callback done
|
||||
self.CallbackFired = 0
|
||||
@@ -0,0 +1,9 @@
|
||||
from agebd_shifttool 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()
|
||||
Generated
+297
@@ -0,0 +1,297 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "h5py" },
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "h5py", specifier = ">=3.16.0" },
|
||||
{ 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-shifttool"
|
||||
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 = "h5py"
|
||||
version = "3.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/db/33/acd0ce6863b6c0d7735007df01815403f5589a21ff8c2e1ee2587a38f548/h5py-3.16.0.tar.gz", hash = "sha256:a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738", size = 446526, upload-time = "2026-03-06T13:49:08.07Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e06f864bedb2c8e7c1358e6c73af48519e317457c444d6f3d332bb4e8fa6d7d9", size = 3724137, upload-time = "2026-03-06T13:47:35.242Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec86d4fffd87a0f4cb3d5796ceb5a50123a2a6d99b43e616e5504e66a953eca3", size = 3090112, upload-time = "2026-03-06T13:47:37.634Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/f5/e15b3d0dc8a18e56409a839e6468d6fb589bc5207c917399c2e0706eeb44/h5py-3.16.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:86385ea895508220b8a7e45efa428aeafaa586bd737c7af9ee04661d8d84a10d", size = 4844847, upload-time = "2026-03-06T13:47:39.811Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8975273c2c5921c25700193b408e28d6bdd0111c37468b2d4e25dcec4cd1d84d", size = 5065352, upload-time = "2026-03-06T13:47:41.489Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/ae/f2adc5d0ca9626db3277a3d87516e124cbc5d0eea0bd79bc085702d04f2c/h5py-3.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1677ad48b703f44efc9ea0c3ab284527f81bc4f318386aaaebc5fede6bbae56f", size = 4839173, upload-time = "2026-03-06T13:47:43.586Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/0b/e0c8c69da1d8838da023a50cd3080eae5d475691f7636b35eff20bb6ef20/h5py-3.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c4dd4cf5f0a4e36083f73172f6cfc25a5710789269547f132a20975bfe2434c", size = 5076216, upload-time = "2026-03-06T13:47:45.315Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdef06507725b455fccba9c16529121a5e1fbf56aa375f7d9713d9e8ff42454d", size = 3183639, upload-time = "2026-03-06T13:47:47.041Z" },
|
||||
]
|
||||
|
||||
[[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" },
|
||||
]
|
||||
@@ -0,0 +1,4 @@
|
||||
file SHIFTTOOL.template {
|
||||
pattern { DEVICE }
|
||||
{ AGEBD-SHIFTTOOL{{ agebd_env }} }
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
# TODO: does it have an ioc? (in A_OP?)
|
||||
@@ -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")
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
epicsEnvSet("ENGINEER", "armborst")
|
||||
@@ -0,0 +1,103 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="caNumeric" name="canumeric">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>60</y>
|
||||
<width>100</width>
|
||||
<height>50</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="integerDigits" stdset="0">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="decimalDigits" stdset="0">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string>AGEBD-SHIFTTOOL-DEV:AO</string>
|
||||
</property>
|
||||
<property name="maxValue">
|
||||
<double>9.000000000000000</double>
|
||||
</property>
|
||||
<property name="minValue">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="caToggleButton" name="catogglebutton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>601</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Toggle AGEBD-ALH-DEV:SHIFTTOOL-ONOFF</string>
|
||||
</property>
|
||||
<property name="channel" stdset="0">
|
||||
<string>AGEBD-ALH-DEV:SHIFTTOOL-ONOFF</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>6</x>
|
||||
<y>34</y>
|
||||
<width>401</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>13</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Value of AGEBD-SHIFTTOOL-DEV:AO</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>caNumeric</class>
|
||||
<extends>QFrame</extends>
|
||||
<header>caNumeric</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>caToggleButton</class>
|
||||
<extends>QCheckBox</extends>
|
||||
<header>caToggleButton</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -0,0 +1 @@
|
||||
# TODO: ui for this service...
|
||||
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=AGEBD-SERVICE-SHIFTTOOL
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Environment=AGEBD_ENV={{ agebd_env }}
|
||||
ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh SHIFTTOOL
|
||||
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-SHIFTTOOL.service
|
||||
# systemctl --user start AGEBD-SERVICE-SHIFTTOOL
|
||||
Generated
+23
-1
@@ -7,11 +7,15 @@ name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "h5py" },
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "typer", specifier = ">=0.23.2" }]
|
||||
requires-dist = [
|
||||
{ name = "h5py", specifier = ">=3.16.0" },
|
||||
{ name = "typer", specifier = ">=0.23.2" },
|
||||
]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
@@ -79,6 +83,24 @@ 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 = "h5py"
|
||||
version = "3.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/db/33/acd0ce6863b6c0d7735007df01815403f5589a21ff8c2e1ee2587a38f548/h5py-3.16.0.tar.gz", hash = "sha256:a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738", size = 446526, upload-time = "2026-03-06T13:49:08.07Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e06f864bedb2c8e7c1358e6c73af48519e317457c444d6f3d332bb4e8fa6d7d9", size = 3724137, upload-time = "2026-03-06T13:47:35.242Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec86d4fffd87a0f4cb3d5796ceb5a50123a2a6d99b43e616e5504e66a953eca3", size = 3090112, upload-time = "2026-03-06T13:47:37.634Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/f5/e15b3d0dc8a18e56409a839e6468d6fb589bc5207c917399c2e0706eeb44/h5py-3.16.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:86385ea895508220b8a7e45efa428aeafaa586bd737c7af9ee04661d8d84a10d", size = 4844847, upload-time = "2026-03-06T13:47:39.811Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8975273c2c5921c25700193b408e28d6bdd0111c37468b2d4e25dcec4cd1d84d", size = 5065352, upload-time = "2026-03-06T13:47:41.489Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/ae/f2adc5d0ca9626db3277a3d87516e124cbc5d0eea0bd79bc085702d04f2c/h5py-3.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1677ad48b703f44efc9ea0c3ab284527f81bc4f318386aaaebc5fede6bbae56f", size = 4839173, upload-time = "2026-03-06T13:47:43.586Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/0b/e0c8c69da1d8838da023a50cd3080eae5d475691f7636b35eff20bb6ef20/h5py-3.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c4dd4cf5f0a4e36083f73172f6cfc25a5710789269547f132a20975bfe2434c", size = 5076216, upload-time = "2026-03-06T13:47:45.315Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdef06507725b455fccba9c16529121a5e1fbf56aa375f7d9713d9e8ff42454d", size = 3183639, upload-time = "2026-03-06T13:47:47.041Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iniconfig"
|
||||
version = "2.3.0"
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
[project]
|
||||
name = "agebd-taupct"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-TAUPCT Service"
|
||||
requires-python = "==3.10.*"
|
||||
dependencies = [
|
||||
"agebd",
|
||||
"numpy>=2.2.6",
|
||||
]
|
||||
|
||||
[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"]
|
||||
@@ -0,0 +1 @@
|
||||
from .service import PVs, Service
|
||||
@@ -0,0 +1,31 @@
|
||||
import typer
|
||||
|
||||
from agebd.enums import LogLevel
|
||||
from agebd.runner import CallbackRunner
|
||||
from agebd.utils import init_logging
|
||||
from agebd_taupct 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 = "TAUPCT"
|
||||
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)
|
||||
@@ -0,0 +1,172 @@
|
||||
from time import sleep
|
||||
|
||||
import numpy as np
|
||||
from epics import dbr
|
||||
|
||||
from agebd.pv import get_pv_class
|
||||
from agebd.service.base import BaseService
|
||||
from agebd.service.pvs import BasePVs
|
||||
from agebd.utils import printgetversion
|
||||
|
||||
__version__ = printgetversion(__file__)
|
||||
|
||||
PV = get_pv_class()
|
||||
|
||||
|
||||
class PVs(BasePVs):
|
||||
## Service specific PVs from dedicated IOC
|
||||
NsamplesTAU = PV("AGEBD-TAUPCT:CONTROL-NSAMPLES-FIT-TAU.VAL")
|
||||
NsamplesROC = PV("AGEBD-TAUPCT:CONTROL-NSAMPLES-FIT-ROC.VAL")
|
||||
MinCurr = PV("AGEBD-TAUPCT:CONTROL-MIN-CURR.VAL")
|
||||
|
||||
# Output PVs
|
||||
inj_tau = PV("AGEBD-TAUPCT:TAU.VAL")
|
||||
inj_tau_err = PV("AGEBD-TAUPCT:TAU-ERR.VAL")
|
||||
inj_rate = PV("AGEBD-TAUPCT:INJRATE.VAL")
|
||||
inj_rate_err = PV("AGEBD-TAUPCT:INJRATE-ERR.VAL")
|
||||
|
||||
## Service specific PVs from other IOCs
|
||||
inj_active = PV("AGEBD-PARAMS:INJECTION-ACTIVE.VAL")
|
||||
dump_valve = PV("ARS01-VVPG-0210:PLC_STATUS.VAL")
|
||||
|
||||
def __init__(self, service_name: str, pv_factory=PV):
|
||||
super().__init__(service_name, pv_factory)
|
||||
PV = pv_factory
|
||||
|
||||
self.CallbackPV = PV("ARS07-CECL-DPCT0:CURR.VAL", auto_monitor=dbr.DBE_VALUE)
|
||||
# CallbackPV = PV('ARS07-DPCT-0000:AVG-CURR.VAL', auto_monitor = dbr.DBE_VALUE)
|
||||
# ARS07-DPCT-0000:CURR (5 Hz, i.e., dt = 0.2 s)
|
||||
# ARS07-DPCT-0000:AVG-CURR (5 Hz, i.e., dt = 0.2 s)
|
||||
|
||||
|
||||
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)
|
||||
|
||||
self.reset()
|
||||
|
||||
def reset(self):
|
||||
pvs = self.pvs
|
||||
|
||||
self.IterSinceReset = 0
|
||||
self.NsamplesTAU = int(pvs.NsamplesTAU.get())
|
||||
self.NsamplesROC = int(pvs.NsamplesROC.get())
|
||||
NsamplesMAX = int(np.nanmax([self.NsamplesTAU, self.NsamplesROC]))
|
||||
self.MinCurr = pvs.MinCurr.get()
|
||||
self.t = np.empty(NsamplesMAX)
|
||||
self.I = np.empty(NsamplesMAX)
|
||||
self.inj_active = pvs.inj_active.get()
|
||||
|
||||
def update(self):
|
||||
pvs = self.pvs
|
||||
|
||||
# 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
|
||||
|
||||
conditions_cb_invalid = (
|
||||
not self.inj_active == pvs.inj_active.get() # <-- injection status changed
|
||||
or self.CallbackValue < self.MinCurr # <-- stored beam
|
||||
or not 0 <= self.CallbackValue <= 500 # <-- measurement realistic
|
||||
)
|
||||
|
||||
# set values to zero and wait without beam
|
||||
if not pvs.dump_valve.get() == 1:
|
||||
pvs.inj_tau.put(np.nan)
|
||||
pvs.inj_tau_err.put(0.0)
|
||||
pvs.inj_rate.put(0.0)
|
||||
pvs.inj_rate_err.put(0.0)
|
||||
sleep(0.5)
|
||||
|
||||
elif conditions_cb_invalid:
|
||||
self.reset()
|
||||
print("Callback Invalid --> Reset ({:})".format(self.CallbackTimestamp))
|
||||
|
||||
else:
|
||||
self.t[:-1] = self.t[1:]
|
||||
self.I[:-1] = self.I[1:]
|
||||
self.t[-1] = self.CallbackTimestamp
|
||||
self.I[-1] = self.CallbackValue
|
||||
|
||||
self.IterSinceReset += 1
|
||||
|
||||
if (
|
||||
self.IterSinceReset > self.NsamplesROC
|
||||
and self.IterSinceReset > self.NsamplesTAU
|
||||
):
|
||||
t = self.t - self.t[0]
|
||||
|
||||
p, pcov = np.polyfit(t, self.I, 1, cov=True)
|
||||
perr = np.sqrt(np.diag(pcov))
|
||||
|
||||
injrate = p[0] * 60
|
||||
injrate_err = perr[0] * 60
|
||||
|
||||
pvs.inj_rate.put(injrate)
|
||||
pvs.inj_rate_err.put(injrate_err)
|
||||
|
||||
# injection rate in mA/hour to minimize risk of log(x) with x < 0:
|
||||
injrate = injrate * 60
|
||||
injrate_err = injrate_err * 60
|
||||
|
||||
# if injrate/p[1] < 1:
|
||||
if not self.inj_active and self.IterSinceReset > self.NsamplesTAU:
|
||||
tau = 1 / np.log(1 - injrate / p[1]) # (-dt in hours) / ln(1 - dI/I0)
|
||||
tau_err = injrate_err * (-1) / (
|
||||
(injrate - p[1]) * np.log(1 - injrate / p[1]) ** 2
|
||||
) + perr[1] * (injrate_err) / (
|
||||
p[1] * (injrate - p[1]) * np.log(1 - injrate / p[1]) ** 2
|
||||
)
|
||||
|
||||
pvs.inj_tau.put(tau)
|
||||
pvs.inj_tau_err.put(tau_err)
|
||||
|
||||
elif self.IterSinceReset > self.NsamplesROC:
|
||||
t = self.t[-self.NsamplesROC :]
|
||||
I = self.I[-self.NsamplesROC :]
|
||||
|
||||
t = t - t[0]
|
||||
|
||||
p, pcov = np.polyfit(t, I, 1, cov=True)
|
||||
perr = np.sqrt(np.diag(pcov))
|
||||
|
||||
injrate = p[0] * 60
|
||||
injrate_err = perr[0] * 60
|
||||
|
||||
pvs.inj_rate.put(injrate)
|
||||
pvs.inj_rate_err.put(injrate_err)
|
||||
|
||||
# injection rate in mA/hour to minimize risk of log(x) with x < 0:
|
||||
injrate = injrate * 60
|
||||
injrate_err = injrate_err * 60
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
|
||||
# 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
|
||||
conditions_reset = (
|
||||
not self.NsamplesROC == pvs.NsamplesROC.get()
|
||||
or not self.NsamplesTAU == pvs.NsamplesTAU.get()
|
||||
or not self.MinCurr == pvs.MinCurr.get()
|
||||
)
|
||||
if conditions_reset:
|
||||
self.reset()
|
||||
# maybe sleep to limit the update loop execution rate
|
||||
# sleep(1)
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
@@ -0,0 +1,9 @@
|
||||
from agebd_taupct 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()
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user