]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVGEN/AliGenParam.cxx
Use CalcMass()
[u/mrichter/AliRoot.git] / EVGEN / AliGenParam.cxx
index de0ff76e92eb6352332b2b3af69be3c7b7527a90..39f3d9bfe5256ed974e22494d59e44d54c0a7d20 100644 (file)
 
 /*
 $Log$
+Revision 1.37  2002/04/17 10:20:44  morsch
+Coding Rule violations corrected.
+
+Revision 1.36  2002/02/08 16:50:50  morsch
+Add name and title in constructor.
+
+Revision 1.35  2002/01/21 10:02:40  morsch
+ty is Double_t
+Abort if too high rapidity causes numerical paroblem. User has to specify
+meaningful y-range.
+
+Revision 1.34  2001/11/27 13:13:07  morsch
+Maximum lifetime for long-lived particles to be put on the stack is parameter.
+It can be set via SetMaximumLifetime(..).
+
+Revision 1.33  2001/10/21 18:35:56  hristov
+Several pointers were set to zero in the default constructors to avoid memory management problems
+
+Revision 1.32  2001/07/27 17:09:36  morsch
+Use local SetTrack, KeepTrack and SetHighWaterMark methods
+to delegate either to local stack or to stack owned by AliRun.
+(Piotr Skowronski, A.M.)
+
 Revision 1.31  2001/07/13 10:58:54  morsch
 - Some coded moved to AliGenMC
 - Improved handling of secondary vertices.
@@ -88,6 +111,14 @@ Introduction of the Copyright and cvs Log
 
 */
 
+
+
+// Class to generate particles from using paramtrized pT and y distributions.
+// Distributions are obtained from pointer to object of type AliGenLib.
+// (For example AliGenMUONlib)
+// Decays are performed using Pythia.
+// andreas.morsch@cern.ch
+
 #include "AliGenParam.h"
 #include "AliDecayerPythia.h"
 #include "AliGenMUONlib.h"
@@ -122,11 +153,16 @@ AliGenParam::AliGenParam()
 //
 // Set random number generator   
     sRandom = fRandom;
