Re: TChain

Rene Brun (Rene.Brun@cern.ch)
Thu, 03 Sep 1998 15:32:22 +0200


Sean,
What you do seems correct. I will need more info to investigate.
Could you send me a simple test (like below) with your class
reduced to the strict minimum such that I can easily reproduce
your problem. Send me also the result of your second test
where you add the statement
event->Dump();
just before the statement
event->Clear();

Note that I am currently attending CHEP98 and cannot debug anything
before middle of next week.

Rene Brun

Sean Kelly wrote:
>
> Hi Rooters,
>
> I have written a short program to excercise the TChain class. Can anyone
> see where I am in error. I have included below two short programs, and
> their output. One reads a tree, the other, a chain containing the same
> file and no other. The latter generates a segmentation violation.
>
> thanks
>
> Sean Kelly
>
> This code generates the expected output
>
> {
> gROOT->Reset();
>
> TFile f("run2889a.root");
> TTree *e896 = (TTree*)f.Get("e896");
>
> Event *event = new Event();
> Int_t nevent;
> Int_t nb = 0;
>
> e896->SetBranchAddress("event", &event);
> nevent = e896->GetEntries();
>
> for(Int_t i=0;i<10;i++) {
> nb += e896->GetEvent(i);
> printf("Run = %i\t Event = %i\tTracks = %i\tTops = %i\tHyps = %i\n",
> event->evtHdr->run, event->evtHdr->event, event->nTrk,
> event->nTop, event->nPhy);
> event->Clear();
> }
> Float_t mbytes = 0.000001*nb;
> printf("%d events and %d bytes read.\n",nevent,nb);
> f.Close();
> }
>
> root [3] .x nochain.C
> Run = 2889 Event = 8 Tracks = 5 Tops = 1 Hyps = 0
> Run = 2889 Event = 944 Tracks = 9 Tops = 1 Hyps = 0
> Run = 2889 Event = 2442 Tracks = 6 Tops = 1 Hyps = 0
> Run = 2889 Event = 2794 Tracks = 10 Tops = 1 Hyps = 0
> Run = 2889 Event = 4480 Tracks = 11 Tops = 1 Hyps = 0
> Run = 2889 Event = 5302 Tracks = 13 Tops = 1 Hyps = 0
> Run = 2889 Event = 8194 Tracks = 6 Tops = 1 Hyps = 0
> Run = 2889 Event = 10382 Tracks = 5 Tops = 1 Hyps = 0
> Run = 2889 Event = 11678 Tracks = 9 Tops = 1 Hyps = 0
> Run = 2889 Event = 12348 Tracks = 4 Tops = 1 Hyps = 0
> 287 events and 6960 bytes read.
>
> The equivalent code with a chain containing a the same file and no others
> causes a segmentation violation.
>
> {
> gROOT->Reset();
>
> TChain chain("e896");
> chain.Add("run2889a.root");
>
> Event *event = new Event();
> Int_t nevent;
> Int_t nb = 0;
>
> chain->SetBranchAddress("event", &event);
> nevent = chain->GetEntries();
>
> for (Int_t i=0;i<10;i++) {
> nb += chain->GetEvent(i,1);
> printf("Run = %i\t Event = %i\tTracks = %i\tTops = %i\tHyps = %i\n",
> event->evtHdr->run, event->evtHdr->event, event->nTrk,
> event->nTop, event->nPhy);
> event->Clear();
> }
> Float_t mbytes = 0.000001*nb;
> printf("%d events and %d bytes read.\n",nevent,nb);
> }
>
> root [0] .x load.C
> root [1] .x chain.C
> Run = 2889 Event = 8 Tracks = 5 Tops = 1 Hyps = 0
>
> *** Break *** segmentation violation