Arrays of TMatrixD,TVectorD

From: Francesco Terranova <>
Date: Fri, 11 Mar 2005 10:38:24 +0100 (MET)

Dear colleagues,
 in these days I'm using quite extensively the linear algebra package of ROOT and, in particular, I often need to handle with arrays of TMatrixD or TVectorD objects. To do this (see the short example class definition below) I defined an array of TMatrixD/TVectorD pointers and I manipulate the matrices through them (I'm using version 4.02/00 on a Red Hat 7.3 with gcc 2.96). Everything WORKS WELL with CINT but

  1. when I try to compile via aclic (.L manymatrices.C++), it complains because it doesn't like things such "m_tmpPtr(0,0)=1;" i.e. element assignment via reference to pointer (see the error message below)
  2. even with CINT, expressions like (RcurPtr[2])(0,0)=1 are not accepted and I'm forced to create a temporary pointer equal to RcurPtr[2] (m_tmpPtr) and use it to assign elements (m_tmpPtr(0,0)=1)

My conclusion is that my style of programming is wrong and it must be a neater way to get the same result (or at least to avoid the CINT shortcut I'm using so to get the code compiled). Can you help me?  Thanks a lot,


#define nsensor 12
#include "Riostream.h"
#include "TMatrixD.h"
#include "TVectorD.h"
#include "TDecompLU.h"
#include "TDecompSVD.h"

class ManyMatrix{


  TMatrixD* RcurPtr[nsensor];
  TMatrixD* m_tmpPtr;
  TVectorD* r0curPtr[nsensor];
  TVectorD* v_tmpPtr;


// Constructor

  for (Int_t i=0; i<nsensor; i++){
    RcurPtr[i] = new TMatrixD(3,3);

    m_tmpPtr(0,0)=1; m_tmpPtr(1,1)=1; m_tmpPtr(2,2)=1;

  for (Int_t i=0; i<nsensor; i++){
    r0curPtr[i] = new TVectorD(3);



Info in <TUnixSystem::ACLiC>: creating shared library /home/terranov/opera/muscatt/./ In file included from /home/terranov/opera/muscatt/file1GEi2d.h:32,

                 from /home/terranov/opera/muscatt/./file1GEi2d.cxx:16:
/home/terranov/opera/muscatt/./manymatrices.C: In method `ManyMatrix::ManyMatrix ()':
/home/terranov/opera/muscatt/./manymatrices.C:28: `this->ManyMatrix::m_tmpPtr' cannot be used as a function /home/terranov/opera/muscatt/./manymatrices.C:28: `this->ManyMatrix::m_tmpPtr' cannot be used as a function /home/terranov/opera/muscatt/./manymatrices.C:28: `this->ManyMatrix::m_tmpPtr' cannot be used as a function /home/terranov/opera/muscatt/./manymatrices.C:34: `this->ManyMatrix::v_tmpPtr' cannot be used as a function g++: /home/terranov/opera/muscatt/./file1GEi2d.o: No such file or directory Error in <ACLiC>: Compilation failed!
Received on Fri Mar 11 2005 - 10:38:34 MET

This archive was generated by hypermail 2.2.0 : Tue Jan 02 2007 - 14:45:05 MET