Skip to content
Snippets Groups Projects
Commit 4a11312f authored by Chao1009's avatar Chao1009
Browse files

Add progress report in OnlineMonitor

parent d729e41b
No related branches found
No related tags found
No related merge requests found
Pipeline #2006 passed
#include "OnlineMonitor.h" #include "OnlineMonitor.h"
#include "PRadETChannel.h" #include "PRadETChannel.h"
#include <csignal>
using namespace std::chrono; using namespace std::chrono;
volatile std::sig_atomic_t gSignalStatus;
void signal_handler(int signal) {
gSignalStatus = signal;
}
namespace hcana { 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; Int_t total = 0;
fMonitor = true; fMonitor = true;
...@@ -14,18 +21,20 @@ Int_t OnlineMonitor::Monitor(PRadETChannel *ch, std::chrono::seconds interval) ...@@ -14,18 +21,20 @@ Int_t OnlineMonitor::Monitor(PRadETChannel *ch, std::chrono::seconds interval)
fBench->Begin("Total"); fBench->Begin("Total");
void (*prev_handler)(int); std::signal(SIGINT, signal_handler);
prev_handler = signal(SIGINT, handle_sig);
while (!fMonitor) { while (fMonitor) {
system_clock::time_point start(system_clock::now()); system_clock::time_point start(system_clock::now());
system_clock::time_point next(start + interval); 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); total += ReadOnce(ch);
if (gSignalStatus == SIGINT)
break;
std::this_thread::sleep_until(next); std::this_thread::sleep_until(next);
} }
std::cout << "Received " << total << " events..." << std::endl;
signal(SIGINT, prev_handler);
if (fDoBench) if (fDoBench)
fBench->Begin("Output"); fBench->Begin("Output");
......
...@@ -17,7 +17,9 @@ namespace hcana { ...@@ -17,7 +17,9 @@ namespace hcana {
OnlineMonitor() : THcAnalyzer() {} OnlineMonitor() : THcAnalyzer() {}
virtual ~OnlineMonitor() {} 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); virtual Int_t ReadOnce(PRadETChannel *ch, size_t max_events = 10000);
Int_t ReadBuffer(uint32_t *buf); Int_t ReadBuffer(uint32_t *buf);
Int_t ProcOneEvent(); Int_t ProcOneEvent();
......
...@@ -40,6 +40,8 @@ using namespace std; ...@@ -40,6 +40,8 @@ using namespace std;
#include "ConfigOption.h" #include "ConfigOption.h"
#include "PRadETChannel.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); 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 ...@@ -124,18 +126,18 @@ int monitor(PRadETChannel *ch, int interval, const bool do_all, const bool do_co
// Load global parameters // Load global parameters
gHcParms->Define("gen_run_number", "Run Number", RunNumber); gHcParms->Define("gen_run_number", "Run Number", RunNumber);
gHcParms->AddString("g_ctp_database_filename", 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_database_filename"), RunNumber);
gHcParms->Load(gHcParms->GetString("g_ctp_parm_filename")); gHcParms->Load(gHcParms->GetString("g_ctp_parm_filename"));
gHcParms->Load(gHcParms->GetString("g_ctp_kinematics_filename"), RunNumber); gHcParms->Load(gHcParms->GetString("g_ctp_kinematics_filename"), RunNumber);
// Load parameters for HMS trigger configuration // Load parameters for HMS trigger configuration
gHcParms->Load("PARAM/TRIG/thms.param"); gHcParms->Load(DBASE"PARAM/TRIG/thms.param");
// Load fadc debug parameters // 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 // Load the Hall C detector map
gHcDetectorMap = new THcDetectorMap(); gHcDetectorMap = new THcDetectorMap();
gHcDetectorMap->Load("MAPS/HMS/DETEC/STACK/hms_stack.map"); gHcDetectorMap->Load(DBASE"MAPS/HMS/DETEC/STACK/hms_stack.map");
// =========================================================================== // ===========================================================================
// Experimental apparatus // Experimental apparatus
...@@ -249,6 +251,18 @@ int monitor(PRadETChannel *ch, int interval, const bool do_all, const bool do_co ...@@ -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 analyzer->SetCountMode(2); // 0 = counter is # of physics triggers
// 1 = counter is # of all decode reads // 1 = counter is # of all decode reads
// 2 = counter is event number // 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); analyzer->SetEvent(event);
// Set EPICS event type // Set EPICS event type
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment