# Matrix utility classes and cint

Hi rootists!

Having to do a bit linear algebra for an analysis, I have been playing around with the matrix and vector classes in root, namely TMatrixD and TVectorD. After going through the tutorial macro solveLinear.C, I got stuck with a problem when using the Matrix utility classes, e.g. TMatrixDRow, and cint. To demonstrate it, I wrote the following small macro:

``````/*
File learnit.C
*/
#include <TDecompSVD>
#include <TMatrixD>
#include <TVectorD>

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int learnit (void) {
//gROOT->Reset ();

//  Define a vector first and print it
Double_t data [] = {4, 2, 1, 5};
TVectorD v (4, data);
v.Print ();

// Declare a Matrix and
// fill it using TMatrixDColumn
TMatrixD B (1, 4);
TMatrixDRow (B, 0) = v;
B.Print ();

return 0;
}

int main (void) {
return learnit ();
}``````

If I compile the above and run it, I get the expected printout:
[ul]
levent@alsant ~/my_root/Matrixtest \$ ./learnit

Vector (4) is as follows

`````` |        1  |
``````

0 |4
1 |2
2 |1
3 |5

1x4 matrix is as follows

`````` |        0  |        1  |        2  |        3  |
``````

0 | 4 2 1 5
[/ul]
However, if I ran it with cint, the matrix row does not get filled with the vector values:
[ul]
levent@alsant ~/my_root/Matrixtest \$ root -l ./learnit.C
root 
Processing ./learnit.C…

Vector (4) is as follows

`````` |        1  |
``````

0 |4
1 |2
2 |1
3 |5

1x4 matrix is as follows

`````` |        0  |        1  |        2  |        3  |
``````

0 | 0 0 0 0

(int)0
root 
[/ul]
I appreciate any help or hints. Thanks!
/Levent

Hi,

CINT has problems with this expression:
TMatrixDRow (B, 0) = v;
Creating an (explicit) temporary object of type TMatrixDRow might help - but even then CINT might decide to not modify B… Or you just compile your code with “.x learnit.C+”

Cheers, Axel.