2 // Configuration for the Physics Data Challenge 2007
\r
5 // Assuming inel = 70 mb (PPR v.1, p.64)
\r
7 // 84.98% of MSEL=0 events (including diffractive) with
\r
8 // QQbar switched off (these events will include injected J/psi) => kPyMbNoHvq
\r
10 // 14.14% of MSEL=1 events with ccbar (in 4 subsamples) => kCharmpp14000wmi
\r
11 // bin 1 25% (3.535%): 2.76 < pthard < 3 GeV/c
\r
12 // bin 2 40% (5.656%): 3 < pthard < 4 GeV/c
\r
13 // bin 3 29% (4.101%): 4 < pthard < 8 GeV/c
\r
14 // bin 4 6% (0.848%): pthard > 8 GeV/c
\r
16 // 0.73% of MSEL=1 events with bbbar (in 4 subsamples) => kBeautypp14000wmi
\r
17 // bin 1 5% (0.037%): 2.76 < pthard < 4 GeV/c
\r
18 // bin 2 31% (0.226%): 4 < pthard < 6 GeV/c
\r
19 // bin 3 28% (0.204%): 6 < pthard < 8 GeV/c
\r
20 // bin 4 36% (0.263%): pthard >8 GeV/c
\r
22 // 0.075% of MSEL=0 events with QQbar switched off and 1 Omega- => kPyOmegaMinus
\r
23 // 0.075% of MSEL=0 events with QQbar switched off and 1 OmegaBar+ => kPyOmegaPlus
\r
25 // One can use the configuration macro in compiled mode by
\r
26 // root [0] gSystem->Load("libgeant321");
\r
27 // root [0] gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include\
\r
28 // -I$ALICE_ROOT -I$ALICE/geant3/TGeant3");
\r
29 // root [0] .x grun.C(1,"Config_PDC07.C++")
\r
33 #if !defined(__CINT__) || defined(__MAKECINT__)
\r
34 #include <Riostream.h>
\r
35 #include <TRandom.h>
\r
36 #include <TDatime.h>
\r
37 #include <TSystem.h>
\r
38 #include <TVirtualMC.h>
\r
39 #include <TGeant3TGeo.h>
\r
40 #include "EVGEN/AliGenCocktail.h"
\r
41 #include "EVGEN/AliGenParam.h"
\r
42 #include "EVGEN/AliGenMUONlib.h"
\r
43 #include "STEER/AliRunLoader.h"
\r
44 #include "STEER/AliRun.h"
\r
45 #include "STEER/AliConfig.h"
\r
46 #include "PYTHIA6/AliDecayerPythia.h"
\r
47 #include "PYTHIA6/AliGenPythia.h"
\r
48 #include "STEER/AliMagF.h"
\r
49 #include "STRUCT/AliBODY.h"
\r
50 #include "STRUCT/AliMAG.h"
\r
51 #include "STRUCT/AliABSOv3.h"
\r
52 #include "STRUCT/AliDIPOv3.h"
\r
53 #include "STRUCT/AliHALLv3.h"
\r
54 #include "STRUCT/AliFRAMEv2.h"
\r
55 #include "STRUCT/AliSHILv3.h"
\r
56 #include "STRUCT/AliPIPEv3.h"
\r
57 #include "ITS/AliITSgeom.h"
\r
58 #include "ITS/AliITSv11Hybrid.h"
\r
59 #include "TPC/AliTPCv2.h"
\r
60 #include "TOF/AliTOFv6T0.h"
\r
61 #include "HMPID/AliHMPIDv3.h"
\r
62 #include "HMPID/AliHMPIDv2.h"
\r
63 #include "ZDC/AliZDCv3.h"
\r
64 #include "TRD/AliTRDv1.h"
\r
65 #include "FMD/AliFMDv1.h"
\r
66 #include "MUON/AliMUONv1.h"
\r
67 #include "PHOS/AliPHOSv1.h"
\r
68 #include "PMD/AliPMDv1.h"
\r
69 #include "T0/AliT0v1.h"
\r
70 #include "EMCAL/AliEMCALv2.h"
\r
71 #include "ACORDE/AliACORDEv1.h"
\r
72 #include "VZERO/AliVZEROv7.h"
\r
76 // libraries required by geant321
\r
82 //--- Heavy Flavour Production ---
\r
83 kCharmPbPb5500, kCharmpPb8800, kCharmpp14000, kCharmpp14000wmi,
\r
84 kD0PbPb5500, kD0pPb8800, kD0pp14000,
\r
85 kDPlusPbPb5500, kDPluspPb8800, kDPluspp14000,
\r
86 kBeautyPbPb5500, kBeautypPb8800, kBeautypp14000, kBeautypp14000wmi,
\r
88 kPyMbNoHvq, kPyOmegaPlus, kPyOmegaMinus, kPyJetJet, kPyJetJetFixed,
\r
89 kPyGammaJetPHOS, kPyJetJetPHOS, kPyJetJetPHOSv2, kPyGammaBremsPHOS,
\r
90 kPyGammaJetEMCAL, kPyJetJetEMCAL, kPyGammaBremsEMCAL, kRunMax
\r
93 const char * pprRunName[] = {
\r
94 "kCharmPbPb5500", "kCharmpPb8800", "kCharmpp14000", "kCharmpp14000wmi",
\r
95 "kD0PbPb5500", "kD0pPb8800", "kD0pp14000",
\r
96 "kDPlusPbPb5500", "kDPluspPb8800", "kDPluspp14000",
\r
97 "kBeautyPbPb5500", "kBeautypPb8800", "kBeautypp14000", "kBeautypp14000wmi",
\r
98 "kPyMbNoHvq", "kPyOmegaPlus", "kPyOmegaMinus", "kPyJetJet","kPyJetJetFixed",
\r
99 "kPyGammaJetPHOS", "kPyJetJetPHOS", "kPyJetJetPHOSv2", "kPyGammaBremsPHOS",
\r
100 "kPyGammaJetEMCAL", "kPyJetJetEMCAL", "kPyGammaBremsEMCAL"
\r
104 //--- Decay Mode ---
\r
107 kNature, kHadr, kSemiEl, kSemiMu
\r
109 //--- Magnetic Field ---
\r
115 //--- Trigger config ---
\r
118 kDefaultPPTrig, kDefaultPbPbTrig
\r
121 const char * TrigConfName[] = {
\r
125 Float_t eCMS=14000;
\r
126 PDC07Proc_t proc = kPyJetJetEMCAL;
\r
135 static PprGeo_t geo = kHoles;
\r
137 //--- Functions ---
\r
138 AliGenPythia *PythiaHVQ(PDC07Proc_t proc);
\r
140 AliGenPythia* Blubb(Int_t proc) {
\r
141 //*******************************************************************//
\r
142 // Configuration file for hard QCD processes generation with PYTHIA //
\r
144 //*******************************************************************//
\r
145 AliGenPythia * gener = 0x0;
\r
150 comment = comment.Append(Form("pp->jet + jet at %3.0f TeV, pt hard %3.0f - %3.0f",eCMS,ptHardMin,ptHardMax));
\r
151 AliGenPythia * gener = new AliGenPythia(nEvts);
\r
152 gener->SetEnergyCMS(eCMS);// Centre of mass energy
\r
153 gener->SetProcess(kPyJets);// Process type
\r
154 gener->SetJetEtaRange(-1.5, 1.5);// Final state kinematic cuts
\r
155 gener->SetJetPhiRange(0., 360.);
\r
156 gener->SetJetEtRange(10., 1000.);
\r
157 gener->SetPtHard(ptHardMin, ptHardMax);// Pt transfer of the hard scattering
\r
158 gener->SetStrucFunc(kCTEQ5L);
\r
162 case kPyGammaJetPHOS:
\r
163 comment = comment.Append(" pp->jet + gamma over PHOS");
\r
164 gener = new AliGenPythia(nEvts);
\r
165 gener->SetEnergyCMS(eCMS);
\r
166 gener->SetProcess(kPyDirectGamma);
\r
167 gener->SetStrucFunc(kCTEQ4L);
\r
168 gener->SetPtHard(ptHardMin,ptHardMax);
\r
169 //gener->SetYHard(-1.0,1.0);
\r
170 gener->SetGammaEtaRange(-0.13,0.13);
\r
171 gener->SetGammaPhiRange(218.,322.);//Over 5 modules +-2 deg
\r
173 case kPyJetJetPHOS:
\r
174 comment = comment.Append(" pp->jet + jet over PHOS");
\r
175 gener = new AliGenPythia(nEvts);
\r
176 gener->SetEnergyCMS(eCMS);
\r
177 gener->SetProcess(kPyJets);
\r
178 gener->SetStrucFunc(kCTEQ4L);
\r
179 gener->SetPtHard(ptHardMin,ptHardMax);
\r
180 //gener->SetYHard(-1.0,1.0);
\r
181 gener->SetJetEtaRange(-1.,1.);
\r
182 gener->SetJetPhiRange(200.,340.);
\r
183 gener->SetPi0InPHOS(kTRUE);
\r
184 gener->SetFragPhotonOrPi0MinPt(ptGammaPi0Min);
\r
186 printf("\n \n Event generator: Minimum pT of particle in calorimeter %f \n \n", ptGammaPi0Min);
\r
188 case kPyGammaBremsPHOS:
\r
189 comment = comment.Append(" pp->jet + jet+bremsphoton over PHOS at 14 TeV");
\r
190 gener = new AliGenPythia(nEvts);
\r
191 gener->SetEnergyCMS(eCMS);
\r
192 gener->SetProcess(kPyJets);
\r
193 gener->SetStrucFunc(kCTEQ4L);
\r
194 gener->SetPtHard(ptHardMin,ptHardMax);
\r
195 //gener->SetYHard(-1.0,1.0);
\r
196 gener->SetJetEtaRange(-1.,1.);
\r
197 gener->SetJetPhiRange(200.,340.);
\r
198 gener->SetFragPhotonInPHOS(kTRUE);
\r
199 gener->SetFragPhotonOrPi0MinPt(ptGammaPi0Min);
\r
200 printf("\n \n Event generator: Minimum pT of particle in calorimeter %f \n \n", ptGammaPi0Min);
\r
202 case kPyJetJetPHOSv2:
\r
203 comment = comment.Append(" pp->jet + jet over PHOS version2 ");
\r
204 gener = new AliGenPythia(nEvts);
\r
205 gener->SetEnergyCMS(eCMS);
\r
206 gener->SetProcess(kPyJets);
\r
207 gener->SetStrucFunc(kCTEQ4L);
\r
208 gener->SetPtHard(ptHardMin,ptHardMax);
\r
209 //gener->SetYHard(-1.0,1.0);
\r
210 gener->SetJetEtaRange(-1.,1.);
\r
211 gener->SetJetPhiRange(200.,340.);
\r
212 //gener->SetPi0InPHOS(kTRUE);
\r
213 gener->SetPhotonInPHOSeta(kTRUE);
\r
214 gener->SetPhotonMinPt(ptGammaPi0Min);
\r
215 gener->SetForceDecay(kAll);
\r
217 case kPyGammaJetEMCAL:
\r
218 comment = comment.Append(" pp->jet + gamma over EMCAL at 14 TeV");
\r
219 gener = new AliGenPythia(nEvts);
\r
220 gener->SetEnergyCMS(eCMS);
\r
221 gener->SetProcess(kPyDirectGamma);
\r
222 gener->SetStrucFunc(kCTEQ4L);
\r
223 gener->SetPtHard(ptHardMin,ptHardMax);
\r
224 //gener->SetYHard(-1.0,1.0);
\r
225 gener->SetGammaEtaRange(-0.71,0.71);
\r
226 gener->SetGammaPhiRange(78.,192.);//Over 6 supermodules +-2 deg
\r
228 case kPyJetJetEMCAL:
\r
229 comment = comment.Append(" pp->jet + jet over EMCAL at 14 TeV");
\r
230 gener = new AliGenPythia(nEvts);
\r
231 gener->SetEnergyCMS(eCMS);
\r
232 gener->SetProcess(kPyJets);
\r
233 gener->SetStrucFunc(kCTEQ4L);
\r
234 gener->SetPtHard(ptHardMin,ptHardMax);
\r
235 //gener->SetYHard(-1.0,1.0);
\r
236 gener->SetJetEtaRange(-1,1);
\r
237 gener->SetJetPhiRange(60.,210.);
\r
238 gener->SetPi0InEMCAL(kTRUE);
\r
239 gener->SetFragPhotonOrPi0MinPt(ptGammaPi0Min);
\r
240 printf("\n \n Event generator: Minimum pT of particle in calorimeter %f \n \n", ptGammaPi0Min);
\r
242 case kPyGammaBremsEMCAL:
\r
243 comment = comment.Append(" pp->jet + jet+bremsphoton over EMCAL at 14 TeV");
\r
244 gener = new AliGenPythia(nEvts);
\r
245 gener->SetEnergyCMS(eCMS);
\r
246 gener->SetProcess(kPyJets);
\r
247 gener->SetStrucFunc(kCTEQ4L);
\r
248 gener->SetPtHard(ptHardMin,ptHardMax);
\r
249 //gener->SetYHard(-1.0,1.0);
\r
250 gener->SetJetEtaRange(-1,1);
\r
251 gener->SetJetPhiRange(60.,210.); //Over 2 uncovered PHOS modules
\r
252 gener->SetFragPhotonInEMCAL(kTRUE);
\r
253 gener->SetFragPhotonOrPi0MinPt(ptGammaPi0Min);
\r
255 printf("\n \n Event generator: Minimum pT of particle in calorimeter %f \n \n", ptGammaPi0Min);
\r
257 case kPyJetJetFixed:
\r
258 comment = comment.Append(" pp->jet + jet+jet in Fixed bin for testing");
\r
259 gener = new AliGenPythia(nEvts);
\r
260 gener->SetEnergyCMS(14000);// Centre of mass energy
\r
261 gener->SetProcess(kPyJets);// Process type
\r
262 gener->SetJetEtaRange(-1.1, 1.1);// Final state kinematic cuts
\r
263 gener->SetJetPhiRange(0., 360.);
\r
264 gener->SetJetEtRange(95., 105.);
\r
265 gener->SetPtHard(80, 1000);// Pt transfer of the hard scattering
\r
266 gener->SetStrucFunc(kCTEQ5L);
\r
267 gener->SetGluonRadiation(1,1);
\r
270 printf("\n \n Fixed Parameter \n");
\r
278 AliGenerator *MbCocktail();
\r
279 AliGenerator *PyMbTriggered(Int_t pdg);
\r
280 void ProcessEnvironmentVars();
\r
282 // This part for configuration
\r
283 static DecayHvFl_t decHvFl = kNature;
\r
284 static Mag_t mag = k5kG;
\r
285 static TrigConf_t trig = kDefaultPPTrig; // default pp trigger configuration
\r
286 static Int_t runNumber= 0;
\r
287 static Int_t eventNumber= 0;
\r
288 //========================//
\r
289 // Set Random Number seed //
\r
290 //========================//
\r
292 static UInt_t seed = dt.Get();
\r
294 // nEvts = -1 : you get 1 QQbar pair and all the fragmentation and
\r
296 // nEvts = N>0 : you get N charm / beauty Hadrons
\r
298 // stars = kTRUE : all heavy resonances and their decay stored
\r
299 // = kFALSE: only final heavy hadrons and their decays stored
\r
300 Bool_t stars = kTRUE;
\r
302 // To be used only with kCharmpp14000wmi and kBeautypp14000wmi
\r
303 // To get a "reasonable" agreement with MNR results, events have to be
\r
304 // generated with the minimum ptHard set to 2.76 GeV.
\r
305 // To get a "perfect" agreement with MNR results, events have to be
\r
306 // generated in four ptHard bins with the following relative
\r
319 Float_t ptHardMin = 10.;
\r
320 Float_t ptHardMax = 20.;
\r
321 Float_t ptGammaPi0Min = 1.;
\r
322 Int_t iquenching = 0;
\r
323 Float_t qhat = 20.;
\r
326 static TString comment;
\r
332 // Get settings from environment variables
\r
333 ProcessEnvironmentVars();
\r
335 #if defined(__CINT__)
\r
336 gSystem->Load("liblhapdf");
\r
337 gSystem->Load("libEGPythia6");
\r
338 gSystem->Load("libpythia6");
\r
339 gSystem->Load("libAliPythia6");
\r
340 gSystem->Load("libgeant321");
\r
343 new TGeant3TGeo("C++ Interface to Geant3");
\r
345 // Output every 100 tracks
\r
346 ((TGeant3*)gMC)->SetSWIT(4,100);
\r
348 //=======================================================================
\r
350 AliRunLoader* rl=0x0;
\r
351 rl = AliRunLoader::Open("galice.root",
\r
352 AliConfig::GetDefaultEventFolderName(),
\r
356 gAlice->Fatal("Config.C","Can not instatiate the Run Loader");
\r
359 rl->SetCompressionLevel(2);
\r
360 rl->SetNumberOfEventsPerFile(1000);
\r
361 gAlice->SetRunLoader(rl);
\r
364 //gAlice->SetRunNumber(runNumber);
\r
366 // Set the trigger configuration
\r
367 gAlice->SetTriggerDescriptor(TrigConfName[trig]);
\r
368 cout<<"Trigger configuration is set to "<<TrigConfName[trig]<<endl;
\r
371 //=======================================================================
\r
372 // ************* STEERING parameters FOR ALICE SIMULATION **************
\r
373 // --- Specify event type to be tracked through the ALICE setup
\r
374 // --- All positions are in cm, angles in degrees, and P and E in GeV
\r
377 gMC->SetProcess("DCAY",1);
\r
378 gMC->SetProcess("PAIR",1);
\r
379 gMC->SetProcess("COMP",1);
\r
380 gMC->SetProcess("PHOT",1);
\r
381 gMC->SetProcess("PFIS",0);
\r
382 gMC->SetProcess("DRAY",0);
\r
383 gMC->SetProcess("ANNI",1);
\r
384 gMC->SetProcess("BREM",1);
\r
385 gMC->SetProcess("MUNU",1);
\r
386 gMC->SetProcess("CKOV",1);
\r
387 gMC->SetProcess("HADR",1);
\r
388 gMC->SetProcess("LOSS",2);
\r
389 gMC->SetProcess("MULS",1);
\r
390 gMC->SetProcess("RAYL",1);
\r
392 Float_t cut = 1.e-3; // 1MeV cut by default
\r
393 Float_t tofmax = 1.e10;
\r
395 gMC->SetCut("CUTGAM", cut);
\r
396 gMC->SetCut("CUTELE", cut);
\r
397 gMC->SetCut("CUTNEU", cut);
\r
398 gMC->SetCut("CUTHAD", cut);
\r
399 gMC->SetCut("CUTMUO", cut);
\r
400 gMC->SetCut("BCUTE", cut);
\r
401 gMC->SetCut("BCUTM", cut);
\r
402 gMC->SetCut("DCUTE", cut);
\r
403 gMC->SetCut("DCUTM", cut);
\r
404 gMC->SetCut("PPCUTM", cut);
\r
405 gMC->SetCut("TOFMAX", tofmax);
\r
407 //======================//
\r
408 // Set External decayer //
\r
409 //======================//
\r
410 TVirtualMCDecayer* decayer = new AliDecayerPythia();
\r
415 decayer->SetForceDecay(kAll);
\r
418 decayer->SetForceDecay(kHadronicD);
\r
421 decayer->SetForceDecay(kSemiElectronic);
\r
424 decayer->SetForceDecay(kSemiMuonic);
\r
428 gMC->SetExternalDecayer(decayer);
\r
429 if(proc == kPyJetJetPHOSv2) // in this case we decay the pi0
\r
430 decayer->SetForceDecay(kNeutralPion);
\r
432 //=========================//
\r
433 // Generator Configuration //
\r
434 //=========================//
\r
435 AliGenPythia* gener = 0x0;
\r
437 if (proc <= kBeautypp14000wmi) {
\r
438 AliGenPythia *pythia = PythiaHVQ(proc);
\r
440 pythia->SetFeedDownHigherFamily(kFALSE);
\r
441 // Stack filling option
\r
442 if(!stars) pythia->SetStackFillOpt(AliGenPythia::kParentSelection);
\r
444 if(nEvts>0) pythia->SetCountMode(AliGenPythia::kCountParents);
\r
450 pythia->SetForceDecay(kAll);
\r
453 pythia->SetForceDecay(kHadronicD);
\r
456 pythia->SetForceDecay(kSemiElectronic);
\r
459 pythia->SetForceDecay(kSemiMuonic);
\r
463 // GEOM & KINE CUTS
\r
465 pythia->SetMomentumRange(0,99999999);
\r
466 pythia->SetPhiRange(0., 360.);
\r
467 pythia->SetThetaRange(0,180);
\r
470 pythia->SetYRange(-999,999);
\r
473 pythia->SetYRange(-2,2);
\r
476 pythia->SetYRange(1,6);
\r
480 } else if (proc == kPyMbNoHvq) {
\r
481 gener = MbCocktail();
\r
482 } else if (proc == kPyOmegaMinus) {
\r
483 gener = PyMbTriggered(3334);
\r
484 } else if (proc == kPyOmegaPlus) {
\r
485 gener = PyMbTriggered(-3334);
\r
486 } else if (proc <= kPyGammaBremsEMCAL) {
\r
488 AliGenPythia *pythia = Blubb((Int_t) proc );
\r
491 pythia->SetFeedDownHigherFamily(kFALSE);
\r
493 if(nEvts>0) pythia->SetCountMode(AliGenPythia::kCountParents);
\r
496 // GEOM & KINE CUTS
\r
498 pythia->SetMomentumRange(0,99999999);
\r
499 // pythia->SetJetEtaRange(-1.5, 1.5);// Final state kinematic cuts
\r
500 // pythia->SetJetPhiRange(0., 360.);
\r
501 // pythia->SetThetaRange(45,135);
\r
503 if(proc == kPyJetJetPHOSv2)
\r
504 pythia->SetForceDecay(kNeutralPion);
\r
506 pythia->SetForceDecay(kAll);
\r
508 pythia->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
\r
509 pythia->SetPtKick(3.); // set the intrinsic kt to 5 GeV/c
\r
510 pythia->SetGluonRadiation(1,1);
\r
517 gener->SetOrigin(0., 0., 0.); // vertex position
\r
519 // Size of the interaction diamond
\r
521 Float_t sigmaz = 7.55 / TMath::Sqrt(2.); // [cm]
\r
524 Float_t betast = 10; // beta* [m]
\r
525 Float_t eps = 3.75e-6; // emittance [m]
\r
526 Float_t gamma = 7000. / 0.938272; // relativistic gamma [1]
\r
527 Float_t sigmaxy = TMath::Sqrt(eps * betast / gamma) / TMath::Sqrt(2.) * 100.; // [cm]
\r
528 printf("\n \n Diamond size x-y: %10.3e z: %10.3e\n \n", sigmaxy, sigmaz);
\r
530 gener->SetSigma(sigmaxy, sigmaxy, sigmaz); // Sigma in (X,Y,Z) (cm) on IP position
\r
531 gener->SetCutVertexZ(3.); // Truncate at 3 sigma
\r
532 gener->SetVertexSmear(kPerEvent);
\r
537 gener->SetQuench(iquenching);
\r
538 if(iquenching == 1){
\r
539 Float_t k = 6e5*(qhat/1.7) ; //qhat=1.7, k = 6e5, default value
\r
540 AliPythia::Instance()->InitQuenching(0.,0.1,k,0,0.95,6);
\r
545 AliMagF* field = 0x0;
\r
546 if (mag == kNoField) {
\r
547 comment = comment.Append(" | L3 field 0.0 T");
\r
548 field = new AliMagF("Maps","Maps", 0., 0., AliMagF::k5kGUniform);
\r
549 } else if (mag == k5kG) {
\r
550 comment = comment.Append(" | L3 field 0.5 T");
\r
551 // field = new AliMagWrapCheb("Maps","Maps", 2, 1., 10., AliMagWrapCheb::k5kG);
\r
552 field = new AliMagF("Maps","Maps", -1., -1., AliMagF::k5kG);
\r
555 printf("\n \n Comment: %s \n \n", comment.Data());
\r
556 TGeoGlobalMagField::Instance()->SetField(field);
\r
584 //=================== Alice BODY parameters =============================
\r
585 AliBODY *BODY = new AliBODY("BODY", "Alice envelop");
\r
590 //=================== MAG parameters ============================
\r
591 // --- Start with Magnet since detector layouts may be depending ---
\r
592 // --- on the selected Magnet dimensions ---
\r
593 AliMAG *MAG = new AliMAG("MAG", "Magnet");
\r
599 //=================== ABSO parameters ============================
\r
600 AliABSO *ABSO = new AliABSOv3("ABSO", "Muon Absorber");
\r
605 //=================== DIPO parameters ============================
\r
607 AliDIPO *DIPO = new AliDIPOv3("DIPO", "Dipole version 3");
\r
612 //=================== HALL parameters ============================
\r
614 AliHALL *HALL = new AliHALLv3("HALL", "Alice Hall");
\r
620 //=================== FRAME parameters ============================
\r
622 AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame");
\r
623 if (geo == kHoles) FRAME->SetHoles(1);
\r
624 else FRAME->SetHoles(0);
\r
630 //=================== SHIL parameters ============================
\r
632 AliSHIL *SHIL = new AliSHILv3("SHIL", "Shielding Version 3");
\r
638 //=================== PIPE parameters ============================
\r
640 AliPIPE *PIPE = new AliPIPEv3("PIPE", "Beam Pipe");
\r
645 //=================== ITS parameters ============================
\r
647 AliITS *ITS = new AliITSv11Hybrid("ITS","ITS v11Hybrid");
\r
648 // AliITSvPPRasymmFMD *ITS = new AliITSvPPRasymmFMD("ITS","New ITS PPR detailed version with asymmetric services");
\r
653 //============================ TPC parameters =====================
\r
654 AliTPC *TPC = new AliTPCv2("TPC", "Default");
\r
659 //=================== TOF parameters ============================
\r
660 AliTOF *TOF = new AliTOFv6T0("TOF", "normal TOF");
\r
666 //=================== HMPID parameters ===========================
\r
667 // AliHMPID *HMPID = new AliHMPIDv2("HMPID", "normal HMPID");
\r
668 AliHMPID *HMPID = new AliHMPIDv3("HMPID", "normal HMPID");
\r
675 //=================== ZDC parameters ============================
\r
677 AliZDC *ZDC = new AliZDCv3("ZDC", "normal ZDC");
\r
682 //=================== TRD parameters ============================
\r
684 AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator");
\r
685 AliTRDgeometry *geoTRD = TRD->GetGeometry();
\r
686 // Partial geometry: modules at 0,8,9,17
\r
687 // Partial geometry: modules at 1,7,10,16 expected for 2009
\r
688 // starting at 3h in positive direction
\r
691 geoTRD->SetSMstatus(2,0);
\r
692 geoTRD->SetSMstatus(3,0);
\r
693 geoTRD->SetSMstatus(4,0);
\r
694 geoTRD->SetSMstatus(5,0);
\r
695 geoTRD->SetSMstatus(6,0);
\r
696 geoTRD->SetSMstatus(11,0);
\r
697 geoTRD->SetSMstatus(12,0);
\r
698 geoTRD->SetSMstatus(13,0);
\r
699 geoTRD->SetSMstatus(14,0);
\r
700 geoTRD->SetSMstatus(15,0);
\r
706 // Partial geometry: modules at 2,3,4,6,11,12,14,15
\r
707 // starting at 6h in positive direction
\r
708 //Hole on SM 13 and 14 for PHOS
\r
709 geoTRD->SetSMstatus(13,0);
\r
710 geoTRD->SetSMstatus(14,0);
\r
711 geoTRD->SetSMstatus(15,0);
\r
718 //=================== FMD parameters ============================
\r
719 AliFMD *FMD = new AliFMDv1("FMD", "normal FMD");
\r
724 //=================== MUON parameters ===========================
\r
725 // New MUONv1 version (geometry defined via builders)
\r
726 AliMUON *MUON = new AliMUONv1("MUON", "default");
\r
728 //=================== PHOS parameters ===========================
\r
732 AliPHOS *PHOS = new AliPHOSv1("PHOS", "IHEP");
\r
733 // Default for cold phos...
\r
739 //=================== PMD parameters ============================
\r
740 AliPMD *PMD = new AliPMDv1("PMD", "normal PMD");
\r
745 //=================== T0 parameters ============================
\r
746 AliT0 *T0 = new AliT0v1("T0", "T0 Detector");
\r
751 //=================== EMCAL parameters ============================
\r
752 AliEMCAL *EMCAL = new AliEMCALv2("EMCAL", "EMCAL_COMPLETE");
\r
757 //=================== CRT parameters ============================
\r
758 AliACORDE *ACORDE = new AliACORDEv1("CRT", "normal ACORDE");
\r
763 //=================== CRT parameters ============================
\r
764 AliVZERO *VZERO = new AliVZEROv7("VZERO", "normal VZERO");
\r
770 AliGenPythia *PythiaHVQ(PDC07Proc_t proc) {
\r
771 //*******************************************************************//
\r
772 // Configuration file for charm / beauty generation with PYTHIA //
\r
774 // The parameters have been tuned in order to reproduce the inclusive//
\r
775 // heavy quark pt distribution given by the NLO pQCD calculation by //
\r
776 // Mangano, Nason and Ridolfi. //
\r
778 // For details and for the NORMALIZATION of the yields see: //
\r
779 // N.Carrer and A.Dainese, //
\r
780 // "Charm and beauty production at the LHC", //
\r
781 // ALICE-INT-2003-019, [arXiv:hep-ph/0311225]; //
\r
782 // PPR Chapter 6.6, CERN/LHCC 2005-030 (2005). //
\r
783 //*******************************************************************//
\r
784 AliGenPythia * gener = 0x0;
\r
787 case kCharmPbPb5500:
\r
788 comment = comment.Append(" Charm in Pb-Pb at 5.5 TeV");
\r
789 gener = new AliGenPythia(nEvts);
\r
790 gener->SetProcess(kPyCharmPbPbMNR);
\r
791 gener->SetStrucFunc(kCTEQ4L);
\r
792 gener->SetPtHard(2.1,-1.0);
\r
793 gener->SetEnergyCMS(5500.);
\r
794 gener->SetNuclei(208,208);
\r
796 case kCharmpPb8800:
\r
797 comment = comment.Append(" Charm in p-Pb at 8.8 TeV");
\r
798 gener = new AliGenPythia(nEvts);
\r
799 gener->SetProcess(kPyCharmpPbMNR);
\r
800 gener->SetStrucFunc(kCTEQ4L);
\r
801 gener->SetPtHard(2.1,-1.0);
\r
802 gener->SetEnergyCMS(8800.);
\r
803 gener->SetProjectile("P",1,1);
\r
804 gener->SetTarget("Pb",208,82);
\r
806 case kCharmpp14000:
\r
807 comment = comment.Append(" Charm in pp at 14 TeV");
\r
808 gener = new AliGenPythia(nEvts);
\r
809 gener->SetProcess(kPyCharmppMNR);
\r
810 gener->SetStrucFunc(kCTEQ4L);
\r
811 gener->SetPtHard(2.1,-1.0);
\r
812 gener->SetEnergyCMS(14000.);
\r
814 case kCharmpp14000wmi:
\r
815 comment = comment.Append(" Charm in pp at 14 TeV with mult. interactions");
\r
816 gener = new AliGenPythia(-1);
\r
817 gener->SetProcess(kPyCharmppMNRwmi);
\r
818 gener->SetStrucFunc(kCTEQ5L);
\r
819 gener->SetPtHard(ptHardMin,ptHardMax);
\r
820 gener->SetEnergyCMS(14000.);
\r
823 comment = comment.Append(" D0 in Pb-Pb at 5.5 TeV");
\r
824 gener = new AliGenPythia(nEvts);
\r
825 gener->SetProcess(kPyD0PbPbMNR);
\r
826 gener->SetStrucFunc(kCTEQ4L);
\r
827 gener->SetPtHard(2.1,-1.0);
\r
828 gener->SetEnergyCMS(5500.);
\r
829 gener->SetNuclei(208,208);
\r
832 comment = comment.Append(" D0 in p-Pb at 8.8 TeV");
\r
833 gener = new AliGenPythia(nEvts);
\r
834 gener->SetProcess(kPyD0pPbMNR);
\r
835 gener->SetStrucFunc(kCTEQ4L);
\r
836 gener->SetPtHard(2.1,-1.0);
\r
837 gener->SetEnergyCMS(8800.);
\r
838 gener->SetProjectile("P",1,1);
\r
839 gener->SetTarget("Pb",208,82);
\r
842 comment = comment.Append(" D0 in pp at 14 TeV");
\r
843 gener = new AliGenPythia(nEvts);
\r
844 gener->SetProcess(kPyD0ppMNR);
\r
845 gener->SetStrucFunc(kCTEQ4L);
\r
846 gener->SetPtHard(2.1,-1.0);
\r
847 gener->SetEnergyCMS(14000.);
\r
849 case kDPlusPbPb5500:
\r
850 comment = comment.Append(" DPlus in Pb-Pb at 5.5 TeV");
\r
851 gener = new AliGenPythia(nEvts);
\r
852 gener->SetProcess(kPyDPlusPbPbMNR);
\r
853 gener->SetStrucFunc(kCTEQ4L);
\r
854 gener->SetPtHard(2.1,-1.0);
\r
855 gener->SetEnergyCMS(5500.);
\r
856 gener->SetNuclei(208,208);
\r
858 case kDPluspPb8800:
\r
859 comment = comment.Append(" DPlus in p-Pb at 8.8 TeV");
\r
860 gener = new AliGenPythia(nEvts);
\r
861 gener->SetProcess(kPyDPluspPbMNR);
\r
862 gener->SetStrucFunc(kCTEQ4L);
\r
863 gener->SetPtHard(2.1,-1.0);
\r
864 gener->SetEnergyCMS(8800.);
\r
865 gener->SetProjectile("P",1,1);
\r
866 gener->SetTarget("Pb",208,82);
\r
868 case kDPluspp14000:
\r
869 comment = comment.Append(" DPlus in pp at 14 TeV");
\r
870 gener = new AliGenPythia(nEvts);
\r
871 gener->SetProcess(kPyDPlusppMNR);
\r
872 gener->SetStrucFunc(kCTEQ4L);
\r
873 gener->SetPtHard(2.1,-1.0);
\r
874 gener->SetEnergyCMS(14000.);
\r
876 case kBeautyPbPb5500:
\r
877 comment = comment.Append(" Beauty in Pb-Pb at 5.5 TeV");
\r
878 gener = new AliGenPythia(nEvts);
\r
879 gener->SetProcess(kPyBeautyPbPbMNR);
\r
880 gener->SetStrucFunc(kCTEQ4L);
\r
881 gener->SetPtHard(2.75,-1.0);
\r
882 gener->SetEnergyCMS(5500.);
\r
883 gener->SetNuclei(208,208);
\r
885 case kBeautypPb8800:
\r
886 comment = comment.Append(" Beauty in p-Pb at 8.8 TeV");
\r
887 gener = new AliGenPythia(nEvts);
\r
888 gener->SetProcess(kPyBeautypPbMNR);
\r
889 gener->SetStrucFunc(kCTEQ4L);
\r
890 gener->SetPtHard(2.75,-1.0);
\r
891 gener->SetEnergyCMS(8800.);
\r
892 gener->SetProjectile("P",1,1);
\r
893 gener->SetTarget("Pb",208,82);
\r
895 case kBeautypp14000:
\r
896 comment = comment.Append(" Beauty in pp at 14 TeV");
\r
897 gener = new AliGenPythia(nEvts);
\r
898 gener->SetProcess(kPyBeautyppMNR);
\r
899 gener->SetStrucFunc(kCTEQ4L);
\r
900 gener->SetPtHard(2.75,-1.0);
\r
901 gener->SetEnergyCMS(14000.);
\r
903 case kBeautypp14000wmi:
\r
904 comment = comment.Append(" Beauty in pp at 14 TeV with mult. interactions");
\r
905 gener = new AliGenPythia(-1);
\r
906 gener->SetProcess(kPyBeautyppMNRwmi);
\r
907 gener->SetStrucFunc(kCTEQ5L);
\r
908 gener->SetPtHard(ptHardMin,ptHardMax);
\r
909 gener->SetEnergyCMS(14000.);
\r
916 AliGenerator* MbCocktail()
\r
918 comment = comment.Append(" pp at 14 TeV: Pythia low-pt, no heavy quarks + J/Psi from parameterisation");
\r
919 AliGenCocktail * gener = new AliGenCocktail();
\r
920 gener->UsePerEventRates();
\r
924 AliGenPythia* pythia = new AliGenPythia(-1);
\r
925 pythia->SetMomentumRange(0, 999999.);
\r
926 pythia->SetThetaRange(0., 180.);
\r
927 pythia->SetYRange(-12.,12.);
\r
928 pythia->SetPtRange(0,1000.);
\r
929 pythia->SetProcess(kPyMb);
\r
930 pythia->SetEnergyCMS(14000.);
\r
931 pythia->SwitchHFOff();
\r
933 // J/Psi parameterisation
\r
935 AliGenParam* jpsi = new AliGenParam(1, AliGenMUONlib::kJpsi, "CDF scaled", "Jpsi");
\r
936 jpsi->SetPtRange(0.,100.);
\r
937 jpsi->SetYRange(-8., 8.);
\r
938 jpsi->SetPhiRange(0., 360.);
\r
939 jpsi->SetForceDecay(kAll);
\r
941 gener->AddGenerator(pythia, "Pythia", 1.);
\r
942 gener->AddGenerator(jpsi, "J/Psi", 8.e-4);
\r
947 AliGenerator* PyMbTriggered(Int_t pdg)
\r
949 AliGenPythia* pythia = new AliGenPythia(-1);
\r
950 pythia->SetMomentumRange(0, 999999.);
\r
951 pythia->SetThetaRange(0., 180.);
\r
952 pythia->SetYRange(-12.,12.);
\r
953 pythia->SetPtRange(0,1000.);
\r
954 pythia->SetProcess(kPyMb);
\r
955 pythia->SetEnergyCMS(14000.);
\r
956 pythia->SetTriggerParticle(pdg, 0.9);
\r
960 void ProcessEnvironmentVars()
\r
962 cout << "######################################" << endl;
\r
963 cout << "## Processing environment variables ##" << endl;
\r
964 cout << "######################################" << endl;
\r
967 if (gSystem->Getenv("DC_RUN")) {
\r
968 runNumber = atoi(gSystem->Getenv("DC_RUN"));
\r
970 //cout<<"Run number "<<runNumber<<endl;
\r
973 if (gSystem->Getenv("DC_EVENT")) {
\r
974 eventNumber = atoi(gSystem->Getenv("DC_EVENT"));
\r
976 //cout<<"Event number "<<eventNumber<<endl;
\r
978 // Random Number seed
\r
979 if (gSystem->Getenv("CONFIG_SEED")) {
\r
980 seed = atoi(gSystem->Getenv("CONFIG_SEED"));
\r
982 else if(gSystem->Getenv("DC_EVENT") && gSystem->Getenv("DC_RUN")){
\r
983 seed = runNumber * 100000 + eventNumber;
\r
986 gRandom->SetSeed(seed);
\r
988 cout<<"////////////////////////////////////////////////////////////////////////////////////"<<endl;
\r
989 cout<<"Seed for random number generation= "<< seed<<" "<< gRandom->GetSeed()<<endl;
\r
990 cout<<"////////////////////////////////////////////////////////////////////////////////////"<<endl;
\r
993 if (gSystem->Getenv("DC_RUN_TYPE")) {
\r
994 cout<<"run type "<<gSystem->Getenv("DC_RUN_TYPE")<<endl;
\r
995 for (Int_t iRun = 0; iRun < kRunMax; iRun++) {
\r
996 if (strcmp(gSystem->Getenv("DC_RUN_TYPE"), pprRunName[iRun])==0) {
\r
997 proc = (PDC07Proc_t)iRun;
\r
1002 cout << "Environment variable DC_RUN_TYPE is not defined" << endl;
\r
1004 if (gSystem->Getenv("ECMS"))
\r
1005 eCMS = atof(gSystem->Getenv("ECMS"));
\r
1006 if (gSystem->Getenv("PTHARDMIN"))
\r
1007 ptHardMin = atof(gSystem->Getenv("PTHARDMIN"));
\r
1008 if (gSystem->Getenv("PTHARDMAX"))
\r
1009 ptHardMax = atof(gSystem->Getenv("PTHARDMAX"));
\r
1010 if (gSystem->Getenv("PTGAMMAPI0MIN"))
\r
1011 ptGammaPi0Min = atof(gSystem->Getenv("PTGAMMAPI0MIN"));
\r
1012 if (gSystem->Getenv("QUENCHING"))
\r
1013 iquenching = atof(gSystem->Getenv("QUENCHING"));
\r
1014 if (gSystem->Getenv("QHAT"))
\r
1015 qhat = atof(gSystem->Getenv("QHAT"));
\r
1017 cout<<">> Run type set to "<<pprRunName[proc]<<endl;
\r
1018 cout<<">> Collision energy set to "<<eCMS <<endl;
\r
1019 cout<<">> ptHard limits: "<<ptHardMin<<" to " <<ptHardMax<<" GeV"<<endl;
\r
1020 cout<<">> pt gamma/pi0 threshold "<< ptGammaPi0Min<<" GeV "<<endl;
\r
1021 cout<<">> quenching on? "<< iquenching<<" qhat "<<qhat<<endl;
\r
1023 cout << "######################################" << endl;
\r
1024 cout << "######################################" << endl;
\r