Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
// test of Matrices

#define SMATRIX_USE_CONSTEXPR
#include "DataFormats/Math/interface/invertPosDefMatrix.h"
#include "Math/SMatrix.h"
#include "Math/SVector.h"
#include <memory>
#include "FWCore/Utilities/interface/HRRealTime.h"
#include <iostream>

typedef ROOT::Math::SMatrix<double, 2, 2, ROOT::Math::MatRepSym<double, 2> > Matrix2;
typedef ROOT::Math::SMatrix<double, 3, 3, ROOT::Math::MatRepSym<double, 3> > Matrix3;

void finvert(Matrix2& mm) {
  auto m = mm.Array();

  auto c0 = 1 / m[0];
  auto c1 = m[1] * m[1] * c0;
  auto c2 = 1 / (m[2] - c1);

  auto li21 = c1 * c0 * c2;
  m[0] = li21 + c0;
  m[1] = -m[1] * c0 * c2;
  m[2] = c2;
}

void st() {}
void en() {}

int main(int argc, char* argv[]) {
  double v[3] = {1., -0.2, 0.5};
  Matrix2& m = *(new Matrix2(v, 3));

  std::cout << m << std::endl;
  invertPosDefMatrix(m);
  std::cout << m << std::endl;
  invertPosDefMatrix(m);
  std::cout << m << std::endl;
  m.Invert();
  std::cout << m << std::endl;
  m.Invert();
  std::cout << m << std::endl;

  finvert(m);
  std::cout << m << std::endl;
  finvert(m);
  std::cout << m << std::endl;

  if (argc > 1) {
    {
      edm::HRTimeType s = edm::hrRealTime();
      st();
      invertPosDefMatrix(m);
      en();
      edm::HRTimeType e = edm::hrRealTime();
      std::cout << e - s << std::endl;
    }

    {
      edm::HRTimeType s = edm::hrRealTime();
      st();
      invertPosDefMatrix(m);
      en();
      edm::HRTimeType e = edm::hrRealTime();
      std::cout << e - s << std::endl;
    }
  } else {
    {
      edm::HRTimeType s = edm::hrRealTime();
      st();
      m.Invert();
      en();
      edm::HRTimeType e = edm::hrRealTime();
      std::cout << e - s << std::endl;
    }

    {
      edm::HRTimeType s = edm::hrRealTime();
      st();
      m.Invert();
      en();
      edm::HRTimeType e = edm::hrRealTime();
      std::cout << e - s << std::endl;
    }
  }
  return 0;
}