11 #include <pxd/modules/pxdDQM/PXDGatedModeDQMModule.h>
12 #include "TDirectory.h"
31 setDescription(
"Monitor GatedMode");
32 setPropertyFlags(c_ParallelProcessingCertified);
33 addParam(
"histogramDirectoryName", m_histogramDirectoryName,
"Name of the directory where histograms will be placed",
34 std::string(
"PXDINJ"));
35 addParam(
"PXDRawHitsName", m_PXDRawHitsName,
"Name of PXD raw hits", std::string(
""));
36 addParam(
"perGate", m_perGate,
"Make plots per GM Start Gate",
true);
37 addParam(
"minTimeCutLER", m_minTimeCutLER,
"minimum time cut in us after LER kick", 20);
38 addParam(
"maxTimeCutLER", m_maxTimeCutLER,
"maximum time cut in us after LER kick", 4980);
39 addParam(
"minTimeCutHER", m_minTimeCutHER,
"minimum time cut in us after HER kick", 20);
40 addParam(
"maxTimeCutHER", m_maxTimeCutHER,
"maximum time cut in us after HER kick", 4980);
41 addParam(
"outsideTimeCut", m_outsideTimeCut,
"outside GM time cut in us after kick", 20000);
42 addParam(
"chargeCut", m_chargeCut,
"minimum pixel ADU charge cut", 5);
43 addParam(
"chargeCutHigh", m_chargeCutHigh,
"minimum pixel ADU charge cut for second set of histograms", 20);
46 void PXDGatedModeDQMModule::defineHisto()
48 TDirectory* oldDir = gDirectory;
49 oldDir->mkdir(m_histogramDirectoryName.c_str());
50 oldDir->cd(m_histogramDirectoryName.c_str());
52 hBunchInjHER =
new TH1F(
"hBunchInjHER",
"Last Inj Bunch HER;Counts;BunchNr/4", 1280, 0, 1280);
53 hBunchInjLER =
new TH1F(
"hBunchInjLER",
"Last Inj Bunch LER;Counts;BunchNr/4", 1280, 0, 1280);
54 hBunchTrg =
new TH1F(
"hBunchTrg",
"Triggered Bunch;Counts;BunchNr/4", 1280, 0, 1280);
57 std::vector<VxdID> sensors = m_vxdGeometry.getListOfSensors();
58 for (
VxdID& avxdid : sensors) {
60 if (info.getType() != VXD::SensorInfoBase::PXD)
continue;
63 TString buff = (std::string)avxdid;
64 TString bufful = buff;
65 bufful.ReplaceAll(
".",
"_");
67 for (
int rgate = m_perGate ? 0 : 96; rgate <= 96; rgate++) {
68 hGatedModeMapLER[std::make_pair(avxdid, rgate)] =
new TH2F(Form(
"PXDGatedModeMapLER_%d_", rgate) + bufful,
69 Form(
"PXDGatedModeMapLER %d ", rgate) + buff +
";U;V", 25, 0, 250, 192, 0, 768);
70 hGatedModeMapHER[std::make_pair(avxdid, rgate)] =
new TH2F(Form(
"PXDGatedModeMapHER_%d_", rgate) + bufful,
71 Form(
"PXDGatedModeMapHER %d ", rgate) + buff +
";U;V", 25, 0, 250, 192, 0, 768);
72 hGatedModeMapCutLER[std::make_pair(avxdid, rgate)] =
new TH2F(Form(
"PXDGatedModeMapCutLER_%d_", rgate) + bufful,
73 Form(
"PXDGatedModeMapCutLER %d ", rgate) + buff +
";U;V", 25, 0, 250, 192, 0, 768);
74 hGatedModeMapCutHER[std::make_pair(avxdid, rgate)] =
new TH2F(Form(
"PXDGatedModeMapCutHER_%d_", rgate) + bufful,
75 Form(
"PXDGatedModeMapCutHER %d ", rgate) + buff +
";U;V", 25, 0, 250, 192, 0, 768);
77 hGatedModeMapADCLER[std::make_pair(avxdid, rgate)] =
new TH2F(Form(
"PXDGatedModeMapADCLER_%d_", rgate) + bufful,
78 Form(
"PXDGatedModeMapADCLER %d ", rgate) + buff +
";U;V", 25, 0, 250, 192, 0, 768);
79 hGatedModeMapADCHER[std::make_pair(avxdid, rgate)] =
new TH2F(Form(
"PXDGatedModeMapADCHER_%d_", rgate) + bufful,
80 Form(
"PXDGatedModeMapADCHER %d ", rgate) + buff +
";U;V", 25, 0, 250, 192, 0, 768);
81 hGatedModeMapCutADCLER[std::make_pair(avxdid, rgate)] =
new TH2F(Form(
"PXDGatedModeMapCutADCLER_%d_", rgate) + bufful,
82 Form(
"PXDGatedModeMapCutADCLER %d ", rgate) + buff +
";U;V", 25, 0, 250, 192, 0, 768);
83 hGatedModeMapCutADCHER[std::make_pair(avxdid, rgate)] =
new TH2F(Form(
"PXDGatedModeMapCutADCHER_%d_", rgate) + bufful,
84 Form(
"PXDGatedModeMapCutADCHER %d ", rgate) + buff +
";U;V", 25, 0, 250, 192, 0, 768);
86 hGatedModeProjLER[avxdid] =
new TH2F(
"PXDGatedModeProjLER_" + bufful,
87 "PXDGatedModeProjLER " + buff +
";Gate;V", 96, 0, 96, 192, 0, 768);
88 hGatedModeProjHER[avxdid] =
new TH2F(
"PXDGatedModeProjHER_" + bufful,
89 "PXDGatedModeProjHER " + buff +
";Gate;V", 96, 0, 96, 192, 0, 768);
91 hGatedModeMapSubLER[avxdid] =
new TH2F(
"PXDGatedModeMapSubLER_" + bufful,
92 "PXDGatedModeMapSubLER " + buff +
";U;V-G", 25, 0, 250, 192, 0, 768);
93 hGatedModeMapSubHER[avxdid] =
new TH2F(
"PXDGatedModeMapSubHER_" + bufful,
94 "PXDGatedModeMapSubHER " + buff +
";U;V-G", 25, 0, 250, 192, 0, 768);
95 hGatedModeMapAddLER[avxdid] =
new TH2F(
"PXDGatedModeMapAddLER_" + bufful,
96 "PXDGatedModeMapAddLER " + buff +
";U;V+G", 25, 0, 250, 192, 0, 768);
97 hGatedModeMapAddHER[avxdid] =
new TH2F(
"PXDGatedModeMapAddHER_" + bufful,
98 "PXDGatedModeMapAddHER " + buff +
";U;V+G", 25, 0, 250, 192, 0, 768);
100 hGatedModeProjADCLER[avxdid] =
new TH2F(
"PXDGatedModeProjADCLER_" + bufful,
101 "PXDGatedModeProjADCLER " + buff +
";Gate;V", 96, 0, 96, 192, 0, 768);
102 hGatedModeProjADCHER[avxdid] =
new TH2F(
"PXDGatedModeProjADCHER_" + bufful,
103 "PXDGatedModeProjADCHER " + buff +
";Gate;V", 96, 0, 96, 192, 0, 768);
105 hGatedModeMapSubADCLER[avxdid] =
new TH2F(
"PXDGatedModeMapSubADCLER_" + bufful,
106 "PXDGatedModeMapSubADCLER " + buff +
";U;V-G", 25, 0, 250, 192, 0, 768);
107 hGatedModeMapSubADCHER[avxdid] =
new TH2F(
"PXDGatedModeMapSubADCHER_" + bufful,
108 "PXDGatedModeMapSubADCHER " + buff +
";U;V-G", 25, 0, 250, 192, 0, 768);
109 hGatedModeMapAddADCLER[avxdid] =
new TH2F(
"PXDGatedModeMapAddADCLER_" + bufful,
110 "PXDGatedModeMapAddADCLER " + buff +
";U;V+G", 25, 0, 250, 192, 0, 768);
111 hGatedModeMapAddADCHER[avxdid] =
new TH2F(
"PXDGatedModeMapAddADCHER_" + bufful,
112 "PXDGatedModeMapAddADCHER " + buff +
";U;V+G", 25, 0, 250, 192, 0, 768);
119 void PXDGatedModeDQMModule::initialize()
122 m_rawTTD.isOptional();
123 m_storeRawHits.isRequired(m_PXDRawHitsName);
126 void PXDGatedModeDQMModule::beginRun()
129 hBunchInjHER->Reset();
130 hBunchInjLER->Reset();
133 for (
auto& it : hGatedModeMapLER)
if (it.second) it.second->Reset();
134 for (
auto& it : hGatedModeMapHER)
if (it.second) it.second->Reset();
135 for (
auto& it : hGatedModeMapCutLER)
if (it.second) it.second->Reset();
136 for (
auto& it : hGatedModeMapCutHER)
if (it.second) it.second->Reset();
137 for (
auto& it : hGatedModeMapADCLER)
if (it.second) it.second->Reset();
138 for (
auto& it : hGatedModeMapADCHER)
if (it.second) it.second->Reset();
139 for (
auto& it : hGatedModeMapCutADCLER)
if (it.second) it.second->Reset();
140 for (
auto& it : hGatedModeMapCutADCHER)
if (it.second) it.second->Reset();
142 for (
auto& it : hGatedModeProjLER)
if (it.second) it.second->Reset();
143 for (
auto& it : hGatedModeProjHER)
if (it.second) it.second->Reset();
144 for (
auto& it : hGatedModeMapSubLER)
if (it.second) it.second->Reset();
145 for (
auto& it : hGatedModeMapSubHER)
if (it.second) it.second->Reset();
146 for (
auto& it : hGatedModeMapAddLER)
if (it.second) it.second->Reset();
147 for (
auto& it : hGatedModeMapAddHER)
if (it.second) it.second->Reset();
148 for (
auto& it : hGatedModeProjADCLER)
if (it.second) it.second->Reset();
149 for (
auto& it : hGatedModeProjADCHER)
if (it.second) it.second->Reset();
150 for (
auto& it : hGatedModeMapSubADCLER)
if (it.second) it.second->Reset();
151 for (
auto& it : hGatedModeMapSubADCHER)
if (it.second) it.second->Reset();
152 for (
auto& it : hGatedModeMapAddADCLER)
if (it.second) it.second->Reset();
153 for (
auto& it : hGatedModeMapAddADCHER)
if (it.second) it.second->Reset();
156 void PXDGatedModeDQMModule::event()
159 for (
auto& it : m_rawTTD) {
160 B2DEBUG(29,
"TTD FTSW : " << hex << it.GetTTUtime(0) <<
" " << it.GetTTCtime(0) <<
" EvtNr " << it.GetEveNo(0) <<
" Type " <<
161 (it.GetTTCtimeTRGType(0) & 0xF) <<
" TimeSincePrev " << it.GetTimeSincePrevTrigger(0) <<
" TimeSinceInj " <<
162 it.GetTimeSinceLastInjection(0) <<
" IsHER " << it.GetIsHER(0) <<
" Bunch " << it.GetBunchNumber(0));
165 auto difference = it.GetTimeSinceLastInjection(0);
167 if (difference != 0x7FFFFFFF) {
168 auto isher = it.GetIsHER(0);
169 float diff2 = difference / (508.877 / 4.);
170 int bunch_trg = it.GetBunchNumber(0);
171 int time_inj = it.GetTimeSinceLastInjection(0);
172 int bunch_inj = (bunch_trg - time_inj) % 1280;
173 if (bunch_inj < 0) bunch_inj += 1280;
174 int rgate = bunch_inj / (1280. / 96.);
175 if ((isher && diff2 >= m_minTimeCutHER && diff2 <= m_maxTimeCutHER) ||
176 (!isher && diff2 >= m_minTimeCutLER && diff2 <= m_maxTimeCutLER)
178 hBunchTrg->Fill(it.GetBunchNumber(0) & 0x7FF);
179 if (isher) hBunchInjHER->Fill(bunch_inj);
180 else hBunchInjLER->Fill(bunch_inj);
181 for (
auto& p : m_storeRawHits) {
182 auto charge = p.getCharge();
183 if (charge > m_chargeCut) {
184 int v = int(p.getVCellID()) - rgate * 4;
186 int v2 = int(p.getVCellID()) + rgate * 4;
187 if (v2 >= 768) v2 -= 768;
189 auto h = hGatedModeMapHER[std::make_pair(p.getSensorID(), rgate)];
191 h->Fill(p.getUCellID(), p.getVCellID());
193 auto h2 = hGatedModeProjHER[p.getSensorID()];
195 h2->Fill(rgate, p.getVCellID());
197 auto h3 = hGatedModeMapSubHER[p.getSensorID()];
199 h3->Fill(p.getUCellID(), v);
201 auto h4 = hGatedModeMapAddHER[p.getSensorID()];
203 h4->Fill(p.getUCellID(), v2);
205 auto h5 = hGatedModeMapADCHER[std::make_pair(p.getSensorID(), rgate)];
207 h5->Fill(p.getUCellID(), p.getVCellID(), p.getCharge());
209 auto h6 = hGatedModeProjADCHER[p.getSensorID()];
211 h6->Fill(rgate, p.getVCellID(), p.getCharge());
213 auto h7 = hGatedModeMapSubADCHER[p.getSensorID()];
215 h7->Fill(p.getUCellID(), v, p.getCharge());
217 auto h8 = hGatedModeMapAddADCHER[p.getSensorID()];
219 h8->Fill(p.getUCellID(), v2, p.getCharge());
222 auto h = hGatedModeMapLER[std::make_pair(p.getSensorID(), rgate)];
224 h->Fill(p.getUCellID(), p.getVCellID());
226 auto h2 = hGatedModeProjLER[p.getSensorID()];
228 h2->Fill(rgate, p.getVCellID());
230 auto h3 = hGatedModeMapSubLER[p.getSensorID()];
232 h3->Fill(p.getUCellID(), v);
234 auto h4 = hGatedModeMapAddLER[p.getSensorID()];
236 h4->Fill(p.getUCellID(), v2);
238 auto h5 = hGatedModeMapADCLER[std::make_pair(p.getSensorID(), rgate)];
240 h5->Fill(p.getUCellID(), p.getVCellID(), p.getCharge());
242 auto h6 = hGatedModeProjADCLER[p.getSensorID()];
244 h6->Fill(rgate, p.getVCellID(), p.getCharge());
246 auto h7 = hGatedModeMapSubADCLER[p.getSensorID()];
248 h7->Fill(p.getUCellID(), v, p.getCharge());
250 auto h8 = hGatedModeMapAddADCLER[p.getSensorID()];
252 h8->Fill(p.getUCellID(), v2, p.getCharge());
256 if (m_chargeCutHigh > 30) {
259 auto h = hGatedModeMapCutHER[std::make_pair(p.getSensorID(), rgate)];
261 h->Fill(p.getUCellID(), p.getVCellID());
263 auto h2 = hGatedModeMapCutADCHER[std::make_pair(p.getSensorID(), rgate)];
265 h2->Fill(p.getUCellID(), p.getVCellID(), p.getCharge());
268 auto h = hGatedModeMapCutLER[std::make_pair(p.getSensorID(), rgate)];
270 h->Fill(p.getUCellID(), p.getVCellID());
272 auto h2 = hGatedModeMapCutADCLER[std::make_pair(p.getSensorID(), rgate)];
274 h2->Fill(p.getUCellID(), p.getVCellID(), p.getCharge());
279 }
else if (diff2 > m_outsideTimeCut) {
281 for (
auto& p : m_storeRawHits) {
283 auto h = hGatedModeMapHER[std::make_pair(p.getSensorID(), rgate)];
285 h->Fill(p.getUCellID(), p.getVCellID());
287 auto h2 = hGatedModeMapADCHER[std::make_pair(p.getSensorID(), rgate)];
289 h2->Fill(p.getUCellID(), p.getVCellID(), p.getCharge());
292 auto h = hGatedModeMapLER[std::make_pair(p.getSensorID(), rgate)];
294 h->Fill(p.getUCellID(), p.getVCellID());
296 auto h2 = hGatedModeMapADCLER[std::make_pair(p.getSensorID(), rgate)];
298 h2->Fill(p.getUCellID(), p.getVCellID(), p.getCharge());