Jpp
Functions
JMatrix5S.cc File Reference
#include <string>
#include <iostream>
#include <iomanip>
#include "TRandom3.h"
#include "TMatrixTSym.h"
#include "JLang/JException.hh"
#include "JMath/JMatrix5S.hh"
#include "JMath/JMathTestkit.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"
#include "Jeep/JTimer.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program to test inversion of symmetric matrix.

Author
mdejong

Definition in file JMatrix5S.cc.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 23 of file JMatrix5S.cc.

24 {
25  using namespace std;
26  using namespace JPP;
27 
28  double precision;
29  int numberOfEvents;
30  int debug;
31 
32  try {
33 
34  JParser<> zap("Example program to test inversion of symmetric matrix.");
35 
36  zap['e'] = make_field(precision) = 1.0e-6;
37  zap['n'] = make_field(numberOfEvents) = 1000;
38  zap['d'] = make_field(debug) = 3;
39 
40  zap(argc, argv);
41  }
42  catch(const exception &error) {
43  FATAL(error.what() << endl);
44  }
45 
46 
47  ASSERT(numberOfEvents > 0);
48 
49  gRandom->SetSeed(0);
50 
51  JTimer t1("Jpp");
52  JTimer t2("ROOT");
53 
54  for (int i = 0; i != numberOfEvents; ++i) {
55 
56  if (i%100 == 0) { STATUS(setw(8) << i << '\r'); DEBUG(endl); }
57 
58  JMatrix5S A = getRandom<JMatrix5S>();
59 
60  TMatrixTSym<double> R(5);
61 
62  R(0,0) = A.a00; R(0,1) = A.a01; R(0,2) = A.a02; R(0,3) = A.a03; R(0,4) = A.a04;
63  R(1,0) = A.a10; R(1,1) = A.a11; R(1,2) = A.a12; R(1,3) = A.a13; R(1,4) = A.a14;
64  R(2,0) = A.a20; R(2,1) = A.a21; R(2,2) = A.a22; R(2,3) = A.a23; R(2,4) = A.a24;
65  R(3,0) = A.a30; R(3,1) = A.a31; R(3,2) = A.a32; R(3,3) = A.a33; R(3,4) = A.a34;
66  R(4,0) = A.a40; R(4,1) = A.a41; R(4,2) = A.a42; R(4,3) = A.a43; R(4,4) = A.a44;
67 
68 
69  DEBUG("Matrix A" << endl);
70  DEBUG(A << endl);
71 
72  DEBUG("Determinant A " << A.getDeterminant() << endl);
73 
74  try {
75 
76  JMatrix5S B(A);
77 
78  t1.start();
79 
80  B.invert();
81 
82  t1.stop();
83 
84  t2.start();
85 
86  R.Invert();
87 
88  t2.stop();
89 
90  DEBUG("Matrix A^-1" << endl);
91  DEBUG(B << endl);
92 
93  DEBUG("Determinant A^-1 = " << B.getDeterminant() << endl);
94 
95  JMatrix5D C(A * B);
96 
97  DEBUG("Matrix A x A^-1" << endl);
98  DEBUG(C << endl);
99 
100  DEBUG("Determinant (A x A^-1) = " << C.getDeterminant() << endl);
101  DEBUG("Determinant A x Determinant A^-1 = " << A.getDeterminant() * B.getDeterminant() << endl);
102  DEBUG("A x A^-1 = I ? " << C.isIdentity(precision) << endl);
103 
104  if (!C.isIdentity(precision)) {
105  ERROR("Matrix A x A^-1 /= I" << endl);
106  }
107 
108  JMatrix5D D = C - JMatrix5D::getIdentity();
109 
110  DEBUG("Matrix D = C - I" << endl);
111  DEBUG(D << endl);
112 
113  ASSERT (C.isIdentity(precision));
114  }
115  catch (const JException& error) {
116  FATAL(error << endl);
117  }
118  }
119  STATUS(endl);
120 
121  if (numberOfEvents > 0) {
122 
123  const double factor = 1.0; // / numberOfEvents;
124 
125  t1.print(cout, factor, micro_t);
126  t2.print(cout, factor, micro_t);
127  }
128 
129  return 0;
130 }
ASSERT
#define ASSERT(A,...)
Assert macro.
Definition: JMessage.hh:90
JEEP::micro_t
micro
Definition: JScale.hh:29
JPARSER::JParser
Utility class to parse command line options.
Definition: JParser.hh:1493
JTOOLS::C
static const double C
Speed of light in vacuum [m/ns].
Definition: JConstants.hh:22
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
ERROR
#define ERROR(A)
Definition: JMessage.hh:66
debug
int debug
debug level
Definition: JSirene.cc:59
STATUS
#define STATUS(A)
Definition: JMessage.hh:63
make_field
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1954
DEBUG
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
std
Definition: jaanetDictionary.h:36
FATAL
#define FATAL(A)
Definition: JMessage.hh:67