Repository files navigation

DashPVA: Distributed Analysis and Streaming Hub with Process Variable Access

DashPVA is a modular analysis and visualization platform for X-ray experiments at synchrotron beamlines. It connects to area detectors and EPICS process variables through PvaPy, then distributes data through a pipeline of computation nodes — each node can perform live viewing, real-time analysis, or data reduction depending on the experiment's needs.

Key Capabilities

  • Live Area Detector Streaming — real-time 2D image display with ROI monitoring and statistics
  • HKL 3D Reciprocal Space Mapping — live reciprocal-space visualization from diffractometer motor positions
  • pyFAI 1D Azimuthal Integration — live reduction of 2D diffraction images to 1D patterns
  • XRD Phase Fitting — fit crystal phases to 1D diffraction patterns (file or live mode via pyFAI output)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features of interest in samples
  • Post-Analysis Workbench — HDF5 data exploration with 1D/2D/3D views, ROI tools, and slicing
  • Scan Monitor — track scan progress in real time

Architecture

DashPVA uses two pipeline models, chosen based on whether the analysis is user-interactive or high-throughput:

Interactive Pipeline — GUI tools launched as independent subprocesses, with each tool passing its PV channel to the next via command-line arguments. The user drives the analysis (selecting calibration files, toggling thresholds, choosing phases).

Area Detector 2D → pyFAI 1D Reduction → XRD Phase Fitter

Managed Pipeline — Headless processors orchestrated by the pvapy HPC framework, configured through the PVA Workflow UI. Designed for frame-rate processing where every detector frame must be handled automatically.

Detector → Metadata Associator → Collector → RSM Consumer → HKL 3D Viewer

Both models can coexist in the same session. New analysis chains should use the interactive model when a human needs to guide the analysis, or the managed model when throughput at detector frame rates is required.

Installation

Requirements

  • Python >= 3.11
  • Git

Quick Start

git clone https://github.com/AdvancedPhotonSource/DashPVA.git
cd DashPVA
bash install.sh

The installer will ask which edition to set up:

EditionWhat's includedUse case
FullEverything — streaming, standalone analysis, BayesianBeamline deployment
Area DetectorArea detector viewer + live EPICS streaming (lean)Live detector at the beamline
StandalonePost-analysis tools — Workbench, File Convert, Phase Fitter (no streaming)Offline analysis
BayesianArea detector + Bayesian optimization (blop)Live optimization / alignment

Tiers are additive on the area-detector foundation: Bayesian = Area Detector + blop, and Full = Area Detector + Standalone + Bayesian.

You can skip the prompt with a flag:

bash install.sh --full # everything (streaming + analysis + Bayesian)
bash install.sh --area-det # area detector viewer + live EPICS streaming (lean)
bash install.sh --standalone # post-analysis tools only (no streaming)
bash install.sh --bayesian # area detector + Bayesian optimization (blop)

Updating

bash install.sh --update

Or use the Updates button inside the launcher to pull the latest release.

Launching

DashPVA run

This opens the launcher menu with access to all tools.

Available Commands

DashPVA run # Open the launcher menu
DashPVA detector # Launch Area Detector Viewer
DashPVA hkl3d # Launch HKL 3D Viewer
DashPVA setup # Run PVA workflow setup
DashPVA ioc # Launch the RSM-parameter IOC simulator (GUI)
DashPVA ioc --no-gui # Run the RSM-parameter IOC headless
DashPVA ioc --prefix xidb # Set the IOC PV prefix (default: pvapy)
DashPVA workbench # Launch Workbench data analysis tool
DashPVA h5viewer # Launch HDF5 Viewer
DashPVA bayesian # Launch Bayesian 2D Scan Viewer
DashPVA phasefitter # Launch XRD Phase Fitter
DashPVA monitor scan # Open scan monitor
DashPVA --help # Show all available commands

Project Structure

DashPVA/
├── src/dashpva/ # Main package
│ ├── cli.py # CLI entry point
│ ├── settings.py # Application settings
│ ├── consumers/ # PVA data consumers (metadata, HPC, IOC)
│ ├── database/ # SQLite profile/settings storage
│ ├── gui/ # Qt .ui files
│ ├── hdf_viewer/ # HDF5 interactive viewer
│ ├── utils/ # Shared utilities (HDF5, masks, RSM, etc.)
│ ├── viewer/ # All viewer GUIs
│ │ ├── bayesian/ # Bayesian adaptive scanning
│ │ ├── hkl3d/ # HKL 3D reciprocal space viewer
│ │ ├── launcher/ # Main launcher and process registry
│ │ ├── workbench/ # Post-analysis workbench
│ │ └── ... # Area detector, scan, pyFAI, phase fitter
│ └── workflow/ # PVA workflow setup
├── tests/ # Test suite
│ ├── unit/
│ ├── integration/
│ └── test_data/ # Calibration and test files
├── pv_configs/ # PV configuration TOML files
├── notebooks/ # Analysis notebooks
├── install.sh # Installer script
├── pyproject.toml # Build config and dependencies
├── uv.lock # Locked dependency versions
└── README.md

HKL Live Streaming Setup

For HKL (reciprocal space) live streaming and analysis, DashPVA uses a multi-stage pipeline that processes detector images through several consumers before displaying HKL coordinates in real-time.

Data Flow Pipeline

Detector → Metadata Associator → Collector → RSM Consumer → HKL Viewer

Each stage adds or processes data:

  • Detector: Raw image data from area detector
  • Metadata Associator: Attaches motor positions and metadata to images
  • Collector: Collects and buffers images with metadata
  • RSM Consumer: Calculates HKL coordinates from motor positions using xrayutilities
  • HKL Viewer: Displays 3D reciprocal-space visualization

Configuration

Before starting HKL streaming, configure the TOML file with your beamline-specific PVs.

Edit pv_configs/metadata_pvs.toml

A. Set Detector Prefix:

DETECTOR_PREFIX = 'your_beamline:detector_prefix'

B. Configure Metadata PVs:

[METADATA]
[METADATA.CA]
x = 'your_beamline:x_motor_RBV'y = 'your_beamline:y_motor_RBV'
[METADATA.PVA]

C. Configure HKL Section:

[HKL]
[HKL.SAMPLE_CIRCLE_AXIS_1]
AXIS_NUMBER = 'your_beamline:motor1_RBV:AxisNumber'DIRECTION_AXIS = 'your_beamline:motor1_RBV:DirectionAxis'POSITION = 'your_beamline:motor1_RBV:Position'# Repeat for SAMPLE_CIRCLE_AXIS_2, 3, 4# And DETECTOR_CIRCLE_AXIS_1, 2
[HKL.SPEC]
ENERGY_VALUE = 'your_beamline:spec:Energy:Value'UB_MATRIX_VALUE = 'your_beamline:spec:UB_matrix:Value'
[HKL.DETECTOR_SETUP]
CENTER_CHANNEL_PIXEL = 'your_beamline:DetectorSetup:CenterChannelPixel'DISTANCE = 'your_beamline:DetectorSetup:Distance'PIXEL_DIRECTION_1 = 'your_beamline:DetectorSetup:PixelDirection1'PIXEL_DIRECTION_2 = 'your_beamline:DetectorSetup:PixelDirection2'SIZE = 'your_beamline:DetectorSetup:Size'UNITS = 'your_beamline:DetectorSetup:Units'

For different beamlines, create a beamline-specific config file:

cp pv_configs/metadata_pvs.toml pv_configs/metadata_pvs_YOUR_BEAMLINE.toml

Startup Sequence

Follow these steps in order to start the complete HKL streaming pipeline:

Terminal 1 — Area Detector Viewer:

DashPVA detector

Enter your PVA channel name and click "Start Live View". Keep this running.

Terminal 2 — PVA Workflow Setup:

DashPVA setup

Configure each tab in order:

  1. Config Upload — Browse and select your metadata_pvs.toml
  2. Metadata Associator — Set input/output channels, click "Run Associator Consumers"
  3. Collector — Set input/output channels, click "Run Collector"
  4. Analysis Consumer — Set input/output channels, click "Run Analysis Consumer"

Terminal 3 — HKL 3D Viewer:

DashPVA hkl3d

Enter the RSM Consumer output channel, browse your config file, and click "Start Live View".

Important Notes

  1. Channel names must match — the output channel of one component must match the input channel of the next
  2. TOML file is critical — all motor PVs must be correctly specified in the [HKL] section
  3. Startup order matters — Detector Viewer → Setup consumers (Associator → Collector → RSM) → HKL Viewer

Configuration Files

All configuration files are stored in the pv_configs/ directory.

Example configuration (pv_configs/example_config.toml):

CONSUMER_TYPE = "spontaneous"
[METADATA]
[METADATA.CA]
x = "x"y = "y"
[METADATA.PVA]
[ROI]
[ROI.ROI1]
MIN_X = "dp-ADSim:ROI1:MinX"MIN_Y = "dp-ADSim:ROI1:MinY"SIZE_X = "dp-ADSim:ROI1:SizeX"SIZE_Y = "dp-ADSim:ROI1:SizeY"
[STATS]
[STATS.STATS1]
TOTAL = "dp-ADSim:Stats1:Total_RBV"MIN = "dp-ADSim:Stats1:MinValue_RBV"MAX = "dp-ADSim:Stats1:MaxValue_RBV"SIGMA = "dp-ADSim:Stats1:Sigma_RBV"MEAN = "dp-ADSim:Stats1:MeanValue_RBV"
[ANALYSIS]
AXIS1 = "x"AXIS2 = "y"

Troubleshooting

EPICS Database Definition (DBD) Directory Not Found

If you see:

Cannot find dbd directory, please set EPICS_DB_INCLUDE_PATH environment variable

Solution: Set the environment variable:

export EPICS_DB_INCLUDE_PATH=/APSshare/epics/base-7.0.8/dbd

Add to ~/.bashrc or ~/.zshrc to make it persistent.

GUI Issues

  • Verify .ui files exist in src/dashpva/gui/
  • Ensure correct paths for PV configuration files in pv_configs/

What's New

Check out CHANGELOG.md for the latest features, improvements, and changes.

FAQ

What is DashPVA? DashPVA is a modular platform for real-time X-ray data acquisition, visualization, and analysis at synchrotron beamlines. It connects to area detectors via PvaPy/EPICS and distributes data through a pipeline of computation nodes — each node can perform live viewing, data reduction, or analysis depending on the experiment's needs.

What analysis tools are available? DashPVA provides several analysis modules, each targeting a different experimental need:

  • HKL 3D — live reciprocal-space mapping for diffractometer experiments
  • pyFAI integration — live 1D azimuthal reduction of 2D diffraction images
  • Phase Fitter — XRD crystal phase fitting against 1D patterns (file or live via pyFAI)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features in a sample
  • Workbench — post-experiment HDF5 exploration with 1D/2D/3D views and ROI tools

How does the pipeline architecture work? DashPVA spawns each analysis tool as an independent process (node). Data flows from the detector through metadata association, collection, and analysis stages. Each node can be a viewer, a data reducer, or an analysis engine. You compose different chains depending on what you need — for example, detector → pyFAI integration → live phase fitting, or detector → RSM calculation → HKL 3D viewer.

What is the difference between Full and Standalone editions? Full includes everything — live streaming via pvaccess/EPICS, all real-time analysis tools, and Bayesian optimization. Area Detector is the lean streaming foundation (detector viewer + EPICS). Bayesian adds the blop optimizer on top of Area Detector. Standalone is a lighter install for offline post-analysis: Workbench, File Convert, Metadata Converter, and Phase Fitter (file mode only). Use bash install.sh --full, --area-det, --standalone, or --bayesian to choose.

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

