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());
418 name = str(format(
"SVDDQM_ClusterChargeGroupIDsL3U"));
419 title = str(format(
"SVD U-Cluster Charge for layer 3 sensors for group Id = 0, 1, 2 & 3"));
424 name = str(format(
"SVDDQM_ClusterChargeGroupIDsL3V"));
425 title = str(format(
"SVD V-Cluster Charge for layer 3 sensors for group Id = 0, 1, 2 & 3"));
431 name = str(format(
"SVDDQM_ClusterChargeGroupIDsL456U"));
432 title = str(format(
"SVD U-Cluster Charge for layers 4,5,6 sensors for group Id = 0, 1, 2 & 3"));
438 name = str(format(
"SVDDQM_ClusterChargeGroupIDsL456V"));
439 title = str(format(
"SVD V-Cluster Charge for layers 4,5,6 sensors for group Id = 0, 1, 2 & 3"));
448 name = str(format(
"SVDDQM_ClusterSNRGroupIDsL3U"));
449 title = str(format(
"SVD U-Cluster SNR for layer 3 sensors for group Id = 0, 1, 2 & 3"));
454 name = str(format(
"SVDDQM_ClusterSNRGroupIDsL3V"));
455 title = str(format(
"SVD V-Cluster SNR for layer 3 sensors for group Id = 0, 1, 2 & 3"));
461 name = str(format(
"SVDDQM_ClusterSNRGroupIDsL456U"));
462 title = str(format(
"SVD U-Cluster SNR for layers 4,5,6 sensors for group Id = 0, 1, 2 & 3"));
467 name = str(format(
"SVDDQM_ClusterSNRGroupIDsL456V"));
468 title = str(format(
"SVD V-Cluster SNR for layers 4,5,6 sensors for group Id = 0, 1, 2 & 3"));
478 Name =
"SVDDQM_ClusterTimeGroupIDsL3U";
479 Title = Form(
"SVD U-Cluster Time %s for layer 3 sensors for group Id = 0, 1, 2 & 3", refFrame.Data());
484 name = str(format(
"SVDDQM_ClusterTimeGroupIDsL3V"));
485 Title = Form(
"SVD V-Cluster Time %s for layer 3 sensors for group Id = 0, 1, 2 & 3", refFrame.Data());
491 name = str(format(
"SVDDQM_ClusterTimeGroupIDsL456U"));
492 Title = Form(
"SVD U-Cluster Time %s for layers 4,5,6 sensors for group Id = 0, 1, 2 & 3", refFrame.Data());
497 name = str(format(
"SVDDQM_ClusterTimeGroupIDsL456V"));
498 Title = Form(
"SVD V-Cluster Time %s for layers 4,5,6 sensors for group Id = 0, 1, 2 & 3", refFrame.Data());
507 Name =
"SVDDQM_ClusterTimeGroupIdU";
508 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for U/P Side", refFrame.Data());
509 m_clusterTimeGroupIdU =
new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
513 Name =
"SVDDQM_ClusterTimeGroupIdV";
514 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for V/N Side", refFrame.Data());
515 m_clusterTimeGroupIdV =
new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
523 Name =
"SVDDQM_cluster6TimeGroupIdU";
524 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for U/P Side for coarse trigger", refFrame.Data());
530 Name =
"SVDDQM_cluster6TimeGroupIdV";
531 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for V/N Side for coarse trigger", refFrame.Data());
538 Name =
"SVDDQM_cluster3TimeGroupIdU";
539 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for U/P Side for fine trigger", refFrame.Data());
545 Name =
"SVDDQM_cluster3TimeGroupIdV";
546 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for V/N Side for fine trigger", refFrame.Data());
556 name = str(format(
"SVDDQM_StripMaxBinUAll"));
557 title = str(format(
"SVD U-Strip MaxBin for all sensors"));
558 m_stripMaxBinUAll =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
562 name = str(format(
"SVDDQM_StripMaxBinVAll"));
563 title = str(format(
"SVD V-Strip MaxBin for all sensors"));
564 m_stripMaxBinVAll =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
569 name = str(format(
"SVDDQM_StripMaxBinU3"));
570 title = str(format(
"SVD U-Strip MaxBin for layer 3 sensors"));
571 m_stripMaxBinU3 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
575 name = str(format(
"SVDDQM_StripMaxBinV3"));
576 title = str(format(
"SVD V-Strip MaxBin for layer 3 sensors"));
577 m_stripMaxBinV3 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
582 name = str(format(
"SVDDQM_StripMaxBinU6"));
583 title = str(format(
"SVD U-Strip MaxBin for layer 6 sensors"));
584 m_stripMaxBinU6 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
588 name = str(format(
"SVDDQM_StripMaxBinV6"));
589 title = str(format(
"SVD V-Strip MaxBin for layer 6 sensors"));
590 m_stripMaxBinV6 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
596 for (
int i = 0; i < nSVDSensors; i++) {
597 VxdID id = gTools->getSensorIDFromSVDIndex(i);
599 int iLadder =
id.getLadderNumber();
600 int iSensor =
id.getSensorNumber();
601 VxdID sensorID(iLayer, iLadder, iSensor);
603 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
609 name = str(format(
"SVDDQM_%1%_FiredU") % sensorDescr);
610 title = str(format(
"SVD Sensor %1% Number of Fired U-Strips") % sensorDescr);
611 m_firedU[i] =
new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
612 m_firedU[i]->GetXaxis()->SetTitle(
"# fired strips");
613 m_firedU[i]->GetYaxis()->SetTitle(
"count");
615 name = str(format(
"SVDDQM_%1%_FiredV") % sensorDescr);
616 title = str(format(
"SVD Sensor %1% Number of Fired V-Strips") % sensorDescr);
617 m_firedV[i] =
new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
618 m_firedV[i]->GetXaxis()->SetTitle(
"# fired strips");
619 m_firedV[i]->GetYaxis()->SetTitle(
"count");
624 name = str(format(
"SVDDQM_%1%_ClustersU") % sensorDescr);
625 title = str(format(
"SVD Sensor %1% Number of U-Clusters") % sensorDescr);
626 m_clustersU[i] =
new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
627 m_clustersU[i]->GetXaxis()->SetTitle(
"# clusters");
630 name = str(format(
"SVDDQM_%1%_ClustersV") % sensorDescr);
631 title = str(format(
"SVD Sensor %1% Number of V-Clusters") % sensorDescr);
632 m_clustersV[i] =
new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
633 m_clustersV[i]->GetXaxis()->SetTitle(
"# clusters");
639 name = str(format(
"SVDDQM_%1%_ADCStripU") % sensorDescr);
640 title = str(format(
"SVD Sensor %1% U-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
641 m_stripSignalU[i] =
new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
645 name = str(format(
"SVDDQM_%1%_ADCStripV") % sensorDescr);
646 title = str(format(
"SVD Sensor %1% V-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
647 m_stripSignalV[i] =
new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
656 name = str(format(
"SVDDQM_%1%_ClusterChargeU") % sensorDescr);
657 title = str(format(
"SVD Sensor %1% U-Cluster Charge") % sensorDescr);
658 m_clusterChargeU[i] =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
662 name = str(format(
"SVDDQM_%1%_ClusterChargeV") % sensorDescr);
663 title = str(format(
"SVD Sensor %1% V-Cluster Charge") % sensorDescr);
664 m_clusterChargeV[i] =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
671 name = str(format(
"SVDDQM_%1%_ClusterSNRU") % sensorDescr);
672 title = str(format(
"SVD Sensor %1% U-Cluster SNR") % sensorDescr);
673 m_clusterSNRU[i] =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
677 name = str(format(
"SVDDQM_%1%_ClusterSNRV") % sensorDescr);
678 title = str(format(
"SVD Sensor %1% V-Cluster SNR") % sensorDescr);
679 m_clusterSNRV[i] =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
687 name = str(format(
"SVDDQM_%1%_StripCountU") % sensorDescr);
688 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number") % sensorDescr);
689 m_stripCountU[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
693 name = str(format(
"SVDDQM_%1%_StripCountV") % sensorDescr);
694 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number") % sensorDescr);
695 m_stripCountV[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
702 name = str(format(
"SVDDQM_%1%_OnlineZSStripCountU") % sensorDescr);
703 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number") % sensorDescr);
708 name = str(format(
"SVDDQM_%1%_OnlineZSStripCountV") % sensorDescr);
709 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number") % sensorDescr);
719 name = str(format(
"SVDDQM_%1%_Strip3CountU") % sensorDescr);
720 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
725 name = str(format(
"SVDDQM_%1%_Strip3CountV") % sensorDescr);
726 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
735 name = str(format(
"SVDDQM_%1%_OnlineZSStrip3CountU") % sensorDescr);
736 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
741 name = str(format(
"SVDDQM_%1%_OnlineZSStrip3CountV") % sensorDescr);
742 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
751 name = str(format(
"SVDDQM_%1%_Strip6CountU") % sensorDescr);
752 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
757 name = str(format(
"SVDDQM_%1%_strip6CountV") % sensorDescr);
758 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
766 name = str(format(
"SVDDQM_%1%_OnlineZSStrip6CountU") % sensorDescr);
767 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
772 name = str(format(
"SVDDQM_%1%_OnlineZSStrip6CountV") % sensorDescr);
773 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
783 name = str(format(
"SVDDQM_%1%_StripCountSignalGroupIDsU") % sensorDescr);
784 title = str(format(
"SVD Sensor %1% Integrated NumberFired U-Strip for group Id = 0, 1, 2 & 3 vs Strip Number") % sensorDescr);
789 name = str(format(
"SVDDQM_%1%_StripCountSignalGroupIDsV") % sensorDescr);
790 title = str(format(
"SVD Sensor %1% Integrated Number of Fired V-Strip for group Id = 0, 1, 2 & 3 vs Strip Number") % sensorDescr);
799 name = str(format(
"SVDDQM_%1%_ClusterSizeU") % sensorDescr);
800 title = str(format(
"SVD Sensor %1% U-Cluster Size") % sensorDescr);
801 m_clusterSizeU[i] =
new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
805 name = str(format(
"SVDDQM_%1%_ClusterSizeV") % sensorDescr);
806 title = str(format(
"SVD Sensor %1% V-Cluster Size") % sensorDescr);
807 m_clusterSizeV[i] =
new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
814 name = str(format(
"SVDDQM_%1%_ClusterTimeU") % sensorDescr);
815 Title = Form(
"SVD Sensor %s U-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
816 m_clusterTimeU[i] =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
820 name = str(format(
"SVDDQM_%1%_ClusterTimeV") % sensorDescr);
821 Title = Form(
"SVD Sensor %s V-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
822 m_clusterTimeV[i] =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
828 for (
int i = 0; i < nSVDChips; i++) {
829 VxdID id = gTools->getChipIDFromSVDIndex(i);
831 int iLadder =
id.getLadderNumber();
832 int iSensor =
id.getSensorNumber();
833 int iChip = gTools->getSVDChipNumber(
id);
834 int IsU = gTools->isSVDSideU(
id);
835 TString AxisTicks = Form(
"%i_%i_%i_u%i", iLayer, iLadder, iSensor, iChip);
837 AxisTicks = Form(
"%i_%i_%i_v%i", iLayer, iLadder, iSensor, iChip);
849 TDirectory* dirShowAll =
nullptr;
850 dirShowAll = oldDir->mkdir(
"SVDDQMAll");
857 for (
int i = 0; i < nSVDSensors; i++) {
858 VxdID id = gTools->getSensorIDFromSVDIndex(i);
860 int iLadder =
id.getLadderNumber();
861 int iSensor =
id.getSensorNumber();
862 VxdID sensorID(iLayer, iLadder, iSensor);
864 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
868 name = str(format(
"SVD_%1%_StripHitmapU") % sensorDescr);
869 title = str(format(
"SVD Sensor %1% Strip Hitmap in U") % sensorDescr);
873 m_hitMapU[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
874 m_hitMapU[i]->GetYaxis()->SetTitle(
"timebin [time units]");
875 m_hitMapU[i]->GetZaxis()->SetTitle(
"hits");
877 name = str(format(
"SVD_%1%_StripHitmapV") % sensorDescr);
878 title = str(format(
"SVD Sensor %1% Strip Hitmap in V") % sensorDescr);
882 m_hitMapV[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
883 m_hitMapV[i]->GetYaxis()->SetTitle(
"timebin [time units]");
884 m_hitMapV[i]->GetZaxis()->SetTitle(
"hits");
889 name = str(format(
"SVD_%1%_HitmapClstU") % sensorDescr);
890 title = str(format(
"SVD Sensor %1% Hitmap Clusters in U") % sensorDescr);
892 m_hitMapUCl[i] =
new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
893 m_hitMapUCl[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
896 name = str(format(
"SVD_%1%_HitmapClstV") % sensorDescr);
897 title = str(format(
"SVD Sensor %1% Hitmap Clusters in V") % sensorDescr);
899 m_hitMapVCl[i] =
new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
900 m_hitMapVCl[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
916 if (gTools->getNumberOfSVDLayers() != 0) {
937 if (gTools->getNumberOfSVDLayers() == 0)
return;
948 while ((obj = nextH()))
949 if (obj->InheritsFrom(
"TH1")) {
951 TString tmp = (TString)obj->GetTitle();
952 Int_t pos = tmp.Last(
'~');
953 if (pos == -1) pos = tmp.Length() + 2;
955 TString title = tmp(0, pos - 2);
956 ((TH1F*)obj)->SetTitle(title + runID);
957 ((TH1F*)obj)->Reset();
966 if (!eventAccepted)
return;
976 if (gTools->getNumberOfSVDLayers() == 0)
return;
982 if (!storeSVDShaperDigits.
isValid()) {
983 B2WARNING(
"Missing SVDShaperDigit, SVDDQMExpressRecoModule is skipped.");
989 int firstSVDLayer = gTools->getFirstSVDLayer();
990 int lastSVDLayer = gTools->getLastSVDLayer();
991 int nSVDSensors = gTools->getNumberOfSVDSensors();
994 vector< set<int> > uStrips(nSVDSensors);
995 vector< set<int> > vStrips(nSVDSensors);
997 int iLayer = digitIn.getSensorID().getLayerNumber();
998 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
999 int iLadder = digitIn.getSensorID().getLadderNumber();
1000 int iSensor = digitIn.getSensorID().getSensorNumber();
1001 VxdID sensorID(iLayer, iLadder, iSensor);
1002 int index = gTools->getSVDSensorIndex(sensorID);
1004 if (digitIn.isUStrip()) {
1010 if (nSamples == 3) {
1023 uStrips.at(index).insert(digitIn.getCellID());
1024 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
1025 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE, Chip);
1048 if (nSamples == 3) {
1063 vStrips.at(index).insert(digitIn.getCellID());
1064 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
1065 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE, Chip);
1086 for (
int i = 0; i < nSVDSensors; i++) {
1087 if ((
m_firedU[i] !=
nullptr) && (uStrips[i].size() > 0))
1088 m_firedU[i]->Fill(uStrips[i].size());
1089 if ((
m_firedV[i] !=
nullptr) && (vStrips[i].size() > 0))
1090 m_firedV[i]->Fill(vStrips[i].size());
1095 if (storeNoZSSVDShaperDigits.
isValid())
1097 int iLayer = digitIn.getSensorID().getLayerNumber();
1098 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
1099 int iLadder = digitIn.getSensorID().getLadderNumber();
1100 int iSensor = digitIn.getSensorID().getSensorNumber();
1101 VxdID sensorID(iLayer, iLadder, iSensor);
1102 int index = gTools->getSVDSensorIndex(sensorID);
1104 if (digitIn.isUStrip()) {
1107 if (nSamples == 3) {
1116 if (nSamples == 3) {
1125 vector< set<int> > countsU(nSVDSensors);
1126 vector< set<int> > countsV(nSVDSensors);
1128 for (
const SVDCluster& cluster : storeSVDClusters) {
1130 int iLayer = cluster.getSensorID().getLayerNumber();
1131 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
1132 int iLadder = cluster.getSensorID().getLadderNumber();
1133 int iSensor = cluster.getSensorID().getSensorNumber();
1134 VxdID sensorID(iLayer, iLadder, iSensor);
1135 int index = gTools->getSVDSensorIndex(sensorID);
1138 float time = cluster.getClsTime();
1140 time = time -
m_svdEventInfo->getSVD2FTSWTimeShift(cluster.getFirstFrame());
1142 vector<int> vec = cluster.getTimeGroupId();
1143 auto minElement = min_element(vec.begin(), vec.end());
1145 if (vec.size() > 0) {
1146 groupId = *minElement;
1148 if (cluster.isUCluster()) {
1152 if (trgQuality == 1)
1154 if (trgQuality == 2)
1162 if (trgQuality == 1)
1164 if (trgQuality == 2)
1170 if (cluster.isUCluster()) {
1171 countsU.at(index).insert(SensorInfo.
getUCellID(cluster.getPosition()));
1172 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE,
1173 (
int)(SensorInfo.
getUCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1188 if (nSamples == 3) {
1199 if (nSamples == 3) {
1211 if (groupId == 0 || groupId == 1 || groupId == 2 || groupId == 3) {
1229 countsV.at(index).insert(SensorInfo.
getVCellID(cluster.getPosition()));
1230 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE,
1231 (
int)(SensorInfo.
getVCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1246 if (nSamples == 3) {
1257 if (nSamples == 3) {
1268 if (groupId == 0 || groupId == 1 || groupId == 2 || groupId == 3) {
1287 for (
int i = 0; i < nSVDSensors; i++) {
1288 if ((
m_clustersU[i] !=
nullptr) && (countsU[i].size() > 0))
1290 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_clusterTimeGroupIDsL456V
v Time group id of clusters for layer 4,5,6 sensors
TH1F * m_clusterSNRGroupIDsL456U
u SNR group id of clusters for layer 4,5,6 sensors
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_clusterTimeGroupIDsL456U
u Time group id of clusters for layer 4,5,6 sensors
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_clusterChargeGroupIDsL3V
v charge group id of clusters for layer 3 sensors
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
TH1F * m_clusterSNRGroupIDsL3U
u SNR group id of clusters for layer 3 sensors
int m_expNumber
experiment number
TH1F * m_cluster3SampleTimeU456
u Time of clusters for layer 4,5,6 sensors for 3 samples
TH1F ** m_stripCountSignalGroupIDsV
V strip count for cluster time group Id = 0.
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_clusterChargeGroupIDsL456U
u charge group id of clusters for layer 4,5,6 sensors
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_clusterTimeGroupIDsL3U
u Time group id of clusters for layer 3 sensors
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
TH1F * m_clusterSNRGroupIDsL456V
v SNR group id of clusters for layer 4,5,6 sensors
TH1F * m_clusterChargeGroupIDsL456V
v charge group id of clusters for layer 4,5,6 sensors
std::string m_histogramDirectoryName
Name of the histogram directory in ROOT file.
TH1F * m_clusterChargeVAll
v charge of clusters for all sensors
TH1F ** m_stripCountSignalGroupIDsU
U strip count for cluster time group Id = 0.
TH1F ** m_clusterTimeV
v time
TH1F * m_clusterSNRU3
u SNR of clusters for layer 3 sensors
TH1F * m_clusterSNRGroupIDsL3V
v SNR group id 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_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
TH1F * m_clusterChargeGroupIDsL3U
u charge group id of clusters for layer 3 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_clusterTimeGroupIDsL3V
v Time group id of clusters for layer 3 sensors
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_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.
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.