Belle II Software  release-05-02-19
RotationTools.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2020 Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Radek Zlebcik
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 /* External headers. */
14 #include <TMatrixDSym.h>
15 #include <TMatrixD.h>
16 #include <TVectorD.h>
17 #include <TRotation.h>
18 
19 namespace Belle2 {
25  namespace RotationTools {
26 
31  inline TMatrixD toMatrix(TRotation r)
32  {
33  TMatrixD rM(3, 3);
34  for (int i = 0; i < 3; ++i)
35  for (int j = 0; j < 3; ++j)
36  rM(i, j) = r(i, j);
37  return rM;
38  }
39 
40 
47  inline TMatrixD getRotationMatrixYZ(double angleY, double angleZ)
48  {
49  TRotation r;
50  r.RotateY(angleY);
51  r.RotateZ(angleZ);
52  return toMatrix(r);
53  }
54 
55 
62  inline TMatrixD getRotationMatrixXY(double angleX, double angleY)
63  {
64  TRotation r;
65  r.RotateX(angleX);
66  r.RotateY(angleY);
67  return toMatrix(r);
68  }
69 
70 
71 
78  inline TMatrixD rotateTensor(const TVector3& vTo, const TMatrixD& orgMat)
79  {
80  TMatrixD r = getRotationMatrixYZ(vTo.Theta(), vTo.Phi());
81  TMatrixD rT = r; rT.T();
82  return r * orgMat * rT;
83  }
84 
91  inline TMatrixD rotateTensorInv(const TVector3& vTo, const TMatrixD& orgMat)
92  {
93  TMatrixD r = getRotationMatrixYZ(vTo.Theta(), vTo.Phi());
94  TMatrixD rT = r; rT.T();
95  return rT * orgMat * r;
96  }
97 
98 
105  inline TMatrixDSym toSymMatrix(const TMatrixD& m)
106  {
107  TMatrixDSym mS(m.GetNrows());
108  for (int i = 0; i < m.GetNrows(); ++i)
109  for (int j = 0; j < m.GetNcols(); ++j) {
110  mS(i, j) = (m(i, j) + m(j, i)) / 2;
111  }
112  return mS;
113  }
114 
115 
120  inline TVectorD toVec(TVector3 v)
121  {
122  return TVectorD(0, 2, v.X(), v.Y(), v.Z(), "END");
123  }
124 
129  TVector3 getUnitOrthogonal(TVector3 v)
130  {
131  return TVector3(v.Z(), 0, -v.X()).Unit();
132  }
133 
134  }
135 
137 }
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19