DashPVA: Distributed Analysis and Streaming Hub with Process Variable Access

DashPVA is a modular analysis and visualization platform for X-ray experiments at synchrotron beamlines. It connects to area detectors and EPICS process variables through PvaPy, then distributes data through a pipeline of computation nodes — each node can perform live viewing, real-time analysis, or data reduction depending on the experiment's needs.

Key Capabilities

  • Live Area Detector Streaming — real-time 2D image display with ROI monitoring and statistics
  • HKL 3D Reciprocal Space Mapping — live reciprocal-space visualization from diffractometer motor positions
  • pyFAI 1D Azimuthal Integration — live reduction of 2D diffraction images to 1D patterns
  • XRD Phase Fitting — fit crystal phases to 1D diffraction patterns (file or live mode via pyFAI output)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features of interest in samples
  • Post-Analysis Workbench — HDF5 data exploration with 1D/2D/3D views, ROI tools, and slicing
  • Scan Monitor — track scan progress in real time

Architecture

DashPVA uses two pipeline models, chosen based on whether the analysis is user-interactive or high-throughput:

Interactive Pipeline — GUI tools launched as independent subprocesses, with each tool passing its PV channel to the next via command-line arguments. The user drives the analysis (selecting calibration files, toggling thresholds, choosing phases).

Area Detector 2D → pyFAI 1D Reduction → XRD Phase Fitter

Managed Pipeline — Headless processors orchestrated by the pvapy HPC framework, configured through the PVA Workflow UI. Designed for frame-rate processing where every detector frame must be handled automatically.

Detector → Metadata Associator → Collector → RSM Consumer → HKL 3D Viewer

Both models can coexist in the same session. New analysis chains should use the interactive model when a human needs to guide the analysis, or the managed model when throughput at detector frame rates is required.

Installation

Requirements

  • Python >= 3.11
  • Git

Quick Start

git clone https://github.com/AdvancedPhotonSource/DashPVA.git
cd DashPVA
bash install.sh

The installer will ask which edition to set up:

EditionWhat's includedUse case
FullEverything — streaming, standalone analysis, BayesianBeamline deployment
Area DetectorArea detector viewer + live EPICS streaming (lean)Live detector at the beamline
StandalonePost-analysis tools — Workbench, File Convert, Phase Fitter (no streaming)Offline analysis
BayesianArea detector + Bayesian optimization (blop)Live optimization / alignment

Tiers are additive on the area-detector foundation: Bayesian = Area Detector + blop, and Full = Area Detector + Standalone + Bayesian.

You can skip the prompt with a flag:

bash install.sh --full # everything (streaming + analysis + Bayesian)
bash install.sh --area-det # area detector viewer + live EPICS streaming (lean)
bash install.sh --standalone # post-analysis tools only (no streaming)
bash install.sh --bayesian # area detector + Bayesian optimization (blop)

Updating

bash install.sh --update

Or use the Updates button inside the launcher to pull the latest release.

Launching

DashPVA run

This opens the launcher menu with access to all tools.

Available Commands

DashPVA run # Open the launcher menu
DashPVA detector # Launch Area Detector Viewer
DashPVA hkl3d # Launch HKL 3D Viewer
DashPVA setup # Run PVA workflow setup
DashPVA ioc # Launch the RSM-parameter IOC simulator (GUI)
DashPVA ioc --no-gui # Run the RSM-parameter IOC headless
DashPVA ioc --prefix xidb # Set the IOC PV prefix (default: pvapy)
DashPVA workbench # Launch Workbench data analysis tool
DashPVA h5viewer # Launch HDF5 Viewer
DashPVA bayesian # Launch Bayesian 2D Scan Viewer
DashPVA phasefitter # Launch XRD Phase Fitter
DashPVA monitor scan # Open scan monitor
DashPVA --help # Show all available commands

Project Structure

DashPVA/
├── src/dashpva/ # Main package
│ ├── cli.py # CLI entry point
│ ├── settings.py # Application settings
│ ├── consumers/ # PVA data consumers (metadata, HPC, IOC)
│ ├── database/ # SQLite profile/settings storage
│ ├── gui/ # Qt .ui files
│ ├── hdf_viewer/ # HDF5 interactive viewer
│ ├── utils/ # Shared utilities (HDF5, masks, RSM, etc.)
│ ├── viewer/ # All viewer GUIs
│ │ ├── bayesian/ # Bayesian adaptive scanning
│ │ ├── hkl3d/ # HKL 3D reciprocal space viewer
│ │ ├── launcher/ # Main launcher and process registry
│ │ ├── workbench/ # Post-analysis workbench
│ │ └── ... # Area detector, scan, pyFAI, phase fitter
│ └── workflow/ # PVA workflow setup
├── tests/ # Test suite
│ ├── unit/
│ ├── integration/
│ └── test_data/ # Calibration and test files
├── pv_configs/ # PV configuration TOML files
├── notebooks/ # Analysis notebooks
├── install.sh # Installer script
├── pyproject.toml # Build config and dependencies
├── uv.lock # Locked dependency versions
└── README.md

HKL Live Streaming Setup

For HKL (reciprocal space) live streaming and analysis, DashPVA uses a multi-stage pipeline that processes detector images through several consumers before displaying HKL coordinates in real-time.

Data Flow Pipeline

Detector → Metadata Associator → Collector → RSM Consumer → HKL Viewer

Each stage adds or processes data:

  • Detector: Raw image data from area detector
  • Metadata Associator: Attaches motor positions and metadata to images
  • Collector: Collects and buffers images with metadata
  • RSM Consumer: Calculates HKL coordinates from motor positions using xrayutilities
  • HKL Viewer: Displays 3D reciprocal-space visualization

Configuration

Before starting HKL streaming, configure the TOML file with your beamline-specific PVs.

Edit pv_configs/metadata_pvs.toml

A. Set Detector Prefix:

DETECTOR_PREFIX = 'your_beamline:detector_prefix'

B. Configure Metadata PVs:

[METADATA]
[METADATA.CA]
x = 'your_beamline:x_motor_RBV'y = 'your_beamline:y_motor_RBV'
[METADATA.PVA]

C. Configure HKL Section:

[HKL]
[HKL.SAMPLE_CIRCLE_AXIS_1]
AXIS_NUMBER = 'your_beamline:motor1_RBV:AxisNumber'DIRECTION_AXIS = 'your_beamline:motor1_RBV:DirectionAxis'POSITION = 'your_beamline:motor1_RBV:Position'# Repeat for SAMPLE_CIRCLE_AXIS_2, 3, 4# And DETECTOR_CIRCLE_AXIS_1, 2
[HKL.SPEC]
ENERGY_VALUE = 'your_beamline:spec:Energy:Value'UB_MATRIX_VALUE = 'your_beamline:spec:UB_matrix:Value'
[HKL.DETECTOR_SETUP]
CENTER_CHANNEL_PIXEL = 'your_beamline:DetectorSetup:CenterChannelPixel'DISTANCE = 'your_beamline:DetectorSetup:Distance'PIXEL_DIRECTION_1 = 'your_beamline:DetectorSetup:PixelDirection1'PIXEL_DIRECTION_2 = 'your_beamline:DetectorSetup:PixelDirection2'SIZE = 'your_beamline:DetectorSetup:Size'UNITS = 'your_beamline:DetectorSetup:Units'

For different beamlines, create a beamline-specific config file:

cp pv_configs/metadata_pvs.toml pv_configs/metadata_pvs_YOUR_BEAMLINE.toml

Startup Sequence

Follow these steps in order to start the complete HKL streaming pipeline:

Terminal 1 — Area Detector Viewer:

DashPVA detector

Enter your PVA channel name and click "Start Live View". Keep this running.

Terminal 2 — PVA Workflow Setup:

DashPVA setup

Configure each tab in order:

  1. Config Upload — Browse and select your metadata_pvs.toml
  2. Metadata Associator — Set input/output channels, click "Run Associator Consumers"
  3. Collector — Set input/output channels, click "Run Collector"
  4. Analysis Consumer — Set input/output channels, click "Run Analysis Consumer"

Terminal 3 — HKL 3D Viewer:

DashPVA hkl3d

Enter the RSM Consumer output channel, browse your config file, and click "Start Live View".

Important Notes

  1. Channel names must match — the output channel of one component must match the input channel of the next
  2. TOML file is critical — all motor PVs must be correctly specified in the [HKL] section
  3. Startup order matters — Detector Viewer → Setup consumers (Associator → Collector → RSM) → HKL Viewer

Configuration Files

All configuration files are stored in the pv_configs/ directory.

Example configuration (pv_configs/example_config.toml):

CONSUMER_TYPE = "spontaneous"
[METADATA]
[METADATA.CA]
x = "x"y = "y"
[METADATA.PVA]
[ROI]
[ROI.ROI1]
MIN_X = "dp-ADSim:ROI1:MinX"MIN_Y = "dp-ADSim:ROI1:MinY"SIZE_X = "dp-ADSim:ROI1:SizeX"SIZE_Y = "dp-ADSim:ROI1:SizeY"
[STATS]
[STATS.STATS1]
TOTAL = "dp-ADSim:Stats1:Total_RBV"MIN = "dp-ADSim:Stats1:MinValue_RBV"MAX = "dp-ADSim:Stats1:MaxValue_RBV"SIGMA = "dp-ADSim:Stats1:Sigma_RBV"MEAN = "dp-ADSim:Stats1:MeanValue_RBV"
[ANALYSIS]
AXIS1 = "x"AXIS2 = "y"

Troubleshooting

EPICS Database Definition (DBD) Directory Not Found

If you see:

Cannot find dbd directory, please set EPICS_DB_INCLUDE_PATH environment variable

Solution: Set the environment variable:

export EPICS_DB_INCLUDE_PATH=/APSshare/epics/base-7.0.8/dbd

Add to ~/.bashrc or ~/.zshrc to make it persistent.

GUI Issues

  • Verify .ui files exist in src/dashpva/gui/
  • Ensure correct paths for PV configuration files in pv_configs/

What's New

Check out CHANGELOG.md for the latest features, improvements, and changes.

FAQ

What is DashPVA? DashPVA is a modular platform for real-time X-ray data acquisition, visualization, and analysis at synchrotron beamlines. It connects to area detectors via PvaPy/EPICS and distributes data through a pipeline of computation nodes — each node can perform live viewing, data reduction, or analysis depending on the experiment's needs.

What analysis tools are available? DashPVA provides several analysis modules, each targeting a different experimental need:

  • HKL 3D — live reciprocal-space mapping for diffractometer experiments
  • pyFAI integration — live 1D azimuthal reduction of 2D diffraction images
  • Phase Fitter — XRD crystal phase fitting against 1D patterns (file or live via pyFAI)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features in a sample
  • Workbench — post-experiment HDF5 exploration with 1D/2D/3D views and ROI tools

How does the pipeline architecture work? DashPVA spawns each analysis tool as an independent process (node). Data flows from the detector through metadata association, collection, and analysis stages. Each node can be a viewer, a data reducer, or an analysis engine. You compose different chains depending on what you need — for example, detector → pyFAI integration → live phase fitting, or detector → RSM calculation → HKL 3D viewer.

What is the difference between Full and Standalone editions? Full includes everything — live streaming via pvaccess/EPICS, all real-time analysis tools, and Bayesian optimization. Area Detector is the lean streaming foundation (detector viewer + EPICS). Bayesian adds the blop optimizer on top of Area Detector. Standalone is a lighter install for offline post-analysis: Workbench, File Convert, Metadata Converter, and Phase Fitter (file mode only). Use bash install.sh --full, --area-det, --standalone, or --bayesian to choose.

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DashPVA: Distributed Analysis and Streaming Hub with Process Variable Access

