Class Reference for E1039 Core & Analysis Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
OnlMonCanvas.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <fstream>
3 #include <sstream>
4 #include <iomanip>
5 #include <TROOT.h>
6 #include <TError.h>
7 #include <TSystem.h>
8 #include <TStyle.h>
9 #include <TCanvas.h>
10 #include <TPaveText.h>
11 #include <UtilAna/UtilOnline.h>
12 #include "OnlMonServer.h"
13 #include "OnlMonCanvas.h"
14 using namespace std;
15 
16 OnlMonCanvas::OnlMonCanvas(const std::string name, const std::string title, const int num) :
17  m_name(name), m_title(title), m_num(num),
18  m_can("c1", "", 200+600*num, 20, 600, 800),
19  m_pad_title("title", "", 0.0, 0.9, 1.0, 1.0),
20  m_pad_main ("main" , "", 0.0, 0.1, 1.0, 0.9),
21  m_pad_msg ("msg" , "", 0.0, 0.0, 1.0, 0.1),
22  m_pate_msg(.02, .02, .98, .98),
23  m_mon_status(UNDEF),
24  m_run(0), m_spill(0), m_event(0), m_spill_min(0), m_spill_max(0),
25  m_n_evt(0), m_n_sp(0)
26 {
27  //m_can.SetWindowPosition(5+600*num, 5);
28 }
29 
31 {
32  ;
33 }
34 
35 void OnlMonCanvas::SetBasicID(const int run_id, const int spill_id, const int event_id, const int spill_id_min, const int spill_id_max)
36 {
37  m_run = run_id;
38  m_spill = spill_id;
39  m_event = event_id;
40  m_spill_min = spill_id_min;
41  m_spill_max = spill_id_max;
42 }
43 
44 void OnlMonCanvas::SetBasicCount(const int n_evt, const int n_sp)
45 {
46  m_n_evt = n_evt;
47  m_n_sp = n_sp ;
48 }
49 
50 void OnlMonCanvas::AddMessage(const char* msg)
51 {
52  m_pate_msg.AddText(msg);
53 }
54 
55 
57 {
58  switch (stat) {
59  case OK:
61  break;
62  case WARN:
64  break;
65  case ERROR:
67  break;
68  case UNDEF:
70  break;
71  }
72 }
73 
75 {
76  m_pad_main.cd();
77  return &m_pad_main;
78 }
79 
80 void OnlMonCanvas::PreDraw(const bool at_end)
81 {
82  ostringstream oss;
83  oss << m_name << " Canvas #" << m_num;
84  m_can.SetTitle(oss.str().c_str());
85 
86  m_can.cd(); m_pad_title.Draw();
87  m_can.cd(); m_pad_main .Draw();
88  m_can.cd(); m_pad_msg .Draw();
89 
90  m_pad_title.cd();
91  TPaveText* pate = new TPaveText(.02, .52, .98, .98);
92  oss.str("");
93  oss << m_title << ": C" << m_num;
94  pate->AddText(oss.str().c_str());
95  pate->Draw();
96 
97  TPaveText* pate2 = new TPaveText(.02, .02, .98, .48, "NB");
98  pate2->SetFillColor(kWhite);
99 
100  oss.str("");
101  oss << "Run " << m_run << ", Spill " << m_spill_min << "-" << m_spill_max
102  << " (N=" << m_n_sp << "), Event " << m_event
103  << " (N=" << m_n_evt << ")";
104  pate2->AddText(oss.str().c_str());
105 
106  time_t utime = time(0);
107  char stime[64];
108  strftime(stime, sizeof(stime),"%Y-%m-%d %H:%M:%S", localtime(&utime));
109  oss.str(""); oss << "Drawn at " << stime;
110  pate2->AddText(oss.str().c_str());
111 
112  pate2->Draw();
113  gStyle->SetOptStat(0000);
114  gStyle->SetHistMinimumZero(true);
115 }
116 
117 void OnlMonCanvas::PostDraw(const bool at_end)
118 {
119  if (m_pate_msg.GetListOfLines()->GetSize() == 0) { // Set minimum message.
120  switch (m_mon_status) {
121  case OK : m_pate_msg.AddText("OK" ); break;
122  case WARN : m_pate_msg.AddText("Warning" ); break;
123  case ERROR: m_pate_msg.AddText("Error" ); break;
124  default : m_pate_msg.AddText("Undefined"); break;
125  }
126  }
127  int color;
128  switch (m_mon_status) {
129  case OK : color = kGreen ; break;
130  case WARN : color = kYellow; break;
131  case ERROR: color = kRed ; break;
132  default : color = kGray ; break;
133  }
134  m_pate_msg.SetFillColor(color);
135  m_pad_msg .cd();
136  m_pate_msg.Draw();
137 
138  if (at_end) {
139  ostringstream oss;
140  oss << UtilOnline::GetOnlMonDir() << "/" << setfill('0') << setw(6) << m_run;
141  gSystem->mkdir(oss.str().c_str(), true);
142 
143  oss << "/" << m_name << "_can" << m_num;
144  string path_base = oss.str(); // path without suffix
145 
146  int lvl = gErrorIgnoreLevel;
147  gErrorIgnoreLevel = 1111; // Suppress the message by TCanvas::SaveAs().
148  oss.str("");
149  oss << path_base << ".png";
150  m_can.SaveAs(oss.str().c_str());
151  gErrorIgnoreLevel = lvl;
152 
153  oss.str("");
154  oss << path_base << ".txt";
155  ofstream ofs(oss.str().c_str());
156  ofs << m_mon_status << endl;
157  ofs.close();
158  }
159 }
OnlMonCanvas(const std::string name, const std::string title, const int num)
Definition: OnlMonCanvas.cc:16
void SetBasicCount(const int n_evt=0, const int n_sp=0)
Definition: OnlMonCanvas.cc:44
void SetBasicID(const int run_id, const int spill_id=0, const int event_id=0, const int spill_id_min=0, const int spill_id_max=0)
Definition: OnlMonCanvas.cc:35
TPad m_pad_title
Definition: OnlMonCanvas.h:20
void SetWorseStatus(const MonStatus_t stat)
Definition: OnlMonCanvas.cc:56
MonStatus_t m_mon_status
Definition: OnlMonCanvas.h:24
TPaveText m_pate_msg
Definition: OnlMonCanvas.h:23
void PreDraw(const bool at_end=false)
Definition: OnlMonCanvas.cc:80
virtual ~OnlMonCanvas()
Definition: OnlMonCanvas.cc:30
std::string m_name
Definition: OnlMonCanvas.h:16
static std::string GetOnlMonDir()
Definition: UtilOnline.h:27
void PostDraw(const bool at_end=false)
TCanvas m_can
Definition: OnlMonCanvas.h:19
TPad * GetMainPad()
Definition: OnlMonCanvas.cc:74
void AddMessage(const char *msg)
Definition: OnlMonCanvas.cc:50
std::string m_title
Definition: OnlMonCanvas.h:17