]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVGEN/AliPythia.cxx
Modified absorber correction. Added function FieldCorrection() to account
[u/mrichter/AliRoot.git] / EVGEN / AliPythia.cxx
index 5e1626ef74215aa4dda772bf8b1389f7db59810b..cf3c951dd5329c2feec6520e8ec6ba2de2aee65f 100644 (file)
 
 /*
 $Log$
+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
 
@@ -31,7 +82,6 @@ Introduction of the Copyright and cvs Log
 
 
 #include "AliPythia.h"
-#include "AliRun.h"
 
 ClassImp(AliPythia)
 
@@ -42,6 +92,10 @@ AliPythia* AliPythia::fgAliPythia=NULL;
 AliPythia::AliPythia()
 {
 // Default Constructor
+//
+//  Set random number
+    if (!sRandom) sRandom=fRandom;
+
 }
 
 void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfunc)
@@ -66,30 +120,31 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
 //  select charm production
     switch (process) 
     {
-    case charm:
+    case kPyCharm:
        SetMSEL(4);
 //
 //  heavy quark masses
 
        SetPMAS(4,1,1.2);
-
+       SetMSTU(16,2);
 //
 //    primordial pT
        SetMSTP(91,1);
-       SetPARP(91,1);
-       SetPARP(93,3);
+       SetPARP(91,1.);
+       SetPARP(93,5.);
 //
        break;
-    case beauty:
+    case kPyBeauty:
        SetMSEL(5);
        SetPMAS(5,1,4.75);
+       SetMSTU(16,2);
        break;
-    case jpsi:
+    case kPyJpsi:
        SetMSEL(0);
 // gg->J/Psi g
        SetMSUB(86,1);
        break;
-    case jpsi_chi:
+    case kPyJpsiChi:
        SetMSEL(0);
 // gg->J/Psi g
        SetMSUB(86,1);
@@ -99,7 +154,8 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
        SetMSUB(88,1);
 // gg-> chi_2c g
        SetMSUB(89,1);  
-    case charm_unforced:
+       break;
+    case kPyCharmUnforced:
        SetMSEL(0);
 // gq->qg   
        SetMSUB(28,1);
@@ -107,7 +163,8 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
        SetMSUB(53,1);
 // gg->gg
        SetMSUB(68,1);
-    case beauty_unforced:
+       break;
+    case kPyBeautyUnforced:
        SetMSEL(0);
 // gq->qg   
        SetMSUB(28,1);
@@ -116,34 +173,137 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
 // gg->gg
        SetMSUB(68,1);
        break;
-    case mb:
+    case kPyMb:
+// Minimum Bias pp-Collisions
+//
+//   
+//      select Pythia min. bias model
+       SetMSEL(0);
+       SetMSUB(92,1);      // single diffraction AB-->XB
+       SetMSUB(93,1);      // single diffraction AB-->AX
+       SetMSUB(94,1);      // double diffraction
+       SetMSUB(95,1);      // low pt production
+       SetMSTP(81,1);      // multiple interactions switched on
+       SetMSTP(82,3);      // model with varying impact param. & a single Gaussian
+       SetPARP(82,3.47);   // set value pT_0  for turn-off of the cross section of                  
+                            // multiple interaction at a reference energy = 14000 GeV
+       SetPARP(89,14000.); // reference energy for the above parameter
+       SetPARP(90,0.174);  // set exponent for energy dependence of pT_0
+    case kPyMbNonDiffr:
 // Minimum Bias pp-Collisions
 //
-// Tuning of parameters descibed in G. Ciapetti and A. Di Ciaccio
-// Proc. of the LHC Workshop, Aachen 1990, Vol. II p. 155
 //   
 //      select Pythia min. bias model
-       SetMSEL(2);
-       SetMSUB(92,1);
-       SetMSUB(93,1);
-       SetMSUB(94,1);
-       SetMSUB(95,1);  
-//      Multiple interactions switched on
-       SetMSTP(81,1);
-       SetMSTP(82,1);
-//      Low-pT cut-off for hard scattering
-       SetPARP(81,1.9);
-//      model for subsequent non-hardest interaction
-//      90% gg->gg 10% gg->qq
-       SetPARP(86,0.9);
-//      90% of gluon interactions have minimum string length
-       SetPARP(85,0.9);
+       SetMSEL(0);
+       SetMSUB(95,1);      // low pt production
+       SetMSTP(81,1);      // multiple interactions switched on
+       SetMSTP(82,3);      // model with varying impact param. & a single Gaussian
+       SetPARP(82,3.47);   // set value pT_0  for turn-off of the cross section of                  
+                            // multiple interaction at a reference energy = 14000 GeV
+       SetPARP(89,14000.); // reference energy for the above parameter
+       SetPARP(90,0.174);  // set exponent for energy dependence of pT_0
+       break;
+    case kPyJets:
+       SetMSEL(1);
+// no initial state radiation   
+       SetMSTP(61,0);
+// no final state radiation
+       SetMSTP(71,0);
+// no primordial pT
+       SetMSTP(91,0);
+//     SetMSTP(111,0); 
+       SetMSTU(16,1);  
+       SetMSTJ(1,1);
+       
+       break;
+    case kPyDirectGamma:
+       SetMSEL(10);
+       break;
+    case kPyCharmPbMNR:
+    case kPyD0PbMNR:
+      // 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.
+      // 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.304);
+      SetPARP(93,6.52);
+
+      // Set c-quark mass
+      SetPMAS(4,1,1.2);
+
+      break;
+    case kPyBeautyPbMNR:
+      // 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 Pb-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^2>
+      SetMSTP(91,1);
+      SetPARP(91,2.035);
+      SetPARP(93,10.17);
+
+      // Set b-quark mass
+      SetPMAS(5,1,4.75);
+
+      break;
     }
 //
 //  Initialize PYTHIA
-    SetMSTP(41,1);
+    SetMSTP(41,1);   // all resonance decays switched on
 
     Initialize("CMS","p","p",fEcms);
+
 }
 
 Int_t AliPythia::CheckedLuComp(Int_t kf)
@@ -154,8 +314,26 @@ Int_t AliPythia::CheckedLuComp(Int_t kf)
     return kc;
 }
 
-AliPythia* AliPythia::Instance()
+void AliPythia::SetNuclei(Int_t a1, Int_t a2)
 {
+// Treat protons as inside nuclei with mass numbers a1 and a2  
+//    The MSTP array in the PYPARS common block is used to enable and 
+//    select the nuclear structure functions. 
+//    MSTP(52)  : (D=1) choice of proton and nuclear structure-function library
+//            =1: internal PYTHIA acording to MSTP(51) 
+//            =2: PDFLIB proton  s.f., with MSTP(51)  = 1000xNGROUP+NSET
+//    If the following mass number both not equal zero, nuclear corrections of the stf are used.
+//    MSTP(192) : Mass number of nucleus side 1
+//    MSTP(193) : Mass number of nucleus side 2
+    SetMSTP(52,2);
+    SetMSTP(192, a1);
+    SetMSTP(193, a2);  
+}
+       
+
+AliPythia* AliPythia::Instance()
+{ 
+// Set random number generator 
     if (fgAliPythia) {
        return fgAliPythia;
     } else {
@@ -163,10 +341,72 @@ AliPythia* AliPythia::Instance()
        return fgAliPythia;
     }
 }
-void AliPythia::Streamer(TBuffer &R__b) {} 
+
+void AliPythia::PrintParticles()
+{ 
+// Print list of particl properties
+    Int_t np = 0;
+    
+    for (Int_t kf=0; kf<1000000; kf++) {
+       for (Int_t c = 1;  c > -2; c-=2) {
+           
+           Int_t kc = Pycomp(c*kf);
+           if (kc) {
+               Float_t mass  = GetPMAS(kc,1);
+               Float_t width = GetPMAS(kc,2);  
+               Float_t tau   = GetPMAS(kc,4);
+               
+               char*   name = new char[8];
+               Pyname(kf,name);
+       
+               np++;
+               
+               printf("\n mass, width, tau: %6d %s %10.3f %10.3e %10.3e", 
+                      c*kf, name, mass, width, tau);
+           }
+       }
+    }
+    printf("\n Number of particles %d \n \n", np);
+}
+
+void  AliPythia::ResetDecayTable()
+{
+//  Set default values for pythia decay switches
+    Int_t i;
+    for (i = 1; i <  501; i++) SetMDCY(i,1,fDefMDCY[i]);
+    for (i = 1; i < 2001; i++) SetMDME(i,1,fDefMDME[i]);
+}
+
+void  AliPythia::SetDecayTable()
+{
+//  Set default values for pythia decay switches
+//
+    Int_t i;
+    for (i = 1; i <  501; i++) fDefMDCY[i] = GetMDCY(i,1);
+    for (i = 1; i < 2001; i++) fDefMDME[i] = GetMDME(i,1);
+}
 
 
+#ifndef WIN32
+#define pyr    pyr_
+#define pyrset pyrset_
+#define pyrget pyrget_
+#else
+#define pyr    PYR
+#define pyrset PYRSET
+#define pyrget PYRGET
+#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*) {}
+}