diff --git a/config/offline_monitor.conf b/config/offline_monitor.conf
new file mode 100644
index 0000000000000000000000000000000000000000..09f3d14f92f584c957556826d248971658e84852
--- /dev/null
+++ b/config/offline_monitor.conf
@@ -0,0 +1,13 @@
+# configuration for online monitoring
+
+host = clrlpc.jlab.org
+port = 11111
+etfile = /tmp/et_test
+
+modules = ${THIS_DIR}/esb_module.conf
+output = ${THIS_DIR}/../processed_data/offline.root
+
+number_events = -1 # all events
+update_interval = 2000 # ms
+server_dir = /offline/latest/
+server_port = 9100
diff --git a/config/online_monitor.conf b/config/online_monitor.conf
index 2c47433fcde56af80185217783e7e2e8ae7610cb..f6edecd1e7d561293b9a8369f8a890c5e389f7d9 100644
--- a/config/online_monitor.conf
+++ b/config/online_monitor.conf
@@ -9,4 +9,5 @@ output = ${THIS_DIR}/../processed_data/online.root
number_events = -1 # all events
update_interval = 2000 # ms
-
+server_dir = /online/latest/
+server_port = 9100
diff --git a/online/monitor.cxx b/online/monitor.cxx
index da7e09116cade395d77481443da220f41fb64546..1da910dd6fd0307df7b2cb396454b78cf4ccf62a 100644
--- a/online/monitor.cxx
+++ b/online/monitor.cxx
@@ -309,13 +309,12 @@ void processEvent(const uint32_t *buf, int &count, TTree *tree, bool &init_tree,
}
-static std::vector<std::string> ec_channels = {
-// "C4", "C6_1", "C7_1",
-// "C5_1", "C9_1", "C8_1",
-// "C1", "C2", "C3",
- "C1", "C2", "C3", "C4", "C5_1", "C5_2", "C5_3", "C5_4", "C6_1", "C6_2", "C6_3", "C6_4",
- "C7_1", "C7_2", "C7_3", "C7_4", "C8_1", "C8_2", "C8_3", "C8_4", "C9_1", "C9_2", "C9_3", "C9_4",
+static std::vector<std::vector<std::string>> ec_channels = {
+ {"C4"}, {"C6_1", "C6_4", "C6_2", "C6_3"}, {"C7_1", "C7_4", "C7_2", "C7_3"},
+ {"C5_1", "C5_4", "C5_2", "C5_3"}, {"C9_1", "C9_2", "C9_4", "C9_3"}, {"C8_2", "C8_3", "C8_1", "C8_4"},
+ {"C1"}, {"C2"}, {"C3"},
};
+static std::vector<std::pair<int, int>> padnum;
inline void set_graph(TGraph *gr, int npt, double value = 0.)
{
@@ -326,19 +325,28 @@ inline void set_graph(TGraph *gr, int npt, double value = 0.)
void AddWaveformDisplay(hallc::MonitoringDisplay *dply, std::unordered_map<std::string, BranchData> &brdata, int &mode)
{
+
dply->CreateDisplayPlot("raw/", "waveform",
[] (hallc::DisplayPlot &plt) {
- plt._plot_data._canvas = new TCanvas("ec_waveform", "EC Waveform", 1200, 700);
- plt._plot_data._canvas->Divide(5, 5);
+ plt._plot_data._canvas = new TCanvas("ec_waveform_test2", "EC Waveform", 1200, 700);
+ plt._plot_data._canvas->DivideSquare(ec_channels.size());
+ padnum.clear();
for (size_t i = 0; i < ec_channels.size(); ++i) {
- auto gr = new TGraph();
- set_graph(gr, 64);
- gr->SetLineColor(kRed);
- gr->SetLineWidth(2);
- plt._plot_data._graphs1.push_back(gr);
- gr->SetTitle(ec_channels[i].c_str());
+ auto gch = ec_channels[i];
plt._plot_data._canvas->cd(i + 1);
- gr->Draw("L");
+ int ndiv = int(std::sqrt(gch.size()) - 1e-4) + 1;
+ gPad->Divide(ndiv, ndiv, 0., 0.);
+ for (size_t j = 0; j < gch.size(); ++j) {
+ gPad->cd(j + 1);
+ auto gr = new TGraph();
+ set_graph(gr, 64);
+ gr->SetLineColor(kRed);
+ gr->SetLineWidth(2);
+ gr->SetTitle(gch[j].c_str());
+ gr->Draw("L");
+ plt._plot_data._graphs1.push_back(gr);
+ padnum.push_back({i + 1, j + 1});
+ }
}
return 0;
},
@@ -349,14 +357,16 @@ void AddWaveformDisplay(hallc::MonitoringDisplay *dply, std::unordered_map<std::
}
for (size_t i = 0; i < plt._plot_data._graphs1.size(); ++i) {
- plt._plot_data._canvas->cd(i + 1);
auto gr = plt._plot_data._graphs1[i];
- set_graph(gr, 64);
+ auto pn = padnum[i];
+ plt._plot_data._canvas->cd(pn.first);
+ gPad->cd(pn.second);
+
auto it = brdata.find(gr->GetTitle());
if (it != brdata.end()) {
auto data = it->second;
- for (int k = 0; k < 64 && k < data.nraw; ++k) {
- gr->SetPoint(k, k, data.raw[k]);
+ for (int k = 0; k < 64; ++k) {
+ gr->SetPoint(k, k, (k < data.nraw) ? data.raw[k] : 0.);
}
} else {
std::cout << "Warning: cannot find raw data for " << gr->GetTitle() << std::endl;
@@ -381,6 +391,8 @@ void monitor(const std::string &cpath = "config/online_monitor.conf")
auto up_intvl = conf.Value<double>("update_interval", 5000);
auto outfile = conf.Value<std::string>("output", "processed_data/online.root");
auto nev = conf.Value<int>("number_events", -1);
+ auto server_dir = conf.Value<std::string>("server_dir", "online/latest");
+ auto server_port = conf.Value<int>("server_port", 9100);
// connect et
ETChannel et_chan(100, 100);
@@ -411,7 +423,7 @@ void monitor(const std::string &cpath = "config/online_monitor.conf")
bool init_tree = false;
// display plots
- auto dply = CreateMonitorDisplay("/online/latest/", 9100, tree);
+ auto dply = CreateMonitorDisplay(server_dir, server_port, tree);
// monitor display for raw waveform
AddWaveformDisplay(dply, brdata, data_mode);
dply->InitAll();
@@ -448,7 +460,7 @@ void monitor(const std::string &cpath = "config/online_monitor.conf")
processEvent(et_chan.GetEvBuffer(), count, tree, init_tree, data_mode, modules, brdata);
break;
}
- }
+ }
dply->Process();
dply->UpdateAll();