Update generator configuration with new nmaes for constants from EVGEN.
[u/mrichter/AliRoot.git] / macros / Config_gener.C
1 enum gentype_t {hijing, hijingParam, gun, box, pythia, 
2                 param1, param2, param3, param4, 
3                 cocktail, fluka, halo, ntuple, scan, doublescan};
4
5 gentype_t gentype=param4;
6
7 ntracks=1;
8
9 void Config()
10 {
11
12 new AliGeant3("C++ Interface to Geant3");
13
14 //=======================================================================
15 //  Create the output file
16    
17 TFile *rootfile = new TFile("galice.root","recreate");
18 rootfile->SetCompressionLevel(2);
19 TGeant3 *geant3 = (TGeant3*)gMC;
20
21 //
22 // Set External decayer
23  AliDecayer* decayer = new AliDecayerPythia();
24  decayer->SetForceDecay(kAll);
25  decayer->Init();
26  gMC->SetExternalDecayer(decayer);
27
28 //=======================================================================
29 // ******* GEANT STEERING parameters FOR ALICE SIMULATION *******
30 geant3->SetTRIG(1); //Number of events to be processed 
31 geant3->SetSWIT(4,10);
32 geant3->SetDEBU(0,0,1);
33 //geant3->SetSWIT(2,2);
34 geant3->SetDCAY(1);
35 geant3->SetPAIR(1);
36 geant3->SetCOMP(1);
37 geant3->SetPHOT(1);
38 geant3->SetPFIS(0);
39 geant3->SetDRAY(0);
40 geant3->SetANNI(1);
41 geant3->SetBREM(1);
42 geant3->SetMUNU(1);
43 geant3->SetCKOV(1);
44 geant3->SetHADR(1); //Select pure GEANH (HADR 1) or GEANH/NUCRIN (HADR 3)
45 geant3->SetLOSS(2);
46 geant3->SetMULS(1);
47 geant3->SetRAYL(1);
48 geant3->SetAUTO(1); //Select automatic STMIN etc... calc. (AUTO 1) or manual (AUTO 0)
49 geant3->SetABAN(0); //Restore 3.16 behaviour for abandoned tracks
50 geant3->SetOPTI(2); //Select optimisation level for GEANT geometry searches (0,1,2)
51 Float_t cut    = 1.e-3; // 1MeV cut by default
52 Float_t tofmax = 1.e10;
53 //             GAM ELEC NHAD CHAD MUON EBREM MUHAB EDEL MUDEL MUPA TOFMAX
54 geant3->SetCUTS(cut,cut, cut, cut, cut, cut,  cut,  cut, cut,  cut, tofmax);
55 //
56 //=======================================================================
57 // ************* STEERING parameters FOR ALICE SIMULATION **************
58 // --- Specify event type to be tracked through the ALICE setup
59 // --- All positions are in cm, angles in degrees, and P and E in GeV
60
61  switch(gentype)
62  {
63  case gun:
64 //*********************************************
65 // Example for Fixed Particle Gun             
66 //*********************************************
67      AliGenFixed *gener = new AliGenFixed(ntracks);
68      gener->SetMomentum(50);
69      gener->SetPhi(180.);
70      gener->SetTheta(5.);
71      gener->SetOrigin(0,0,0);          //vertex position
72      gener->SetPart(13);                //GEANT particle type
73      break;
74  case box:  
75 //*********************************************
76 // Example for Moving Particle Gun            *
77 //*********************************************
78      AliGenBox *gener = new AliGenBox(ntracks);
79      gener->SetMomentumRange(3,4);
80      gener->SetPhiRange(0,360);
81      gener->SetThetaRange(90, 180. );
82      gener->SetOrigin(0,0,0);   
83      //vertex position
84      gener->SetSigma(0,0,0);           //Sigma in (X,Y,Z) (cm) on IP position
85      gener->SetPart(5);                //GEANT particle type
86      break;
87  case scan:  
88 //*********************************************
89 // Scanning on a grid                         *
90 //*********************************************
91      AliGenScan *gener = new AliGenScan(-1);
92      gener->SetMomentumRange(4,4);
93      gener->SetPhiRange(0,360);
94      gener->SetThetaRange(9,9);
95      //vertex position
96      gener->SetSigma(6,6,0);           //Sigma in (X,Y,Z) (cm) on IP position
97      gener->SetPart(5); 
98      gener->SetRange(20, -100, 100, 20, -100, 100, 1, 500, 500);
99      break;
100      
101  case hijingParam:
102      AliGenHIJINGpara *gener = new AliGenHIJINGpara(ntracks);
103      gener->SetMomentumRange(0,999);
104      gener->SetPhiRange(0,360);
105      gener->SetThetaRange(2,10);
106      gener->SetOrigin(0,0,0);        //vertex position
107      gener->SetSigma(0,0,0);         //Sigma in (X,Y,Z) (cm) on IP position
108      break;
109  case hijing:
110      AliGenHijing *gener = new AliGenHijing(-1);
111 // centre of mass energy 
112      gener->SetEnergyCMS(5500);
113 // reference frame
114      gener->SetReferenceFrame("CMS     ");
115 // projectile
116      gener->SetProjectile("A       ", 208, 82);
117      gener->SetTarget    ("A       ", 208, 82);
118 // impact parameter range
119      gener->SetImpactParameterRange(0, 3.);
120 // evaluate cross section before run
121      gener->SetEvaluate(1);
122 // tell hijing to keep the full parent child chain
123      gener->KeepFullEvent();
124 // enable jet quenching
125      gener->SetJetQuenching(1);
126 // enable shadowing
127      gener->SetShadowing(1);
128 // neutral pion and heavy particle decays switched off
129      gener->SetDecaysOff(1);
130 // trigger
131      gener->SetTrigger(0);
132 // kinematic selection
133      gener->SetSelectAll(0);
134 // momentum range
135      gener->SetMomentumRange(0,999);
136 // phi range
137      gener->SetPhiRange(-180,180);
138 // theta range 
139      gener->SetThetaRange(0,180.);
140 // select flavor (0: no, 4: charm+beauty, 5:beauty)
141      gener->SetFlavor(4);
142 //     
143      gener->SetOrigin(0., 0.0 ,0);
144      gener->SetSigma(0,0,5.3);
145      gener->SetVertexSmear(kPerEvent); 
146 // no tracking
147      gener->SetTrackingFlag(0);
148      break;
149      
150  case pythia:
151 //********************************************
152 // Example for Charm  Production with Pythia *
153 //********************************************
154      AliGenPythia *gener = new AliGenPythia(-1);
155 //   final state kinematic cuts
156      gener->SetMomentumRange(0,999);
157      gener->SetPhiRange(-180,180);
158      gener->SetThetaRange(0., 180.);
159      gener->SetYRange(-10,10);
160      gener->SetPtRange(0,100);
161 //   vertex position and smearing 
162      gener->SetOrigin(0,0,0);         // vertex position
163      gener->SetVertexSmear(kPerEvent);
164      gener->SetSigma(0,0,5.6);        // Sigma in (X,Y,Z) (cm) on IP position
165 //   Structure function
166 // DO_Set_1
167 // GRV_LO
168 // GRV_HO
169 // MRS_D_minus
170 // MRS_D0
171 // MRS_G
172 // CTEQ_2pM
173 // CTEQ_4M
174      gener->SetStrucFunc(kGRV_HO);
175 // Select corection for nuclear structure functions
176 //     gener->SetNuclei(208,208);
177 //
178 //   Process type
179 //   charm, beauty, charm_unforced, beauty_unforced, jpsi, jpsi_chi, mb
180      gener->SetProcess(kPyBeauty);
181 //   
182 //   Pt transfer of the hard scattering
183      gener->SetPtHard(0.,5.);
184 //   Decay type (semielectronic, semimuonic, nodecay)
185      gener->SetForceDecay(kSemiElectronic);
186 //   Centre of mass energy 
187      gener->SetEnergyCMS(5500.);
188 //   No Tracking 
189      gener->SetTrackingFlag(0);
190      break;              
191
192  case param1:
193 //*******************************************************
194 // Example for J/psi  Production from  Parameterisation 
195 // using default library (AliMUONlib)                                       
196 //*******************************************************
197      AliGenParam *gener =
198          new AliGenParam(ntracks, AliGenMUONlib::kUpsilon);
199      gener->SetMomentumRange(0,999);
200      gener->SetPtRange(0,999);     
201      gener->SetPhiRange(-180, 180);
202      gener->SetYRange(2.5,4);
203      gener->SetCutOnChild(1);
204      gener->SetChildThetaRange(2,9);
205      gener->SetOrigin(0,0,0);          //vertex position
206      gener->SetSigma(0,0,5.3);         //Sigma in (X,Y,Z) (cm) on IP position
207      gener->SetForceDecay(kDiMuon);
208      gener->SetTrackingFlag(0);
209      break;
210
211  case param2:
212 //*******************************************************
213 // Example for Omega  Production from  Parameterisation 
214 // specifying library.                                       
215 //*******************************************************
216      AliGenParam *gener = new AliGenParam(1000,new AliGenPHOSlib(), 
217                                           AliGenPHOSlib::kOmega);
218      gener->SetWeighting(kNonAnalog);
219      gener->SetForceDecay(kNoDecay);
220      gener->SetPtRange(0,100);
221      gener->SetThetaRange(45,135);
222      gener->SetTrackingFlag(0);
223      break;
224
225  case param3:
226 //*******************************************************
227 // Example for Upsilon  Production from  Parameterisation 
228 // specifying library.                                       
229 // GSI style
230 //*******************************************************
231      AliGenParam *gener = new AliGenParam(1000,new AliGenGSIlib(), 
232                                           AliGenGSIlib::kUpsilon, "MUON");
233      gener->SetMomentumRange(0,999);
234      gener->SetPtRange(0,999);     
235      gener->SetPhiRange(-180, 180);
236      gener->SetYRange(2.5,4);
237      gener->SetCutOnChild(1);
238      gener->SetChildThetaRange(2,9);
239      gener->SetOrigin(0,0,0);          //vertex position
240      gener->SetSigma(0,0,5.3);         //Sigma in (X,Y,Z) (cm) on IP position
241      gener->SetForceDecay(kDiMuon);
242      gener->SetTrackingFlag(0);
243      break;
244      
245  case param4:
246 //*******************************************************
247 // Example for Omega  Production from  Parameterisation 
248 // specifying library.
249 // The alternative way.                                       
250 //*******************************************************
251      AliGenLib* Lib=new AliGenPHOSlib();
252      Int_t iOmega = AliGenPHOSlib::kOmega;
253      AliGenParam *gener = new AliGenParam(50, iOmega,            
254                                           Lib->GetPt(iOmega, ""),
255                                           Lib->GetY (iOmega, ""),
256                                           Lib->GetIp(iOmega, ""));
257      gener->SetWeighting(kNonAnalog);
258      gener->SetForceDecay(kNoDecay);
259      gener->SetTrackingFlag(0);
260      break;
261      
262  case fluka:
263 //*******************************************************
264 // Example for a FLUKA Boundary Source                  *
265 //*******************************************************
266      AliGenFLUKAsource *gener = new AliGenFLUKAsource(-1);
267      gener->SetFileName("$(ALICE_ROOT)/data/all32.root"); 
268      gener->SetPartFlag(9);
269      gener->SetAgeMax(1.e-5);
270 //  31.7 events     
271      gener->SetFraction(0.0315);     
272 //     gener->SetFraction(0.75*0.0315);     
273      rootfile->cd();
274 //     gener->SetPartFlag(10);
275      gener->SetMomentumRange(0,999);
276      gener->SetPhiRange(0,360);
277      gener->SetThetaRange(0., 180.); 
278      gener->SetAgeMax(1.e-5);
279      
280 //  31.7 events     
281 //     gener->SetFraction(0.0315);     
282      break;
283
284  case ntuple:
285 //*******************************************************
286 // Example for reading from a external file                  *
287 //*******************************************************
288      AliGenExtFile *gener = new AliGenExtFile(-1); 
289      gener->SetFileName("$(ALICE_ROOT)/data/dtujet93.root");
290      gener->SetVertexSmear(kPerEvent); 
291      gener->SetTrackingFlag(1);
292      break;
293
294  case halo:
295 //*******************************************************
296 // Example for Tunnel Halo Source                       *
297 //*******************************************************
298      AliGenHalo *gener = new AliGenHalo(ntracks); 
299      gener->SetFileName("/h1/morsch/marsip/marsip5.mu");
300      break;
301      
302  case cocktail:
303 //*******************************************************
304 // Example for a Cocktail                               *
305 //*******************************************************
306      
307      AliGenCocktail *gener = new AliGenCocktail(); 
308
309      gener->SetPhiRange(0,360);
310      gener->SetYRange(2.5,4);
311      gener->SetThetaRange(2,9);
312      gener->SetPtRange(0,10);
313      gener->SetOrigin(0,0,0);          //vertex position
314      gener->SetSigma(0,0,0);           //Sigma in (X,Y,Z) (cm) on IP position
315      gener->SetMomentumRange(0,999);
316
317      AliGenParam *jpsi = new AliGenParam(1,jpsi_p);
318      jpsi->SetForceDecay(dimuon);
319      jpsi->SetCutOnChild(1);
320
321      
322      AliGenFLUKAsource *bg = new AliGenFLUKAsource(-1);
323      bg->AddFile("$(ALICE_ROOT)/data/all32.root"); 
324      rootfile->cd();
325      bg->SetPartFlag(9);
326      bg->SetAgeMax(1.e-5);
327 //  31.7 events     
328 //     gener->SetFraction(0.0315);     
329      bg->SetFraction(0.01*0.0315);     
330       
331      gener->AddGenerator(jpsi,"J/Psi", 1);
332      gener->AddGenerator(bg,"Background",1);
333
334      break;
335  }
336  
337 // Activate this line if you want the vertex smearing to happen
338 // track by track
339 //
340 // gener->SetVertexSmear(kPerTrack); 
341
342 gener->Init();
343
344 gAlice->SetField(-999,2);    //Specify maximum magnetic field in Tesla (neg. ==> default field)
345
346 Int_t iMAG=1;
347
348 //=================== Alice BODY parameters =============================
349 AliBODY *BODY = new AliBODY("BODY","Alice envelop");
350
351
352 if(iMAG) {
353 //=================== MAG parameters ============================
354 // --- Start with Magnet since detector layouts may be depending ---
355 // --- on the selected Magnet dimensions ---
356 AliMAG *MAG  = new AliMAG("MAG","Magnet");
357 }
358 }