]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVGEN/AliGenParam.cxx
Sumv2 used for correct calculation of histogram errors
[u/mrichter/AliRoot.git] / EVGEN / AliGenParam.cxx
index 28a63a4a66e1685807f937bf4e73187a47648851..fd3d5ed7f7e706d5fcb4d499150ee07eea85d747 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.38  2002/05/30 14:59:12  morsch
-Check geometrical acceptance. (G. Martinez)
-
-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.
-
-Revision 1.30  2001/06/15 07:55:04  morsch
-Put only first generation decay products on the stack.
-
-Revision 1.29  2001/03/27 10:58:41  morsch
-Initialize decayer before generation. Important if run inside cocktail.
-
-Revision 1.28  2001/03/09 13:01:41  morsch
-- enum constants for paramterisation type (particle family) moved to AliGen*lib.h
-- use AliGenGSIlib::kUpsilon, AliGenPHOSlib::kEtaPrime to access the constants
-
-Revision 1.27  2001/02/02 15:21:10  morsch
-Set high water mark after last particle.
-Use Vertex() method for Vertex.
-
-Revision 1.26  2000/12/21 16:24:06  morsch
-Coding convention clean-up
-
-Revision 1.25  2000/11/30 07:12:50  alibrary
-Introducing new Rndm and QA classes
-
-Revision 1.24  2000/10/18 19:11:27  hristov
-Division by zero fixed
-
-Revision 1.23  2000/10/02 21:28:06  fca
-Removal of useless dependecies via forward declarations
-
-Revision 1.22  2000/09/12 14:14:55  morsch
-Call fDecayer->ForceDecay() at the beginning of Generate().
-
-Revision 1.21  2000/09/08 15:39:01  morsch
-Handle the case fForceDecay=all during the generation, i.e. select all secondaries.
-
-Revision 1.20  2000/09/06 14:35:44  morsch
-Use AliDecayerPythia for particle decays.
-
-Revision 1.19  2000/07/11 18:24:56  fca
-Coding convention corrections + few minor bug fixes
-
-Revision 1.18  2000/06/29 21:08:27  morsch
-All paramatrisation libraries derive from the pure virtual base class AliGenLib.
-This allows to pass a pointer to a library directly to AliGenParam and avoids the
-use of function pointers in Config.C.
-
-Revision 1.17  2000/06/09 20:33:30  morsch
-All coding rule violations except RS3 corrected
-
-Revision 1.16  2000/05/02 07:51:31  morsch
-- Control precision of pT sampling TF1::SetNpx(..)
-- Correct initialisation of child-cuts in all constructors.
-- Most coding rule violations corrected.
-
-Revision 1.15  2000/04/03 15:42:12  morsch
-Cuts on primary particles are separated from those on the decay products. Methods
-SetChildMomentumRange, SetChildPtRange, SetChildPhiRange, SetChildThetaRange added.
-
-Revision 1.14  1999/11/09 07:38:48  fca
-Changes for compatibility with version 2.23 of ROOT
-
-Revision 1.13  1999/11/04 11:30:31  fca
-Correct the logics for SetForceDecay
-
-Revision 1.12  1999/11/03 17:43:20  fca
-New version from G.Martinez & A.Morsch
-
-Revision 1.11  1999/09/29 09:24:14  fca
-Introduction of the Copyright and cvs Log
-
-*/
-
-
+/* $Id$ */
 
 // Class to generate particles from using paramtrized pT and y distributions.
 // Distributions are obtained from pointer to object of type AliGenLib.
@@ -123,15 +22,19 @@ Introduction of the Copyright and cvs Log
 // andreas.morsch@cern.ch
 
 #include "AliGenParam.h"
-#include "AliDecayerPythia.h"
+#include "AliDecayer.h"
 #include "AliGenMUONlib.h"
 #include "AliRun.h"
 #include <TParticle.h>
 #include <TParticlePDG.h>
 #include <TDatabasePDG.h>
 #include <TLorentzVector.h>
+#include <TVirtualMC.h>
 
 #include <TF1.h>
+#include <TCanvas.h>
+#include <TH1.h>
+#include "AliMC.h"
 
 ClassImp(AliGenParam)
 
@@ -153,9 +56,6 @@ AliGenParam::AliGenParam()
     fParam  = 0;
     fAnalog = kAnalog;
     SetDeltaPt();
-//
-// Set random number generator   
-    sRandom = fRandom;
     fDecayer = 0;
 
 