DashPVA is a modular analysis and visualization platform for X-ray experiments at synchrotron beamlines. It connects to area detectors and EPICS process variables through PvaPy, then distributes data through a pipeline of computation nodes — each node can perform live viewing, real-time analysis, or data reduction depending on the experiment's needs.

Key Capabilities

  • Live Area Detector Streaming — real-time 2D image display with ROI monitoring and statistics
  • HKL 3D Reciprocal Space Mapping — live reciprocal-space visualization from diffractometer motor positions
  • pyFAI 1D Azimuthal Integration — live reduction of 2D diffraction images to 1D patterns
  • XRD Phase Fitting — fit crystal phases to 1D diffraction patterns (file or live mode via pyFAI output)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features of interest in samples
  • Post-Analysis Workbench — HDF5 data exploration with 1D/2D/3D views, ROI tools, and slicing
  • Scan Monitor — track scan progress in real time

Architecture

DashPVA uses two pipeline models, chosen based on whether the analysis is user-interactive or high-throughput:

Interactive Pipeline — GUI tools launched as independent subprocesses, with each tool passing its PV channel to the next via command-line arguments. The user drives the analysis (selecting calibration files, toggling thresholds, choosing phases).

Area Detector 2D → pyFAI 1D Reduction → XRD Phase Fitter

Managed Pipeline — Headless processors orchestrated by the pvapy HPC framework, configured through the PVA Workflow UI. Designed for frame-rate processing where every detector frame must be handled automatically.

Detector → Metadata Associator → Collector → RSM Consumer → HKL 3D Viewer

Both models can coexist in the same session. New analysis chains should use the interactive model when a human needs to guide the analysis, or the managed model when throughput at detector frame rates is required.

Installation

Requirements

  • Python >= 3.11
  • Git

Quick Start

git clone https://github.com/AdvancedPhotonSource/DashPVA.git
cd DashPVA
bash install.sh

The installer will ask which edition to set up:

EditionWhat's includedUse case
FullEverything — streaming, standalone analysis, BayesianBeamline deployment
Area DetectorArea detector viewer + live EPICS streaming (lean)Live detector at the beamline
StandalonePost-analysis tools — Workbench, File Convert, Phase Fitter (no streaming)Offline analysis
BayesianArea detector + Bayesian optimization (blop)Live optimization / alignment

Tiers are additive on the area-detector foundation: Bayesian = Area Detector + blop, and Full = Area Detector + Standalone + Bayesian.

You can skip the prompt with a flag:

bash install.sh --full # everything (streaming + analysis + Bayesian)
bash install.sh --area-det # area detector viewer + live EPICS streaming (lean)
bash install.sh --standalone # post-analysis tools only (no streaming)
bash install.sh --bayesian # area detector + Bayesian optimization (blop)

Updating

bash install.sh --update

Or use the Updates button inside the launcher to pull the latest release.

Launching

DashPVA run

This opens the launcher menu with access to all tools.

Available Commands

DashPVA run # Open the launcher menu
DashPVA detector # Launch Area Detector Viewer
DashPVA hkl3d # Launch HKL 3D Viewer
DashPVA setup # Run PVA workflow setup
DashPVA ioc # Launch the RSM-parameter IOC simulator (GUI)
DashPVA ioc --no-gui # Run the RSM-parameter IOC headless
DashPVA ioc --prefix xidb # Set the IOC PV prefix (default: pvapy)
DashPVA workbench # Launch Workbench data analysis tool
DashPVA h5viewer # Launch HDF5 Viewer
DashPVA bayesian # Launch Bayesian 2D Scan Viewer
DashPVA phasefitter # Launch XRD Phase Fitter
DashPVA monitor scan # Open scan monitor
DashPVA --help # Show all available commands

Project Structure

DashPVA/
├── src/dashpva/ # Main package
│ ├── cli.py # CLI entry point
│ ├── settings.py # Application settings
│ ├── consumers/ # PVA data consumers (metadata, HPC, IOC)
│ ├── database/ # SQLite profile/settings storage
│ ├── gui/ # Qt .ui files
│ ├── hdf_viewer/ # HDF5 interactive viewer
│ ├── utils/ # Shared utilities (HDF5, masks, RSM, etc.)
│ ├── viewer/ # All viewer GUIs
│ │ ├── bayesian/ # Bayesian adaptive scanning
│ │ ├── hkl3d/ # HKL 3D reciprocal space viewer
│ │ ├── launcher/ # Main launcher and process registry
│ │ ├── workbench/ # Post-analysis workbench
│ │ └── ... # Area detector, scan, pyFAI, phase fitter
│ └── workflow/ # PVA workflow setup
├── tests/ # Test suite
│ ├── unit/
│ ├── integration/
│ └── test_data/ # Calibration and test files
├── pv_configs/ # PV configuration TOML files
├── notebooks/ # Analysis notebooks
├── install.sh # Installer script
├── pyproject.toml # Build config and dependencies
├── uv.lock # Locked dependency versions
└── README.md

HKL Live Streaming Setup

For HKL (reciprocal space) live streaming and analysis, DashPVA uses a multi-stage pipeline that processes detector images through several consumers before displaying HKL coordinates in real-time.

Data Flow Pipeline

Detector → Metadata Associator → Collector → RSM Consumer → HKL Viewer

Each stage adds or processes data:

  • Detector: Raw image data from area detector
  • Metadata Associator: Attaches motor positions and metadata to images
  • Collector: Collects and buffers images with metadata
  • RSM Consumer: Calculates HKL coordinates from motor positions using xrayutilities
  • HKL Viewer: Displays 3D reciprocal-space visualization

Configuration

Before starting HKL streaming, configure the TOML file with your beamline-specific PVs.

Edit pv_configs/metadata_pvs.toml

A. Set Detector Prefix:

DETECTOR_PREFIX = 'your_beamline:detector_prefix'

B. Configure Metadata PVs:

[METADATA]
[METADATA.CA]
x = 'your_beamline:x_motor_RBV'y = 'your_beamline:y_motor_RBV'
[METADATA.PVA]

C. Configure HKL Section:

[HKL]
[HKL.SAMPLE_CIRCLE_AXIS_1]
AXIS_NUMBER = 'your_beamline:motor1_RBV:AxisNumber'DIRECTION_AXIS = 'your_beamline:motor1_RBV:DirectionAxis'POSITION = 'your_beamline:motor1_RBV:Position'# Repeat for SAMPLE_CIRCLE_AXIS_2, 3, 4# And DETECTOR_CIRCLE_AXIS_1, 2
[HKL.SPEC]
ENERGY_VALUE = 'your_beamline:spec:Energy:Value'UB_MATRIX_VALUE = 'your_beamline:spec:UB_matrix:Value'
[HKL.DETECTOR_SETUP]
CENTER_CHANNEL_PIXEL = 'your_beamline:DetectorSetup:CenterChannelPixel'DISTANCE = 'your_beamline:DetectorSetup:Distance'PIXEL_DIRECTION_1 = 'your_beamline:DetectorSetup:PixelDirection1'PIXEL_DIRECTION_2 = 'your_beamline:DetectorSetup:PixelDirection2'SIZE = 'your_beamline:DetectorSetup:Size'UNITS = 'your_beamline:DetectorSetup:Units'

For different beamlines, create a beamline-specific config file:

cp pv_configs/metadata_pvs.toml pv_configs/metadata_pvs_YOUR_BEAMLINE.toml

Startup Sequence

Follow these steps in order to start the complete HKL streaming pipeline:

Terminal 1 — Area Detector Viewer:

DashPVA detector

Enter your PVA channel name and click "Start Live View". Keep this running.

Terminal 2 — PVA Workflow Setup:

DashPVA setup

Configure each tab in order:

  1. Config Upload — Browse and select your metadata_pvs.toml
  2. Metadata Associator — Set input/output channels, click "Run Associator Consumers"
  3. Collector — Set input/output channels, click "Run Collector"
  4. Analysis Consumer — Set input/output channels, click "Run Analysis Consumer"

Terminal 3 — HKL 3D Viewer:

DashPVA hkl3d

Enter the RSM Consumer output channel, browse your config file, and click "Start Live View".

Important Notes

  1. Channel names must match — the output channel of one component must match the input channel of the next
  2. TOML file is critical — all motor PVs must be correctly specified in the [HKL] section
  3. Startup order matters — Detector Viewer → Setup consumers (Associator → Collector → RSM) → HKL Viewer

Configuration Files

All configuration files are stored in the pv_configs/ directory.

Example configuration (pv_configs/example_config.toml):

CONSUMER_TYPE = "spontaneous"
[METADATA]
[METADATA.CA]
x = "x"y = "y"
[METADATA.PVA]
[ROI]
[ROI.ROI1]
MIN_X = "dp-ADSim:ROI1:MinX"MIN_Y = "dp-ADSim:ROI1:MinY"SIZE_X = "dp-ADSim:ROI1:SizeX"SIZE_Y = "dp-ADSim:ROI1:SizeY"
[STATS]
[STATS.STATS1]
TOTAL = "dp-ADSim:Stats1:Total_RBV"MIN = "dp-ADSim:Stats1:MinValue_RBV"MAX = "dp-ADSim:Stats1:MaxValue_RBV"SIGMA = "dp-ADSim:Stats1:Sigma_RBV"MEAN = "dp-ADSim:Stats1:MeanValue_RBV"
[ANALYSIS]
AXIS1 = "x"AXIS2 = "y"

Troubleshooting

EPICS Database Definition (DBD) Directory Not Found

If you see:

Cannot find dbd directory, please set EPICS_DB_INCLUDE_PATH environment variable

Solution: Set the environment variable:

export EPICS_DB_INCLUDE_PATH=/APSshare/epics/base-7.0.8/dbd

Add to ~/.bashrc or ~/.zshrc to make it persistent.

GUI Issues

  • Verify .ui files exist in src/dashpva/gui/
  • Ensure correct paths for PV configuration files in pv_configs/

What's New

Check out CHANGELOG.md for the latest features, improvements, and changes.

FAQ

What is DashPVA? DashPVA is a modular platform for real-time X-ray data acquisition, visualization, and analysis at synchrotron beamlines. It connects to area detectors via PvaPy/EPICS and distributes data through a pipeline of computation nodes — each node can perform live viewing, data reduction, or analysis depending on the experiment's needs.

What analysis tools are available? DashPVA provides several analysis modules, each targeting a different experimental need:

  • HKL 3D — live reciprocal-space mapping for diffractometer experiments
  • pyFAI integration — live 1D azimuthal reduction of 2D diffraction images
  • Phase Fitter — XRD crystal phase fitting against 1D patterns (file or live via pyFAI)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features in a sample
  • Workbench — post-experiment HDF5 exploration with 1D/2D/3D views and ROI tools

How does the pipeline architecture work? DashPVA spawns each analysis tool as an independent process (node). Data flows from the detector through metadata association, collection, and analysis stages. Each node can be a viewer, a data reducer, or an analysis engine. You compose different chains depending on what you need — for example, detector → pyFAI integration → live phase fitting, or detector → RSM calculation → HKL 3D viewer.

What is the difference between Full and Standalone editions? Full includes everything — live streaming via pvaccess/EPICS, all real-time analysis tools, and Bayesian optimization. Area Detector is the lean streaming foundation (detector viewer + EPICS). Bayesian adds the blop optimizer on top of Area Detector. Standalone is a lighter install for offline post-analysis: Workbench, File Convert, Metadata Converter, and Phase Fitter (file mode only). Use bash install.sh --full, --area-det, --standalone, or --bayesian to choose.

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DashPVA: Distributed Analysis and Streaming Hub with Process Variable Access

