8 #include "cdc/modules/cdcDQM/cdcDQM7.h"
10 #include <framework/datastore/StoreArray.h>
11 #include <framework/core/HistoModule.h>
14 #include <framework/gearbox/Unit.h>
15 #include <framework/gearbox/Const.h>
16 #include <framework/logging/Logger.h>
18 #include <cdc/dataobjects/CDCHit.h>
19 #include <cdc/dataobjects/CDCRawHit.h>
21 #include <TDirectory.h>
38 setDescription(
"CDC DQM module");
39 setPropertyFlags(c_ParallelProcessingCertified);
42 cdcDQM7Module::~cdcDQM7Module()
50 TH1D* h_nhits_L[56] = {0};
52 TH1D* h_tdc_sL[9] = {0};
53 TH1D* h_adc_sL[9] = {0};
56 TH1D* h_board_out_tdc;
64 TH1D* h_EoccAfterInjLER;
65 TH1D* h_EoccAfterInjHER;
66 TH1D* h_occAfterInjLER;
67 TH1D* h_occAfterInjHER;
70 void cdcDQM7Module::defineHisto()
73 TDirectory* oldDir = gDirectory;
74 TDirectory* dirDAQ = oldDir->mkdir(
"CDC");
80 int ndiv[9] = {160, 160, 192, 224, 256, 288, 320, 352, 384};
82 for (
int b = 0; b < 56; b++) {
86 }
else if (b >= 8 && b < 14) {
88 }
else if (b >= 14 && b < 20) {
90 }
else if (b >= 20 && b < 26) {
92 }
else if (b >= 26 && b < 32) {
94 }
else if (b >= 32 && b < 38) {
96 }
else if (b >= 38 && b < 44) {
98 }
else if (b >= 44 && b < 50) {
100 }
else if (b >= 50 && b < 56) {
105 h_nhits_L[b] =
new TH1D(Form(
"nhits_L%d", b), Form(
"nhits Layer %d", b), bmax - bmin, bmin, bmax);
106 h_nhits_L[b]->SetMinimum(0);
107 h_nhits_L[b]->SetFillColor(7);
109 h_occ_L[b] =
new TH1D(Form(
"h_occ_L%d", b),
"occ. each layer", 100, 0, 1);
110 h_occ_L[b]->SetFillColor(96);
111 h_occ_L[b]->SetMinimum(0);
112 h_occ_L[b]->SetStats(0);
116 for (
int s = 0; s < 9; s++) {
117 h_tdc_sL[s] =
new TH1D(Form(
"tdc_sL%d", s), Form(
"tdc sLayer %d", s), 250, 4200, 5200);
118 h_tdc_sL[s]->SetMinimum(0);
119 h_tdc_sL[s]->SetFillColor(6);
121 h_adc_sL[s] =
new TH1D(Form(
"adc_sL%d", s), Form(
"adc sLayer %d", s), 100, 0, 500);
122 h_adc_sL[s]->SetMinimum(0);
123 h_adc_sL[s]->SetFillColor(8);
126 h_fast_tdc =
new TH1D(
"fast_tdc",
"fastest TDC", 50, 4800, 5000);
127 h_fast_tdc->SetFillColor(6);
129 h_board_out_tdc =
new TH1D(
"h_board_out_tdc",
"out of range TDC", 300, 0, 300);
130 h_board_out_tdc->SetFillColor(95);
133 h_occ =
new TH1D(
"occ",
"occ. total", 100, 0, 1.);
134 h_occ->SetFillColor(95);
137 h_hit_cell =
new TH1D(
"h_hit_cell",
"Hit of each cell", 14336, 0, 14335);
138 h_hit_cell->SetFillColor(20);
140 bmap_2 =
new TH2D(
"bmap_2",
"", 75, 0, 75, 4, 0, 4);
143 h_tdc_sL[6]->SetOption(
"LIVE");
144 h_tdc_sL[6]->SetOption(
"hist");
146 h_board_out_tdc->SetOption(
"LIVE");
147 h_board_out_tdc->SetOption(
"hist");
150 h_fast_tdc->SetStats(1);
151 bmap_2->SetOption(
"zcol");
154 h_EoccAfterInjLER =
new TH1D(
"EoccAfterInjLer",
"Eocc after LER injection", 4000, 0, 20000);
155 h_EoccAfterInjLER->SetMinimum(0);
156 h_EoccAfterInjLER->SetFillColor(7);
158 h_EoccAfterInjHER =
new TH1D(
"EoccAfterInjHer",
"Eocc after HER injection", 4000, 0, 20000);
159 h_EoccAfterInjHER->SetMinimum(0);
160 h_EoccAfterInjHER->SetFillColor(7);
162 h_occAfterInjLER =
new TH1D(
"occAfterInjLer",
"occupancy after LER injection", 4000, 0, 20000);
163 h_occAfterInjLER->SetMinimum(0);
164 h_occAfterInjLER->SetFillColor(7);
166 h_occAfterInjHER =
new TH1D(
"occAfterInjHer",
"occupancy after HER injection", 4000, 0, 20000);
167 h_occAfterInjHER->SetMinimum(0);
168 h_occAfterInjHER->SetFillColor(7);
174 void cdcDQM7Module::initialize()
178 m_rawFTSW.isOptional();
182 void cdcDQM7Module::beginRun()
184 for (
int i = 0; i < 56; i++) {
185 h_nhits_L[i]->Reset();
190 for (
int j = 0; j < 9; j++) {
191 h_tdc_sL[j]->Reset();
192 h_adc_sL[j]->Reset();
196 h_board_out_tdc->Reset();
201 h_EoccAfterInjLER->Reset();
202 h_EoccAfterInjHER->Reset();
203 h_occAfterInjLER->Reset();
204 h_occAfterInjHER->Reset();
208 void cdcDQM7Module::event()
216 double occ_total = nent / 14336.;
217 h_occ->Fill(occ_total);
220 int whits_L[56] = {};
221 double occ_L[56] = {};
223 int ndiv[9] = {160, 160, 192, 224, 256, 288, 320, 352, 384};
225 for (
int i = 0; i < nent; i++) {
234 if (sL > 8)
continue;
235 if (iL > 8)
continue;
237 int num = sL * 6 + iL + 2;
238 if (num > 55)
continue;
250 h_nhits_L[iL]->Fill(wid);
252 h_nhits_L[num]->Fill(wid);
256 if (vtdc > ftdc && adcsum > 20) {
266 cid = iL * ndiv[sL] + wid;
268 for (
int isl = 0; isl < sL; isl ++) {
269 cid += 6 * ndiv[isl];
271 cid += 2 * ndiv[0] + iL * ndiv[sL] + wid;
273 h_hit_cell -> Fill(cid);
277 h_fast_tdc->Fill(ftdc);
280 for (
int b = 0; b < 56; b++) {
284 }
else if (b >= 8 && b < 14) {
286 }
else if (b >= 14 && b < 20) {
288 }
else if (b >= 20 && b < 26) {
290 }
else if (b >= 26 && b < 32) {
292 }
else if (b >= 32 && b < 38) {
294 }
else if (b >= 38 && b < 44) {
296 }
else if (b >= 44 && b < 50) {
298 }
else if (b >= 50 && b < 56) {
303 occ_L[b] = (double)whits_L[b] / n_wire;
304 h_occ_L[b]->Fill(occ_L[b]);
313 for (
int j = 0; j < r_nent; j++) {
317 int v_adc = cdcrawhit->
getFADC();
318 int v_tdc = cdcrawhit->
getTDC();
319 int n_tot = cdcrawhit->
getTOT();
320 int n_node = cdcrawhit->
getNode();
323 bmap_2->Fill(n_node, n_fns);
325 if (v_tdc > 5200 || v_tdc < 4200) {
326 h_board_out_tdc->Fill(brd);
330 if (brd > 299)
continue;
331 if (n_tot < 4)
continue;
332 if (v_adc < 35)
continue;
336 h_tdc_sL[0]->Fill(v_tdc);
337 h_adc_sL[0]->Fill(v_adc);
338 }
else if (brd > 27 && brd < 48) {
339 h_tdc_sL[1]->Fill(v_tdc);
340 h_adc_sL[1]->Fill(v_adc);
341 }
else if (brd > 47 && brd < 72) {
342 h_tdc_sL[2]->Fill(v_tdc);
343 h_adc_sL[2]->Fill(v_adc);
344 }
else if (brd > 71 && brd < 100) {
345 h_tdc_sL[3]->Fill(v_tdc);
346 h_adc_sL[3]->Fill(v_adc);
347 }
else if (brd > 99 && brd < 132) {
348 h_tdc_sL[4]->Fill(v_tdc);
349 h_adc_sL[4]->Fill(v_adc);
350 }
else if (brd > 131 && brd < 168) {
351 h_tdc_sL[5]->Fill(v_tdc);
352 h_adc_sL[5]->Fill(v_adc);
353 }
else if (brd > 167 && brd < 208) {
354 h_tdc_sL[6]->Fill(v_tdc);
355 h_adc_sL[6]->Fill(v_adc);
356 }
else if (brd > 207 && brd < 252) {
357 h_tdc_sL[7]->Fill(v_tdc);
358 h_adc_sL[7]->Fill(v_adc);
359 }
else if (brd > 251) {
360 h_tdc_sL[8]->Fill(v_tdc);
361 h_adc_sL[8]->Fill(v_adc);
367 for (
auto& it : m_rawFTSW) {
368 B2DEBUG(29,
"TTD FTSW : " << hex << it.GetTTUtime(0) <<
" " << it.GetTTCtime(0) <<
" EvtNr " << it.GetEveNo(0) <<
" Type " <<
369 (it.GetTTCtimeTRGType(0) & 0xF) <<
" TimeSincePrev " << it.GetTimeSincePrevTrigger(0) <<
" TimeSinceInj " <<
370 it.GetTimeSinceLastInjection(0) <<
" IsHER " << it.GetIsHER(0) <<
" Bunch " << it.GetBunchNumber(0));
371 auto difference = it.GetTimeSinceLastInjection(0);
372 if (difference != 0x7FFFFFFF) {
374 float diff2 = difference / 127.;
375 if (it.GetIsHER(0)) {
376 h_occAfterInjHER->Fill(diff2, occ_total);
377 h_EoccAfterInjHER->Fill(diff2);
379 h_occAfterInjLER->Fill(diff2, occ_total);
380 h_EoccAfterInjLER->Fill(diff2);
391 void cdcDQM7Module::endRun()
397 void cdcDQM7Module::terminate()