Hi Mattias,
It is hard to follow what you want to do. You are declaring many times
teh same objects in the loop.
I have simplified your logic in this small test and running example.
To execute it with standard Root, do
Root > gSystem->Load("libPhysics");
Root > .x mattias.C
Rene Brun
void mattias() {
TObjArray* veclist = new TObjArray();
TVector3 vec3;
int events=20;
for (long iev=0;iev<events;iev++) {
veclist->Delete();
int N= gRandom->Gaus(100,20);
for(int i=1; i<=N; i++) {
vec3.SetX(gRandom->Gaus(0,10));
vec3.SetY(gRandom->Gaus(0,10));
vec3.SetZ(gRandom->Gaus(0,100));
Float_t E_part = 120;
vec4 = new TLorentzVector(vec3,E_part);
veclist->Add(vec4);
}
}
}
Mattias Davidsson wrote:
>
> 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