Skip to main content

FWS scan daemon and analysis tools

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fws_daemon-3.3.1.tar.gz (42.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fws_daemon-3.3.1-py3-none-any.whl (52.2 kB view details)

Uploaded Python 3

File details

Details for the file fws_daemon-3.3.1.tar.gz.

File metadata

  • Download URL: fws_daemon-3.3.1.tar.gz
  • Upload date:
  • Size: 42.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for fws_daemon-3.3.1.tar.gz
Algorithm Hash digest
SHA256 b2d383532bb90e761a0030bb569d4d6ac2a4988a907e1af390fcae64eb285aef
MD5 f3984406e3e5256873652cd5a585bab5
BLAKE2b-256 128608325c6ea4a7aba5a41f61632d10e712b5ee19d2e7ec022019df3f88efe6

See more details on using hashes here.

File details

Details for the file fws_daemon-3.3.1-py3-none-any.whl.

File metadata

  • Download URL: fws_daemon-3.3.1-py3-none-any.whl
  • Upload date:
  • Size: 52.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for fws_daemon-3.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1d95d45166d1fa7220c265af1e7b90359ddd0a4aad87106d81d6717e6f335eb8
MD5 5928ff3605b608d92345b38903b60061
BLAKE2b-256 cb7fc441b6eecf4e257e4cf9a200986ab08cd304d0e8f917fcc80e2a577a26ea

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page