What AZURE2 Can Do
A map of the whole package, with pointers to the chapter covering each part. If you are looking for “can AZURE2 do X”, start here.
The model
AZURE2 implements multi-channel, multi-level R-matrix theory in the formulation of Lane and Thomas. You describe a compound nucleus in terms of:
Particle pairs — the reaction participants, with masses, charges, spins, separation and excitation energies, and a channel radius (Particle Pairs Tab).
Levels and channels — resonances of the compound nucleus, each decaying through channels labelled by orbital angular momentum \(L\), channel spin \(S\) and particle pair. Allowed channels are generated automatically from the pairs (Levels and Channels Tab).
Segments — what to compare against or compute: experimental datasets, or grids of energies and angles for prediction (Segments Tab).
Both the standard R-matrix parametrisation and the alternative level matrix
of C. R. Brune are supported, the latter with --use-brune. Capture may
use the Reich–Moore approximation (--use-rmc), and external (direct)
capture is included.
Observables
Angle-integrated and differential cross sections, in the lab or centre-of-mass frame
S-factors
Angular distributions (Legendre coefficients)
Phase shifts
Total capture, summed over final states
Reaction rates as a function of temperature
All output is centre-of-mass, regardless of the frame the input used (Output Files).
Experimental effects
Calculations can be corrected for the things that separate a measurement from a point cross section (Experimental Effects Tab):
Target integration — finite target thickness, with SRIM stopping powers
Beam energy convolution — finite beam resolution and straggling
Detector geometry — angular acceptance via Q-coefficients
Per-segment normalizations and energy shifts, either fixed or treated as free parameters constrained by their quoted experimental uncertainties
Fitting
Parameters are fitted by least squares against the data (Fitting Tab). What enters the objective — the data term, the normalization and energy-shift penalties, nuisance parameters — is set out in How the Chi-Squared Is Built.
Minuit2 (MIGRAD) is the default minimizer
A Levenberg–Marquardt minimizer using the analytic Jacobian is available with
--use-lm, and is usually much faster for width-dominated fitsMINOS error analysis gives asymmetric uncertainties
Covariance-based uncertainty bands on the calculated cross section (
--covariance-band)Parameter limits and Wigner-limit bounds, which can be populated automatically
Bayesian inference
Instead of a single best fit, sample the posterior with an
affine-invariant ensemble sampler — the same algorithm as emcee
(MCMC Tab). Priors for normalizations and energy shifts are
built automatically from the quoted experimental errors; priors on level
energies and widths are yours to state. The chain is written as CSV for
analysis in any tool.
Scripting
Everything above is reachable from Python through pyazr — the Python Interface,
which runs headless AZURE2 processes and talks to them over a socket. That
covers custom minimizers, external samplers (emcee, zeus, dynesty),
parameter scans, cross-section decomposition into individual level and
interference contributions, dimensionless widths, and programmatic editing of
the model itself.
Performance
Two things make repeated evaluation cheap, and both matter most where it hurts most — a long fit or an MCMC run.
Derivatives are analytic. The gradient of \(\chi^2\), and the full residual Jacobian, are obtained by reverse accumulation through the same chain the forward calculation uses, at roughly the cost of two forward evaluations regardless of how many parameters are free. Finite differences would cost one evaluation per parameter per iteration. This covers cross sections, S-factors, phase shifts and analyzing powers; the one case still done numerically is an analyzing power averaged over a target, which is a ratio of two integrals.
Coulomb functions are cached, and the cache knows when to give up. These are among the most expensive quantities in an R-matrix calculation, and during a fit the data energies stay fixed while the parameters move, so the same values are wanted repeatedly. There is one situation where that stops being true: if an energy shift is free, the energies move every iteration and a stored value is never asked for twice. A cache that simply accumulated would grow without bound and get slower as it grew. Each cache therefore watches its own hit rate and, if too few of its entries are earning their keep, stops storing and releases what it holds — degrading to the uncached speed rather than past it.
Interfaces
Interface |
Use it for |
|---|---|
GUI |
Building and inspecting a model, running fits, plotting. The natural place to start. |
Console ( |
Scripted or remote runs, batch jobs, HPC (Command-Line Usage). |
Python ( |
Anything programmatic (pyazr — the Python Interface): the engine runs in-process through pybind11. |
What AZURE2 does not do
Stated plainly, so you do not go looking:
It does not compute nuclear structure. Levels, spins and parities are input.
It does not select a model for you. Which levels to include, and which channels to free, are physics decisions.
The MCMC reports an acceptance fraction but no autocorrelation time, so it cannot tell you whether a chain has converged. Use
emcee’s diagnostics on the output file.Uncertainty bands are covariance-based and therefore Gaussian near the minimum. For a non-Gaussian posterior, sample it.