Re: [ROOT] In TPythia6 TClonesArray not well delete

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue Jul 11 2000 - 17:30:27 MEST


Hi Maria,
I have made several changes to your program. See the new file in attachment.
Check carefully every line !

You should not create the TClonesArray of ParticleList. This array
is automatically created by the TPythia6 constructor.

Rene Brun


Maria Jesus MORA wrote:
> 
> Hi ,
> 
>     I am using TPythia6 to control the decay of particles. For each
> event I make decay one particle and I retrieve the information with the
> function ImportParticles. This ImportParticle give me a list
> "TClonesArray" of particles "TMCParticle". Of course, at the end of the
> event I empty this list with the function Delete. But sometimes the
> particles are not remove and I find in a new event  a old particle....
> 
> as exemple...
> in event 20843 we find the decay eta (221)-> gamma (22) + gamma (22)+
> muon(13) !!!
> but in fact this muon comes fron the event 20842  when eta (221) ->
> muon(13) + antimuon (-13)+ gamma(22)
> 
> event 20842
> (11, 221) <-  0, =>[  2,  4]:  p=(  4.443,  0.000,   -2.227) ; E=
> 5.000 ; m=  0.547 ; V=(0,0,0); t=0, tau=0
> ( 1,  22) <-  1, =>[  0,  0]:  p=(  0.793, -0.098,   -0.389) ; E=
> 0.889 ; m=  0.000 ; V=(0,0,0); t=0, tau=0
> ( 1, -13) <-  1, =>[  0,  0]:  p=(  3.053,  0.180,   -1.446) ; E=
> 3.385 ; m=  0.106 ; V=(0,0,0); t=0, tau=0
> ( 1,  13) <-  1, =>[  0,  0]:  p=(  0.596, -0.082,   -0.392) ; E=
> 0.726 ; m=  0.106 ; V=(0,0,0); t=0, tau=0
> ( 1,  22) <-  2, =>[  0,  0]:  p=(  0.962, -0.003,   -0.605) ; E=
> 1.137 ; m=  0.000 ; V=(0.000730588,1.12372e-05,-0.000403107);
> t=0.000836193, tau=0
> 20843
> (11, 221) <-  0, =>[  2,  3]:  p=(  4.443,  0.000,   -2.227) ; E=
> 5.000 ; m=  0.547 ; V=(0,0,0); t=0, tau=0
> ( 1,  22) <-  1, =>[  0,  0]:  p=(  3.982, -0.130,   -2.103) ; E=
> 4.505 ; m=  0.000 ; V=(0,0,0); t=0, tau=0
> ( 1,  22) <-  1, =>[  0,  0]:  p=(  0.461,  0.130,   -0.123) ; E=
> 0.495 ; m=  0.000 ; V=(0,0,0); t=0, tau=0
> ( 1,  13) <-  1, =>[  0,  0]:  p=(  0.596, -0.082,   -0.392) ; E=
> 0.726 ; m=  0.106 ; V=(0,0,0); t=0, tau=0
> 
> I think that it is a TPhythia6 problem beacause if I create a new
> TPythia6 object in each event, the problem with the old particles in new
> event is still there. May be i'm doing something wrong....Do I need to
> do some special thing to "reset" the pythia events?
> I send my main program. I run ROOT Version   2.23/12 in Linux
> Thank you in advance,
> 
> Maria MORA
> 
> //__________________________________________________________________________---
> 
> //
> #ifndef __CINT__
> #include "TROOT.h"
> #include "TFile.h"
> #include "TDirectory.h"
> #include "TPythia6.h"
> #include "TClonesArray.h"
> #include "TMCParticle.h"
> #include "TParticle.h"
> #include "TMath.h"
> #include "TStopwatch.h"
> #include "TRandom.h"
> #include <iostream.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <math.h>
> #include <ctype.h>
> 
> extern "C" void py1ent_(Int_t&, Int_t&, Double_t&, Double_t&,
> Double_t&);
> extern void InitGui(); // loads the device dependent graphics system
> VoidFuncPtr_t initfuncs[] = { InitGui, 0 };
> 
> TRandom Random01;
> ///////////////////////////////////////////////////////////////////////////////////////////////
> 
> void DecayParticle(TPythia6 *pythia, Int_t &idpart, Double_t &mom,
> Double_t &theta,Double_t &phi)
> {
>   Int_t temp = 0;
>   py1ent_(temp, idpart, mom, theta, phi);
> }
> ///////////////////////////////////////////////////////////////////////////////////////////
> 
> int main(int argc, char *argv[])
> {
>   TROOT root("pythia simul","PITHIA/SIMULATION", initfuncs);
> #else
> {
> #endif
>    TPythia6 *pitia = new TPythia6() ;
>    TClonesArray * ParticleList = new TClonesArray() ;
>    TMCParticle *particle = new TMCParticle() ;
> 
>   // Meson definition : identify number and mass(GeV)
>   Int_t IdEta     = 221 ;   Float_t MassEta     = 0.5473;
> 
>   // counter definition
>   Int_t i, cpar;
>   Int_t Entries, IdParticle ;
> 
> // Event Loop
>   for( i = 0; i<=50000; i++)
>   {
>     DecayParticle(pitia, IdEta, 5., 90., 0.) ;
>     ParticleList = (TClonesArray *)pitia->ImportParticles() ;
>     Entries = ParticleList->GetEntries() ;
> 
> // Loop in generated and decay particles
>    for(cpar=1; cpar<Entries; cpar++)
>     {
>       particle = (TMCParticle *) ParticleList->At(cpar) ;
>       IdParticle = particle->GetKF() ;
> 
>       if(IdParticle == 13) // muon
>       {
>  cout<<i <<endl;
>  ParticleList->ls() ;
>       }
>     }  // end of Loop in generated and decay particles
> 
>     ParticleList->Delete() ;
> 
>   }// End in Event Loop
> 
>     return 1;
> }

#include "TROOT.h"
#include "TFile.h"
#include "TDirectory.h"
#include "TPythia6.h"
#include "TClonesArray.h"
#include "TMCParticle.h"
#include "TParticle.h"
#include "TMath.h"
#include "TStopwatch.h"
#include "TRandom.h"
#include "TSystem.h"
#include "iostream.h"

extern "C" void py1ent_(Int_t&, Int_t&, Double_t&, Double_t&,Double_t&);


TRandom Random01;
///////////////////////////////////////////////////////////////////////////////////////////////

void DecayParticle(TPythia6 *pythia, Int_t idpart, Double_t mom,Double_t theta,Double_t phi)
{
  Int_t temp = 0;
  py1ent_(temp, idpart, mom, theta, phi);
}
///////////////////////////////////////////////////////////////////////////////////////////

int main(int argc, char *argv[])
{
  TROOT root("pythia simul","PITHIA/SIMULATION");
   
   TPythia6 *pitia = new TPythia6() ;
   TClonesArray *ParticleList;
   TMCParticle *particle = new TMCParticle() ;

  // Meson definition : identify number and mass(GeV)
  Int_t IdEta      = 221 ;
  Float_t MassEta  = 0.5473; //unused variable

  // counter definition
  Int_t i, cpar;
  Int_t Entries, IdParticle ;


// Event Loop
  for( i = 0; i<=50000; i++)
  {
    DecayParticle(pitia, IdEta, 5., 90., 0.) ;
    ParticleList = (TClonesArray *)pitia->ImportParticles() ;
    Entries = ParticleList->GetEntries() ;

// Loop in generated and decay particles
   for(cpar=0; cpar<Entries; cpar++)
    {
      particle = (TMCParticle *) ParticleList->At(cpar) ;
      IdParticle = particle->GetKF() ;

      if(IdParticle == 13) // muon
      {
 cout<<i <<endl;
 ParticleList->ls() ;
      }
    }  // end of Loop in generated and decay particles

    ParticleList->Clear() ;

  }// End in Event Loop


  return 1;
}



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