Changes related to the initialization of random numbers generators. Now one can use...
[u/mrichter/AliRoot.git] / PYTHIA6 / AliPythia.cxx
index 49cc5e9..a380e9c 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.28  2002/12/09 08:22:56  morsch
-UA1 jet finder (Pycell) for software triggering added.
-
-Revision 1.27  2002/11/15 00:39:37  morsch
-- Correct initialisation of sRandom.
-- QCD Jets with initial and final state gluon radiation is default
-- pt kick for jets default
-- Interface to Pyclus added.
-
-Revision 1.26  2002/11/14 00:37:32  morsch
-Warning message for kPyJets added.
-
-Revision 1.25  2002/10/14 14:55:35  hristov
-Merging the VirtualMC branch to the main development branch (HEAD)
-
-Revision 1.20.6.1  2002/06/10 14:57:41  hristov
-Merged with v3-08-02
-
-Revision 1.24  2002/05/22 13:22:53  morsch
-Process kPyMbNonDiffr added.
-
-Revision 1.23  2002/05/06 07:17:29  morsch
-Pyr gives random number r in interval 0 < r < 1.
-
-Revision 1.22  2002/04/26 10:28:48  morsch
-Option kPyBeautyPbMNR added (N. Carrer).
-
-Revision 1.21  2002/03/25 14:46:16  morsch
-Case  kPyD0PbMNR added (N. Carrer).
-
-Revision 1.20  2002/03/03 13:48:50  morsch
-Option  kPyCharmPbMNR added. Produce charm pairs in agreement with MNR
-NLO calculations (Nicola Carrer).
-
-Revision 1.19  2002/02/20 08:52:20  morsch
-Correct documentation of SetNuclei method.
-
-Revision 1.18  2002/02/07 10:43:06  morsch
-Tuned pp-min.bias settings (M.Monteno, R.Ugoccioni and N.Carrer)
-
-Revision 1.17  2001/12/19 15:40:43  morsch
-For kPyJets enforce simple jet topology, i.e no initial or final state
-gluon radiation and no primordial pT.
-
-Revision 1.16  2001/10/12 11:13:59  morsch
-Missing break statements added (thanks to Nicola Carrer)
-
-Revision 1.15  2001/03/27 10:54:50  morsch
-Add ResetDecayTable() and SsetDecayTable() methods.
-
-Revision 1.14  2001/03/09 13:03:40  morsch
-Process_t and Struc_Func_t moved to AliPythia.h
-
-Revision 1.13  2000/12/18 08:55:35  morsch
-Make AliPythia dependent generartors work with new scheme of random number generation
-
-Revision 1.12  2000/11/30 07:12:50  alibrary
-Introducing new Rndm and QA classes
-
-Revision 1.11  2000/10/20 06:30:06  fca
-Use version 0 to avoid streamer generation
-
-Revision 1.10  2000/10/06 14:18:44  morsch
-Upper cut of prim. pT distribution set to 5. GeV
-
-Revision 1.9  2000/09/18 10:41:35  morsch
-Add possibility to use nuclear structure functions from PDF library V8.
-
-Revision 1.8  2000/09/06 14:26:24  morsch
-Decayer functionality of AliPythia has been moved to AliDecayerPythia.
-Class is now a singleton.
-
-Revision 1.7  2000/06/09 20:34:50  morsch
-All coding rule violations except RS3 corrected
-
-Revision 1.6  1999/11/09 07:38:48  fca
-Changes for compatibility with version 2.23 of ROOT
-
-Revision 1.5  1999/11/03 17:43:20  fca
-New version from G.Martinez & A.Morsch
-
-Revision 1.4  1999/09/29 09:24:14  fca
-Introduction of the Copyright and cvs Log
-
-*/
-
+/* $Id$ */
 
 #include "AliPythia.h"
+#include "AliPythiaRndm.h"
 
 ClassImp(AliPythia)
 
@@ -128,14 +42,16 @@ AliPythia::AliPythia()
 // Default Constructor
 //
 //  Set random number
