1 #if !defined(__CINT__) || defined(__MAKECINT__)
5 #include <TVirtualMC.h>
7 #include "STEER/AliRunLoader.h"
8 #include "STEER/AliRun.h"
9 #include "STEER/AliConfig.h"
10 #include "PYTHIA6/AliDecayerPythia.h"
11 #include "EVGEN/AliGenCocktail.h"
12 #include "EVGEN/AliGenFixed.h"
13 #include "EVGEN/AliGenBox.h"
14 #include "EVGEN/AliGenScan.h"
15 #include "EVGEN/AliGenHIJINGpara.h"
16 #include "THijing/AliGenHijing.h"
17 #include "PYTHIA6/AliGenPythia.h"
18 #include "THerwig/AliGenHerwig.h"
19 #include "TIsajet/AliGenIsajet.h"
20 #include "TDPMjet/AliGenDPMjet.h"
21 #include "EVGEN/AliGenParam.h"
22 #include "EVGEN/AliGenMUONlib.h"
23 #include "EVGEN/AliGenPHOSlib.h"
24 #include "EVGEN/AliGenGSIlib.h"
25 #include "EVGEN/AliGenFLUKAsource.h"
26 #include "EVGEN/AliGenExtFile.h"
27 #include "EVGEN/AliGenHalo.h"
28 #include "EVGEN/AliGenReaderTreeK.h"
29 #include "STRUCT/AliBODY.h"
30 #include "STRUCT/AliMAG.h"
34 enum gentype_t {hijing, hijingParam, gun, box, pythia, herwig,
35 param1, param2, param3, param4,
36 cocktail, fluka, halo, ntuple, scan, isajet, dpmjet};
38 gentype_t gentype = dpmjet;
45 // Set Random Number seed
46 gRandom->SetSeed(12345); //Set 0 to use the current time
47 cout<<"Seed for random number generation= "<<gRandom->GetSeed()<<endl;
50 // libraries required by geant321
52 gSystem->Load("libgeant321");
54 gSystem->Load("libherwig.so");
55 gSystem->Load("libTHerwig.so");
56 gSystem->Load("libisajet.so");
57 gSystem->Load("libTIsajet.so");
58 gSystem->Load("libdpmjet.so");
59 gSystem->Load("libTDPMjet.so");
61 new TGeant3TGeo("C++ Interface to Geant3");
63 //=======================================================================
64 // Create the output file
68 cout<<"Config.C: Creating Run Loader ..."<<endl;
69 rl = AliRunLoader::Open("galice.root",
70 AliConfig::GetDefaultEventFolderName(),
74 gAlice->Fatal("Config.C","Can not instatiate the Run Loader");
77 rl->SetCompressionLevel(2);
78 rl->SetNumberOfEventsPerFile(100);
79 gAlice->SetRunLoader(rl);
82 // Set External decayer
83 AliDecayer* decayer = new AliDecayerPythia();
84 decayer->SetForceDecay(kAll);
86 gMC->SetExternalDecayer(decayer);
90 //=======================================================================
91 // ************* STEERING parameters FOR ALICE SIMULATION **************
92 // --- Specify event type to be tracked through the ALICE setup
93 // --- All positions are in cm, angles in degrees, and P and E in GeV
96 gMC->SetProcess("DCAY",1);
97 gMC->SetProcess("PAIR",1);
98 gMC->SetProcess("COMP",1);
99 gMC->SetProcess("PHOT",1);
100 gMC->SetProcess("PFIS",0);
101 gMC->SetProcess("DRAY",0);
102 gMC->SetProcess("ANNI",1);
103 gMC->SetProcess("BREM",1);
104 gMC->SetProcess("MUNU",1);
105 gMC->SetProcess("CKOV",1);
106 gMC->SetProcess("HADR",1);
107 gMC->SetProcess("LOSS",2);
108 gMC->SetProcess("MULS",1);
109 gMC->SetProcess("RAYL",1);
111 Float_t cut = 1.e-3; // 1MeV cut by default
112 Float_t tofmax = 1.e10;
114 gMC->SetCut("CUTGAM", cut);
115 gMC->SetCut("CUTELE", cut);
116 gMC->SetCut("CUTNEU", cut);
117 gMC->SetCut("CUTHAD", cut);
118 gMC->SetCut("CUTMUO", cut);
119 gMC->SetCut("BCUTE", cut);
120 gMC->SetCut("BCUTM", cut);
121 gMC->SetCut("DCUTE", cut);
122 gMC->SetCut("DCUTM", cut);
123 gMC->SetCut("PPCUTM", cut);
124 gMC->SetCut("TOFMAX", tofmax);
127 AliGenerator * gGener = 0x0;
131 //*********************************************
132 // Example for Fixed Particle Gun
133 //*********************************************
135 AliGenFixed *gener = new AliGenFixed(ntracks);
136 gener->SetMomentum(50);
139 gener->SetOrigin(0,0,0); //vertex position
140 gener->SetPart(13); //GEANT particle type
145 //*********************************************
146 // Example for Moving Particle Gun *
147 //*********************************************
149 AliGenBox *gener = new AliGenBox(ntracks);
150 gener->SetMomentumRange(3,4);
151 gener->SetPhiRange(0,360);
152 gener->SetThetaRange(90, 180. );
153 gener->SetOrigin(0,0,0);
155 gener->SetSigma(0,0,0); //Sigma in (X,Y,Z) (cm) on IP position
156 gener->SetPart(5); //GEANT particle type
161 //*********************************************
162 // Scanning on a grid *
163 //*********************************************
165 AliGenScan *gener = new AliGenScan(-1);
166 gener->SetMomentumRange(4,4);
167 gener->SetPhiRange(0,360);
168 gener->SetThetaRange(9,9);
170 gener->SetSigma(6,6,0); //Sigma in (X,Y,Z) (cm) on IP position
172 gener->SetRange(20, -100, 100, 20, -100, 100, 1, 500, 500);
179 AliGenHIJINGpara *gener = new AliGenHIJINGpara(ntracks);
180 gener->SetMomentumRange(0,999);
181 gener->SetPhiRange(0,360);
182 gener->SetThetaRange(2,10);
183 gener->SetOrigin(0,0,0); //vertex position
184 gener->SetSigma(0,0,0); //Sigma in (X,Y,Z) (cm) on IP position
190 AliGenHijing *gener = new AliGenHijing(-1);
191 // centre of mass energy
192 gener->SetEnergyCMS(5500);
194 gener->SetReferenceFrame("CMS ");
196 gener->SetProjectile("A ", 208, 82);
197 gener->SetTarget ("A ", 208, 82);
198 // impact parameter range
199 gener->SetImpactParameterRange(0, 3.);
200 // evaluate cross section before run
201 gener->SetEvaluate(0);
202 // tell hijing to keep the full parent child chain
203 gener->KeepFullEvent();
204 // enable jet quenching
205 gener->SetJetQuenching(1);
207 gener->SetShadowing(1);
208 // neutral pion and heavy particle decays switched off
209 gener->SetDecaysOff(1);
211 gener->SetTrigger(0);
212 // kinematic selection
213 gener->SetSelectAll(0);
215 gener->SetMomentumRange(0,999);
217 gener->SetPhiRange(0.,360.);
219 gener->SetThetaRange(0,180.);
220 // select flavor (0: no, 4: charm+beauty, 5:beauty)
223 gener->SetOrigin(0., 0.0 ,0);
224 gener->SetSigma(0,0,5.3);
225 gener->SetVertexSmear(kPerEvent);
227 gener->SetTrackingFlag(0);
233 //********************************************
234 // Example for Charm Production with Pythia *
235 //********************************************
237 AliGenPythia *gener = new AliGenPythia(-1);
238 // final state kinematic cuts
239 gener->SetMomentumRange(0,999);
240 gener->SetPhiRange(0. ,360.);
241 gener->SetThetaRange(0., 180.);
242 gener->SetYRange(-10,10);
243 gener->SetPtRange(0,100);
244 // vertex position and smearing
245 gener->SetOrigin(0,0,0); // vertex position
246 gener->SetVertexSmear(kPerEvent);
247 gener->SetSigma(0,0,5.6); // Sigma in (X,Y,Z) (cm) on IP position
248 // Structure function. See the list in EVGEN/AliStructFuncType.h
249 gener->SetStrucFunc(kGRVHO);
250 // Select corection for nuclear structure functions
251 // gener->SetNuclei(208,208);
253 // Process type. See the list in PYTHIA6/AliPythia.h
254 gener->SetProcess(kPyBeauty);
256 // Pt transfer of the hard scattering
257 gener->SetPtHard(0.,5.);
258 // Decay type (semielectronic, semimuonic, nodecay)
259 gener->SetForceDecay(kSemiElectronic);
260 // Centre of mass energy
261 gener->SetEnergyCMS(5500.);
263 gener->SetTrackingFlag(0);
269 //********************************************
270 // Example for Charm Production with Pythia *
271 //********************************************
273 AliGenHerwig *gener = new AliGenHerwig(-1);
274 // final state kinematic cuts
275 gener->SetMomentumRange(0,7000);
276 gener->SetPhiRange(0. ,360.);
277 gener->SetThetaRange(0., 180.);
278 gener->SetYRange(-10,10);
279 gener->SetPtRange(0,7000);
280 // vertex position and smearing
281 gener->SetOrigin(0,0,0); // vertex position
282 gener->SetVertexSmear(kPerEvent);
283 gener->SetSigma(0,0,5.6); // Sigma in (X,Y,Z) (cm) on IP position
285 gener->SetBeamMomenta(7000,7000);
287 gener->SetProjectile("P");
288 gener->SetTarget("P");
289 // Structure function
290 gener->SetStrucFunc(kGRVHO);
292 gener->SetPtHardMin(200);
295 gener->SetProcess(8000);
297 gener->SetTrackingFlag(0);
302 AliGenIsajet *gener = new AliGenIsajet(-1);
306 AliGenDPMjet *gener = new AliGenDPMjet(-1);
307 //kDpmSingleDiffr, kDpmDoubleDiffr, kDpmDiffr, kDpmNonDiffr
308 gener->SetProcess(kDpmMb);
315 //*******************************************************
316 // Example for J/psi Production from Parameterisation
317 // using default library (AliMUONlib)
318 //*******************************************************
321 new AliGenParam(ntracks, AliGenMUONlib::kUpsilon);
322 gener->SetMomentumRange(0,999);
323 gener->SetPtRange(0,999);
324 gener->SetPhiRange(0. , 360.);
325 gener->SetYRange(2.5,4);
326 gener->SetCutOnChild(1);
327 gener->SetChildThetaRange(2,9);
328 gener->SetOrigin(0,0,0); //vertex position
329 gener->SetSigma(0,0,5.3); //Sigma in (X,Y,Z) (cm) on IP position
330 gener->SetForceDecay(kDiMuon);
331 gener->SetTrackingFlag(0);
337 //*******************************************************
338 // Example for Omega Production from Parameterisation
339 // specifying library.
340 //*******************************************************
342 AliGenParam *gener = new AliGenParam(1000,new AliGenPHOSlib(),
343 AliGenPHOSlib::kOmega);
344 gener->SetWeighting(kNonAnalog);
345 gener->SetForceDecay(kNoDecay);
346 gener->SetPtRange(0,100);
347 gener->SetThetaRange(45,135);
348 gener->SetTrackingFlag(0);
354 //*******************************************************
355 // Example for Upsilon Production from Parameterisation
356 // specifying library.
358 //*******************************************************
360 AliGenParam *gener = new AliGenParam(1000,new AliGenGSIlib(),
361 AliGenGSIlib::kUpsilon, "MUON");
362 gener->SetMomentumRange(0,999);
363 gener->SetPtRange(0,999);
364 gener->SetPhiRange(0., 360.);
365 gener->SetYRange(2.5,4);
366 gener->SetCutOnChild(1);
367 gener->SetChildThetaRange(2,9);
368 gener->SetOrigin(0,0,0); //vertex position
369 gener->SetSigma(0,0,5.3); //Sigma in (X,Y,Z) (cm) on IP position
370 gener->SetForceDecay(kDiMuon);
371 gener->SetTrackingFlag(0);
377 //*******************************************************
378 // Example for Omega Production from Parameterisation
379 // specifying library.
380 // The alternative way.
381 //*******************************************************
383 AliGenLib* Lib=new AliGenPHOSlib();
384 Int_t iOmega = AliGenPHOSlib::kOmega;
385 AliGenParam *gener = new AliGenParam(50, iOmega,
386 Lib->GetPt(iOmega, ""),
387 Lib->GetY (iOmega, ""),
388 Lib->GetIp(iOmega, ""));
389 gener->SetPtRange(0,999);
390 gener->SetWeighting(kNonAnalog);
391 gener->SetForceDecay(kNoDecay);
392 gener->SetTrackingFlag(0);
398 //*******************************************************
399 // Example for a FLUKA Boundary Source *
400 //*******************************************************
402 AliGenFLUKAsource *gener = new AliGenFLUKAsource(-1);
403 gener->SetFileName("$(ALICE_ROOT)/data/all32.root");
404 gener->SetPartFlag(9);
405 gener->SetAgeMax(1.e-5);
407 gener->SetFraction(0.0315);
408 // gener->SetFraction(0.75*0.0315);
410 // gener->SetPartFlag(10);
411 gener->SetMomentumRange(0,999);
412 gener->SetPhiRange(0.,360.);
413 gener->SetThetaRange(0., 180.);
414 gener->SetAgeMax(1.e-5);
417 // gener->SetFraction(0.0315);
423 //*******************************************************
424 // Example for reading from a external file *
425 //*******************************************************
427 AliGenExtFile *gener = new AliGenExtFile(-1);
428 gener->SetVertexSmear(kPerEvent);
429 gener->SetTrackingFlag(1);
431 AliGenReaderTreeK * reader = new AliGenReaderTreeK();
432 reader->SetFileName("$(ALICE_ROOT)/data/dtujet93.root");
433 gener->SetReader(reader);
439 //*******************************************************
440 // Example for Tunnel Halo Source *
441 //*******************************************************
443 AliGenHalo *gener = new AliGenHalo(ntracks);
444 gener->SetFileName("/h1/morsch/marsip/marsip5.mu");
450 //*******************************************************
451 // Example for a Cocktail *
452 //*******************************************************
454 AliGenCocktail *gener = new AliGenCocktail();
456 gener->SetPhiRange(0,360);
457 gener->SetYRange(2.5,4);
458 gener->SetThetaRange(2,9);
459 gener->SetPtRange(0,10);
460 gener->SetOrigin(0,0,0); //vertex position
461 gener->SetSigma(0,0,0); //Sigma in (X,Y,Z) (cm) on IP position
462 gener->SetMomentumRange(0,999);
464 AliGenParam *jpsi = new AliGenParam(1,AliGenMUONlib::kJpsi);
465 jpsi->SetForceDecay(kDiMuon);
466 jpsi->SetCutOnChild(1);
469 AliGenFLUKAsource *bg = new AliGenFLUKAsource(-1);
470 bg->AddFile("$(ALICE_ROOT)/data/all32.root");
473 bg->SetAgeMax(1.e-5);
475 // gener->SetFraction(0.0315);
476 bg->SetFraction(0.01*0.0315);
478 gener->AddGenerator(jpsi,"J/Psi", 1);
479 gener->AddGenerator(bg,"Background",1);
486 // Activate this line if you want the vertex smearing to happen
489 // gener->SetVertexSmear(kPerTrack);
493 gAlice->SetField(-999,2); //Specify maximum magnetic field in Tesla (neg. ==> default field)
498 //=================== Alice BODY parameters =============================
499 AliBODY *BODY = new AliBODY("BODY","Alice envelop");
503 //=================== MAG parameters ============================
504 // --- Start with Magnet since detector layouts may be depending ---
505 // --- on the selected Magnet dimensions ---
506 AliMAG *MAG = new AliMAG("MAG","Magnet");