FairRoot/PandaRoot
run_sim_complete.C
Go to the documentation of this file.
1 int run_sim_complete(TString FileName="test",Int_t lambdadiskposition=0, Double_t Momenta = 1.642, Int_t nEvents=100000,Int_t DecayModel=1,Int_t Seed=6){
2 
3  // This script should simulate the decay p pbar -> lambda lambdabar -> p pbar pi+ pi- with the hole panda detector.
4  // The default beam momenta is 1.642, since the dataset for the parametrisation of the decay was recorded with this momenta.
5 
6 
7  //---- User Settings ------------------------------------------------------------
8 
9  // choose your simulation seed
10  gRandom->SetSeed(Seed);
11 
12  gDebug=0;
13 
14  TString MediaFile = "media_pnd.geo";
15 
16  Bool_t VisTrack = kTRUE;
17 
18  Bool_t SetStoreTree = kTRUE;
19 
20  Double_t BeamMomentum = 15.0; // beam momentum ONLY for the scaling of the dipole field. For the generator use "mom"
21 
22  // choose your simulation engine
23  TString SimEngine = "TGeant3";
24 
25  // choose your event generator
26  Bool_t UseEvtGen = kFALSE;
27  Bool_t UseEvtGenDirect = kTRUE;
28  Bool_t UseDpm = kFALSE;
29  Bool_t UseBoxGenerator = kFALSE;
30 
31  //options for Dpm
32  Int_t Mode = 1; // 0 = No elastic scattering, only inelastic
33  // 1 = Elastic and inelastic interactions
34  // 2 = Ony elatstic scattering, no inelastic one
35 
36  // options for EvtGen + EvtGenDirect
37  // TString EvtDecayFile = gSystem->Getenv("VMCWORKDIR");
38  // EvtDecayFile +="/macro/run/2pipi.dec";
39  if(DecayModel==0)
40  {
41  TString EvtDecayFile = "llbar_EvtModel_PHSP.DEC";
42  }
43  else if(DecayModel==1)
44  {
45  TString EvtDecayFile = "llbar_EvtModel_LambdaLambdaBarPol_1-642.DEC";
46  }
47  else if(DecayModel==2)
48  {
49  TString EvtDecayFile = "llbar_EvtModel_LambdaLambdaBarPol_1-918.DEC";
50  }
51  else if(DecayModel==3)
52  {
53  TString EvtDecayFile = "llbar_EvtModel_LambdaLambdaBarPol_6.DEC";
54  }
55  else if(DecayModel==4)
56  {
57  TString EvtDecayFile = "llbar_EvtModel_LambdaLambdaBar_1-642.DEC";
58  }
59  else if(DecayModel==5)
60  {
61  TString EvtDecayFile = "llbar_EvtModel_LambdaLambdaBar_1-918.DEC";
62  }
63  else if(DecayModel==6)
64  {
65  TString EvtDecayFile = "llbar_EvtModel_LambdaLambdaBar_6.DEC";
66  }
67  else if(DecayModel==7)
68  {
69  TString EvtDecayFile = "llbar_EvtModel_LambdaLambdaBarHE.DEC";
70 
71  }
72 
73  else
74  {
75  TString EvtDecayFile = "llbar_EvtModel_PHSP.DEC";
76  }
77 
78  // options for BoxGenerator
79  Int_t Particle = 22; // DPG Code http://pdg.lbl.gov/2012/mcdata/mc_particle_id_contents.html
80  Int_t Multiplicity = 1;
81  Double_t PRangeMin = Momenta; // GeV/c
82  Double_t PRangeMax = Momenta; // GeV/c
83  Bool_t CosTheta = kTRUE;
84  Double_t PhiRangeMin = 0.; // Azimuth angle range [degree]
85  Double_t PhiRangeMax = 360.;// Azimuth angle range [degree]
86  Double_t ThetaRangeMin = 0.; // Polar angle in lab system range [degree]
87  Double_t ThetaRangeMax = 90.; // Polar angle in lab system range [degree]
88  Double_t VertexX = 0.; // cm
89  Double_t VertexY = 0.; // cm
90  Double_t VertexZ = 0.; // cm
91 
92  //================================================================================
93  //================================================================================
94 
95  TStopwatch timer;
96  timer.Start();
97 
98  // Load basic libraries
99  gROOT->LoadMacro("$VMCWORKDIR/gconfig/rootlogon.C");
100  rootlogon();
101 
102  // File Names
104  TString outputFile = creator.GetSimFileName();
105  TString parFile = creator.GetParFileName();
106  TString digiFile = "all.par"; //The emc run the hit producer directly
107 
108  // Create the simulation run manager
109  FairRunSim *fRun = new FairRunSim();
110  fRun->SetStoreTraj(VisTrack);
111  fRun->SetName(SimEngine.Data());
112  fRun->SetOutputFile(outputFile);
113  fRun->SetBeamMom(BeamMomentum);
114  fRun->SetMaterials(MediaFile.Data());
115  FairRuntimeDb* rtdb = fRun->GetRuntimeDb();
116 
117  // Set the parameters
118  TString allDigiFile = gSystem->Getenv("VMCWORKDIR");
119  allDigiFile += "/macro/params/";
120  allDigiFile += digiFile;
121 
122  // Set the parameter output
123  FairParAsciiFileIo* parIo1 = new FairParAsciiFileIo();
124  parIo1->open(allDigiFile.Data(),"in");
125  rtdb->setFirstInput(parIo1);
126  Bool_t kParameterMerged=kTRUE;
127  FairParRootFileIo* output=new FairParRootFileIo(kParameterMerged);
128  output->open(parFile);
129  rtdb->setOutput(output);
130 
131 
132  //---- Create and add detectors ---------------------------------------------------
133 
134  // Cave
135  FairModule *Cave= new PndCave("CAVE");
136  Cave->SetGeometryFileName("pndcave.geo");
137  fRun->AddModule(Cave);
138 
139  // Magnet
140  FairModule *Magnet= new PndMagnet("MAGNET");
141  Magnet->SetGeometryFileName("FullSuperconductingSolenoid_v831.root");
142  fRun->AddModule(Magnet);
143 
144  FairModule *Dipole= new PndMagnet("MAGNET");
145  Dipole->SetGeometryFileName("dipole.geo");
146  fRun->AddModule(Dipole);
147 
148  // Pipe
149  FairModule *Pipe= new PndPipe("PIPE");
150  Pipe->SetGeometryFileName("beampipe_201112.root");
151  fRun->AddModule(Pipe);
152 
153  // STT
154  FairDetector *Stt= new PndStt("STT", kTRUE);
155  Stt->SetGeometryFileName("straws_skewed_blocks_35cm_pipe.geo");
156  fRun->AddModule(Stt);
157 
158  // MVD (without Lambda Disks)
159  FairDetector *Mvd = new PndMvdDetector("MVD", kTRUE);
160  Mvd->SetGeometryFileName("Mvd-2.1_FullVersion.root");
161  fRun->AddModule(Mvd);
162 
163  // MVD (Just the Lambda Disks)
164  FairDetector *LambdaDisks = new PndMvdDetector("MVD", kTRUE); // Just Lambda Disks
165 
166  if(lambdadiskposition==0)
167  {
168  LambdaDisks->SetGeometryFileName("LambdaDisksSeparatedSupport.root"); // Lambda Disks at 40cm & 60 cm - Position 0
169  LambdaDisks->SetVerboseLevel(0);
170  fRun->AddModule(LambdaDisks);
171  }
172  else if(lambdadiskposition==1)
173  {
174  LambdaDisks->SetGeometryFileName("Mvd_AddDisks_smalldiskdistance_position1_40cm.root"); // Lambda Disks at 37cm & 43 cm - Position 1
175  LambdaDisks->SetVerboseLevel(0);
176  fRun->AddModule(LambdaDisks);
177  }
178  else if(lambdadiskposition==2)
179  {
180  LambdaDisks->SetGeometryFileName("Mvd_AddDisks_smalldiskdistance_position2_60cm.root"); // Lambda Disks at 57cm & 63 cm - Position 2
181  LambdaDisks->SetVerboseLevel(0);
182  fRun->AddModule(LambdaDisks);
183  }
184  else if(lambdadiskposition==3)
185  {
186  LambdaDisks->SetGeometryFileName("Mvd_AddDisks_smalldiskdistance_position3_80cm.root"); // Lambda Disks at 77cm & 83 cm - Position 2
187  LambdaDisks->SetVerboseLevel(0);
188  fRun->AddModule(LambdaDisks);
189  }
190  else if(lambdadiskposition==-1)
191  {
192  std::cout <<"No LambdaDisks Setting - No LambdaDisc geometry is loaded"<< std::endl;
193  }
194  else
195  {
196  std::cout << "No LambdaDisk position given - No LambdaDisks will be added" << std::endl;
197  //exit(0);
198  }
199 
200 
201  // GEM
202  FairDetector *Gem = new PndGemDetector("GEM", kTRUE);
203  Gem->SetGeometryFileName("gem_3Stations.root");
204  fRun->AddModule(Gem);
205 
206  // EMC
207  PndEmc *Emc = new PndEmc("EMC",kTRUE);
208  Emc->SetGeometryVersion(1);
209  Emc->SetStorageOfData(kFALSE);
210  fRun->AddModule(Emc);
211 
212  // SCITIL
213  FairDetector *SciT = new PndSciT("SCIT",kTRUE);
214  SciT->SetGeometryFileName("barrel-SciTil_07022013.root");
215  fRun->AddModule(SciT);
216 
217  // DRC
218  PndDrc *Drc = new PndDrc("DIRC", kTRUE);
219  Drc->SetGeometryFileName("dirc_l0_p0_updated.root");
220  Drc->SetRunCherenkov(kFALSE);
221  fRun->AddModule(Drc);
222 
223  // DISC
224  PndDsk* Dsk = new PndDsk("DSK", kTRUE);
225  Dsk->SetStoreCerenkovs(kFALSE);
226  Dsk->SetStoreTrackPoints(kFALSE);
227  fRun->AddModule(Dsk);
228 
229  // MDT
230  PndMdt *Muo = new PndMdt("MDT",kTRUE);
231  Muo->SetBarrel("fast");
232  Muo->SetEndcap("fast");
233  Muo->SetMuonFilter("fast");
234  Muo->SetForward("fast");
235  Muo->SetMdtMagnet(kTRUE);
236  Muo->SetMdtMFIron(kTRUE);
237  fRun->AddModule(Muo);
238 
239  // FTS
240  FairDetector *Fts= new PndFts("FTS", kTRUE);
241  Fts->SetGeometryFileName("fts.geo");
242  fRun->AddModule(Fts);
243 
244  // FTOF
245  FairDetector *FTof = new PndFtof("FTOF",kTRUE);
246  FTof->SetGeometryFileName("ftofwall.root");
247  fRun->AddModule(FTof);
248 
249  // RICH
250  FairDetector *Rich= new PndRich("RICH",kFALSE);
251  Rich->SetGeometryFileName("rich_v2.geo");
252  fRun->AddModule(Rich);
253 
254  //---- Event Generator ------------------------------------------------------------
255  FairPrimaryGenerator* primGen = new FairPrimaryGenerator();
256  fRun->SetGenerator(primGen);
257 
258  if(UseBoxGenerator){
259  FairBoxGenerator* boxGen = new FairBoxGenerator(Particle, Multiplicity);
260  boxGen->SetPRange(PRangeMin,PRangeMax);
261  boxGen->SetPhiRange(PhiRangeMin, PhiRangeMax);
262  boxGen->SetThetaRange(ThetaRangeMin, ThetaRangeMax);
263  boxGen->SetXYZ(VertexX, VertexY, VertexZ);
264  if(CosTheta==kTRUE)
265  {
266  boxGen->SetCosTheta();
267  }
268  primGen->AddGenerator(boxGen);
269  }
270  if(UseDpm){
271  PndDpmDirect *Dpm= new PndDpmDirect(Momenta,Mode);
272  primGen->AddGenerator(Dpm);
273  }
274  if(UseEvtGen){
275  FairEvtGenGenerator* evtGen = new FairEvtGenGenerator(EvtDecayFile.Data());
276  primGen->AddGenerator(evtGen);
277  }
278  if(UseEvtGenDirect){
279  PndEvtGenDirect *EvtGen = new PndEvtGenDirect("pbarpSystem", EvtDecayFile.Data(), Momenta);
280  EvtGen->SetStoreTree(SetStoreTree);
281  primGen->AddGenerator(EvtGen);
282  }
283 
284  // Create and Set Magnetic Field
285  PndMultiField *fField= new PndMultiField("FULL");
286  fRun->SetField(fField);
287 
288  // EMC Hit producer
290  fRun->AddTask(emcHitProd);
291 
292  //---- Initialize the RUN ------------------------------------------------------------
293  fRun->Init();
294 
295  //---- Run the Simulation -----------------------------------------------------------
296  fRun->Run(nEvents);
297 
298  //---- Save the parameters -----------------------------------------------------------
299  rtdb->saveOutput();
300 
301  //---- Print some info and exit ------------------------------------------------------
302  timer.Stop();
303 
304  Double_t rtime = timer.RealTime();
305  Double_t ctime = timer.CpuTime();
306  printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime);
307 
308  cout << endl << endl;
309  cout << "Sim macro finished successfully." << endl;
310  cout << "Output file is " << outputFile << endl;
311  cout << "Parameter file is " << parFile << endl;
312  cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << endl;
313  cout << endl;
314 
315  cout << " Test passed" << endl;
316  cout << " All ok " << endl;
317 
318  return 0;
319 }
PndDrc * Drc
Definition: sim_emc_apd.C:75
PndMultiField * fField
Definition: sim_emc_apd.C:97
void SetForward(TString name)
Definition: PndMdt.h:34
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
FairDetector * FTof
Definition: sim_ftof.C:49
Bool_t kParameterMerged
Definition: sim_emc_apd.C:113
creates PndEmcHits from PndEmcPoints
PndEmc * Emc
Definition: sim_emc_apd.C:55
TString digiFile
Definition: bump_emc.C:20
int run_sim_complete(TString FileName="test", Int_t lambdadiskposition=0, Double_t Momenta=1.642, Int_t nEvents=100000, Int_t DecayModel=1, Int_t Seed=6)
FairDetector * Mvd
Definition: sim_emc_apd.C:51
void SetMdtMFIron(bool opt=false)
Definition: PndMdt.h:29
void SetStorageOfData(Bool_t val)
Definition: PndEmc.cxx:941
double BeamMomentum
Definition: sim_ftof_stof.C:17
TString FileName
TString allDigiFile
Definition: hit_muo.C:36
FairParRootFileIo * output
Definition: sim_emc_apd.C:120
PndMdt * Muo
Definition: sim_emc_apd.C:67
Simulation of EMC.
Definition: PndEmc.h:26
FairPrimaryGenerator * primGen
Definition: sim_emc_apd.C:81
FairDetector * Dsk
Definition: run_DpmSim.C:66
FairRunAna * fRun
Definition: hit_dirc.C:58
FairDetector * Gem
Definition: runJohan.C:71
void SetMdtMagnet(bool opt=false)
Definition: PndMdt.h:27
void SetStoreTrackPoints(Bool_t storeTrackPoints)
Definition: PndDsk.h:148
void SetStoreTree(Bool_t store=true)
FairDetector * Stt
Definition: sim_emc_apd.C:47
A simple class which adds the corresponding file extensions to a given base class.
void SetStoreCerenkovs(Bool_t storeCerenkovs)
Definition: PndDsk.h:146
Double_t
FairModule * Dipole
Definition: sim_emc_apd.C:40
TString parFile
Definition: hit_dirc.C:14
FairModule * Cave
Definition: sim_emc_apd.C:32
Definition: PndDrc.h:31
Int_t nEvents
Definition: hit_dirc.C:11
TStopwatch timer
Definition: hit_dirc.C:51
virtual void SetGeometryVersion(const Int_t GeoNumber)
Definition: PndEmc.cxx:966
void SetBarrel(TString name)
Definition: PndMdt.h:31
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
gDebug
Definition: sim_emc_apd.C:6
PndEmcHitProducer * emcHitProd
Double_t ctime
Definition: hit_dirc.C:114
FairParAsciiFileIo * parIo1
Definition: bump_emc.C:53
FairBoxGenerator * boxGen
Definition: sim_emc_apd.C:85
void SetEndcap(TString name)
Definition: PndMdt.h:32
void SetMuonFilter(TString name)
Definition: PndMdt.h:33
PndMvdCreateDefaultApvMap * creator
FairEvtGenGenerator * evtGen
void SetRunCherenkov(Bool_t ch)
Definition: PndDrc.h:222
Definition: PndStt.h:34
Definition: PndMdt.h:20
FairModule * Pipe
Definition: sim_emc_apd.C:44
Double_t rtime
Definition: hit_dirc.C:113
FairDetector * Fts
Definition: sim_ftof_stof.C:58
Definition: PndDsk.h:23
FairModule * Magnet
Definition: sim_emc_apd.C:36
Definition: PndFts.h:25
Definition: PndCave.h:8