Re: [ROOT] Error reading Trees from a Chain

From: Debbie Bard (dbard@ph.ed.ac.uk)
Date: Wed May 14 2003 - 23:48:44 MEST


Hi Rene,
Thanks for the help! It works perfectly now.

I've been puzzling over this for ages, and of course it's something so
simple as changing the order of my code!
Thankyou!

Debbie

Hi Surik, 
i should have sent more code to make myself clear, I'd set the 
branch addresses earlier on in the program. But thanks for the suggestion!


 
Wed, 14 May 2003, Rene Brun 
wrote:

> Hi Deborah,
> 
> In your first program creating the red Tree, you should
>   -create the output file z
>   -create the Tree red
>   -loop on entries of the input Tree
>   -red->Fill(); as you do now
>   -red->Write();
> 
> Rene Brun
> 
> On Wed, 14 May 
> 2003, Deborah Joanne Bard wrote:
> 
> > 
> > Hello Root,
> > I'm using Red Hat Linux 7.3 and Root version 3.03/09 (the best that's
> > available at babar!).
> > I've got a problem reading a Tree after it's been put into a TChain. I
> > have one program that takes existing .root files, loops over them to make
> > a selection cut, then writes the outcome as more .root files. I can look
> > at these files all I want with TBrowser, all the data is there. My problem
> > comes when I try to use it as part of another program to fit the results.
> > In this second program I chain together the files, but when I try to read
> > what's in the chain I get errors in TFile::ReadBuffer. This doesn't happen
> > when I run the fitting program over the original uncut files. Is there
> > some 'special' way of writing the file I should have thought of? I've
> > checked the file permissions, tried on 3 different machines and I'm
> > running out of ideas.............
> > First program:
> > 
> >  Int_t nentries = Int_t(fChain->GetEntries());
> >    for (Int_t i1=0; i1<nentries;i1++)
> >      {
> >       fChain->GetEntry(i1);
> >       if( iType==trueiType  && fabs(mKstar-trueMassHad)<.05)
> > 	 {red->Fill();}
> >      }
> >  TFile *z= new
> > TFile("/afs/slac.stanford.edu/g/babar/work/d/djbard/level2/cnc.root",
> > "RECREATE", "output from BestCand");
> >    z.cd();
> >    red->Write("red");
> > 
> > 
> > 
> > Second program:
> > 
> >   TChain* signalCH = new TChain("red");
> > 
> > signalCH.Add("/afs/slac.stanford.edu/g/babar/work/d/djbard/level2/cnc.root",
> > 0);
> > 
> > signalCH.Add("/afs/slac.stanford.edu/g/babar/work/d/djbard/level2/ncc.root",
> > 0);
> > 
> >  TTree *signalCHTree = signalCH;
> >  char *massbin[] = new char;
> >  *massbin[]= "mKstar>=1.0 && mKstar<1.1";
> >  TTree *signalCHTree = signalCH;
> >  signalCHTree = signalCH->CopyTree(massbin[]);
> > 
> > this results in:
> > 
> > Error in <TFile::ReadBuffer>: error reading all requested bytes from file
> > /afs/slac.stanford.edu/g/babar/work/d/djbard/level2/cnc.root, got 0 of
> > 20629
> > Error in <TFile::ReadBuffer>: error reading all requested bytes from file
> > /afs/slac.stanford.edu/g/babar/work/d/djbard/level2/cnc.root, got 0 of
> > 20629
> > Error in <TFile::ReadBuffer>: error reading all requested bytes from file
> > /afs/slac.stanford.edu/g/babar/work/d/djbard/level2/cnc.root, got 0 of
> > 20629
> > etc etc
> > 
> > There was a similar question in RooTalk a while ago that suggested using:
> >  signalCH->GetEntry(0);
> > TTree *signalCHTree = (TTree*)signalCH->GetTree()->CloneTree(0);
> > but that gives exactly the same error.
> > 
> > Any ideas?
> > Thanking you in advance,
> > Debbie
> > 
> 

-- 
---------------------
Debbie Bard
Particle Physics (Experiment)
Room 5301
JCMB
Kings Buildings
Edinburgh University
EH9 3JZ
+44 131 650 5307



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:11 MET