DashPVA is a modular analysis and visualization platform for X-ray experiments at synchrotron beamlines. It connects to area detectors and EPICS process variables through PvaPy, then distributes data through a pipeline of computation nodes — each node can perform live viewing, real-time analysis, or data reduction depending on the experiment's needs.

Key Capabilities

  • Live Area Detector Streaming — real-time 2D image display with ROI monitoring and statistics
  • HKL 3D Reciprocal Space Mapping — live reciprocal-space visualization from diffractometer motor positions
  • pyFAI 1D Azimuthal Integration — live reduction of 2D diffraction images to 1D patterns
  • XRD Phase Fitting — fit crystal phases to 1D diffraction patterns (file or live mode via pyFAI output)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features of interest in samples
  • Post-Analysis Workbench — HDF5 data exploration with 1D/2D/3D views, ROI tools, and slicing
  • Scan Monitor — track scan progress in real time

Architecture

DashPVA uses two pipeline models, chosen based on whether the analysis is user-interactive or high-throughput:

Interactive Pipeline — GUI tools launched as independent subprocesses, with each tool passing its PV channel to the next via command-line arguments. The user drives the analysis (selecting calibration files, toggling thresholds, choosing phases).

Area Detector 2D → pyFAI 1D Reduction → XRD Phase Fitter

Managed Pipeline — Headless processors orchestrated by the pvapy HPC framework, configured through the PVA Workflow UI. Designed for frame-rate processing where every detector frame must be handled automatically.

Detector → Metadata Associator → Collector → RSM Consumer → HKL 3D Viewer

Both models can coexist in the same session. New analysis chains should use the interactive model when a human needs to guide the analysis, or the managed model when throughput at detector frame rates is required.

Installation

Requirements

  • Python >= 3.11
  • Git

Quick Start

git clone https://github.com/AdvancedPhotonSource/DashPVA.git
cd DashPVA
bash install.sh

The installer will ask which edition to set up:

EditionWhat's includedUse case
FullEverything — streaming, standalone analysis, BayesianBeamline deployment
Area DetectorArea detector viewer + live EPICS streaming (lean)Live detector at the beamline
StandalonePost-analysis tools — Workbench, File Convert, Phase Fitter (no streaming)Offline analysis
BayesianArea detector + Bayesian optimization (blop)Live optimization / alignment

Tiers are additive on the area-detector foundation: Bayesian = Area Detector + blop, and Full = Area Detector + Standalone + Bayesian.

You can skip the prompt with a flag:

bash install.sh --full # everything (streaming + analysis + Bayesian)
bash install.sh --area-det # area detector viewer + live EPICS streaming (lean)
bash install.sh --standalone # post-analysis tools only (no streaming)
bash install.sh --bayesian # area detector + Bayesian optimization (blop)

Updating

bash install.sh --update

Or use the Updates button inside the launcher to pull the latest release.

Launching

DashPVA run

This opens the launcher menu with access to all tools.

Available Commands

DashPVA run # Open the launcher menu
DashPVA detector # Launch Area Detector Viewer
DashPVA hkl3d # Launch HKL 3D Viewer
DashPVA setup # Run PVA workflow setup
DashPVA ioc # Launch the RSM-parameter IOC simulator (GUI)
DashPVA ioc --no-gui # Run the RSM-parameter IOC headless
DashPVA ioc --prefix xidb # Set the IOC PV prefix (default: pvapy)
DashPVA workbench # Launch Workbench data analysis tool
DashPVA h5viewer # Launch HDF5 Viewer
DashPVA bayesian # Launch Bayesian 2D Scan Viewer
DashPVA phasefitter # Launch XRD Phase Fitter
DashPVA monitor scan # Open scan monitor
DashPVA --help # Show all available commands

Project Structure

DashPVA/
├── src/dashpva/ # Main package
│ ├── cli.py # CLI entry point
│ ├── settings.py # Application settings
│ ├── consumers/ # PVA data consumers (metadata, HPC, IOC)
│ ├── database/ # SQLite profile/settings storage
│ ├── gui/ # Qt .ui files
│ ├── hdf_viewer/ # HDF5 interactive viewer
│ ├── utils/ # Shared utilities (HDF5, masks, RSM, etc.)
│ ├── viewer/ # All viewer GUIs
│ │ ├── bayesian/ # Bayesian adaptive scanning
│ │ ├── hkl3d/ # HKL 3D reciprocal space viewer
│ │ ├── launcher/ # Main launcher and process registry
│ │ ├── workbench/ # Post-analysis workbench
│ │ └── ... # Area detector, scan, pyFAI, phase fitter
│ └── workflow/ # PVA workflow setup
├── tests/ # Test suite
│ ├── unit/
│ ├── integration/
│ └── test_data/ # Calibration and test files
├── pv_configs/ # PV configuration TOML files
├── notebooks/ # Analysis notebooks
├── install.sh # Installer script
├── pyproject.toml # Build config and dependencies
├── uv.lock # Locked dependency versions
└── README.md

HKL Live Streaming Setup

For HKL (reciprocal space) live streaming and analysis, DashPVA uses a multi-stage pipeline that processes detector images through several consumers before displaying HKL coordinates in real-time.

Data Flow Pipeline

Detector → Metadata Associator → Collector → RSM Consumer → HKL Viewer

Each stage adds or processes data:

  • Detector: Raw image data from area detector
  • Metadata Associator: Attaches motor positions and metadata to images
  • Collector: Collects and buffers images with metadata
  • RSM Consumer: Calculates HKL coordinates from motor positions using xrayutilities
  • HKL Viewer: Displays 3D reciprocal-space visualization

Configuration

Before starting HKL streaming, configure the TOML file with your beamline-specific PVs.

Edit pv_configs/metadata_pvs.toml

A. Set Detector Prefix:

DETECTOR_PREFIX = 'your_beamline:detector_prefix'

B. Configure Metadata PVs:

[METADATA]
[METADATA.CA]
x = 'your_beamline:x_motor_RBV'y = 'your_beamline:y_motor_RBV'
[METADATA.PVA]

C. Configure HKL Section:

[HKL]
[HKL.SAMPLE_CIRCLE_AXIS_1]
AXIS_NUMBER = 'your_beamline:motor1_RBV:AxisNumber'DIRECTION_AXIS = 'your_beamline:motor1_RBV:DirectionAxis'POSITION = 'your_beamline:motor1_RBV:Position'# Repeat for SAMPLE_CIRCLE_AXIS_2, 3, 4# And DETECTOR_CIRCLE_AXIS_1, 2
[HKL.SPEC]
ENERGY_VALUE = 'your_beamline:spec:Energy:Value'UB_MATRIX_VALUE = 'your_beamline:spec:UB_matrix:Value'
[HKL.DETECTOR_SETUP]
CENTER_CHANNEL_PIXEL = 'your_beamline:DetectorSetup:CenterChannelPixel'DISTANCE = 'your_beamline:DetectorSetup:Distance'PIXEL_DIRECTION_1 = 'your_beamline:DetectorSetup:PixelDirection1'PIXEL_DIRECTION_2 = 'your_beamline:DetectorSetup:PixelDirection2'SIZE = 'your_beamline:DetectorSetup:Size'UNITS = 'your_beamline:DetectorSetup:Units'

For different beamlines, create a beamline-specific config file:

cp pv_configs/metadata_pvs.toml pv_configs/metadata_pvs_YOUR_BEAMLINE.toml

Startup Sequence

Follow these steps in order to start the complete HKL streaming pipeline:

Terminal 1 — Area Detector Viewer:

DashPVA detector

Enter your PVA channel name and click "Start Live View". Keep this running.

Terminal 2 — PVA Workflow Setup:

DashPVA setup

Configure each tab in order:

  1. Config Upload — Browse and select your metadata_pvs.toml
  2. Metadata Associator — Set input/output channels, click "Run Associator Consumers"
  3. Collector — Set input/output channels, click "Run Collector"
  4. Analysis Consumer — Set input/output channels, click "Run Analysis Consumer"

Terminal 3 — HKL 3D Viewer:

DashPVA hkl3d

Enter the RSM Consumer output channel, browse your config file, and click "Start Live View".

Important Notes

  1. Channel names must match — the output channel of one component must match the input channel of the next
  2. TOML file is critical — all motor PVs must be correctly specified in the [HKL] section
  3. Startup order matters — Detector Viewer → Setup consumers (Associator → Collector → RSM) → HKL Viewer

Configuration Files

All configuration files are stored in the pv_configs/ directory.

Example configuration (pv_configs/example_config.toml):

CONSUMER_TYPE = "spontaneous"
[METADATA]
[METADATA.CA]
x = "x"y = "y"
[METADATA.PVA]
[ROI]
[ROI.ROI1]
MIN_X = "dp-ADSim:ROI1:MinX"MIN_Y = "dp-ADSim:ROI1:MinY"SIZE_X = "dp-ADSim:ROI1:SizeX"SIZE_Y = "dp-ADSim:ROI1:SizeY"
[STATS]
[STATS.STATS1]
TOTAL = "dp-ADSim:Stats1:Total_RBV"MIN = "dp-ADSim:Stats1:MinValue_RBV"MAX = "dp-ADSim:Stats1:MaxValue_RBV"SIGMA = "dp-ADSim:Stats1:Sigma_RBV"MEAN = "dp-ADSim:Stats1:MeanValue_RBV"
[ANALYSIS]
AXIS1 = "x"AXIS2 = "y"

Troubleshooting

EPICS Database Definition (DBD) Directory Not Found

If you see:

Cannot find dbd directory, please set EPICS_DB_INCLUDE_PATH environment variable

Solution: Set the environment variable:

export EPICS_DB_INCLUDE_PATH=/APSshare/epics/base-7.0.8/dbd

Add to ~/.bashrc or ~/.zshrc to make it persistent.

GUI Issues

  • Verify .ui files exist in src/dashpva/gui/
  • Ensure correct paths for PV configuration files in pv_configs/

What's New

Check out CHANGELOG.md for the latest features, improvements, and changes.

FAQ

What is DashPVA? DashPVA is a modular platform for real-time X-ray data acquisition, visualization, and analysis at synchrotron beamlines. It connects to area detectors via PvaPy/EPICS and distributes data through a pipeline of computation nodes — each node can perform live viewing, data reduction, or analysis depending on the experiment's needs.

What analysis tools are available? DashPVA provides several analysis modules, each targeting a different experimental need:

  • HKL 3D — live reciprocal-space mapping for diffractometer experiments
  • pyFAI integration — live 1D azimuthal reduction of 2D diffraction images
  • Phase Fitter — XRD crystal phase fitting against 1D patterns (file or live via pyFAI)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features in a sample
  • Workbench — post-experiment HDF5 exploration with 1D/2D/3D views and ROI tools

How does the pipeline architecture work? DashPVA spawns each analysis tool as an independent process (node). Data flows from the detector through metadata association, collection, and analysis stages. Each node can be a viewer, a data reducer, or an analysis engine. You compose different chains depending on what you need — for example, detector → pyFAI integration → live phase fitting, or detector → RSM calculation → HKL 3D viewer.

What is the difference between Full and Standalone editions? Full includes everything — live streaming via pvaccess/EPICS, all real-time analysis tools, and Bayesian optimization. Area Detector is the lean streaming foundation (detector viewer + EPICS). Bayesian adds the blop optimizer on top of Area Detector. Standalone is a lighter install for offline post-analysis: Workbench, File Convert, Metadata Converter, and Phase Fitter (file mode only). Use bash install.sh --full, --area-det, --standalone, or --bayesian to choose.

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

