Belle II Software development
JacobianMatrixUtil.h
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#pragma once
9
10#include <tracking/trackingUtilities/numerics/JacobianMatrix.h>
11#include <tracking/trackingUtilities/numerics/ParameterVector.h>
12
13#include <tracking/trackingUtilities/geometry/VectorUtil.h>
14
15#include <tracking/trackingUtilities/numerics/EigenView.h>
16
17#include <Math/Vector2D.h>
18
19#include <Eigen/Core>
20
21namespace Belle2 {
26 namespace TrackingUtilities {
27
30
32 template <unsigned int M, unsigned int N = M>
33 static JacobianMatrix<M, N> zero()
34 {
36 }
37
39 template <int M, int N = M>
40 static JacobianMatrix<M, N> identity()
41 {
43 }
44
46 template <int N>
47 static JacobianMatrix<N, N> passiveRotation(int i, int j, double phi)
48 {
49 return passiveRotation<N>(i, j, VectorUtil::Phi(phi));
50 }
51
53 template <int N>
54 static JacobianMatrix<N, N> passiveRotation(int i, int j, const ROOT::Math::XYVector& phiVec)
55 {
56 assert(i < N);
57 assert(j < N);
58 JacobianMatrix<N, N> result = identity<N>();
59 result(i, i) = phiVec.x();
60 result(i, j) = phiVec.y();
61 result(j, i) = -phiVec.y();
62 result(j, j) = phiVec.x();
63 return result;
64 }
65
67 template <int N>
68 static JacobianMatrix<N> scale(const ParameterVector<N>& scales)
69 {
70 JacobianMatrix<N> result = zero<N>();
71 mapToEigen(result).diagonal() = mapToEigen(scales);
72 return result;
73 }
74
77 template <int M1, int N1, int M2, int N2>
78 static JacobianMatrix < M1 + M2, N1 + N2 > stackBlocks(const JacobianMatrix<M1, N1>& block1,
79 const JacobianMatrix<M2, N2>& block2)
80 {
81 JacobianMatrix < M1 + M2, N1 + N2 > result;
82 mapToEigen(result) << mapToEigen(block1), Eigen::Matrix<double, M1, N2>::Zero(),
83 Eigen::Matrix<double, M2, N1>::Zero(), mapToEigen(block2);
84 return result;
85 }
86 };
87
88 }
90}
static PlainMatrix< T, M, N > Identity()
Construct an identity matrix.
Definition PlainMatrix.h:74
static PlainMatrix< T, M, N > Zero()
Construct a matrix initialized with zeros.
Definition PlainMatrix.h:67
Abstract base class for different kinds of events.
Collection of functions related to jacobian matrices.
static JacobianMatrix< M1+M2, N1+N2 > stackBlocks(const JacobianMatrix< M1, N1 > &block1, const JacobianMatrix< M2, N2 > &block2)
Combines two jacobian matrices by putting them in two blocks diagonal to each other in a larger matri...
static JacobianMatrix< N, N > passiveRotation(int i, int j, const ROOT::Math::XYVector &phiVec)
Construct a passive rotation matrix around coordinates i and j.
static JacobianMatrix< N, N > passiveRotation(int i, int j, double phi)
Construct a passive rotation matrix around coordinates i and j.
static JacobianMatrix< M, N > zero()
Construct a zero matrix.
static JacobianMatrix< N > scale(const ParameterVector< N > &scales)
Calculates the jacobian matrix for a scaling in each parameter.
static JacobianMatrix< M, N > identity()
Construct a unit matrix.