/*
$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
#include "AliPythia.h"
-#include "AliRun.h"
ClassImp(AliPythia)
AliPythia::AliPythia()
{
// Default Constructor
+//
+// Set random number
+ if (!sRandom) sRandom=fRandom;
+
}
void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfunc)
// 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);
SetMSUB(88,1);
// gg-> chi_2c g
SetMSUB(89,1);
- case charm_unforced:
+ break;
+ case kPyCharmUnforced:
SetMSEL(0);
// gq->qg
SetMSUB(28,1);
SetMSUB(53,1);
// gg->gg
SetMSUB(68,1);
- case beauty_unforced:
+ break;
+ case kPyBeautyUnforced:
SetMSEL(0);
// gq->qg
SetMSUB(28,1);
// 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)
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 {
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*) {}
+}