9#include "svd/modules/svdDQM/SVDDQMExpressRecoModule.h"
11#include <hlt/softwaretrigger/core/FinalTriggerDecisionCalculator.h>
12#include <framework/datastore/StoreObjPtr.h>
13#include <framework/datastore/StoreArray.h>
14#include <framework/dataobjects/EventMetaData.h>
16#include <svd/dataobjects/SVDShaperDigit.h>
17#include <svd/dataobjects/SVDRecoDigit.h>
18#include <svd/dataobjects/SVDCluster.h>
20#include <vxd/geometry/SensorInfoBase.h>
21#include <vxd/geometry/GeoTools.h>
23#include <boost/format.hpp>
25#include "TDirectory.h"
30using namespace SoftwareTrigger;
49 std::string(
"SVDShaperDigitsZS5"));
51 std::string(
"SVDShaperDigits"));
53 std::string(
"SVDClusters"));
56 "if True, svd time back in SVD time reference.",
bool(
false));
58 "minimum charge (ADC) to fill the strip-hitmap histogram.",
float(0));
60 "minimum charge (in e-) to fill the cluster-hitmap histogram.",
float(0));
62 std::string(
"SVDExpReco"));
67 addParam(
"samples3",
m_3Samples,
"if True 3 samples histograms analysis is performed",
bool(
false));
73SVDDQMExpressRecoModule::~SVDDQMExpressRecoModule()
85 B2FATAL(
"no valid configuration found for SVD reconstruction");
87 B2DEBUG(20,
"SVDRecoConfiguration: from now on we are using " <<
m_svdPlotsConfig->get_uniqueID());
94 if (gTools->getNumberOfLayers() == 0) {
95 B2FATAL(
"Missing geometry for VXD, check steering file.");
97 if (gTools->getNumberOfSVDLayers() == 0) {
98 B2WARNING(
"Missing geometry for SVD, SVD-DQM is skipped.");
103 TDirectory* oldDir = gDirectory;
110 int nSVDSensors = gTools->getNumberOfSVDSensors();
111 int nSVDChips = gTools->getTotalSVDChips();
114 m_nEvents =
new TH1F(
"SVDDQM_nEvents",
"SVD Number of Events", 1, -0.5, 0.5);
115 m_nEvents->GetYaxis()->SetTitle(
"N events");
120 m_hitMapCountsU =
new TH1F(
"SVDDQM_StripCountsU",
"SVD Integrated Number of ZS5 Fired U-Strips per sensor",
121 nSVDSensors, 0, nSVDSensors);
125 m_hitMapCountsV =
new TH1F(
"SVDDQM_StripCountsV",
"SVD Integrated Number of ZS5 Fired V-Strips per sensor",
126 nSVDSensors, 0, nSVDSensors);
130 m_hitMapClCountsU =
new TH1F(
"SVDDQM_ClusterCountsU",
"SVD Integrated Number of U-Clusters per sensor",
131 nSVDSensors, 0, nSVDSensors);
135 m_hitMapClCountsV =
new TH1F(
"SVDDQM_ClusterCountsV",
"SVD Integrated Number of V-Clusters per sensor",
136 nSVDSensors, 0, nSVDSensors);
140 for (
int i = 0; i < nSVDSensors; i++) {
141 VxdID id = gTools->getSensorIDFromSVDIndex(i);
143 int iLadder =
id.getLadderNumber();
144 int iSensor =
id.getSensorNumber();
145 TString AxisTicks = Form(
"%i_%i_%i", iLayer, iLadder, iSensor);
153 m_hitMapCountsChip =
new TH1F(
"SVDDQM_StripCountsChip",
"SVD Integrated Number of ZS5 Fired Strips per chip",
154 nSVDChips, 0, nSVDChips);
158 m_hitMapClCountsChip =
new TH1F(
"SVDDQM_ClusterCountsChip",
"SVD Integrated Number of Clusters per chip",
159 nSVDChips, 0, nSVDChips);
204 float ChargeMax = 80;
208 float TimeMin = -150;
211 int GroupIdBins = 21;
212 float GroupIdMin = -1.5;
213 float GroupIdMax = 19.5;
218 TString refFrame =
"in FTSW reference";
220 refFrame =
"in SVD reference";
226 string name = str(format(
"SVDDQM_ClusterChargeUAll"));
227 string title = str(format(
"SVD U-Cluster Charge for all sensors"));
232 name = str(format(
"SVDDQM_ClusterChargeVAll"));
233 title = str(format(
"SVD V-Cluster Charge for all sensors"));
241 name = str(format(
"SVDDQM_ClusterChargeU3"));
242 title = str(format(
"SVD U-Cluster Charge for layer 3 sensors"));
243 m_clusterChargeU3 =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
247 name = str(format(
"SVDDQM_ClusterChargeV3"));
248 title = str(format(
"SVD V-Cluster Charge for layer 3 sensors"));
249 m_clusterChargeV3 =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
254 name = str(format(
"SVDDQM_ClusterChargeU456"));
255 title = str(format(
"SVD U-Cluster Charge for layers 4,5,6 sensors"));
261 name = str(format(
"SVDDQM_ClusterChargeV456"));
262 title = str(format(
"SVD V-Cluster Charge for layers 4,5,6 sensors"));
271 name = str(format(
"SVDDQM_ClusterSNRUAll"));
272 title = str(format(
"SVD U-Cluster SNR for all sensors"));
273 m_clusterSNRUAll =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
277 name = str(format(
"SVDDQM_ClusterSNRVAll"));
278 title = str(format(
"SVD V-Cluster SNR for all sensors"));
279 m_clusterSNRVAll =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
286 name = str(format(
"SVDDQM_ClusterSNRU3"));
287 title = str(format(
"SVD U-Cluster SNR for layer 3 sensors"));
288 m_clusterSNRU3 =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
292 name = str(format(
"SVDDQM_ClusterSNRV3"));
293 title = str(format(
"SVD V-Cluster SNR for layer 3 sensors"));
294 m_clusterSNRV3 =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
299 name = str(format(
"SVDDQM_ClusterSNRU456"));
300 title = str(format(
"SVD U-Cluster SNR for layers 4,5,6 sensors"));
301 m_clusterSNRU456 =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
305 name = str(format(
"SVDDQM_ClusterSNRV456"));
306 title = str(format(
"SVD V-Cluster SNR for layers 4,5,6 sensors"));
307 m_clusterSNRV456 =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
314 TString Name =
"SVDDQM_ClusterTimeUAll";
315 TString Title = Form(
"SVD U-Cluster Time %s for all sensors", refFrame.Data());
316 m_clusterTimeUAll =
new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
320 Name =
"SVDDQM_ClusterTimeVAll";
321 Title = Form(
"SVD V-Cluster Time %s for all sensors", refFrame.Data());
322 m_clusterTimeVAll =
new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
329 Name =
"SVDDQM_ClusterTimeU3";
330 Title = Form(
"SVD U-Cluster Time %s for layer 3 sensors", refFrame.Data());
331 m_clusterTimeU3 =
new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
335 name = str(format(
"SVDDQM_ClusterTimeV3"));
336 Title = Form(
"SVD V-Cluster Time %s for layer 3 sensors", refFrame.Data());
337 m_clusterTimeV3 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
342 name = str(format(
"SVDDQM_ClusterTimeU456"));
343 Title = Form(
"SVD U-Cluster Time %s for layers 4,5,6 sensors", refFrame.Data());
344 m_clusterTimeU456 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
348 name = str(format(
"SVDDQM_ClusterTimeV456"));
349 Title = Form(
"SVD V-Cluster Time %s for layers 4,5,6 sensors", refFrame.Data());
350 m_clusterTimeV456 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
359 Name =
"SVDDQM_Cluster3TimeU3";
360 Title = Form(
"SVD U-Cluster Time %s for layer 3 sensors for 3 samples", refFrame.Data());
365 name = str(format(
"SVDDQM_Cluster3TimeV3"));
366 Title = Form(
"SVD V-Cluster Time %s for layer 3 sensors for 3 samples", refFrame.Data());
371 name = str(format(
"SVDDQM_Cluster3TimeU456"));
372 Title = Form(
"SVD U-Cluster Time %s for layers 4,5,6 sensors for 3 samples", refFrame.Data());
377 name = str(format(
"SVDDQM_Cluster3TimeV456"));
378 Title = Form(
"SVD V-Cluster Time %s for layers 4,5,6 sensors for 3 samples", refFrame.Data());
387 Name =
"SVDDQM_Cluster6TimeU3";
388 Title = Form(
"SVD U-Cluster Time %s for layer 3 sensors for 6 samples", refFrame.Data());
393 name = str(format(
"SVDDQM_Cluster6TimeV3"));
394 Title = Form(
"SVD V-Cluster Time %s for layer 3 sensors for 6 samples", refFrame.Data());
400 name = str(format(
"SVDDQM_Cluster6TimeU456"));
401 Title = Form(
"SVD U-Cluster Time %s for layers 4,5,6 sensors for 6 samples", refFrame.Data());
406 name = str(format(
"SVDDQM_Cluster6TimeV456"));
407 Title = Form(
"SVD V-Cluster Time %s for layers 4,5,6 sensors for 6 samples", refFrame.Data());
417 Name =
"SVDDQM_ClusterTimeGroupIdU";
418 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for U/P Side", refFrame.Data());
419 m_clusterTimeGroupIdU =
new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
423 Name =
"SVDDQM_ClusterTimeGroupIdV";
424 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for V/N Side", refFrame.Data());
425 m_clusterTimeGroupIdV =
new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
433 Name =
"SVDDQM_cluster6TimeGroupIdU";
434 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for U/P Side for coarse trigger", refFrame.Data());
440 Name =
"SVDDQM_cluster6TimeGroupIdV";
441 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for V/N Side for coarse trigger", refFrame.Data());
448 Name =
"SVDDQM_cluster3TimeGroupIdU";
449 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for U/P Side for fine trigger", refFrame.Data());
455 Name =
"SVDDQM_cluster3TimeGroupIdV";
456 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for V/N Side for fine trigger", refFrame.Data());
466 name = str(format(
"SVDDQM_StripMaxBinUAll"));
467 title = str(format(
"SVD U-Strip MaxBin for all sensors"));
468 m_stripMaxBinUAll =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
472 name = str(format(
"SVDDQM_StripMaxBinVAll"));
473 title = str(format(
"SVD V-Strip MaxBin for all sensors"));
474 m_stripMaxBinVAll =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
479 name = str(format(
"SVDDQM_StripMaxBinU3"));
480 title = str(format(
"SVD U-Strip MaxBin for layer 3 sensors"));
481 m_stripMaxBinU3 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
485 name = str(format(
"SVDDQM_StripMaxBinV3"));
486 title = str(format(
"SVD V-Strip MaxBin for layer 3 sensors"));
487 m_stripMaxBinV3 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
492 name = str(format(
"SVDDQM_StripMaxBinU6"));
493 title = str(format(
"SVD U-Strip MaxBin for layer 6 sensors"));
494 m_stripMaxBinU6 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
498 name = str(format(
"SVDDQM_StripMaxBinV6"));
499 title = str(format(
"SVD V-Strip MaxBin for layer 6 sensors"));
500 m_stripMaxBinV6 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
505 for (
int i = 0; i < nSVDSensors; i++) {
506 VxdID id = gTools->getSensorIDFromSVDIndex(i);
508 int iLadder =
id.getLadderNumber();
509 int iSensor =
id.getSensorNumber();
510 VxdID sensorID(iLayer, iLadder, iSensor);
512 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
518 name = str(format(
"SVDDQM_%1%_FiredU") % sensorDescr);
519 title = str(format(
"SVD Sensor %1% Number of Fired U-Strips") % sensorDescr);
520 m_firedU[i] =
new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
521 m_firedU[i]->GetXaxis()->SetTitle(
"# fired strips");
522 m_firedU[i]->GetYaxis()->SetTitle(
"count");
524 name = str(format(
"SVDDQM_%1%_FiredV") % sensorDescr);
525 title = str(format(
"SVD Sensor %1% Number of Fired V-Strips") % sensorDescr);
526 m_firedV[i] =
new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
527 m_firedV[i]->GetXaxis()->SetTitle(
"# fired strips");
528 m_firedV[i]->GetYaxis()->SetTitle(
"count");
533 name = str(format(
"SVDDQM_%1%_ClustersU") % sensorDescr);
534 title = str(format(
"SVD Sensor %1% Number of U-Clusters") % sensorDescr);
535 m_clustersU[i] =
new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
536 m_clustersU[i]->GetXaxis()->SetTitle(
"# clusters");
539 name = str(format(
"SVDDQM_%1%_ClustersV") % sensorDescr);
540 title = str(format(
"SVD Sensor %1% Number of V-Clusters") % sensorDescr);
541 m_clustersV[i] =
new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
542 m_clustersV[i]->GetXaxis()->SetTitle(
"# clusters");
548 name = str(format(
"SVDDQM_%1%_ADCStripU") % sensorDescr);
549 title = str(format(
"SVD Sensor %1% U-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
550 m_stripSignalU[i] =
new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
554 name = str(format(
"SVDDQM_%1%_ADCStripV") % sensorDescr);
555 title = str(format(
"SVD Sensor %1% V-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
556 m_stripSignalV[i] =
new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
565 name = str(format(
"SVDDQM_%1%_ClusterChargeU") % sensorDescr);
566 title = str(format(
"SVD Sensor %1% U-Cluster Charge") % sensorDescr);
567 m_clusterChargeU[i] =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
571 name = str(format(
"SVDDQM_%1%_ClusterChargeV") % sensorDescr);
572 title = str(format(
"SVD Sensor %1% V-Cluster Charge") % sensorDescr);
573 m_clusterChargeV[i] =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
580 name = str(format(
"SVDDQM_%1%_ClusterSNRU") % sensorDescr);
581 title = str(format(
"SVD Sensor %1% U-Cluster SNR") % sensorDescr);
582 m_clusterSNRU[i] =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
586 name = str(format(
"SVDDQM_%1%_ClusterSNRV") % sensorDescr);
587 title = str(format(
"SVD Sensor %1% V-Cluster SNR") % sensorDescr);
588 m_clusterSNRV[i] =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
596 name = str(format(
"SVDDQM_%1%_StripCountU") % sensorDescr);
597 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number") % sensorDescr);
598 m_stripCountU[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
602 name = str(format(
"SVDDQM_%1%_StripCountV") % sensorDescr);
603 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number") % sensorDescr);
604 m_stripCountV[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
611 name = str(format(
"SVDDQM_%1%_OnlineZSStripCountU") % sensorDescr);
612 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number") % sensorDescr);
617 name = str(format(
"SVDDQM_%1%_OnlineZSStripCountV") % sensorDescr);
618 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number") % sensorDescr);
628 name = str(format(
"SVDDQM_%1%_Strip3CountU") % sensorDescr);
629 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
634 name = str(format(
"SVDDQM_%1%_Strip3CountV") % sensorDescr);
635 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
644 name = str(format(
"SVDDQM_%1%_OnlineZSStrip3CountU") % sensorDescr);
645 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
650 name = str(format(
"SVDDQM_%1%_OnlineZSStrip3CountV") % sensorDescr);
651 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
660 name = str(format(
"SVDDQM_%1%_Strip6CountU") % sensorDescr);
661 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
666 name = str(format(
"SVDDQM_%1%_strip6CountV") % sensorDescr);
667 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
675 name = str(format(
"SVDDQM_%1%_OnlineZSStrip6CountU") % sensorDescr);
676 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
681 name = str(format(
"SVDDQM_%1%_OnlineZSStrip6CountV") % sensorDescr);
682 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
692 name = str(format(
"SVDDQM_%1%_StripCountGroupId0U") % sensorDescr);
693 title = str(format(
"SVD Sensor %1% Integrated NumberFired U-Strip for group Id = 0 vs Strip Number") % sensorDescr);
698 name = str(format(
"SVDDQM_%1%_StripCountGroupId0V") % sensorDescr);
699 title = str(format(
"SVD Sensor %1% Integrated Number of Fired V-Strip for group Id = 0 vs Strip Number") % sensorDescr);
708 name = str(format(
"SVDDQM_%1%_ClusterSizeU") % sensorDescr);
709 title = str(format(
"SVD Sensor %1% U-Cluster Size") % sensorDescr);
710 m_clusterSizeU[i] =
new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
714 name = str(format(
"SVDDQM_%1%_ClusterSizeV") % sensorDescr);
715 title = str(format(
"SVD Sensor %1% V-Cluster Size") % sensorDescr);
716 m_clusterSizeV[i] =
new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
723 name = str(format(
"SVDDQM_%1%_ClusterTimeU") % sensorDescr);
724 Title = Form(
"SVD Sensor %s U-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
725 m_clusterTimeU[i] =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
729 name = str(format(
"SVDDQM_%1%_ClusterTimeV") % sensorDescr);
730 Title = Form(
"SVD Sensor %s V-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
731 m_clusterTimeV[i] =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
737 for (
int i = 0; i < nSVDChips; i++) {
738 VxdID id = gTools->getChipIDFromSVDIndex(i);
740 int iLadder =
id.getLadderNumber();
741 int iSensor =
id.getSensorNumber();
742 int iChip = gTools->getSVDChipNumber(
id);
743 int IsU = gTools->isSVDSideU(
id);
744 TString AxisTicks = Form(
"%i_%i_%i_u%i", iLayer, iLadder, iSensor, iChip);
746 AxisTicks = Form(
"%i_%i_%i_v%i", iLayer, iLadder, iSensor, iChip);
758 TDirectory* dirShowAll =
nullptr;
759 dirShowAll = oldDir->mkdir(
"SVDDQMAll");
766 for (
int i = 0; i < nSVDSensors; i++) {
767 VxdID id = gTools->getSensorIDFromSVDIndex(i);
769 int iLadder =
id.getLadderNumber();
770 int iSensor =
id.getSensorNumber();
771 VxdID sensorID(iLayer, iLadder, iSensor);
773 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
777 name = str(format(
"SVD_%1%_StripHitmapU") % sensorDescr);
778 title = str(format(
"SVD Sensor %1% Strip Hitmap in U") % sensorDescr);
782 m_hitMapU[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
783 m_hitMapU[i]->GetYaxis()->SetTitle(
"timebin [time units]");
784 m_hitMapU[i]->GetZaxis()->SetTitle(
"hits");
786 name = str(format(
"SVD_%1%_StripHitmapV") % sensorDescr);
787 title = str(format(
"SVD Sensor %1% Strip Hitmap in V") % sensorDescr);
791 m_hitMapV[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
792 m_hitMapV[i]->GetYaxis()->SetTitle(
"timebin [time units]");
793 m_hitMapV[i]->GetZaxis()->SetTitle(
"hits");
798 name = str(format(
"SVD_%1%_HitmapClstU") % sensorDescr);
799 title = str(format(
"SVD Sensor %1% Hitmap Clusters in U") % sensorDescr);
801 m_hitMapUCl[i] =
new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
802 m_hitMapUCl[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
805 name = str(format(
"SVD_%1%_HitmapClstV") % sensorDescr);
806 title = str(format(
"SVD Sensor %1% Hitmap Clusters in V") % sensorDescr);
808 m_hitMapVCl[i] =
new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
809 m_hitMapVCl[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
825 if (gTools->getNumberOfSVDLayers() != 0) {
846 if (gTools->getNumberOfSVDLayers() == 0)
return;
857 while ((obj = nextH()))
858 if (obj->InheritsFrom(
"TH1")) {
860 TString tmp = (TString)obj->GetTitle();
861 Int_t pos = tmp.Last(
'~');
862 if (pos == -1) pos = tmp.Length() + 2;
864 TString title = tmp(0, pos - 2);
865 ((TH1F*)obj)->SetTitle(title + runID);
866 ((TH1F*)obj)->Reset();
875 if (!eventAccepted)
return;
886 if (gTools->getNumberOfSVDLayers() == 0)
return;
897 int firstSVDLayer = gTools->getFirstSVDLayer();
898 int lastSVDLayer = gTools->getLastSVDLayer();
899 int nSVDSensors = gTools->getNumberOfSVDSensors();
902 vector< set<int> > uStrips(nSVDSensors);
903 vector< set<int> > vStrips(nSVDSensors);
905 int iLayer = digitIn.getSensorID().getLayerNumber();
906 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
907 int iLadder = digitIn.getSensorID().getLadderNumber();
908 int iSensor = digitIn.getSensorID().getSensorNumber();
909 VxdID sensorID(iLayer, iLadder, iSensor);
910 int index = gTools->getSVDSensorIndex(sensorID);
912 if (digitIn.isUStrip()) {
931 uStrips.at(index).insert(digitIn.getCellID());
932 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
933 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE, Chip);
971 vStrips.at(index).insert(digitIn.getCellID());
972 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
973 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE, Chip);
994 for (
int i = 0; i < nSVDSensors; i++) {
995 if ((
m_firedU[i] !=
nullptr) && (uStrips[i].size() > 0))
996 m_firedU[i]->Fill(uStrips[i].size());
997 if ((
m_firedV[i] !=
nullptr) && (vStrips[i].size() > 0))
998 m_firedV[i]->Fill(vStrips[i].size());
1003 if (storeNoZSSVDShaperDigits.
isValid())
1005 int iLayer = digitIn.getSensorID().getLayerNumber();
1006 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
1007 int iLadder = digitIn.getSensorID().getLadderNumber();
1008 int iSensor = digitIn.getSensorID().getSensorNumber();
1009 VxdID sensorID(iLayer, iLadder, iSensor);
1010 int index = gTools->getSVDSensorIndex(sensorID);
1012 if (digitIn.isUStrip()) {
1015 if (nSamples == 3) {
1024 if (nSamples == 3) {
1033 vector< set<int> > countsU(nSVDSensors);
1034 vector< set<int> > countsV(nSVDSensors);
1036 for (
const SVDCluster& cluster : storeSVDClusters) {
1038 int iLayer = cluster.getSensorID().getLayerNumber();
1039 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
1040 int iLadder = cluster.getSensorID().getLadderNumber();
1041 int iSensor = cluster.getSensorID().getSensorNumber();
1042 VxdID sensorID(iLayer, iLadder, iSensor);
1043 int index = gTools->getSVDSensorIndex(sensorID);
1046 float time = cluster.getClsTime();
1048 time = time -
m_svdEventInfo->getSVD2FTSWTimeShift(cluster.getFirstFrame());
1050 vector<int> vec = cluster.getTimeGroupId();
1051 auto minElement = min_element(vec.begin(), vec.end());
1053 if (vec.size() > 0) {
1054 groupId = *minElement;
1056 if (cluster.isUCluster()) {
1060 if (trgQuality == 1)
1062 if (trgQuality == 2)
1070 if (trgQuality == 1)
1072 if (trgQuality == 2)
1078 if (cluster.isUCluster()) {
1079 countsU.at(index).insert(SensorInfo.
getUCellID(cluster.getPosition()));
1080 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE,
1081 (
int)(SensorInfo.
getUCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1096 if (nSamples == 3) {
1107 if (nSamples == 3) {
1125 countsV.at(index).insert(SensorInfo.
getVCellID(cluster.getPosition()));
1126 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE,
1127 (
int)(SensorInfo.
getVCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1142 if (nSamples == 3) {
1153 if (nSamples == 3) {
1172 for (
int i = 0; i < nSVDSensors; i++) {
1173 if ((
m_clustersU[i] !=
nullptr) && (countsU[i].size() > 0))
1175 if ((
m_clustersV[i] !=
nullptr) && (countsV[i].size() > 0))
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
void setDescription(const std::string &description)
Sets the description of the module.
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
The SVD Cluster class This class stores all information about reconstructed SVD clusters.
TH1F ** m_hitMapUCl
Hitmaps clusters for u.
TH1F ** m_clustersV
number of v clusters per event
TH1F * m_nEvents
number of events
TH1F * m_clusterSNRVAll
v SNR of clusters for all sensors
TH1F ** m_strip3SampleCountV
v strip count for 3 samples
TH1F * m_clusterTimeV456
v Time of clusters for layer 4,5,6 sensors
bool m_useParamFromDB
if true read back from DB configuration parameters
TH1F * m_clusterSNRUAll
u SNR of clusters for all sensors
TH1F * m_clusterChargeU3
u charge of clusters for layer 3 sensors
void initialize() override final
Module function initialize.
TH2F * m_clusterTimeGroupIdV
time group id for V side
TH1F * m_clusterSNRV3
v SNR of clusters for layer 3 sensors
TH1F * m_hitMapCountsV
Hitmaps v of Digits.
TH2F ** m_hitMapU
Hitmaps pixels for u.
TH1F ** m_onlineZSstrip6sampleCountU
u strip count (online Zero Suppression) for 6 samples
int m_runNumber
run number
std::string m_storeNoZSSVDShaperDigitsName
not zero-suppressed SVDShaperDigits StoreArray name
bool m_skipRejectedEvents
if true skip events rejected by HLT
TH1F * m_stripMaxBinU6
u MaxBin of strips for layer 6 sensors (offline Zero Suppression)
TH1F * m_clusterTimeUAll
u time of clusters for all sensors
TH1F ** m_onlineZSstrip3SampleCountV
v strip count (online Zero Suppression for 3 samples
TH1F * m_hitMapClCountsU
Hitmaps u of Clusters.
TH2F * m_clusterTimeFineGroupIdV
time group id for V side for fine trigger
float m_CutSVDCharge
cut for accepting strips to hitmap histogram default = 0 ADU
TH1F * m_cluster6SampleTimeU3
u Time of clusters for layer 3 sensors for 6 samples
StoreObjPtr< SVDEventInfo > m_svdEventInfo
SVDEventInfo data object.
TH1F ** m_clusterSizeV
v size
TH1F * m_hitMapCountsU
Hitmaps u of Digits.
TH1F ** m_clusterSNRV
v SNR of clusters per sensor
TH1F ** m_clusterChargeV
v charge of clusters
TH1F * m_cluster3SampleTimeU3
u Time of clusters for layer 3 sensors for 3 samples
TH1F ** m_stripSignalU
u charge of strips
TH1F * m_clusterChargeUAll
u charge of clusters for all sensors
int m_expNumber
experiment number
TH1F * m_cluster3SampleTimeU456
u Time of clusters for layer 4,5,6 sensors for 3 samples
TH1F * m_clusterChargeU456
u charge of clusters for layer 4,5,6 sensors
void defineHisto() override final
Histogram definitions such as TH1(), TH2(), TNtuple(), TTree()....
TH1F * m_cluster3SampleTimeV456
v Time of clusters for layer 4,5,6 sensors for 3 samples
TH1F * m_clusterTimeV3
v Time of clusters for layer 3 sensors
TH1F ** m_stripCountU
u strip count
DBObjPtr< SVDDQMPlotsConfiguration > m_svdPlotsConfig
SVD DQM plots configuration.
TH1F ** m_clusterSNRU
u SNR of clusters per sensor
TH1F ** m_hitMapVCl
Hitmaps clusters for v.
TH1F ** m_strip3SampleCountU
u strip count for 3 samples
void terminate() override final
Module function terminate.
TH1F * m_stripMaxBinV3
v MaxBin of strips for layer 3 sensors (offline Zero Suppression)
TH1F * m_clusterTimeVAll
v time of clusters for all sensors
TH2F * m_clusterTimeCoarseGroupIdU
time group id for U side for coarse trigger
void event() override final
Module function event.
TH1F ** m_onlineZSstripCountV
v strip count (online Zero Suppression
TH1F ** m_stripSignalV
v charge of strips
StoreObjPtr< TRGSummary > m_objTrgSummary
Trigger Summary data object.
std::string m_storeSVDShaperDigitsName
SVDShaperDigits StoreArray name.
TH1F ** m_stripCountV
v strip count
std::string m_histogramDirectoryName
Name of the histogram directory in ROOT file.
TH1F * m_clusterChargeVAll
v charge of clusters for all sensors
TH1F ** m_clusterTimeV
v time
TH1F * m_clusterSNRU3
u SNR of clusters for layer 3 sensors
TH1F * m_clusterSNRV456
v SNR of clusters for layer 4,5,6 sensors
TH1F * m_stripMaxBinUAll
u MaxBin of strips for all sensors (offline Zero Suppression)
bool m_3Samples
if true enable 3 samples histograms analysis
TList * m_histoList
list of cumulative histograms
TH1F ** m_clusterChargeU
u charge of clusters
TH1F * m_hitMapCountsChip
Hitmaps of digits on chips.
TH1F * m_cluster3SampleTimeV3
v Time of clusters for layer 3 sensors for 3 samples
TH1F * m_clusterChargeV3
v charge of clusters for layer 3 sensors
TH2F ** m_hitMapV
Hitmaps pixels for v.
TH1F * m_stripMaxBinV6
v MaxBin of strips for layer 6 sensors (offline Zero Suppression)
TH1F ** m_stripCountGroupId0V
V strip count for cluster time group Id = 0.
TH1F ** m_strip6SampleCountV
v strip count for 3 samples
TH1F * m_cluster6SampleTimeV456
v Time of clusters for layer 4,5,6 sensors for 6 samples
TH1F ** m_firedU
Fired u strips per event.
TH1F * m_clusterTimeU3
u Time of clusters for layer 3 sensors
TH1F * m_cluster6SampleTimeV3
v Time of clusters for layer 3 sensors for 6 samples
TH1F * m_clusterSNRU456
u SNR of clusters for layer 4,5,6 sensors
void beginRun() override final
Module function beginRun.
TH1F ** m_onlineZSstripCountU
u strip count (online Zero Suppression)
int m_ShowAllHistos
Flag to show all histos in DQM, default = 0 (do not show)
bool m_additionalPlots
additional plots flag
TH1F * m_stripMaxBinU3
u MaxBin of strips for layer 3 sensors (offline Zero Suppression)
bool m_desynchSVDTime
if TRUE: svdTime back in SVD time reference
SVDDQMExpressRecoModule()
Constructor.
TH1F * m_stripMaxBinVAll
v MaxBin of strips for all sensors (offline Zero Suppression)
TH1F * m_hitMapClCountsChip
Hitmaps of clusters on chips.
TH1F ** m_strip6SampleCountU
u strip count for 6 samples
TH1F ** m_onlineZSstrip3SampleCountU
u strip count (online Zero Suppression) for 3 samples
TH1F ** m_onlineZSstrip6sampleCountV
v strip count (online Zero Suppression for 6 samples
StoreObjPtr< SoftwareTriggerResult > m_resultStoreObjectPointer
Store Object for reading the trigger decision.
float m_CutSVDClusterCharge
cut for accepting clusters to hitmap histogram, default = 0 ke-
TH2F * m_clusterTimeGroupIdU
time group id for U side
TH1F ** m_clusterTimeU
u time
std::string m_storeSVDClustersName
SVDClusters StoreArray name.
TH1F * m_clusterTimeU456
u Time of clusters for layer 4,5,6 sensors
TH1F ** m_clusterSizeU
u size
TH2F * m_clusterTimeCoarseGroupIdV
time group id for V side for coarse trigger
TH1F ** m_firedV
Fired v strips per event.
TH1F * m_clusterChargeV456
v charge of clusters for layer 4,5,6 sensors
TH1F ** m_stripCountGroupId0U
U strip count for cluster time group Id = 0.
TH1F * m_hitMapClCountsV
Hitmaps v of Clusters.
TH1F ** m_clustersU
number of u clusters per event
TH2F * m_clusterTimeFineGroupIdU
time group id for U side for fine trigger
TH1F * m_cluster6SampleTimeU456
u Time of clusters for layer 4,5,6 sensors for 6 samples
The SVD ShaperDigit class.
static const std::size_t c_nAPVSamples
Number of APV samples stored.
std::array< APVFloatSampleType, c_nAPVSamples > APVFloatSamples
array of APVFloatSampleType objects
Specific implementation of SensorInfo for SVD Sensors which provides additional sensor specific infor...
static bool getFinalTriggerDecision(const SoftwareTriggerResult &result, bool forgetTotalResult=false)
Calculate the final cut decision using all "total_results" of all sub triggers in the software trigge...
const std::string & getName() const
Return name under which the object is saved in the DataStore.
bool isOptional(const std::string &name="")
Tell the DataStore about an optional input.
Accessor to arrays stored in the data store.
bool isValid() const
Check wether the array was registered.
int getEntries() const
Get the number of objects in the array.
Type-safe access to single objects in the data store.
const SensorInfoBase & getSensorInfo(Belle2::VxdID id) const
Return a referecne to the SensorInfo of a given SensorID.
static GeoCache & getInstance()
Return a reference to the singleton instance.
const GeoTools * getGeoTools()
Return a raw pointer to a GeoTools object.
int getVCells() const
Return number of pixel/strips in v direction.
int getUCells() const
Return number of pixel/strips in u direction.
int getVCellID(double v, bool clamp=false) const
Return the corresponding pixel/strip ID of a given v coordinate.
int getUCellID(double u, double v=0, bool clamp=false) const
Return the corresponding pixel/strip ID of a given u coordinate.
Class to uniquely identify a any structure of the PXD and SVD.
baseType getLayerNumber() const
Get the layer id.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.