21 Int_t nStartEvent = 0,
32 FairLogger::GetLogger()->SetLogScreenLevel(
"info");
44 FairRunAna* fRunAna =
new FairRunAna();
53 Int_t run_period = -1, run_number = -1;
55 fFileSource =
new FairFileSource(inFileName);
62 fFileSource =
new BmnFileSource(inFileName, run_period, run_number);
70 LOG(fatal) <<
"Geometry '" << geometryTag <<
"' not loaded. Error status: " << errStatus << endl;
71 LOG(info) <<
"Geometry with '" << geometryTag <<
"' tag is chosen";
83 int prev_mag_period = run_period, prev_mag_run = run_number;
85 if ((field_voltage == 0) and (prev_mag_run == run_number) and (prev_mag_period == run_period))
86 LOG(fatal) <<
"no any field voltage was found for run " << run_period <<
":" << run_number << endl;
88 LOG(fatal) <<
"no field voltage was found for run " << run_period <<
":" << run_number << endl;
90 Double_t map_voltage = (run_period < 8) ? 55.87 : 112.0;
92 if (field_voltage < 10) {
95 fieldScale = (field_voltage) / map_voltage;
109 fRunAna->SetField(magField);
121 cout <<
"\n\n|||||||||||||||| EXPERIMENTAL RUN SUMMARY ||||||||||||||||" << endl;
122 cout <<
"||\t\t\t\t\t\t\t||" << endl;
123 cout <<
"||\t\tPeriod:\t\t" << run_period <<
"\t\t\t||" << endl;
124 cout <<
"||\t\tNumber:\t\t" << run_number <<
"\t\t\t||" << endl;
125 cout <<
"||\t\tBeam:\t\t" << beam <<
"\t\t\t||" << endl;
126 cout <<
"||\t\tTarget:\t\t" << targ <<
"\t\t\t||" << endl;
127 cout <<
"||\t\tField scale:\t" << setprecision(4) << fieldScale <<
"\t\t\t||" << endl;
128 cout <<
"||\t\t\t\t\t\t\t||" << endl;
129 cout <<
"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||\n\n" << endl;
133 fRunAna->SetSource(fFileSource);
135 if (dstFileName ==
"")
136 dstFileName =
"bmndst.root";
140 fRunAna->SetSink(
new FairRootFileSink(dstFileName));
141 fRunAna->SetGenerateRunInfo(
false);
154 if (run_period == 8 && isExp) {
156 eventSelector->
SetRunId(run_number);
157 eventSelector->
SetInputFileName(
"$VMCWORKDIR/input/eventSelector_calib_run8.root");
158 fRunAna->AddTask(eventSelector);
165 fRunAna->AddTask(trig);
170 if (run_period >= 8) {
173 fRunAna->AddTask(sibtHM);
178 fRunAna->AddTask(mwpcHP);
181 fRunAna->AddTask(mwpcHM);
190 fRunAna->AddTask(vspHM);
198 fRunAna->AddTask(siliconHM);
206 fRunAna->AddTask(gemHM);
214 fRunAna->AddTask(cscHM);
221 fRunAna->AddTask(tof400HP);
228 fRunAna->AddTask(tof700HP);
241 bool IsGlobalCoordinates =
true;
242 if (run_period >= 8) {
246 fRunAna->AddTask(fhcalReco);
249 fRunAna->AddTask(zdcAna);
255 IsGlobalCoordinates =
true;
258 fRunAna->AddTask(scwallReco);
266 fRunAna->AddTask(hodoReco);
271 IsGlobalCoordinates =
true;
274 fRunAna->AddTask(ndetReco);
281 fRunAna->AddTask(vacReco);
291 innerTrackBranchName =
"StsTrack";
293 innerTrackBranchName =
"StsVector";
294 if (run_period >= 8) {
300 if (run_period > 8) {
306 fRunAna->AddTask(hitConverter);
309 fRunAna->AddTask(kalman);
318 fRunAna->AddTask(stsFindTracks);
324 if (run_period > 8) {
327 fRunAna->AddTask(vf);
332 fRunAna->AddTask(stsMatchTracks);
338 if (run_period >= 8) {
341 fRunAna->AddTask(beamTF);
345 fRunAna->AddTask(mwpcTF);
362 fRunAna->AddTask(findVertex);
366 fRunAna->AddTask(pvMPD);
369 fRunAna->AddTask(combPV);
383 glTF->SetRunNumber(run_number);
385 fRunAna->AddTask(glTF);
396 fRunAna->AddTask(mcMatching);
405 if (run_period == 8) {
407 fRunAna->AddTask(dedx);
413 if (run_period < 8) {
415 fRunAna->AddTask(res);
422 fRunAna->AddTask(cclusterizer);
426 fRunAna->AddTask(dst_task);
429 FairRuntimeDb* rtdb = fRunAna->GetRuntimeDb();
430 FairParRootFileIo* parIo1 =
new FairParRootFileIo();
432 parIo1->open(inFileName.
Data());
434 rtdb->setFirstInput(parIo1);
439 fRunAna->GetMainTask()->SetVerbose(iVerbose);
444 FairParRootFileIo* parOut =
new FairParRootFileIo(
kTRUE);
447 rtdb->setOutput(parOut);
449 rtdb->getContainer(
"FairGeoParSet")->setDescription(geometryTag.Data());
450 rtdb->writeContainer(rtdb->getContainer(
"FairGeoParSet"), rtdb->getCurrentRun());
456 fRunAna->Run(nStartEvent, nStartEvent + nEvents);
465 cout << endl << endl;
466 cout <<
"Macro finished successfully." << endl;
467 cout <<
"Input file is " + inFileName << endl;
468 cout <<
"Output file is " + dstFileName << endl;
469 cout <<
"Real time " << rtime <<
" s, CPU time " << ctime <<
" s" << endl;