Class Reference for E1039 Core & Analysis Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
OnlMonV1495.cc
Go to the documentation of this file.
1 #include <iomanip>
3 #include <TH1D.h>
4 #include <TH2D.h>
5 #include <TProfile.h>
6 #include <interface_main/SQRun.h>
10 #include <phool/PHNodeIterator.h>
11 #include <phool/PHIODataNode.h>
12 #include <phool/getClass.h>
13 #include <geom_svc/GeomSvc.h>
14 #include <UtilAna/UtilHist.h>
15 #include "OnlMonServer.h"
16 #include "OnlMonV1495.h"
17 using namespace std;
18 
19 OnlMonV1495::OnlMonV1495(const HodoType_t type, const int lvl) : m_type(type), m_lvl(lvl)
20 {
21  NumCanvases(2);
22  switch (m_type) {
23  case H1X: Name("OnlMonV1495H1X" ); Title("V1495: H1X" ); break;
24  case H2X: Name("OnlMonV1495H2X" ); Title("V1495: H2X" ); break;
25  case H3X: Name("OnlMonV1495H3X" ); Title("V1495: H3X" ); break;
26  case H4X: Name("OnlMonV1495H4X" ); Title("V1495: H4X" ); break;
27  case H1Y: Name("OnlMonV1495H1Y" ); Title("V1495: H1Y" ); break;
28  case H2Y: Name("OnlMonV1495H2Y" ); Title("V1495: H2Y" ); break;
29  case H4Y1: Name("OnlMonV1495H4Y1"); Title("V1495: H4Y1"); break;
30  case H4Y2: Name("OnlMonV1495H4Y2"); Title("V1495: H4Y2"); break;
31  }
32 }
33 
35 {
37 }
38 
40 {
41  const double DT = 5.0; // 1 ns per single count of v1495 TDC
42  int NT = 100;
43  double T0 = 100.5*DT;
44  double T1 = 200.5*DT;
45  switch (m_type) {
46  case H1X: SetDet("H1T" ,"H1B" ); break;
47  case H2X: SetDet("H2T" ,"H2B" ); break;
48  case H3X: SetDet("H3T" ,"H3B" ); break;
49  case H4X: SetDet("H4T" ,"H4B" ); break;
50  case H1Y: SetDet("H1L" ,"H1R" ); break;
51  case H2Y: SetDet("H2L" ,"H2R" ); break;
52  case H4Y1: SetDet("H4Y1L","H4Y1R"); break;
53  case H4Y2: SetDet("H4Y2L","H4Y2R"); NT=100; T0=90.5*DT; T1=190.5*DT; break;
54  }
55 
56  GeomSvc* geom = GeomSvc::instance();
57  ostringstream oss;
58  for (int i_det = 0; i_det < N_DET; i_det++) {
59  string name = list_det_name[i_det];
60  int det_id = list_det_id [i_det];
61  int n_ele = geom->getPlaneNElements(det_id);
62  if (det_id <= 0 || n_ele <= 0) {
63  cout << "OnlMonV1495::InitRunOnlMon(): Invalid det_id or n_ele: "
64  << det_id << " " << n_ele << " at name = " << name << "." << endl;
66  }
67 
68  oss.str("");
69  oss << "h1_ele_" << i_det;
70  h1_ele[i_det] = new TH1D(oss.str().c_str(), "", n_ele, 0.5, n_ele+0.5);
71  oss.str("");
72  oss << name << ";Element ID;Hit count";
73  h1_ele[i_det]->SetTitle(oss.str().c_str());
74 
75  oss.str("");
76  oss << "h1_ele_in_" << i_det;
77  h1_ele_in[i_det] = new TH1D(oss.str().c_str(), "", n_ele, 0.5, n_ele+0.5);
78  oss.str("");
79  oss << name << ";Element ID;In-time hit count";
80  h1_ele_in[i_det]->SetTitle(oss.str().c_str());
81 
82  oss.str("");
83  oss << "h1_time_" << i_det;
84  h1_time[i_det] = new TH1D(oss.str().c_str(), "", NT, T0, T1);
85 
86  oss.str("");
87  oss << name << ";tdcTime;Hit count";
88  h1_time[i_det]->SetTitle(oss.str().c_str());
89 
90  oss.str("");
91  oss << "h1_time_in_" << i_det;
92  h1_time_in[i_det] = new TH1D(oss.str().c_str(), "", NT, T0, T1);
93  oss.str("");
94  oss << name << ";tdcTime;In-time hit count";
95  h1_time_in[i_det]->SetTitle(oss.str().c_str());
96 
97  oss.str("");
98  oss << "h2_time_ele_" << i_det;
99  h2_time_ele[i_det] = new TH2D(oss.str().c_str(), "", n_ele, 0.5, n_ele+0.5, NT, T0, T1);
100  oss.str("");
101  oss << name << ";Element ID;tdcTime;Hit count";
102  h2_time_ele[i_det]->SetTitle(oss.str().c_str());
103 
104  RegisterHist(h1_ele [i_det]);
105  RegisterHist(h1_ele_in [i_det]);
106  RegisterHist(h1_time [i_det]);
107  RegisterHist(h1_time_in[i_det]);
108  RegisterHist(h2_time_ele[i_det]);
109  }
110 
112 }
113 
115 {
116  SQEvent* event_header = findNode::getClass<SQEvent >(topNode, "SQEvent");
117  SQHitVector* hit_vec = findNode::getClass<SQHitVector>(topNode, "SQTriggerHitVector");
118  if (!event_header || !hit_vec) return Fun4AllReturnCodes::ABORTEVENT;
119 
120  for (SQHitVector::ConstIter it = hit_vec->begin(); it != hit_vec->end(); it++) {
121  if ((*it)->get_level() != m_lvl) continue;
122  int det_id = (*it)->get_detector_id();
123  for (int i_det = 0; i_det < N_DET; i_det++) {
124  if (list_det_id[i_det] != det_id) continue;
125  int ele = (*it)->get_element_id();
126  double time = (*it)->get_tdc_time ();
127  h1_ele [i_det]->Fill(ele );
128  h1_time [i_det]->Fill(time);
129  h2_time_ele[i_det]->Fill(ele, time);
130  if ((*it)->is_in_time()) {
131  h1_ele_in [i_det]->Fill(ele );
132  h1_time_in[i_det]->Fill(time);
133  }
134  }
135  }
136 
138 }
139 
141 {
143 }
144 
146 {
147  ostringstream oss;
148  for (int i_det = 0; i_det < N_DET; i_det++) {
149  oss.str("");
150  oss << "h1_ele_" << i_det;
151  h1_ele[i_det] = FindMonHist(oss.str().c_str());
152  if (! h1_ele[i_det]) return 1;
153  oss.str("");
154  oss << "h1_ele_in_" << i_det;
155  h1_ele_in[i_det] = FindMonHist(oss.str().c_str());
156  if (! h1_ele_in[i_det]) return 1;
157  oss.str("");
158  oss << "h1_time_" << i_det;
159  h1_time[i_det] = FindMonHist(oss.str().c_str());
160  if (! h1_time[i_det]) return 1;
161  oss.str("");
162  oss << "h1_time_in_" << i_det;
163  h1_time_in[i_det] = FindMonHist(oss.str().c_str());
164  if (! h1_time_in[i_det]) return 1;
165  oss.str("");
166  oss << "h2_time_ele_" << i_det;
167  h2_time_ele[i_det] = (TH2*)FindMonHist(oss.str().c_str());
168  if (! h2_time_ele[i_det]) return 1;
169  }
170  return 0;
171 }
172 
174 {
175  OnlMonCanvas* can0 = GetCanvas(0);
176  TPad* pad0 = can0->GetMainPad();
177  pad0->SetGrid();
178  pad0->Divide(2, 2);
179  for (int i_det = 0; i_det < N_DET; i_det++) {
180  pad0->cd(2*i_det+1);
181  h1_ele[i_det]->SetLineColor(kBlack);
182  h1_ele[i_det]->Draw();
183  h1_ele_in[i_det]->SetLineColor(kBlue);
184  h1_ele_in[i_det]->SetFillColor(kBlue-7);
185  h1_ele_in[i_det]->Draw("same");
186 
187  pad0->cd(2*i_det+2);
188  h2_time_ele[i_det]->Draw("colz");
189  ostringstream oss;
190  oss << "pr_" << h2_time_ele[i_det]->GetName();
191  TProfile* pr = h2_time_ele[i_det]->ProfileX(oss.str().c_str());
192  pr->SetLineColor(kBlack);
193  pr->Draw("E1same");
194  }
195  //can0->SetStatus(OnlMonCanvas::OK);
196 
197  OnlMonCanvas* can1 = GetCanvas(1);
198  TPad* pad1 = can1->GetMainPad();
199  pad1->SetGrid();
200  pad1->Divide(1, 2);
201  for (int i_det = 0; i_det < N_DET; i_det++) {
202  pad1->cd(i_det+1);
203  //UtilHist::AutoSetRange(h1_time[i_det]);
204  h1_time[i_det]->SetLineColor(kBlack);
205  h1_time[i_det]->Draw();
206  h1_time_in[i_det]->SetLineColor(kBlue);
207  h1_time_in[i_det]->SetFillColor(kBlue-7);
208  h1_time_in[i_det]->Draw("same");
209  }
210  //can1->SetStatus(OnlMonCanvas::OK);
211 
212  return 0;
213 }
214 
215 void OnlMonV1495::SetDet(const char* det0, const char* det1)
216 {
217  list_det_name[0] = det0;
218  list_det_name[1] = det1;
219  GeomSvc* geom = GeomSvc::instance();
220  for (int ii = 0; ii < N_DET; ii++) {
221  list_det_id[ii] = geom->getDetectorID(list_det_name[ii]);
222  }
223 }
int NumCanvases()
Definition: OnlMonClient.h:101
int FindAllMonHist()
Definition: OnlMonV1495.cc:145
OnlMonCanvas * GetCanvas(const int num=0)
std::vector< SQHit * >::const_iterator ConstIter
Definition: SQHitVector.h:37
void RegisterHist(TH1 *h1, const HistMode_t mode=MODE_ADD)
std::string Title()
Definition: OnlMonClient.h:73
virtual const std::string Name() const
Returns the name of this module.
Definition: Fun4AllBase.h:23
int DrawMonitor()
Definition: OnlMonV1495.cc:173
static const int N_DET
Definition: OnlMonV1495.h:8
int InitRunOnlMon(PHCompositeNode *topNode)
Definition: OnlMonV1495.cc:39
int ProcessEventOnlMon(PHCompositeNode *topNode)
Definition: OnlMonV1495.cc:114
An SQ interface class to hold a list of SQHit objects.
Definition: SQHitVector.h:32
An SQ interface class to hold one event header.
Definition: SQEvent.h:17
int EndOnlMon(PHCompositeNode *topNode)
Definition: OnlMonV1495.cc:140
TPad * GetMainPad()
Definition: OnlMonCanvas.cc:74
static GeomSvc * instance()
singlton instance
Definition: GeomSvc.cxx:211
OnlMonV1495(const HodoType_t type, const int lvl)
Definition: OnlMonV1495.cc:19
int getDetectorID(const std::string &detectorName) const
Get the plane position.
Definition: GeomSvc.h:184
TH1 * FindMonHist(const std::string name, const bool non_null=true)
int getPlaneNElements(int detectorID)
Definition: GeomSvc.h:208
int InitOnlMon(PHCompositeNode *topNode)
Definition: OnlMonV1495.cc:34