Reading event from a file

From: Laurent Mirabito (mirabito@in2p3.fr)
Date: Fri Feb 21 1997 - 14:33:45 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



 



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