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
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:26:18 MET