Hi Pascal, What is the problem with your example? For me it works without any changes, although I suggest to modify your code as shown in the attachements. In particular, it does not make sense to use the split mode for an histogram. Rene Brun Pascal PERRODO wrote: > > Hi rooters, > > I try to create and read Trees containing not only Int_t and Float_t, > but also objects (TH1F). > I have tried to follow the recipies in the documentation (p202, Adding a > TBranch to Hold an Object). > > I have written a simple example in the directory > /afs/cern.ch/user/p/pperrodo/public/tree/ > tree-read.C : creates the tree tree.root and seems to work > tree-write.C : reads the tree and failed. Could you help me to read such > a tree. > > I use the Version 3.05/05 8 May 2003 on redhat. > > Many thanks in advance. > Regards. > Pascal Perrodo. > > // create a tree with TH1F as variable // P. Perrodo // 28/09/03 { TH1F h0("h0","h0",100,0,100); TFile fout("tree.root","RECREATE"); TTree tr1("tr1","tr1"); Int_t i1; Float_t x1; TH1F *h=0; //<======== tr1.Branch("i1",&i1,"i1/I"); tr1.Branch("x1",&x1,"x1/F"); tr1.Branch("hist", "TH1F", &h, 32000, 0); //<======== for ( Int_t n=0 ; n<100 ; n++ ){ i1 = n; x1 = n*n; h0.Reset(); h0.Fill(n); h = (TH1F*) h0.Clone(); //<======== tr1.Fill(); delete h; //<======== } tr1.Print(); fout.Write(); } { TFile f("tree.root"); TTree *tr = (TTree*) f.Get("tr1"); Int_t i1; Float_t x1; TH1F *h=0; //<======== //h = new TH1F(); //<======== tr->SetBranchAddress("i1",&i1); tr->SetBranchAddress("x1",&x1); TBranch *bh0 = tr->GetBranch("hist"); bh0->SetAddress(&h); TProfile hd1("hd1","hd1",100,0,100); Int_t nentries = tr->GetEntries(); Int_t nbytes = 0; for (Int_t i=0; i<nentries;i++) { nbytes += tr->GetEntry(i); hd1.Fill(i1,x1); } hd1.Draw(); //getchar(); }
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:15 MET