11 #include <pxd/modules/pxdHelper/PXDEventPlotModule.h>
34 setDescription(
"Plot Events on PXD Hit/Charge Maps and write pictures");
35 setPropertyFlags(c_ParallelProcessingCertified);
36 addParam(
"PXDRawHitsName", m_storeRawHitsName,
"The name of the StoreArray of PXDRawHits to be processed",
string(
""));
37 addParam(
"GatedMode", m_gateModeFlag,
"Extra histograms for gated mode",
false);
40 void PXDEventPlotModule::initialize()
42 m_eventMetaData.isRequired();
43 m_storeRawHits.isRequired(m_storeRawHitsName);
44 m_rawTTD.isRequired();
45 std::vector<VxdID> sensors = m_vxdGeometry.getListOfSensors();
46 for (
VxdID& avxdid : sensors) {
48 if (info.getType() != VXD::SensorInfoBase::PXD)
continue;
50 m_histos[avxdid] =
new TH2F(
"Chargemap for " + TString((std::string)avxdid),
51 "PXD Module Chargemap for " + TString((std::string)avxdid) +
" ;VCell;UCell", 768, 0, 768, 250, 0, 256);
52 m_histos[avxdid]->SetContour(100);
54 m_histos_gm[avxdid] =
new TH2F(
"Chargemap for " + TString((std::string)avxdid),
55 "PXD Module Chargemap for GM " + TString((std::string)avxdid) +
" ;VCell-GM;UCell", 768, 0, 768, 250, 0, 256);
56 m_histos_gm[avxdid]->SetContour(100);
57 m_histos_gm2[avxdid] =
new TH2F(
"Chargemap for " + TString((std::string)avxdid),
58 "PXD Module Chargemap for GM2 " + TString((std::string)avxdid) +
" ;VCell+GM;UCell", 768, 0, 768, 250, 0, 256);
59 m_histos_gm2[avxdid]->SetContour(100);
62 m_c =
new TCanvas(
"c1",
"c1", 4000, 3000);
63 m_l1 =
new TLine(0, 62, 768, 62);
64 m_l2 =
new TLine(0, 125, 768, 125);
65 m_l3 =
new TLine(0, 187, 768, 187);
66 m_l1->SetLineColor(kMagenta);
67 m_l2->SetLineColor(kMagenta);
68 m_l3->SetLineColor(kMagenta);
71 void PXDEventPlotModule::event()
73 unsigned int evtNr = m_eventMetaData->getEvent();
74 unsigned int evtRun = m_eventMetaData->getRun();
76 for (
auto h : m_histos) {
77 if (h.second) h.second->Reset();
80 std::map <VxdID, bool> cm_map;
82 for (
auto& pkt : *m_storeDAQEvtStats) {
83 for (
auto& dhc : pkt) {
84 for (
auto& dhe : dhc) {
85 for (
auto cm = dhe.cm_begin(); cm < dhe.cm_end(); ++cm) {
87 if (std::get<2>(*cm) == 63) {
88 m_histos[dhe.getSensorID()]->Fill(std::get<1>(*cm), 252 + std::get<0>(*cm), std::get<2>(*cm));
90 cm_map[dhe.getSensorID()] =
true;
99 int tinj = -1, rgate = -1;
100 for (
auto& it : m_rawTTD) {
102 auto difference = it.GetTimeSinceLastInjection(0);
104 if (difference != 0x7FFFFFFF) {
106 float diff2 = difference / (508.877 / 4.);
107 int bunch_trg = it.GetBunchNumber(0);
108 int time_inj = it.GetTimeSinceLastInjection(0);
109 int bunch_inj = (bunch_trg - time_inj) % 1280;
110 if (bunch_inj < 0) bunch_inj += 1280;
111 rgate = bunch_inj / (1280. / 96.);
117 for (
auto& pix : m_storeRawHits) {
118 if (m_histos[pix.getSensorID()]) {
119 m_histos[pix.getSensorID()]->Fill(pix.getRow(), pix.getColumn(), pix.getCharge());
121 if (m_gateModeFlag) {
122 if (m_histos_gm[pix.getSensorID()]) {
123 int v = int(pix.getVCellID()) - rgate * 4;
125 m_histos_gm[pix.getSensorID()]->Fill(v, pix.getColumn(), pix.getCharge());
127 if (m_histos_gm2[pix.getSensorID()]) {
128 int v = int(pix.getVCellID()) + rgate * 4;
129 if (v >= 768) v -= 768;
130 m_histos_gm2[pix.getSensorID()]->Fill(v, pix.getColumn(), pix.getCharge());
136 canvasname = std::string(Form(
"Run_%d_Evt_%d", evtRun, evtNr));
138 gStyle->SetPalette(55);
139 gStyle->SetOptStat(0);
146 m_c->Pad()->SetFrameLineColor(kRed);
147 m_c->Pad()->SetFrameBorderSize(4);
148 m_c->Pad()->SetFrameBorderMode(4);
149 m_c->SetFrameLineColor(kRed);
150 m_c->SetFrameBorderSize(4);
151 m_c->SetFrameBorderMode(4);
155 for (
auto h : m_histos) {
158 string abc = string(h.first);
159 auto dhe = (*m_storeDAQEvtStats).findDHE(h.first);
162 auto tg = dhe->getTriggerGate();
163 auto fn = dhe->getFrameNr();
164 auto err = dhe->getEndErrorInfo();
166 abc += Form(
" ERR: $%X TG: %d FN: %d IN: %d GA: %d", err, tg, fn, tinj, rgate);
167 for (
auto itdhp = dhe->cbegin(); itdhp != dhe->cend(); ++itdhp) {
168 abc += Form(
"(%d) %d ", itdhp->getChipID(), itdhp->getFrameNr());
171 m_c->Pad()->SetFillColor(kYellow);
173 if (cm_map[h.first]) {
174 m_c->Pad()->SetFillColor(kRed);
175 m_c->Pad()->SetFrameFillColor(kWhite);
178 h.second->SetTitle(abc.data());
179 h.second->Draw(
"colz");
186 m_c->Print((canvasname +
".png").data());
187 m_c->Print((canvasname +
".pdf").data());
188 m_c->Print((canvasname +
".root").data());
190 if (m_gateModeFlag) {
195 m_c->Pad()->SetFrameLineColor(kRed);
196 m_c->Pad()->SetFrameBorderSize(4);
197 m_c->Pad()->SetFrameBorderMode(4);
198 m_c->SetFrameLineColor(kRed);
199 m_c->SetFrameBorderSize(4);
200 m_c->SetFrameBorderMode(4);
204 for (
auto h : m_histos_gm) {
207 string abc = string(h.first);
208 auto dhe = (*m_storeDAQEvtStats).findDHE(h.first);
211 auto tg = dhe->getTriggerGate();
212 auto fn = dhe->getFrameNr();
213 auto err = dhe->getEndErrorInfo();
215 abc += Form(
" ERR: $%X TG: %d FN: %d IN: %d GA: %d", err, tg, fn, tinj, rgate);
216 for (
auto itdhp = dhe->cbegin(); itdhp != dhe->cend(); ++itdhp) {
217 abc += Form(
"(%d) %d ", itdhp->getChipID(), itdhp->getFrameNr());
220 m_c->Pad()->SetFillColor(kYellow);
222 if (cm_map[h.first]) {
223 m_c->Pad()->SetFillColor(kRed);
224 m_c->Pad()->SetFrameFillColor(kWhite);
227 h.second->SetTitle(abc.data());
228 h.second->Draw(
"colz");
235 m_c->Print((canvasname +
"_gm.png").data());
236 m_c->Print((canvasname +
"_gm.pdf").data());
237 m_c->Print((canvasname +
"_gm.root").data());
239 if (m_gateModeFlag) {
244 m_c->Pad()->SetFrameLineColor(kRed);
245 m_c->Pad()->SetFrameBorderSize(4);
246 m_c->Pad()->SetFrameBorderMode(4);
247 m_c->SetFrameLineColor(kRed);
248 m_c->SetFrameBorderSize(4);
249 m_c->SetFrameBorderMode(4);
253 for (
auto h : m_histos_gm2) {
256 string abc = string(h.first);
257 auto dhe = (*m_storeDAQEvtStats).findDHE(h.first);
260 auto tg = dhe->getTriggerGate();
261 auto fn = dhe->getFrameNr();
262 auto err = dhe->getEndErrorInfo();
264 abc += Form(
" ERR: $%X TG: %d FN: %d IN: %d GA: %d", err, tg, fn, tinj, rgate);
265 for (
auto itdhp = dhe->cbegin(); itdhp != dhe->cend(); ++itdhp) {
266 abc += Form(
"(%d) %d ", itdhp->getChipID(), itdhp->getFrameNr());
269 m_c->Pad()->SetFillColor(kYellow);
271 if (cm_map[h.first]) {
272 m_c->Pad()->SetFillColor(kRed);
273 m_c->Pad()->SetFrameFillColor(kWhite);
276 h.second->SetTitle(abc.data());
277 h.second->Draw(
"colz");
284 m_c->Print((canvasname +
"_gm2.png").data());
285 m_c->Print((canvasname +
"_gm2.pdf").data());
286 m_c->Print((canvasname +
"_gm2.root").data());