void mcbm_hadron_analysis(Int_t nEvents = 10, TString setup="mcbm_beam_2019_11", const char* output = "test") { TString dataset(output); TString InputFile = dataset + ".tra.root"; TString DigiFile = dataset + ".event.raw.root"; TString RecoFile = dataset + ".rec.root"; TString ParFile = dataset + ".par.root"; TString OutFile = dataset + ".ana.root"; FairLogger::GetLogger()->SetLogScreenLevel("INFO"); FairLogger::GetLogger()->SetLogVerbosityLevel("VERYHIGH"); // ----- Timer -------------------------------------------------------- TStopwatch timer; timer.Start(); // ------------------------------------------------------------------------ // ----- Reconstruction run ------------------------------------------- FairFileSource* inputFiles = new FairFileSource(InputFile.Data()); inputFiles->AddFriend(RecoFile.Data()); inputFiles->AddFriend(DigiFile.Data()); FairRootFileSink* sink = new FairRootFileSink(OutFile.Data()); FairRunAna *fRun= new FairRunAna(); fRun->SetSource(inputFiles); fRun->SetSink(sink); // ----- Parameter database -------------------------------------------- FairRuntimeDb* rtdb = fRun->GetRuntimeDb(); FairParRootFileIo* parInput1 = new FairParRootFileIo(); parInput1->open(ParFile.Data()); rtdb->setFirstInput(parInput1); /* CbmMCDataManager* mcManager = new CbmMCDataManager("MCDataManager", 1); mcManager->AddFile(InputFile); fRun->AddTask(mcManager); CbmMatchRecoToMC* match = new CbmMatchRecoToMC(); fRun->AddTask(match); */ CbmHadronAnalysis *HadronAna = new CbmHadronAnalysis(); // in hadron HadronAna->SetBeamMomentum(1.65); // beam momentum HadronAna->SetDY(0.5); // flow analysis exclusion window HadronAna->SetRecSec(kTRUE); // enable lambda reconstruction Int_t parSet=1; switch(parSet){ case 0: // with background HadronAna->SetDistPrimLim(1.2); // Max Tof-Sts trans distance for primaries HadronAna->SetDistPrimLim2(0.3); // Max Sts-Sts trans distance for primaries HadronAna->SetDistSecLim2(0.3); // Max Sts-Sts trans distance from TOF direction for secondaries HadronAna->SetD0ProtLim(0.5); // Min impact parameter for secondary proton HadronAna->SetOpAngMin(0.1); // Min opening angle for accepting pair HadronAna->SetDCALim(0.1); // Max DCA for accepting pair HadronAna->SetVLenMin(5.); // Min Lambda flight path length for accepting pair HadronAna->SetVLenMax(25.); // Max Lambda flight path length for accepting pair HadronAna->SetNMixedEvents(10); // Number of events to be mixed with break; case 1: // signal only, debugging HadronAna->SetDistPrimLim(0.5); // Max Tof-Sts trans distance for primaries HadronAna->SetDistPrimLim2(0.3); // Max Sts-Sts trans distance for primaries HadronAna->SetDistSecLim2(0.3); // Max Sts-Sts trans distance from TOF direction for secondaries HadronAna->SetD0ProtLim(0.4); // Min impact parameter for secondary proton HadronAna->SetOpAngMin(0.1); // Min opening angle for accepting pair HadronAna->SetDCALim(0.2); // Max DCA for accepting pair HadronAna->SetVLenMin(5.); // Min Lambda flight path length for accepting pair HadronAna->SetVLenMax(25.); // Max Lambda flight path length for accepting pair HadronAna->SetNMixedEvents(10); // Number of events to be mixed with break; } fRun->AddTask(HadronAna); // ----- Intialise and run -------------------------------------------- fRun->Init(); cout << "Starting run" << endl; fRun->Run(0, nEvents); // ------------------------------------------------------------------------ // save histos to file TFile *fHist = fRun->GetOutputFile(); fHist->Write(); // ----- Finish ------------------------------------------------------- timer.Stop(); Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); std::cout << std::endl << std::endl; std::cout << "Macro finished successfully." << std::endl; std::cout << "Output file is " << OutFile << std::endl; std::cout << "Parameter file is " << ParFile << std::endl; std::cout << "Real time " << rtime << " s, CPU time " << ctime << "s" << std::endl << std::endl; // ------------------------------------------------------------------------ // ----- Resource monitoring ------------------------------------------ FairSystemInfo sysInfo; Float_t maxMemory=sysInfo.GetMaxMemory(); std::cout << ""; std::cout << maxMemory; std::cout << "" << std::endl; Float_t cpuUsage=ctime/rtime; std::cout << ""; std::cout << cpuUsage; std::cout << "" << std::endl; std::cout << " Test passed" << std::endl; std::cout << " All ok " << std::endl; // ------------------------------------------------------------------------ RemoveGeoManager(); }