DashPVA: Distributed Analysis and Streaming Hub with Process Variable Access

DashPVA is a modular analysis and visualization platform for X-ray experiments at synchrotron beamlines. It connects to area detectors and EPICS process variables through PvaPy, then distributes data through a pipeline of computation nodes — each node can perform live viewing, real-time analysis, or data reduction depending on the experiment's needs.

Key Capabilities

  • Live Area Detector Streaming — real-time 2D image display with ROI monitoring and statistics
  • HKL 3D Reciprocal Space Mapping — live reciprocal-space visualization from diffractometer motor positions
  • pyFAI 1D Azimuthal Integration — live reduction of 2D diffraction images to 1D patterns
  • XRD Phase Fitting — fit crystal phases to 1D diffraction patterns (file or live mode via pyFAI output)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features of interest in samples
  • Post-Analysis Workbench — HDF5 data exploration with 1D/2D/3D views, ROI tools, and slicing
  • Scan Monitor — track scan progress in real time

Architecture

DashPVA uses two pipeline models, chosen based on whether the analysis is user-interactive or high-throughput:

Interactive Pipeline — GUI tools launched as independent subprocesses, with each tool passing its PV channel to the next via command-line arguments. The user drives the analysis (selecting calibration files, toggling thresholds, choosing phases).

Area Detector 2D → pyFAI 1D Reduction → XRD Phase Fitter

Managed Pipeline — Headless processors orchestrated by the pvapy HPC framework, configured through the PVA Workflow UI. Designed for frame-rate processing where every detector frame must be handled automatically.

Detector → Metadata Associator → Collector → RSM Consumer → HKL 3D Viewer

Both models can coexist in the same session. New analysis chains should use the interactive model when a human needs to guide the analysis, or the managed model when throughput at detector frame rates is required.

Installation

Requirements

  • Python >= 3.11
  • Git

Quick Start

git clone https://github.com/AdvancedPhotonSource/DashPVA.git
cd DashPVA
bash install.sh

The installer will ask which edition to set up:

EditionWhat's includedUse case
FullEverything — streaming, standalone analysis, BayesianBeamline deployment
Area DetectorArea detector viewer + live EPICS streaming (lean)Live detector at the beamline
StandalonePost-analysis tools — Workbench, File Convert, Phase Fitter (no streaming)Offline analysis
BayesianArea detector + Bayesian optimization (blop)Live optimization / alignment

Tiers are additive on the area-detector foundation: Bayesian = Area Detector + blop, and Full = Area Detector + Standalone + Bayesian.

You can skip the prompt with a flag:

bash install.sh --full # everything (streaming + analysis + Bayesian)
bash install.sh --area-det # area detector viewer + live EPICS streaming (lean)
bash install.sh --standalone # post-analysis tools only (no streaming)
bash install.sh --bayesian # area detector + Bayesian optimization (blop)

Updating

bash install.sh --update

Or use the Updates button inside the launcher to pull the latest release.

Launching

DashPVA run

This opens the launcher menu with access to all tools.

Available Commands

DashPVA run # Open the launcher menu
DashPVA detector # Launch Area Detector Viewer
DashPVA hkl3d # Launch HKL 3D Viewer
DashPVA setup # Run PVA workflow setup
DashPVA ioc # Launch the RSM-parameter IOC simulator (GUI)
DashPVA ioc --no-gui # Run the RSM-parameter IOC headless
DashPVA ioc --prefix xidb # Set the IOC PV prefix (default: pvapy)
DashPVA workbench # Launch Workbench data analysis tool
DashPVA h5viewer # Launch HDF5 Viewer
DashPVA bayesian # Launch Bayesian 2D Scan Viewer
DashPVA phasefitter # Launch XRD Phase Fitter
DashPVA monitor scan # Open scan monitor
DashPVA --help # Show all available commands

Project Structure

DashPVA/
├── src/dashpva/ # Main package
│ ├── cli.py # CLI entry point
│ ├── settings.py # Application settings
│ ├── consumers/ # PVA data consumers (metadata, HPC, IOC)
│ ├── database/ # SQLite profile/settings storage
│ ├── gui/ # Qt .ui files
│ ├── hdf_viewer/ # HDF5 interactive viewer
│ ├── utils/ # Shared utilities (HDF5, masks, RSM, etc.)
│ ├── viewer/ # All viewer GUIs
│ │ ├── bayesian/ # Bayesian adaptive scanning
│ │ ├── hkl3d/ # HKL 3D reciprocal space viewer
│ │ ├── launcher/ # Main launcher and process registry
│ │ ├── workbench/ # Post-analysis workbench
│ │ └── ... # Area detector, scan, pyFAI, phase fitter
│ └── workflow/ # PVA workflow setup
├── tests/ # Test suite
│ ├── unit/
│ ├── integration/
│ └── test_data/ # Calibration and test files
├── pv_configs/ # PV configuration TOML files
├── notebooks/ # Analysis notebooks
├── install.sh # Installer script
├── pyproject.toml # Build config and dependencies
├── uv.lock # Locked dependency versions
└── README.md

HKL Live Streaming Setup

For HKL (reciprocal space) live streaming and analysis, DashPVA uses a multi-stage pipeline that processes detector images through several consumers before displaying HKL coordinates in real-time.

Data Flow Pipeline

Detector → Metadata Associator → Collector → RSM Consumer → HKL Viewer

Each stage adds or processes data:

  • Detector: Raw image data from area detector
  • Metadata Associator: Attaches motor positions and metadata to images
  • Collector: Collects and buffers images with metadata
  • RSM Consumer: Calculates HKL coordinates from motor positions using xrayutilities
  • HKL Viewer: Displays 3D reciprocal-space visualization

Configuration

Before starting HKL streaming, configure the TOML file with your beamline-specific PVs.

Edit pv_configs/metadata_pvs.toml

A. Set Detector Prefix:

DETECTOR_PREFIX = 'your_beamline:detector_prefix'

B. Configure Metadata PVs:

[METADATA]
[METADATA.CA]
x = 'your_beamline:x_motor_RBV'y = 'your_beamline:y_motor_RBV'
[METADATA.PVA]

C. Configure HKL Section:

[HKL]
[HKL.SAMPLE_CIRCLE_AXIS_1]
AXIS_NUMBER = 'your_beamline:motor1_RBV:AxisNumber'DIRECTION_AXIS = 'your_beamline:motor1_RBV:DirectionAxis'POSITION = 'your_beamline:motor1_RBV:Position'# Repeat for SAMPLE_CIRCLE_AXIS_2, 3, 4# And DETECTOR_CIRCLE_AXIS_1, 2
[HKL.SPEC]
ENERGY_VALUE = 'your_beamline:spec:Energy:Value'UB_MATRIX_VALUE = 'your_beamline:spec:UB_matrix:Value'
[HKL.DETECTOR_SETUP]
CENTER_CHANNEL_PIXEL = 'your_beamline:DetectorSetup:CenterChannelPixel'DISTANCE = 'your_beamline:DetectorSetup:Distance'PIXEL_DIRECTION_1 = 'your_beamline:DetectorSetup:PixelDirection1'PIXEL_DIRECTION_2 = 'your_beamline:DetectorSetup:PixelDirection2'SIZE = 'your_beamline:DetectorSetup:Size'UNITS = 'your_beamline:DetectorSetup:Units'

For different beamlines, create a beamline-specific config file:

cp pv_configs/metadata_pvs.toml pv_configs/metadata_pvs_YOUR_BEAMLINE.toml

Startup Sequence

Follow these steps in order to start the complete HKL streaming pipeline:

Terminal 1 — Area Detector Viewer:

DashPVA detector

Enter your PVA channel name and click "Start Live View". Keep this running.

Terminal 2 — PVA Workflow Setup:

DashPVA setup

Configure each tab in order:

  1. Config Upload — Browse and select your metadata_pvs.toml
  2. Metadata Associator — Set input/output channels, click "Run Associator Consumers"
  3. Collector — Set input/output channels, click "Run Collector"
  4. Analysis Consumer — Set input/output channels, click "Run Analysis Consumer"

Terminal 3 — HKL 3D Viewer:

DashPVA hkl3d

Enter the RSM Consumer output channel, browse your config file, and click "Start Live View".

Important Notes

  1. Channel names must match — the output channel of one component must match the input channel of the next
  2. TOML file is critical — all motor PVs must be correctly specified in the [HKL] section
  3. Startup order matters — Detector Viewer → Setup consumers (Associator → Collector → RSM) → HKL Viewer

Configuration Files

All configuration files are stored in the pv_configs/ directory.

Example configuration (pv_configs/example_config.toml):

CONSUMER_TYPE = "spontaneous"
[METADATA]
[METADATA.CA]
x = "x"y = "y"
[METADATA.PVA]
[ROI]
[ROI.ROI1]
MIN_X = "dp-ADSim:ROI1:MinX"MIN_Y = "dp-ADSim:ROI1:MinY"SIZE_X = "dp-ADSim:ROI1:SizeX"SIZE_Y = "dp-ADSim:ROI1:SizeY"
[STATS]
[STATS.STATS1]
TOTAL = "dp-ADSim:Stats1:Total_RBV"MIN = "dp-ADSim:Stats1:MinValue_RBV"MAX = "dp-ADSim:Stats1:MaxValue_RBV"SIGMA = "dp-ADSim:Stats1:Sigma_RBV"MEAN = "dp-ADSim:Stats1:MeanValue_RBV"
[ANALYSIS]
AXIS1 = "x"AXIS2 = "y"

Troubleshooting

EPICS Database Definition (DBD) Directory Not Found

If you see:

Cannot find dbd directory, please set EPICS_DB_INCLUDE_PATH environment variable

Solution: Set the environment variable:

export EPICS_DB_INCLUDE_PATH=/APSshare/epics/base-7.0.8/dbd

Add to ~/.bashrc or ~/.zshrc to make it persistent.

GUI Issues

  • Verify .ui files exist in src/dashpva/gui/
  • Ensure correct paths for PV configuration files in pv_configs/

What's New

Check out CHANGELOG.md for the latest features, improvements, and changes.

FAQ

What is DashPVA? DashPVA is a modular platform for real-time X-ray data acquisition, visualization, and analysis at synchrotron beamlines. It connects to area detectors via PvaPy/EPICS and distributes data through a pipeline of computation nodes — each node can perform live viewing, data reduction, or analysis depending on the experiment's needs.

What analysis tools are available? DashPVA provides several analysis modules, each targeting a different experimental need:

  • HKL 3D — live reciprocal-space mapping for diffractometer experiments
  • pyFAI integration — live 1D azimuthal reduction of 2D diffraction images
  • Phase Fitter — XRD crystal phase fitting against 1D patterns (file or live via pyFAI)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features in a sample
  • Workbench — post-experiment HDF5 exploration with 1D/2D/3D views and ROI tools

How does the pipeline architecture work? DashPVA spawns each analysis tool as an independent process (node). Data flows from the detector through metadata association, collection, and analysis stages. Each node can be a viewer, a data reducer, or an analysis engine. You compose different chains depending on what you need — for example, detector → pyFAI integration → live phase fitting, or detector → RSM calculation → HKL 3D viewer.

What is the difference between Full and Standalone editions? Full includes everything — live streaming via pvaccess/EPICS, all real-time analysis tools, and Bayesian optimization. Area Detector is the lean streaming foundation (detector viewer + EPICS). Bayesian adds the blop optimizer on top of Area Detector. Standalone is a lighter install for offline post-analysis: Workbench, File Convert, Metadata Converter, and Phase Fitter (file mode only). Use bash install.sh --full, --area-det, --standalone, or --bayesian to choose.

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DashPVA: Distributed Analysis and Streaming Hub with Process Variable Access

