27 TString simFile =
"$VMCWORKDIR/macro/run/bmnsim.root",
28 Int_t nStartEvent = 0,
41 FairLogger::GetLogger()->SetLogScreenLevel(
"info");
49 fRun->SetUseFairLinks(
kTRUE);
52 fRun->SetName(
"TGeant4");
63 TPRegexp re_run_number(
"(run(\\d+))");
65 if (re_run_number.
MatchB(run_tag)) {
67 run_period = run_tag.
Atoi();
68 fRun->SetRunId(run_period);
79 cout <<
"ERROR: Geometry not loaded. Error status " << errStatus << endl;
89 FairPrimaryGenerator* primGen =
new FairPrimaryGenerator();
90 fRun->SetGenerator(primGen);
95 primGen->SetBeam(0.4376, 0.1239 - 0.3, 0.4537, 0.6925);
96 primGen->SetBeamAngle(0.011, 0.0, 0.0, 0.0);
97 primGen->SetTarget(-0.01942, 0.175);
98 primGen->SmearVertexZ(
kTRUE);
99 primGen->SmearGausVertexXY(
kTRUE);
101 switch (generatorName) {
107 unigen->RegisterIons();
108 primGen->AddGenerator(unigen);
110 auto n_events_in_tree = unigen->GetNEntries();
111 if (nStartEvent >= n_events_in_tree) {
112 cout <<
"You are trying to specify the event out reach of current tree" << generatorName << endl;
115 auto n_avail_events = n_events_in_tree - nStartEvent - 1;
117 nEvents = n_avail_events;
119 nEvents = std::min<int>(n_avail_events, nEvents);
120 cout << nEvents <<
" are availiable and will be processed" << endl;
122 unigen->SkipEvents(nStartEvent);
132 primGen->AddGenerator(urqmdGen);
145 FairParticleGenerator* partGen =
new FairParticleGenerator(211, 10, 1, 0, 3, 1, 0, 0);
146 primGen->AddGenerator(partGen);
154 FairIonGenerator* fIongen =
new FairIonGenerator(54, 124, 54, 1, 0., 0., 4.65, 0., 0., 0.);
155 primGen->AddGenerator(fIongen);
161 FairBoxGenerator* boxGen =
new FairBoxGenerator(2212, 1);
162 boxGen->SetPRange(0.2, 5.0);
163 boxGen->SetPhiRange(0, 360);
164 boxGen->SetThetaRange(0, 40.0);
165 primGen->AddGenerator(boxGen);
176 primGen->AddGenerator(hsdGen);
194 primGen->AddGenerator(guGen);
209 primGen->AddGenerator(smmGen);
220 cout <<
"ERROR: Generator name was not pre-defined: " << generatorName << endl;
226 simFile =
"$VMCWORKDIR/macro/run/bmnsim.root";
230 fRun->SetSink(
new FairRootFileSink(simFile.Data()));
231 fRun->SetIsMT(
false);
234 TString beamParticle =
"", targetParticle =
"";
242 fRun->SetBeamMom(beamEnergy);
244 ->getContainer(
"FairBaseParSet")
250 if (beamEnergy > 0) {
253 fieldScale = fieldValue / 111.75;
260 fRun->SetField(magField);
262 fRun->SetStoreTraj(
kTRUE);
263 fRun->SetRadLenRegister(
kFALSE);
269 fRun->AddTask(sibtDigit);
273 fRun->AddTask(siprofDigit);
277 fRun->AddTask(bdDigit);
281 fRun->AddTask(simdDigit);
287 fRun->AddTask(vspDigit);
292 siliconDigit->
SetNoise(45.0, 150.0);
293 fRun->AddTask(siliconDigit);
297 if (useRealEffects) {
308 fRun->AddTask(gemDigit);
312 fRun->AddTask(cscDigit);
322 fRun->AddTask(fhcalDigit);
326 fRun->AddTask(fScWallDigit);
330 fRun->AddTask(fHodoDigit);
334 fRun->AddTask(fNdetDigit);
340 fRun->SetStoreTraj(saveGeoInfo);
346 FairTrajFilter* trajFilter = FairTrajFilter::Instance();
348 trajFilter->SetStepSizeCut(0.1);
349 trajFilter->SetVertexCut(-200., -200., -200., 200., 200.,
351 trajFilter->SetMomentumCutP(50e-3);
353 trajFilter->SetStorePrimaries(
kTRUE);
354 trajFilter->SetStoreSecondaries(
kTRUE);
358 FairRuntimeDb* rtdb = fRun->GetRuntimeDb();
360 FairParRootFileIo* output =
new FairParRootFileIo(kParameterMerged);
363 rtdb->setOutput(output);
366 TString geoDescription = geometryTag;
367 if (!geoLocalSettings.
IsNull())
368 geoDescription +=
";" + geoLocalSettings;
369 rtdb->getContainer(
"FairGeoParSet")->setDescription(geoDescription.
Data());
379 fRun->CreateGeometryFile(
"full_geometry.root");
382 if ((generatorName ==
QGSM) || (generatorName ==
DCMQGSM)) {
384 (fRun->GetName())[6],
".pdg_table.dat");
392 printf(
"RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime);
393 cout <<
"Macro finished successfully." << endl;