Skip to content

Commit

Permalink
GUI reback
Browse files Browse the repository at this point in the history
  • Loading branch information
frankscu committed Aug 16, 2018
1 parent dcc3996 commit 1e27da5
Show file tree
Hide file tree
Showing 6 changed files with 136 additions and 225 deletions.
24 changes: 10 additions & 14 deletions software/gui/linux/include/GUIManager.hh
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
#include <QObject>

#include "GUIMonitor.hh"
#include "JadeManager.hh"
#include "JadeRegCtrl.hh"

#include <chrono>
#include <ctime>
Expand All @@ -17,31 +15,29 @@
#include <string>
#include <thread>


class GUIManager : public QObject {
Q_OBJECT

public:
public:
GUIManager();
~GUIManager();
std::string get_now_str();

void set_config_path(std::string config_path) { m_opt_config_file = config_path; };


void set_config_path(std::string config_path){ m_opt_config_file = config_path; };
std::shared_ptr<GUIMonitor> get_monitor();

public slots:
public slots:
void start_run();
void stop_run();
void config();

private:
private:
std::string m_opt_config_file;
JadeManager* m_man;
std::shared_ptr<GUIMonitor> m_mnt;

signals:
JadeManagerSP m_man;
signals:
void IsRunning();
void IsStop();

};

#endif //GUIManager_HH
15 changes: 9 additions & 6 deletions software/gui/linux/include/GUIMonitor.hh
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
#ifndef GUIMONITOR_HH
#define GUIMONITOR_HH

#include "JadeMonitor.hh"
#include "JadeOption.hh"
#include "JadeCore.hh"
#include <TH1.h>
#include <TH2.h>
#include <TRandom.h>
Expand All @@ -14,15 +13,18 @@
#include <vector>

