Muonium reaction kinetics at a pulsed source (scripting)
Muonium (Mu = μ⁺e⁻) is a light isotope of the hydrogen atom; the rate at which it reacts with a dissolved scavenger is measured by the relaxation of its transverse-field precession signal [1]. In a weak transverse field the Mu signal is a relaxing oscillation
and the kinetics are pseudo-first-order, so the relaxation rate is linear in the reactant concentration \([x]\),
with slope the bimolecular rate constant \(k_\mathrm{Mu}\) and intercept the solvent background \(\lambda_0\). Repeating across temperature gives the activation energy from the Arrhenius form
The pulsed-source problem
At a pulsed source (e.g. ISIS EMU) the muon pulse and the resulting dead window put the first good bin at \(t_g \approx 0.2\,\mu\mathrm{s}\). For a fast-reacting sample the Mu oscillation has largely decayed before \(t_g\), so a free per-run fit cannot separate the initial amplitude from the rate — the two trade off through the conserved surviving amplitude and the fit rails to the amplitude bound. Integrating the asymmetry does not rescue it either, since a transverse-field oscillation averages toward zero.
Mathematical detail: why the truncated fit is degenerate
Re-centred on the first good bin \(t_g\),
so the data fix the surviving amplitude (the bracket) but not \(\lambda_\mathrm{Mu}\) itself: the initial amplitude \(A_\mathrm{Mu}\) and the rate \(\lambda_\mathrm{Mu}\) are coupled through the conserved product \(A_\mathrm{Mu} e^{-\lambda_\mathrm{Mu} t_g}\). Any increase in the rate can be absorbed by a compensating increase in the initial amplitude, which is what makes the free per-run fit degenerate.
Step 2 — the bimolecular rate \(k_\mathrm{Mu}\)
Fit the recovered rates against concentration:
rate = fit_bimolecular_rate(concentrations, relax.lambda_mu, relax.lambda_mu_error)
print(rate.k_mu, rate.k_mu_error) # slope: bimolecular rate constant
print(rate.lambda0, rate.lambda0_error) # intercept: solvent background
Because the supplied data give relative concentrations only, k_mu is in
units of μs⁻¹ per relative-concentration unit; converting to an absolute
\(\mathrm{M^{-1}s^{-1}}\) value needs the stock molarity (an external input).
Step 3 — the activation energy
Repeat Steps 1–2 at each temperature to get \(k_\mathrm{Mu}(T)\), then:
arr = fit_arrhenius(temperatures, k_values, k_errors) # energy_unit="kJ/mol"
print(arr.activation_energy, arr.activation_energy_error) # E_a in kJ/mol
fit_arrhenius() linearises the guide’s exact form in
\((1/T, \log_{10} k)\); the slope is \(-E/(\ln 10 \cdot R)\). Pass
energy_unit="J/mol" for joules.
Single-run cross-check
When the muonium fraction is already known, mu_relaxation_from_amplitude()
recovers \(\lambda_\mathrm{Mu}\) from a single truncated run by holding
\(A_\mathrm{Mu}\) fixed to that reference — the analytic limit of the
shared fit, useful as an independent check or a manual fallback:
lam, sigma = mu_relaxation_from_amplitude(
dataset, reference_amplitude=relax.shared_amplitude,
f_mu=2.78, phase=relax.shared_phase,
)
Worked example (EMU maleic acid)
On the ISIS muon-school maleic-acid dataset (EMU runs 78251–78302, Mu addition to
the C=C bond of maleic acid in water; first_good_bin 21, \(t_g \approx
0.203\,\mu\mathrm{s}\)) the shared-amplitude fit recovers a physical rate for
every concentration — including the fast half and full samples a free
fit cannot reach. The room-temperature concentration line gives
\(k_\mathrm{Mu} \approx 0.68\ \mu\mathrm{s^{-1}}\) per relative-concentration
unit and a water background \(\lambda_0 \approx 0.6\ \mu\mathrm{s^{-1}}\), and
the Arrhenius plot over 278–338 K gives an activation energy of order
\(10\ \mathrm{kJ\,mol^{-1}}\) — the right order for the diffusion-controlled
regime expected for this π-addition, and consistent with the literature value of
\(\approx 17.6\ \mathrm{kJ\,mol^{-1}}\) quoted for the reaction (see the
porting study under docs/porting/pulsed-fast-mu-kinetics/ for the corpus
ground truth this is checked against).
References
[1] E. Roduner, The Positive Muon as a Probe in Free Radical Chemistry, Lecture Notes in Chemistry Vol. 40 (Springer, Berlin, 1988).
See also
Asymmetry-domain global fit (scripting) — the shared/local global fit this method builds on. Parameter trending — trending fitted parameters across a run series in the GUI.