28 TString outFile =
"$VMCWORKDIR/macro/run/bmnsim.root",
29 Int_t nStartEvent = 0,
44 fRun->SetName(
"TGeant4");
46 fRun->SetName(
"TGeant3");
57 FairPrimaryGenerator* primGen =
new FairPrimaryGenerator();
58 fRun->SetGenerator(primGen);
63 primGen->SetBeam(0.73, -0.23, 0.4, 0.4);
64 primGen->SetBeamAngle(0.011, 0.0, 0.0, 0.0);
65 primGen->SetTarget(0.0875, 0.175);
66 primGen->SmearVertexZ(
kTRUE);
67 primGen->SmearGausVertexXY(
kTRUE);
70 switch (generatorName) {
76 unigen->RegisterIons();
77 primGen->AddGenerator(unigen);
79 auto n_events_in_tree = unigen->GetNEntries();
80 if (nStartEvent >= n_events_in_tree) {
81 cout <<
"You are trying to specify the event out reach of current tree" << generatorName << endl;
85 auto n_avail_events = n_events_in_tree - nStartEvent;
87 nEvents = n_avail_events;
89 nEvents = std::min<int>(n_avail_events, nEvents);
90 cout << nEvents <<
" are availiable and will be processed" << endl;
92 unigen->SkipEvents(nStartEvent);
102 primGen->AddGenerator(urqmdGen);
115 FairParticleGenerator* partGen =
new FairParticleGenerator(211, 10, 1, 0, 3, 1, 0, 0);
116 primGen->AddGenerator(partGen);
124 FairIonGenerator* fIongen =
new FairIonGenerator(54, 124, 54, 1, 0., 0., 4.65, 0., 0., 0.);
125 primGen->AddGenerator(fIongen);
132 FairBoxGenerator* boxGen =
new FairBoxGenerator(2212, 1);
133 boxGen->SetPRange(0.2, 5.0);
134 boxGen->SetPhiRange(0, 360);
135 boxGen->SetThetaRange(0, 40.0);
136 primGen->AddGenerator(boxGen);
147 primGen->AddGenerator(hsdGen);
165 primGen->AddGenerator(guGen);
180 primGen->AddGenerator(smmGen);
191 cout <<
"ERROR: Generator name was not pre-defined: " << generatorName << endl;
199 fRun->SetSink(
new FairRootFileSink(outFile.Data()));
200 fRun->SetIsMT(
false);
207 fRun->SetField(magField);
209 fRun->SetStoreTraj(
kTRUE);
210 fRun->SetRadLenRegister(
kFALSE);
218 fRun->AddTask(sibtDigit);
224 fRun->AddTask(siprofDigit);
228 fRun->AddTask(bdDigit);
232 fRun->AddTask(simdDigit);
239 siliconDigit->
SetNoise(45.0, 150.0);
240 fRun->AddTask(siliconDigit);
253 fRun->AddTask(gemDigit);
259 fRun->AddTask(cscDigit);
269 fhcalDigit->SetGeV2MIP(0.005);
270 fhcalDigit->SetMIP2Pix(15);
272 fhcalDigit->SetMIPNoise(0.2);
274 fRun->AddTask(fhcalDigit);
280 fScWallDigit->SetGeV2MIP(0.0021);
282 fScWallDigit->SetMIP2Pix(55);
283 fScWallDigit->SetMIPNoise(0.1);
284 fRun->AddTask(fScWallDigit);
290 fHodoDigit->SetGeV2MIP(0.00083);
291 fHodoDigit->SetMIP2Pix(15);
292 fHodoDigit->SetMIPNoise(0.1);
293 fRun->AddTask(fHodoDigit);
297 fNdetDigit->SetTofCut(100.);
302 fRun->AddTask(fNdetDigit);
305 BmnVacuumWallDigitizer* fVacWallDigit =
new BmnVacuumWallDigitizer();
306 fRun->AddTask(fVacWallDigit);
312 fRun->SetStoreTraj(saveGeoInfo);
318 FairTrajFilter* trajFilter = FairTrajFilter::Instance();
320 trajFilter->SetStepSizeCut(0.1);
321 trajFilter->SetVertexCut(-200., -200., -200., 200., 200.,
323 trajFilter->SetMomentumCutP(50e-3);
325 trajFilter->SetStorePrimaries(
kTRUE);
326 trajFilter->SetStoreSecondaries(
kTRUE);
330 FairRuntimeDb* rtdb = fRun->GetRuntimeDb();
332 FairParRootFileIo* output =
new FairParRootFileIo(kParameterMerged);
335 rtdb->setOutput(output);
343 fRun->CreateGeometryFile(
"full_geometry.root");
350 if ((generatorName ==
QGSM) || (generatorName ==
DCMQGSM)) {
352 TString::Format(
"%s%s%c%s",
gSystem->BaseName(inFile.Data()),
".g", (fRun->GetName())[6],
".pdg_table.dat");
360 printf(
"RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime);
361 cout <<
"Macro finished successfully." << endl;