Re: TChain

From: Rene Brun (Rene.Brun@cern.ch)
Date: Thu Sep 03 1998 - 15:32:22 MEST


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



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:37 MET