Configuration Reference

All reconstruction parameters are specified in a TOML file passed to the recon command.

Input Section

The [[input]] array-of-tables block specifies one or more projection datasets. Use double brackets to enable multiple datasets (for multi-tilt XMCD).

[[input]]
filename = "/path/to/projections.tiff"     # TIFF file with projection data (required)
angles   = "/path/to/angles.txt"           # Text file with one angle per line (required)
gamma    = 0                                # Tilt angle in degrees (required)

Notes:

  • You can have multiple [[input]] blocks for multi-tilt reconstructions with different gamma values

  • Angles file: one value per line; auto-detected as degrees or radians based on magnitude

  • If max(|angle|) > , angles are treated as degrees and converted to radians

Output Section

[output]
filename = "recon.tiff"                 # Output path (relative or absolute)
formats  = ["tiff"]                     # Output formats (optional, default: ["tiff"])
                                        # Valid options: "tiff", "vti"

Reconstruction Parameters

[recon_params]
max_iters  = 100                        # Maximum outer iterations (default: 100)
tol        = 1e-5                       # Loss convergence tolerance (default: 1e-5)
xtol       = 1e-5                       # Solution change tolerance (default: 1e-5)
recon_dims = [51, 511, 511]             # [thickness, height, width] in voxels

Key constraints:

  • All dimensions in recon_dims must be odd (even values are silently decremented)

  • thickness is the laminography depth, expected to be << width (a warning is printed if ratio > 0.15)

Regularization

Unconstrained Reconstruction (Conjugate Gradient)

Omit the [recon_params.regularizer] block entirely:

[recon_params]
max_iters  = 50
tol        = 1e-5
xtol       = 1e-5
recon_dims = [51, 511, 511]

This runs the least-squares conjugate gradient solver without regularization.

Split Bregman with Total Variation Regularization

Add a [recon_params.regularizer] block:

[recon_params]
max_iters  = 100
tol        = 1e-5
xtol       = 1e-5
recon_dims = [51, 511, 511]

[recon_params.regularizer]
method = "split_bregman"                # Currently the only supported method

[recon_params.regularizer.split_bregman]
lambda      = 0.5                       # TV regularization weight (default: 0.1)
mu          = 10.0                      # Augmented Lagrangian penalty (default: 10.0)
inner_iters = 1                         # CG iterations per outer iteration (default: 1)

Parameters:

  • lambda: Regularization weight; controls balance between data fidelity and smoothness

  • mu: Augmented Lagrangian penalty parameter; higher values enforce constraints more strictly

  • inner_iters: Number of CG iterations to solve the u-subproblem in each Bregman iteration

Complete Example

Here’s a complete configuration file for split Bregman reconstruction:

[[input]]
filename = "data/projections.tiff"
angles   = "data/angles.txt"
gamma    = 0

[output]
filename = "reconstruction.tiff"
formats  = ["tiff", "vti"]

[recon_params]
max_iters  = 100
tol        = 1e-6
xtol       = 1e-6
recon_dims = [51, 511, 511]

[recon_params.regularizer]
method = "split_bregman"

[recon_params.regularizer.split_bregman]
lambda      = 0.5
mu          = 10.0
inner_iters = 2

Multi-tilt XMCD Example

For multi-tilt magnetic circular dichroism with three datasets at different tilts:

[[input]]
filename = "data/gamma_0.tiff"
angles   = "data/angles.txt"
gamma    = 0

[[input]]
filename = "data/gamma_45.tiff"
angles   = "data/angles.txt"
gamma    = 45

[[input]]
filename = "data/gamma_-45.tiff"
angles   = "data/angles.txt"
gamma    = -45

[output]
filename = "recon_multi_tilt.tiff"

[recon_params]
max_iters  = 150
tol        = 1e-6
xtol       = 1e-6
recon_dims = [51, 511, 511]

[recon_params.regularizer]
method = "split_bregman"

[recon_params.regularizer.split_bregman]
lambda      = 0.5
mu          = 10.0
inner_iters = 2