23 case H1X:
Name(
"OnlMonHodoH1X" );
Title(
"Hodo: H1X" );
break;
24 case H2X:
Name(
"OnlMonHodoH2X" );
Title(
"Hodo: H2X" );
break;
25 case H3X:
Name(
"OnlMonHodoH3X" );
Title(
"Hodo: H3X" );
break;
26 case H4X:
Name(
"OnlMonHodoH4X" );
Title(
"Hodo: H4X" );
break;
27 case H1Y:
Name(
"OnlMonHodoH1Y" );
Title(
"Hodo: H1Y" );
break;
28 case H2Y:
Name(
"OnlMonHodoH2Y" );
Title(
"Hodo: H2Y" );
break;
29 case H4Y1:
Name(
"OnlMonHodoH4Y1");
Title(
"Hodo: H4Y1");
break;
30 case H4Y2:
Name(
"OnlMonHodoH4Y2");
Title(
"Hodo: H4Y2");
break;
31 case DP1T:
Name(
"OnlMonHodoDP1T");
Title(
"Hodo: DP1T");
break;
32 case DP1B:
Name(
"OnlMonHodoDP1B");
Title(
"Hodo: DP1B");
break;
33 case DP2T:
Name(
"OnlMonHodoDP2T");
Title(
"Hodo: DP2T");
break;
34 case DP2B:
Name(
"OnlMonHodoDP2B");
Title(
"Hodo: DP2B");
break;
45 const double DT = 20/9.0;
50 case H1X: SetDet(
"H1T" ,
"H1B" );
break;
51 case H2X: SetDet(
"H2T" ,
"H2B" );
break;
52 case H3X: SetDet(
"H3T" ,
"H3B" );
break;
53 case H4X: SetDet(
"H4T" ,
"H4B" );
break;
54 case H1Y: SetDet(
"H1L" ,
"H1R" );
break;
55 case H2Y: SetDet(
"H2L" ,
"H2R" );
break;
56 case H4Y1: SetDet(
"H4Y1L",
"H4Y1R");
break;
57 case H4Y2: SetDet(
"H4Y2L",
"H4Y2R");
break;
58 case DP1T: SetDet(
"DP1TL",
"DP1TR");
break;
59 case DP1B: SetDet(
"DP1BL",
"DP1BR");
break;
60 case DP2T: SetDet(
"DP2TL",
"DP2TR");
break;
61 case DP2B: SetDet(
"DP2BL",
"DP2BR");
break;
70 for (
unsigned int i_det = 0; i_det <
N_DET; i_det++) {
71 string name = list_det_name[i_det];
72 int det_id = list_det_id [i_det];
74 if (det_id <= 0 || n_ele <= 0) {
75 cout <<
"OnlMonHodo::InitRunOnlMon(): Invalid det_id or n_ele: "
76 << det_id <<
" " << n_ele <<
" at name = " << name <<
"." << endl;
81 oss <<
"h1_ele_" << i_det;
82 h1_ele[i_det] =
new TH1D(oss.str().c_str(),
"", n_ele, 0.5, n_ele+0.5);
84 oss << name <<
";Element ID;Hit count";
85 h1_ele[i_det]->SetTitle(oss.str().c_str());
88 oss <<
"h1_ele_in_" << i_det;
89 h1_ele_in[i_det] =
new TH1D(oss.str().c_str(),
"", n_ele, 0.5, n_ele+0.5);
91 oss << name <<
";Element ID;In-time hit count";
92 h1_ele_in[i_det]->SetTitle(oss.str().c_str());
95 oss <<
"h1_time_" << i_det;
96 h1_time[i_det] =
new TH1D(oss.str().c_str(),
"", NT, T0, T1);
98 oss << name <<
";tdcTime;Hit count";
99 h1_time[i_det]->SetTitle(oss.str().c_str());
102 oss <<
"h1_time_in_" << i_det;
103 h1_time_in[i_det] =
new TH1D(oss.str().c_str(),
"", NT, T0, T1);
105 oss << name <<
";tdcTime;In-time hit count";
106 h1_time_in[i_det]->SetTitle(oss.str().c_str());
109 oss <<
"h2_time_ele_" << i_det;
110 h2_time_ele[i_det] =
new TH2D(oss.str().c_str(),
"", n_ele, 0.5, n_ele+0.5, NT, T0, T1);
112 oss << name <<
";Element ID;tdcTime;Hit count";
113 h2_time_ele[i_det]->SetTitle(oss.str().c_str());
127 SQEvent* event_header = findNode::getClass<SQEvent >(topNode,
"SQEvent");
128 SQHitVector* hit_vec = findNode::getClass<SQHitVector>(topNode,
"SQHitVector");
132 int det_id = (*it)->get_detector_id();
133 for (
int i_det = 0; i_det <
N_DET; i_det++) {
134 if (list_det_id[i_det] != det_id)
continue;
135 int ele = (*it)->get_element_id();
136 double time = (*it)->get_tdc_time ();
137 h1_ele [i_det]->Fill(ele );
138 h1_time [i_det]->Fill(time);
139 h2_time_ele[i_det]->Fill(ele, time);
140 if ((*it)->is_in_time()) {
141 h1_ele_in [i_det]->Fill(ele );
142 h1_time_in[i_det]->Fill(time);
158 for (
int i_det = 0; i_det <
N_DET; i_det++) {
160 oss <<
"h1_ele_" << i_det;
162 if (! h1_ele[i_det])
return 1;
164 oss <<
"h1_ele_in_" << i_det;
166 if (! h1_ele_in[i_det])
return 1;
168 oss <<
"h1_time_" << i_det;
170 if (! h1_time[i_det])
return 1;
172 oss <<
"h1_time_in_" << i_det;
173 h1_time_in[i_det] =
FindMonHist(oss.str().c_str());
174 if (! h1_time_in[i_det])
return 1;
176 oss <<
"h2_time_ele_" << i_det;
177 h2_time_ele[i_det] = (TH2*)
FindMonHist(oss.str().c_str());
178 if (! h2_time_ele[i_det])
return 1;
190 bool empty_ele =
false;
191 for (
int i_det = 0; i_det <
N_DET; i_det++) {
193 h1_ele[i_det]->SetLineColor(kBlack);
194 h1_ele[i_det]->Draw();
195 h1_ele_in[i_det]->SetLineColor(kBlue);
196 h1_ele_in[i_det]->SetFillColor(kBlue-7);
197 h1_ele_in[i_det]->Draw(
"same");
198 if (h1_ele[i_det]->GetMinimum() == 0) empty_ele =
true;
202 h2_time_ele[i_det]->Draw(
"colz");
204 oss <<
"pr_" << h2_time_ele[i_det]->GetName();
205 TProfile* pr = h2_time_ele[i_det]->ProfileX(oss.str().c_str());
206 pr->SetLineColor(kBlack);
219 for (
int i_det = 0; i_det <
N_DET; i_det++) {
223 h1_time[i_det]->SetLineColor(kBlack);
224 h1_time[i_det]->Draw();
225 h1_time_in[i_det]->SetLineColor(kBlue);
226 h1_time_in[i_det]->SetFillColor(kBlue-7);
227 h1_time_in[i_det]->Draw(
"same");
233 void OnlMonHodo::SetDet(
const char* det0,
const char* det1)
235 list_det_name[0] = det0;
236 list_det_name[1] = det1;
238 for (
int ii = 0; ii <
N_DET; ii++) {
void AutoSetRange(TH1 *h1, const int margin_lo=5, const int margin_hi=5)
Adjust the axis range via "h1->GetXaxis()->SetRange(bin_lo, bin_hi)" to zoom up non-empty bins...
int ProcessEventOnlMon(PHCompositeNode *topNode)
OnlMonCanvas * GetCanvas(const int num=0)
int InitOnlMon(PHCompositeNode *topNode)
std::vector< SQHit * >::const_iterator ConstIter
int EndOnlMon(PHCompositeNode *topNode)
void SetStatus(const MonStatus_t stat)
void RegisterHist(TH1 *h1, const HistMode_t mode=MODE_ADD)
virtual const std::string Name() const
Returns the name of this module.
int InitRunOnlMon(PHCompositeNode *topNode)
An SQ interface class to hold a list of SQHit objects.
An SQ interface class to hold one event header.
void AutoSetRangeY(TH2 *h2, const int margin_lo=5, const int margin_hi=5)
static GeomSvc * instance()
singlton instance
int getDetectorID(const std::string &detectorName) const
Get the plane position.
OnlMonHodo(const HodoType_t type)
TH1 * FindMonHist(const std::string name, const bool non_null=true)
int getPlaneNElements(int detectorID)
void AddMessage(const char *msg)