From 4d8d31f5e7fd94c0eebcb79ef62ff0a273381d70 Mon Sep 17 00:00:00 2001 From: P-A Loizeau <p.-a.loizeau@gsi.de> Date: Thu, 2 Jul 2020 17:03:26 +0200 Subject: [PATCH] mCBM 2020: add CDASH test if tsa files present + corresponding changes/fixes in tested macros --- macro/beamtime/CMakeLists.txt | 129 +++- .../beamtime/mcbm2020/Dart_mcbm_mcbmop01.cfg | 22 + macro/beamtime/mcbm2020/MonitorPsd.C | 6 +- macro/beamtime/mcbm2020/MonitorTof.C | 4 +- macro/beamtime/mcbm2020/MonitorTrd.C | 21 +- macro/beamtime/mcbm2020/build_event_win.C | 132 ++++ .../mcbm2020/build_event_win_kronos.C | 159 +++++ macro/beamtime/mcbm2020/build_events.C | 3 + macro/beamtime/mcbm2020/check_events.C | 68 +- .../mcbm2020/unpack_check_time_mcbm_kronos.C | 619 ++++++++++++++++++ 10 files changed, 1133 insertions(+), 30 deletions(-) create mode 100644 macro/beamtime/mcbm2020/Dart_mcbm_mcbmop01.cfg create mode 100644 macro/beamtime/mcbm2020/build_event_win.C create mode 100644 macro/beamtime/mcbm2020/build_event_win_kronos.C create mode 100644 macro/beamtime/mcbm2020/unpack_check_time_mcbm_kronos.C diff --git a/macro/beamtime/CMakeLists.txt b/macro/beamtime/CMakeLists.txt index 5eb7c3330d..030a76672b 100644 --- a/macro/beamtime/CMakeLists.txt +++ b/macro/beamtime/CMakeLists.txt @@ -97,7 +97,7 @@ Set(fixture_built_evt fixture_done_${testname}) set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_built_evt}) Set(testname mcbm_check_event_2019) -Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/build_events.sh \"data/unp_mcbm_399.root\" 399 ) +Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/check_events.sh 99999 399 ) Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600") Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_built_evt}) @@ -141,5 +141,132 @@ set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monirich_2019) ##################### +##### mCBM 2020 tests: only if test TSA files for "typical runs" present +If(DEFINED ENV{RAW_DATA_PATH} ) + SET( RAW_DATA_PATH $ENV{RAW_DATA_PATH} ) + + Message( STATUS "Raw data path provided => Performing mCBM 2020 tests using tsa files in ${RAW_DATA_PATH}" ) + + ## Generate scripts + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/unpack_tsa_mcbm.C ) # Unpackers + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/check_timing.C ) # CbmCheckTiming.h + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/check_pulser.C ) # CbmMcbm2019CheckPulser.h + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/build_events.C ) # CbmMcbm2018EventBuilder.h + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/check_events.C ) # CbmCheckEvents.h + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/build_event_win.C ) # CbmMcbm2019TimeWinEventBuilderTask.h + CbmMcbm2019TimeWinEventBuilderAlgo.h + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorT0.C ) # CbmMcbm2018MonitorTaskT0 + CbmMcbm2018MonitorAlgoT0 + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorSts.C ) # CbmMcbm2018MonitorSts.h + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorMuch.C ) # CbmMcbm2018MonitorMuchLite.h + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorTrd.C ) # CbmMcbm2018UnpackerTaskTrd.h in monitor mode + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorTof.C ) # CbmMcbm2018MonitorTaskTof + CbmMcbm2018MonitorAlgoTof + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorRich.C ) # CbmMcbm2018UnpackerTaskRich.h in monitor mode + GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorPsd.C ) # CbmMcbm2018MonitorTaskPsd + CbmMcbm2018MonitorAlgoPsd + + ## Run only if raw data files present + ForEach(RUN 759 760 761 762 811 812 819 824 831 856 ) + Message( STATUS "Checking if raw data file exists: ${RAW_DATA_PATH}/${RUN}_first20Ts.tsa" ) + If(EXISTS ${RAW_DATA_PATH}/${RUN}_first20Ts.tsa) + Message( STATUS "Raw data file found, tests will be performed for mCBM run ${RUN}" ) + + ## Define tests + dependencies + Set(testname mcbm_unpack_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/unpack_tsa_mcbm.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" ${RUN} ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + Set(fixture_unpacked_${RUN} fixture_done_${testname}) + set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_unpacked_${RUN}}) + + Set(testname mcbm_check_timing_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/check_timing.sh \"data/unp_mcbm_${RUN}.root\" ${RUN} ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600") + # Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of T0 digis: 18") + # Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Sts digis: 1061912") + # Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Much digis: 319732") + # Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Tof digis: 246711") + # Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Rich digis: 5359") + # Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Psd digis: 0") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}}) + ### Make this test run alone to try to avoid memory errors on test machines + set_tests_properties(${testname} PROPERTIES RUN_SERIAL true ) + + Set(testname mcbm_check_pulser_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/check_pulser.sh ${RUN} ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}}) + set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_timing_2020_${RUN}) + + Set(testname mcbm_build_event_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/build_events.sh \"data/unp_mcbm_${RUN}.root\" ${RUN} ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}}) + set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_pulser_2020_${RUN}) + Set(fixture_built_evt_${RUN} fixture_done_${testname}) + set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_built_evt_${RUN}}) + + Set(testname mcbm_check_event_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/check_events.sh 99999 ${RUN} ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_built_evt_${RUN}}) + set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_build_event_2020_${RUN}) + + Set(testname mcbm_build_event_win_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/build_event_win.sh ${RUN} ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}}) + set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_event_2020_${RUN}) + Set(fixture_built_evt_win_${RUN} fixture_done_${testname}) + set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_built_evt_win_${RUN}}) + + Set(testname mcbm_monit0_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorT0.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_build_event_win_2020_${RUN}) + + Set(testname mcbm_monists_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorSts.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" \"\" ${RUN} ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monit0_2020_${RUN}) + + Set(testname mcbm_monimuch_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorMuch.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" \"\" ${RUN} ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monists_2020_${RUN}) + + Set(testname mcbm_monitrd_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorTrd.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monimuch_2020_${RUN}) + + Set(testname mcbm_monitof_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorTof.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monitrd_2020_${RUN}) + + Set(testname mcbm_monirich_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorRich.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monitof_2020_${RUN}) + + Set(testname mcbm_monipsd_2020_${RUN}) + Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorPsd.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" ) + Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300") + Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok") + set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monirich_2020_${RUN}) + EndIf() # If(EXISTS ${RAW_DATA_PATH}/${RUN}_first20Ts.tsa)) + EndForEach() # ForEach(RUN 759 760 761 762 811 812 819 824 856 ) +EndIf() # If(DEFINED ENV{RAW_DATA_PATH} ) +##################### + ### Copy beamtime folder to allow execution of tasks on batch farm after installation Install(DIRECTORY cern2016 DESTINATION share/cbmroot/macro/beamtime) diff --git a/macro/beamtime/mcbm2020/Dart_mcbm_mcbmop01.cfg b/macro/beamtime/mcbm2020/Dart_mcbm_mcbmop01.cfg new file mode 100644 index 0000000000..4e1f39fffc --- /dev/null +++ b/macro/beamtime/mcbm2020/Dart_mcbm_mcbmop01.cfg @@ -0,0 +1,22 @@ +# Set FairRoot and FairSoft info +export FAIRSOFT_VERSION=jun19p2 +export FAIRROOT_VERSION=v18.2.1 +export SIMPATH=/opt/cbm/fairsoft_${FAIRSOFT_VERSION}_root6/installation +export FAIRROOTPATH=/opt/cbm/fairroot_${FAIRROOT_VERSION}-fairsoft_${FAIRSOFT_VERSION}_root6 + +#for cmake +export PATH=${SIMPATH}/bin:${PATH} + +# info for Dart/CDash +export BUILDDIR=/opt/cbm/cdash//build_mcbm2020_${FAIRROOT_VERSION}_${FAIRSOFT_VERSION} +export SOURCEDIR=/opt/cbm/cdash/cbmroot_mcbm2020 + +FLAV=`cat /etc/debian_version` +export LINUX_FLAVOUR=Debian-$FLAV +# or using `lsb_release -d -s` + +export RAW_DATA_PATH=/opt/cbm/cdash/raw +export EXTRA_FLAGS="-DUSE_PATH_INFO=TRUE" + +# To prevent the CDASH tasks from spoiling my ROOT history file +export ROOT_HIST=0 diff --git a/macro/beamtime/mcbm2020/MonitorPsd.C b/macro/beamtime/mcbm2020/MonitorPsd.C index eeb42fba48..c218f127a1 100644 --- a/macro/beamtime/mcbm2020/MonitorPsd.C +++ b/macro/beamtime/mcbm2020/MonitorPsd.C @@ -51,11 +51,11 @@ void MonitorPsd( TString inFile = "", TString sHostname = "localhost", CbmMcbm2018MonitorTaskPsd * monitor_psd = new CbmMcbm2018MonitorTaskPsd(); monitor_psd->SetIgnoreOverlapMs(); - monitor_psd->SetHistoryHistoSize( 1000 ); + monitor_psd->SetHistoryHistoSize( 3600 ); monitor_psd->SetHistoFilename( outFileNameHistos ); - std::vector< Int_t > fviHistoChargeArgs{500,0,40000}; - std::vector< Int_t > fviHistoAmplArgs{100,0,3000}; + std::vector< Int_t > fviHistoChargeArgs{500,0,5000}; + std::vector< Int_t > fviHistoAmplArgs{100,0,500}; std::vector< Int_t > fviHistoZLArgs{9000,0,9000}; monitor_psd->SetChargeHistoArgs( fviHistoChargeArgs ); monitor_psd->SetAmplHistoArgs( fviHistoAmplArgs ); diff --git a/macro/beamtime/mcbm2020/MonitorTof.C b/macro/beamtime/mcbm2020/MonitorTof.C index 61d222f1cb..5c2df8ba80 100644 --- a/macro/beamtime/mcbm2020/MonitorTof.C +++ b/macro/beamtime/mcbm2020/MonitorTof.C @@ -32,8 +32,8 @@ void MonitorTof(TString inFile = "", TString sHostname = "localhost", // --- Define parameter files TList *parFileList = new TList(); - //TString paramDir = srcDir + "/macro/beamtime/mcbm2020/"; - TString paramDir = "/scratch/cbmroot_macro/macro/beamtime/mcbm2020/"; + TString paramDir = srcDir + "/macro/beamtime/mcbm2020/"; + //TString paramDir = "/scratch/cbmroot_macro/macro/beamtime/mcbm2020/"; TString paramFileTof = paramDir + "mTofPar.par"; TObjString* parTofFileName = new TObjString(paramFileTof); diff --git a/macro/beamtime/mcbm2020/MonitorTrd.C b/macro/beamtime/mcbm2020/MonitorTrd.C index 9e463fb8fe..229cec13dd 100644 --- a/macro/beamtime/mcbm2020/MonitorTrd.C +++ b/macro/beamtime/mcbm2020/MonitorTrd.C @@ -1,5 +1,5 @@ /* - * File: /unpack_trd_mcbm2020.C + * File: /MonitorTrd.C * Created Date: Wednesday March 25th 2020 * Author: Pascal Raisig -- praisig@ikf.uni-frankfurt.de * ----- @@ -41,9 +41,10 @@ void MonitorTrd(TString inFile = "", TString sHostname = "localhost", // inFile = "/home/praisig/CBM/software/testEnv/data/desy2019/r0070_20190831_0159_0000.tsa"; // FIXME: This is just for testing smarter solution needed! One can probably iterate over files via SetInputDir and the code behind it. // inFile = "/home/dspicker/desy2019/r0004_20200220_1951_0000.tsa"; - inFile = "/local/dschmidt/tsa/pulser07.tsa"; // long pulser file + if( "" == inFile && "" == sHostname ) + inFile = "/local/dschmidt/tsa/pulser07.tsa"; // long pulser file // outDir = "/home/praisig/CBM/software/testEnv/data/desy2019/data/"; - outDir = "output"; + //outDir = "output"; TString srcDir = gSystem->Getenv("VMCWORKDIR"); @@ -53,8 +54,6 @@ void MonitorTrd(TString inFile = "", TString sHostname = "localhost", // --- Specify output file name (this is just an example) TString runId = TString::Format("%u", uRunId); - TString outFile = outDir + "/unp_mcbm_" + runId + ".root"; - TString parFile = outDir + "/unp_mcbm_params_" + runId + ".root"; // --- Set log output levels FairLogger::GetLogger(); @@ -85,12 +84,11 @@ void MonitorTrd(TString inFile = "", TString sHostname = "localhost", gDebug = 0; std::cout << std::endl; - std::cout << ">>> unpack_tsa: output file is " << outFile << std::endl; // ======================================================================== // ======================================================================== std::cout << std::endl; - std::cout << ">>> unpack_tsa: Initialising..." << std::endl; + std::cout << ">>> MonitorTrd: Initialising..." << std::endl; CbmMcbm2018UnpackerTaskTrdR * unpacker_trdR = new CbmMcbm2018UnpackerTaskTrdR(); @@ -123,7 +121,7 @@ void MonitorTrd(TString inFile = "", TString sHostname = "localhost", // // --- Source task CbmMcbm2018Source* source = new CbmMcbm2018Source(); - if( 0 < uRunId ) + if( 0 < uRunId || "" != inFile ) { source->SetFileName(inFile); } // if( "" != inFile ) @@ -170,7 +168,7 @@ void MonitorTrd(TString inFile = "", TString sHostname = "localhost", // --- Start run TStopwatch timer; timer.Start(); - std::cout << ">>> unpack_tsa_mcbm: Starting run..." << std::endl; + std::cout << ">>> MonitorTrd: Starting run..." << std::endl; if ( 0 == nrEvents) { run->Run(nEvents, 0); // run until end of input file } else { @@ -187,9 +185,8 @@ void MonitorTrd(TString inFile = "", TString sHostname = "localhost", Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); std::cout << std::endl << std::endl; - std::cout << ">>> unpack_tsa_mcbm: Macro finished successfully." << std::endl; - std::cout << ">>> unpack_tsa_mcbm: Output file is " << outFile << std::endl; - std::cout << ">>> unpack_tsa_mcbm: Real time " << rtime << " s, CPU time " + std::cout << ">>> MonitorTrd: Macro finished successfully." << std::endl; + std::cout << ">>> MonitorTrd: Real time " << rtime << " s, CPU time " << ctime << " s" << std::endl; std::cout << std::endl; diff --git a/macro/beamtime/mcbm2020/build_event_win.C b/macro/beamtime/mcbm2020/build_event_win.C new file mode 100644 index 0000000000..f7bf55c9ea --- /dev/null +++ b/macro/beamtime/mcbm2020/build_event_win.C @@ -0,0 +1,132 @@ +void build_event_win( UInt_t uRunId = 0, Int_t nEvents = 0, TString outDir="data/") +{ + TString fileName = Form( "data/unp_mcbm_%03u.root", uRunId ); + + if( uRunId < 692 ) + return kFALSE; + + + // ======================================================================== + // 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"); + + // MC file + + TString srcDir = gSystem->Getenv("VMCWORKDIR"); + + // ----- 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); + + TString runId = TString::Format("%03u", uRunId); + TString outFile = outDir + "/events_win_" + runId + ".root"; + FairRootFileSink* outputSink = new FairRootFileSink(outFile); + fRun->SetSink(outputSink); + + // Define output file for FairMonitor histograms +// TString monitorFile{outFile}; +// monitorFile.ReplaceAll("qa","qa.monitor"); + FairMonitor::GetMonitor()->EnableMonitor(kTRUE); +// FairMonitor::GetMonitor()->EnableMonitor(kFALSE); + // ------------------------------------------------------------------------ + +// CbmMcbm2019TimeWinEventBuilder* eventBuilder = new CbmMcbm2019TimeWinEventBuilder(); + CbmMcbm2019TimeWinEventBuilderTask* eventBuilder = new CbmMcbm2019TimeWinEventBuilderTask(); + + eventBuilder->SetFillHistos( kTRUE ); + + eventBuilder->SetEventOverlapMode( EOverlapMode::NoOverlap ); + + eventBuilder->SetTriggerWindow( ECbmModuleId::kSts, -50, 100 ); + eventBuilder->SetTriggerWindow( ECbmModuleId::kMuch, -150, 50 ); + eventBuilder->SetTriggerWindow( ECbmModuleId::kTrd, -250, 100 ); + eventBuilder->SetTriggerWindow( ECbmModuleId::kTof, -150, 10 ); + eventBuilder->SetTriggerWindow( ECbmModuleId::kRich, -150, 20 ); + eventBuilder->SetTriggerWindow( ECbmModuleId::kPsd, -50, 10 ); +// eventBuilder->SetT0PulserTotLimits( 185, 191 ); + eventBuilder->SetTriggerMinNumberT0(1); + eventBuilder->SetTriggerMinNumberSts(0); + eventBuilder->SetTriggerMinNumberMuch(0); + eventBuilder->SetTriggerMinNumberTrd(0); + eventBuilder->SetTriggerMinNumberTof(10); + eventBuilder->SetTriggerMinNumberRich(0); + eventBuilder->SetTriggerMinNumberPsd(0); + if( 0 < uRunId ) + eventBuilder->SetOutFilename( Form( "%sHistosEvtWin_%03u.root", outDir.Data(), uRunId ) ); + + // To get T0 Digis (seed + close digis) in the event + eventBuilder->SetTriggerWindow( ECbmModuleId::kT0, -1, 10 ); + + fRun->AddTask(eventBuilder); + + // ----- Parameter database -------------------------------------------- +// FairRuntimeDb* rtdb = fRun->GetRuntimeDb(); +// FairParRootFileIo* parIo1 = new FairParRootFileIo(); +// parIo1->open(parFile.Data(),"UPDATE"); +// rtdb->setFirstInput(parIo1); + // ------------------------------------------------------------------------ + + + // ----- Intialise and run -------------------------------------------- + fRun->Init(); + +// rtdb->setOutput(parIo1); +// 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 + } + // ------------------------------------------------------------------------ + + + + // ----- Finish ------------------------------------------------------- + timer.Stop(); + 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; + // ------------------------------------------------------------------------ + + // 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; + + Float_t cpuUsage=ctime/rtime; + cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">"; + cout << cpuUsage; + cout << "</DartMeasurement>" << endl; + + FairMonitor* tempMon = FairMonitor::GetMonitor(); + tempMon->Print(); + + cout << " Test passed" << endl; + cout << " All ok " << endl; +} diff --git a/macro/beamtime/mcbm2020/build_event_win_kronos.C b/macro/beamtime/mcbm2020/build_event_win_kronos.C new file mode 100644 index 0000000000..1b436c4082 --- /dev/null +++ b/macro/beamtime/mcbm2020/build_event_win_kronos.C @@ -0,0 +1,159 @@ +void build_event_win_kronos( UInt_t uRunIdx = 0, Int_t nEvents = 0, TString outDir="data/") +{ + UInt_t uRunId = 0; + TString fileName = "data/unp_mcbm_0.root"; + if( 99999 != uRunIdx ) + { + std::vector< UInt_t > vuListRunId = { + 692, 698, 702, 704, 705, 706, 707, // 7 => 0 - 6 + 744, 750, 759, 760, 761, 762, 799, // 7 => 7 - 13 + 811, 812, 816, 817, 819, // 5 => 14 - 18 + 820, 821, 822, 824, 826, 827, 828, 829, // 8 => 19 - 26 + 830, 831, 836, // 3 => 27 - 29 + 841, 846, 849, // 3 => 30 - 32 + 850, 851, 852, 854, 855, 856, 857, 858, 859, // 9 => 33 - 41 + 860, 861, 862, 863, 864, 865, 866 // 7 => 42 - 48 +/* + /// With runs < 1 min due to missmatch! + 811, 812, 816, 817, 818, 819, // 6 => 14 - 19 + 820, 821, 822, 824, 826, 827, 828, 829, // 8 => 20 - 27 + 830, 831, 836, 839, // 4 => 28 - 31 + 840, 841, 842, 844, 845, 846, 848, 849, // 8 => 32 - 39 + 850, 851, 852, 854, 855, 856, 857, 858, 859, // 9 => 40 - 48 + 860, 861, 862, 863, 864, 865, 866 // 7 => 49 - 55 +*/ + }; + if( vuListRunId.size() <= uRunIdx ) + return kFALSE; + uRunId = vuListRunId[ uRunIdx ]; + fileName = Form( "data/unp_mcbm_%03u.root", uRunId ); + } // if( 99999 != uRunIdx ) + + if( uRunId < 692 && 0 != uRunId ) + return kFALSE; + + + // ======================================================================== + // 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"); + + // MC file + + TString srcDir = gSystem->Getenv("VMCWORKDIR"); + + // ----- 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); + + TString runId = TString::Format("%03u", uRunId); + TString outFile = outDir + "/events_win_" + runId + ".root"; + FairRootFileSink* outputSink = new FairRootFileSink(outFile); + fRun->SetSink(outputSink); + + // Define output file for FairMonitor histograms +// TString monitorFile{outFile}; +// monitorFile.ReplaceAll("qa","qa.monitor"); + FairMonitor::GetMonitor()->EnableMonitor(kTRUE); +// FairMonitor::GetMonitor()->EnableMonitor(kFALSE); + // ------------------------------------------------------------------------ + +// CbmMcbm2019TimeWinEventBuilder* eventBuilder = new CbmMcbm2019TimeWinEventBuilder(); + CbmMcbm2019TimeWinEventBuilderTask* eventBuilder = new CbmMcbm2019TimeWinEventBuilderTask(); + + eventBuilder->SetFillHistos( kTRUE ); + + eventBuilder->SetEventOverlapMode( EOverlapMode::NoOverlap ); + + eventBuilder->SetTriggerWindow( ECbmModuleId::kSts, -50, 100 ); + eventBuilder->SetTriggerWindow( ECbmModuleId::kMuch, -150, 50 ); + eventBuilder->SetTriggerWindow( ECbmModuleId::kTrd, -250, 100 ); + eventBuilder->SetTriggerWindow( ECbmModuleId::kTof, -150, 10 ); + eventBuilder->SetTriggerWindow( ECbmModuleId::kRich, -150, 20 ); + eventBuilder->SetTriggerWindow( ECbmModuleId::kPsd, -50, 10 ); +// eventBuilder->SetT0PulserTotLimits( 185, 191 ); + eventBuilder->SetTriggerMinNumberT0(1); + eventBuilder->SetTriggerMinNumberSts(0); + eventBuilder->SetTriggerMinNumberMuch(0); + eventBuilder->SetTriggerMinNumberTrd(0); + eventBuilder->SetTriggerMinNumberTof(10); + eventBuilder->SetTriggerMinNumberRich(0); + eventBuilder->SetTriggerMinNumberPsd(0); + if( 0 < uRunId ) + eventBuilder->SetOutFilename( Form( "%sHistosEvtWin_%03u.root", outDir.Data(), uRunId ) ); + + // To get T0 Digis (seed + close digis) in the event + eventBuilder->SetTriggerWindow( ECbmModuleId::kT0, -1, 10 ); + + fRun->AddTask(eventBuilder); + + // ----- Parameter database -------------------------------------------- +// FairRuntimeDb* rtdb = fRun->GetRuntimeDb(); +// FairParRootFileIo* parIo1 = new FairParRootFileIo(); +// parIo1->open(parFile.Data(),"UPDATE"); +// rtdb->setFirstInput(parIo1); + // ------------------------------------------------------------------------ + + + // ----- Intialise and run -------------------------------------------- + fRun->Init(); + +// rtdb->setOutput(parIo1); +// 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 + } + // ------------------------------------------------------------------------ + + + + // ----- Finish ------------------------------------------------------- + timer.Stop(); + 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; + // ------------------------------------------------------------------------ + + // 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; + + Float_t cpuUsage=ctime/rtime; + cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">"; + cout << cpuUsage; + cout << "</DartMeasurement>" << endl; + + FairMonitor* tempMon = FairMonitor::GetMonitor(); + tempMon->Print(); + + cout << " Test passed" << endl; + cout << " All ok " << endl; +} diff --git a/macro/beamtime/mcbm2020/build_events.C b/macro/beamtime/mcbm2020/build_events.C index 7fe271f65d..84c59b6d33 100644 --- a/macro/beamtime/mcbm2020/build_events.C +++ b/macro/beamtime/mcbm2020/build_events.C @@ -49,6 +49,9 @@ void build_events( TString fileName, UInt_t uRunId = 0, Int_t nEvents = 0, TStri eventBuilder->SetTriggerMinNumberSts(0); eventBuilder->SetTriggerMinNumberMuch(0); eventBuilder->SetTriggerMinNumberTof(1); + eventBuilder->SetFillHistos( kTRUE ); + if( 0 < uRunId ) + eventBuilder->SetOutFilename( Form( "%sHistosEventBuilder_%03u.root", outDir.Data(), uRunId ) ); fRun->AddTask(eventBuilder); // ----- Parameter database -------------------------------------------- diff --git a/macro/beamtime/mcbm2020/check_events.C b/macro/beamtime/mcbm2020/check_events.C index cb9680267a..e214b14d20 100644 --- a/macro/beamtime/mcbm2020/check_events.C +++ b/macro/beamtime/mcbm2020/check_events.C @@ -1,4 +1,4 @@ -void check_events(Int_t nEvents = 10, UInt_t uRunId=0, TString inDir="data/", TString friendFile="", TString inFile="") +void check_events(Int_t nEvents = 10, UInt_t uRunId=0, TString inDir="data/", TString friendFile="", TString inFile="") { Int_t iVerbose = 1; Int_t iBugCor=0; @@ -13,46 +13,61 @@ void check_events(Int_t nEvents = 10, UInt_t uRunId=0, TString inDir="data/", TS FairLogger::GetLogger(); gLogger->SetLogScreenLevel(logLevel); gLogger->SetLogVerbosityLevel("VERYHIGH"); - + TString workDir = gSystem->Getenv("VMCWORKDIR"); - TString runId = TString::Format("%u", uRunId); + TString runId = TString::Format("%03u", uRunId); TString ParFile = inDir + "/unp_mcbm_params_" + runId + ".root"; TString InputFile = inDir + "/unp_mcbm_" + runId + ".root"; TString InputFileEvent=""; - if (friendFile.Length() > 0) { - InputFileEvent = inDir + friendFile; - } + if( "" == friendFile ) + { + InputFileEvent = inDir + "/events_" + runId + ".root"; + } // if( "" == friendFile ) + else + { + InputFileEvent = inDir + friendFile; + } // else of if( "" == friendFile ) + TString OutputFile = inDir + "/test_" + runId + ".out.root"; TList *parFileList = new TList(); + // ----- Timer -------------------------------------------------------- + TStopwatch timer; + timer.Start(); + // ------------------------------------------------------------------------ + // ----- Reconstruction run ------------------------------------------- FairRunAna *run= new FairRunAna(); FairFileSource* inputSource = new FairFileSource(InputFile); - if (friendFile.Length() > 0) { - inputSource->AddFriend(InputFileEvent); - } + inputSource->AddFriend(InputFileEvent); + run->SetSource(inputSource); run->SetOutputFile(OutputFile); run->SetEventHeaderPersistence(kFALSE); + // ------------------------------------------------------------------------ + // Enable FairMonitor + FairMonitor::GetMonitor()->EnableMonitor(kFALSE); + // ------------------------------------------------------------------------ + CbmCheckEvents* checker = new CbmCheckEvents(); run->AddTask(checker); // ----- Parameter database -------------------------------------------- - + FairRuntimeDb* rtdb = run->GetRuntimeDb(); Bool_t kParameterMerged = kTRUE; FairParRootFileIo* parIo2 = new FairParRootFileIo(kParameterMerged); parIo2->open(ParFile.Data(), "UPDATE"); parIo2->print(); rtdb->setFirstInput(parIo2); - + FairParAsciiFileIo* parIo1 = new FairParAsciiFileIo(); parIo1->open(parFileList, "in"); parIo1->print(); @@ -70,5 +85,34 @@ void check_events(Int_t nEvents = 10, UInt_t uRunId=0, TString inDir="data/", TS run->Run(0, nEvents); //tofClust->Finish(); // ------------------------------------------------------------------------ - // default display + // default display + + // ----- Finish ------------------------------------------------------- + timer.Stop(); + 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; + // ------------------------------------------------------------------------ + // 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; + + Float_t cpuUsage=ctime/rtime; + cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">"; + cout << cpuUsage; + cout << "</DartMeasurement>" << endl; + + FairMonitor* tempMon = FairMonitor::GetMonitor(); + tempMon->Print(); + +// RemoveGeoManager(); + cout << " Test passed" << endl; + cout << " All ok " << endl; } diff --git a/macro/beamtime/mcbm2020/unpack_check_time_mcbm_kronos.C b/macro/beamtime/mcbm2020/unpack_check_time_mcbm_kronos.C new file mode 100644 index 0000000000..12fd90cfe7 --- /dev/null +++ b/macro/beamtime/mcbm2020/unpack_check_time_mcbm_kronos.C @@ -0,0 +1,619 @@ +/** @file MCBM DATA unpacking + ** @author Florian Uhlig <f.uhlig@gsi.de> + ** @date 20.06.2016 + ** Modified by P.-A. Loizeau + ** @date 30.01.2019 + ** ROOT macro to read tsa files which have been produced with the new data transport + ** Convert data into cbmroot format. + ** Uses CbmMcbm2018Source as source task. + */ +// In order to call later Finish, we make this global +FairRunOnline *run = NULL; + +void unpack_check_time_mcbm_kronos( UInt_t uRunIdx = 99999, UInt_t nrEvents=0, TString outDir="data") +{ + UInt_t uRunId = 0; + if( 99999 != uRunIdx ) + { + std::vector< UInt_t > vuListRunId = { + 692, 698, 702, 704, 705, 706, 707, // 7 => 0 - 6 + 744, 750, 759, 760, 761, 762, 799, // 7 => 7 - 13 + 811, 812, 816, 817, 819, // 5 => 14 - 18 + 820, 821, 822, 824, 826, 827, 828, 829, // 8 => 19 - 26 + 830, 831, 836, // 3 => 27 - 29 + 841, 846, 849, // 3 => 30 - 32 + 850, 851, 852, 854, 855, 856, 857, 858, 859, // 9 => 33 - 41 + 860, 861, 862, 863, 864, 865, 866 // 7 => 42 - 48 +/* + /// With runs < 1 min due to missmatch! + 811, 812, 816, 817, 818, 819, // 6 => 14 - 19 + 820, 821, 822, 824, 826, 827, 828, 829, // 8 => 20 - 27 + 830, 831, 836, 839, // 4 => 28 - 31 + 840, 841, 842, 844, 845, 846, 848, 849, // 8 => 32 - 39 + 850, 851, 852, 854, 855, 856, 857, 858, 859, // 9 => 40 - 48 + 860, 861, 862, 863, 864, 865, 866 // 7 => 49 - 55 +*/ + }; + if( vuListRunId.size() <= uRunIdx ) + return kFALSE; + uRunId = vuListRunId[ uRunIdx ]; + } // if( 99999 != uRunIdx ) + + if( uRunId < 692 && 0 != uRunId ) + return kFALSE; + + TString srcDir = gSystem->Getenv("VMCWORKDIR"); + + // --- Specify number of events to be produced. + // --- -1 means run until the end of the input file. + Int_t nEvents=-1; + // --- Specify output file name (this is just an example) + TString runId = TString::Format("%03u", uRunId); + TString outFile = outDir + "/unp_mcbm_" + runId + ".root"; + TString parFile = outDir + "/unp_mcbm_params_" + runId + ".root"; + + // --- Set log output levels + FairLogger::GetLogger(); + gLogger->SetLogScreenLevel("INFO"); + //gLogger->SetLogScreenLevel("DEBUG4"); + gLogger->SetLogVerbosityLevel("MEDIUM"); + //gLogger->SetLogVerbosityLevel("LOW"); + + // --- Define parameter files + TList *parFileList = new TList(); + TString paramDir = srcDir + "/macro/beamtime/mcbm2020/"; + + TString paramFileSts = paramDir + "mStsPar.par"; + TObjString* parStsFileName = new TObjString(paramFileSts); + parFileList->Add(parStsFileName); + + TString paramFileMuch = paramDir + "mMuchPar.par"; + TObjString* parMuchFileName = new TObjString(paramFileMuch); + parFileList->Add(parMuchFileName); + + TString geoTagTrd = "v18q_mcbm"; + // parFileList->Add(new TObjString(Form("%s.asic.par", paramDirTrd.Data()))); + // if ( geoSetup->GetGeoTag(ECbmModuleId::kTrd, geoTag) ) // this would be nice to have already here + // { + TString paramFilesTrd(Form("%s/parameters/trd/trd_%s", srcDir.Data(), geoTagTrd.Data())); + std::vector<TString> paramFilesTrdVec = {"asic", "digi", "gas", "gain"}; + for (auto parIt : paramFilesTrdVec) + { + parFileList->Add(new TObjString(Form("%s.%s.par", paramFilesTrd.Data(), parIt.Data()))); + } + // } + + TString paramFileTof = paramDir + "mTofPar.par"; + TObjString* parTofFileName = new TObjString(paramFileTof); + parFileList->Add(parTofFileName); + + TString paramFileRich = paramDir + "mRichPar.par"; + if (uRunId > 698) paramFileRich = paramDir + "mRichPar_70.par"; + TObjString* parRichFileName = new TObjString(paramFileRich); + parFileList->Add(parRichFileName); + + TString paramFilePsd = paramDir + "mPsdPar.par"; + TObjString* parPsdFileName = new TObjString(paramFilePsd); + parFileList->Add(parPsdFileName); + + // --- Set debug level + gDebug = 0; + + std::cout << std::endl; + std::cout << ">>> unpack_check_time_mcbm_kronos: output file is " << outFile << std::endl; + + // ======================================================================== + // ======================================================================== + std::cout << std::endl; + std::cout << ">>> unpack_tsa: Initialising..." << std::endl; + + CbmMcbm2018UnpackerTaskSts * unpacker_sts = new CbmMcbm2018UnpackerTaskSts(); + CbmMcbm2018UnpackerTaskMuch * unpacker_much = new CbmMcbm2018UnpackerTaskMuch(); + CbmMcbm2018UnpackerTaskTrdR * unpacker_trdR = new CbmMcbm2018UnpackerTaskTrdR(); + CbmMcbm2018UnpackerTaskTof * unpacker_tof = new CbmMcbm2018UnpackerTaskTof(); + CbmMcbm2018UnpackerTaskRich * unpacker_rich = new CbmMcbm2018UnpackerTaskRich(); + CbmMcbm2018UnpackerTaskPsd * unpacker_psd = new CbmMcbm2018UnpackerTaskPsd(); + +/* + * Do not generate plots by default + unpacker_sts ->SetMonitorMode(); + unpacker_much->SetMonitorMode(); + unpacker_trdR->SetMonitorMode(); // Assume histo server present, not like other unpackers + unpacker_tof ->SetMonitorMode(); + unpacker_rich->SetMonitorMode(); + unpacker_psd->SetMonitorMode(); +*/ + + unpacker_sts ->SetIgnoreOverlapMs(); + unpacker_much->SetIgnoreOverlapMs(); +// unpacker_trdR ->SetIgnoreOverlapMs(); /// Default is kTRUE + unpacker_tof ->SetIgnoreOverlapMs(); + unpacker_rich->SetIgnoreOverlapMs(); + unpacker_psd ->SetIgnoreOverlapMs(); + + /// Starting from first run on Tuesday 28/04/2020, STS uses bin sorter FW + if( 692 <= uRunId ) + unpacker_sts ->SetBinningFwFlag( kTRUE ); + /// Starting from first run on Monday 04/05/2020, MUCH uses bin sorter FW + if( 811 <= uRunId ) + unpacker_much->SetBinningFwFlag( kTRUE ); + + /// Try to cut Noise and reduce walk effect in STS and MUCH + unpacker_sts ->SetAdcCut( 20 ); + unpacker_much->SetAdcCut( 20 ); + + unpacker_tof ->SetSeparateArrayT0(); + + unpacker_sts ->SetWriteOutputFlag( kFALSE ); + unpacker_much->SetWriteOutputFlag( kFALSE ); + unpacker_trdR->SetWriteOutput( kFALSE ); + unpacker_tof ->SetWriteOutputFlag( kFALSE ); + unpacker_rich->SetWriteOutputFlag( kFALSE ); + unpacker_psd ->SetWriteOutputFlag( kFALSE ); + + + // ------------------------------ // + // Enable Asic type for MUCH data. + // fFlag = 0 ==> Asic type 2.0 (20) ---> December 2018 and March 2019 Data + // fFlag = 1 ==> Asic type 2.1 (21) ---> December 2019 Data + // This is to correct the channel fliping problem in smx 2.1 chip + Int_t fFlag = 1; + unpacker_much->EnableAsicType(fFlag); + // ------------------------------ // + /// General System offsets (= offsets between sub-systems) + unpacker_sts ->SetTimeOffsetNs( -985 ); // Run 811-866 + unpacker_much->SetTimeOffsetNs( -885 ); // Run 811-866 + unpacker_trdR->SetTimeOffsetNs( 0 ); // Run 811-866 + unpacker_tof ->SetTimeOffsetNs( 25 ); // Run 811-866 + unpacker_rich->SetTimeOffsetNs( -310 ); // Run 811-866 + unpacker_psd ->SetTimeOffsetNs( -240 ); // Run 811-866 + + switch( uRunId ) + { + case 707: + { + /// General System offsets (= offsets between sub-systems) + //unpacker_sts ->SetTimeOffsetNs( -1750 ); // Run 707 + //unpacker_much->SetTimeOffsetNs( -1750 ); // Run 707 + + /// ASIC specific offsets (= offsets inside sub-system) + unpacker_much->SetTimeOffsetNsAsic( 0, 0.0 ); // Run 707, DPB 0 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 1, 0.0 ); // Run 707, DPB 0 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 2, 0.0 ); // Run 707, DPB 0 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 3, 0.0 ); // Run 707, DPB 0 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 4, 0.0 ); // Run 707, DPB 0 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 5, 0.0 ); // Run 707, DPB 0 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 6, 0.0 ); // Run 707, DPB 1 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 7, 0.0 ); // Run 707, DPB 1 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 8, 0.0 ); // Run 707, DPB 1 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 9, 0.0 ); // Run 707, DPB 1 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 10, 0.0 ); // Run 707, DPB 1 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 11, 0.0 ); // Run 707, DPB 1 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 12, 0.0 ); // Run 707, DPB 2 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 13, 0.0 ); // Run 707, DPB 2 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 14, 0.0 ); // Run 707, DPB 2 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 15, 0.0 ); // Run 707, DPB 2 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 16, 0.0 ); // Run 707, DPB 2 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 17, 0.0 ); // Run 707, DPB 2 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 18, 9590.0 ); // Run 707, DPB 3 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 19, 9590.0 ); // Run 707, DPB 3 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 20, 9630.0 ); // Run 707, DPB 3 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 21, 9590.0 ); // Run 707, DPB 3 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 22, 0.0 ); // Run 707, DPB 3 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 23, 0.0 ); // Run 707, DPB 3 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 24, 0.0 ); // Run 707, DPB 4 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 25, 0.0 ); // Run 707, DPB 4 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 26, 0.0 ); // Run 707, DPB 4 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 27, 0.0 ); // Run 707, DPB 4 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 28, 0.0 ); // Run 707, DPB 4 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 29, 0.0 ); // Run 707, DPB 4 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 30, 0.0 ); // Run 707, DPB 5 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 31, 0.0 ); // Run 707, DPB 5 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 32, 7170.0 ); // Run 707, DPB 5 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 33, 7170.0 ); // Run 707, DPB 5 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 34, 0.0 ); // Run 707, DPB 5 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 35, 0.0 ); // Run 707, DPB 5 ASIC 5 + break; + } // 707 + case 750: + { + /// General System offsets (= offsets between sub-systems) + //unpacker_sts ->SetTimeOffsetNs( -1750 ); // Run 750 + //unpacker_much->SetTimeOffsetNs( -1750 ); // Run 750 + + /// ASIC specific offsets (= offsets inside sub-system) + unpacker_much->SetTimeOffsetNsAsic( 0, 0.0 ); // Run 750, DPB 0 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 1, 0.0 ); // Run 750, DPB 0 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 2, 0.0 ); // Run 750, DPB 0 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 3, 0.0 ); // Run 750, DPB 0 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 4, 0.0 ); // Run 750, DPB 0 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 5, 0.0 ); // Run 750, DPB 0 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 6, 0.0 ); // Run 750, DPB 1 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 7, 0.0 ); // Run 750, DPB 1 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 8, 0.0 ); // Run 750, DPB 1 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 9, 0.0 ); // Run 750, DPB 1 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 10, 0.0 ); // Run 750, DPB 1 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 11, 0.0 ); // Run 750, DPB 1 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 12, 0.0 ); // Run 750, DPB 2 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 13, 0.0 ); // Run 750, DPB 2 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 14, 0.0 ); // Run 750, DPB 2 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 15, 0.0 ); // Run 750, DPB 2 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 16, 0.0 ); // Run 750, DPB 2 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 17, 0.0 ); // Run 750, DPB 2 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 18, 6400.0 ); // Run 750, DPB 3 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 19, 6400.0 ); // Run 750, DPB 3 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 20, 6400.0 ); // Run 750, DPB 3 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 21, 6400.0 ); // Run 750, DPB 3 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 22, 0.0 ); // Run 750, DPB 3 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 23, 0.0 ); // Run 750, DPB 3 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 24, 0.0 ); // Run 750, DPB 4 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 25, 0.0 ); // Run 750, DPB 4 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 26, 0.0 ); // Run 750, DPB 4 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 27, 0.0 ); // Run 750, DPB 4 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 28, 0.0 ); // Run 750, DPB 4 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 29, 0.0 ); // Run 750, DPB 4 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 30, 0.0 ); // Run 750, DPB 5 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 31, 0.0 ); // Run 750, DPB 5 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 32, 3170.0 ); // Run 750, DPB 5 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 33, 3170.0 ); // Run 750, DPB 5 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 34, 0.0 ); // Run 750, DPB 5 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 35, 0.0 ); // Run 750, DPB 5 ASIC 5 + break; + } // 750 + case 759: + { + /// General System offsets (= offsets between sub-systems) + //unpacker_sts ->SetTimeOffsetNs( -1759 ); // Run 759 + //unpacker_much->SetTimeOffsetNs( -1759 ); // Run 759 + unpacker_trdR->SetTimeOffsetNs( 190 ); // Run 759 + + /// ASIC specific offsets (= offsets inside sub-system) + unpacker_much->SetTimeOffsetNsAsic( 0, 0.0 ); // Run 759, DPB 0 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 1, 0.0 ); // Run 759, DPB 0 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 2, 0.0 ); // Run 759, DPB 0 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 3, 0.0 ); // Run 759, DPB 0 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 4, 0.0 ); // Run 759, DPB 0 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 5, 0.0 ); // Run 759, DPB 0 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 6, 0.0 ); // Run 759, DPB 1 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 7, 0.0 ); // Run 759, DPB 1 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 8, 0.0 ); // Run 759, DPB 1 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 9, 0.0 ); // Run 759, DPB 1 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 10, 0.0 ); // Run 759, DPB 1 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 11, 0.0 ); // Run 759, DPB 1 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 12, 0.0 ); // Run 759, DPB 2 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 13, 0.0 ); // Run 759, DPB 2 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 14, 0.0 ); // Run 759, DPB 2 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 15, 0.0 ); // Run 759, DPB 2 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 16, 0.0 ); // Run 759, DPB 2 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 17, 0.0 ); // Run 759, DPB 2 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 18, 3200.0 ); // Run 759, DPB 3 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 19, 3200.0 ); // Run 759, DPB 3 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 20, 3200.0 ); // Run 759, DPB 3 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 21, 3200.0 ); // Run 759, DPB 3 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 22, 0.0 ); // Run 759, DPB 3 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 23, 0.0 ); // Run 759, DPB 3 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 24, 3200.0 ); // Run 759, DPB 4 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 25, 3200.0 ); // Run 759, DPB 4 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 26, 3200.0 ); // Run 759, DPB 4 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 27, 0.0 ); // Run 759, DPB 4 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 28, 0.0 ); // Run 759, DPB 4 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 29, 0.0 ); // Run 759, DPB 4 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 30, 0.0 ); // Run 759, DPB 5 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 31, 0.0 ); // Run 759, DPB 5 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 32, -30.0 ); // Run 759, DPB 5 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 33, -30.0 ); // Run 759, DPB 5 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 34, 0.0 ); // Run 759, DPB 5 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 35, 0.0 ); // Run 759, DPB 5 ASIC 5 + break; + } // 759 + case 760: + { + /// General System offsets (= offsets between sub-systems) + //unpacker_sts ->SetTimeOffsetNs( -1760 ); // Run 760 + //unpacker_much->SetTimeOffsetNs( -1760 ); // Run 760 + unpacker_trdR->SetTimeOffsetNs( -75 ); // Run 760 + + /// ASIC specific offsets (= offsets inside sub-system) + unpacker_much->SetTimeOffsetNsAsic( 0, 0.0 ); // Run 760, DPB 0 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 1, 0.0 ); // Run 760, DPB 0 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 2, 0.0 ); // Run 760, DPB 0 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 3, 0.0 ); // Run 760, DPB 0 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 4, 0.0 ); // Run 760, DPB 0 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 5, 0.0 ); // Run 760, DPB 0 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 6, 0.0 ); // Run 760, DPB 1 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 7, 0.0 ); // Run 760, DPB 1 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 8, 0.0 ); // Run 760, DPB 1 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 9, 0.0 ); // Run 760, DPB 1 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 10, 0.0 ); // Run 760, DPB 1 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 11, 0.0 ); // Run 760, DPB 1 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 12, 0.0 ); // Run 760, DPB 2 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 13, 0.0 ); // Run 760, DPB 2 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 14, 0.0 ); // Run 760, DPB 2 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 15, 0.0 ); // Run 760, DPB 2 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 16, 0.0 ); // Run 760, DPB 2 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 17, 0.0 ); // Run 760, DPB 2 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 18, 0.0 ); // Run 760, DPB 3 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 19, 0.0 ); // Run 760, DPB 3 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 20, 0.0 ); // Run 760, DPB 3 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 21, 0.0 ); // Run 760, DPB 3 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 22, 0.0 ); // Run 760, DPB 3 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 23, 0.0 ); // Run 760, DPB 3 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 24, 3160.0 ); // Run 760, DPB 4 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 25, 3160.0 ); // Run 760, DPB 4 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 26, 3160.0 ); // Run 760, DPB 4 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 27, 0.0 ); // Run 760, DPB 4 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 28, 0.0 ); // Run 760, DPB 4 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 29, 0.0 ); // Run 760, DPB 4 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 30, 0.0 ); // Run 760, DPB 5 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 31, 0.0 ); // Run 760, DPB 5 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 32, -30.0 ); // Run 760, DPB 5 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 33, -30.0 ); // Run 760, DPB 5 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 34, 0.0 ); // Run 760, DPB 5 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 35, 0.0 ); // Run 760, DPB 5 ASIC 5 + break; + } // 760 + case 761: + { + /// General System offsets (= offsets between sub-systems) + //unpacker_sts ->SetTimeOffsetNs( -1761 ); // Run 761 + //unpacker_much->SetTimeOffsetNs( -1761 ); // Run 761 + unpacker_trdR->SetTimeOffsetNs( 90 ); // Run 761 + + /// ASIC specific offsets (= offsets inside sub-system) + unpacker_much->SetTimeOffsetNsAsic( 0, 0.0 ); // Run 761, DPB 0 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 1, 0.0 ); // Run 761, DPB 0 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 2, 0.0 ); // Run 761, DPB 0 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 3, 0.0 ); // Run 761, DPB 0 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 4, 0.0 ); // Run 761, DPB 0 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 5, 0.0 ); // Run 761, DPB 0 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 6, 0.0 ); // Run 761, DPB 1 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 7, 0.0 ); // Run 761, DPB 1 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 8, 0.0 ); // Run 761, DPB 1 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 9, 0.0 ); // Run 761, DPB 1 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 10, 0.0 ); // Run 761, DPB 1 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 11, 0.0 ); // Run 761, DPB 1 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 12, 0.0 ); // Run 761, DPB 2 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 13, 0.0 ); // Run 761, DPB 2 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 14, 0.0 ); // Run 761, DPB 2 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 15, 0.0 ); // Run 761, DPB 2 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 16, 0.0 ); // Run 761, DPB 2 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 17, 0.0 ); // Run 761, DPB 2 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 18, 3200.0 ); // Run 761, DPB 3 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 19, 3200.0 ); // Run 761, DPB 3 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 20, 3200.0 ); // Run 761, DPB 3 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 21, 3200.0 ); // Run 761, DPB 3 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 22, 0.0 ); // Run 761, DPB 3 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 23, 0.0 ); // Run 761, DPB 3 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 24, 6360.0 ); // Run 761, DPB 4 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 25, 6360.0 ); // Run 761, DPB 4 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 26, 6360.0 ); // Run 761, DPB 4 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 27, 0.0 ); // Run 761, DPB 4 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 28, 0.0 ); // Run 761, DPB 4 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 29, 0.0 ); // Run 761, DPB 4 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 30, 0.0 ); // Run 761, DPB 5 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 31, 0.0 ); // Run 761, DPB 5 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 32, 6360.0 ); // Run 761, DPB 5 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 33, 6360.0 ); // Run 761, DPB 5 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 34, 0.0 ); // Run 761, DPB 5 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 35, 0.0 ); // Run 761, DPB 5 ASIC 5 + break; + } // 761 + case 762: + { + /// General System offsets (= offsets between sub-systems) + //unpacker_sts ->SetTimeOffsetNs( -1762 ); // Run 762 + //unpacker_much->SetTimeOffsetNs( -1762 ); // Run 762 + unpacker_trdR->SetTimeOffsetNs( 60 ); // Run 762 + + /// ASIC specific offsets (= offsets inside sub-system) + unpacker_much->SetTimeOffsetNsAsic( 0, 0.0 ); // Run 762, DPB 0 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 1, 0.0 ); // Run 762, DPB 0 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 2, 0.0 ); // Run 762, DPB 0 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 3, 0.0 ); // Run 762, DPB 0 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 4, 0.0 ); // Run 762, DPB 0 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 5, 0.0 ); // Run 762, DPB 0 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 6, 0.0 ); // Run 762, DPB 1 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 7, 0.0 ); // Run 762, DPB 1 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 8, 0.0 ); // Run 762, DPB 1 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 9, 0.0 ); // Run 762, DPB 1 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 10, 0.0 ); // Run 762, DPB 1 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 11, 0.0 ); // Run 762, DPB 1 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 12, 0.0 ); // Run 762, DPB 2 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 13, 0.0 ); // Run 762, DPB 2 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 14, 0.0 ); // Run 762, DPB 2 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 15, 0.0 ); // Run 762, DPB 2 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 16, 0.0 ); // Run 762, DPB 2 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 17, 0.0 ); // Run 762, DPB 2 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 18, 4800.0 ); // Run 762, DPB 3 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 19, 4800.0 ); // Run 762, DPB 3 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 20, 4800.0 ); // Run 762, DPB 3 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 21, 4800.0 ); // Run 762, DPB 3 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 22, 0.0 ); // Run 762, DPB 3 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 23, 0.0 ); // Run 762, DPB 3 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 24, 9550.0 ); // Run 762, DPB 4 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 25, 9550.0 ); // Run 762, DPB 4 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 26, 9550.0 ); // Run 762, DPB 4 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 27, 0.0 ); // Run 762, DPB 4 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 28, 0.0 ); // Run 762, DPB 4 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 29, 0.0 ); // Run 762, DPB 4 ASIC 5 + unpacker_much->SetTimeOffsetNsAsic( 30, 0.0 ); // Run 762, DPB 5 ASIC 0 + unpacker_much->SetTimeOffsetNsAsic( 31, 0.0 ); // Run 762, DPB 5 ASIC 1 + unpacker_much->SetTimeOffsetNsAsic( 32, -30.0 ); // Run 762, DPB 5 ASIC 2 + unpacker_much->SetTimeOffsetNsAsic( 33, -30.0 ); // Run 762, DPB 5 ASIC 3 + unpacker_much->SetTimeOffsetNsAsic( 34, 0.0 ); // Run 762, DPB 5 ASIC 4 + unpacker_much->SetTimeOffsetNsAsic( 35, 0.0 ); // Run 762, DPB 5 ASIC 5 + break; + } // 762 + case 811: + { + unpacker_trdR->SetTimeOffsetNs( 84.38 ); + break; + } // 811 + case 812: + { + unpacker_trdR->SetTimeOffsetNs( 165.62 ); + break; + } // 812 + case 816 : + { + unpacker_trdR->SetTimeOffsetNs( -9.38 ); + break; + } // 816 + case 819: + { + unpacker_trdR->SetTimeOffsetNs( -140.62 ); + break; + } // 819 + case 820: + { + unpacker_trdR->SetTimeOffsetNs( 109.38 ); + break; + } // 820 + case 821: + { + unpacker_trdR->SetTimeOffsetNs( -65.62 ); + break; + } // 821 + case 822: + { + unpacker_trdR->SetTimeOffsetNs( 59.38 ); + break; + } // 822 + case 824: + { + unpacker_trdR->SetTimeOffsetNs( -165.62 ); + break; + } // 824 + case 826: + { + unpacker_trdR->SetTimeOffsetNs( 59.38 ); + break; + } // 826 + case 827: + { + unpacker_trdR->SetTimeOffsetNs( -15.62 ); + break; + } // 827 + case 828: + { + unpacker_trdR->SetTimeOffsetNs( -109.38 ); + break; + } // 828 + case 830: + { + unpacker_trdR->SetTimeOffsetNs( 15.62 ); + break; + } // 830 + case 831: + { +// unpacker_trdR->SetTimeOffsetNs( 70.00 ); + unpacker_trdR->SetTimeOffsetNs( -25.00 ); + break; + } // 831 + case 836: + { + unpacker_trdR->SetTimeOffsetNs( -40.62); + break; + } // 836 + default: + break; + } // switch( uRunId ) + + // --- Source task + CbmMcbm2018Source* source = new CbmMcbm2018Source(); + source->SetWriteOutputFlag( kTRUE ); // For writing TS metadata + + TString inFile = Form( "/lustre/cbm/users/ploizeau/mcbm2020/data/%3u_pn02_*.tsa;", uRunId ); + inFile += Form( "/lustre/cbm/users/ploizeau/mcbm2020/data/%3u_pn04_*.tsa;", uRunId ); + inFile += Form( "/lustre/cbm/users/ploizeau/mcbm2020/data/%3u_pn05_*.tsa;", uRunId ); + inFile += Form( "/lustre/cbm/users/ploizeau/mcbm2020/data/%3u_pn06_*.tsa;", uRunId ); + inFile += Form( "/lustre/cbm/users/ploizeau/mcbm2020/data/%3u_pn08_*.tsa;", uRunId ); + inFile += Form( "/lustre/cbm/users/ploizeau/mcbm2020/data/%3u_pn10_*.tsa;", uRunId ); + inFile += Form( "/lustre/cbm/users/ploizeau/mcbm2020/data/%3u_pn11_*.tsa;", uRunId ); + inFile += Form( "/lustre/cbm/users/ploizeau/mcbm2020/data/%3u_pn12_*.tsa;", uRunId ); + inFile += Form( "/lustre/cbm/users/ploizeau/mcbm2020/data/%3u_pn13_*.tsa;", uRunId ); + inFile += Form( "/lustre/cbm/users/ploizeau/mcbm2020/data/%3u_pn15_*.tsa", uRunId ); + + source->SetFileName(inFile); + + source->AddUnpacker(unpacker_sts, 0x10, ECbmModuleId::kSts );//STS xyter + source->AddUnpacker(unpacker_much, 0x50, ECbmModuleId::kMuch );//MUCH xyter + source->AddUnpacker(unpacker_trdR, 0x40, ECbmModuleId::kTrd );// Trd + source->AddUnpacker(unpacker_tof, 0x60, ECbmModuleId::kTof );//gDPB A & B & C + source->AddUnpacker(unpacker_tof, 0x90, ECbmModuleId::kTof );//gDPB T0 A & B + source->AddUnpacker(unpacker_rich, 0x30, ECbmModuleId::kRich );//RICH trb + source->AddUnpacker(unpacker_psd, 0x80, ECbmModuleId::kPsd );//PSD + + // --- Event header +// FairEventHeader* event = new FairEventHeader(); +// event->SetRunId(uRunId); + + // --- RootFileSink + // --- Open next outputfile after 4GB +// FairRootFileSink* sink = new FairRootFileSink(outFile); +// sink->GetOutTree()->SetMaxTreeSize(4294967295LL); + + // --- Run + run = new FairRunOnline(source); +/* + run->SetSink(sink); + run->SetEventHeader(event); +*/ + run->SetAutoFinish(kFALSE); + + + CbmCheckTiming* timeChecker = new CbmCheckTiming(); + timeChecker->SetCheckInterSystemOffset(kTRUE); + timeChecker->SetCheckTimeOrder(kTRUE); + timeChecker->SetStsOffsetSearchRange( 10000); + timeChecker->SetMuchOffsetSearchRange( 10000); + timeChecker->SetTrdOffsetSearchRange( 10000 ); + timeChecker->SetTofOffsetSearchRange( 10000); + timeChecker->SetRichOffsetSearchRange( 10000); + timeChecker->SetPsdOffsetSearchRange( 10000 ); + timeChecker->SetT0PulserTotLimits( 185, 191 ); + if( 0 < uRunId ) + timeChecker->SetOutFilename( Form( "%s/HistosTimeCheck_%03u.root", outDir.Data(), uRunId ) ); + run->AddTask(timeChecker); + + // ----- Runtime database --------------------------------------------- + FairRuntimeDb* rtdb = run->GetRuntimeDb(); + Bool_t kParameterMerged = kTRUE; +// FairParRootFileIo* parOut = new FairParRootFileIo(kParameterMerged); + FairParAsciiFileIo* parIn = new FairParAsciiFileIo(); +// parOut->open(parFile.Data()); + parIn->open(parFileList, "in"); + rtdb->setFirstInput(parIn); +// rtdb->setOutput(parOut); + + run->Init(); + + // --- Start run + TStopwatch timer; + timer.Start(); + std::cout << ">>> unpack_check_time_mcbm_kronos: Starting run..." << std::endl; + if ( 0 == nrEvents) { + run->Run(nEvents, 0); // run until end of input file + } else { + run->Run(0, nrEvents); // process N Events + } + run->Finish(); + + timer.Stop(); + + std::cout << "Processed " << std::dec << source->GetTsCount() << " timeslices" << std::endl; + + // --- End-of-run info + Double_t rtime = timer.RealTime(); + Double_t ctime = timer.CpuTime(); + std::cout << std::endl << std::endl; + std::cout << ">>> unpack_check_time_mcbm_kronos: Macro finished successfully." << std::endl; + std::cout << ">>> unpack_check_time_mcbm_kronos: Output file is " << outFile << std::endl; + std::cout << ">>> unpack_check_time_mcbm_kronos: Real time " << rtime << " s, CPU time " + << ctime << " s" << std::endl; + std::cout << std::endl; + + /// --- Screen output for automatic tests + std::cout << " Test passed" << std::endl; + std::cout << " All ok " << std::endl; +} -- GitLab