Re: [ROOT] Problem with tree of TMatrixD

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Mar 20 2002 - 22:25:36 MET


Hi David,

You use a TMatrixD object in your top level branch using the default split
mode. A TMatrixD object cannot be split.
Your program will work if you replace the line:
   tree->Branch("data","TVectorD",&data) ;
by
   tree->Branch("data","TVectorD",&data,16000,0) ;

Rene Brun


On Wed, 20 Mar 2002, David Chamont wrote:

> Hi,
> 
> The program below does not work (I use Root 3.03.02)
> More or less the same with TVectorD is working fine.
> Help welcome.
> 
> David C.
> 
> 
> 
> #include <TROOT.h>
> #include <TFile.h>
> #include <TTree.h>
> #include <TMatrixD.h>
> #include <iostream>
> 
> void main()
>  {
>   TROOT rdummy("dummy","dummy") ;
>   TFile * file = 0 ;
>   TTree * tree = 0 ;
>   TMatrixD * data = 0 ;
> 
>   file =  new TFile("dummy.root","recreate") ;
>   tree = new TTree("tree","dummy") ;
>   tree->Branch("data","TVectorD",&data) ;
>   data = new TMatrixD(2,2) ;
>   (*data) = 1 ;
>   tree->Fill() ;
>   data = new TMatrixD(3,3) ;
>   (*data) = 2 ;
>   tree->Fill() ;
>   tree->Write() ;
>   delete data ;
>   data = 0 ;
>   delete file ;
> 
>   file =  new TFile("dummy.root","read") ;
>   tree = (TTree *)file->Get("tree") ;
>   tree->SetBranchAddress("data",&data) ;
>   Int_t nbentries = (Int_t)tree->GetEntries() ;
>   for ( Int_t entry = 0 ; entry < nbentries ; ++entry )
>    {
>     tree->GetEntry(entry) ;
>     Int_t nb = data->GetNrows() ;
>     for ( Int_t i = 0 ; i < nb ; ++i )
>      { cout<<((*data)(i,0))<<' ' ; }
>     cout<<endl ;
>    }
>   delete data ;
>   data = 0 ;
>   delete file ;
> 
>   return 0 ;
>  }
> 
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:46 MET