Skip to main content

fws-daemon

fws-daemon is a Python-EPICS daemon that provides scan and analysis toolkit functionalities for the FWS system. It orchestrates scan execution through fws_daemon/scan, collects and post-processes scan data, and writes structured HDF5 output for offline analysis.

What this project includes

  • fws-daemon CLI: runs the scan daemon
  • fws-plot CLI: opens interactive plotting tools for produced HDF5 files
  • Typed scan configuration and orchestration modules
  • Callback pipeline for scan status, Gaussian fitting, and HDF5 writing
  • Tests for orchestration, callbacks, interface mapping, and packaging

Installation

Install from the repository root:

pip install .

This installs the console scripts:

  • fws-daemon
  • fws-plot

For development environment setup and editable installs, see docs/development.md.

Quick start

Run daemon for scanner index 1:

fws-daemon 1

Run in test mode:

fws-daemon 1 --test-mode

Write daemon logs to a custom directory:

fws-daemon 1 --log-dir /tmp/fws-daemon

Open plots from an HDF5 file:

fws-plot /path/to/scan.h5 PDB --iops-channel ch1 --scanner-index 1

CLI reference

fws-daemon

fws-daemon <scanner_index> [--test-mode] [--custom-callback PATH]
                      [--log-dir PATH]

Arguments:

  • scanner_index (int): FWS scanner number
  • --test-mode: use Test:* PV prefixes
  • --custom-callback: Python file exposing get_pre_callback and/or get_post_callback. This executes arbitrary Python from the provided file path; only use trusted scripts.
  • --log-dir: daemon log directory (default: var/log/fws-daemon/fws-<NN> for the selected scanner index). Use a writable path if the default location is not permitted on your host.

fws-plot

fws-plot <file_path> <struck_channel>
         [--iops-channel CH1|CH2] [--scanner-index N]

Arguments:

  • file_path: path to an HDF5 scan file
  • struck_channel: DAQ channel (for example PDB, PDT)
  • --iops-channel: optional IOPS channel, defaults to ch1
  • --scanner-index: optional scanner index (auto-detected from filename when omitted)

Architecture overview

The runtime flow for fws-daemon:

  1. Parse daemon CLI args and resolve IOC prefixes.
  2. Build FWSScanInterface and start FWSScanBridgeDaemon.
  3. Read scan inputs from EPICS PVs and validate into ScanConfig.
  4. Plan scan positions with ScanPlanner.
  5. Execute each step with FWSScanRunner.
  6. Collect PV data with ScanDataCollector.
  7. Run callbacks:
    • ScanStatusCallback
    • GaussFitCallback
    • HDF5WriterCallback
  8. Persist data and metadata to HDF5.

For deeper details see:

  • docs/architecture.md
  • docs/development.md
  • docs/operations.md
  • CONTRIBUTING.md

HDF5 output model (high level)

  • Root-level metadata attributes (scan args, user, start time, source)
  • Per-scan groups (scan_001, scan_002, ...)
  • Nested data groups (scan, struck, idc, beam, etc.) with datasets and engineering units where available

Development and testing

Run tests:

pytest -v

Coverage thresholds and test options are configured in pytest.ini. Before running tests locally, make sure dependencies are installed in your active environment.

Repository layout

fws_daemon/
  daemon/      # bridge daemon, interface mapping, callbacks, entrypoint
  scan/        # scan config, planner, runner, orchestration
  plots/       # interactive plot tools and CLI
  utils/       # fitting and path/filename helpers
tests/         # unit and integration tests

License

No license file is currently present in this repository. If you intend to distribute this package externally, add an explicit LICENSE file and ensure pyproject.toml metadata matches the chosen license.

Metadata

Release files for fws-daemon 3.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fws-daemon 3.3.1
File Size Uploaded
fws_daemon-3.3.1.tar.gz 42.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fws-daemon 3.3.1
File Interpreter ABI Platform
fws_daemon-3.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 94.4 kB

Release files / fws_daemon-3.3.1.tar.gz

Download URL fws_daemon-3.3.1.tar.gz
Size 42.2 kB
Tags Source
SHA-256 checksum
How to use checksums
b2d383532bb90e761a0030bb569d4d6ac2a4988a907e1af390fcae64eb285aef
BLAKE2b-256 checksum
How to use checksums
128608325c6ea4a7aba5a41f61632d10e712b5ee19d2e7ec022019df3f88efe6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / fws_daemon-3.3.1-py3-none-any.whl

Download URL fws_daemon-3.3.1-py3-none-any.whl
Size 52.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1d95d45166d1fa7220c265af1e7b90359ddd0a4aad87106d81d6717e6f335eb8
BLAKE2b-256 checksum
How to use checksums
cb7fc441b6eecf4e257e4cf9a200986ab08cd304d0e8f917fcc80e2a577a26ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

3.3.1 This release

2 release files

3.3.0

2 release files

3.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page