@@ -177,9 +77,6 @@ AliGenParam::AliGenParam(Int_t npart, AliGenLib * Library,  Int_t param, char* t
     fAnalog = kAnalog;
     SetForceDecay();
     SetDeltaPt(); 
-//
-// Set random number generator   
-    sRandom = fRandom;
 }
 
 //____________________________________________________________
@@ -244,8 +141,9 @@ AliGenParam::AliGenParam(Int_t npart, Int_t param,
 
 
 AliGenParam::AliGenParam(const AliGenParam & Param)
+    :AliGenMC(Param)
 {
-// copy constructor
+// Copy constructor
     Param.Copy(*this);
 }
 
@@ -262,7 +160,7 @@ void AliGenParam::Init()
 {
 // Initialisation
 
-    fDecayer = new AliDecayerPythia();
+    if (gMC) fDecayer = gMC->GetDecayer();
   //Begin_Html
   /*
     <img src="picts/AliGenParam.gif">
@@ -275,9 +173,9 @@ void AliGenParam::Init()
     
     fPtPara->SetNpx(npx);
     
-    fYPara  = new TF1("Y -Parametrization",fYParaFunc,fYMin,fYMax,0);
-    TF1* ptPara = new TF1("Pt-Parametrization",fPtParaFunc,0,15,0);
-    TF1* yPara  = new TF1("Y -Parametrization",fYParaFunc,-6,6,0);
+    fYPara  = new TF1("Y-Parametrization",fYParaFunc,fYMin,fYMax,0);
+    TF1 ptPara("Pt-Parametrization(0,15)",fPtParaFunc,0,15,0);
+    TF1 yPara("Y-Parametrization(-6,6)",fYParaFunc,-6,6,0);
 
 //
 // dN/dy| y=0
@@ -287,9 +185,9 @@ void AliGenParam::Init()
     fdNdy0=fYParaFunc(&y1,&y2);
 //
 // Integral over generation region
-    Float_t intYS  = yPara ->Integral(fYMin, fYMax);
-    Float_t intPt0 = ptPara->Integral(0,15);
-    Float_t intPtS = ptPara->Integral(fPtMin,fPtMax);
+    Float_t intYS  = yPara.Integral(fYMin, fYMax);
+    Float_t intPt0 = ptPara.Integral(0,15);
+    Float_t intPtS = ptPara.Integral(fPtMin,fPtMax);
     Float_t phiWgt=(fPhiMax-fPhiMin)/2./TMath::Pi();
     if (fAnalog == kAnalog) {
        fYWgt  = intYS/fdNdy0;
@@ -505,7 +403,7 @@ void AliGenParam::Generate()
                  ipa++;
 //
 // Parent
-                 SetTrack(0, -1, iPart, p, origin0, polar, 0, kPPrimary, nt, wgtp);
+                 PushTrack(0, -1, iPart, p, origin0, polar, 0, kPPrimary, nt, wgtp);
                  pParent[0] = nt;
                  KeepTrack(nt); 
 //
@@ -530,7 +428,7 @@ void AliGenParam::Generate()
                              iparent = -1;
                          }
                         
-                         SetTrack(fTrackIt*trackIt[i], iparent, kf,
+                         PushTrack(fTrackIt*trackIt[i], iparent, kf,
                                           pc, och, polar,
                                           0, kPDecay, nt, wgtch);
                          pParent[i] = nt;
@@ -546,8 +444,8 @@ void AliGenParam::Generate()
          } // kinematic selection
          else  // nodecay option, so parent will be tracked by GEANT (pions, kaons, eta, omegas, baryons)
          {
-           gAlice->
-               SetTrack(fTrackIt,-1,iPart,p,origin0,polar,0,kPPrimary,nt,wgtp);
+           gAlice->GetMCApp()->
+               PushTrack(fTrackIt,-1,iPart,p,origin0,polar,0,kPPrimary,nt,wgtp);
             ipa++; 
          }
          break;
@@ -556,9 +454,25 @@ void AliGenParam::Generate()
   SetHighWaterMark(nt);
 }
 
+void AliGenParam::Draw( const char * /*opt*/)
+{
+    //
+    // Draw the pT and y Distributions
+    //
+     TCanvas *c0 = new TCanvas("c0","Canvas 0",400,10,600,700);
+     c0->Divide(2,1);
+     c0->cd(1);
+     fPtPara->Draw();
+     fPtPara->GetHistogram()->SetXTitle("p_{T} (GeV)");     
+     c0->cd(2);
+     fYPara->Draw();
+     fYPara->GetHistogram()->SetXTitle("y");     
+}
+
 AliGenParam& AliGenParam::operator=(const  AliGenParam& rhs)
 {
 // Assignment operator
+    rhs.Copy(*this);
     return *this;
 }