FairRoot/PandaRoot
sim_complete_vis.C
Go to the documentation of this file.
1 // Macro for running Panda simulation with Geant3 or Geant4 (M. Al-Turany)
2 // This macro is supposed to run the full simulation of the panda detector and
3 // to save some visualization points to display track in the eventdisplay
4 // to run the macro:
5 // root sim_complete_vis.C or in root session root>.x sim_complete_vis.C
6 // to run with different options:(e.g more events, different momentum, Geant4)
7 // root sim_complete_vis.C"(100, "TGeant4",2)"
8 
9 int sim_complete_vis(Int_t nEvents = 10, TString SimEngine ="TGeant3", Float_t mom = 7.24)
10 {
11  //-----User Settings:-----------------------------------------------
12  TString OutputFile ="sim_complete.root";
13  TString ParOutputfile ="simparams.root";
14  Double_t BeamMomentum =15.0; // beam momentum ONLY for the scaling of the dipole field. For the generator use "mom"
15  TString MediaFile ="media_pnd.geo";
16  gDebug = 0;
17  TString digiFile = "all.par"; //The emc run the hit producer directly
18  // choose your event generator
19  Bool_t UseEvtGen =kFALSE;
20  Bool_t UseEvtGenDirect =kFALSE;
21  Bool_t UseDpm =kFALSE;
22  Bool_t UseFtf =kFALSE;
23  Bool_t UseBoxGenerator =kTRUE;
24 
25  //------------------------------------------------------------------
26 
27  TStopwatch timer;
28  timer.Start();
29 
30  gRandom->SetSeed();
31  // Create the Simulation run manager--------------------------------
32  FairRunSim *fRun = new FairRunSim();
33  fRun->SetName(SimEngine.Data() );
34  fRun->SetOutputFile(OutputFile.Data());
35  fRun->SetBeamMom(BeamMomentum);
36  fRun->SetMaterials(MediaFile.Data());
37  fRun->SetUseFairLinks(kTRUE);
38  FairRuntimeDb *rtdb=fRun->GetRuntimeDb();
39 
40  // Set the parameters
41  //-------------------------------
42  TString allDigiFile = gSystem->Getenv("VMCWORKDIR");
43  allDigiFile += "/macro/params/";
44  allDigiFile += digiFile;
45 
46 
47  //-------Set the parameter output --------------------
48  FairParAsciiFileIo* parIo1 = new FairParAsciiFileIo();
49  parIo1->open(allDigiFile.Data(),"in");
50  rtdb->setFirstInput(parIo1);
51 
52  //---------------------Set Parameter output ----------
54  FairParRootFileIo* output=new FairParRootFileIo(kParameterMerged);
55  output->open(ParOutputfile.Data());
56  rtdb->setOutput(output);
57 
58  // Create and add detectors
59 
60  //------------------------- CAVE -----------------
61 
62  FairModule *Cave= new PndCave("CAVE");
63  Cave->SetGeometryFileName("pndcave.geo");
64  fRun->AddModule(Cave);
65  //------------------------- Magnet -----------------
66  FairModule *Magnet= new PndMagnet("MAGNET");
67  //Magnet->SetGeometryFileName("FullSolenoid_V842.root");
68  Magnet->SetGeometryFileName("FullSuperconductingSolenoid_v831.root");
69  fRun->AddModule(Magnet);
70  FairModule *Dipole= new PndMagnet("MAGNET");
71  Dipole->SetGeometryFileName("dipole.geo");
72  fRun->AddModule(Dipole);
73  //------------------------- Pipe -----------------
74  FairModule *Pipe= new PndPipe("PIPE");
75  Pipe->SetGeometryFileName("beampipe_201112.root");
76  fRun->AddModule(Pipe);
77  //------------------------- STT -----------------
78  FairDetector *Stt= new PndStt("STT", kTRUE);
79  Stt->SetGeometryFileName("straws_skewed_blocks_35cm_pipe.geo");
80  fRun->AddModule(Stt);
81  //------------------------- MVD -----------------
82  FairDetector *Mvd = new PndMvdDetector("MVD", kTRUE);
83  Mvd->SetGeometryFileName("Mvd-2.1_FullVersion.root");
84  fRun->AddModule(Mvd);
85  //------------------------- GEM -----------------
86  FairDetector *Gem = new PndGemDetector("GEM", kTRUE);
87  Gem->SetGeometryFileName("gem_3Stations_Tube.root");
88  fRun->AddModule(Gem);
89  //------------------------- EMC -----------------
90  PndEmc *Emc = new PndEmc("EMC",kTRUE);
91  Emc->SetGeometryVersion(1);
92  Emc->SetStorageOfData(kFALSE);
93  fRun->AddModule(Emc);
94  //------------------------- SCITIL -----------------
95  FairDetector *SciT = new PndSciT("SCIT",kTRUE);
96  SciT->SetGeometryFileName("SciTil_201504.root");
97  fRun->AddModule(SciT);
98  //------------------------- DRC -----------------
99  PndDrc *Drc = new PndDrc("DIRC", kTRUE);
100  Drc->SetGeometryFileName("dirc_l0_p0_updated.root");
101  Drc->SetRunCherenkov(kFALSE);
102  fRun->AddModule(Drc);
103  //------------------------- DISC -----------------
104  PndDsk* Dsk = new PndDsk("DSK", kTRUE);
105  Dsk->SetStoreCerenkovs(kFALSE);
106  Dsk->SetStoreTrackPoints(kFALSE);
107  fRun->AddModule(Dsk);
108  //------------------------- MDT -----------------
109  PndMdt *Muo = new PndMdt("MDT",kTRUE);
110  Muo->SetBarrel("fast");
111  Muo->SetEndcap("fast");
112  Muo->SetMuonFilter("fast");
113  Muo->SetForward("fast");
114  Muo->SetMdtMagnet(kTRUE);
115  Muo->SetMdtMFIron(kTRUE);
116  fRun->AddModule(Muo);
117  //------------------------- FTS -----------------
118  FairDetector *Fts= new PndFts("FTS", kTRUE);
119  Fts->SetGeometryFileName("fts.geo");
120  fRun->AddModule(Fts);
121  //------------------------- FTOF -----------------
122  FairDetector *FTof = new PndFtof("FTOF",kTRUE);
123  FTof->SetGeometryFileName("ftofwall.root");
124  fRun->AddModule(FTof);
125  //------------------------- RICH ----------------
126  FairDetector *Rich= new PndRich("RICH",kFALSE);
127  Rich->SetGeometryFileName("rich_v2.geo");
128  fRun->AddModule(Rich);
129 
130  // Create and Set Event Generator
131  //-------------------------------
132  FairPrimaryGenerator* primGen = new FairPrimaryGenerator();
133  fRun->SetGenerator(primGen);
134 
135  if(UseBoxGenerator){ // Box Generator
136  FairBoxGenerator* boxGen = new FairBoxGenerator(13, 3); // 13 = muon; 1 = multipl.
137  boxGen->SetPRange(0.5,4); // GeV/c
138  boxGen->SetPhiRange(0., 360.); // Azimuth angle range [degree]
139  boxGen->SetThetaRange(0., 10.); // Polar angle in lab system range [degree]
140  boxGen->SetXYZ(0., 0., 0.); // mm o cm ??
141  primGen->AddGenerator(boxGen);
142  }
143  if(UseDpm){
144  PndDpmDirect *Dpm= new PndDpmDirect(mom,1);
145  primGen->AddGenerator(Dpm);
146  }
147  if(UseFtf){ //the lines of Ftf have to be commented out if
148  // TString macfile = gSystem->Getenv("VMCWORKDIR"); //you want to run Geant4 with this macro
149  // macfile += "/pgenerators/FtfEvtGen/PbarP.mac"; //
150  // PndFtfDirect *Ftf = new PndFtfDirect(macfile.Data()); //
151  PndFtfDirect *Ftf = new PndFtfDirect("anti_proton", "G4_H", 1, "ftfp", mom, 123456); //
152  primGen->AddGenerator(Ftf); //
153  } //
154  if(UseEvtGen){
155  TString EvtInput =gSystem->Getenv("VMCWORKDIR");
156  EvtInput+="/input/psi2s_jpsi2pi_1k.evt";
157  FairEvtGenGenerator* evtGen = new FairEvtGenGenerator(EvtInput.Data());
158  primGen->AddGenerator(evtGen);
159  }
160  if(UseEvtGenDirect){
161  TString EvtInput =gSystem->Getenv("VMCWORKDIR");
162  EvtInput+="/macro/run/2pipi.dec";
163  PndEvtGenDirect *EvtGen = new PndEvtGenDirect("pbarpSystem", EvtInput.Data(), mom);
164  EvtGen->SetStoreTree(kFALSE);
165  primGen->AddGenerator(EvtGen);
166  }
167 
168  //---------------------Create and Set the Field(s)----------
169  PndMultiField *fField= new PndMultiField("FULL");
170  fRun->SetField(fField);
171 
172  // EMC Hit producer
173  //-------------------------------
175  fRun->AddTask(emcHitProd);
176 
177  //-------------------------- switch on the vis manager-----------
178  fRun->SetStoreTraj(kTRUE);
179  //------------------------- Initialize the RUN -----------------
180  fRun->Init();
181  //----------------- Set some cuts for the visualization-----------
182  FairTrajFilter* trajFilter = FairTrajFilter::Instance();
183  // Set cuts for storing the trajectpries
184  trajFilter->SetStepSizeCut(0.04); // 1 cm
185  // trajFilter->SetVertexCut(-2000., -2000., 4., 2000., 2000., 100.);
186  // trajFilter->SetMomentumCutP(10e-3); // p_lab > 10 MeV
187  // trajFilter->SetEnergyCut(0., 1.02); // 0 < Etot < 1.04 GeV
188  trajFilter->SetStorePrimaries(kTRUE);
189  trajFilter->SetStoreSecondaries(kTRUE);
190  //------------------------- Run the Simulation -----------------
191  fRun->Run(nEvents);
192  //------------------------- Save the parameters -----------------
193  rtdb->saveOutput();
194  //------------------------Print some info and exit----------------
195  timer.Stop();
196  Double_t rtime = timer.RealTime();
197  Double_t ctime = timer.CpuTime();
198  printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime);
199 
200  cout << " Test passed" << endl;
201  cout << " All ok " << endl;
202 
203 // exit(0);
204  return 0;
205 
206 }
207 
FairTrajFilter * trajFilter
Definition: run_DpmSim.C:112
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
int sim_complete_vis(Int_t nEvents=10, TString SimEngine="TGeant3", Float_t mom=7.24)
creates PndEmcHits from PndEmcPoints
PndEmc * Emc
Definition: sim_emc_apd.C:55
TString digiFile
Definition: bump_emc.C:20
FairDetector * Mvd
Definition: sim_emc_apd.C:51
void SetMdtMFIron(bool opt=false)
Definition: PndMdt.h:29
Double_t mom
Definition: plot_dirc.C:14
void SetStorageOfData(Bool_t val)
Definition: PndEmc.cxx:941
double BeamMomentum
Definition: sim_ftof_stof.C:17
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
void SetStoreCerenkovs(Bool_t storeCerenkovs)
Definition: PndDsk.h:146
Double_t
FairModule * Dipole
Definition: sim_emc_apd.C:40
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
new FairTrajFilter()
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
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