class GUIMonitor : public JadeMonitor {
public:
public:
GUIMonitor(const JadeOption& options);
void Monitor(JadeDataFrameSP df);
void Reset();
~GUIMonitor() override{};
void Monitor(JadeDataFrameSP df) override;
void Reset() override;
JadeOption Post(const std::string &url, const JadeOption &opt) override;

std::shared_ptr<TH2F> GetADCMap();
std::shared_ptr<TH2F> GetADCCounts();
std::vector<std::shared_ptr<TH1F>> GetADCHist();

private:
private:
JadeOption m_opt;
size_t m_ev_get;
size_t m_ev_num;
Expand All @@ -44,4 +46,5 @@ class GUIMonitor : public JadeMonitor {
std::vector<std::shared_ptr<TH1F>> m_adc_hist;
std::vector<std::shared_ptr<TH1F>> m_adc_hist_clone;
};

#endif
106 changes: 27 additions & 79 deletions software/gui/linux/src/GUIManager.cxx
Original file line number Diff line number Diff line change
@@ -1,109 +1,57 @@
#include "GUIManager.hh"
#include "JadeCore.hh"

using namespace std::chrono_literals;

GUIManager::GUIManager()
: m_opt_config_file("sample_gui.json")
:m_opt_config_file("sample_gui.json")
{
m_man = new JadeManager(JadeOption("{}"));
JadeUtils::PrintTypeIndexMap();
}

GUIManager::~GUIManager()
{
}

std::string GUIManager::get_now_str()
{
auto now = std::chrono::system_clock::now();
auto now_c = std::chrono::system_clock::to_time_t(now);
std::stringstream ss;
ss << std::put_time(std::localtime(&now_c), "%c");
return ss.str();
}

void GUIManager::start_run()
{
m_man->DeviceConnect();
m_man->DeviceControl("STOP");
std::this_thread::sleep_for(1s);
std::cout << "=========start at " << get_now_str() << "=======" << std::endl;
m_man->DeviceControl("START");
std::cout << "=========" << std::endl;
m_man->StartDataTaking();
std::cout << "=========" << std::endl;
emit IsRunning();
}

void GUIManager::stop_run()
{
emit IsStop();
std::cout << "=========" << std::endl;
m_man->StopDataTaking();
std::cout << "=========" << std::endl;
m_man->DeviceControl("STOP");
std::this_thread::sleep_for(1s);
std::cout << "=========exit at " << get_now_str() << "=======" << std::endl;
m_man->DeviceDisconnect();
}

void GUIManager::config()
{
std::ifstream ifs(m_opt_config_file);
if (!ifs.good()) {
std::cerr << "Unable to open configrue file in PATH: " << m_opt_config_file << "\n";
void GUIManager::config(){
std::string json_path = m_opt_config_file;
std::string str_json = JadeUtils::LoadFileToString(json_path);
JadeOption opt_conf(str_json);
JadeOption opt_man(opt_conf.GetSubOption("JadeManager"));
std::string man_type=opt_man.GetStringValue("type");

if(man_type != "GUIManager"){
std::cerr<<"it is not GUIManager \n";
throw;
}

std::string config_str;
config_str.assign((std::istreambuf_iterator<char>(ifs)),
(std::istreambuf_iterator<char>()));

JadeOption conf(config_str);
JadeOption conf_core = conf.GetSubOption("JadeCore");

JadeOption conf_man = conf_core.GetSubOption("JadeManager");
JadeOption conf_man_para = conf_man.GetSubOption("parameter");
JadeOption conf_ctrl = conf_core.GetSubOption("JadeRegCtrl");
JadeOption conf_ctrl_para = conf_ctrl.GetSubOption("parameter");
JadeOption conf_read = conf_core.GetSubOption("JadeRead");
JadeOption conf_read_para = conf_read.GetSubOption("parameter");
JadeOption conf_flt = conf_core.GetSubOption("JadeFilter");
JadeOption conf_flt_para = conf_flt.GetSubOption("parameter");
JadeOption conf_wrt = conf_core.GetSubOption("JadeWrite");
JadeOption conf_wrt_para = conf_wrt.GetSubOption("parameter");
JadeOption conf_mnt = conf_core.GetSubOption("GUIMonitor");
JadeOption conf_mnt_para = conf_mnt.GetSubOption("parameter");

std::cout << conf_man_para.DumpString() << std::endl;
std::cout << conf_ctrl_para.DumpString() << std::endl;
std::cout << conf_read_para.DumpString() << std::endl;
std::cout << conf_flt_para.DumpString() << std::endl;
std::cout << conf_wrt_para.DumpString() << std::endl;
std::cout << conf_mnt_para.DumpString() << std::endl;

JadeRegCtrlSP pctrl = std::make_shared<JadeRegCtrl>(conf_ctrl_para);
JadeReadSP pread = std::make_shared<JadeRead>(conf_read_para);
JadeFilterSP pflt = std::make_shared<JadeFilter>(conf_flt_para);
JadeWriteSP pwrt = std::make_shared<JadeWrite>(conf_wrt_para);
m_mnt = std::make_shared<GUIMonitor>(conf_mnt_para);

size_t nsec = conf_man_para.GetIntValue("SecPerLoop");
size_t nloop = conf_man_para.GetIntValue("N_Loops");
std::string chip_address = conf_man_para.GetStringValue("ChipAddress");

m_man->SetRegCtrl(pctrl);
m_man->SetReader(pread);
m_man->SetFilter(pflt);
m_man->SetWriter(pwrt);
m_man->SetMonitor(std::dynamic_pointer_cast<JadeMonitor>(m_mnt));
m_man->DeviceConnect();
m_man->DeviceControl(chip_address);
m_man->DeviceControl("SET");
std::cout << "Select address: " << chip_address << std::endl;
m_man->DeviceDisconnect();

m_man = JadeManager::Make(man_type, opt_man.GetSubOption("parameter"));
m_man->Init();
}

std::shared_ptr<GUIMonitor> GUIManager::get_monitor()
{
return m_mnt;
std::shared_ptr<GUIMonitor> GUIManager::get_monitor(){
JadeMonitorSP mon = m_man->GetMonitor();
auto guimon = std::dynamic_pointer_cast<GUIMonitor>(mon);
mon.reset();
if( ! guimon ){
std::cerr<<"GUIManager: WARNING, the returned monitor is not GUI devivation "<<std::endl;
return nullptr;
}
if( guimon.use_count() > 2){
std::cerr<<"GUIManager: WARNING, guimon.use_count() > 2 "<<std::endl;
}
return guimon;
}
72 changes: 54 additions & 18 deletions software/gui/linux/src/GUIMonitor.cxx
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
#include "GUIMonitor.hh"

namespace{
auto _test_index_ = JadeUtils::SetTypeIndex(std::type_index(typeid(GUIMonitor)));
auto _test_ = JadeFactory<JadeMonitor>::Register<GUIMonitor, const JadeOption&>(typeid(GUIMonitor));
}

using namespace std::chrono_literals;

GUIMonitor::GUIMonitor(const JadeOption& options)
Expand All @@ -8,42 +13,48 @@ GUIMonitor::GUIMonitor(const JadeOption& options)
, m_ev_get(0)
, m_ev_num(0)
, m_nx(16)
, m_ny(96)
, m_ny(48)
, m_col(0)
, m_row(0)
, m_nbins(10000)
, m_thr(0) //*
, m_last_df({ 0 })
, m_last_df()
, m_enbale_print_events(false)
, m_monitor_percent(0.5)
{
//
m_ev_get = m_opt.GetIntValue("PRINT_EVENT_N");
m_enbale_print_events = m_opt.GetIntValue("ENABLE_PRINT_EVENTS");
m_monitor_percent = m_opt.GetFloatValue("MONITOR_PERCENT");
m_col = m_opt.GetIntValue("COLUMN");
m_row = m_opt.GetIntValue("ROW");
m_thr = m_opt.GetIntValue("ADC_THREASHOLD");
//

m_nbins = m_opt.GetIntValue("NBINS");

m_adc_counts = std::shared_ptr<TH2F>(new TH2F("ADC_counts", "ADC_counts", m_nx, 0, m_nx, m_ny, 0, m_ny));
m_adc_map = std::shared_ptr<TH2F>(new TH2F("ADC_map", "ADC_map", m_nx, 0, m_nx, m_ny, 0, m_ny));
for (int i = 0; i < m_nx; i++) {
m_adc_hist.push_back(std::shared_ptr<TH1F>(new TH1F(Form("ADC_COL_%i", i), Form("ADC_COL_%i", i), 2 * m_nbins, -1 * m_nbins, m_nbins)));
}
}

void GUIMonitor::Reset(){
m_ev_num = 0;
};

void GUIMonitor::Monitor(JadeDataFrameSP df)
{
if (m_ev_num == 0) {
m_last_df = df;
} else {
df->CDS(*m_last_df);
m_last_df = df;
}
// if (m_ev_num == 0) {
// m_last_df = df;
// } else {
// df->CDS(*m_last_df);
// m_last_df = df;
// }

if (m_enbale_print_events && m_ev_get != 0 && m_ev_num % m_ev_get == 0) {
df->Print(std::cout);
df->PrintCDS(std::cout);
// df->PrintCDS(std::cout);
}

m_df = df;
Expand All @@ -53,9 +64,9 @@ void GUIMonitor::Monitor(JadeDataFrameSP df)
return;
}

if (!m_df->GetCDSStatus()) {
return;
}
// if (!m_df->GetCDSStatus()) {
// return;
// }

TRandom rdm;
auto factor = rdm.Uniform(1);
Expand All @@ -64,7 +75,8 @@ void GUIMonitor::Monitor(JadeDataFrameSP df)
m_adc_map->Reset();
for (size_t iy = 0; iy < m_ny; iy++)
for (size_t ix = 0; ix < m_nx; ix++) {
auto value = m_df->GetCDSValue(ix, iy);
// auto value = m_df->GetCDSValue(ix, iy);
auto value = m_df->GetHitValue(ix, iy);
m_adc_map->SetBinContent(m_nx - ix, m_ny - iy, value);
if (std::abs(value) > m_thr) {
m_adc_counts->Fill(m_nx - ix, m_ny - iy);
Expand All @@ -83,10 +95,6 @@ void GUIMonitor::Monitor(JadeDataFrameSP df)
m_ev_num++;
}

void GUIMonitor::Reset()
{
}

std::shared_ptr<TH2F> GUIMonitor::GetADCMap()
{
return m_adc_map_clone;
Expand All @@ -101,3 +109,31 @@ std::vector<std::shared_ptr<TH1F>> GUIMonitor::GetADCHist()
{
return m_adc_hist_clone;
}

JadeOption GUIMonitor::Post(const std::string &url, const JadeOption &opt){
if(url == "/set_print_event_n"){
m_ev_get = opt.GetIntValue("PRINT_EVENT_N");
return "{\"status\":true}";
}

if(url == "/set_adc_threshold"){
m_thr = opt.GetIntValue("ADC_THRESHOLD");
return "{\"status\":true}";
}

if(url == "/set_row"){
m_row = m_opt.GetIntValue("ROW");
return "{\"status\":true}";
}

if(url == "/set_column"){
m_col = m_opt.GetIntValue("COLUMN");
return "{\"status\":true}";
}

static const std::string url_base_class("/JadeMonitor/");
if( ! url.compare(0, url_base_class.size(), url_base_class) ){
return JadeMonitor::Post(url.substr(url_base_class.size()-1), opt);
}
return JadePost::Post(url, opt);
}
Loading

0 comments on commit 1e27da5

Please sign in to comment.