72 if (gTools->getNumberOfLayers() == 0) {
73 B2FATAL(
"Missing geometry for VXD, check steering file.");
75 if (gTools->getNumberOfPXDLayers() == 0) {
76 B2WARNING(
"Missing geometry for PXD, PXD-DQM is skipped.");
81 TDirectory* oldDir = gDirectory;
89 int nPXDChips = gTools->getTotalPXDChips();
92 m_hitMapCounts =
new TH1D(
"DQM_PXD_PixelHitmapCounts",
"PXD Integrated number of fired pixels per sensor",
93 nPXDSensors, 0, nPXDSensors);
97 m_hitMapFilterCounts =
new TH1D(
"DQM_PXD_PixelHitmapFilterCounts",
"PXD Integrated number of filtered pixels per sensor",
98 nPXDSensors, 0, nPXDSensors);
102 m_hitMapClCounts =
new TH1D(
"DQM_PXD_ClusterHitmapCounts",
"PXD Integrated number of clusters per sensor",
103 nPXDSensors, 0, nPXDSensors);
107 m_hitMapClFilterCounts =
new TH1D(
"DQM_PXD_ClusterHitmapFilterCounts",
"PXD Integrated number of filtered clusters per sensor",
108 nPXDSensors, 0, nPXDSensors);
113 m_hitMapCountsChip =
new TH1D(
"DQM_PXD_PixelHitmapCountsChip",
"PXD Integrated number of fired pixels per chip",
114 nPXDChips, 0, nPXDChips);
117 m_hitMapClCountsChip =
new TH1D(
"DQM_PXD_ClusterHitmapCountsChip",
"PXD Integrated number of clusters per chip",
118 nPXDChips, 0, nPXDChips);
121 for (
int i = 0; i < nPXDChips; i++) {
122 VxdID id = gTools->getChipIDFromPXDIndex(i);
124 int iLadder =
id.getLadderNumber();
125 int iSensor =
id.getSensorNumber();
126 int iChip = gTools->getPXDChipNumber(
id);
127 int IsU = gTools->isPXDSideU(
id);
128 TString AxisTicks = Form(
"%i_%i_%i_u%iDCD", iLayer, iLadder, iSensor, iChip);
130 AxisTicks = Form(
"%i_%i_%i_v%iSWB", iLayer, iLadder, iSensor, iChip);
135 for (
int i = 0; i < nPXDSensors; i++) {
136 VxdID id = gTools->getSensorIDFromPXDIndex(i);
138 int iLadder =
id.getLadderNumber();
139 int iSensor =
id.getSensorNumber();
140 TString AxisTicks = Form(
"%i_%i_%i", iLayer, iLadder, iSensor);
165 m_seed.resize(nPXDSensors);
166 for (
int i = 0; i < nPXDSensors; i++) {
167 VxdID id = gTools->getSensorIDFromPXDIndex(i);
169 int iLadder =
id.getLadderNumber();
170 int iSensor =
id.getSensorNumber();
171 VxdID sensorID(iLayer, iLadder, iSensor);
173 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
179 string name = str(format(
"DQM_PXD_%1%_Fired") % sensorDescr);
180 string title = str(format(
"PXD Sensor %1% Fired pixels") % sensorDescr);
181 m_fired[i] =
new TH1D(name.c_str(), title.c_str(), 50, 0, 50);
182 m_fired[i]->GetXaxis()->SetTitle(
"# of fired pixels");
183 m_fired[i]->GetYaxis()->SetTitle(
"counts");
187 name = str(format(
"DQM_PXD_%1%_GoodFired") % sensorDescr);
188 title = str(format(
"PXD Sensor %1% Good Fired pixels") % sensorDescr);
189 m_goodfired[i] =
new TH1D(name.c_str(), title.c_str(), 50, 0, 50);
190 m_goodfired[i]->GetXaxis()->SetTitle(
"# of fired pixels");
195 name = str(format(
"DQM_PXD_%1%_Clusters") % sensorDescr);
196 title = str(format(
"PXD Sensor %1% Number of clusters") % sensorDescr);
197 m_clusters[i] =
new TH1D(name.c_str(), title.c_str(), 20, 0, 20);
198 m_clusters[i]->GetXaxis()->SetTitle(
"# of clusters");
199 m_clusters[i]->GetYaxis()->SetTitle(
"counts");
203 name = str(format(
"DQM_PXD_%1%_GoodClusters") % sensorDescr);
204 title = str(format(
"PXD Sensor %1% Number of good clusters") % sensorDescr);
205 m_goodclusters[i] =
new TH1D(name.c_str(), title.c_str(), 20, 0, 20);
211 name = str(format(
"DQM_PXD_%1%_StartRow") % sensorDescr);
212 title = str(format(
"PXD Sensor %1% Start row distribution") % sensorDescr);
214 m_startRow[i] =
new TH1D(name.c_str(), title.c_str(), nVPixels / 4, 0.0, nVPixels);
215 m_startRow[i]->GetXaxis()->SetTitle(
"start row [pitch units]");
220 name = str(format(
"DQM_PXD_%1%_AverageSeedByStartRow") % sensorDescr);
221 title = str(format(
"PXD Sensor %1% Average seed charge by distance from the start row") % sensorDescr);
222 m_chargStartRow[i] =
new TH1D(name.c_str(), title.c_str(), nVPixels / 4, 0.0, nVPixels);
223 m_chargStartRow[i]->GetXaxis()->SetTitle(
"distance from the start row [pitch units]");
225 name = str(format(
"DQM_PXD_%1%_SeedCountsByStartRow") % sensorDescr);
226 title = str(format(
"PXD Sensor %1% Seed charge count by distance from the start row") % sensorDescr);
227 m_startRowCount[i] =
new TH1D(name.c_str(), title.c_str(), nVPixels / 4, 0.0, nVPixels);
228 m_startRowCount[i]->GetXaxis()->SetTitle(
"distance from the start row [pitch units]");
233 name = str(format(
"DQM_PXD_%1%_ClusterCharge") % sensorDescr);
234 title = str(format(
"PXD Sensor %1% Cluster Charge") % sensorDescr);
235 m_clusterCharge[i] =
new TH1D(name.c_str(), title.c_str(), 256, 0, 256);
241 name = str(format(
"DQM_PXD_%1%_ClusterEnergy") % sensorDescr);
242 title = str(format(
"PXD Sensor %1% Cluster Energy") % sensorDescr);
243 m_clusterEnergy[i] =
new TH1D(name.c_str(), title.c_str(), 100, 0, 50);
249 name = str(format(
"DQM_PXD_%1%_PixelSignal") % sensorDescr);
250 title = str(format(
"PXD Sensor %1% Pixel Signal") % sensorDescr);
251 m_pixelSignal[i] =
new TH1D(name.c_str(), title.c_str(), 256, 0, 256);
252 m_pixelSignal[i]->GetXaxis()->SetTitle(
"signal of pixels [ADU]");
257 name = str(format(
"DQM_PXD_%1%_ClusterSizeU") % sensorDescr);
258 title = str(format(
"PXD Sensor %1% Cluster Size U") % sensorDescr);
259 m_clusterSizeU[i] =
new TH1D(name.c_str(), title.c_str(), 10, 0, 10);
265 name = str(format(
"DQM_PXD_%1%_ClusterSizeV") % sensorDescr);
266 title = str(format(
"PXD Sensor %1% Cluster Size V") % sensorDescr);
267 m_clusterSizeV[i] =
new TH1D(name.c_str(), title.c_str(), 10, 0, 10);
273 name = str(format(
"DQM_PXD_%1%_ClusterSizeUV") % sensorDescr);
274 title = str(format(
"PXD Sensor %1% Cluster Size U+V") % sensorDescr);
283 name = str(format(
"PXD_%1%_PixelHitmapU") % sensorDescr);
284 title = str(format(
"PXD Sensor %1% Pixel Hitmap in U") % sensorDescr);
285 m_hitMapU[i] =
new TH1D(name.c_str(), title.c_str(), nUPixels, 0, nUPixels);
286 m_hitMapU[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
287 m_hitMapU[i]->GetYaxis()->SetTitle(
"hits");
289 name = str(format(
"PXD_%1%_PixelHitmapV") % sensorDescr);
290 title = str(format(
"PXD Sensor %1% Pixel Hitmap in V") % sensorDescr);
291 m_hitMapV[i] =
new TH1D(name.c_str(), title.c_str(), nVPixels, 0, nVPixels);
292 m_hitMapV[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
293 m_hitMapV[i]->GetYaxis()->SetTitle(
"hits");
295 name = str(format(
"PXD_%1%_PixelHitmap") % sensorDescr);
296 title = str(format(
"PXD Sensor %1% Pixel Hitmap") % sensorDescr);
297 m_hitMap[i] =
new TH2D(name.c_str(), title.c_str(), nUPixels, 0, nUPixels, nVPixels, 0, nVPixels);
298 m_hitMap[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
299 m_hitMap[i]->GetYaxis()->SetTitle(
"v position [pitch units]");
300 m_hitMap[i]->GetZaxis()->SetTitle(
"hits");
306 name = str(format(
"PXD_%1%_HitmapClstU") % sensorDescr);
307 title = str(format(
"PXD Sensor %1% Hitmap Clusters in U") % sensorDescr);
308 m_hitMapUCl[i] =
new TH1D(name.c_str(), title.c_str(), nUPixels, 0, nUPixels);
309 m_hitMapUCl[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
312 name = str(format(
"PXD_%1%_HitmapClstV") % sensorDescr);
313 title = str(format(
"PXD Sensor %1% Hitmap Clusters in V") % sensorDescr);
314 m_hitMapVCl[i] =
new TH1D(name.c_str(), title.c_str(), nVPixels, 0, nVPixels);
315 m_hitMapVCl[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
318 name = str(format(
"PXD_%1%_HitmapClst") % sensorDescr);
319 title = str(format(
"PXD Sensor %1% Hitmap Clusters") % sensorDescr);
320 m_hitMapCl[i] =
new TH2D(name.c_str(), title.c_str(), nUPixels, 0, nUPixels, nVPixels, 0, nVPixels);
321 m_hitMapCl[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
322 m_hitMapCl[i]->GetYaxis()->SetTitle(
"v position [pitch units]");
328 name = str(format(
"PXD_%1%_Seed") % sensorDescr);
329 title = str(format(
"PXD Sensor %1% Seed charge") % sensorDescr);
330 m_seed[i] =
new TH1D(name.c_str(), title.c_str(), 256, 0, 256);
331 m_seed[i]->GetXaxis()->SetTitle(
"seed charge of clusters [ADU]");
332 m_seed[i]->GetYaxis()->SetTitle(
"count");
402 if (gTools->getNumberOfPXDLayers() == 0)
return;
409 if (!storePXDDigits || !storePXDDigits.
getEntries())
return;
411 int firstPXDLayer = gTools->getFirstPXDLayer();
412 int lastPXDLayer = gTools->getLastPXDLayer();
413 int nPXDSensors = gTools->getNumberOfPXDSensors();
417 vector< int > Pixels(nPXDSensors);
418 vector< int > GoodPixels(nPXDSensors);
419 for (
const PXDDigit& digit : storePXDDigits) {
420 int iLayer = digit.getSensorID().getLayerNumber();
421 if ((iLayer < firstPXDLayer) || (iLayer > lastPXDLayer))
continue;
422 int iLadder = digit.getSensorID().getLadderNumber();
423 int iSensor = digit.getSensorID().getSensorNumber();
424 VxdID sensorID(iLayer, iLadder, iSensor);
425 int index = gTools->getPXDSensorIndex(sensorID);
429 int indexChip = gTools->getPXDChipIndex(sensorID, kTRUE, iChip);
432 indexChip = gTools->getPXDChipIndex(sensorID, kFALSE, iChip);
437 if (digit.getCharge() >=
m_CutMinCharge && digit.getCharge() < 255) {
442 if (
m_hitMap[index] !=
nullptr)
m_hitMap[index]->Fill(digit.getUCellID(), digit.getVCellID());
445 for (
int i = 0; i < nPXDSensors; i++) {
446 if (
m_fired[i] !=
nullptr && Pixels[i] > 0)
m_fired[i]->Fill(Pixels[i]);
451 vector< int > Clusters(nPXDSensors);
452 vector< int > GoodClusters(nPXDSensors);
453 for (
const PXDCluster& cluster : storePXDClusters) {
454 int iLayer = cluster.getSensorID().getLayerNumber();
455 if ((iLayer < firstPXDLayer) || (iLayer > lastPXDLayer))
continue;
456 int iLadder = cluster.getSensorID().getLadderNumber();
457 int iSensor = cluster.getSensorID().getSensorNumber();
458 VxdID sensorID(iLayer, iLadder, iSensor);
459 int index = gTools->getPXDSensorIndex(sensorID);
463 int indexChip = gTools->getPXDChipIndex(sensorID, kTRUE, iChip);
466 indexChip = gTools->getPXDChipIndex(sensorID, kFALSE, iChip);
480 if (
m_seed[index] !=
nullptr)
m_seed[index]->Fill(cluster.getSeedCharge());
485 GoodClusters[index]++;
497 for (
int i = 0; i < nPXDSensors; i++) {
504 std::map<VxdID, unsigned short> startRows;
505 for (
int index = 0; index < nPXDSensors; index++) {
506 VxdID id = gTools->getSensorIDFromPXDIndex(index);
509 if (dhe !=
nullptr) {
512 startRows.insert(std::make_pair(
id, startRow));
514 B2WARNING(
"No PXDDAQDHEStatus for VXD Sensor " <<
id <<
" found.");
519 for (
auto& cluster : storePXDClusters) {
520 VxdID sensorID = cluster.getSensorID();
521 int index = gTools->getPXDSensorIndex(sensorID);