+    fDecayer = 0;
+
+
 }
 
 AliGenParam::AliGenParam(Int_t npart, AliGenLib * Library,  Int_t param, char* tname):AliGenMC(npart)
 {
 // Constructor using number of particles parameterisation id and library
+    fName = "Param";
+    fTitle= "Particle Generator using pT and y parameterisation";
     
     fPtParaFunc = Library->GetPt(param, tname);
     fYParaFunc  = Library->GetY (param, tname);
@@ -148,7 +184,10 @@ AliGenParam::AliGenParam(Int_t npart, AliGenLib * Library,  Int_t param, char* t
 AliGenParam::AliGenParam(Int_t npart, Int_t param, char* tname):AliGenMC(npart)
 {
 // Constructor using parameterisation id and number of particles
-//      
+//
+    fName = "Param";
+    fTitle= "Particle Generator using pT and y parameterisation";
+      
     AliGenLib* pLibrary = new AliGenMUONlib();
  
     fPtParaFunc = pLibrary->GetPt(param, tname);
@@ -178,6 +217,9 @@ AliGenParam::AliGenParam(Int_t npart, Int_t param,
 {
 // Constructor
 // Gines Martinez 1/10/99 
+    fName = "Param";
+    fTitle= "Particle Generator using pT and y parameterisation";
+
     fPtParaFunc = PtPara; 
     fYParaFunc  = YPara;  
     fIpParaFunc = IpPara;
@@ -198,9 +240,10 @@ AliGenParam::AliGenParam(Int_t npart, Int_t param,
 }
 
 
-AliGenParam::AliGenParam(const AliGenParam & Paramd)
+AliGenParam::AliGenParam(const AliGenParam & Param)
 {
 // copy constructor
+    Param.Copy(*this);
 }
 
 //____________________________________________________________
@@ -286,14 +329,14 @@ void AliGenParam::Generate()
   Float_t phi, theta;         // Phi and theta spherical angles of the parent particle momentum
   Float_t p[3], pc[3], 
           och[3];             // Momentum, polarisation and origin of the children particles from lujet
-  Float_t ty, xmt;
+  Double_t ty, xmt;
   Int_t nt, i, j;
   Float_t  wgtp, wgtch;
   Double_t dummy;
   static TClonesArray *particles;
   //
   if(!particles) particles = new TClonesArray("TParticle",1000);
-
+  
   static TDatabasePDG *pDataBase = new TDatabasePDG();
   if(!pDataBase) pDataBase = new TDatabasePDG();
   //
@@ -317,14 +360,14 @@ void AliGenParam::Generate()
          fChildWeight=(fDecayer->GetPartialBranchingRatio(iPart))*fParentWeight;          
          TParticlePDG *particle = pDataBase->GetParticle(iPart);
          Float_t am = particle->Mass();
-
+         
          Rndm(random,2);
 //
 // phi
          phi=fPhiMin+random[0]*(fPhiMax-fPhiMin);
 //
 // y
-         ty=Float_t(TMath::TanH(fYPara->GetRandom()));
+         ty = TMath::TanH(fYPara->GetRandom());
 //
 // pT
          if (fAnalog == kAnalog) {
@@ -338,7 +381,12 @@ void AliGenParam::Generate()
              wgtch=fChildWeight*fPtParaFunc(& ptd, &dummy);
          }
          xmt=sqrt(pt*pt+am*am);
-      if (TMath::Abs(ty)==1) ty=0;
+         if (TMath::Abs(ty)==1.) {
+             ty=0.;
+             Fatal("AliGenParam", 
+                   "Division by 0: Please check you rapidity range !");
+         }
+         
          pl=xmt*ty/sqrt(1.-ty*ty);
          theta=TMath::ATan2(pt,pl);
 // Cut on theta
@@ -375,6 +423,11 @@ void AliGenParam::Generate()
 //
 // select decay particles
              Int_t np=fDecayer->ImportParticles(particles);
+
+             //  Selecting  GeometryAcceptance for particles fPdgCodeParticleforAcceptanceCut;
+             if (fGeometryAcceptance) 
+               if (!CheckAcceptanceGeometry(np,particles)) continue;
+             
              Int_t ncsel=0;
              Int_t* pFlag      = new Int_t[np];
              Int_t* pParent    = new Int_t[np];
@@ -398,7 +451,6 @@ void AliGenParam::Generate()
 // flagged particle
 
                      if (pFlag[i] == 1) {
-                         printf("\n deselected %d", i);
                          ipF = iparticle->GetFirstDaughter();
                          ipL = iparticle->GetLastDaughter();   
                          if (ipF > 0) for (j=ipF-1; j<ipL; j++) pFlag[j]=1;
@@ -408,13 +460,12 @@ void AliGenParam::Generate()
 // flag decay products of particles with long life-time (c tau > .3 mum)                     
                      
                      if (ks != 1) { 
-                         TParticlePDG *particle = pDataBase->GetParticle(kf);
+//                       TParticlePDG *particle = pDataBase->GetParticle(kf);
                          
                          Double_t lifeTime = fDecayer->GetLifetime(kf);
-                         Double_t mass     = particle->Mass();
-                         Double_t width    = particle->Width();
-                         printf("\n lifetime %d %e %e %e ", i, lifeTime, mass, width);
-                         if (lifeTime > (Double_t) 1.e-15) {
+//                       Double_t mass     = particle->Mass();
+//                       Double_t width    = particle->Width();
+                         if (lifeTime > (Double_t) fMaxLifeTime) {
                              ipF = iparticle->GetFirstDaughter();
                              ipL = iparticle->GetLastDaughter();       
                              if (ipF > 0) for (j=ipF-1; j<ipL; j++) pFlag[j]=1;
@@ -425,6 +476,7 @@ void AliGenParam::Generate()
                      } // ks==1 ?
 //
 // children
+                     
                      if (ChildSelected(TMath::Abs(kf)) || fForceDecay == kAll && trackIt[i])
                      {
                          if (fCutOnChild) {
@@ -476,20 +528,20 @@ void AliGenParam::Generate()
                          } else {
                              iparent = -1;
                          }
-                         printf("\n SetTrack %d %d %d %d", i, kf, iparent, trackIt[i]);
+                        
                          SetTrack(fTrackIt*trackIt[i], iparent, kf,
                                           pc, och, polar,
                                           0, kPDecay, nt, wgtch);
                          pParent[i] = nt;
                          KeepTrack(nt); 
-                     }
-                 }
+                     } // Selected
+                 } // Particle loop 
              }  // Decays by Lujet
-
+             particles->Clear();
              if (pFlag)      delete[] pFlag;
              if (pParent)    delete[] pParent;
              if (pSelected)  delete[] pSelected;          
-             if (trackIt)    delete[] trackIt;     
+             if (trackIt)    delete[] trackIt;
          } // kinematic selection
          else  // nodecay option, so parent will be tracked by GEANT (pions, kaons, eta, omegas, baryons)
          {