Warning, /acts/docs/pages/alignment_composite_jacobians.md is written in an unsupported language. File is not indexed.
0001 @page alignment_composite_jacobians Composite alignment Jacobians
0002
0003 # Composite alignment Jacobians
0004
0005 This page documents the composite (hierarchy) Jacobians, which relate the
0006 alignment parameters of a component (e.g. a sensor) to those of a rigid
0007 structure it belongs to (e.g. a stave, a layer or a half-barrel). It covers the
0008 parameter conventions they rely on, the derivation, the implementation, and what
0009 is still missing.
0010
0011 [TOC]
0012
0013 ## Motivation
0014
0015 ACTS computes derivatives of the residuals w.r.t. the alignment parameters of
0016 single surfaces. Aligning every sensor individually does not scale to a real
0017 tracker: the first steps of a real alignment are done on larger rigid bodies.
0018
0019 Aligning a rigid structure requires the chain rule from the sensor alignment
0020 parameters, for which ACTS computes derivatives, to the structure parameters:
0021
0022 @f[
0023 \frac{\partial r}{\partial \mathbf{A}_\mathrm{structure}}
0024 = \frac{\partial r}{\partial \mathbf{a}_\mathrm{sensor}}
0025 \cdot \frac{\partial \mathbf{a}_\mathrm{sensor}}{\partial \mathbf{A}_\mathrm{structure}}
0026 @f]
0027
0028 The second factor is the *composite* or *hierarchy Jacobian*. The derivatives
0029 of a structure are the sum of this product over all its sensors on the track.
0030
0031 ## ACTS alignment parameter convention
0032
0033 In short, **current ACTS surface alignment parameters are mixed**: global-frame
0034 translations of the center, and local-frame rotations about the center.
0035
0036 ACTS is expected to move to fully local-frame parameters. The implementation is
0037 structured so that only one function changes when that happens (see
0038 @ref alignment_composite_convention_adapter).
0039
0040 ## Derivation
0041
0042 ### Local-frame parameters
0043
0044 For an object with local-to-global transform @f$(R, \mathbf{c})@f$, the
0045 *local-frame* alignment parameters are @f$(\delta\mathbf{t}, \delta\boldsymbol{\omega})@f$:
0046 a translation along the object's own local axes, and small rotation angles about
0047 its own local axes, pivoting on its local origin. The moved object is
0048
0049 @f[
0050 R' = R\,(1 + [\delta\boldsymbol{\omega}]_\times), \qquad
0051 \mathbf{c}' = \mathbf{c} + R\,\delta\mathbf{t},
0052 @f]
0053
0054 i.e. @f$T' = T \cdot \Delta@f$ with @f$\Delta = (1 + [\delta\boldsymbol{\omega}]_\times,\ \delta\mathbf{t})@f$.
0055 This is the convention used by CMS and Belle II for hierarchical alignment.
0056
0057 ### Composite to component
0058
0059 Let the composite (structure) have transform @f$(R_c, \mathbf{c}_c)@f$ and
0060 parameters @f$(\delta\mathbf{T}, \delta\mathbf{W})@f$, and the component
0061 (sensor) have @f$(R_s, \mathbf{c}_s)@f$. A rigid motion of the composite moves
0062 the global point @f$\mathbf{x}@f$ by
0063 @f$R_c\,\delta\mathbf{T} + (R_c\,\delta\mathbf{W}) \times (\mathbf{x} - \mathbf{c}_c)@f$
0064 and rotates by the global rotation vector @f$R_c\,\delta\mathbf{W}@f$.
0065 With the lever arm @f$\mathbf{d} = \mathbf{c}_s - \mathbf{c}_c@f$ (global
0066 coordinates), the component therefore moves by
0067
0068 @f[
0069 \delta\mathbf{c}_s = R_c\,\delta\mathbf{T} - [\mathbf{d}]_\times R_c\,\delta\mathbf{W},
0070 @f]
0071 @f[
0072 R_s' = (1 + [R_c\,\delta\mathbf{W}]_\times)\,R_s
0073 = R_s\,(1 + [R_s^T R_c\,\delta\mathbf{W}]_\times).
0074 @f]
0075
0076 Expressing @f$\delta\mathbf{c}_s@f$ along the component axes
0077 (@f$\delta\mathbf{t}_s = R_s^T\,\delta\mathbf{c}_s@f$) and reading off
0078 @f$\delta\boldsymbol{\omega}_s = R_s^T R_c\,\delta\mathbf{W}@f$ gives
0079
0080 @f[
0081 \frac{\partial(\delta\mathbf{t}, \delta\boldsymbol{\omega})_s}
0082 {\partial(\delta\mathbf{T}, \delta\mathbf{W})_c}
0083 = \begin{pmatrix}
0084 R_\mathrm{rel}^T & -R_s^T\,[\mathbf{d}]_\times\,R_c \\
0085 0 & R_\mathrm{rel}^T
0086 \end{pmatrix},
0087 \qquad R_\mathrm{rel} = R_c^T R_s .
0088 @f]
0089
0090 ### Relation to the CMS form
0091
0092 The CMS form of this matrix is
0093
0094 @f[
0095 \begin{pmatrix} R^{-1} & (\mathbf{T} \times \mathbf{a}_s)\cdot\mathbf{b} \\ 0 & R^{-1} \end{pmatrix},
0096 @f]
0097
0098 with @f$R@f$ the component rotation relative to the composite, @f$\mathbf{T}@f$
0099 the component position relative to the composite, @f$\mathbf{a}_s@f$ the
0100 component axes and @f$\mathbf{b}@f$ the composite axes. The two agree:
0101
0102 - the diagonal blocks are both @f$R_\mathrm{rel}^T = R_s^T R_c@f$;
0103 - element @f$(i, j)@f$ of the top-right block is
0104 @f$-\hat{a}_i \cdot (\mathbf{d} \times \hat{b}_j) = \hat{b}_j \cdot (\mathbf{d} \times \hat{a}_i)
0105 = (\mathbf{d} \times \hat{a}_i)\cdot\hat{b}_j@f$, the CMS expression with
0106 @f$\mathbf{T} = \mathbf{d}@f$, including the sign.
0107
0108 This form is only correct when **both** levels use local-frame parameters. It
0109 does not apply directly to current ACTS surface parameters, whose translations
0110 are global. Porting CMS or Belle II code without accounting for this gives a
0111 wrong top-left block. On a pure translation test with @f$R_c \approx 1@f$ that
0112 mistake can look correct.
0113
0114 @anchor alignment_composite_convention_adapter
0115 ### Convention adapter
0116
0117 The ACTS parameters of a surface relate to its local-frame parameters by
0118 @f$\delta\mathbf{c} = R_s\,\delta\mathbf{t}@f$, with the rotations unchanged:
0119
0120 @f[
0121 \frac{\partial\,\mathbf{a}_\mathrm{ACTS}}{\partial(\delta\mathbf{t}, \delta\boldsymbol{\omega})}
0122 = \begin{pmatrix} R_s & 0 \\ 0 & 1 \end{pmatrix}.
0123 @f]
0124
0125 The Jacobian used on the derivatives ACTS provides is therefore
0126
0127 @f[
0128 \frac{\partial\,\mathbf{a}_\mathrm{ACTS}}{\partial(\delta\mathbf{T}, \delta\mathbf{W})}
0129 = \begin{pmatrix} R_s & 0 \\ 0 & 1 \end{pmatrix}
0130 \begin{pmatrix} R_\mathrm{rel}^T & -R_s^T [\mathbf{d}]_\times R_c \\ 0 & R_\mathrm{rel}^T \end{pmatrix}
0131 = \begin{pmatrix} R_c & -[\mathbf{d}]_\times R_c \\ 0 & R_s^T R_c \end{pmatrix}.
0132 @f]
0133
0134 The adapter is only needed when chaining to structure parameters:
0135
0136 @f[
0137 \frac{\partial r}{\partial(\delta\mathbf{T}, \delta\mathbf{W})}
0138 = \frac{\partial r}{\partial \mathbf{a}_\mathrm{ACTS}}
0139 \begin{pmatrix} R_s & 0 \\ 0 & 1 \end{pmatrix}
0140 \frac{\partial(\delta\mathbf{t}, \delta\boldsymbol{\omega})_s}
0141 {\partial(\delta\mathbf{T}, \delta\mathbf{W})_c}.
0142 @f]
0143
0144 An alignment of single surfaces uses the derivatives
0145 @f$\partial r/\partial \mathbf{a}_\mathrm{ACTS}@f$ as they are: the solver then
0146 returns ACTS parameters, which is the convention corrections are applied in, and
0147 no adapter enters. Applying the adapter to the surface derivatives alone (the
0148 surface as its own structure) would instead give parameters in the surface's
0149 local frame.
0150
0151 When ACTS moves to local-frame parameters, the adapter becomes the identity and
0152 the composite Jacobian is used unchanged.
0153
0154 ## Implementation
0155
0156 `Acts/Surfaces/detail/AlignmentHelper.hpp` provides two free functions next to
0157 `rotationToLocalAxesDerivative`:
0158
0159 ```cpp
0160 namespace Acts::detail {
0161
0162 /// d(dt, dw)_component / d(dT, dW)_composite, both in local-frame parameters
0163 AlignmentMatrix compositeToComponentJacobian(
0164 const Transform3& compositeTransform, const Transform3& componentTransform);
0165
0166 /// d(ACTS alignment parameters) / d(local-frame parameters) = diag(R, 1)
0167 AlignmentMatrix localFrameToAlignmentParametersJacobian(
0168 const Transform3& surfaceTransform);
0169
0170 } // namespace Acts::detail
0171 ```
0172
0173 Both take local-to-global transforms. `localFrameToAlignmentParametersJacobian`
0174 is the only place that encodes the ACTS convention.
0175
0176 ## Limitations and open items
0177
0178 - **Structure frames.** The Jacobian needs the frame of the composite: its
0179 origin (the pivot of the rotations, entering through the lever arm) and its
0180 orientation @f$R_c@f$. The choice is up to the user; a common one is the
0181 global orientation centred on the structure, so that the translations are
0182 global shifts.
0183 - **Several levels.** The Jacobians chain: for a sensor in a stave in a layer,
0184 the Jacobian w.r.t. the layer is the product of the sensor-to-stave and
0185 stave-to-layer Jacobians, both in local-frame parameters. No helper for
0186 multi-level chains is provided yet.
0187 - **Degrees of freedom at several levels.** When both a structure and its
0188 components float, the structure motion is degenerate with the common motion
0189 of its components. The usual way out (CMS, Belle II) is 6 linear constraints
0190 per structure, @f$\sum_{s \in \mathrm{structure}} J_s^T\, \mathbf{a}_s = 0@f$,
0191 so that the component corrections carry no net rigid-body motion of their
0192 structure. Since the component and structure parameters are in different
0193 frames, a component degree of freedom maps to a linear combination of
0194 structure ones; the degeneracy is not visible in the alignment masks alone.
0195 - **Linearisation point.** The Jacobians depend on the transforms they are
0196 evaluated with. Evaluating them on the nominal geometry is fine for small
0197 misalignments; an iterative alignment with large corrections would have to
0198 re-evaluate them on the updated alignment.