From 4a11312f04b5ad42b285ab3d0fd73e9493ffeb54 Mon Sep 17 00:00:00 2001 From: Chao1009 <pengc2010@gmail.com> Date: Thu, 21 Nov 2019 18:06:10 -0500 Subject: [PATCH] Add progress report in OnlineMonitor --- src/OnlineMonitor.cxx | 23 ++++++++++++++++------- src/OnlineMonitor.h | 4 +++- tools/monitor_hms.cpp | 22 ++++++++++++++++++---- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/OnlineMonitor.cxx b/src/OnlineMonitor.cxx index f75df22..e6973fd 100644 --- a/src/OnlineMonitor.cxx +++ b/src/OnlineMonitor.cxx @@ -1,12 +1,19 @@ #include "OnlineMonitor.h" #include "PRadETChannel.h" +#include <csignal> + using namespace std::chrono; +volatile std::sig_atomic_t gSignalStatus; + +void signal_handler(int signal) { + gSignalStatus = signal; +} namespace hcana { -Int_t OnlineMonitor::Monitor(PRadETChannel *ch, std::chrono::seconds interval) +Int_t OnlineMonitor::Monitor(PRadETChannel *ch, std::chrono::seconds interval, int progress) { Int_t total = 0; fMonitor = true; @@ -14,18 +21,20 @@ Int_t OnlineMonitor::Monitor(PRadETChannel *ch, std::chrono::seconds interval) fBench->Begin("Total"); - void (*prev_handler)(int); - prev_handler = signal(SIGINT, handle_sig); + std::signal(SIGINT, signal_handler); - while (!fMonitor) { + while (fMonitor) { system_clock::time_point start(system_clock::now()); system_clock::time_point next(start + interval); - std::cout << total << "events monitor" << std::endl; + if (total % progress == 0) { + std::cout << "Received " << total << " events...\r" << std::flush; + } total += ReadOnce(ch); + if (gSignalStatus == SIGINT) + break; std::this_thread::sleep_until(next); } - - signal(SIGINT, prev_handler); + std::cout << "Received " << total << " events..." << std::endl; if (fDoBench) fBench->Begin("Output"); diff --git a/src/OnlineMonitor.h b/src/OnlineMonitor.h index 7389547..afb35c9 100644 --- a/src/OnlineMonitor.h +++ b/src/OnlineMonitor.h @@ -17,7 +17,9 @@ namespace hcana { OnlineMonitor() : THcAnalyzer() {} virtual ~OnlineMonitor() {} - virtual Int_t Monitor(PRadETChannel *ch, std::chrono::seconds interval = std::chrono::seconds(10)); + virtual Int_t Monitor(PRadETChannel *ch, + std::chrono::seconds interval = std::chrono::seconds(10), + int progress = 10); virtual Int_t ReadOnce(PRadETChannel *ch, size_t max_events = 10000); Int_t ReadBuffer(uint32_t *buf); Int_t ProcOneEvent(); diff --git a/tools/monitor_hms.cpp b/tools/monitor_hms.cpp index 830263e..0d7c798 100644 --- a/tools/monitor_hms.cpp +++ b/tools/monitor_hms.cpp @@ -40,6 +40,8 @@ using namespace std; #include "ConfigOption.h" #include "PRadETChannel.h" +#define DBASE "/u/home/cpeng/ANL/hallc_replay" + int monitor(PRadETChannel *ch, int interval, const bool do_all = false, const bool do_coin = false); @@ -124,18 +126,18 @@ int monitor(PRadETChannel *ch, int interval, const bool do_all, const bool do_co // Load global parameters gHcParms->Define("gen_run_number", "Run Number", RunNumber); gHcParms->AddString("g_ctp_database_filename", - do_coin ? "DBASE/COIN/standard.database" : "DBASE/HMS/standard.database"); + do_coin ? DBASE"DBASE/COIN/standard.database" : DBASE"DBASE/HMS/standard.database"); gHcParms->Load(gHcParms->GetString("g_ctp_database_filename"), RunNumber); gHcParms->Load(gHcParms->GetString("g_ctp_parm_filename")); gHcParms->Load(gHcParms->GetString("g_ctp_kinematics_filename"), RunNumber); // Load parameters for HMS trigger configuration - gHcParms->Load("PARAM/TRIG/thms.param"); + gHcParms->Load(DBASE"PARAM/TRIG/thms.param"); // Load fadc debug parameters - gHcParms->Load("PARAM/HMS/GEN/p_fadc_debug.param"); + gHcParms->Load(DBASE"PARAM/HMS/GEN/p_fadc_debug.param"); // Load the Hall C detector map gHcDetectorMap = new THcDetectorMap(); - gHcDetectorMap->Load("MAPS/HMS/DETEC/STACK/hms_stack.map"); + gHcDetectorMap->Load(DBASE"MAPS/HMS/DETEC/STACK/hms_stack.map"); // =========================================================================== // Experimental apparatus @@ -249,6 +251,18 @@ int monitor(PRadETChannel *ch, int interval, const bool do_all, const bool do_co analyzer->SetCountMode(2); // 0 = counter is # of physics triggers // 1 = counter is # of all decode reads // 2 = counter is event number + // Define the run(s) that we want to analyze. + // We just set up one, but this could be many. + THcRun* run = new THcRun; + + // Set to read in Hall C run database parameters + run->SetRunParamClass("THcRunParameters"); + + // Eventually need to learn to skip over, or properly analyze the pedestal events + run->SetEventRange(0, -1); // Physics Event number, does not include scaler or control events. + run->SetNscan(1); + run->SetDataRequired(0x7); + run->Print(); analyzer->SetEvent(event); // Set EPICS event type -- GitLab