diff --git a/macro/beamtime/mcbm2020/mcbm_build_and_reco_kronos.C b/macro/beamtime/mcbm2020/mcbm_build_and_reco_kronos.C index e585a1efbe598dd0222b5747673fa3b95e9c6d80..9cb360c56aa28a9b70447b4d4bb3296bbd89fda1 100644 --- a/macro/beamtime/mcbm2020/mcbm_build_and_reco_kronos.C +++ b/macro/beamtime/mcbm2020/mcbm_build_and_reco_kronos.C @@ -1,16 +1,18 @@ // -------------------------------------------------------------------------- // // Macro for reconstruction of mcbm data (2020) -// Combined reconstruction (Event building + cluster + hit finder) for different subsystems. +// Combined event based reconstruction (Event building + cluster + hit finder) +// for different subsystems. // // -------------------------------------------------------------------------- void mcbm_build_and_reco_kronos(UInt_t uRunIdx = 28, - Int_t nEvents = 300, + Int_t nTimeslices = 300, TString outDir = "data/") { UInt_t uRunId = 0; - TString fileName = "data/unp_mcbm_0.root"; + TString inFile = "./data/unp_mcbm_0.root"; + TString parFileIn = "./data/unp_mcbm_params_0.root"; if (99999 != uRunIdx) { std::vector<UInt_t> vuListRunId = { 692, 698, 702, 704, 705, 706, 707, // 7 => 0 - 6 @@ -33,9 +35,12 @@ void mcbm_build_and_reco_kronos(UInt_t uRunIdx = 28, }; if (vuListRunId.size() <= uRunIdx) return kFALSE; uRunId = vuListRunId[uRunIdx]; - //fileName = Form("data/unp_mcbm_%03u.root", uRunId); - fileName = Form("/lustre/cbm/users/ploizeau/mcbm2020/" - "unp_evt_data_7f229b3f_20201103/unp_mcbm_%i.root", + + inFile = Form("/lustre/cbm/users/ploizeau/mcbm2020/" + "unp_evt_data_7f229b3f_20201103/unp_mcbm_%u.root", + uRunId); + parFileIn = Form("/lustre/cbm/users/ploizeau/mcbm2020/ + "unp_evt_data_7f229b3f_20201103/unp_mcbm_params_%u.root", uRunId); } // if( 99999 != uRunIdx ) @@ -45,44 +50,56 @@ void mcbm_build_and_reco_kronos(UInt_t uRunIdx = 28, // ======================================================================== // Adjust this part according to your requirements - // Verbosity level (0=quiet, 1=event level, 2=track level, 3=debug) - // Int_t iVerbose = 1; - - // --- Set log output levels - FairLogger::GetLogger(); - gLogger->SetLogScreenLevel("INFO"); - // gLogger->SetLogScreenLevel("DEBUG"); - gLogger->SetLogVerbosityLevel("MEDIUM"); + // --- Logger settings ---------------------------------------------------- + TString logLevel = "INFO"; + TString logVerbosity = "LOW"; + // ------------------------------------------------------------------------ - // MC file - TString srcDir = gSystem->Getenv("VMCWORKDIR"); + // ----- Environment -------------------------------------------------- + TString myName = "mcbm_reco"; // this macro's name for screen output + TString srcDir = gSystem->Getenv("VMCWORKDIR"); // top source directory TString paramDir = srcDir + "/macro/beamtime/mcbm2020/"; + // ------------------------------------------------------------------------ + + + // ----- In- and output file names ------------------------------------ + TString geoFile = paramDir + "mcbm2020_reco.geo.root"; // Created in sim. run + TString parFileOut = Form("./data/reco_mcbm_evt_win_params_%u.root", uRunId); + TString outFile = Form("./data/reco_mcbm_evt_win_%u.root", uRunId); + // ------------------------------------------------------------------------ + + // ----- Timer -------------------------------------------------------- TStopwatch timer; timer.Start(); // ------------------------------------------------------------------------ - // ----- Analysis run -------------------------------------------------- - // FairRunOnline *fRun= new FairRunOnline(); - FairRunAna* fRun = new FairRunAna(); - fRun->SetEventHeaderPersistence(kFALSE); - FairFileSource* inputSource = new FairFileSource(fileName); - fRun->SetSource(inputSource); + // ----- FairRunAna --------------------------------------------------- + FairRunAna* run = new FairRunAna(); + run->SetEventHeaderPersistence(kFALSE); + + FairFileSource* inputSource = new FairFileSource(inFile); + run->SetSource(inputSource); - TString runId = TString::Format("%03u", uRunId); - TString outFile = outDir + "/events_win_" + runId + ".root"; FairRootFileSink* outputSink = new FairRootFileSink(outFile); - fRun->SetSink(outputSink); + run->SetSink(outputSink); + run->SetGeomFile(geoFile); // Define output file for FairMonitor histograms - // TString monitorFile{outFile}; - // monitorFile.ReplaceAll("qa","qa.monitor"); - FairMonitor::GetMonitor()->EnableMonitor(kTRUE); - // FairMonitor::GetMonitor()->EnableMonitor(kFALSE); + TString monitorFile {outFile}; + monitorFile.ReplaceAll("rec", "rec.monitor"); + FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monitorFile); // ------------------------------------------------------------------------ + + // ----- Logger settings ---------------------------------------------- + FairLogger::GetLogger()->SetLogScreenLevel(logLevel.Data()); + FairLogger::GetLogger()->SetLogVerbosityLevel(logVerbosity.Data()); + // ------------------------------------------------------------------------ + + //-------- Event builder -------------------------------------------------- // CbmMcbm2019TimeWinEventBuilder* eventBuilder = new CbmMcbm2019TimeWinEventBuilder(); CbmMcbm2019TimeWinEventBuilderTask* eventBuilder = new CbmMcbm2019TimeWinEventBuilderTask(); @@ -154,37 +171,15 @@ void mcbm_build_and_reco_kronos(UInt_t uRunIdx = 28, eventBuilder->SetOutFilename( Form("%sHistosEvtWin_%03u.root", outDir.Data(), uRunId)); - fRun->AddTask(eventBuilder); - - // ----- Parameter database -------------------------------------------- - - TString parFileIn = - Form("/lustre/cbm/users/ploizeau/mcbm2020/unp_evt_data_7f229b3f_20201103/" - "unp_mcbm_params_%i.root", - uRunId); - TString parFileOut = Form("reco_mcbm_params_%i.root", uRunId); - - - FairRuntimeDb* rtdb = fRun->GetRuntimeDb(); - FairParRootFileIo* parIo1 = new FairParRootFileIo(); - FairParRootFileIo* parIo3 = new FairParRootFileIo(); - parIo1->open(parFileIn.Data(), "READ"); - parIo3->open(parFileOut.Data(), "RECREATE"); - rtdb->setFirstInput(parIo1); - rtdb->setOutput(parIo3); - - //----------------------------------Reconstruction------------------------------------- + run->AddTask(eventBuilder); + // ------------------------------------------------------------------------ - // ------------------------------------------------------------------------ - TString geoFileSts = paramDir + "mcbm2020_reco.geo.root"; - //TString geoFileSts = - // "/lustre/cbm/users/alberica/cbmroot/macro/beamtime/mcbm2020/data/test.geo.root"; // to be created by a simulation run - fRun->SetGeomFile(geoFileSts); + // ----- Reconstruction tasks ----------------------------------------- // ----- Local reconstruction in STS ---------------------------------- CbmRecoSts* recoSts = new CbmRecoSts(); - // recoSts->SetMode(kCbmRecoEvent); + recoSts->SetMode(kCbmRecoEvent); //recoSts->SetTimeCutDigisAbs( 20 );// cluster finder: time cut in ns //recoSts->SetTimeCutClustersAbs(20.); // hit finder: time cut in ns @@ -218,7 +213,7 @@ void mcbm_build_and_reco_kronos(UInt_t uRunIdx = 28, auto sensorCond = new CbmStsParSensorCond(70., 140., 268., 17.5, 1.); recoSts->UseSensorCond(sensorCond); - fRun->AddTask(recoSts); + run->AddTask(recoSts); std::cout << "-I- : Added task " << recoSts->GetName() << std::endl; // ------------------------------------------------------------------------ @@ -232,54 +227,108 @@ void mcbm_build_and_reco_kronos(UInt_t uRunIdx = 28, CbmMuchFindHitsGem* muchFindHits = new CbmMuchFindHitsGem(muchDigiFile.Data(), flag); muchFindHits->SetBeamTimeDigi(kTRUE); - fRun->AddTask(muchFindHits); + run->AddTask(muchFindHits); std::cout << "-I- : Added task " << muchFindHits->GetName() << std::endl; + // ------------------------------------------------------------------------ - //-------------------------------------------------------- + // ----- Local reconstruction in TRD ---------------------------------- + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction in TOF ---------------------------------- + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction of RICH Hits ------------------------------ + CbmRichMCbmHitProducer* hitProdRich = new CbmRichMCbmHitProducer(); + hitProdRich->setToTLimits(23.7, 30.0); + hitProdRich->applyToTCut(); + TString sRichMapFile = + srcDir + "/macro/rich/mcbm/beamtime/mRICH_Mapping_vert_20190318_elView.geo"; + hitProdRich->SetMappingFile(sRichMapFile.Data()); + run->AddTask(hitProdRich); + // ------------------------------------------------------------------------ + + // ----- Local reconstruction in RICh -> Finding of Rings --------------- + CbmRichReconstruction* richReco = new CbmRichReconstruction(); + richReco->UseMCbmSetup(); + run->AddTask(richReco); + // ------------------------------------------------------------------------ + + + // ----- Psd hit producer ---------------------------------------------- + CbmPsdMCbmHitProducer* hitProdPsd = new CbmPsdMCbmHitProducer(); + run->AddTask(hitProdPsd); + // ------------------------------------------------------------------------ + + + // ----- Parameter database -------------------------------------------- + std::cout << std::endl << std::endl; + std::cout << "-I- " << myName << ": Set runtime DB" << std::endl; + FairRuntimeDb* rtdb = run->GetRuntimeDb(); + FairParRootFileIo* parIo1 = new FairParRootFileIo(); + FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo(); + FairParRootFileIo* parIo3 = new FairParRootFileIo(); + parIo1->open(parFileIn.Data(), "READ"); + parIo3->open(parFileOut.Data(), "RECREATE"); + rtdb->setFirstInput(parIo1); + // ------------------------------------------------------------------------ - // ----- Intialise and run -------------------------------------------- - fRun->Init(); - // rtdb->setOutput(parIo1); - // rtdb->saveOutput(); - // rtdb->print(); + // ----- Run initialisation ------------------------------------------- + std::cout << std::endl; + std::cout << "-I- " << myName << ": Initialise run" << std::endl; + run->Init(); + rtdb->setOutput(parIo3); + rtdb->saveOutput(); + rtdb->print(); + // ------------------------------------------------------------------------ - cout << "Starting run" << endl; - if (0 == nEvents) { - fRun->Run(0, 0); // run until end of input file - } else { - fRun->Run(0, nEvents); // process N Events - } + + // ----- Start run ---------------------------------------------------- + std::cout << std::endl << std::endl; + std::cout << "-I- " << myName << ": Starting run" << std::endl; + run->Run(0, nTimeslices); // ------------------------------------------------------------------------ // ----- Finish ------------------------------------------------------- timer.Stop(); + FairMonitor::GetMonitor()->Print(); Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); - cout << endl << endl; - cout << "Macro finished succesfully." << endl; - cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << endl; - cout << endl; + 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 " << parFileOut << std::endl; + std::cout << "Real time " << rtime << " s, CPU time " << ctime << " s" + << std::endl; + std::cout << std::endl; // ------------------------------------------------------------------------ + + // ----- Resource monitoring ------------------------------------------ // Extract the maximal used memory an add is as Dart measurement // This line is filtered by CTest and the value send to CDash FairSystemInfo sysInfo; Float_t maxMemory = sysInfo.GetMaxMemory(); - cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">"; - cout << maxMemory; - cout << "</DartMeasurement>" << endl; + std::cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">"; + std::cout << maxMemory; + std::cout << "</DartMeasurement>" << std::endl; Float_t cpuUsage = ctime / rtime; - cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">"; - cout << cpuUsage; - cout << "</DartMeasurement>" << endl; + std::cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">"; + std::cout << cpuUsage; + std::cout << "</DartMeasurement>" << std::endl; + // ------------------------------------------------------------------------ + - FairMonitor* tempMon = FairMonitor::GetMonitor(); - tempMon->Print(); + // ----- Function needed for CTest runtime dependency ----------------- + // RemoveGeoManager(); + // ------------------------------------------------------------------------ - cout << " Test passed" << endl; - cout << " All ok " << endl; + /// --- Screen output for automatic tests + std::cout << " Test passed" << std::endl; + std::cout << " All ok " << std::endl; } diff --git a/macro/beamtime/mcbm2020/mcbm_event_reco.C b/macro/beamtime/mcbm2020/mcbm_event_reco.C index c74da1f94476df9af5276555bc2f1c3863734490..00553c221caeb4830fdb8c666d7eeefa0fada438 100644 --- a/macro/beamtime/mcbm2020/mcbm_event_reco.C +++ b/macro/beamtime/mcbm2020/mcbm_event_reco.C @@ -1,197 +1,227 @@ -// -------------------------------------------------------------------------- -// -// Macro for reconstruction of mcbm data (2020) -// MUCH STS local reconstruction (Event Building (Florian one) + cluster + hit finder) for the time being -// -// -------------------------------------------------------------------------- - -void mcbm_event_reco(Int_t runId = 831, Int_t nTimeslices = 300) { - - // --- Logger settings ---------------------------------------------------- - TString logLevel = "INFO"; - TString logVerbosity = "LOW"; - // ------------------------------------------------------------------------ - - - // ----- Environment -------------------------------------------------- - TString myName = "mcbm_reco"; // this macro's name for screen output - TString srcDir = gSystem->Getenv("VMCWORKDIR"); // top source directory - TString paramDir = srcDir + "/macro/beamtime/mcbm2020/"; - // TString srcDir1 = gSystem->Getenv("SLURM_INDEX"); // ------------------------------------------------------------------------ - - - // ----- In- and output file names ------------------------------------ - TString inFile = Form("./data/unp_mcbm_%i.root", runId); - TString parFile = Form("./data/unp_mcbm_params_%i.root", runId); - TString geoFile = paramDir + "mcbm2020_reco.geo.root"; // Created in sim. run - TString outFile = Form("./data/reco_mcbm_%i.root", runId); - // ------------------------------------------------------------------------ - - - // ------------------------------------------------------------------------ - TString parDir = - TString(gSystem->Getenv("VMCWORKDIR")) + TString("/parameters"); - TString muchDigiFile( - parDir + "/much/much_v19c_mcbm_digi_sector.root"); // MUCH digi file - - // ----- Timer -------------------------------------------------------- - TStopwatch timer; - timer.Start(); - // ------------------------------------------------------------------------ - - - // ---- Debug option ------------------------------------------------- - gDebug = 0; - // ------------------------------------------------------------------------ - - - // ----- FairRunAna --------------------------------------------------- - FairRunAna* run = new FairRunAna(); - FairFileSource* inputSource = new FairFileSource(inFile); - run->SetSource(inputSource); - - run->SetOutputFile(outFile); - //run->SetGenerateRunInfo(kTRUE); - run->SetGeomFile(geoFile); - - TString monitorFile {outFile}; - monitorFile.ReplaceAll("rec", "rec.monitor"); - FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monitorFile); - // ----------------------------------------------------------------------- - - - // ----- Logger settings ---------------------------------------------- - FairLogger::GetLogger()->SetLogScreenLevel(logLevel.Data()); - FairLogger::GetLogger()->SetLogVerbosityLevel(logVerbosity.Data()); - // ------------------------------------------------------------------------ - - //--------------------event builder-------------------// - CbmMcbm2018EventBuilder* eventBuilder = new CbmMcbm2018EventBuilder(); - // eventBuilder->SetEventBuilderAlgo(EventBuilderAlgo::MaximumTimeGap); - //eventBuilder->SetMaximumTimeGap(50.); - eventBuilder->SetEventBuilderAlgo(EventBuilderAlgo::FixedTimeWindow); - eventBuilder->SetFixedTimeWindow(200.); - eventBuilder->SetTriggerMinNumberT0(1); - //eventBuilder->SetTriggerMinNumberSts(0); - eventBuilder->SetTriggerMinNumberMuch(1); - eventBuilder->SetTriggerMinNumberTof(10); - run->AddTask(eventBuilder); - - // ----- Reconstruction tasks ----------------------------------------- - - // ------------------------------------------------------------------------ - Int_t flag = 1; - CbmMuchFindHitsGem* muchFindHits = - new CbmMuchFindHitsGem(muchDigiFile.Data(), flag); - muchFindHits->SetBeamTimeDigi(kTRUE); - run->AddTask(muchFindHits); - std::cout << "-I- : Added task " << muchFindHits->GetName() << std::endl; - //------------------------------------------------------------------------------- - - - // ----- Local reconstruction in STS ---------------------------------- - CbmRecoSts* recoSts = new CbmRecoSts(); - // recoSts->SetMode(kCbmRecoEvent); - - //recoSts->SetTimeCutDigisAbs( 20 );// cluster finder: time cut in ns - //recoSts->SetTimeCutClustersAbs(20.); // hit finder: time cut in ns - - // ASIC params: #ADC channels, dyn. range, threshold, time resol., dead time, - // noise RMS, zero-threshold crossing rate - auto parAsic = - new CbmStsParAsic(32, 75000., 3000., 5., 800., 1000., 3.9789e-3); - - // Module params: number of channels, number of channels per ASIC - auto parMod = new CbmStsParModule(2048, 128); - parMod->SetAllAsics(*parAsic); - recoSts->UseModulePar(parMod); - - // Sensor params - auto sensorPar = new CbmStsParSensor(CbmStsSensorClass::kDssdStereo); - sensorPar->SetPar(0, 6.2092); // Extension in x - sensorPar->SetPar(1, 6.2); // Extension in y - sensorPar->SetPar(2, 0.03); // Extension in z - sensorPar->SetPar(3, 5.9692); // Active size in y - sensorPar->SetPar(4, 1024.); // Number of strips front side - sensorPar->SetPar(5, 1024.); // Number of strips back side - sensorPar->SetPar(6, 0.0058); // Strip pitch front side - sensorPar->SetPar(7, 0.0058); // Strip pitch back side - sensorPar->SetPar(8, 7.5); // Stereo angle front side - sensorPar->SetPar(9, 0.0); // Stereo angle back side - recoSts->UseSensorPar(sensorPar); - - // Sensor conditions: full depletion voltage, bias voltage, temperature, - // coupling capacitance, inter-strip capacitance - auto sensorCond = new CbmStsParSensorCond(70., 140., 268., 17.5, 1.); - recoSts->UseSensorCond(sensorCond); - - fRun->AddTask(recoSts); - std::cout << "-I- : Added task " << recoSts->GetName() << std::endl; - // ------------------------------------------------------------------------ - - - // ----- Parameter database -------------------------------------------- - std::cout << std::endl << std::endl; - std::cout << "-I- " << myName << ": Set runtime DB" << std::endl; - FairRuntimeDb* rtdb = run->GetRuntimeDb(); - FairParRootFileIo* parIo1 = new FairParRootFileIo(); - FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo(); - parIo1->open(parFile.Data(), "UPDATE"); - rtdb->setFirstInput(parIo1); - // ------------------------------------------------------------------------ - - - // ----- Run initialisation ------------------------------------------- - std::cout << std::endl; - std::cout << "-I- " << myName << ": Initialise run" << std::endl; - run->Init(); - rtdb->setOutput(parIo1); - rtdb->saveOutput(); - rtdb->print(); - // ------------------------------------------------------------------------ - - - // ----- Start run ---------------------------------------------------- - std::cout << std::endl << std::endl; - std::cout << "-I- " << myName << ": Starting run" << std::endl; - run->Run(0, nTimeslices); - // ------------------------------------------------------------------------ - - - // ----- Finish ------------------------------------------------------- - timer.Stop(); - FairMonitor::GetMonitor()->Print(); - 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 " << parFileOut << std::endl; - std::cout << "Real time " << rtime << " s, CPU time " << ctime << " s" - << std::endl; - std::cout << std::endl; - std::cout << " Test passed" << std::endl; - std::cout << " All ok " << std::endl; - // ------------------------------------------------------------------------ - - - // ----- Resource monitoring ------------------------------------------ - // Extract the maximal used memory an add is as Dart measurement - // This line is filtered by CTest and the value send to CDash - FairSystemInfo sysInfo; - Float_t maxMemory = sysInfo.GetMaxMemory(); - std::cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">"; - std::cout << maxMemory; - std::cout << "</DartMeasurement>" << std::endl; - - Float_t cpuUsage = ctime / rtime; - std::cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">"; - std::cout << cpuUsage; - std::cout << "</DartMeasurement>" << std::endl; - // ------------------------------------------------------------------------ - - - // ----- Function needed for CTest runtime dependency ----------------- - // RemoveGeoManager(); - // ------------------------------------------------------------------------ -} +// -------------------------------------------------------------------------- +// +// Macro for reconstruction of mcbm data (2020) +// Combined Event based local reconstruction (Event Building (Florian one) + +// cluster + hit finder) for different subsystems. +// +// -------------------------------------------------------------------------- + +void mcbm_event_reco(Int_t runId = 831, Int_t nTimeslices = 300) { + + // --- Logger settings ---------------------------------------------------- + TString logLevel = "INFO"; + TString logVerbosity = "LOW"; + // ------------------------------------------------------------------------ + + + // ----- Environment -------------------------------------------------- + TString myName = "mcbm_reco"; // this macro's name for screen output + TString srcDir = gSystem->Getenv("VMCWORKDIR"); // top source directory + TString paramDir = srcDir + "/macro/beamtime/mcbm2020/"; + // ------------------------------------------------------------------------ + + + // ----- In- and output file names ------------------------------------ + TString inFile = Form("./data/unp_mcbm_%i.root", runId); + TString parFile = Form("./data/unp_mcbm_params_%i.root", runId); + TString geoFile = paramDir + "mcbm2020_reco.geo.root"; // Created in sim. run + TString outFile = Form("./data/reco_mcbm_%i.root", runId); + // ------------------------------------------------------------------------ + + + // ----- Timer -------------------------------------------------------- + TStopwatch timer; + timer.Start(); + // ------------------------------------------------------------------------ + + + // ----- FairRunAna --------------------------------------------------- + FairRunAna* run = new FairRunAna(); + FairFileSource* inputSource = new FairFileSource(inFile); + run->SetSource(inputSource); + + FairRootFileSink* outputSink = new FairRootFileSink(outFile); + run->SetSink(outputSink); + run->SetGeomFile(geoFile); + + // Define output file for FairMonitor histograms + TString monitorFile {outFile}; + monitorFile.ReplaceAll("rec", "rec.monitor"); + FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monitorFile); + // ------------------------------------------------------------------------ + + + // ----- Logger settings ---------------------------------------------- + FairLogger::GetLogger()->SetLogScreenLevel(logLevel.Data()); + FairLogger::GetLogger()->SetLogVerbosityLevel(logVerbosity.Data()); + // ------------------------------------------------------------------------ + + //--------------------event builder-------------------// + CbmMcbm2018EventBuilder* eventBuilder = new CbmMcbm2018EventBuilder(); + // eventBuilder->SetEventBuilderAlgo(EventBuilderAlgo::MaximumTimeGap); + //eventBuilder->SetMaximumTimeGap(50.); + eventBuilder->SetEventBuilderAlgo(EventBuilderAlgo::FixedTimeWindow); + eventBuilder->SetFixedTimeWindow(200.); + eventBuilder->SetTriggerMinNumberT0(1); + //eventBuilder->SetTriggerMinNumberSts(0); + eventBuilder->SetTriggerMinNumberMuch(1); + eventBuilder->SetTriggerMinNumberTof(10); + run->AddTask(eventBuilder); + // ------------------------------------------------------------------------ + + + // ----- Reconstruction tasks ----------------------------------------- + + // ----- Local reconstruction in MUCH --------------------------------- + Int_t flag = 1; + TString parDir = + TString(gSystem->Getenv("VMCWORKDIR")) + TString("/parameters"); + TString muchDigiFile( + parDir + "/much/much_v19c_mcbm_digi_sector.root"); // MUCH digi file + CbmMuchFindHitsGem* muchFindHits = + new CbmMuchFindHitsGem(muchDigiFile.Data(), flag); + muchFindHits->SetBeamTimeDigi(kTRUE); + run->AddTask(muchFindHits); + std::cout << "-I- : Added task " << muchFindHits->GetName() << std::endl; + //------------------------------------------------------------------------------- + + + // ----- Local reconstruction in STS ---------------------------------- + CbmRecoSts* recoSts = new CbmRecoSts(); + recoSts->SetMode(kCbmRecoEvent); + + //recoSts->SetTimeCutDigisAbs( 20 );// cluster finder: time cut in ns + //recoSts->SetTimeCutClustersAbs(20.); // hit finder: time cut in ns + + // ASIC params: #ADC channels, dyn. range, threshold, time resol., dead time, + // noise RMS, zero-threshold crossing rate + auto parAsic = + new CbmStsParAsic(32, 75000., 3000., 5., 800., 1000., 3.9789e-3); + + // Module params: number of channels, number of channels per ASIC + auto parMod = new CbmStsParModule(2048, 128); + parMod->SetAllAsics(*parAsic); + recoSts->UseModulePar(parMod); + + // Sensor params + auto sensorPar = new CbmStsParSensor(CbmStsSensorClass::kDssdStereo); + sensorPar->SetPar(0, 6.2092); // Extension in x + sensorPar->SetPar(1, 6.2); // Extension in y + sensorPar->SetPar(2, 0.03); // Extension in z + sensorPar->SetPar(3, 5.9692); // Active size in y + sensorPar->SetPar(4, 1024.); // Number of strips front side + sensorPar->SetPar(5, 1024.); // Number of strips back side + sensorPar->SetPar(6, 0.0058); // Strip pitch front side + sensorPar->SetPar(7, 0.0058); // Strip pitch back side + sensorPar->SetPar(8, 7.5); // Stereo angle front side + sensorPar->SetPar(9, 0.0); // Stereo angle back side + recoSts->UseSensorPar(sensorPar); + + // Sensor conditions: full depletion voltage, bias voltage, temperature, + // coupling capacitance, inter-strip capacitance + auto sensorCond = new CbmStsParSensorCond(70., 140., 268., 17.5, 1.); + recoSts->UseSensorCond(sensorCond); + + run->AddTask(recoSts); + std::cout << "-I- : Added task " << recoSts->GetName() << std::endl; + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction in TRD ---------------------------------- + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction in TOF ---------------------------------- + // ------------------------------------------------------------------------ + + + // ----- Local reconstruction of RICH Hits ------------------------------ + CbmRichMCbmHitProducer* hitProdRich = new CbmRichMCbmHitProducer(); + hitProdRich->setToTLimits(23.7, 30.0); + hitProdRich->applyToTCut(); + TString sRichMapFile = + srcDir + "/macro/rich/mcbm/beamtime/mRICH_Mapping_vert_20190318_elView.geo"; + hitProdRich->SetMappingFile(sRichMapFile.Data()); + run->AddTask(hitProdRich); + // ------------------------------------------------------------------------ + + // ----- Local reconstruction in RICh -> Finding of Rings --------------- + CbmRichReconstruction* richReco = new CbmRichReconstruction(); + richReco->UseMCbmSetup(); + run->AddTask(richReco); + // ------------------------------------------------------------------------ + + + // ----- Psd hit producer ---------------------------------------------- + CbmPsdMCbmHitProducer* hitProdPsd = new CbmPsdMCbmHitProducer(); + run->AddTask(hitProdPsd); + // ------------------------------------------------------------------------ + + + // ----- Parameter database -------------------------------------------- + std::cout << std::endl << std::endl; + std::cout << "-I- " << myName << ": Set runtime DB" << std::endl; + FairRuntimeDb* rtdb = run->GetRuntimeDb(); + FairParRootFileIo* parIo1 = new FairParRootFileIo(); + FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo(); + parIo1->open(parFile.Data(), "UPDATE"); + rtdb->setFirstInput(parIo1); + // ------------------------------------------------------------------------ + + + // ----- Run initialisation ------------------------------------------- + std::cout << std::endl; + std::cout << "-I- " << myName << ": Initialise run" << std::endl; + run->Init(); + rtdb->setOutput(parIo1); + rtdb->saveOutput(); + rtdb->print(); + // ------------------------------------------------------------------------ + + + // ----- Start run ---------------------------------------------------- + std::cout << std::endl << std::endl; + std::cout << "-I- " << myName << ": Starting run" << std::endl; + run->Run(0, nTimeslices); + // ------------------------------------------------------------------------ + + + // ----- Finish ------------------------------------------------------- + timer.Stop(); + FairMonitor::GetMonitor()->Print(); + 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 " << parFileOut << std::endl; + std::cout << "Real time " << rtime << " s, CPU time " << ctime << " s" + << std::endl; + std::cout << std::endl; + // ------------------------------------------------------------------------ + + + // ----- Resource monitoring ------------------------------------------ + // Extract the maximal used memory an add is as Dart measurement + // This line is filtered by CTest and the value send to CDash + FairSystemInfo sysInfo; + Float_t maxMemory = sysInfo.GetMaxMemory(); + std::cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">"; + std::cout << maxMemory; + std::cout << "</DartMeasurement>" << std::endl; + + Float_t cpuUsage = ctime / rtime; + std::cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">"; + std::cout << cpuUsage; + std::cout << "</DartMeasurement>" << std::endl; + // ------------------------------------------------------------------------ + + + // ----- Function needed for CTest runtime dependency ----------------- + // RemoveGeoManager(); + // ------------------------------------------------------------------------ + + /// --- Screen output for automatic tests + std::cout << " Test passed" << std::endl; + std::cout << " All ok " << std::endl; +} diff --git a/macro/beamtime/mcbm2020/mcbm_reco.C b/macro/beamtime/mcbm2020/mcbm_reco.C index 67a450068f61854b61587da3d0bceae7da534d9b..c3d5a98522b6ed67573ad8dc91bbc57932faf9ec 100644 --- a/macro/beamtime/mcbm2020/mcbm_reco.C +++ b/macro/beamtime/mcbm2020/mcbm_reco.C @@ -35,24 +35,20 @@ void mcbm_reco(Int_t runId = 831, Int_t nTimeslices = 0) { // ------------------------------------------------------------------------ - // ---- Debug option ------------------------------------------------- - gDebug = 0; - // ------------------------------------------------------------------------ - - // ----- FairRunAna --------------------------------------------------- FairRunAna* run = new FairRunAna(); FairFileSource* inputSource = new FairFileSource(inFile); run->SetSource(inputSource); - run->SetOutputFile(outFile); - // run->SetGenerateRunInfo(kTRUE); + FairRootFileSink* outputSink = new FairRootFileSink(outFile); + run->SetSink(outputSink); run->SetGeomFile(geoFile); + // Define output file for FairMonitor histograms TString monitorFile {outFile}; monitorFile.ReplaceAll("rec", "rec.monitor"); FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monitorFile); - // ----------------------------------------------------------------------- + // ------------------------------------------------------------------------ // ----- Logger settings ---------------------------------------------- @@ -78,8 +74,9 @@ void mcbm_reco(Int_t runId = 831, Int_t nTimeslices = 0) { // ----- Local reconstruction in STS ---------------------------------- CbmRecoSts* recoSts = new CbmRecoSts(); - //recoSts->SetTimeCutDigisAbs( 100 );// cluster finder: time cut in ns - //recoSts->SetTimeCutClustersAbs(100.); // hit finder: time cut in ns + + //recoSts->SetTimeCutDigisAbs( 20 );// cluster finder: time cut in ns + //recoSts->SetTimeCutClustersAbs(20.); // hit finder: time cut in ns // ASIC params: #ADC channels, dyn. range, threshold, time resol., dead time, // noise RMS, zero-threshold crossing rate @@ -115,9 +112,6 @@ void mcbm_reco(Int_t runId = 831, Int_t nTimeslices = 0) { // ------------------------------------------------------------------------ - // ------------------------------------------------------------------------ - - // ----- Local reconstruction in TRD ---------------------------------- // ------------------------------------------------------------------------ @@ -148,6 +142,7 @@ void mcbm_reco(Int_t runId = 831, Int_t nTimeslices = 0) { run->AddTask(hitProdPsd); // ------------------------------------------------------------------------ + // ----- Parameter database -------------------------------------------- std::cout << std::endl << std::endl; std::cout << "-I- " << myName << ": Set runtime DB" << std::endl; @@ -156,7 +151,6 @@ void mcbm_reco(Int_t runId = 831, Int_t nTimeslices = 0) { FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo(); parIo1->open(parFile.Data(), "UPDATE"); rtdb->setFirstInput(parIo1); - // ------------------------------------------------------------------------ diff --git a/macro/beamtime/mcbm2020/mcbm_reco_kronos.C b/macro/beamtime/mcbm2020/mcbm_reco_kronos.C index acfee88579ccf43dcca219c448fedf52e23543c6..5c9147d045a6bf7b0c0f6fd7db4d87ad80a42754 100644 --- a/macro/beamtime/mcbm2020/mcbm_reco_kronos.C +++ b/macro/beamtime/mcbm2020/mcbm_reco_kronos.C @@ -17,7 +17,6 @@ void mcbm_reco_kronos(Int_t runId = 831, Int_t nTimeslices = 0) { TString myName = "mcbm_reco"; // this macro's name for screen output TString srcDir = gSystem->Getenv("VMCWORKDIR"); // top source directory TString paramDir = srcDir + "/macro/beamtime/mcbm2020/"; - // TString srcDir1 = gSystem->Getenv("SLURM_INDEX"); // ------------------------------------------------------------------------ @@ -29,8 +28,8 @@ void mcbm_reco_kronos(Int_t runId = 831, Int_t nTimeslices = 0) { Form("/lustre/cbm/users/ploizeau/mcbm2020/unp_evt_data_7f229b3f_20201103/" "unp_mcbm_params_%i.root", runId); - TString parFileOut = Form("reco_mcbm_params_%i.root", runId); TString geoFile = paramDir + "mcbm2020_reco.geo.root"; // Created in sim. run + TString parFileOut = Form("./data/reco_mcbm_params_%i.root", runId); TString outFile = Form("./data/reco_mcbm_%i.root", runId); // ------------------------------------------------------------------------ @@ -41,24 +40,20 @@ void mcbm_reco_kronos(Int_t runId = 831, Int_t nTimeslices = 0) { // ------------------------------------------------------------------------ - // ---- Debug option ------------------------------------------------- - gDebug = 0; - // ------------------------------------------------------------------------ - - // ----- FairRunAna --------------------------------------------------- FairRunAna* run = new FairRunAna(); FairFileSource* inputSource = new FairFileSource(inFile); run->SetSource(inputSource); - run->SetOutputFile(outFile); - //run->SetGenerateRunInfo(kTRUE); + FairRootFileSink* outputSink = new FairRootFileSink(outFile); + run->SetSink(outputSink); run->SetGeomFile(geoFile); + // Define output file for FairMonitor histograms TString monitorFile {outFile}; monitorFile.ReplaceAll("rec", "rec.monitor"); FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monitorFile); - // ----------------------------------------------------------------------- + // ------------------------------------------------------------------------ // ----- Logger settings ---------------------------------------------- @@ -80,13 +75,13 @@ void mcbm_reco_kronos(Int_t runId = 831, Int_t nTimeslices = 0) { muchFindHits->SetBeamTimeDigi(kTRUE); run->AddTask(muchFindHits); std::cout << "-I- : Added task " << muchFindHits->GetName() << std::endl; - //-------------------------------------------------------- // ----- Local reconstruction in STS ---------------------------------- CbmRecoSts* recoSts = new CbmRecoSts(); - //recoSts->SetTimeCutDigisAbs( 100 );// cluster finder: time cut in ns - //recoSts->SetTimeCutClustersAbs(100.); // hit finder: time cut in ns + + //recoSts->SetTimeCutDigisAbs( 20 );// cluster finder: time cut in ns + //recoSts->SetTimeCutClustersAbs(20.); // hit finder: time cut in ns // ASIC params: #ADC channels, dyn. range, threshold, time resol., dead time, // noise RMS, zero-threshold crossing rate @@ -152,27 +147,25 @@ void mcbm_reco_kronos(Int_t runId = 831, Int_t nTimeslices = 0) { run->AddTask(hitProdPsd); // ------------------------------------------------------------------------ + // ----- Parameter database -------------------------------------------- std::cout << std::endl << std::endl; std::cout << "-I- " << myName << ": Set runtime DB" << std::endl; FairRuntimeDb* rtdb = run->GetRuntimeDb(); FairParRootFileIo* parIo1 = new FairParRootFileIo(); FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo(); - // ------------------------------------------------------------------------ - FairParRootFileIo* parIo3 = new FairParRootFileIo(); parIo1->open(parFileIn.Data(), "READ"); parIo3->open(parFileOut.Data(), "RECREATE"); rtdb->setFirstInput(parIo1); - rtdb->setOutput(parIo3); + // ------------------------------------------------------------------------ - //-------------------------------------------------------------------------- // ----- Run initialisation ------------------------------------------- std::cout << std::endl; std::cout << "-I- " << myName << ": Initialise run" << std::endl; run->Init(); - rtdb->setOutput(parIo1); + rtdb->setOutput(parIo3); rtdb->saveOutput(); rtdb->print(); // ------------------------------------------------------------------------