|
ACTS
Experiment-independent tracking
|
Pointwise material formalism shared by the KF and CKF.
Both the Kalman Filter (KF) and the Combinatorial Kalman Filter (CKF) share the exact same material-update machinery. Rather than integrating material continuously along the trajectory, they use a pointwise ("thin scatterer") model: all material assigned to a surface is collapsed onto a single point, where it is applied as a deterministic correction to the momentum plus an additive Gaussian process noise on the diagonal of the covariance matrix. This matches the \(\vec w_{k-1}\) process-noise term \(\mathbf Q_{k-1}\) of the Kalman formalism [3]. The parametrizations used follow the ATLAS treatment of energy loss and multiple scattering [6].
The same code is used by the standalone Acts::MaterialInteractor propagator actor (used e.g. by plain propagation and the GSF); the KF and CKF, however, do not install that actor. Instead they call the underlying routine directly from their Kalman actors so the material noise can be interleaved with the Kalman update at precisely the right point on each surface.
On every surface the fitters apply the pointwise material update, using a Acts::MaterialUpdateMode that avoids double counting:
Whether scattering and/or energy loss are applied is controlled by the multipleScattering and energyLoss flags on the fitter options (Acts::KalmanFitterOptions, Acts::CombinatorialKalmanFilterOptions), both enabled by default.
Before the material is evaluated, the slab thickness is scaled by the surface path correction \(1/\cos\alpha\) to account for the incidence angle \(\alpha\) of the trajectory.
Scattering does not change the momentum magnitude but widens the direction uncertainty. A single scattering standard deviation \(\theta_0\) is computed per surface. For all particles except electrons the Highland formula [5], in the parametrization of the Particle Data Group [9] (eq. 33.15), is used:
\[ \theta_0 = \frac{13.6\,\mathrm{MeV}}{\beta c\, p}\, q\, \sqrt{\frac{x}{X_0}} \left( 1 + 0.038\, \ln\!\left(\frac{x}{X_0}\frac{q^2}{\beta^2}\right) \right), \]
with the path length in radiation lengths \(x/X_0\), the momentum \(p\), the velocity \(\beta c\) and the charge \(q\). For electrons and positrons the Rossi–Greisen form (with a \(17.5\,\mathrm{MeV}\) prefactor) is used instead. The Highland term is evaluated as:
The single angle \(\theta_0\) is projected onto the two bound angular parameters, giving the process-noise variances that are added to the covariance:
\[ \sigma^2(\theta) = \theta_0^2, \qquad \sigma^2(\phi) = \left(\frac{\theta_0}{\sin\theta}\right)^2 . \]
The \(1/\sin\theta\) factor on \(\phi\) accounts for the metric of the polar parametrization. Note that only the diagonal \(\sigma^2(\phi)\) and \(\sigma^2(\theta)\) entries are modified; no \(\phi\)– \(\theta\) correlation is introduced:
Energy loss enters in two ways: a deterministic shift of the mean \(q/p\) and an additional variance on \(q/p\).
Mean energy loss (state update). The mean ionization loss is computed from the Bethe formula [9] (eq. 33.5), including the density-effect correction (eq. 33.6) and the maximum single-collision energy transfer \(W_\text{max}\) (eq. 33.4). The resulting energy loss \(\Delta E\) is applied to the particle energy,
\[ E' = \sqrt{m^2 + p^2} - \Delta E \cdot s, \qquad p' = \sqrt{E'^2 - m^2}, \]
where \(s = \pm 1\) is the propagation direction (energy decreases in the forward direction, increases in the backward/smoothing direction). The updated \(q/p'\) is written back to the track state. A floor of \(p' \geq 10\,\mathrm{MeV}\) is applied so that a too-large loss does not push the particle to negative momentum:
Energy-loss straggling (variance). The fluctuation of the ionization loss is described by the Landau–Vavilov distribution. Its full width at half maximum ( \(4\varepsilon\), [9] fig. 33.7) is converted to an equivalent Gaussian standard deviation \(\sigma_E\) via \(\sigma_E = \mathrm{fwhm}/(2\sqrt{2\ln 2})\), which is then propagated to a variance on \(q/p\) through the Jacobian \(\mathrm{d}(q/p)/\mathrm{d}E\):
\[ \sigma^2(q/p) = \left(\frac{\mathrm{d}(q/p)}{\mathrm{d}E}\right)^2 \sigma_E^2 . \]
This variance is added to the diagonal \(\sigma^2(q/p)\) covariance entry:
The three variances computed above are added onto the corresponding diagonal entries of the bound covariance, \(\sigma^2(\phi)\), \(\sigma^2(\theta)\) and \(\sigma^2(q/p)\). The sign is set by the Acts::NoiseUpdateMode – noise is added during the forward filtering pass. Each variance is floored at zero to protect against numerical underflow. No off-diagonal correlations are created, and the local position and time entries are untouched:
| Effect | Formalism | Applied to |
|---|---|---|
| Multiple scattering | Highland (Rossi–Greisen for \(e^\pm\)) | \(\sigma^2(\phi)\), \(\sigma^2(\theta)\) |
| Mean energy loss | Bethe (ionization) | mean \(q/p\) |
| Energy-loss straggling | Landau width \(\to\) Gaussian \(\sigma\) | \(\sigma^2(q/p)\) |
| Bremsstrahlung mean | — (use GSF) | — |
| Correlations | none (diagonal noise only) | — |
The pointwise application and covariance update themselves live in internal (non-public) detail code; the snippets shown in the sections above are extracted directly from it.