-    if (!sRandom) sRandom=fRandom;
+    if (!AliPythiaRndm::GetPythiaRandom()) 
+      AliPythiaRndm::SetPythiaRandom(GetRandom());
 
 }
 
 void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfunc)
 {
 // Initialise the process to generate 
-    if (!sRandom) sRandom = gRandom;
+    if (!AliPythiaRndm::GetPythiaRandom()) 
+      AliPythiaRndm::SetPythiaRandom(GetRandom());
     
     fProcess = process;
     fEcms = energy;
@@ -249,13 +165,13 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
     case kPyDirectGamma:
        SetMSEL(10);
        break;
-    case kPyCharmPbMNR:
-    case kPyD0PbMNR:
+    case kPyCharmPbPbMNR:
+    case kPyD0PbPbMNR:
       // Tuning of Pythia parameters aimed to get a resonable agreement
       // between with the NLO calculation by Mangano, Nason, Ridolfi for the
       // c-cbar single inclusive and double differential distributions.
       // This parameter settings are meant to work with Pb-Pb collisions
-      // (AliGenPythia::SetNuclei) and with kCTEQ_4L PDFs.
+      // (AliGenPythia::SetNuclei) and with kCTEQ4L PDFs.
       // To get a good agreement the minimum ptHard (AliGenPythia::SetPtHard)
       // has to be set to 2.1GeV. Example in ConfigCharmPPR.C.
 
@@ -278,7 +194,7 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
       SetMSTP(32,2);
       SetPARP(34,1.0);
 
-      // Intrinsic <kT^2>
+      // Intrinsic <kT>
       SetMSTP(91,1);
       SetPARP(91,1.304);
       SetPARP(93,6.52);
@@ -287,7 +203,83 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
       SetPMAS(4,1,1.2);
 
       break;
-    case kPyBeautyPbMNR:
+    case kPyCharmpPbMNR:
+    case kPyD0pPbMNR:
+      // Tuning of Pythia parameters aimed to get a resonable agreement
+      // between with the NLO calculation by Mangano, Nason, Ridolfi for the
+      // c-cbar single inclusive and double differential distributions.
+      // This parameter settings are meant to work with p-Pb collisions
+      // (AliGenPythia::SetNuclei) and with kCTEQ4L PDFs.
+      // To get a good agreement the minimum ptHard (AliGenPythia::SetPtHard)
+      // has to be set to 2.1GeV. Example in ConfigCharmPPR.C.
+
+      // All QCD processes
+      SetMSEL(1);
+
+      // No multiple interactions
+      SetMSTP(81,0);
+      SetPARP(81,0.0);
+      SetPARP(82,0.0);
+
+      // Initial/final parton shower on (Pythia default)
+      SetMSTP(61,1);
+      SetMSTP(71,1);
+
+      // 2nd order alpha_s
+      SetMSTP(2,2);
+
+      // QCD scales
+      SetMSTP(32,2);
+      SetPARP(34,1.0);
+
+      // Intrinsic <kT>
+      SetMSTP(91,1);
+      SetPARP(91,1.16);
+      SetPARP(93,5.8);
+
+      // Set c-quark mass
+      SetPMAS(4,1,1.2);
+
+      break;
+    case kPyCharmppMNR:
+    case kPyD0ppMNR:
+      // Tuning of Pythia parameters aimed to get a resonable agreement
+      // between with the NLO calculation by Mangano, Nason, Ridolfi for the
+      // c-cbar single inclusive and double differential distributions.
+      // This parameter settings are meant to work with pp collisions
+      // (AliGenPythia::SetNuclei) and with kCTEQ4L PDFs.
+      // To get a good agreement the minimum ptHard (AliGenPythia::SetPtHard)
+      // has to be set to 2.1GeV. Example in ConfigCharmPPR.C.
+
+      // All QCD processes
+      SetMSEL(1);
+
+      // No multiple interactions
+      SetMSTP(81,0);
+      SetPARP(81,0.0);
+      SetPARP(82,0.0);
+
+      // Initial/final parton shower on (Pythia default)
+      SetMSTP(61,1);
+      SetMSTP(71,1);
+
+      // 2nd order alpha_s
+      SetMSTP(2,2);
+
+      // QCD scales
+      SetMSTP(32,2);
+      SetPARP(34,1.0);
+
+      // Intrinsic <kT^2>
+      SetMSTP(91,1);
+      SetPARP(91,1.);
+      SetPARP(93,5.);
+
+      // Set c-quark mass
+      SetPMAS(4,1,1.2);
+
+      break;
+    case kPyBeautyPbPbMNR:
       // Tuning of Pythia parameters aimed to get a resonable agreement
       // between with the NLO calculation by Mangano, Nason, Ridolfi for the
       // b-bbar single inclusive and double differential distributions.
@@ -317,7 +309,7 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
       SetPARP(67,1.0);
       SetPARP(71,1.0);
 
-      // Intrinsic <kT^2>
+      // Intrinsic <kT>
       SetMSTP(91,1);
       SetPARP(91,2.035);
       SetPARP(93,10.17);
@@ -325,6 +317,84 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
       // Set b-quark mass
       SetPMAS(5,1,4.75);
 
+      break;
+    case kPyBeautypPbMNR:
+      // Tuning of Pythia parameters aimed to get a resonable agreement
+      // between with the NLO calculation by Mangano, Nason, Ridolfi for the
+      // b-bbar single inclusive and double differential distributions.
+      // This parameter settings are meant to work with p-Pb collisions
+      // (AliGenPythia::SetNuclei) and with kCTEQ4L PDFs.
+      // To get a good agreement the minimum ptHard (AliGenPythia::SetPtHard)
+      // has to be set to 2.75GeV. Example in ConfigBeautyPPR.C.
+
+      // All QCD processes
+      SetMSEL(1);
+
+      // No multiple interactions
+      SetMSTP(81,0);
+      SetPARP(81,0.0);
+      SetPARP(82,0.0);
+
+      // Initial/final parton shower on (Pythia default)
+      SetMSTP(61,1);
+      SetMSTP(71,1);
+
+      // 2nd order alpha_s
+      SetMSTP(2,2);
+
+      // QCD scales
+      SetMSTP(32,2);
+      SetPARP(34,1.0);
+      SetPARP(67,1.0);
+      SetPARP(71,1.0);
+
+      // Intrinsic <kT>
+      SetMSTP(91,1);
+      SetPARP(91,1.60);
+      SetPARP(93,8.00);
+
+      // Set b-quark mass
+      SetPMAS(5,1,4.75);
+
+      break;
+    case kPyBeautyppMNR:
+      // Tuning of Pythia parameters aimed to get a resonable agreement
+      // between with the NLO calculation by Mangano, Nason, Ridolfi for the
+      // b-bbar single inclusive and double differential distributions.
+      // This parameter settings are meant to work with pp collisions
+      // (AliGenPythia::SetNuclei) and with kCTEQ4L PDFs.
+      // To get a good agreement the minimum ptHard (AliGenPythia::SetPtHard)
+      // has to be set to 2.75GeV. Example in ConfigBeautyPPR.C.
+
+      // All QCD processes
+      SetMSEL(1);
+
+      // No multiple interactions
+      SetMSTP(81,0);
+      SetPARP(81,0.0);
+      SetPARP(82,0.0);
+
+      // Initial/final parton shower on (Pythia default)
+      SetMSTP(61,1);
+      SetMSTP(71,1);
+
+      // 2nd order alpha_s
+      SetMSTP(2,2);
+
+      // QCD scales
+      SetMSTP(32,2);
+      SetPARP(34,1.0);
+      SetPARP(67,1.0);
+      SetPARP(71,1.0);
+
+      // Intrinsic <kT>
+      SetMSTP(91,1);
+      SetPARP(91,1.);
+      SetPARP(93,5.);
+
+      // Set b-quark mass
+      SetPMAS(5,1,4.75);
+
       break;
     }
 //
@@ -431,32 +501,3 @@ void  AliPythia::Pycell(Int_t& njet)
 
 
 
-#ifndef WIN32
-#define pyr    pyr_
-#define pyrset pyrset_
-#define pyrget pyrget_
-#define pyclus pyclus_
-#define pycell pycell_
-#else
-#define pyr    PYR
-#define pyrset PYRSET
-#define pyrget PYRGET
-#define pyclus PYCLUS
-#define pycell PYCELL
-#endif
-
-extern "C" {
-  Double_t pyr(Int_t*) 
-{
-      Float_t r;
-      do r=sRandom->Rndm(); while(0 >= r || r >= 1);
-      return r;
-}
-  void pyrset(Int_t*,Int_t*) {}
-  void pyrget(Int_t*,Int_t*) {}
-}
-
-
-
-
-