Usage
This section provides a concise overview of how to use barc4beams through its main workflows.
The library is organized around a central abstraction: the Beam.
—
Core concepts
Beam
A Beam represents a collection of rays in a standardized format:
positions: (x, y)
directions: (x’, y’)
energy
intensity
polarization components
lost-ray flags
All operations (statistics, visualization, transformations) are defined on this structure.
—
BeamEnsemble
A BeamEnsemble is a collection of Beam instances representing
multiple realizations (e.g. scans, simulations, tolerances).
It provides:
ensemble statistics
structured comparison between runs
unified save/load interface
—
Main workflows
1. Beam from ray-tracing
Typical pipeline:
Import raw ray-tracing data
Convert to standard format
Analyze and visualize
This is illustrated in:
Example 1a (monochromatic-like case)
Example 1b (polychromatic beam)
—
2. Beam collections and ensembles
Two levels of abstraction:
Manual handling of multiple beams →
Beam(Example 2a)Structured handling →
BeamEnsemble(Example 2b)
Use BeamEnsemble when:
working with repeated simulations
performing statistical analysis across runs
saving/loading grouped datasets
—
3. Beam from wavefront data
Two complementary approaches:
Intensity-based sampling
Uses NF and/or FF intensity
Assumes no phase information
Implemented via
Beam.from_intensity()
(Example 3a)
—
Phase-aware reconstruction
Uses complex field (amplitude + phase)
Computes local slopes from the wavefront
Generates physically consistent rays
(Example 3b)
This follows principles similar to X-ray speckle tracking, but applied in reverse (wavefront → rays).
—
4. Applying wavefronts to beams
A beam can be modified by applying a complex wavefront:
modifies ray directions (via phase gradients)
updates intensity
flags invalid rays if needed
(Example 3c)
This enables hybrid workflows combining:
ray-tracing
wave optics
error propagation
—
Visualization and statistics
The library provides:
beam size and divergence plots
phase-space visualization
caustics
intensity-aware statistics
All statistics are computed using per-ray weights (intensity).
—
Persistence
Objects can be saved and reloaded:
Beam→ HDF5 + JSON metadataBeamEnsemble→ grouped HDF5 + statistics
—
Summary
Typical usage patterns:
Ray-tracing → Beam → analysis
Multiple runs → BeamEnsemble → statistics
Wavefront → Beam → hybrid propagation
Refer to the example notebooks for concrete implementations.