1 enum gentype_t {hijing, hijingParam, gun, box, pythia,
2 param1, param2, param3, param4,
3 cocktail, fluka, halo, ntuple, scan, doublescan};
5 gentype_t gentype=param4;
12 // libraries required by geant321
13 gSystem->Load("libgeant321");
15 new TGeant3("C++ Interface to Geant3");
17 //=======================================================================
18 // Create the output file
20 TFile *rootfile = new TFile("galice.root","recreate");
21 rootfile->SetCompressionLevel(2);
22 TGeant3 *geant3 = (TGeant3*)gMC;
25 // Set External decayer
26 AliDecayer* decayer = new AliDecayerPythia();
27 decayer->SetForceDecay(kAll);
29 gMC->SetExternalDecayer(decayer);
31 //=======================================================================
32 // ******* GEANT STEERING parameters FOR ALICE SIMULATION *******
33 geant3->SetTRIG(1); //Number of events to be processed
34 geant3->SetSWIT(4,10);
35 geant3->SetDEBU(0,0,1);
36 //geant3->SetSWIT(2,2);
47 geant3->SetHADR(1); //Select pure GEANH (HADR 1) or GEANH/NUCRIN (HADR 3)
51 geant3->SetAUTO(1); //Select automatic STMIN etc... calc. (AUTO 1) or manual (AUTO 0)
52 geant3->SetABAN(0); //Restore 3.16 behaviour for abandoned tracks
53 geant3->SetOPTI(2); //Select optimisation level for GEANT geometry searches (0,1,2)
54 Float_t cut = 1.e-3; // 1MeV cut by default
55 Float_t tofmax = 1.e10;
56 // GAM ELEC NHAD CHAD MUON EBREM MUHAB EDEL MUDEL MUPA TOFMAX
57 geant3->SetCUTS(cut,cut, cut, cut, cut, cut, cut, cut, cut, cut, tofmax);
59 //=======================================================================
60 // ************* STEERING parameters FOR ALICE SIMULATION **************
61 // --- Specify event type to be tracked through the ALICE setup
62 // --- All positions are in cm, angles in degrees, and P and E in GeV
67 //*********************************************
68 // Example for Fixed Particle Gun
69 //*********************************************
70 AliGenFixed *gener = new AliGenFixed(ntracks);
71 gener->SetMomentum(50);
74 gener->SetOrigin(0,0,0); //vertex position
75 gener->SetPart(13); //GEANT particle type
78 //*********************************************
79 // Example for Moving Particle Gun *
80 //*********************************************
81 AliGenBox *gener = new AliGenBox(ntracks);
82 gener->SetMomentumRange(3,4);
83 gener->SetPhiRange(0,360);
84 gener->SetThetaRange(90, 180. );
85 gener->SetOrigin(0,0,0);
87 gener->SetSigma(0,0,0); //Sigma in (X,Y,Z) (cm) on IP position
88 gener->SetPart(5); //GEANT particle type
91 //*********************************************
92 // Scanning on a grid *
93 //*********************************************
94 AliGenScan *gener = new AliGenScan(-1);
95 gener->SetMomentumRange(4,4);
96 gener->SetPhiRange(0,360);
97 gener->SetThetaRange(9,9);
99 gener->SetSigma(6,6,0); //Sigma in (X,Y,Z) (cm) on IP position
101 gener->SetRange(20, -100, 100, 20, -100, 100, 1, 500, 500);
105 AliGenHIJINGpara *gener = new AliGenHIJINGpara(ntracks);
106 gener->SetMomentumRange(0,999);
107 gener->SetPhiRange(0,360);
108 gener->SetThetaRange(2,10);
109 gener->SetOrigin(0,0,0); //vertex position
110 gener->SetSigma(0,0,0); //Sigma in (X,Y,Z) (cm) on IP position
113 AliGenHijing *gener = new AliGenHijing(-1);
114 // centre of mass energy
115 gener->SetEnergyCMS(5500);
117 gener->SetReferenceFrame("CMS ");
119 gener->SetProjectile("A ", 208, 82);
120 gener->SetTarget ("A ", 208, 82);
121 // impact parameter range
122 gener->SetImpactParameterRange(0, 3.);
123 // evaluate cross section before run
124 gener->SetEvaluate(1);
125 // tell hijing to keep the full parent child chain
126 gener->KeepFullEvent();
127 // enable jet quenching
128 gener->SetJetQuenching(1);
130 gener->SetShadowing(1);
131 // neutral pion and heavy particle decays switched off
132 gener->SetDecaysOff(1);
134 gener->SetTrigger(0);
135 // kinematic selection
136 gener->SetSelectAll(0);
138 gener->SetMomentumRange(0,999);
140 gener->SetPhiRange(0,360);
142 gener->SetThetaRange(0,180.);
143 // select flavor (0: no, 4: charm+beauty, 5:beauty)
146 gener->SetOrigin(0., 0.0 ,0);
147 gener->SetSigma(0,0,5.3);
148 gener->SetVertexSmear(kPerEvent);
150 gener->SetTrackingFlag(0);
154 //********************************************
155 // Example for Charm Production with Pythia *
156 //********************************************
157 AliGenPythia *gener = new AliGenPythia(-1);
158 // final state kinematic cuts
159 gener->SetMomentumRange(0,999);
160 gener->SetPhiRange(0, 360);
161 gener->SetThetaRange(0., 180.);
162 gener->SetYRange(-10,10);
163 gener->SetPtRange(0,100);
164 // vertex position and smearing
165 gener->SetOrigin(0,0,0); // vertex position
166 gener->SetVertexSmear(kPerEvent);
167 gener->SetSigma(0,0,5.6); // Sigma in (X,Y,Z) (cm) on IP position
168 // Structure function
177 gener->SetStrucFunc(kGRVHO);
178 // Select corection for nuclear structure functions
179 // gener->SetNuclei(208,208);
182 // charm, beauty, charm_unforced, beauty_unforced, jpsi, jpsi_chi, mb
183 gener->SetProcess(kPyBeauty);
185 // Pt transfer of the hard scattering
186 gener->SetPtHard(0.,5.);
187 // Decay type (semielectronic, semimuonic, nodecay)
188 gener->SetForceDecay(kSemiElectronic);
189 // Centre of mass energy
190 gener->SetEnergyCMS(5500.);
192 gener->SetTrackingFlag(0);
196 //*******************************************************
197 // Example for J/psi Production from Parameterisation
198 // using default library (AliMUONlib)
199 //*******************************************************
201 new AliGenParam(ntracks, AliGenMUONlib::kUpsilon);
202 gener->SetMomentumRange(0,999);
203 gener->SetPtRange(0,999);
204 gener->SetPhiRange(0, 360);
205 gener->SetYRange(2.5,4);
206 gener->SetCutOnChild(1);
207 gener->SetChildThetaRange(2,9);
208 gener->SetOrigin(0,0,0); //vertex position
209 gener->SetSigma(0,0,5.3); //Sigma in (X,Y,Z) (cm) on IP position
210 gener->SetForceDecay(kDiMuon);
211 gener->SetTrackingFlag(0);
215 //*******************************************************
216 // Example for Omega Production from Parameterisation
217 // specifying library.
218 //*******************************************************
219 AliGenParam *gener = new AliGenParam(1000,new AliGenPHOSlib(),
220 AliGenPHOSlib::kOmega);
221 gener->SetWeighting(kNonAnalog);
222 gener->SetForceDecay(kNoDecay);
223 gener->SetPtRange(0,100);
224 gener->SetThetaRange(45,135);
225 gener->SetTrackingFlag(0);
229 //*******************************************************
230 // Example for Upsilon Production from Parameterisation
231 // specifying library.
233 //*******************************************************
234 AliGenParam *gener = new AliGenParam(1000,new AliGenGSIlib(),
235 AliGenGSIlib::kUpsilon, "MUON");
236 gener->SetMomentumRange(0,999);
237 gener->SetPtRange(0,999);
238 gener->SetPhiRange(0, 360);
239 gener->SetYRange(2.5,4);
240 gener->SetCutOnChild(1);
241 gener->SetChildThetaRange(2,9);
242 gener->SetOrigin(0,0,0); //vertex position
243 gener->SetSigma(0,0,5.3); //Sigma in (X,Y,Z) (cm) on IP position
244 gener->SetForceDecay(kDiMuon);
245 gener->SetTrackingFlag(0);
249 //*******************************************************
250 // Example for Omega Production from Parameterisation
251 // specifying library.
252 // The alternative way.
253 //*******************************************************
254 AliGenLib* Lib=new AliGenPHOSlib();
255 Int_t iOmega = AliGenPHOSlib::kOmega;
256 AliGenParam *gener = new AliGenParam(50, iOmega,
257 Lib->GetPt(iOmega, ""),
258 Lib->GetY (iOmega, ""),
259 Lib->GetIp(iOmega, ""));
260 gener->SetWeighting(kNonAnalog);
261 gener->SetForceDecay(kNoDecay);
262 gener->SetTrackingFlag(0);
266 //*******************************************************
267 // Example for a FLUKA Boundary Source *
268 //*******************************************************
269 AliGenFLUKAsource *gener = new AliGenFLUKAsource(-1);
270 gener->SetFileName("$(ALICE_ROOT)/data/all32.root");
271 gener->SetPartFlag(9);
272 gener->SetAgeMax(1.e-5);
274 gener->SetFraction(0.0315);
275 // gener->SetFraction(0.75*0.0315);
277 // gener->SetPartFlag(10);
278 gener->SetMomentumRange(0,999);
279 gener->SetPhiRange(0,360);
280 gener->SetThetaRange(0., 180.);
281 gener->SetAgeMax(1.e-5);
284 // gener->SetFraction(0.0315);
288 //*******************************************************
289 // Example for reading from a external file *
290 //*******************************************************
291 AliGenExtFile *gener = new AliGenExtFile(-1);
292 gener->SetFileName("$(ALICE_ROOT)/data/dtujet93.root");
293 gener->SetVertexSmear(kPerEvent);
294 gener->SetTrackingFlag(1);
298 //*******************************************************
299 // Example for Tunnel Halo Source *
300 //*******************************************************
301 AliGenHalo *gener = new AliGenHalo(ntracks);
302 gener->SetFileName("/h1/morsch/marsip/marsip5.mu");
306 //*******************************************************
307 // Example for a Cocktail *
308 //*******************************************************
310 AliGenCocktail *gener = new AliGenCocktail();
312 gener->SetPhiRange(0,360);
313 gener->SetYRange(2.5,4);
314 gener->SetThetaRange(2,9);
315 gener->SetPtRange(0,10);
316 gener->SetOrigin(0,0,0); //vertex position
317 gener->SetSigma(0,0,0); //Sigma in (X,Y,Z) (cm) on IP position
318 gener->SetMomentumRange(0,999);
320 AliGenParam *jpsi = new AliGenParam(1,jpsi_p);
321 jpsi->SetForceDecay(dimuon);
322 jpsi->SetCutOnChild(1);
325 AliGenFLUKAsource *bg = new AliGenFLUKAsource(-1);
326 bg->AddFile("$(ALICE_ROOT)/data/all32.root");
329 bg->SetAgeMax(1.e-5);
331 // gener->SetFraction(0.0315);
332 bg->SetFraction(0.01*0.0315);
334 gener->AddGenerator(jpsi,"J/Psi", 1);
335 gener->AddGenerator(bg,"Background",1);
340 // Activate this line if you want the vertex smearing to happen
343 // gener->SetVertexSmear(kPerTrack);
347 gAlice->SetField(-999,2); //Specify maximum magnetic field in Tesla (neg. ==> default field)
351 //=================== Alice BODY parameters =============================
352 AliBODY *BODY = new AliBODY("BODY","Alice envelop");
356 //=================== MAG parameters ============================
357 // --- Start with Magnet since detector layouts may be depending ---
358 // --- on the selected Magnet dimensions ---
359 AliMAG *MAG = new AliMAG("MAG","Magnet");