Reading event from a file

Laurent Mirabito (mirabito@in2p3.fr)
Fri, 21 Feb 1997 14:33:45 +0100 (MET)


Hello all,

I used ROOT to store events on file. Basically the structure is the
following :

a TEvent contains 2 TLists :

- 1 Liste of Vertex
- 1 Liste of Particle.

I have no problems to build and store my event from Zebra to root files
but when I try to read them the memory seems to be not cleared after
each event and I crash. Here is the code of reading ( I checked that
the " delete " of each event is working well - it deletes all members
of the lists -) :

#include <stdlib.h>
#include <iostream.h>
#include "math.h"
#include "TROOT.h"
#include "TFile.h"
#include "TList.h"
#include "TH1.h"

#include "TKey.h"
#include "TDirectory.h"
#include "Rtypes.h"

#include "TVtx.h"
#include "TVecp.h"
#include "TTrac.h"
#include "THaid.h"
#include "TDedx.h"
#include "TMuid.h"
#include "TElid.h"
#include "TDpar.h"
#include "TEvent.h"

extern TTrac* GetTTrac(const int);

extern Bool_t IsAGoodTrack(TDpar *);
TFile *fni;
TFile *fnh;
TH1F *hnp,*het,*hip,*hmds;
void analyse(TEvent *ev);

//______________________________________________________________________________
main(int argc, char **argv)
{
// Create a new ROOT binary machine independent file.
// Note that this file may contain any kind of ROOT objects, histograms,
// pictures, graphics objects, detector geometries, tracks, events, etc..
// This file is now becoming the current directory.
TROOT simple("simple","Histograms and trees");
Int_t ier;
float bt,bf;
hnp = new TH1F("hnp1","Number of particle",70,0,70);
het = new TH1F("het1","Total energy",200,0,400);
hip = new TH1F("hip","paramtre d impact",200,-3.,3.);
hmds = new TH1F("hmds","Expected mass of Ds ",50,1.7,2.2);
fnh = new TFile("histo.root","RECREATE");
Int_t nev=0;
TFile evf("/afs/in2p3.fr/group/delphi/mirabito/Event.root","OLD");
evf.cd();
TList *evlist = gDirectory->GetListOfKeys();
TKey *key;
cout << "test " << evlist->GetSize() << endl;
for (int i=0;i<evlist->GetSize() ;i++)
{
key = (TKey*) evlist->At(i);
TEvent* ev = ( TEvent *) key->Read();
// cout << "toto " << ev->GetRun() << " " << ev->GetEvt() << endl;
nev++;
if (nev%100 == 0)
{
printf("%d Run %d Event %d \n",nev,ev->GetRun(),ev->GetEvt());
printf("%f %f %f \n",
ev->GetBeamoy()[0],ev->GetBeamoy()[1],ev->GetBeamoy()[2]);
}
// analyse(ev);
delete ev;
}
evf.Close();
}
fnh->cd();
hnp->Write();
het->Write();
hip->Write();
hmds->Write();

fnh->Close();
}

//--------------------------------------------------

Any ideas or solution ?
Best regards
Laurent Mirabito