DashPVA is a modular analysis and visualization platform for X-ray experiments at synchrotron beamlines. It connects to area detectors and EPICS process variables through PvaPy, then distributes data through a pipeline of computation nodes — each node can perform live viewing, real-time analysis, or data reduction depending on the experiment's needs.

Key Capabilities

  • Live Area Detector Streaming — real-time 2D image display with ROI monitoring and statistics
  • HKL 3D Reciprocal Space Mapping — live reciprocal-space visualization from diffractometer motor positions
  • pyFAI 1D Azimuthal Integration — live reduction of 2D diffraction images to 1D patterns
  • XRD Phase Fitting — fit crystal phases to 1D diffraction patterns (file or live mode via pyFAI output)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features of interest in samples
  • Post-Analysis Workbench — HDF5 data exploration with 1D/2D/3D views, ROI tools, and slicing
  • Scan Monitor — track scan progress in real time

Architecture

DashPVA uses two pipeline models, chosen based on whether the analysis is user-interactive or high-throughput:

Interactive Pipeline — GUI tools launched as independent subprocesses, with each tool passing its PV channel to the next via command-line arguments. The user drives the analysis (selecting calibration files, toggling thresholds, choosing phases).

Area Detector 2D → pyFAI 1D Reduction → XRD Phase Fitter

Managed Pipeline — Headless processors orchestrated by the pvapy HPC framework, configured through the PVA Workflow UI. Designed for frame-rate processing where every detector frame must be handled automatically.

Detector → Metadata Associator → Collector → RSM Consumer → HKL 3D Viewer

Both models can coexist in the same session. New analysis chains should use the interactive model when a human needs to guide the analysis, or the managed model when throughput at detector frame rates is required.

Installation

Requirements

  • Python >= 3.11
  • Git

Quick Start

git clone https://github.com/AdvancedPhotonSource/DashPVA.git
cd DashPVA
bash install.sh

The installer will ask which edition to set up:

EditionWhat's includedUse case
FullEverything — streaming, standalone analysis, BayesianBeamline deployment
Area DetectorArea detector viewer + live EPICS streaming (lean)Live detector at the beamline
StandalonePost-analysis tools — Workbench, File Convert, Phase Fitter (no streaming)Offline analysis
BayesianArea detector + Bayesian optimization (blop)Live optimization / alignment

Tiers are additive on the area-detector foundation: Bayesian = Area Detector + blop, and Full = Area Detector + Standalone + Bayesian.

You can skip the prompt with a flag:

bash install.sh --full # everything (streaming + analysis + Bayesian)
bash install.sh --area-det # area detector viewer + live EPICS streaming (lean)
bash install.sh --standalone # post-analysis tools only (no streaming)
bash install.sh --bayesian # area detector + Bayesian optimization (blop)

Updating

bash install.sh --update

Or use the Updates button inside the launcher to pull the latest release.

Launching

DashPVA run

This opens the launcher menu with access to all tools.

Available Commands

DashPVA run # Open the launcher menu
DashPVA detector # Launch Area Detector Viewer
DashPVA hkl3d # Launch HKL 3D Viewer
DashPVA setup # Run PVA workflow setup
DashPVA ioc # Launch the RSM-parameter IOC simulator (GUI)
DashPVA ioc --no-gui # Run the RSM-parameter IOC headless
DashPVA ioc --prefix xidb # Set the IOC PV prefix (default: pvapy)
DashPVA workbench # Launch Workbench data analysis tool
DashPVA h5viewer # Launch HDF5 Viewer
DashPVA bayesian # Launch Bayesian 2D Scan Viewer
DashPVA phasefitter # Launch XRD Phase Fitter
DashPVA monitor scan # Open scan monitor
DashPVA --help # Show all available commands

Project Structure

DashPVA/
├── src/dashpva/ # Main package
│ ├── cli.py # CLI entry point
│ ├── settings.py # Application settings
│ ├── consumers/ # PVA data consumers (metadata, HPC, IOC)
│ ├── database/ # SQLite profile/settings storage
│ ├── gui/ # Qt .ui files
│ ├── hdf_viewer/ # HDF5 interactive viewer
│ ├── utils/ # Shared utilities (HDF5, masks, RSM, etc.)
│ ├── viewer/ # All viewer GUIs
│ │ ├── bayesian/ # Bayesian adaptive scanning
│ │ ├── hkl3d/ # HKL 3D reciprocal space viewer
│ │ ├── launcher/ # Main launcher and process registry
│ │ ├── workbench/ # Post-analysis workbench
│ │ └── ... # Area detector, scan, pyFAI, phase fitter
│ └── workflow/ # PVA workflow setup
├── tests/ # Test suite
│ ├── unit/
│ ├── integration/
│ └── test_data/ # Calibration and test files
├── pv_configs/ # PV configuration TOML files
├── notebooks/ # Analysis notebooks
├── install.sh # Installer script
├── pyproject.toml # Build config and dependencies
├── uv.lock # Locked dependency versions
└── README.md

HKL Live Streaming Setup

For HKL (reciprocal space) live streaming and analysis, DashPVA uses a multi-stage pipeline that processes detector images through several consumers before displaying HKL coordinates in real-time.

Data Flow Pipeline

Detector → Metadata Associator → Collector → RSM Consumer → HKL Viewer

Each stage adds or processes data:

  • Detector: Raw image data from area detector
  • Metadata Associator: Attaches motor positions and metadata to images
  • Collector: Collects and buffers images with metadata
  • RSM Consumer: Calculates HKL coordinates from motor positions using xrayutilities
  • HKL Viewer: Displays 3D reciprocal-space visualization

Configuration

Before starting HKL streaming, configure the TOML file with your beamline-specific PVs.

Edit pv_configs/metadata_pvs.toml

A. Set Detector Prefix:

DETECTOR_PREFIX = 'your_beamline:detector_prefix'

B. Configure Metadata PVs:

[METADATA]
[METADATA.CA]
x = 'your_beamline:x_motor_RBV'y = 'your_beamline:y_motor_RBV'
[METADATA.PVA]

C. Configure HKL Section:

[HKL]
[HKL.SAMPLE_CIRCLE_AXIS_1]
AXIS_NUMBER = 'your_beamline:motor1_RBV:AxisNumber'DIRECTION_AXIS = 'your_beamline:motor1_RBV:DirectionAxis'POSITION = 'your_beamline:motor1_RBV:Position'# Repeat for SAMPLE_CIRCLE_AXIS_2, 3, 4# And DETECTOR_CIRCLE_AXIS_1, 2
[HKL.SPEC]
ENERGY_VALUE = 'your_beamline:spec:Energy:Value'UB_MATRIX_VALUE = 'your_beamline:spec:UB_matrix:Value'
[HKL.DETECTOR_SETUP]
CENTER_CHANNEL_PIXEL = 'your_beamline:DetectorSetup:CenterChannelPixel'DISTANCE = 'your_beamline:DetectorSetup:Distance'PIXEL_DIRECTION_1 = 'your_beamline:DetectorSetup:PixelDirection1'PIXEL_DIRECTION_2 = 'your_beamline:DetectorSetup:PixelDirection2'SIZE = 'your_beamline:DetectorSetup:Size'UNITS = 'your_beamline:DetectorSetup:Units'

For different beamlines, create a beamline-specific config file:

cp pv_configs/metadata_pvs.toml pv_configs/metadata_pvs_YOUR_BEAMLINE.toml

Startup Sequence

Follow these steps in order to start the complete HKL streaming pipeline:

Terminal 1 — Area Detector Viewer:

DashPVA detector

Enter your PVA channel name and click "Start Live View". Keep this running.

Terminal 2 — PVA Workflow Setup:

DashPVA setup

Configure each tab in order:

  1. Config Upload — Browse and select your metadata_pvs.toml
  2. Metadata Associator — Set input/output channels, click "Run Associator Consumers"
  3. Collector — Set input/output channels, click "Run Collector"
  4. Analysis Consumer — Set input/output channels, click "Run Analysis Consumer"

Terminal 3 — HKL 3D Viewer:

DashPVA hkl3d

Enter the RSM Consumer output channel, browse your config file, and click "Start Live View".

Important Notes

  1. Channel names must match — the output channel of one component must match the input channel of the next
  2. TOML file is critical — all motor PVs must be correctly specified in the [HKL] section
  3. Startup order matters — Detector Viewer → Setup consumers (Associator → Collector → RSM) → HKL Viewer

Configuration Files

All configuration files are stored in the pv_configs/ directory.

Example configuration (pv_configs/example_config.toml):

CONSUMER_TYPE = "spontaneous"
[METADATA]
[METADATA.CA]
x = "x"y = "y"
[METADATA.PVA]
[ROI]
[ROI.ROI1]
MIN_X = "dp-ADSim:ROI1:MinX"MIN_Y = "dp-ADSim:ROI1:MinY"SIZE_X = "dp-ADSim:ROI1:SizeX"SIZE_Y = "dp-ADSim:ROI1:SizeY"
[STATS]
[STATS.STATS1]
TOTAL = "dp-ADSim:Stats1:Total_RBV"MIN = "dp-ADSim:Stats1:MinValue_RBV"MAX = "dp-ADSim:Stats1:MaxValue_RBV"SIGMA = "dp-ADSim:Stats1:Sigma_RBV"MEAN = "dp-ADSim:Stats1:MeanValue_RBV"
[ANALYSIS]
AXIS1 = "x"AXIS2 = "y"

Troubleshooting

EPICS Database Definition (DBD) Directory Not Found

If you see:

Cannot find dbd directory, please set EPICS_DB_INCLUDE_PATH environment variable

Solution: Set the environment variable:

export EPICS_DB_INCLUDE_PATH=/APSshare/epics/base-7.0.8/dbd

Add to ~/.bashrc or ~/.zshrc to make it persistent.

GUI Issues

  • Verify .ui files exist in src/dashpva/gui/
  • Ensure correct paths for PV configuration files in pv_configs/

What's New

Check out CHANGELOG.md for the latest features, improvements, and changes.

FAQ

What is DashPVA? DashPVA is a modular platform for real-time X-ray data acquisition, visualization, and analysis at synchrotron beamlines. It connects to area detectors via PvaPy/EPICS and distributes data through a pipeline of computation nodes — each node can perform live viewing, data reduction, or analysis depending on the experiment's needs.

What analysis tools are available? DashPVA provides several analysis modules, each targeting a different experimental need:

  • HKL 3D — live reciprocal-space mapping for diffractometer experiments
  • pyFAI integration — live 1D azimuthal reduction of 2D diffraction images
  • Phase Fitter — XRD crystal phase fitting against 1D patterns (file or live via pyFAI)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features in a sample
  • Workbench — post-experiment HDF5 exploration with 1D/2D/3D views and ROI tools

How does the pipeline architecture work? DashPVA spawns each analysis tool as an independent process (node). Data flows from the detector through metadata association, collection, and analysis stages. Each node can be a viewer, a data reducer, or an analysis engine. You compose different chains depending on what you need — for example, detector → pyFAI integration → live phase fitting, or detector → RSM calculation → HKL 3D viewer.

What is the difference between Full and Standalone editions? Full includes everything — live streaming via pvaccess/EPICS, all real-time analysis tools, and Bayesian optimization. Area Detector is the lean streaming foundation (detector viewer + EPICS). Bayesian adds the blop optimizer on top of Area Detector. Standalone is a lighter install for offline post-analysis: Workbench, File Convert, Metadata Converter, and Phase Fitter (file mode only). Use bash install.sh --full, --area-det, --standalone, or --bayesian to choose.

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DashPVA: Distributed Analysis and Streaming Hub with Process Variable Access

