RE: [ROOT] Strange behavior with TMatrixD

From: Philippe Canal (pcanal@fnal.gov)
Date: Tue Mar 23 2004 - 21:46:15 MET


Hi,

When mat is TMatrixD* you have to use something like:

   (*mat)(row,col)

Cheers,
Philippe.

-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Nicolas Arnaud
Sent: Tuesday, March 23, 2004 12:53 PM
To: roottalk@pcroot.cern.ch
Subject: [ROOT] Strange behavior with TMatrixD



Hi rooters,

I have a problem with an object of type TMatrixD. I could isolate it and so
wrote a short
code -- testMatrixD.cc, see below -- to reproduce the problem.

In short: the instruction

      mat( row, col ) = 10 * row + col;

is OK when mat is a TMatrixD, but not when mat is a TMatrixD*.

Indeed:

// TMatrixD case
----------------

.x testMatrixD.cc++

I get the normal root output:

(int)0

// TMatrixD* case
-----------------

.x testMatrixD.cc++

I have a compilation error:

/home/narnaud/BaBar/Root/testMatrixD.cc: In function `int testMatrixD()':
/home/narnaud/BaBar/Root/testMatrixD.cc:32: `mat' cannot be used as a
function

On the other hand, when I simply run the code interactively with

.x testMatrixD.cc

everything works well in both cases!

Any idea on what's wrong with my file?

Thanks in advance,

Nicolas

PS I'm using ROOT 3.10/02 on linux.

code testMatrixD.cc
-------------------

#ifndef __CINT__

#include <TROOT.h>
#include <TSystem.h>

#include <stdlib.h>
#include <stdio.h>
#include <Riostream.h>

int testMatrixD();

int main()
{
  return testMatrixD();
}

#endif

#include <TMatrixD.h>

int testMatrixD()
{
  // matrix
  //TMatrixD mat( 2, 2 );

  // pointer on a matrix
  TMatrixD *mat;
  mat = new TMatrixD( 2, 2 );

  for( int row = 0 ; row < 2 ; row ++ ) {
    for( int col = 0 ; col < 2 ; col ++ ) {
      mat( row, col ) = 10 * row + col;
    }
  }

  return( 0 );
}



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:06 MET