FairRoot/PandaRoot
runMC_dpm.C
Go to the documentation of this file.
1 // Macro for running Cbm with Geant3 or Geant4 (M. Al-Turany , D. Bertini)
2 // Modified 22/06/2005 D.Bertini
3 int runMC_dpm(double mom, int mode=0,int nevts=10,TString fname="")
4 {
5  TStopwatch timer;
6  timer.Start();
7  gDebug=0;
8 
9  // Load basic libraries
10  gROOT->LoadMacro("$VMCWORKDIR/gconfig/basiclibs.C");
11  basiclibs();
12  // Load this example libraries
13  gSystem->Load("libGeoBase");
14  gSystem->Load("libParBase");
15  gSystem->Load("libBase");
16  gSystem->Load("libPndData");
17  gSystem->Load("libField");
18  gSystem->Load("libPassive");
19 
20  gSystem->Load("libMvd");
21  gSystem->Load("libEmc");
22  gSystem->Load("libDrcProp");
23  gSystem->Load("libDrc");
24  gSystem->Load("libGen");
25  gSystem->Load("libDpmEvtGen");
26  gSystem->Load("libPGen");
27  gSystem->Load("libgenfit");
28  gSystem->Load("libtrackrep");
29 
30 
31  gSystem->Load("libtpc");
32  gSystem->Load("libtpcreco");
33  gSystem->Load("librecotasks");
34 
35 
36  double mp=0.938272;
37  double p=0,M=0;
38 
39  // determine the pbar mom and E_cms for DPM generator
40  if (mom>0)
41  {
42  p=mom;
43  double E=sqrt(mp*mp+mom*mom)+mp;
44  M=sqrt(E*E-mom*mom);
45  }
46  else
47  {
48  M=-mom;
49  double X = (M*M-2*mp*mp)/(2*mp);
50  p = sqrt(X*X-mp*mp);
51  }
52 
53  char tmp[100];
54  sprintf(tmp,"dpm%d_%6.4f_%dk",mode,M,nevts/1000);
55  if (fname=="") fname=TString(tmp);
56 
57  cout <<"\n####### Basename: "<<fname <<"\n"<<endl;
58  cout <<"####### Processing "<<nevts <<" events...\n"<<endl;
59 
60  //Int_t nEvents = 2000;
61 
62  FairRunSim *fRun = new FairRunSim();
63 
64  // set the MC version used
65  // ------------------------
66 
67  fRun->SetName("TGeant3");
68  // Choose the Geant Navigation System
69  // fRun->SetGeoModel("G3Native");
70 
71  TString outfilename=fname+".mc.root";
72  TString paramfilename=fname+".param.root";
73 
74  fRun->SetOutputFile(outfilename.Data());
75 
76  // Set Material file Name
77  //-----------------------
78 
79  fRun->SetMaterials("media_pnd.geo");
80 
81 
82  std::cout<< "Materials set" << std::endl;
83 
84 
85  // Create and add detectors
86  //-------------------------
87 
88  FairModule *Cave= new PndCave("CAVE");
89  Cave->SetGeometryFileName("pndcave.geo");
90  fRun->AddModule(Cave);
91 
92  FairModule *Pipe= new PndPipe("PIPE");
93  Pipe->SetGeometryFileName("pipe.geo");
94  //fRun->AddModule(Pipe);
95 
96 
97  //FairModule *Magnet= new PndMagnet("MAGNET");
98  //Magnet->SetGeometryFileName("magnet.geo");
99  //fRun->AddModule(Magnet);
100 
101  FairDetector *PndTpc = new PndTpcDetector("TPC", kTRUE);
102  PndTpc->SetGeometryFileName("tpc.geo");
103  fRun->AddModule(PndTpc);
104 
105  PndEmc *Emc = new PndEmc("EMC",kTRUE);
106  //Emc->SetGeometryFileName("emc_module12345.dat"); // if you want to use old geometry for FwEndCap
107  Emc->SetGeometryFileNameDouble("emc_module1245.dat","emc_module3new.root"); // if you want to use new geometry for FwEndCap
108  fRun->AddModule(Emc);
109 
110  FairDetector *Mvd = new PndMvdDetector("MVD", kTRUE);
111  Mvd->SetGeometryFileName("MVD14.root");
112  fRun->AddModule(Mvd);
113 
114 
115  // Create and Set Event Generator
116  //-------------------------------
117 
118  FairPrimaryGenerator* primGen = new FairPrimaryGenerator();
119  fRun->SetGenerator(primGen);
120 
121  // Urqmd Generator
122 // FairUrqmdGenerator* urqmdGen = new FairUrqmdGenerator("../../input/00-03fm.100ev.f14");
123 // primGen->AddGenerator(urqmdGen);
124 
125  // Particle Generator
126  //FairParticleGenerator* partGen = new FairParticleGenerator(211, 10, 1, 0,3,kTRUE);
127  //primGen->AddGenerator(partGen);
128 
129  // Ion Generator
130  // FairIonGenerator *fIongen= new FairIonGenerator(79, 197,79,1, 0.,0., 25, 0.,0.,-1.);
131  // primGen->AddGenerator(fIongen);
132  // Box Generator
133 
134 
135  //FairEvtGenGenerator* evtGen = new FairEvtGenGenerator(fname.Data());//infile.Data());
136  PndDpmDirect *dpmGen=new PndDpmDirect(p,0);
137  primGen->AddGenerator(dpmGen);
138 
139 
140  // Box Generator
141  /*
142  FairBoxGenerator* boxGen = new FairBoxGenerator(3122, 1); // 13 = muon; 1 = multipl.
143  boxGen->SetPRange(0.5,0.5); // GeV/c //setPRange vs setPtRange
144  boxGen->SetPhiRange(35, 35); // Azimuth angle range [degree]
145  boxGen->SetThetaRange(60,60); // Polar angle in lab system range [degree]
146  boxGen->SetXYZ(0., 0., 0.); // mm o cm ??
147  primGen->AddGenerator(boxGen);
148  */
149  //FairPrimaryGenerator* primGen = new FairPrimaryGenerator();
150  //fRun->SetGenerator(primGen);
151 
152  // PndDpmGenerator* dpmGen = new PndDpmGenerator("pgenerators/DpmEvtGen/Background-micro.root");
153  //primGen->AddGenerator(dpmGen);
154 
155  // Field Map Definition
156  // --------------------
157  // 1- Reading the new field map in the old format
158 
159  // FairFieldMap *fMagField= new FairFieldMap("FIELD.v04_pavel.map");
160  // Constant Field
162  fMagField->SetField(0, 0 ,20. ); // values are in kG
163  // MinX=-75, MinY=-40,MinZ=-12 ,MaxX=75, MaxY=40 ,MaxZ=124 ); // values are in cm
164  fMagField->SetFieldRegion(-500, 500,-500, 500, -200, 200);
165 
166  // 2- Reading the new field map in the new format
167 
168 // FairField *fMagField= new FairFieldMapSym3("FieldActive");
169  // Active Shielding
170 
171  fRun->SetField(fMagField);
172 
173  //fRun->SetStoreTraj(kTRUE);
174  fRun->SetStoreTraj(kFALSE);
175 
176 
177  fRun->Init();
178 
179 
180  // -Trajectories Visualization (TGeoManager Only )
181  // -----------------------------------------------
182 
183 ;
184  // Set cuts for storing the trajectpries
185 // FairTrajFilter* trajFilter = FairTrajFilter::Instance();
186 // trajFilter->SetStepSizeCut(0.01); // 1 cm
187 // trajFilter->SetVertexCut(-2000., -2000., 4., 2000., 2000., 100.);
188 // trajFilter->SetMomentumCutP(10e-3); // p_lab > 10 MeV
189 // trajFilter->SetEnergyCut(0., 1.02); // 0 < Etot < 1.04 GeV
190 // trajFilter->SetStorePrimaries(kTRUE);
191 // trajFilter->SetStoreSecondaries(kTRUE);
192 
193 
194  // Fill the Parameter containers for this run
195  //-------------------------------------------
196 
197  FairRuntimeDb *rtdb=fRun->GetRuntimeDb();
198  Bool_t kParameterMerged=kTRUE;
199  FairParRootFileIo* output=new FairParRootFileIo(kParameterMerged);
200  output->open(paramfilename.Data());
201  rtdb->setOutput(output);
202 
203  PndConstPar* fieldPar = (PndConstPar*) rtdb->getContainer("PndConstPar");
204  if ( fMagField ) { fieldPar->SetParameters(fMagField); }
205  fieldPar->setInputVersion(fRun->GetRunId(),1);
206  fieldPar->setChanged(kTRUE);
207 
208  rtdb->saveOutput();
209  rtdb->print();
210 
211  // Transport nEvents
212  // -----------------
213 
214 
215  fRun->Run(nevts);
216 
217  timer.Stop();
218  Double_t rtime = timer.RealTime();
219  Double_t ctime = timer.CpuTime();
220  printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime);
221  return 0;
222 }
223 
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
basiclibs()
Bool_t kParameterMerged
Definition: sim_emc_apd.C:113
PndDpmGenerator * dpmGen
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
PndEmc * Emc
Definition: sim_emc_apd.C:55
FairDetector * PndTpc
Definition: run_DpmSim.C:46
FairDetector * Mvd
Definition: sim_emc_apd.C:51
Double_t mom
Definition: plot_dirc.C:14
static const double mp
Definition: mzparameters.h:11
Double_t p
Definition: anasim.C:58
FairParRootFileIo * output
Definition: sim_emc_apd.C:120
void SetFieldRegion(Double_t xMin, Double_t xMax, Double_t yMin, Double_t yMax, Double_t zMin, Double_t zMax)
Simulation of EMC.
Definition: PndEmc.h:26
FairPrimaryGenerator * primGen
Definition: sim_emc_apd.C:81
FairRunAna * fRun
Definition: hit_dirc.C:58
Int_t mode
Definition: autocutx.C:47
PndConstField * fMagField
Definition: runSimHF_ptr.C:154
Double_t
FairModule * Cave
Definition: sim_emc_apd.C:32
void SetField(Double_t bX, Double_t bY, Double_t bZ)
PndMultiFieldPar * fieldPar
Definition: sim_ftof.C:102
TStopwatch timer
Definition: hit_dirc.C:51
void SetParameters(FairField *field)
Definition: PndConstPar.cxx:54
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
gDebug
Definition: sim_emc_apd.C:6
Double_t ctime
Definition: hit_dirc.C:114
double X
Definition: anaLmdDigi.C:68
virtual void SetGeometryFileNameDouble(TString fname, TString fname2, Int_t fwbwchoice=0, TString geoVer="0")
Definition: PndEmc.cxx:1096
int runMC_dpm(double mom, int mode=0, int nevts=10, TString fname="")
Definition: runMC_dpm.C:3
FairModule * Pipe
Definition: sim_emc_apd.C:44
Double_t rtime
Definition: hit_dirc.C:113
Definition: PndCave.h:8