DashPVA is a modular analysis and visualization platform for X-ray experiments at synchrotron beamlines. It connects to area detectors and EPICS process variables through PvaPy, then distributes data through a pipeline of computation nodes — each node can perform live viewing, real-time analysis, or data reduction depending on the experiment's needs.

Key Capabilities

  • Live Area Detector Streaming — real-time 2D image display with ROI monitoring and statistics
  • HKL 3D Reciprocal Space Mapping — live reciprocal-space visualization from diffractometer motor positions
  • pyFAI 1D Azimuthal Integration — live reduction of 2D diffraction images to 1D patterns
  • XRD Phase Fitting — fit crystal phases to 1D diffraction patterns (file or live mode via pyFAI output)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features of interest in samples
  • Post-Analysis Workbench — HDF5 data exploration with 1D/2D/3D views, ROI tools, and slicing
  • Scan Monitor — track scan progress in real time

Architecture

DashPVA uses two pipeline models, chosen based on whether the analysis is user-interactive or high-throughput:

Interactive Pipeline — GUI tools launched as independent subprocesses, with each tool passing its PV channel to the next via command-line arguments. The user drives the analysis (selecting calibration files, toggling thresholds, choosing phases).

Area Detector 2D → pyFAI 1D Reduction → XRD Phase Fitter

Managed Pipeline — Headless processors orchestrated by the pvapy HPC framework, configured through the PVA Workflow UI. Designed for frame-rate processing where every detector frame must be handled automatically.

Detector → Metadata Associator → Collector → RSM Consumer → HKL 3D Viewer

Both models can coexist in the same session. New analysis chains should use the interactive model when a human needs to guide the analysis, or the managed model when throughput at detector frame rates is required.

Installation

Requirements

  • Python >= 3.11
  • Git

Quick Start

git clone https://github.com/AdvancedPhotonSource/DashPVA.git
cd DashPVA
bash install.sh

The installer will ask which edition to set up:

EditionWhat's includedUse case
FullEverything — streaming, standalone analysis, BayesianBeamline deployment
Area DetectorArea detector viewer + live EPICS streaming (lean)Live detector at the beamline
StandalonePost-analysis tools — Workbench, File Convert, Phase Fitter (no streaming)Offline analysis
BayesianArea detector + Bayesian optimization (blop)Live optimization / alignment

Tiers are additive on the area-detector foundation: Bayesian = Area Detector + blop, and Full = Area Detector + Standalone + Bayesian.

You can skip the prompt with a flag:

bash install.sh --full # everything (streaming + analysis + Bayesian)
bash install.sh --area-det # area detector viewer + live EPICS streaming (lean)
bash install.sh --standalone # post-analysis tools only (no streaming)
bash install.sh --bayesian # area detector + Bayesian optimization (blop)

Updating

bash install.sh --update

Or use the Updates button inside the launcher to pull the latest release.

Launching

DashPVA run

This opens the launcher menu with access to all tools.

Available Commands

DashPVA run # Open the launcher menu
DashPVA detector # Launch Area Detector Viewer
DashPVA hkl3d # Launch HKL 3D Viewer
DashPVA setup # Run PVA workflow setup
DashPVA ioc # Launch the RSM-parameter IOC simulator (GUI)
DashPVA ioc --no-gui # Run the RSM-parameter IOC headless
DashPVA ioc --prefix xidb # Set the IOC PV prefix (default: pvapy)
DashPVA workbench # Launch Workbench data analysis tool
DashPVA h5viewer # Launch HDF5 Viewer
DashPVA bayesian # Launch Bayesian 2D Scan Viewer
DashPVA phasefitter # Launch XRD Phase Fitter
DashPVA monitor scan # Open scan monitor
DashPVA --help # Show all available commands

Project Structure

DashPVA/
├── src/dashpva/ # Main package
│ ├── cli.py # CLI entry point
│ ├── settings.py # Application settings
│ ├── consumers/ # PVA data consumers (metadata, HPC, IOC)
│ ├── database/ # SQLite profile/settings storage
│ ├── gui/ # Qt .ui files
│ ├── hdf_viewer/ # HDF5 interactive viewer
│ ├── utils/ # Shared utilities (HDF5, masks, RSM, etc.)
│ ├── viewer/ # All viewer GUIs
│ │ ├── bayesian/ # Bayesian adaptive scanning
│ │ ├── hkl3d/ # HKL 3D reciprocal space viewer
│ │ ├── launcher/ # Main launcher and process registry
│ │ ├── workbench/ # Post-analysis workbench
│ │ └── ... # Area detector, scan, pyFAI, phase fitter
│ └── workflow/ # PVA workflow setup
├── tests/ # Test suite
│ ├── unit/
│ ├── integration/
│ └── test_data/ # Calibration and test files
├── pv_configs/ # PV configuration TOML files
├── notebooks/ # Analysis notebooks
├── install.sh # Installer script
├── pyproject.toml # Build config and dependencies
├── uv.lock # Locked dependency versions
└── README.md

HKL Live Streaming Setup

For HKL (reciprocal space) live streaming and analysis, DashPVA uses a multi-stage pipeline that processes detector images through several consumers before displaying HKL coordinates in real-time.

Data Flow Pipeline

Detector → Metadata Associator → Collector → RSM Consumer → HKL Viewer

Each stage adds or processes data:

  • Detector: Raw image data from area detector
  • Metadata Associator: Attaches motor positions and metadata to images
  • Collector: Collects and buffers images with metadata
  • RSM Consumer: Calculates HKL coordinates from motor positions using xrayutilities
  • HKL Viewer: Displays 3D reciprocal-space visualization

Configuration

Before starting HKL streaming, configure the TOML file with your beamline-specific PVs.

Edit pv_configs/metadata_pvs.toml

A. Set Detector Prefix:

DETECTOR_PREFIX = 'your_beamline:detector_prefix'

B. Configure Metadata PVs:

[METADATA]
[METADATA.CA]
x = 'your_beamline:x_motor_RBV'y = 'your_beamline:y_motor_RBV'
[METADATA.PVA]

C. Configure HKL Section:

[HKL]
[HKL.SAMPLE_CIRCLE_AXIS_1]
AXIS_NUMBER = 'your_beamline:motor1_RBV:AxisNumber'DIRECTION_AXIS = 'your_beamline:motor1_RBV:DirectionAxis'POSITION = 'your_beamline:motor1_RBV:Position'# Repeat for SAMPLE_CIRCLE_AXIS_2, 3, 4# And DETECTOR_CIRCLE_AXIS_1, 2
[HKL.SPEC]
ENERGY_VALUE = 'your_beamline:spec:Energy:Value'UB_MATRIX_VALUE = 'your_beamline:spec:UB_matrix:Value'
[HKL.DETECTOR_SETUP]
CENTER_CHANNEL_PIXEL = 'your_beamline:DetectorSetup:CenterChannelPixel'DISTANCE = 'your_beamline:DetectorSetup:Distance'PIXEL_DIRECTION_1 = 'your_beamline:DetectorSetup:PixelDirection1'PIXEL_DIRECTION_2 = 'your_beamline:DetectorSetup:PixelDirection2'SIZE = 'your_beamline:DetectorSetup:Size'UNITS = 'your_beamline:DetectorSetup:Units'

For different beamlines, create a beamline-specific config file:

cp pv_configs/metadata_pvs.toml pv_configs/metadata_pvs_YOUR_BEAMLINE.toml

Startup Sequence

Follow these steps in order to start the complete HKL streaming pipeline:

Terminal 1 — Area Detector Viewer:

DashPVA detector

Enter your PVA channel name and click "Start Live View". Keep this running.

Terminal 2 — PVA Workflow Setup:

DashPVA setup

Configure each tab in order:

  1. Config Upload — Browse and select your metadata_pvs.toml
  2. Metadata Associator — Set input/output channels, click "Run Associator Consumers"
  3. Collector — Set input/output channels, click "Run Collector"
  4. Analysis Consumer — Set input/output channels, click "Run Analysis Consumer"

Terminal 3 — HKL 3D Viewer:

DashPVA hkl3d

Enter the RSM Consumer output channel, browse your config file, and click "Start Live View".

Important Notes

  1. Channel names must match — the output channel of one component must match the input channel of the next
  2. TOML file is critical — all motor PVs must be correctly specified in the [HKL] section
  3. Startup order matters — Detector Viewer → Setup consumers (Associator → Collector → RSM) → HKL Viewer

Configuration Files

All configuration files are stored in the pv_configs/ directory.

Example configuration (pv_configs/example_config.toml):

CONSUMER_TYPE = "spontaneous"
[METADATA]
[METADATA.CA]
x = "x"y = "y"
[METADATA.PVA]
[ROI]
[ROI.ROI1]
MIN_X = "dp-ADSim:ROI1:MinX"MIN_Y = "dp-ADSim:ROI1:MinY"SIZE_X = "dp-ADSim:ROI1:SizeX"SIZE_Y = "dp-ADSim:ROI1:SizeY"
[STATS]
[STATS.STATS1]
TOTAL = "dp-ADSim:Stats1:Total_RBV"MIN = "dp-ADSim:Stats1:MinValue_RBV"MAX = "dp-ADSim:Stats1:MaxValue_RBV"SIGMA = "dp-ADSim:Stats1:Sigma_RBV"MEAN = "dp-ADSim:Stats1:MeanValue_RBV"
[ANALYSIS]
AXIS1 = "x"AXIS2 = "y"

Troubleshooting

EPICS Database Definition (DBD) Directory Not Found

If you see:

Cannot find dbd directory, please set EPICS_DB_INCLUDE_PATH environment variable

Solution: Set the environment variable:

export EPICS_DB_INCLUDE_PATH=/APSshare/epics/base-7.0.8/dbd

Add to ~/.bashrc or ~/.zshrc to make it persistent.

GUI Issues

  • Verify .ui files exist in src/dashpva/gui/
  • Ensure correct paths for PV configuration files in pv_configs/

What's New

Check out CHANGELOG.md for the latest features, improvements, and changes.

FAQ

What is DashPVA? DashPVA is a modular platform for real-time X-ray data acquisition, visualization, and analysis at synchrotron beamlines. It connects to area detectors via PvaPy/EPICS and distributes data through a pipeline of computation nodes — each node can perform live viewing, data reduction, or analysis depending on the experiment's needs.

What analysis tools are available? DashPVA provides several analysis modules, each targeting a different experimental need:

  • HKL 3D — live reciprocal-space mapping for diffractometer experiments
  • pyFAI integration — live 1D azimuthal reduction of 2D diffraction images
  • Phase Fitter — XRD crystal phase fitting against 1D patterns (file or live via pyFAI)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features in a sample
  • Workbench — post-experiment HDF5 exploration with 1D/2D/3D views and ROI tools

How does the pipeline architecture work? DashPVA spawns each analysis tool as an independent process (node). Data flows from the detector through metadata association, collection, and analysis stages. Each node can be a viewer, a data reducer, or an analysis engine. You compose different chains depending on what you need — for example, detector → pyFAI integration → live phase fitting, or detector → RSM calculation → HKL 3D viewer.

What is the difference between Full and Standalone editions? Full includes everything — live streaming via pvaccess/EPICS, all real-time analysis tools, and Bayesian optimization. Area Detector is the lean streaming foundation (detector viewer + EPICS). Bayesian adds the blop optimizer on top of Area Detector. Standalone is a lighter install for offline post-analysis: Workbench, File Convert, Metadata Converter, and Phase Fitter (file mode only). Use bash install.sh --full, --area-det, --standalone, or --bayesian to choose.

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

DashPVA: Distributed Analysis and Streaming Hub with Process Variable Access

