Feature/add new service all migrate #8
@@ -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 | |
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
AGEBD-DBPM3CURR:ACCUMULATED-BEAM-DOSE
|
||||
@@ -0,0 +1,47 @@
|
||||
[project]
|
||||
name = "agebd-injectionguard"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-INJECTIONGUARD 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_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)
|
||||
@@ -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-INJECTIONGUARD: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-INJECTIONGUARD: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-INJECTIONGUARD: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_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()
|
||||
+275
@@ -0,0 +1,275 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "typer", specifier = ">=0.23.2" }]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "pyright", specifier = ">=1.1.410" },
|
||||
{ name = "pytest", specifier = ">=8.4.2" },
|
||||
{ name = "ruff", specifier = ">=0.15.19" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "agebd-injectionguard"
|
||||
version = "0.1.0"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "agebd" },
|
||||
]
|
||||
|
||||
[package.dev-dependencies]
|
||||
dev = [
|
||||
{ name = "pyepics" },
|
||||
{ name = "pytest" },
|
||||
{ name = "ruff" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "agebd", editable = "../../../../packages/agebd" }]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "pyepics", specifier = ">=3.5.8" },
|
||||
{ name = "pytest", specifier = ">=8.4.2" },
|
||||
{ name = "ruff", specifier = ">=0.15.20" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "annotated-doc"
|
||||
version = "0.0.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colorama"
|
||||
version = "0.4.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "exceptiongroup"
|
||||
version = "1.3.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iniconfig"
|
||||
version = "2.3.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "markdown-it-py"
|
||||
version = "4.2.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "mdurl" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mdurl"
|
||||
version = "0.1.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "numpy"
|
||||
version = "2.2.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "packaging"
|
||||
version = "26.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pluggy"
|
||||
version = "1.6.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyepics"
|
||||
version = "3.5.10"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
{ name = "pyparsing" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/69/57/29e1e9ef11ba2a3419f489946ae1d8190025a1e4f4e1c1686758bb2b6e0a/pyepics-3.5.10.tar.gz", hash = "sha256:f390cf9be40aba757b9528888114bc14d8db01086d0c93914720b1772460375b", size = 6150481, upload-time = "2026-05-20T18:44:36.336Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d6/36/e517fd83bd97d6bfe4105e0c6b322070c5cc36fb56a8fab2866e319f8804/pyepics-3.5.10-py3-none-any.whl", hash = "sha256:c9fac2c54f2b595268e66fc348cf5ec24e63718e7dbd07d73d1b37d4da6bfee1", size = 5332376, upload-time = "2026-05-20T18:44:34.242Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pygments"
|
||||
version = "2.20.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyparsing"
|
||||
version = "3.3.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pytest"
|
||||
version = "9.1.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
{ name = "exceptiongroup" },
|
||||
{ name = "iniconfig" },
|
||||
{ name = "packaging" },
|
||||
{ name = "pluggy" },
|
||||
{ name = "pygments" },
|
||||
{ name = "tomli" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rich"
|
||||
version = "15.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "markdown-it-py" },
|
||||
{ name = "pygments" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ruff"
|
||||
version = "0.15.21"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/0f/36/6f65aa9989acdec45d417192d8f4e7921931d8a6cf87ac74bce3eed98a8e/ruff-0.15.21.tar.gz", hash = "sha256:d0cfc841c572283c36548f82664a54ce6565567f1b0d5b4cf2caac693d8b7500", size = 4769401, upload-time = "2026-07-09T20:01:34.005Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d0/c6/ede15cac6839f3dbce52565c8f5164a8210e669c7bc4decb03e5bdf47d0d/ruff-0.15.21-py3-none-linux_armv6l.whl", hash = "sha256:63ea0e965e5d73c90e95b2434beeafc70820536717f561b32ab6e777cb9bdf5d", size = 10854342, upload-time = "2026-07-09T20:00:53.998Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/28/9d/d825b07ee7ea9e2d61df92a860033c94e06e7300d50a1c2653aac27d24fe/ruff-0.15.21-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0f212c5d7d54c01bbfe6dcab02b724a39300f3e34ed7acbe995ccb320a2c58bd", size = 11139539, upload-time = "2026-07-09T20:00:57.809Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f5/de/3b107712e642f063c7a9e0887c427b22cb44097de5aab36c05f2e280670c/ruff-0.15.21-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e6312e41bc96791299614995ea3a977c5857c3b5662b1ecef6755b02b87cb646", size = 10595437, upload-time = "2026-07-09T20:01:00.006Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/6f/b4523cc90ba239ede441447a19d0c968846a3012e5a0b0c5b62831a3d5e3/ruff-0.15.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d65b4831c6b2a4ba8ee6faa84049d44d982b7a706e622c4094c509e51673be", size = 10990053, upload-time = "2026-07-09T20:01:02.187Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/92/cc/c6a9872a5375f0628875481cf2f66b13d7d865bf3ca2e57f91c7e762d976/ruff-0.15.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c5a913a589120ce67933d5d05fd6ddbcc2481c6a054980ee767f7414c72b4fd", size = 10666096, upload-time = "2026-07-09T20:01:04.299Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ab/97/c621f7a17e097f1790fa3af6374138823b330b2d03fc38337945daca212c/ruff-0.15.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef04b681d02ad4dc9620f00f83ac5c22f652d0e9a9cfe431d219b16ad5ccc41", size = 11537011, upload-time = "2026-07-09T20:01:06.771Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/51/d928727e476e25ccc57c6f449ffd80241a651a973ad949d39cfb2a771d28/ruff-0.15.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16d090c0740916594157e75b80d666eab8e78083b39b3b0e1d698f4670a17b86", size = 12347101, upload-time = "2026-07-09T20:01:08.859Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/88/8cd62026802b16018ad06931d87997cf795ba2a6239ab659606c87d96bf0/ruff-0.15.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a10e74757dd65004d779b73e2f3c5210156d9980b41224d50d2ebcf1db51e67", size = 11572001, upload-time = "2026-07-09T20:01:11.092Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/97/f63084cf55444fc110e8cb985ebfcc592af47f597d44453d778cb81bc156/ruff-0.15.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bab0905d2f29e0d9fbc3c373ed23db0095edaa3f71f1f4f519ec15134d9e85c8", size = 11549239, upload-time = "2026-07-09T20:01:13.27Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9d/77/f107da4a2874b7715914b03f09ba9c54424de3ff8a1cc5d015d3ee2ce0ac/ruff-0.15.21-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:00eca240af5789fec6fe7df74c088cc1f9644ed83027113468efba7c92b94075", size = 11535340, upload-time = "2026-07-09T20:01:15.206Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d5/e9/601deb322d3303a7bf212b0100ead6f2ee3f6a044d89c30f2f92bf83c731/ruff-0.15.21-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262ab31557a75141325e32d3357f3597645a7f084e732b6b054dde428ecd9341", size = 10964048, upload-time = "2026-07-09T20:01:17.723Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/2e/0f2176d1e99c15192caea19c8c3a0a955246b4cb4de795042eeb616345cd/ruff-0.15.21-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:659c4e7a4212f83306045ec7c5e5a356d16d9a6ef4ae0c7a4d872914fc655d9d", size = 10667055, upload-time = "2026-07-09T20:01:19.73Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/48/60/abd74a02e0c4214f12a68becfd30af7165cfdcb0e661ecdc60bbb949c09a/ruff-0.15.21-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9e866eab611a5f959d36df2d10e446973a3610bc42b0c15b31dc27977d59c233", size = 11242043, upload-time = "2026-07-09T20:01:21.947Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/c6/583075d8ccabb4b229345edcaf1545eb3d8d6be90f686a479d7e94088bbf/ruff-0.15.21-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e89bc93c0d3803ba870b55c29671bad9dc6d94bb1eb181b056b52eb05b52854f", size = 11648064, upload-time = "2026-07-09T20:01:24.023Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/3c/37d0ecb729a7cc2d393ea7dce316fc585680f35d93b8d62139d7d0a3700c/ruff-0.15.21-py3-none-win32.whl", hash = "sha256:01f8d5be84823c172b389e123174f781f9daf86d6c58719d603f941932195cdd", size = 10896555, upload-time = "2026-07-09T20:01:26.941Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c0/b8/e43466b2a6067ce91e669068f6e28d6c719a920f014b070d5c8731725de3/ruff-0.15.21-py3-none-win_amd64.whl", hash = "sha256:d4b8d9a2f0f12b816b50447f6eccb9f4bb01a6b82c86b50fb3b5354b458dc6d3", size = 12038772, upload-time = "2026-07-09T20:01:29.497Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dd/75/e90ab9aeece218a9fc5a5bc3ec97d0ee6bb3c4ff95869463c1de58e29a1c/ruff-0.15.21-py3-none-win_arm64.whl", hash = "sha256:6e83115d4b9377c1cbc13abf0e051f069fab0ef815ea0504a8a008cee24dd0a8", size = 11375265, upload-time = "2026-07-09T20:01:31.772Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shellingham"
|
||||
version = "1.5.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tomli"
|
||||
version = "2.4.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typer"
|
||||
version = "0.27.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "annotated-doc" },
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
{ name = "rich" },
|
||||
{ name = "shellingham" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/37/78/fda3361b56efc27944f24225f6ecd13d96d6fcfe37bd0eb34e2f4c63f9fc/typer-0.27.0.tar.gz", hash = "sha256:629bd12ea5d13a17148125d9a264f949eb171fb3f120f9b04d85873cab054fa5", size = 203430, upload-time = "2026-07-15T19:21:07.007Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/40/03/26a383c9e58c213199d1aad1c3d353cfc22d4444ec6d2c0bf8ad02523843/typer-0.27.0-py3-none-any.whl", hash = "sha256:6f4b27631e47f077871b7dc30e933ec0131c1390fbe0e387ea5574b5bac9ccf1", size = 122716, upload-time = "2026-07-15T19:21:05.553Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" },
|
||||
]
|
||||
@@ -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
|
||||
@@ -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
+275
@@ -0,0 +1,275 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "typer", specifier = ">=0.23.2" }]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "pyright", specifier = ">=1.1.410" },
|
||||
{ name = "pytest", specifier = ">=8.4.2" },
|
||||
{ name = "ruff", specifier = ">=0.15.19" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "agebd-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 = "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,47 @@
|
||||
[project]
|
||||
name = "agebd-plots"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-PLOTS 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_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 = 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-PLOTS: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-PLOTS: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-PLOTS: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_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
+275
@@ -0,0 +1,275 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "typer", specifier = ">=0.23.2" }]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "pyright", specifier = ">=1.1.410" },
|
||||
{ name = "pytest", specifier = ">=8.4.2" },
|
||||
{ name = "ruff", specifier = ">=0.15.19" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "agebd-plots"
|
||||
version = "0.1.0"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "agebd" },
|
||||
]
|
||||
|
||||
[package.dev-dependencies]
|
||||
dev = [
|
||||
{ name = "pyepics" },
|
||||
{ name = "pytest" },
|
||||
{ name = "ruff" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "agebd", editable = "../../../../packages/agebd" }]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "pyepics", specifier = ">=3.5.8" },
|
||||
{ name = "pytest", specifier = ">=8.4.2" },
|
||||
{ name = "ruff", specifier = ">=0.15.20" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "annotated-doc"
|
||||
version = "0.0.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colorama"
|
||||
version = "0.4.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "exceptiongroup"
|
||||
version = "1.3.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iniconfig"
|
||||
version = "2.3.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "markdown-it-py"
|
||||
version = "4.2.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "mdurl" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mdurl"
|
||||
version = "0.1.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "numpy"
|
||||
version = "2.2.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "packaging"
|
||||
version = "26.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pluggy"
|
||||
version = "1.6.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyepics"
|
||||
version = "3.5.10"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
{ name = "pyparsing" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/69/57/29e1e9ef11ba2a3419f489946ae1d8190025a1e4f4e1c1686758bb2b6e0a/pyepics-3.5.10.tar.gz", hash = "sha256:f390cf9be40aba757b9528888114bc14d8db01086d0c93914720b1772460375b", size = 6150481, upload-time = "2026-05-20T18:44:36.336Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d6/36/e517fd83bd97d6bfe4105e0c6b322070c5cc36fb56a8fab2866e319f8804/pyepics-3.5.10-py3-none-any.whl", hash = "sha256:c9fac2c54f2b595268e66fc348cf5ec24e63718e7dbd07d73d1b37d4da6bfee1", size = 5332376, upload-time = "2026-05-20T18:44:34.242Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pygments"
|
||||
version = "2.20.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyparsing"
|
||||
version = "3.3.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pytest"
|
||||
version = "9.1.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
{ name = "exceptiongroup" },
|
||||
{ name = "iniconfig" },
|
||||
{ name = "packaging" },
|
||||
{ name = "pluggy" },
|
||||
{ name = "pygments" },
|
||||
{ name = "tomli" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rich"
|
||||
version = "15.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "markdown-it-py" },
|
||||
{ name = "pygments" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ruff"
|
||||
version = "0.15.21"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/0f/36/6f65aa9989acdec45d417192d8f4e7921931d8a6cf87ac74bce3eed98a8e/ruff-0.15.21.tar.gz", hash = "sha256:d0cfc841c572283c36548f82664a54ce6565567f1b0d5b4cf2caac693d8b7500", size = 4769401, upload-time = "2026-07-09T20:01:34.005Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d0/c6/ede15cac6839f3dbce52565c8f5164a8210e669c7bc4decb03e5bdf47d0d/ruff-0.15.21-py3-none-linux_armv6l.whl", hash = "sha256:63ea0e965e5d73c90e95b2434beeafc70820536717f561b32ab6e777cb9bdf5d", size = 10854342, upload-time = "2026-07-09T20:00:53.998Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/28/9d/d825b07ee7ea9e2d61df92a860033c94e06e7300d50a1c2653aac27d24fe/ruff-0.15.21-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0f212c5d7d54c01bbfe6dcab02b724a39300f3e34ed7acbe995ccb320a2c58bd", size = 11139539, upload-time = "2026-07-09T20:00:57.809Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f5/de/3b107712e642f063c7a9e0887c427b22cb44097de5aab36c05f2e280670c/ruff-0.15.21-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e6312e41bc96791299614995ea3a977c5857c3b5662b1ecef6755b02b87cb646", size = 10595437, upload-time = "2026-07-09T20:01:00.006Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/6f/b4523cc90ba239ede441447a19d0c968846a3012e5a0b0c5b62831a3d5e3/ruff-0.15.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d65b4831c6b2a4ba8ee6faa84049d44d982b7a706e622c4094c509e51673be", size = 10990053, upload-time = "2026-07-09T20:01:02.187Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/92/cc/c6a9872a5375f0628875481cf2f66b13d7d865bf3ca2e57f91c7e762d976/ruff-0.15.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c5a913a589120ce67933d5d05fd6ddbcc2481c6a054980ee767f7414c72b4fd", size = 10666096, upload-time = "2026-07-09T20:01:04.299Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ab/97/c621f7a17e097f1790fa3af6374138823b330b2d03fc38337945daca212c/ruff-0.15.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef04b681d02ad4dc9620f00f83ac5c22f652d0e9a9cfe431d219b16ad5ccc41", size = 11537011, upload-time = "2026-07-09T20:01:06.771Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/51/d928727e476e25ccc57c6f449ffd80241a651a973ad949d39cfb2a771d28/ruff-0.15.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16d090c0740916594157e75b80d666eab8e78083b39b3b0e1d698f4670a17b86", size = 12347101, upload-time = "2026-07-09T20:01:08.859Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/88/8cd62026802b16018ad06931d87997cf795ba2a6239ab659606c87d96bf0/ruff-0.15.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a10e74757dd65004d779b73e2f3c5210156d9980b41224d50d2ebcf1db51e67", size = 11572001, upload-time = "2026-07-09T20:01:11.092Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/97/f63084cf55444fc110e8cb985ebfcc592af47f597d44453d778cb81bc156/ruff-0.15.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bab0905d2f29e0d9fbc3c373ed23db0095edaa3f71f1f4f519ec15134d9e85c8", size = 11549239, upload-time = "2026-07-09T20:01:13.27Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9d/77/f107da4a2874b7715914b03f09ba9c54424de3ff8a1cc5d015d3ee2ce0ac/ruff-0.15.21-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:00eca240af5789fec6fe7df74c088cc1f9644ed83027113468efba7c92b94075", size = 11535340, upload-time = "2026-07-09T20:01:15.206Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d5/e9/601deb322d3303a7bf212b0100ead6f2ee3f6a044d89c30f2f92bf83c731/ruff-0.15.21-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262ab31557a75141325e32d3357f3597645a7f084e732b6b054dde428ecd9341", size = 10964048, upload-time = "2026-07-09T20:01:17.723Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/2e/0f2176d1e99c15192caea19c8c3a0a955246b4cb4de795042eeb616345cd/ruff-0.15.21-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:659c4e7a4212f83306045ec7c5e5a356d16d9a6ef4ae0c7a4d872914fc655d9d", size = 10667055, upload-time = "2026-07-09T20:01:19.73Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/48/60/abd74a02e0c4214f12a68becfd30af7165cfdcb0e661ecdc60bbb949c09a/ruff-0.15.21-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9e866eab611a5f959d36df2d10e446973a3610bc42b0c15b31dc27977d59c233", size = 11242043, upload-time = "2026-07-09T20:01:21.947Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/c6/583075d8ccabb4b229345edcaf1545eb3d8d6be90f686a479d7e94088bbf/ruff-0.15.21-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e89bc93c0d3803ba870b55c29671bad9dc6d94bb1eb181b056b52eb05b52854f", size = 11648064, upload-time = "2026-07-09T20:01:24.023Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/3c/37d0ecb729a7cc2d393ea7dce316fc585680f35d93b8d62139d7d0a3700c/ruff-0.15.21-py3-none-win32.whl", hash = "sha256:01f8d5be84823c172b389e123174f781f9daf86d6c58719d603f941932195cdd", size = 10896555, upload-time = "2026-07-09T20:01:26.941Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c0/b8/e43466b2a6067ce91e669068f6e28d6c719a920f014b070d5c8731725de3/ruff-0.15.21-py3-none-win_amd64.whl", hash = "sha256:d4b8d9a2f0f12b816b50447f6eccb9f4bb01a6b82c86b50fb3b5354b458dc6d3", size = 12038772, upload-time = "2026-07-09T20:01:29.497Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dd/75/e90ab9aeece218a9fc5a5bc3ec97d0ee6bb3c4ff95869463c1de58e29a1c/ruff-0.15.21-py3-none-win_arm64.whl", hash = "sha256:6e83115d4b9377c1cbc13abf0e051f069fab0ef815ea0504a8a008cee24dd0a8", size = 11375265, upload-time = "2026-07-09T20:01:31.772Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shellingham"
|
||||
version = "1.5.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tomli"
|
||||
version = "2.4.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typer"
|
||||
version = "0.27.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "annotated-doc" },
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
{ name = "rich" },
|
||||
{ name = "shellingham" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/37/78/fda3361b56efc27944f24225f6ecd13d96d6fcfe37bd0eb34e2f4c63f9fc/typer-0.27.0.tar.gz", hash = "sha256:629bd12ea5d13a17148125d9a264f949eb171fb3f120f9b04d85873cab054fa5", size = 203430, upload-time = "2026-07-15T19:21:07.007Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/40/03/26a383c9e58c213199d1aad1c3d353cfc22d4444ec6d2c0bf8ad02523843/typer-0.27.0-py3-none-any.whl", hash = "sha256:6f4b27631e47f077871b7dc30e933ec0131c1390fbe0e387ea5574b5bac9ccf1", size = 122716, upload-time = "2026-07-15T19:21:05.553Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" },
|
||||
]
|
||||
@@ -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,47 @@
|
||||
[project]
|
||||
name = "agebd-postmortemlog"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-POSTMORTEMLOG Service"
|
||||
requires-python = "==3.10.*"
|
||||
dependencies = [
|
||||
"agebd",
|
||||
]
|
||||
|
||||
[dependency-groups]
|
||||
dev = [
|
||||
"pyepics>=3.5.8",
|
||||
"pytest>=8.4.2",
|
||||
"ruff>=0.15.20",
|
||||
]
|
||||
|
||||
[tool.uv.sources]
|
||||
# Path is relative to where agebd package is deployed on hla
|
||||
# machines (see CI/CD in .gitea/workflows)
|
||||
agebd = { path = "../../../../packages/agebd", editable = true }
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.uv]
|
||||
package = true
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
pythonpath = ["src"]
|
||||
env = [
|
||||
"AGEBD_ENV=local",
|
||||
]
|
||||
|
||||
[tool.ruff]
|
||||
include = [
|
||||
"src/**/*.py",
|
||||
"tests/**/*.py",
|
||||
]
|
||||
line-length = 100
|
||||
|
||||
[tool.ruff.lint]
|
||||
# use isort to sort imports
|
||||
extend-select = ["I"]
|
||||
|
||||
[tool.ruff.lint.isort]
|
||||
known-first-party = ["agebd"]
|
||||
@@ -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)
|
||||
@@ -0,0 +1,93 @@
|
||||
import time
|
||||
|
||||
from epics import dbr
|
||||
|
||||
from agebd.pv import LocalPVLink
|
||||
from agebd.service.base import BaseService
|
||||
from agebd.service.pvs import BasePVs
|
||||
from agebd.utils import printgetversion
|
||||
from agebd.pv import get_pv_class
|
||||
|
||||
__version__ = printgetversion(__file__)
|
||||
|
||||
PV = get_pv_class()
|
||||
|
||||
|
||||
class PVs(BasePVs):
|
||||
# Option 1:
|
||||
## Service specific PVs from dedicated IOC
|
||||
my_pv1 = PV("AGEBD-POSTMORTEMLOG:AO") # TODO: is this a good PV to use?
|
||||
|
||||
## Service specific PVs from other IOCs
|
||||
# ...
|
||||
|
||||
def __init__(self, service_name: str, pv_factory=PV):
|
||||
super().__init__(service_name, pv_factory)
|
||||
PV = pv_factory
|
||||
|
||||
# TODO: can we do this cleaner? Maybe mechanism for
|
||||
# settings initial values in dev mode (e.g. ini file)
|
||||
if isinstance(self.onoff, LocalPVLink):
|
||||
self.onoff.value = True
|
||||
|
||||
# Option 2:
|
||||
## Service specific PVs from dedicated IOC
|
||||
self.my_pv2 = PV(
|
||||
"AGEBD-POSTMORTEMLOG:BO"
|
||||
) # TODO: is this a good PV to use?
|
||||
|
||||
## Service specific PVs from other IOCs
|
||||
# ...
|
||||
|
||||
# TODO: class attribute names usually lowercase
|
||||
# usually it is advisable to trigger the mainloop of a service on changes of certain PVs:
|
||||
self.CallbackPV = PV(
|
||||
"AGEBD-POSTMORTEMLOG:CALLBACK", auto_monitor=dbr.DBE_VALUE
|
||||
) # TODO: ok?
|
||||
|
||||
|
||||
class Service(BaseService[PVs]):
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
pvs: PVs,
|
||||
version: str = __version__,
|
||||
sleep_interval: float = 0.1,
|
||||
):
|
||||
super().__init__(name, pvs, version, sleep_interval)
|
||||
|
||||
# TODO: What is this for?
|
||||
self.path = "sls/bd/bin"
|
||||
|
||||
def update(self):
|
||||
# when callback is fired, this code will be executed
|
||||
if self.CallbackFired:
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
# here goes all the code that your service
|
||||
# is supposed to be running when the callback is fired
|
||||
time.sleep(1)
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
|
||||
# callback done
|
||||
self.CallbackFired = 0
|
||||
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
# here goes all the code that your service
|
||||
# is supposed to be running in any case, e.g.,
|
||||
|
||||
# update some pvs/vals
|
||||
my_pv1_random_val = str(time.clock_gettime_ns(0))[-1]
|
||||
self.pvs.my_pv1.put(my_pv1_random_val)
|
||||
# self.pvs.my_pv2.put("MY_PV2 value")
|
||||
|
||||
# get some pvs/vals
|
||||
self.val1 = self.pvs.my_pv1.get()
|
||||
self.val2 = self.pvs.my_pv2.get()
|
||||
|
||||
# maybe sleep to limit the update loop execution rate
|
||||
time.sleep(1)
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
@@ -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()
|
||||
+275
@@ -0,0 +1,275 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "typer", specifier = ">=0.23.2" }]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "pyright", specifier = ">=1.1.410" },
|
||||
{ name = "pytest", specifier = ">=8.4.2" },
|
||||
{ name = "ruff", specifier = ">=0.15.19" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "agebd-postmortemlog"
|
||||
version = "0.1.0"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "agebd" },
|
||||
]
|
||||
|
||||
[package.dev-dependencies]
|
||||
dev = [
|
||||
{ name = "pyepics" },
|
||||
{ name = "pytest" },
|
||||
{ name = "ruff" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "agebd", editable = "../../../../packages/agebd" }]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "pyepics", specifier = ">=3.5.8" },
|
||||
{ name = "pytest", specifier = ">=8.4.2" },
|
||||
{ name = "ruff", specifier = ">=0.15.20" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "annotated-doc"
|
||||
version = "0.0.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colorama"
|
||||
version = "0.4.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "exceptiongroup"
|
||||
version = "1.3.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iniconfig"
|
||||
version = "2.3.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "markdown-it-py"
|
||||
version = "4.2.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "mdurl" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mdurl"
|
||||
version = "0.1.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "numpy"
|
||||
version = "2.2.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "packaging"
|
||||
version = "26.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pluggy"
|
||||
version = "1.6.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyepics"
|
||||
version = "3.5.10"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
{ name = "pyparsing" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/69/57/29e1e9ef11ba2a3419f489946ae1d8190025a1e4f4e1c1686758bb2b6e0a/pyepics-3.5.10.tar.gz", hash = "sha256:f390cf9be40aba757b9528888114bc14d8db01086d0c93914720b1772460375b", size = 6150481, upload-time = "2026-05-20T18:44:36.336Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d6/36/e517fd83bd97d6bfe4105e0c6b322070c5cc36fb56a8fab2866e319f8804/pyepics-3.5.10-py3-none-any.whl", hash = "sha256:c9fac2c54f2b595268e66fc348cf5ec24e63718e7dbd07d73d1b37d4da6bfee1", size = 5332376, upload-time = "2026-05-20T18:44:34.242Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pygments"
|
||||
version = "2.20.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyparsing"
|
||||
version = "3.3.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pytest"
|
||||
version = "9.1.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
{ name = "exceptiongroup" },
|
||||
{ name = "iniconfig" },
|
||||
{ name = "packaging" },
|
||||
{ name = "pluggy" },
|
||||
{ name = "pygments" },
|
||||
{ name = "tomli" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rich"
|
||||
version = "15.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "markdown-it-py" },
|
||||
{ name = "pygments" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ruff"
|
||||
version = "0.15.21"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/0f/36/6f65aa9989acdec45d417192d8f4e7921931d8a6cf87ac74bce3eed98a8e/ruff-0.15.21.tar.gz", hash = "sha256:d0cfc841c572283c36548f82664a54ce6565567f1b0d5b4cf2caac693d8b7500", size = 4769401, upload-time = "2026-07-09T20:01:34.005Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d0/c6/ede15cac6839f3dbce52565c8f5164a8210e669c7bc4decb03e5bdf47d0d/ruff-0.15.21-py3-none-linux_armv6l.whl", hash = "sha256:63ea0e965e5d73c90e95b2434beeafc70820536717f561b32ab6e777cb9bdf5d", size = 10854342, upload-time = "2026-07-09T20:00:53.998Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/28/9d/d825b07ee7ea9e2d61df92a860033c94e06e7300d50a1c2653aac27d24fe/ruff-0.15.21-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0f212c5d7d54c01bbfe6dcab02b724a39300f3e34ed7acbe995ccb320a2c58bd", size = 11139539, upload-time = "2026-07-09T20:00:57.809Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f5/de/3b107712e642f063c7a9e0887c427b22cb44097de5aab36c05f2e280670c/ruff-0.15.21-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e6312e41bc96791299614995ea3a977c5857c3b5662b1ecef6755b02b87cb646", size = 10595437, upload-time = "2026-07-09T20:01:00.006Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/6f/b4523cc90ba239ede441447a19d0c968846a3012e5a0b0c5b62831a3d5e3/ruff-0.15.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d65b4831c6b2a4ba8ee6faa84049d44d982b7a706e622c4094c509e51673be", size = 10990053, upload-time = "2026-07-09T20:01:02.187Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/92/cc/c6a9872a5375f0628875481cf2f66b13d7d865bf3ca2e57f91c7e762d976/ruff-0.15.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c5a913a589120ce67933d5d05fd6ddbcc2481c6a054980ee767f7414c72b4fd", size = 10666096, upload-time = "2026-07-09T20:01:04.299Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ab/97/c621f7a17e097f1790fa3af6374138823b330b2d03fc38337945daca212c/ruff-0.15.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef04b681d02ad4dc9620f00f83ac5c22f652d0e9a9cfe431d219b16ad5ccc41", size = 11537011, upload-time = "2026-07-09T20:01:06.771Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/51/d928727e476e25ccc57c6f449ffd80241a651a973ad949d39cfb2a771d28/ruff-0.15.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16d090c0740916594157e75b80d666eab8e78083b39b3b0e1d698f4670a17b86", size = 12347101, upload-time = "2026-07-09T20:01:08.859Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/88/8cd62026802b16018ad06931d87997cf795ba2a6239ab659606c87d96bf0/ruff-0.15.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a10e74757dd65004d779b73e2f3c5210156d9980b41224d50d2ebcf1db51e67", size = 11572001, upload-time = "2026-07-09T20:01:11.092Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/97/f63084cf55444fc110e8cb985ebfcc592af47f597d44453d778cb81bc156/ruff-0.15.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bab0905d2f29e0d9fbc3c373ed23db0095edaa3f71f1f4f519ec15134d9e85c8", size = 11549239, upload-time = "2026-07-09T20:01:13.27Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9d/77/f107da4a2874b7715914b03f09ba9c54424de3ff8a1cc5d015d3ee2ce0ac/ruff-0.15.21-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:00eca240af5789fec6fe7df74c088cc1f9644ed83027113468efba7c92b94075", size = 11535340, upload-time = "2026-07-09T20:01:15.206Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d5/e9/601deb322d3303a7bf212b0100ead6f2ee3f6a044d89c30f2f92bf83c731/ruff-0.15.21-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262ab31557a75141325e32d3357f3597645a7f084e732b6b054dde428ecd9341", size = 10964048, upload-time = "2026-07-09T20:01:17.723Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/2e/0f2176d1e99c15192caea19c8c3a0a955246b4cb4de795042eeb616345cd/ruff-0.15.21-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:659c4e7a4212f83306045ec7c5e5a356d16d9a6ef4ae0c7a4d872914fc655d9d", size = 10667055, upload-time = "2026-07-09T20:01:19.73Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/48/60/abd74a02e0c4214f12a68becfd30af7165cfdcb0e661ecdc60bbb949c09a/ruff-0.15.21-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9e866eab611a5f959d36df2d10e446973a3610bc42b0c15b31dc27977d59c233", size = 11242043, upload-time = "2026-07-09T20:01:21.947Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/c6/583075d8ccabb4b229345edcaf1545eb3d8d6be90f686a479d7e94088bbf/ruff-0.15.21-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e89bc93c0d3803ba870b55c29671bad9dc6d94bb1eb181b056b52eb05b52854f", size = 11648064, upload-time = "2026-07-09T20:01:24.023Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/3c/37d0ecb729a7cc2d393ea7dce316fc585680f35d93b8d62139d7d0a3700c/ruff-0.15.21-py3-none-win32.whl", hash = "sha256:01f8d5be84823c172b389e123174f781f9daf86d6c58719d603f941932195cdd", size = 10896555, upload-time = "2026-07-09T20:01:26.941Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c0/b8/e43466b2a6067ce91e669068f6e28d6c719a920f014b070d5c8731725de3/ruff-0.15.21-py3-none-win_amd64.whl", hash = "sha256:d4b8d9a2f0f12b816b50447f6eccb9f4bb01a6b82c86b50fb3b5354b458dc6d3", size = 12038772, upload-time = "2026-07-09T20:01:29.497Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dd/75/e90ab9aeece218a9fc5a5bc3ec97d0ee6bb3c4ff95869463c1de58e29a1c/ruff-0.15.21-py3-none-win_arm64.whl", hash = "sha256:6e83115d4b9377c1cbc13abf0e051f069fab0ef815ea0504a8a008cee24dd0a8", size = 11375265, upload-time = "2026-07-09T20:01:31.772Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shellingham"
|
||||
version = "1.5.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tomli"
|
||||
version = "2.4.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typer"
|
||||
version = "0.27.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "annotated-doc" },
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
{ name = "rich" },
|
||||
{ name = "shellingham" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/37/78/fda3361b56efc27944f24225f6ecd13d96d6fcfe37bd0eb34e2f4c63f9fc/typer-0.27.0.tar.gz", hash = "sha256:629bd12ea5d13a17148125d9a264f949eb171fb3f120f9b04d85873cab054fa5", size = 203430, upload-time = "2026-07-15T19:21:07.007Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/40/03/26a383c9e58c213199d1aad1c3d353cfc22d4444ec6d2c0bf8ad02523843/typer-0.27.0-py3-none-any.whl", hash = "sha256:6f4b27631e47f077871b7dc30e933ec0131c1390fbe0e387ea5574b5bac9ccf1", size = 122716, upload-time = "2026-07-15T19:21:05.553Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" },
|
||||
]
|
||||
@@ -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,47 @@
|
||||
[project]
|
||||
name = "agebd-scrubbing"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-SCRUBBING 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_scrubbing 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 = "SCRUBBING"
|
||||
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-SCRUBBING: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-SCRUBBING: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-SCRUBBING: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_scrubbing 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
+275
@@ -0,0 +1,275 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "typer", specifier = ">=0.23.2" }]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "pyright", specifier = ">=1.1.410" },
|
||||
{ name = "pytest", specifier = ">=8.4.2" },
|
||||
{ name = "ruff", specifier = ">=0.15.19" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "agebd-scrubbing"
|
||||
version = "0.1.0"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "agebd" },
|
||||
]
|
||||
|
||||
[package.dev-dependencies]
|
||||
dev = [
|
||||
{ name = "pyepics" },
|
||||
{ name = "pytest" },
|
||||
{ name = "ruff" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "agebd", editable = "../../../../packages/agebd" }]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "pyepics", specifier = ">=3.5.8" },
|
||||
{ name = "pytest", specifier = ">=8.4.2" },
|
||||
{ name = "ruff", specifier = ">=0.15.20" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "annotated-doc"
|
||||
version = "0.0.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colorama"
|
||||
version = "0.4.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "exceptiongroup"
|
||||
version = "1.3.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iniconfig"
|
||||
version = "2.3.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "markdown-it-py"
|
||||
version = "4.2.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "mdurl" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mdurl"
|
||||
version = "0.1.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "numpy"
|
||||
version = "2.2.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "packaging"
|
||||
version = "26.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pluggy"
|
||||
version = "1.6.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyepics"
|
||||
version = "3.5.10"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
{ name = "pyparsing" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/69/57/29e1e9ef11ba2a3419f489946ae1d8190025a1e4f4e1c1686758bb2b6e0a/pyepics-3.5.10.tar.gz", hash = "sha256:f390cf9be40aba757b9528888114bc14d8db01086d0c93914720b1772460375b", size = 6150481, upload-time = "2026-05-20T18:44:36.336Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d6/36/e517fd83bd97d6bfe4105e0c6b322070c5cc36fb56a8fab2866e319f8804/pyepics-3.5.10-py3-none-any.whl", hash = "sha256:c9fac2c54f2b595268e66fc348cf5ec24e63718e7dbd07d73d1b37d4da6bfee1", size = 5332376, upload-time = "2026-05-20T18:44:34.242Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pygments"
|
||||
version = "2.20.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyparsing"
|
||||
version = "3.3.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pytest"
|
||||
version = "9.1.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
{ name = "exceptiongroup" },
|
||||
{ name = "iniconfig" },
|
||||
{ name = "packaging" },
|
||||
{ name = "pluggy" },
|
||||
{ name = "pygments" },
|
||||
{ name = "tomli" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rich"
|
||||
version = "15.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "markdown-it-py" },
|
||||
{ name = "pygments" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ruff"
|
||||
version = "0.15.21"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/0f/36/6f65aa9989acdec45d417192d8f4e7921931d8a6cf87ac74bce3eed98a8e/ruff-0.15.21.tar.gz", hash = "sha256:d0cfc841c572283c36548f82664a54ce6565567f1b0d5b4cf2caac693d8b7500", size = 4769401, upload-time = "2026-07-09T20:01:34.005Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d0/c6/ede15cac6839f3dbce52565c8f5164a8210e669c7bc4decb03e5bdf47d0d/ruff-0.15.21-py3-none-linux_armv6l.whl", hash = "sha256:63ea0e965e5d73c90e95b2434beeafc70820536717f561b32ab6e777cb9bdf5d", size = 10854342, upload-time = "2026-07-09T20:00:53.998Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/28/9d/d825b07ee7ea9e2d61df92a860033c94e06e7300d50a1c2653aac27d24fe/ruff-0.15.21-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0f212c5d7d54c01bbfe6dcab02b724a39300f3e34ed7acbe995ccb320a2c58bd", size = 11139539, upload-time = "2026-07-09T20:00:57.809Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f5/de/3b107712e642f063c7a9e0887c427b22cb44097de5aab36c05f2e280670c/ruff-0.15.21-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e6312e41bc96791299614995ea3a977c5857c3b5662b1ecef6755b02b87cb646", size = 10595437, upload-time = "2026-07-09T20:01:00.006Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/6f/b4523cc90ba239ede441447a19d0c968846a3012e5a0b0c5b62831a3d5e3/ruff-0.15.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d65b4831c6b2a4ba8ee6faa84049d44d982b7a706e622c4094c509e51673be", size = 10990053, upload-time = "2026-07-09T20:01:02.187Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/92/cc/c6a9872a5375f0628875481cf2f66b13d7d865bf3ca2e57f91c7e762d976/ruff-0.15.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c5a913a589120ce67933d5d05fd6ddbcc2481c6a054980ee767f7414c72b4fd", size = 10666096, upload-time = "2026-07-09T20:01:04.299Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ab/97/c621f7a17e097f1790fa3af6374138823b330b2d03fc38337945daca212c/ruff-0.15.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef04b681d02ad4dc9620f00f83ac5c22f652d0e9a9cfe431d219b16ad5ccc41", size = 11537011, upload-time = "2026-07-09T20:01:06.771Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/51/d928727e476e25ccc57c6f449ffd80241a651a973ad949d39cfb2a771d28/ruff-0.15.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16d090c0740916594157e75b80d666eab8e78083b39b3b0e1d698f4670a17b86", size = 12347101, upload-time = "2026-07-09T20:01:08.859Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/88/8cd62026802b16018ad06931d87997cf795ba2a6239ab659606c87d96bf0/ruff-0.15.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a10e74757dd65004d779b73e2f3c5210156d9980b41224d50d2ebcf1db51e67", size = 11572001, upload-time = "2026-07-09T20:01:11.092Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/97/f63084cf55444fc110e8cb985ebfcc592af47f597d44453d778cb81bc156/ruff-0.15.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bab0905d2f29e0d9fbc3c373ed23db0095edaa3f71f1f4f519ec15134d9e85c8", size = 11549239, upload-time = "2026-07-09T20:01:13.27Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9d/77/f107da4a2874b7715914b03f09ba9c54424de3ff8a1cc5d015d3ee2ce0ac/ruff-0.15.21-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:00eca240af5789fec6fe7df74c088cc1f9644ed83027113468efba7c92b94075", size = 11535340, upload-time = "2026-07-09T20:01:15.206Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d5/e9/601deb322d3303a7bf212b0100ead6f2ee3f6a044d89c30f2f92bf83c731/ruff-0.15.21-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262ab31557a75141325e32d3357f3597645a7f084e732b6b054dde428ecd9341", size = 10964048, upload-time = "2026-07-09T20:01:17.723Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/2e/0f2176d1e99c15192caea19c8c3a0a955246b4cb4de795042eeb616345cd/ruff-0.15.21-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:659c4e7a4212f83306045ec7c5e5a356d16d9a6ef4ae0c7a4d872914fc655d9d", size = 10667055, upload-time = "2026-07-09T20:01:19.73Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/48/60/abd74a02e0c4214f12a68becfd30af7165cfdcb0e661ecdc60bbb949c09a/ruff-0.15.21-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9e866eab611a5f959d36df2d10e446973a3610bc42b0c15b31dc27977d59c233", size = 11242043, upload-time = "2026-07-09T20:01:21.947Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/c6/583075d8ccabb4b229345edcaf1545eb3d8d6be90f686a479d7e94088bbf/ruff-0.15.21-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e89bc93c0d3803ba870b55c29671bad9dc6d94bb1eb181b056b52eb05b52854f", size = 11648064, upload-time = "2026-07-09T20:01:24.023Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/3c/37d0ecb729a7cc2d393ea7dce316fc585680f35d93b8d62139d7d0a3700c/ruff-0.15.21-py3-none-win32.whl", hash = "sha256:01f8d5be84823c172b389e123174f781f9daf86d6c58719d603f941932195cdd", size = 10896555, upload-time = "2026-07-09T20:01:26.941Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c0/b8/e43466b2a6067ce91e669068f6e28d6c719a920f014b070d5c8731725de3/ruff-0.15.21-py3-none-win_amd64.whl", hash = "sha256:d4b8d9a2f0f12b816b50447f6eccb9f4bb01a6b82c86b50fb3b5354b458dc6d3", size = 12038772, upload-time = "2026-07-09T20:01:29.497Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dd/75/e90ab9aeece218a9fc5a5bc3ec97d0ee6bb3c4ff95869463c1de58e29a1c/ruff-0.15.21-py3-none-win_arm64.whl", hash = "sha256:6e83115d4b9377c1cbc13abf0e051f069fab0ef815ea0504a8a008cee24dd0a8", size = 11375265, upload-time = "2026-07-09T20:01:31.772Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shellingham"
|
||||
version = "1.5.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tomli"
|
||||
version = "2.4.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typer"
|
||||
version = "0.27.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "annotated-doc" },
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
{ name = "rich" },
|
||||
{ name = "shellingham" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/37/78/fda3361b56efc27944f24225f6ecd13d96d6fcfe37bd0eb34e2f4c63f9fc/typer-0.27.0.tar.gz", hash = "sha256:629bd12ea5d13a17148125d9a264f949eb171fb3f120f9b04d85873cab054fa5", size = 203430, upload-time = "2026-07-15T19:21:07.007Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/40/03/26a383c9e58c213199d1aad1c3d353cfc22d4444ec6d2c0bf8ad02523843/typer-0.27.0-py3-none-any.whl", hash = "sha256:6f4b27631e47f077871b7dc30e933ec0131c1390fbe0e387ea5574b5bac9ccf1", size = 122716, upload-time = "2026-07-15T19:21:05.553Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" },
|
||||
]
|
||||
@@ -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,47 @@
|
||||
[project]
|
||||
name = "agebd-shifttool"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-SHIFTTOOL 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_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,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-SHIFTTOOL: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-SHIFTTOOL: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-SHIFTTOOL: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_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
+275
@@ -0,0 +1,275 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "typer", specifier = ">=0.23.2" }]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "pyright", specifier = ">=1.1.410" },
|
||||
{ name = "pytest", specifier = ">=8.4.2" },
|
||||
{ name = "ruff", specifier = ">=0.15.19" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "agebd-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 = "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
|
||||
@@ -0,0 +1,47 @@
|
||||
[project]
|
||||
name = "agebd-taupct"
|
||||
version = "0.1.0"
|
||||
description = "AGEBD-TAUPCT 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_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,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-TAUPCT: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-TAUPCT: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-TAUPCT: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_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()
|
||||
Generated
+275
@@ -0,0 +1,275 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = "==3.10.*"
|
||||
|
||||
[[package]]
|
||||
name = "agebd"
|
||||
version = "0.1.0"
|
||||
source = { editable = "../../../../packages/agebd" }
|
||||
dependencies = [
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "typer", specifier = ">=0.23.2" }]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "pyright", specifier = ">=1.1.410" },
|
||||
{ name = "pytest", specifier = ">=8.4.2" },
|
||||
{ name = "ruff", specifier = ">=0.15.19" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "agebd-taupct"
|
||||
version = "0.1.0"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "agebd" },
|
||||
]
|
||||
|
||||
[package.dev-dependencies]
|
||||
dev = [
|
||||
{ name = "pyepics" },
|
||||
{ name = "pytest" },
|
||||
{ name = "ruff" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "agebd", editable = "../../../../packages/agebd" }]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "pyepics", specifier = ">=3.5.8" },
|
||||
{ name = "pytest", specifier = ">=8.4.2" },
|
||||
{ name = "ruff", specifier = ">=0.15.20" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "annotated-doc"
|
||||
version = "0.0.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colorama"
|
||||
version = "0.4.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "exceptiongroup"
|
||||
version = "1.3.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iniconfig"
|
||||
version = "2.3.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "markdown-it-py"
|
||||
version = "4.2.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "mdurl" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mdurl"
|
||||
version = "0.1.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "numpy"
|
||||
version = "2.2.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "packaging"
|
||||
version = "26.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pluggy"
|
||||
version = "1.6.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyepics"
|
||||
version = "3.5.10"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy" },
|
||||
{ name = "pyparsing" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/69/57/29e1e9ef11ba2a3419f489946ae1d8190025a1e4f4e1c1686758bb2b6e0a/pyepics-3.5.10.tar.gz", hash = "sha256:f390cf9be40aba757b9528888114bc14d8db01086d0c93914720b1772460375b", size = 6150481, upload-time = "2026-05-20T18:44:36.336Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d6/36/e517fd83bd97d6bfe4105e0c6b322070c5cc36fb56a8fab2866e319f8804/pyepics-3.5.10-py3-none-any.whl", hash = "sha256:c9fac2c54f2b595268e66fc348cf5ec24e63718e7dbd07d73d1b37d4da6bfee1", size = 5332376, upload-time = "2026-05-20T18:44:34.242Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pygments"
|
||||
version = "2.20.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyparsing"
|
||||
version = "3.3.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pytest"
|
||||
version = "9.1.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
{ name = "exceptiongroup" },
|
||||
{ name = "iniconfig" },
|
||||
{ name = "packaging" },
|
||||
{ name = "pluggy" },
|
||||
{ name = "pygments" },
|
||||
{ name = "tomli" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rich"
|
||||
version = "15.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "markdown-it-py" },
|
||||
{ name = "pygments" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ruff"
|
||||
version = "0.15.21"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/0f/36/6f65aa9989acdec45d417192d8f4e7921931d8a6cf87ac74bce3eed98a8e/ruff-0.15.21.tar.gz", hash = "sha256:d0cfc841c572283c36548f82664a54ce6565567f1b0d5b4cf2caac693d8b7500", size = 4769401, upload-time = "2026-07-09T20:01:34.005Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d0/c6/ede15cac6839f3dbce52565c8f5164a8210e669c7bc4decb03e5bdf47d0d/ruff-0.15.21-py3-none-linux_armv6l.whl", hash = "sha256:63ea0e965e5d73c90e95b2434beeafc70820536717f561b32ab6e777cb9bdf5d", size = 10854342, upload-time = "2026-07-09T20:00:53.998Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/28/9d/d825b07ee7ea9e2d61df92a860033c94e06e7300d50a1c2653aac27d24fe/ruff-0.15.21-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0f212c5d7d54c01bbfe6dcab02b724a39300f3e34ed7acbe995ccb320a2c58bd", size = 11139539, upload-time = "2026-07-09T20:00:57.809Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f5/de/3b107712e642f063c7a9e0887c427b22cb44097de5aab36c05f2e280670c/ruff-0.15.21-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e6312e41bc96791299614995ea3a977c5857c3b5662b1ecef6755b02b87cb646", size = 10595437, upload-time = "2026-07-09T20:01:00.006Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/6f/b4523cc90ba239ede441447a19d0c968846a3012e5a0b0c5b62831a3d5e3/ruff-0.15.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d65b4831c6b2a4ba8ee6faa84049d44d982b7a706e622c4094c509e51673be", size = 10990053, upload-time = "2026-07-09T20:01:02.187Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/92/cc/c6a9872a5375f0628875481cf2f66b13d7d865bf3ca2e57f91c7e762d976/ruff-0.15.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c5a913a589120ce67933d5d05fd6ddbcc2481c6a054980ee767f7414c72b4fd", size = 10666096, upload-time = "2026-07-09T20:01:04.299Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ab/97/c621f7a17e097f1790fa3af6374138823b330b2d03fc38337945daca212c/ruff-0.15.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef04b681d02ad4dc9620f00f83ac5c22f652d0e9a9cfe431d219b16ad5ccc41", size = 11537011, upload-time = "2026-07-09T20:01:06.771Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/51/d928727e476e25ccc57c6f449ffd80241a651a973ad949d39cfb2a771d28/ruff-0.15.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16d090c0740916594157e75b80d666eab8e78083b39b3b0e1d698f4670a17b86", size = 12347101, upload-time = "2026-07-09T20:01:08.859Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/88/8cd62026802b16018ad06931d87997cf795ba2a6239ab659606c87d96bf0/ruff-0.15.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a10e74757dd65004d779b73e2f3c5210156d9980b41224d50d2ebcf1db51e67", size = 11572001, upload-time = "2026-07-09T20:01:11.092Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/97/f63084cf55444fc110e8cb985ebfcc592af47f597d44453d778cb81bc156/ruff-0.15.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bab0905d2f29e0d9fbc3c373ed23db0095edaa3f71f1f4f519ec15134d9e85c8", size = 11549239, upload-time = "2026-07-09T20:01:13.27Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9d/77/f107da4a2874b7715914b03f09ba9c54424de3ff8a1cc5d015d3ee2ce0ac/ruff-0.15.21-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:00eca240af5789fec6fe7df74c088cc1f9644ed83027113468efba7c92b94075", size = 11535340, upload-time = "2026-07-09T20:01:15.206Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d5/e9/601deb322d3303a7bf212b0100ead6f2ee3f6a044d89c30f2f92bf83c731/ruff-0.15.21-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262ab31557a75141325e32d3357f3597645a7f084e732b6b054dde428ecd9341", size = 10964048, upload-time = "2026-07-09T20:01:17.723Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/2e/0f2176d1e99c15192caea19c8c3a0a955246b4cb4de795042eeb616345cd/ruff-0.15.21-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:659c4e7a4212f83306045ec7c5e5a356d16d9a6ef4ae0c7a4d872914fc655d9d", size = 10667055, upload-time = "2026-07-09T20:01:19.73Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/48/60/abd74a02e0c4214f12a68becfd30af7165cfdcb0e661ecdc60bbb949c09a/ruff-0.15.21-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9e866eab611a5f959d36df2d10e446973a3610bc42b0c15b31dc27977d59c233", size = 11242043, upload-time = "2026-07-09T20:01:21.947Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/c6/583075d8ccabb4b229345edcaf1545eb3d8d6be90f686a479d7e94088bbf/ruff-0.15.21-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e89bc93c0d3803ba870b55c29671bad9dc6d94bb1eb181b056b52eb05b52854f", size = 11648064, upload-time = "2026-07-09T20:01:24.023Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/3c/37d0ecb729a7cc2d393ea7dce316fc585680f35d93b8d62139d7d0a3700c/ruff-0.15.21-py3-none-win32.whl", hash = "sha256:01f8d5be84823c172b389e123174f781f9daf86d6c58719d603f941932195cdd", size = 10896555, upload-time = "2026-07-09T20:01:26.941Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c0/b8/e43466b2a6067ce91e669068f6e28d6c719a920f014b070d5c8731725de3/ruff-0.15.21-py3-none-win_amd64.whl", hash = "sha256:d4b8d9a2f0f12b816b50447f6eccb9f4bb01a6b82c86b50fb3b5354b458dc6d3", size = 12038772, upload-time = "2026-07-09T20:01:29.497Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/dd/75/e90ab9aeece218a9fc5a5bc3ec97d0ee6bb3c4ff95869463c1de58e29a1c/ruff-0.15.21-py3-none-win_arm64.whl", hash = "sha256:6e83115d4b9377c1cbc13abf0e051f069fab0ef815ea0504a8a008cee24dd0a8", size = 11375265, upload-time = "2026-07-09T20:01:31.772Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shellingham"
|
||||
version = "1.5.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tomli"
|
||||
version = "2.4.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typer"
|
||||
version = "0.27.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "annotated-doc" },
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
{ name = "rich" },
|
||||
{ name = "shellingham" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/37/78/fda3361b56efc27944f24225f6ecd13d96d6fcfe37bd0eb34e2f4c63f9fc/typer-0.27.0.tar.gz", hash = "sha256:629bd12ea5d13a17148125d9a264f949eb171fb3f120f9b04d85873cab054fa5", size = 203430, upload-time = "2026-07-15T19:21:07.007Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/40/03/26a383c9e58c213199d1aad1c3d353cfc22d4444ec6d2c0bf8ad02523843/typer-0.27.0-py3-none-any.whl", hash = "sha256:6f4b27631e47f077871b7dc30e933ec0131c1390fbe0e387ea5574b5bac9ccf1", size = 122716, upload-time = "2026-07-15T19:21:05.553Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.16.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" },
|
||||
]
|
||||
@@ -0,0 +1,4 @@
|
||||
file TAUPCT.template {
|
||||
pattern { DEVICE }
|
||||
{ AGEBD-TAUPCT{{ 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,70 @@
|
||||
record(ao, "$(DEVICE):CONTROL-NSAMPLES-FIT-TAU") {
|
||||
field(DESC, "Nr. of charge points for TAU fit")
|
||||
field(VAL, "60")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):CONTROL-NSAMPLES-FIT-ROC") {
|
||||
field(DESC, "Nr. of charge points for ROC fit")
|
||||
field(VAL, "5")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):CONTROL-MIN-CURR") {
|
||||
field(DESC, "Minimum current")
|
||||
field(VAL, "0.1")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):TAU") {
|
||||
field(DESC, "PCT injection rate")
|
||||
field(PREC, "3")
|
||||
field(EGU, "hours")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):TAU-ERR") {
|
||||
field(DESC, "PCT injection rate error")
|
||||
field(PREC, "3")
|
||||
field(EGU, "hours")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):INJRATE") {
|
||||
field(DESC, "PCT injection rate")
|
||||
field(PREC, "3")
|
||||
field(EGU, "mA/min")
|
||||
field(FLNK, "$(DEVICE):INJRATE-nC")
|
||||
}
|
||||
|
||||
record(ao, "$(DEVICE):INJRATE-ERR") {
|
||||
field(DESC, "PCT injection rate error")
|
||||
field(PREC, "3")
|
||||
field(EGU, "mA/min")
|
||||
field(FLNK, "$(DEVICE):INJRATE-ERR-nC")
|
||||
}
|
||||
|
||||
record(calc, "$(DEVICE):INJRATE-nC") {
|
||||
field(DESC, "Rate der Akkumulation im Speicherring")
|
||||
field(ASG, "READONLY")
|
||||
field(PREC, "3")
|
||||
field(EGU, "nC/shot")
|
||||
field(CALC, "A / 60 / 3.125 * 0.96")
|
||||
field(INPA, "$(DEVICE):INJRATE")
|
||||
}
|
||||
|
||||
record(calc, "$(DEVICE):INJRATE-ERR-nC") {
|
||||
field(DESC, "Fehler der Injektionsrate Speicherring")
|
||||
field(ASG, "READONLY")
|
||||
field(PREC, "3")
|
||||
field(EGU, "nC/shot")
|
||||
field(CALC, "A / 60 / 3.125 * 0.96")
|
||||
field(INPA, "$(DEVICE):INJRATE-ERR")
|
||||
}
|
||||
|
||||
record(calc, "$(DEVICE):LOSSRATIO") {
|
||||
field(DESC, "Lossratio now to nominal 400 mA, 10 h")
|
||||
field(ASG, "READONLY")
|
||||
field(PREC, "3")
|
||||
field(CALC, "(I / B) / 50") # = (strom / e / tau) / (400 / e / 10)
|
||||
field(INPB, "$(DEVICE):TAU CP")
|
||||
field(INPI, "ARS07-DPCT-0000:CURR")
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
epicsEnvSet("ENGINEER", "armborst")
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user