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