26 TString dstFileName =
"$VMCWORKDIR/macro/run/bmndst.root",
27 Int_t nStartEvent = 0,
37 FairLogger::GetLogger()->SetLogScreenLevel(
"info");
49 FairRunAna* fRunAna =
new FairRunAna();
61 Int_t run_period = 9, run_number = -1;
64 fFileSource =
new FairFileSource(inFileName);
69 fFileSource =
new BmnFileSource(inFileName, run_period, run_number);
75 cout <<
"ERROR: Geometry not loaded. Error status " << errStatus << endl;
88 int prev_mag_period = run_period, prev_mag_run = run_number;
90 if ((field_voltage == 0) and (prev_mag_run == run_number) and (prev_mag_period == run_period)) {
91 cout <<
"ERROR: no any field voltage was found for run " << run_period <<
":" << run_number << endl;
95 cout <<
"ERROR: no field voltage was found for run " << run_period <<
":" << run_number << endl;
99 Double_t map_voltage = (run_period < 8) ? 55.87 : 112.0;
100 if (field_voltage < 10) {
103 fieldScale = (field_voltage) / map_voltage;
112 fRunAna->SetField(magField);
124 cout <<
"\n\n|||||||||||||||| EXPERIMENTAL RUN SUMMARY ||||||||||||||||" << endl;
125 cout <<
"||\t\t\t\t\t\t\t||" << endl;
126 cout <<
"||\t\tPeriod:\t\t" << run_period <<
"\t\t\t||" << endl;
127 cout <<
"||\t\tNumber:\t\t" << run_number <<
"\t\t\t||" << endl;
128 cout <<
"||\t\tBeam:\t\t" << beam <<
"\t\t\t||" << endl;
129 cout <<
"||\t\tTarget:\t\t" << targ <<
"\t\t\t||" << endl;
130 cout <<
"||\t\tField scale:\t" << setprecision(4) << fieldScale <<
"\t\t\t||" << endl;
131 cout <<
"||\t\t\t\t\t\t\t||" << endl;
132 cout <<
"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||\n\n" << endl;
134 remove(geoFileName.Data());
138 fRunAna->SetSource(fFileSource);
140 if (dstFileName ==
"")
141 dstFileName =
"bmndst.root";
145 fRunAna->SetSink(
new FairRootFileSink(dstFileName));
146 fRunAna->SetGenerateRunInfo(
false);
161 if (run_period == 8 && isExp) {
163 eventSelector->
SetRunId(run_number);
164 eventSelector->
SetInputFileName(
"$VMCWORKDIR/input/eventSelector_calib_run8.root");
165 fRunAna->AddTask(eventSelector);
172 fRunAna->AddTask(trig);
177 if (run_period >= 8) {
185 fRunAna->AddTask(mwpcHP);
188 fRunAna->AddTask(mwpcHM);
197 fRunAna->AddTask(vspHM);
205 fRunAna->AddTask(siliconHM);
213 fRunAna->AddTask(gemHM);
223 fRunAna->AddTask(cscHM);
230 fRunAna->AddTask(tof400HP);
237 fRunAna->AddTask(tof700HP);
250 bool IsGlobalCoordinates =
true;
251 if (run_period >= 8) {
255 fRunAna->AddTask(fhcalReco);
258 fRunAna->AddTask(zdcAna);
264 IsGlobalCoordinates =
true;
267 fRunAna->AddTask(scwallReco);
275 fRunAna->AddTask(hodoReco);
280 IsGlobalCoordinates =
true;
283 fRunAna->AddTask(ndetReco);
290 fRunAna->AddTask(vacReco);
298 const char* alignSolution =
"solution_nn.json";
301 innerTrackBranchName =
"StsTrack";
303 innerTrackBranchName =
"StsVector";
304 if (run_period >= 8) {
310 fRunAna->AddTask(hitConverter);
313 if (run_period == 8) {
314 alignDetModel.
Init();
316 fRunAna->AddTask(aligner);
321 fRunAna->AddTask(kalman);
326 fRunAna->AddTask(l1);
330 fRunAna->AddTask(stsFindTracks);
336 fRunAna->AddTask(vf);
341 fRunAna->AddTask(stsMatchTracks);
346 fRunAna->AddTask(innerTF);
352 if (run_period >= 8) {
355 fRunAna->AddTask(beamTF);
359 fRunAna->AddTask(mwpcTF);
376 fRunAna->AddTask(findVertex);
380 fRunAna->AddTask(pvMPD);
383 fRunAna->AddTask(combPV);
396 fRunAna->AddTask(glTF);
407 fRunAna->AddTask(mcMatching);
414 fRunAna->AddTask(pid_analyser);
419 if (run_period < 8) {
421 fRunAna->AddTask(res);
428 fRunAna->AddTask(cclusterizer);
432 fRunAna->AddTask(dst_task);
435 FairRuntimeDb* rtdb = fRunAna->GetRuntimeDb();
436 FairParRootFileIo* parIo1 =
new FairParRootFileIo();
437 FairParAsciiFileIo* parIo2 =
new FairParAsciiFileIo();
438 parIo1->open(inFileName.Data());
439 parIo2->open(parFileNameList,
"in");
440 rtdb->setFirstInput(parIo1);
441 rtdb->setSecondInput(parIo2);
445 fRunAna->GetMainTask()->SetVerbose(iVerbose);
450 FairParRootFileIo* parOut =
new FairParRootFileIo(
kTRUE);
453 rtdb->setOutput(parOut);
454 rtdb->writeContainer(rtdb->getContainer(
"FairGeoParSet"), rtdb->getCurrentRun());
460 fRunAna->Run(nStartEvent, nStartEvent + nEvents);
469 cout << endl << endl;
470 cout <<
"Macro finished successfully." << endl;
471 cout <<
"Input file is " + inFileName << endl;
472 cout <<
"Output file is " + dstFileName << endl;
473 cout <<
"Real time " << rtime <<
" s, CPU time " << ctime <<
" s" << endl;