|
ACTS
Experiment-independent tracking
|
This page documents the composite (hierarchy) Jacobians, which relate the alignment parameters of a component (e.g. a sensor) to those of a rigid structure it belongs to (e.g. a stave, a layer or a half-barrel). It covers the parameter conventions they rely on, the derivation, the implementation, and what is still missing.
ACTS computes derivatives of the residuals w.r.t. the alignment parameters of single surfaces. Aligning every sensor individually does not scale to a real tracker: the first steps of a real alignment are done on larger rigid bodies.
Aligning a rigid structure requires the chain rule from the sensor alignment parameters, for which ACTS computes derivatives, to the structure parameters:
\[\frac{\partial r}{\partial \mathbf{A}_\mathrm{structure}} = \frac{\partial r}{\partial \mathbf{a}_\mathrm{sensor}} \cdot \frac{\partial \mathbf{a}_\mathrm{sensor}}{\partial \mathbf{A}_\mathrm{structure}} \]
The second factor is the composite or hierarchy Jacobian. The derivatives of a structure are the sum of this product over all its sensors on the track.
In short, current ACTS surface alignment parameters are mixed: global-frame translations of the center, and local-frame rotations about the center.
ACTS is expected to move to fully local-frame parameters. The implementation is structured so that only one function changes when that happens (see alignment_composite_convention_adapter).
For an object with local-to-global transform \((R, \mathbf{c})\), the local-frame alignment parameters are \((\delta\mathbf{t}, \delta\boldsymbol{\omega})\): a translation along the object's own local axes, and small rotation angles about its own local axes, pivoting on its local origin. The moved object is
\[R' = R\,(1 + [\delta\boldsymbol{\omega}]_\times), \qquad \mathbf{c}' = \mathbf{c} + R\,\delta\mathbf{t}, \]
i.e. \(T' = T \cdot \Delta\) with \(\Delta = (1 + [\delta\boldsymbol{\omega}]_\times,\ \delta\mathbf{t})\). This is the convention used by CMS and Belle II for hierarchical alignment.
Let the composite (structure) have transform \((R_c, \mathbf{c}_c)\) and parameters \((\delta\mathbf{T}, \delta\mathbf{W})\), and the component (sensor) have \((R_s, \mathbf{c}_s)\). A rigid motion of the composite moves the global point \(\mathbf{x}\) by \(R_c\,\delta\mathbf{T} + (R_c\,\delta\mathbf{W}) \times (\mathbf{x} - \mathbf{c}_c)\) and rotates by the global rotation vector \(R_c\,\delta\mathbf{W}\). With the lever arm \(\mathbf{d} = \mathbf{c}_s - \mathbf{c}_c\) (global coordinates), the component therefore moves by
\[\delta\mathbf{c}_s = R_c\,\delta\mathbf{T} - [\mathbf{d}]_\times R_c\,\delta\mathbf{W}, \]
\[R_s' = (1 + [R_c\,\delta\mathbf{W}]_\times)\,R_s = R_s\,(1 + [R_s^T R_c\,\delta\mathbf{W}]_\times). \]
Expressing \(\delta\mathbf{c}_s\) along the component axes ( \(\delta\mathbf{t}_s = R_s^T\,\delta\mathbf{c}_s\)) and reading off \(\delta\boldsymbol{\omega}_s = R_s^T R_c\,\delta\mathbf{W}\) gives
\[\frac{\partial(\delta\mathbf{t}, \delta\boldsymbol{\omega})_s} {\partial(\delta\mathbf{T}, \delta\mathbf{W})_c} = \begin{pmatrix} R_\mathrm{rel}^T & -R_s^T\,[\mathbf{d}]_\times\,R_c \\ 0 & R_\mathrm{rel}^T \end{pmatrix}, \qquad R_\mathrm{rel} = R_c^T R_s . \]
The CMS form of this matrix is
\[\begin{pmatrix} R^{-1} & (\mathbf{T} \times \mathbf{a}_s)\cdot\mathbf{b} \\ 0 & R^{-1} \end{pmatrix}, \]
with \(R\) the component rotation relative to the composite, \(\mathbf{T}\) the component position relative to the composite, \(\mathbf{a}_s\) the component axes and \(\mathbf{b}\) the composite axes. The two agree:
This form is only correct when both levels use local-frame parameters. It does not apply directly to current ACTS surface parameters, whose translations are global. Porting CMS or Belle II code without accounting for this gives a wrong top-left block. On a pure translation test with \(R_c \approx 1\) that mistake can look correct.
The ACTS parameters of a surface relate to its local-frame parameters by \(\delta\mathbf{c} = R_s\,\delta\mathbf{t}\), with the rotations unchanged:
\[\frac{\partial\,\mathbf{a}_\mathrm{ACTS}}{\partial(\delta\mathbf{t}, \delta\boldsymbol{\omega})} = \begin{pmatrix} R_s & 0 \\ 0 & 1 \end{pmatrix}. \]
The Jacobian used on the derivatives ACTS provides is therefore
\[\frac{\partial\,\mathbf{a}_\mathrm{ACTS}}{\partial(\delta\mathbf{T}, \delta\mathbf{W})} = \begin{pmatrix} R_s & 0 \\ 0 & 1 \end{pmatrix} \begin{pmatrix} R_\mathrm{rel}^T & -R_s^T [\mathbf{d}]_\times R_c \\ 0 & R_\mathrm{rel}^T \end{pmatrix} = \begin{pmatrix} R_c & -[\mathbf{d}]_\times R_c \\ 0 & R_s^T R_c \end{pmatrix}. \]
The adapter is only needed when chaining to structure parameters:
\[\frac{\partial r}{\partial(\delta\mathbf{T}, \delta\mathbf{W})} = \frac{\partial r}{\partial \mathbf{a}_\mathrm{ACTS}} \begin{pmatrix} R_s & 0 \\ 0 & 1 \end{pmatrix} \frac{\partial(\delta\mathbf{t}, \delta\boldsymbol{\omega})_s} {\partial(\delta\mathbf{T}, \delta\mathbf{W})_c}. \]
An alignment of single surfaces uses the derivatives \(\partial r/\partial \mathbf{a}_\mathrm{ACTS}\) as they are: the solver then returns ACTS parameters, which is the convention corrections are applied in, and no adapter enters. Applying the adapter to the surface derivatives alone (the surface as its own structure) would instead give parameters in the surface's local frame.
When ACTS moves to local-frame parameters, the adapter becomes the identity and the composite Jacobian is used unchanged.
Acts/Surfaces/detail/AlignmentHelper.hpp provides two free functions next to rotationToLocalAxesDerivative:
Both take local-to-global transforms. localFrameToAlignmentParametersJacobian is the only place that encodes the ACTS convention.