TClonesArray & TIter

From: Paul M. Eugenio (eugenio@megux3.phys.cmu.edu)
Date: Wed Nov 18 1998 - 21:17:12 MET


Dear Rooter,

I'm having trouble reading and iterating over a TClonesArray. I have 
a program that writes events to a root file. Each event contains 3
objects  where on one object contains a TClonesArray of a fourth 
object (all objects inherit from TOject). I believe that this program
is working. 

Using a macro, I read these events in CINT. But I cannot access the first
event's TClonesArray. If I do not skip it, the macro dies with this error:

Error: illegal pointer to class object particle 0x0 358  FILE:/tmp_mnt/home/halld/source/root/./macro2.C LINE:71
*** Interpreter error recovered ***

Below is a watered down version of my macro that doesworks. Maybe I'm not
iterating properly or I have missed something important. 

Any help is greatly appreciated.

						Paul Eugenio
{
gROOT->Reset();
gSystem.Load("libTMCFast.so");

TFile f("Event.rdt");
TTree *tree = (TTree*)f.Get("T");
TBranch *b1 = tree->GetBranch("hepevt");
TBranch *b2 = tree->GetBranch("trace");
TBranch *b3 = tree->GetBranch("offtrk");

TMCFastHepEvt *hepevt;
TMCFastTOF *trace; 
TMCFastOfflineTrack *offtrk;  
hepevt = new TMCFastHepEvt();
trace = new TMCFastTOF();
offtrk = new TMCFastOfflineTrack();

b1->SetAddress(&hepevt);
b2->SetAddress(&trace);
b3->SetAddress(&offtrk);
TH1F *h1 = new TH1F("h1", "x momentum",100,0.0,1.0);
TCanvas *c1;
c1 = new TCanvas("c1","MCFast histos",200,10,700,900);

Int_t nentries = (Int_t)tree->GetEntries();
for (Int_t ev = 0; ev < nentries; ev++) {
  tree->GetEvent(ev);        //read  event in memory
  
  TIter next(hepevt->GetHepParticles());
  TMCFastHepParticle *particle = (TMCFastHepParticle *)next();
  
  if(ev != 0){ // SKIP THIS EVENT OR IT DIES!!!
    h1->Fill(particle->GetPx());
  }
  hepevt->Clear();
  trace->Clear();
  offtrk->Clear();
}
h1->Draw();
}





-- 
Paul M. Eugenio
Dept. of Physics
Carnegie Mellon University
(412) 268 6949
eugenio@ernest.phys.cmu.edu


                _____________________________________________________
               / The scholar should know; one builds science with    \
        o O 0 / the facts just like a house can be built of stones;   \
       o     | but an accumulation of facts is not a science just like |
  `\|||/      \           that a pile of stones is not a house.       /
   (o o)       \_____________________________________________________/
ooO_(_)_Ooo___________________________________________Henri Poincare'_
_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|____
__|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_
_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|____



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