File indexing completed on 2024-04-06 12:03:50
0001 #ifndef _CLEHP_2_SMATRIX_MIGRATION_H_
0002 #define _CLEHP_2_SMATRIX_MIGRATION_H_
0003
0004 #include "DataFormats/Math/interface/AlgebraicROOTObjects.h"
0005
0006 #include "CLHEP/Matrix/Matrix.h"
0007 #include "CLHEP/Matrix/Vector.h"
0008 #include "CLHEP/Matrix/SymMatrix.h"
0009
0010 #include <cstring>
0011 #include <cassert>
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 template <unsigned int N1, unsigned int N2>
0031 ROOT::Math::SMatrix<double, N1, N2, typename ROOT::Math::MatRepStd<double, N1, N2> > asSMatrix(
0032 const CLHEP::HepMatrix &m) {
0033 typedef typename ROOT::Math::MatRepStd<double, N1, N2> REP;
0034 assert(m.num_row() == N1);
0035 assert(m.num_col() == N2);
0036 return ROOT::Math::SMatrix<double, N1, N2, REP>(&m(1, 1), REP::kSize);
0037 }
0038
0039 template <unsigned int N1>
0040 ROOT::Math::SMatrix<double, N1, N1, typename ROOT::Math::MatRepSym<double, N1> > asSMatrix(
0041 const CLHEP::HepSymMatrix &m) {
0042 typedef typename ROOT::Math::MatRepSym<double, N1> REP;
0043 assert(m.num_row() == N1);
0044 return ROOT::Math::SMatrix<double, N1, N1, REP>(&m(1, 1), REP::kSize);
0045 }
0046
0047 template <unsigned int N1>
0048 ROOT::Math::SVector<double, N1> asSVector(const CLHEP::HepVector &m) {
0049 return ROOT::Math::SVector<double, N1>(&m[0], N1);
0050 }
0051
0052 template <unsigned int N>
0053 CLHEP::HepVector asHepVector(const ROOT::Math::SVector<double, N> &v) {
0054 CLHEP::HepVector hv(N);
0055 memcpy(&hv[0], &v[0], N * sizeof(double));
0056 return hv;
0057 }
0058
0059 template <unsigned int N1, unsigned int N2>
0060 CLHEP::HepMatrix asHepMatrix(
0061 const ROOT::Math::SMatrix<double, N1, N2, typename ROOT::Math::MatRepStd<double, N1, N2> > &rm) {
0062 CLHEP::HepMatrix am(N1, N2);
0063 memcpy(&am(1, 1), rm.Array(), N1 * N2 * sizeof(double));
0064 return am;
0065 }
0066
0067 template <unsigned int N1>
0068 CLHEP::HepSymMatrix asHepMatrix(
0069 const ROOT::Math::SMatrix<double, N1, N1, typename ROOT::Math::MatRepSym<double, N1> > &rm) {
0070 CLHEP::HepSymMatrix am(N1);
0071 memcpy(&am(1, 1), rm.Array(), (N1 * (N1 + 1)) / 2 * sizeof(double));
0072 return am;
0073 }
0074
0075 #endif