DashPVA is a modular analysis and visualization platform for X-ray experiments at synchrotron beamlines. It connects to area detectors and EPICS process variables through PvaPy, then distributes data through a pipeline of computation nodes — each node can perform live viewing, real-time analysis, or data reduction depending on the experiment's needs.

Key Capabilities

  • Live Area Detector Streaming — real-time 2D image display with ROI monitoring and statistics
  • HKL 3D Reciprocal Space Mapping — live reciprocal-space visualization from diffractometer motor positions
  • pyFAI 1D Azimuthal Integration — live reduction of 2D diffraction images to 1D patterns
  • XRD Phase Fitting — fit crystal phases to 1D diffraction patterns (file or live mode via pyFAI output)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features of interest in samples
  • Post-Analysis Workbench — HDF5 data exploration with 1D/2D/3D views, ROI tools, and slicing
  • Scan Monitor — track scan progress in real time

Architecture

DashPVA uses two pipeline models, chosen based on whether the analysis is user-interactive or high-throughput:

Interactive Pipeline — GUI tools launched as independent subprocesses, with each tool passing its PV channel to the next via command-line arguments. The user drives the analysis (selecting calibration files, toggling thresholds, choosing phases).

Area Detector 2D → pyFAI 1D Reduction → XRD Phase Fitter

Managed Pipeline — Headless processors orchestrated by the pvapy HPC framework, configured through the PVA Workflow UI. Designed for frame-rate processing where every detector frame must be handled automatically.

Detector → Metadata Associator → Collector → RSM Consumer → HKL 3D Viewer

Both models can coexist in the same session. New analysis chains should use the interactive model when a human needs to guide the analysis, or the managed model when throughput at detector frame rates is required.

Installation

Requirements

  • Python >= 3.11
  • Git

Quick Start

git clone https://github.com/AdvancedPhotonSource/DashPVA.git
cd DashPVA
bash install.sh

The installer will ask which edition to set up:

EditionWhat's includedUse case
FullEverything — streaming, standalone analysis, BayesianBeamline deployment
Area DetectorArea detector viewer + live EPICS streaming (lean)Live detector at the beamline
StandalonePost-analysis tools — Workbench, File Convert, Phase Fitter (no streaming)Offline analysis
BayesianArea detector + Bayesian optimization (blop)Live optimization / alignment

Tiers are additive on the area-detector foundation: Bayesian = Area Detector + blop, and Full = Area Detector + Standalone + Bayesian.

You can skip the prompt with a flag:

bash install.sh --full # everything (streaming + analysis + Bayesian)
bash install.sh --area-det # area detector viewer + live EPICS streaming (lean)
bash install.sh --standalone # post-analysis tools only (no streaming)
bash install.sh --bayesian # area detector + Bayesian optimization (blop)

Updating

bash install.sh --update

Or use the Updates button inside the launcher to pull the latest release.

Launching

DashPVA run

This opens the launcher menu with access to all tools.

Available Commands

DashPVA run # Open the launcher menu
DashPVA detector # Launch Area Detector Viewer
DashPVA hkl3d # Launch HKL 3D Viewer
DashPVA setup # Run PVA workflow setup
DashPVA ioc # Launch the RSM-parameter IOC simulator (GUI)
DashPVA ioc --no-gui # Run the RSM-parameter IOC headless
DashPVA ioc --prefix xidb # Set the IOC PV prefix (default: pvapy)
DashPVA workbench # Launch Workbench data analysis tool
DashPVA h5viewer # Launch HDF5 Viewer
DashPVA bayesian # Launch Bayesian 2D Scan Viewer
DashPVA phasefitter # Launch XRD Phase Fitter
DashPVA monitor scan # Open scan monitor
DashPVA --help # Show all available commands

Project Structure

DashPVA/
├── src/dashpva/ # Main package
│ ├── cli.py # CLI entry point
│ ├── settings.py # Application settings
│ ├── consumers/ # PVA data consumers (metadata, HPC, IOC)
│ ├── database/ # SQLite profile/settings storage
│ ├── gui/ # Qt .ui files
│ ├── hdf_viewer/ # HDF5 interactive viewer
│ ├── utils/ # Shared utilities (HDF5, masks, RSM, etc.)
│ ├── viewer/ # All viewer GUIs
│ │ ├── bayesian/ # Bayesian adaptive scanning
│ │ ├── hkl3d/ # HKL 3D reciprocal space viewer
│ │ ├── launcher/ # Main launcher and process registry
│ │ ├── workbench/ # Post-analysis workbench
│ │ └── ... # Area detector, scan, pyFAI, phase fitter
│ └── workflow/ # PVA workflow setup
├── tests/ # Test suite
│ ├── unit/
│ ├── integration/
│ └── test_data/ # Calibration and test files
├── pv_configs/ # PV configuration TOML files
├── notebooks/ # Analysis notebooks
├── install.sh # Installer script
├── pyproject.toml # Build config and dependencies
├── uv.lock # Locked dependency versions
└── README.md

HKL Live Streaming Setup

For HKL (reciprocal space) live streaming and analysis, DashPVA uses a multi-stage pipeline that processes detector images through several consumers before displaying HKL coordinates in real-time.

Data Flow Pipeline

Detector → Metadata Associator → Collector → RSM Consumer → HKL Viewer

Each stage adds or processes data:

  • Detector: Raw image data from area detector
  • Metadata Associator: Attaches motor positions and metadata to images
  • Collector: Collects and buffers images with metadata
  • RSM Consumer: Calculates HKL coordinates from motor positions using xrayutilities
  • HKL Viewer: Displays 3D reciprocal-space visualization

Configuration

Before starting HKL streaming, configure the TOML file with your beamline-specific PVs.

Edit pv_configs/metadata_pvs.toml

A. Set Detector Prefix:

DETECTOR_PREFIX = 'your_beamline:detector_prefix'

B. Configure Metadata PVs:

[METADATA]
[METADATA.CA]
x = 'your_beamline:x_motor_RBV'y = 'your_beamline:y_motor_RBV'
[METADATA.PVA]

C. Configure HKL Section:

[HKL]
[HKL.SAMPLE_CIRCLE_AXIS_1]
AXIS_NUMBER = 'your_beamline:motor1_RBV:AxisNumber'DIRECTION_AXIS = 'your_beamline:motor1_RBV:DirectionAxis'POSITION = 'your_beamline:motor1_RBV:Position'# Repeat for SAMPLE_CIRCLE_AXIS_2, 3, 4# And DETECTOR_CIRCLE_AXIS_1, 2
[HKL.SPEC]
ENERGY_VALUE = 'your_beamline:spec:Energy:Value'UB_MATRIX_VALUE = 'your_beamline:spec:UB_matrix:Value'
[HKL.DETECTOR_SETUP]
CENTER_CHANNEL_PIXEL = 'your_beamline:DetectorSetup:CenterChannelPixel'DISTANCE = 'your_beamline:DetectorSetup:Distance'PIXEL_DIRECTION_1 = 'your_beamline:DetectorSetup:PixelDirection1'PIXEL_DIRECTION_2 = 'your_beamline:DetectorSetup:PixelDirection2'SIZE = 'your_beamline:DetectorSetup:Size'UNITS = 'your_beamline:DetectorSetup:Units'

For different beamlines, create a beamline-specific config file:

cp pv_configs/metadata_pvs.toml pv_configs/metadata_pvs_YOUR_BEAMLINE.toml

Startup Sequence

Follow these steps in order to start the complete HKL streaming pipeline:

Terminal 1 — Area Detector Viewer:

DashPVA detector

Enter your PVA channel name and click "Start Live View". Keep this running.

Terminal 2 — PVA Workflow Setup:

DashPVA setup

Configure each tab in order:

  1. Config Upload — Browse and select your metadata_pvs.toml
  2. Metadata Associator — Set input/output channels, click "Run Associator Consumers"
  3. Collector — Set input/output channels, click "Run Collector"
  4. Analysis Consumer — Set input/output channels, click "Run Analysis Consumer"

Terminal 3 — HKL 3D Viewer:

DashPVA hkl3d

Enter the RSM Consumer output channel, browse your config file, and click "Start Live View".

Important Notes

  1. Channel names must match — the output channel of one component must match the input channel of the next
  2. TOML file is critical — all motor PVs must be correctly specified in the [HKL] section
  3. Startup order matters — Detector Viewer → Setup consumers (Associator → Collector → RSM) → HKL Viewer

Configuration Files

All configuration files are stored in the pv_configs/ directory.

Example configuration (pv_configs/example_config.toml):

CONSUMER_TYPE = "spontaneous"
[METADATA]
[METADATA.CA]
x = "x"y = "y"
[METADATA.PVA]
[ROI]
[ROI.ROI1]
MIN_X = "dp-ADSim:ROI1:MinX"MIN_Y = "dp-ADSim:ROI1:MinY"SIZE_X = "dp-ADSim:ROI1:SizeX"SIZE_Y = "dp-ADSim:ROI1:SizeY"
[STATS]
[STATS.STATS1]
TOTAL = "dp-ADSim:Stats1:Total_RBV"MIN = "dp-ADSim:Stats1:MinValue_RBV"MAX = "dp-ADSim:Stats1:MaxValue_RBV"SIGMA = "dp-ADSim:Stats1:Sigma_RBV"MEAN = "dp-ADSim:Stats1:MeanValue_RBV"
[ANALYSIS]
AXIS1 = "x"AXIS2 = "y"

Troubleshooting

EPICS Database Definition (DBD) Directory Not Found

If you see:

Cannot find dbd directory, please set EPICS_DB_INCLUDE_PATH environment variable

Solution: Set the environment variable:

export EPICS_DB_INCLUDE_PATH=/APSshare/epics/base-7.0.8/dbd

Add to ~/.bashrc or ~/.zshrc to make it persistent.

GUI Issues

  • Verify .ui files exist in src/dashpva/gui/
  • Ensure correct paths for PV configuration files in pv_configs/

What's New

Check out CHANGELOG.md for the latest features, improvements, and changes.

FAQ

What is DashPVA? DashPVA is a modular platform for real-time X-ray data acquisition, visualization, and analysis at synchrotron beamlines. It connects to area detectors via PvaPy/EPICS and distributes data through a pipeline of computation nodes — each node can perform live viewing, data reduction, or analysis depending on the experiment's needs.

What analysis tools are available? DashPVA provides several analysis modules, each targeting a different experimental need:

  • HKL 3D — live reciprocal-space mapping for diffractometer experiments
  • pyFAI integration — live 1D azimuthal reduction of 2D diffraction images
  • Phase Fitter — XRD crystal phase fitting against 1D patterns (file or live via pyFAI)
  • Bayesian 2D Scan — Gaussian-process-guided adaptive scanning to efficiently locate features in a sample
  • Workbench — post-experiment HDF5 exploration with 1D/2D/3D views and ROI tools

How does the pipeline architecture work? DashPVA spawns each analysis tool as an independent process (node). Data flows from the detector through metadata association, collection, and analysis stages. Each node can be a viewer, a data reducer, or an analysis engine. You compose different chains depending on what you need — for example, detector → pyFAI integration → live phase fitting, or detector → RSM calculation → HKL 3D viewer.

What is the difference between Full and Standalone editions? Full includes everything — live streaming via pvaccess/EPICS, all real-time analysis tools, and Bayesian optimization. Area Detector is the lean streaming foundation (detector viewer + EPICS). Bayesian adds the blop optimizer on top of Area Detector. Standalone is a lighter install for offline post-analysis: Workbench, File Convert, Metadata Converter, and Phase Fitter (file mode only). Use bash install.sh --full, --area-det, --standalone, or --bayesian to choose.

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages