problems with deleting TObjArray

From: Mattias Davidsson (mattias@quark.lu.se)
Date: Tue Mar 07 2000 - 11:46:27 MET


Hi!

I have a pointer to a TObjArray for a list of particles (4 vectors)

The code can be found below. Now the problem is that I can in no way
delete the TObjArray inside the main event loop so as to use new
particles for every event (sounds logical he?)

The routine main.cc you can see in attachement. I'm quite new to this
but can not understand why inserting the veclist->Delete; (or Clear)
inside  the main event loop does not work.

cheers!

/mattias



--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mattias Davidsson,   http://www.quark.lu.se/~mattias
 +46 (0)46 222 76 83
Department of elementary particle physics
Box 118 SE-221 00
Lund, Sweden
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




#include <stdlib.h>
#include <iostream>
#include <cmath>
#include <fstream>
#include <list>
#include <string>
#include <vector>
#include "Pythia.h"
#include "LorentzVector.h"
#include "JetFindDict.h"

//
//  This program produces DIS events from pythia, adds the stable particles  
//  to a TObjArray (veclist). The aim is then to feed these 4-vectors
//  to the jetfinder package. See bottom for troubles.
//


TROOT demo("demo","my first Root program");


int main() {

    const char* frame="CMS";
    int iframe=3;
    const char* beam="gamma/e+";
    int ibeam=8;
    const char* target="p+";
    int itarget=2;
    double E=297.2E0;

    double y_cut=0.1E0;

    // Uncomment below for e+ e-
   //const char* frame="CMS";
   //int iframe=3;
   //const char* beam="e+";
   //int ibeam=2;
   //const char* target="e-";
   //int itarget=2;
   //double E=91.2E0;

   //double y_cut=0.E0;



  //  Choose jet finding scheme. Jade with y_cut
  pydat1_.mstu[46-1]=4;      // MSTU(46)=4
  pydat1_.paru[45-1]=y_cut; // PARU(45)=y_cut

  //  Disable preclustering and don't ignore neutrinos
  pydat1_.paru[43-1]=0.E0;  // PARU(43)=0
  pydat1_.mstu[41-1]=1;     // MSTU(41)=1


  // Setup ROOT jet finder
  
  JadeJetFinder  *jetf = new JadeJetFinder(0.0005);
  //DurhamJetFinder   *jetf = new DurhamJetFinder(0.004); // Durham algorithm
  //  IktJetFinder   *jetf = new IktJetFinder(0.01,'I'); // Inclusive kt algorithm


  // Select DIS process in PYTHIA.
  pysubs_.msel=1;       // MSEL=0
  pysubs_.msub[1-1]=1;  // MSUB(1)=1
  
  //Initialize Pythia
  pyinit_(frame,beam,target,&E,iframe,ibeam,itarget);
  
  
  // Declare 4vector list a'la ROOT
  TObjArray* veclist = new TObjArray();
  if (veclist) veclist->Delete();  
    


  // Main event loop
  int events=20;
  for (long iev=0;iev<events;iev++){
    
    //  if (veclist) veclist->Clear();  
    //Declare the 4 vector a'la ROOT
    TLorentzVector* vec4 = new TLorentzVector();
    if(vec4) delete vec4;
    
    // Declare a 3 vector a'la ROOT
    TVector3* vec3  = new TVector3();
    if(vec3) delete vec3;
    
    
    // why do I get a segmentation fault when declaring these here???
    //      TObjArray* veclist = new TObjArray();
    //      if(veclist) veclist->Delete();
    
    //      TVector3* vec3  = new TVector3();
    //      TLorentzVector* vec4 = new TLorentzVector();
    //      if(vec3) delete vec3;
    //      if(vec4) delete vec4;
    
    Float_t Pvec3[3];
    
    pyevnt_();
    long nlist=2;
    if (iev < 3) pylist_(&nlist);
    
    int N=pyjets_.n;
    for(int i=1; i<=N; i++) {
      if (pyjets_.k[1-1][i-1]==1 && pyjets_.k[2-1][i-1]!=22) {  // Stable particle (not photon)
	if (pyjets_.k[2-1][i-1]!=-11 && pyjets_.k[2-1][i-1]!=2212) { // not the electron or proton
	  
	  Pvec3[0] = pyjets_.p[1-1][i-1];
	  Pvec3[0] = pyjets_.p[2-1][i-1];
	  Pvec3[0] = pyjets_.p[3-1][i-1];
	  Float_t  E_part = pyjets_.p[4-1][i-1];
	  vec3 = new TVector3(Pvec3);
	  vec4 = new TLorentzVector(*vec3,E_part);
	  veclist->Add(vec4);
	  delete vec3;	
	  
	}
      }
    }
    // Perform Jet finding
    jetf->setEvent(veclist);
    jetf->setYCut(0.0003);
    jetf->doFindJets();
    
    std::cout << "No'f jets: " << jetf->njets() << std::endl;
    
    //int Njet=0;
    //pyclus_(&Njet);
    //std::cout << "Pythia: " << Njet << std::endl;
    
    // print jet quantities
    
    //delete veclist;    
    // if (veclist) {veclist->Delete();
    //delete veclist;}
    //    event->Clear();
    //  event->Clear();
    std::cout << "even #: " << iev << std::endl;
  }
}



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:21 MET