ATLAS Offline Software
Loading...
Searching...
No Matches
EigenHelpers.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef EIGEN_HELPERS_H
6#define EIGEN_HELPERS_H
7
10#include <vector>
12
14{
15public:
16
21 template <class VECTOR, class COVARIANCE>
22 inline static void vectorToEigenMatrix(VECTOR& vec, COVARIANCE& cov, const char* ) {
23 Amg::expand(vec.begin(), vec.end(), cov);
24 }
25
29 template <class VECTOR, class COVARIANCE>
30 inline static void eigenMatrixToVector(VECTOR& vec, COVARIANCE& cov, const char* ) {
31 Amg::compress(cov, vec);
32 }
33
35 template <class T>
36 static void vectorToEigenTransform3D( const T &vec,
37 Amg::Transform3D &trans )
38 {
39 trans(0, 0) = vec[0];
40 trans(0, 1) = vec[1];
41 trans(0, 2) = vec[2];
42 trans(1, 0) = vec[3];
43 trans(1, 1) = vec[4];
44 trans(1, 2) = vec[5];
45 trans(2, 0) = vec[6];
46 trans(2, 1) = vec[7];
47 trans(2, 2) = vec[8];
48 trans(0, 3) = vec[9];
49 trans(1, 3) = vec[10];
50 trans(2, 3) = vec[11];
51 }
52
54 template <class T>
55 static void eigenTransform3DToVector( const Amg::Transform3D &trans,
56 T &vec )
57 {
58 vec.reserve(12);
59 vec.push_back( trans(0, 0) );
60 vec.push_back( trans(0, 1) );
61 vec.push_back( trans(0, 2) );
62 vec.push_back( trans(1, 0) );
63 vec.push_back( trans(1, 1) );
64 vec.push_back( trans(1, 2) );
65 vec.push_back( trans(2, 0) );
66 vec.push_back( trans(2, 1) );
67 vec.push_back( trans(2, 2) );
68 vec.push_back( trans(0, 3) );
69 vec.push_back( trans(1, 3) );
70 vec.push_back( trans(2, 3) );
71 }
72};
73
74
75
76// template <>
77// static void EigenHelpers::vectorToEigenMatrix<typename std::vector<float>, typename Amg::Transform3D>(VECTOR& vec, TRANSFORM& transform, const char* name) {
78// size_t size = vec.size();
79// assert (size==9);
80// transform<vec[0],vec[1],vec[3],
81// vec[1],vec[2],vec[4],
82// vec[3],vec[4],vec[5];
83// }
84
85#endif
std::vector< size_t > vec
static void eigenTransform3DToVector(const Amg::Transform3D &trans, T &vec)
Convert HepGeom::Transform3D to std :: vector<double>
static void eigenMatrixToVector(VECTOR &vec, COVARIANCE &cov, const char *)
Helper fn to get raw data (vec<float>) from the covariance.
static void vectorToEigenTransform3D(const T &vec, Amg::Transform3D &trans)
Convert std :: vector<double> to Amg::Transform3D.
static void vectorToEigenMatrix(VECTOR &vec, COVARIANCE &cov, const char *)
Helper fn to fill the covariance from the raw data (vec<float>)
void compress(const AmgSymMatrix(N) &covMatrix, std::vector< float > &vec)
void expand(std::vector< float >::const_iterator it, std::vector< float >::const_iterator, AmgSymMatrix(N) &covMatrix)
Eigen::Affine3d Transform3D
TVectorD VECTOR