Fit functions
This chapter documents every fit function (component) available in the fit-function builder. The pages mirror the submenus of the builder’s component picker exactly, so the section a function is documented under is the submenu it lives under in the GUI:
Components are building blocks: each evaluates a normalised polarisation or
relaxation shape scaled by its amplitude, and a fittable model is assembled by
combining components with +, -, *, / and fraction groups in
the builder (see Composite models). The two canonical patterns are
an additive background,
StaticGKT_ZF + Constant
and a multiplicative relaxation envelope on an oscillating or entangled-state signal,
FmuF_Linear * Exponential + Constant
A small number of single-channel models (with an explicit baseline
parameter) are also exposed through the Python MODELS registry for
scripted fits; these are noted on the relevant component sections.
Conventions
Time is measured in μs, frequencies in MHz, fields in Gauss, distances in Å, and relaxation rates in μs⁻¹; phases are in radians. The muon gyromagnetic ratio is \(\gamma_\mu/2\pi = 135.539\) MHz/T. Component notation is kept consistent with Blundell, De Renzi, Lancaster and Pratt, Muon Spectroscopy: An Introduction (Oxford University Press, Oxford, 2022); each function’s section cites the original literature for its functional form.
The builder only offers components belonging to the analysis domain being fitted: time-domain representations see the time-domain categories (Relaxation, Oscillation, Kubo–Toyabe, Muonium, Nuclear dipolar, Background), while Fourier spectra are fitted with the Frequency domain components.
Documentation policy
Every fit component must be documented in the page of this chapter that
corresponds to its category in the component picker, in the same pedagogical
style: when the model is physically relevant, the mathematical form (rendered
with LaTeX), parameter table, practical fitting guidance, and APS-style
references to the original literature. This placement is enforced by
tests/test_fit_function_docs.py — adding a new component without
documenting it in the matching page fails the test suite.
Migrating from WiMDA
Asymmetry’s time-domain catalogue covers everything WiMDA’s fitting menu
offers (built-in oscillation/relaxation grid plus the muonium and dipolar
user-function libraries; see docs/porting/wimda-fit-function-parity/).
A few WiMDA conveniences are deliberately not separate components because
parameter constraints already express them:
Scaled frequency rotation (otScaledFRotation) — a cosine at
frequency × scale. Use Oscillatory and tie the frequency with an
affine tie (Parameter ties (links and equal spacing)), e.g. for a component locked to 1.2× the
first component’s frequency:
from asymmetry.core.fitting import AffineTie, Parameter
Parameter("frequency_2", value=..., tie=AffineTie(main="frequency_1", scale=1.2))
or use a link group when the ratio is exactly 1.
Frequency-normalised stretched exponential (rtFstr) — a stretched
exponential whose rate scales with the component’s precession frequency
(Lambda = 2π·c·frequency). This couples two fitted parameters
multiplicatively, so it is not an affine tie; it needs the general
expression constraint (Parameter.expr), which is reserved but not yet
evaluated by the engine. Until then, fit Lambda directly, or fix
frequency and use an affine tie
AffineTie(main="frequency", scale=2*pi*c) for a known c.
Gaussian variants (rtGau2, rtSig2) — reparameterisations of
Gaussian \(e^{-(\sigma t)^2}\): WiMDA’s Gau2
\(e^{-(\sigma' t)^2/2}\) corresponds to \(\sigma = \sigma'/\sqrt{2}\)
(also the mapping to the textbook’s \(e^{-\Delta^2 t^2/2}\) convention),
and Sig2 fits \(s_2 = \sigma^2\) directly.
RIKEN BeCu pressure cell (BeCu ZF) — exactly the composite:
StaticGKT_ZF + Exponential
with the amplitude split between the two terms. The companion empirical
BeCu LF 110G calibration curve (a polynomial λ(T) for one cell at one
field) is instrument calibration data rather than a fit function and was not
ported.