118void run8_sim_bmn(TString inFile =
"DCMSMM_XeCsI_3.9AGeV_mb_10k_142.r12",
119 TString outFile =
"$VMCWORKDIR/macro/run8/bmnsim.root",
120 Int_t nStartEvent = 0,
123 Bool_t useRealEffects = kFALSE)
130 FairRunSim* fRun =
new FairRunSim();
134 fRun->SetName(
"TGeant4");
136 fRun->SetName(
"TGeant3");
140 fRun->SetMaterials(
"media.geo");
143 FairModule* cave =
new FairCave(
"CAVE");
144 cave->SetGeometryFileName(
"cave.geo");
145 fRun->AddModule(cave);
147 FairModule* magnet =
new FairMagnet(
"MAGNET");
148 magnet->SetGeometryFileName(
"magnet_modified.root");
149 fRun->AddModule(magnet);
151 FairModule* target =
new FairTarget(
"Target");
152 target->SetGeometryFileName(
"target_CsI.geo");
153 fRun->AddModule(target);
157 FairDetector* sibt =
new BmnSiBT(
"SiBT", kTRUE);
158 sibt->SetGeometryFileName(
"SiBT_Run8.root");
159 fRun->AddModule(sibt);
161 FairDetector* simd =
new BmnSiMD(
"SiMD", kTRUE);
162 simd->SetGeometryFileName(
"SiMD_run8_v1.root");
163 fRun->AddModule(simd);
165 FairDetector* bd =
new BmnBd(
"BD", kTRUE);
166 bd->SetGeometryFileName(
"BD_run8_v1.root");
169 FairDetector* fd =
new BmnFD(
"FD", kTRUE);
170 fd->SetGeometryFileName(
"FD_run8.root");
173 FairDetector* silicon =
new BmnSilicon(
"SILICON", kTRUE);
174 silicon->SetGeometryFileName(
"Silicon_Run8_3stations_detailed.root");
175 fRun->AddModule(silicon);
177 FairDetector* gems =
new CbmSts(
"GEM", kTRUE);
178 gems->SetGeometryFileName(
"GEMS_Run8_detailed.root");
179 fRun->AddModule(gems);
181 FairDetector* csc =
new BmnCSC(
"CSC", kTRUE);
182 csc->SetGeometryFileName(
"CSC_Run8_detailed.root");
183 fRun->AddModule(csc);
185 FairDetector* tof1 =
new BmnTOF1(
"TOF1", kTRUE);
186 tof1->SetGeometryFileName(
"TOF400_RUN7.root");
187 fRun->AddModule(tof1);
189 FairDetector* dch =
new BmnDch(
"DCH", kTRUE);
190 dch->SetGeometryFileName(
"DCH_Run8.root");
191 fRun->AddModule(dch);
193 FairDetector* tof2 =
new BmnTOF(
"TOF", kTRUE);
194 tof2->SetGeometryFileName(
"tof700_run8_with_support.root");
195 fRun->AddModule(tof2);
197 FairDetector* ecal =
new BmnEcal(
"ECAL", kTRUE);
198 ecal->SetGeometryFileName(
"ECAL_v3_run8_pos5.root");
199 fRun->AddModule(ecal);
201 FairDetector* scwall =
new BmnScWall(
"SCWALL", kTRUE);
202 scwall->SetGeometryFileName(
"ScWall_with_box_with_hole_XeCsI_3.9GeV_field_Extrap_scale_1800_900_Zpos_875.0cm_"
203 "Xshift_78.0cm_Yshift_0.0cm_rotationY_0.0deg_v1.root");
204 fRun->AddModule(scwall);
206 FairDetector* hodo =
new BmnHodo(
"HODO", kTRUE);
207 hodo->SetGeometryFileName(
"Hodo_with_box_XeCsI_3.9GeV_field_Extrap_scale_1800_900_Zpos_892.0cm_Xshift_55.50cm_"
208 "Yshift_0.0cm_rotationY_0.0deg_v1.root");
209 fRun->AddModule(hodo);
213 fhcal->SetGeometryFileName(
"FHCal_54mods_hole_XeCsI_3.9GeV_field_Extrap_scale_1800_900_Zpos_900.0cm_Xshift_55.5cm_"
214 "Yshift_0.0cm_rotationY_0.0deg_v1.root");
215 fRun->AddModule(fhcal);
223 FairPrimaryGenerator* primGen =
new FairPrimaryGenerator();
224 fRun->SetGenerator(primGen);
228 primGen->SetBeam(0.0, 0.0, 1.6, 1.6);
229 primGen->SetTarget(0.0875, 0.0875);
230 primGen->SmearVertexZ(kTRUE);
231 primGen->SmearVertexXY(kTRUE);
234 switch (generatorName) {
242 primGen->AddGenerator(urqmdGen);
255 FairParticleGenerator* partGen =
new FairParticleGenerator(211, 10, 1, 0, 3, 1, 0, 0);
256 primGen->AddGenerator(partGen);
264 FairIonGenerator* fIongen =
new FairIonGenerator(54, 131, 54, 1, 0., 0., -4.8, 0., 0., 0.);
265 primGen->AddGenerator(fIongen);
272 FairBoxGenerator* boxGen =
new FairBoxGenerator(2212, 1);
273 boxGen->SetPRange(0.2, 5.0);
274 boxGen->SetPhiRange(0, 360);
275 boxGen->SetThetaRange(0, 40.0);
276 primGen->AddGenerator(boxGen);
287 primGen->AddGenerator(hsdGen);
305 primGen->AddGenerator(guGen);
320 primGen->AddGenerator(smmGen);
331 cout <<
"ERROR: Generator name was not pre-defined: " << generatorName << endl;
339 fRun->SetSink(
new FairRootFileSink(outFile.Data()));
340 fRun->SetIsMT(
false);
344 Double_t fieldScale = 1800. / 900.;
346 fRun->SetField(magField);
348 fRun->SetStoreTraj(kTRUE);
349 fRun->SetRadLenRegister(kFALSE);
356 fRun->AddTask(sibtDigit);
360 fRun->AddTask(simdDigit);
367 fRun->AddTask(siliconDigit);
377 fRun->AddTask(gemDigit);
383 fRun->AddTask(cscDigit);
389 fRun->AddTask(zdcDigit);
400 FairTrajFilter* trajFilter = FairTrajFilter::Instance();
402 trajFilter->SetStepSizeCut(0.01);
403 trajFilter->SetVertexCut(-200., -200., -1000., 200., 200., 1100.);
404 trajFilter->SetMomentumCutP(30e-3);
405 trajFilter->SetEnergyCut(0., 10.);
406 trajFilter->SetStorePrimaries(kTRUE);
407 trajFilter->SetStoreSecondaries(kTRUE);
410 FairRuntimeDb* rtdb = fRun->GetRuntimeDb();
414 fieldPar->setChanged();
415 fieldPar->setInputVersion(fRun->GetRunId(), 1);
416 Bool_t kParameterMerged = kTRUE;
417 FairParRootFileIo* output =
new FairParRootFileIo(kParameterMerged);
420 rtdb->setOutput(output);
431 fRun->CreateGeometryFile(
"full_geometry.root");
433 if ((generatorName ==
QGSM) || (generatorName ==
DCMQGSM)) {
434 TString Pdg_table_name =
435 TString::Format(
"%s%s%c%s", gSystem->BaseName(inFile.Data()),
".g", (fRun->GetName())[6],
".pdg_table.dat");
436 (TDatabasePDG::Instance())->WritePDGTable(Pdg_table_name.Data());
440 Double_t rtime = timer.RealTime(), ctime = timer.CpuTime();
441 printf(
"RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime);
442 cout <<
"Macro finished successfully." << endl;