other question TTree and TClonesArray

Dirk Meier (Dirk.Meier@cern.ch)
Sun, 1 Mar 1998 22:37:00 +0100 (MET)


Hi

I went to the famous eventa.cxx example and try to extract
the data from the TClonesArray of Track.

Therefore I modified eventa.cxx to

//*CMZ : 1.00/09 24/04/97 11.01.18 by Rene Brun
//*-- Author : Rene Brun 10/01/97
{
// This macro read all events generated by the test program Event
// provided in $ROOTSYS/test.
//
// NOTE: Before executing this macro, you must have executed the macro
eventload.
//
// This small program simply counts the number of bytes read and dump
// the first 3 events.

gROOT->Reset();

// Connect file generated in $ROOTSYS/test
TFile f("Event.root");

// Read Tree named "T" in memory. Tree pointer is assigned the same name
TTree *T = (TTree*)f.Get("T");

// Create a timer object to benchmark this loop
TStopwatch timer;
timer.Start();

// Start main loop on all events
Event *event = new Event();

TClonesArray *tracks = event->GetTracks();

//TBranch *branch = T->GetBranch("event");
//branch->SetAddress(&event);

T->SetBranchAddress("event", &event);
Int_t nevent = T->GetEntries();
Int_t nb = 0;
Float_t ran; // <--- declare a variable for some track value
for (Int_t i=0;i<nevent;i++) {
if(i%50 == 0) {
printf("Event:%d ",i);
ran = tracks.GetRandom(); // <-- !!!! here I do not know how to
//retrieve data from TClonesArray!!!!!!!!!
printf("has %d tracks at T=%f with value %f\n",
event->fNtrack, event->fTemperature, ran);
// retrieving event data like e.g. fNtrack or fTemperature works
// how is it possible to access the data in the TClonesArray????
}
nb += T->GetEvent(i); //read complete event in
memory
if (i < 3) event->Dump(); //dump the first 3 events
event->Clear(); //clear tracks array
}

// Stop timer and print results
timer.Stop();
Float_t mbytes = 0.000001*nb;
Double_t rtime = timer.RealTime();
Double_t ctime = timer.CpuTime();
printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime);
printf("You read %f Mbytes/Realtime seconds\n",mbytes/rtime);
printf("You read %f Mbytes/Cputime seconds\n",mbytes/ctime);
printf("%d events and %d bytes read.\n",nevent,nb);

f.Close();
}

Could you give me an example of how to retrieve the data from the
TClonesArray (this would likely solve the question I had in the
last mail).

merci bien
Dirk