Belle II Software  release-06-00-14
RKTools.h
1 /* Copyright 2008-2009, Technische Universitaet Muenchen,
2  Authors: Christian Hoeppner & Sebastian Neubert & Johannes Rauch
3 
4  This file is part of GENFIT.
5 
6  GENFIT is free software: you can redistribute it and/or modify
7  it under the terms of the GNU Lesser General Public License as published
8  by the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  GENFIT is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public License
17  along with GENFIT. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
24 #ifndef genfit_RKTools_h
25 #define genfit_RKTools_h
26 
27 #include <stddef.h>
28 #include <algorithm>
29 
30 namespace genfit {
31 
32 template <size_t nRows, size_t nCols>
33 struct RKMatrix {
34  double vals[nRows * nCols];
35 
36  RKMatrix() = default;
37  RKMatrix(const RKMatrix&) = default;
38 
39  double& operator()(size_t iRow, size_t iCol) {
40  return vals[nCols*iRow + iCol];
41  }
42  double& operator[](size_t n) {
43  return vals[n];
44  }
45  const double& operator[](size_t n) const {
46  return vals[n];
47  }
48  double* begin() { return vals; }
49  double* end() { return vals + nRows * nCols; }
50  const double* begin() const { return vals; }
51  const double* end() const { return vals + nRows * nCols; }
52  RKMatrix<nRows, nCols>& operator=(const RKMatrix<nRows, nCols>& o) {
53  std::copy(o.begin(), o.end(), this->begin());
54  return *this;
55  }
56 
57  void print();
58 };
59 
60 typedef RKMatrix<1, 3> M1x3;
61 typedef RKMatrix<1, 4> M1x4;
62 typedef RKMatrix<1, 7> M1x7;
63 typedef RKMatrix<5, 5> M5x5;
64 typedef RKMatrix<6, 6> M6x6;
65 typedef RKMatrix<7, 7> M7x7;
66 typedef RKMatrix<6, 5> M6x5;
67 typedef RKMatrix<7, 5> M7x5;
68 typedef RKMatrix<5, 6> M5x6;
69 typedef RKMatrix<5, 7> M5x7;
70 
74 namespace RKTools {
75 
76  void J_pMTxcov5xJ_pM(const M5x7& J_pM, const M5x5& cov5, M7x7& out7);
77  void J_pMTxcov5xJ_pM(const M5x6& J_pM, const M5x5& cov5, M6x6& out6);
78 
79  void J_MpTxcov7xJ_Mp(const M7x5& J_Mp, const M7x7& cov7, M5x5& out5);
80  void J_MpTxcov6xJ_Mp(const M6x5& J_Mp, const M6x6& cov6, M5x5& out5);
81 
82  void J_pMTTxJ_MMTTxJ_MpTT(const M7x5& J_pMT, const M7x7& J_MMT, const M5x7& J_MpT, M5x5& J_pp);
83 
84  void Np_N_NpT(const M7x7& Np, M7x7& N);
85 
86  void printDim(const double* mat, unsigned int dimX, unsigned int dimY);
87 
88 }
89 
90 template<size_t nRows, size_t nCols>
91 inline void
93  RKTools::printDim(this->vals, nRows, nCols);
94 }
95 
96 } /* End of namespace genfit */
99 #endif // genfit_RKTools_h
100 
Defines for I/O streams used for error and debug printing.