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"));
57 "if True, svd time back in SVD time reference.",
bool(
false));
59 "minimum charge (ADC) to fill the strip-hitmap histogram.",
float(0));
61 "minimum charge (in e-) to fill the cluster-hitmap histogram.",
float(0));
63 std::string(
"SVDExpReco"));
66 addParam(
"samples3",
m_3Samples,
"if True 3 samples histograms analysis is performed",
bool(
false));
72SVDDQMExpressRecoModule::~SVDDQMExpressRecoModule()
83 if (gTools->getNumberOfLayers() == 0) {
84 B2FATAL(
"Missing geometry for VXD, check steering file.");
86 if (gTools->getNumberOfSVDLayers() == 0) {
87 B2WARNING(
"Missing geometry for SVD, SVD-DQM is skipped.");
92 TDirectory* oldDir = gDirectory;
99 int nSVDSensors = gTools->getNumberOfSVDSensors();
100 int nSVDChips = gTools->getTotalSVDChips();
103 m_nEvents =
new TH1F(
"SVDDQM_nEvents",
"SVD Number of Events", 1, -0.5, 0.5);
104 m_nEvents->GetYaxis()->SetTitle(
"N events");
109 m_hitMapCountsU =
new TH1F(
"SVDDQM_StripCountsU",
"SVD Integrated Number of ZS5 Fired U-Strips per sensor",
110 nSVDSensors, 0, nSVDSensors);
114 m_hitMapCountsV =
new TH1F(
"SVDDQM_StripCountsV",
"SVD Integrated Number of ZS5 Fired V-Strips per sensor",
115 nSVDSensors, 0, nSVDSensors);
119 m_hitMapClCountsU =
new TH1F(
"SVDDQM_ClusterCountsU",
"SVD Integrated Number of U-Clusters per sensor",
120 nSVDSensors, 0, nSVDSensors);
124 m_hitMapClCountsV =
new TH1F(
"SVDDQM_ClusterCountsV",
"SVD Integrated Number of V-Clusters per sensor",
125 nSVDSensors, 0, nSVDSensors);
129 for (
int i = 0; i < nSVDSensors; i++) {
130 VxdID id = gTools->getSensorIDFromSVDIndex(i);
132 int iLadder =
id.getLadderNumber();
133 int iSensor =
id.getSensorNumber();
134 TString AxisTicks = Form(
"%i_%i_%i", iLayer, iLadder, iSensor);
142 m_hitMapCountsChip =
new TH1F(
"SVDDQM_StripCountsChip",
"SVD Integrated Number of ZS5 Fired Strips per chip",
143 nSVDChips, 0, nSVDChips);
147 m_hitMapClCountsChip =
new TH1F(
"SVDDQM_ClusterCountsChip",
"SVD Integrated Number of Clusters per chip",
148 nSVDChips, 0, nSVDChips);
193 float ChargeMax = 80;
197 float TimeMin = -150;
200 int GroupIdBins = 21;
201 float GroupIdMin = -1.5;
202 float GroupIdMax = 19.5;
207 TString refFrame =
"in FTSW reference";
209 refFrame =
"in SVD reference";
215 string name = str(format(
"SVDDQM_ClusterChargeUAll"));
216 string title = str(format(
"SVD U-Cluster Charge for all sensors"));
221 name = str(format(
"SVDDQM_ClusterChargeVAll"));
222 title = str(format(
"SVD V-Cluster Charge for all sensors"));
230 name = str(format(
"SVDDQM_ClusterChargeU3"));
231 title = str(format(
"SVD U-Cluster Charge for layer 3 sensors"));
232 m_clusterChargeU3 =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
236 name = str(format(
"SVDDQM_ClusterChargeV3"));
237 title = str(format(
"SVD V-Cluster Charge for layer 3 sensors"));
238 m_clusterChargeV3 =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
243 name = str(format(
"SVDDQM_ClusterChargeU456"));
244 title = str(format(
"SVD U-Cluster Charge for layers 4,5,6 sensors"));
250 name = str(format(
"SVDDQM_ClusterChargeV456"));
251 title = str(format(
"SVD V-Cluster Charge for layers 4,5,6 sensors"));
260 name = str(format(
"SVDDQM_ClusterSNRUAll"));
261 title = str(format(
"SVD U-Cluster SNR for all sensors"));
262 m_clusterSNRUAll =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
266 name = str(format(
"SVDDQM_ClusterSNRVAll"));
267 title = str(format(
"SVD V-Cluster SNR for all sensors"));
268 m_clusterSNRVAll =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
275 name = str(format(
"SVDDQM_ClusterSNRU3"));
276 title = str(format(
"SVD U-Cluster SNR for layer 3 sensors"));
277 m_clusterSNRU3 =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
281 name = str(format(
"SVDDQM_ClusterSNRV3"));
282 title = str(format(
"SVD V-Cluster SNR for layer 3 sensors"));
283 m_clusterSNRV3 =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
288 name = str(format(
"SVDDQM_ClusterSNRU456"));
289 title = str(format(
"SVD U-Cluster SNR for layers 4,5,6 sensors"));
290 m_clusterSNRU456 =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
294 name = str(format(
"SVDDQM_ClusterSNRV456"));
295 title = str(format(
"SVD V-Cluster SNR for layers 4,5,6 sensors"));
296 m_clusterSNRV456 =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
303 TString Name =
"SVDDQM_ClusterTimeUAll";
304 TString Title = Form(
"SVD U-Cluster Time %s for all sensors", refFrame.Data());
305 m_clusterTimeUAll =
new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
309 Name =
"SVDDQM_ClusterTimeVAll";
310 Title = Form(
"SVD V-Cluster Time %s for all sensors", refFrame.Data());
311 m_clusterTimeVAll =
new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
318 Name =
"SVDDQM_ClusterTimeU3";
319 Title = Form(
"SVD U-Cluster Time %s for layer 3 sensors", refFrame.Data());
320 m_clusterTimeU3 =
new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
324 name = str(format(
"SVDDQM_ClusterTimeV3"));
325 Title = Form(
"SVD V-Cluster Time %s for layer 3 sensors", refFrame.Data());
326 m_clusterTimeV3 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
331 name = str(format(
"SVDDQM_ClusterTimeU456"));
332 Title = Form(
"SVD U-Cluster Time %s for layers 4,5,6 sensors", refFrame.Data());
333 m_clusterTimeU456 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
337 name = str(format(
"SVDDQM_ClusterTimeV456"));
338 Title = Form(
"SVD V-Cluster Time %s for layers 4,5,6 sensors", refFrame.Data());
339 m_clusterTimeV456 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
348 Name =
"SVDDQM_Cluster3TimeU3";
349 Title = Form(
"SVD U-Cluster Time %s for layer 3 sensors for 3 samples", refFrame.Data());
354 name = str(format(
"SVDDQM_Cluster3TimeV3"));
355 Title = Form(
"SVD V-Cluster Time %s for layer 3 sensors for 3 samples", refFrame.Data());
360 name = str(format(
"SVDDQM_Cluster3TimeU456"));
361 Title = Form(
"SVD U-Cluster Time %s for layers 4,5,6 sensors for 3 samples", refFrame.Data());
366 name = str(format(
"SVDDQM_Cluster3TimeV456"));
367 Title = Form(
"SVD V-Cluster Time %s for layers 4,5,6 sensors for 3 samples", refFrame.Data());
376 Name =
"SVDDQM_Cluster6TimeU3";
377 Title = Form(
"SVD U-Cluster Time %s for layer 3 sensors for 6 samples", refFrame.Data());
382 name = str(format(
"SVDDQM_Cluster6TimeV3"));
383 Title = Form(
"SVD V-Cluster Time %s for layer 3 sensors for 6 samples", refFrame.Data());
389 name = str(format(
"SVDDQM_Cluster6TimeU456"));
390 Title = Form(
"SVD U-Cluster Time %s for layers 4,5,6 sensors for 6 samples", refFrame.Data());
395 name = str(format(
"SVDDQM_Cluster6TimeV456"));
396 Title = Form(
"SVD V-Cluster Time %s for layers 4,5,6 sensors for 6 samples", refFrame.Data());
406 Name =
"SVDDQM_ClusterTimeGroupIdU";
407 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for U/P Side", refFrame.Data());
408 m_clusterTimeGroupIdU =
new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
412 Name =
"SVDDQM_ClusterTimeGroupIdV";
413 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for V/N Side", refFrame.Data());
414 m_clusterTimeGroupIdV =
new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
422 Name =
"SVDDQM_cluster6TimeGroupIdU";
423 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for U/P Side for coarse trigger", refFrame.Data());
429 Name =
"SVDDQM_cluster6TimeGroupIdV";
430 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for V/N Side for coarse trigger", refFrame.Data());
437 Name =
"SVDDQM_cluster3TimeGroupIdU";
438 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for U/P Side for fine trigger", refFrame.Data());
444 Name =
"SVDDQM_cluster3TimeGroupIdV";
445 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for V/N Side for fine trigger", refFrame.Data());
455 name = str(format(
"SVDDQM_StripMaxBinUAll"));
456 title = str(format(
"SVD U-Strip MaxBin for all sensors"));
457 m_stripMaxBinUAll =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
461 name = str(format(
"SVDDQM_StripMaxBinVAll"));
462 title = str(format(
"SVD V-Strip MaxBin for all sensors"));
463 m_stripMaxBinVAll =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
468 name = str(format(
"SVDDQM_StripMaxBinU3"));
469 title = str(format(
"SVD U-Strip MaxBin for layer 3 sensors"));
470 m_stripMaxBinU3 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
474 name = str(format(
"SVDDQM_StripMaxBinV3"));
475 title = str(format(
"SVD V-Strip MaxBin for layer 3 sensors"));
476 m_stripMaxBinV3 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
481 name = str(format(
"SVDDQM_StripMaxBinU6"));
482 title = str(format(
"SVD U-Strip MaxBin for layer 6 sensors"));
483 m_stripMaxBinU6 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
487 name = str(format(
"SVDDQM_StripMaxBinV6"));
488 title = str(format(
"SVD V-Strip MaxBin for layer 6 sensors"));
489 m_stripMaxBinV6 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
494 for (
int i = 0; i < nSVDSensors; i++) {
495 VxdID id = gTools->getSensorIDFromSVDIndex(i);
497 int iLadder =
id.getLadderNumber();
498 int iSensor =
id.getSensorNumber();
499 VxdID sensorID(iLayer, iLadder, iSensor);
501 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
507 name = str(format(
"SVDDQM_%1%_FiredU") % sensorDescr);
508 title = str(format(
"SVD Sensor %1% Number of Fired U-Strips") % sensorDescr);
509 m_firedU[i] =
new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
510 m_firedU[i]->GetXaxis()->SetTitle(
"# fired strips");
511 m_firedU[i]->GetYaxis()->SetTitle(
"count");
513 name = str(format(
"SVDDQM_%1%_FiredV") % sensorDescr);
514 title = str(format(
"SVD Sensor %1% Number of Fired V-Strips") % sensorDescr);
515 m_firedV[i] =
new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
516 m_firedV[i]->GetXaxis()->SetTitle(
"# fired strips");
517 m_firedV[i]->GetYaxis()->SetTitle(
"count");
522 name = str(format(
"SVDDQM_%1%_ClustersU") % sensorDescr);
523 title = str(format(
"SVD Sensor %1% Number of U-Clusters") % sensorDescr);
524 m_clustersU[i] =
new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
525 m_clustersU[i]->GetXaxis()->SetTitle(
"# clusters");
528 name = str(format(
"SVDDQM_%1%_ClustersV") % sensorDescr);
529 title = str(format(
"SVD Sensor %1% Number of V-Clusters") % sensorDescr);
530 m_clustersV[i] =
new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
531 m_clustersV[i]->GetXaxis()->SetTitle(
"# clusters");
537 name = str(format(
"SVDDQM_%1%_ADCStripU") % sensorDescr);
538 title = str(format(
"SVD Sensor %1% U-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
539 m_stripSignalU[i] =
new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
543 name = str(format(
"SVDDQM_%1%_ADCStripV") % sensorDescr);
544 title = str(format(
"SVD Sensor %1% V-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
545 m_stripSignalV[i] =
new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
554 name = str(format(
"SVDDQM_%1%_ClusterChargeU") % sensorDescr);
555 title = str(format(
"SVD Sensor %1% U-Cluster Charge") % sensorDescr);
556 m_clusterChargeU[i] =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
560 name = str(format(
"SVDDQM_%1%_ClusterChargeV") % sensorDescr);
561 title = str(format(
"SVD Sensor %1% V-Cluster Charge") % sensorDescr);
562 m_clusterChargeV[i] =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
569 name = str(format(
"SVDDQM_%1%_ClusterSNRU") % sensorDescr);
570 title = str(format(
"SVD Sensor %1% U-Cluster SNR") % sensorDescr);
571 m_clusterSNRU[i] =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
575 name = str(format(
"SVDDQM_%1%_ClusterSNRV") % sensorDescr);
576 title = str(format(
"SVD Sensor %1% V-Cluster SNR") % sensorDescr);
577 m_clusterSNRV[i] =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
585 name = str(format(
"SVDDQM_%1%_StripCountU") % sensorDescr);
586 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number") % sensorDescr);
587 m_stripCountU[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
591 name = str(format(
"SVDDQM_%1%_StripCountV") % sensorDescr);
592 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number") % sensorDescr);
593 m_stripCountV[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
600 name = str(format(
"SVDDQM_%1%_OnlineZSStripCountU") % sensorDescr);
601 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number") % sensorDescr);
606 name = str(format(
"SVDDQM_%1%_OnlineZSStripCountV") % sensorDescr);
607 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number") % sensorDescr);
617 name = str(format(
"SVDDQM_%1%_Strip3CountU") % sensorDescr);
618 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
623 name = str(format(
"SVDDQM_%1%_Strip3CountV") % sensorDescr);
624 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
633 name = str(format(
"SVDDQM_%1%_OnlineZSStrip3CountU") % sensorDescr);
634 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
639 name = str(format(
"SVDDQM_%1%_OnlineZSStrip3CountV") % sensorDescr);
640 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
649 name = str(format(
"SVDDQM_%1%_Strip6CountU") % sensorDescr);
650 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
655 name = str(format(
"SVDDQM_%1%_strip6CountV") % sensorDescr);
656 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
664 name = str(format(
"SVDDQM_%1%_OnlineZSStrip6CountU") % sensorDescr);
665 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
670 name = str(format(
"SVDDQM_%1%_OnlineZSStrip6CountV") % sensorDescr);
671 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
681 name = str(format(
"SVDDQM_%1%_StripCountGroupId0U") % sensorDescr);
682 title = str(format(
"SVD Sensor %1% Integrated NumberFired U-Strip for group Id = 0 vs Strip Number") % sensorDescr);
687 name = str(format(
"SVDDQM_%1%_StripCountGroupId0V") % sensorDescr);
688 title = str(format(
"SVD Sensor %1% Integrated Number of Fired V-Strip for group Id = 0 vs Strip Number") % sensorDescr);
697 name = str(format(
"SVDDQM_%1%_ClusterSizeU") % sensorDescr);
698 title = str(format(
"SVD Sensor %1% U-Cluster Size") % sensorDescr);
699 m_clusterSizeU[i] =
new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
703 name = str(format(
"SVDDQM_%1%_ClusterSizeV") % sensorDescr);
704 title = str(format(
"SVD Sensor %1% V-Cluster Size") % sensorDescr);
705 m_clusterSizeV[i] =
new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
712 name = str(format(
"SVDDQM_%1%_ClusterTimeU") % sensorDescr);
713 Title = Form(
"SVD Sensor %s U-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
714 m_clusterTimeU[i] =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
718 name = str(format(
"SVDDQM_%1%_ClusterTimeV") % sensorDescr);
719 Title = Form(
"SVD Sensor %s V-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
720 m_clusterTimeV[i] =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
726 for (
int i = 0; i < nSVDChips; i++) {
727 VxdID id = gTools->getChipIDFromSVDIndex(i);
729 int iLadder =
id.getLadderNumber();
730 int iSensor =
id.getSensorNumber();
731 int iChip = gTools->getSVDChipNumber(
id);
732 int IsU = gTools->isSVDSideU(
id);
733 TString AxisTicks = Form(
"%i_%i_%i_u%i", iLayer, iLadder, iSensor, iChip);
735 AxisTicks = Form(
"%i_%i_%i_v%i", iLayer, iLadder, iSensor, iChip);
747 TDirectory* dirShowAll =
nullptr;
748 dirShowAll = oldDir->mkdir(
"SVDDQMAll");
755 for (
int i = 0; i < nSVDSensors; i++) {
756 VxdID id = gTools->getSensorIDFromSVDIndex(i);
758 int iLadder =
id.getLadderNumber();
759 int iSensor =
id.getSensorNumber();
760 VxdID sensorID(iLayer, iLadder, iSensor);
762 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
766 name = str(format(
"SVD_%1%_StripHitmapU") % sensorDescr);
767 title = str(format(
"SVD Sensor %1% Strip Hitmap in U") % sensorDescr);
771 m_hitMapU[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
772 m_hitMapU[i]->GetYaxis()->SetTitle(
"timebin [time units]");
773 m_hitMapU[i]->GetZaxis()->SetTitle(
"hits");
775 name = str(format(
"SVD_%1%_StripHitmapV") % sensorDescr);
776 title = str(format(
"SVD Sensor %1% Strip Hitmap in V") % sensorDescr);
780 m_hitMapV[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
781 m_hitMapV[i]->GetYaxis()->SetTitle(
"timebin [time units]");
782 m_hitMapV[i]->GetZaxis()->SetTitle(
"hits");
787 name = str(format(
"SVD_%1%_HitmapClstU") % sensorDescr);
788 title = str(format(
"SVD Sensor %1% Hitmap Clusters in U") % sensorDescr);
790 m_hitMapUCl[i] =
new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
791 m_hitMapUCl[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
794 name = str(format(
"SVD_%1%_HitmapClstV") % sensorDescr);
795 title = str(format(
"SVD Sensor %1% Hitmap Clusters in V") % sensorDescr);
797 m_hitMapVCl[i] =
new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
798 m_hitMapVCl[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
814 if (gTools->getNumberOfSVDLayers() != 0) {
835 if (gTools->getNumberOfSVDLayers() == 0)
return;
846 while ((obj = nextH()))
847 if (obj->InheritsFrom(
"TH1")) {
849 TString tmp = (TString)obj->GetTitle();
850 Int_t pos = tmp.Last(
'~');
851 if (pos == -1) pos = tmp.Length() + 2;
853 TString title = tmp(0, pos - 2);
854 ((TH1F*)obj)->SetTitle(title + runID);
855 ((TH1F*)obj)->Reset();
867 if (!eventAccepted)
return;
878 if (gTools->getNumberOfSVDLayers() == 0)
return;
889 int firstSVDLayer = gTools->getFirstSVDLayer();
890 int lastSVDLayer = gTools->getLastSVDLayer();
891 int nSVDSensors = gTools->getNumberOfSVDSensors();
894 vector< set<int> > uStrips(nSVDSensors);
895 vector< set<int> > vStrips(nSVDSensors);
897 int iLayer = digitIn.getSensorID().getLayerNumber();
898 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
899 int iLadder = digitIn.getSensorID().getLadderNumber();
900 int iSensor = digitIn.getSensorID().getSensorNumber();
901 VxdID sensorID(iLayer, iLadder, iSensor);
902 int index = gTools->getSVDSensorIndex(sensorID);
904 if (digitIn.isUStrip()) {
923 uStrips.at(index).insert(digitIn.getCellID());
924 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
925 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE, Chip);
963 vStrips.at(index).insert(digitIn.getCellID());
964 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
965 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE, Chip);
986 for (
int i = 0; i < nSVDSensors; i++) {
987 if ((
m_firedU[i] !=
nullptr) && (uStrips[i].size() > 0))
988 m_firedU[i]->Fill(uStrips[i].size());
989 if ((
m_firedV[i] !=
nullptr) && (vStrips[i].size() > 0))
990 m_firedV[i]->Fill(vStrips[i].size());
995 if (storeNoZSSVDShaperDigits.
isValid())
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()) {
1007 if (nSamples == 3) {
1016 if (nSamples == 3) {
1025 vector< set<int> > countsU(nSVDSensors);
1026 vector< set<int> > countsV(nSVDSensors);
1028 for (
const SVDCluster& cluster : storeSVDClusters) {
1030 int iLayer = cluster.getSensorID().getLayerNumber();
1031 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
1032 int iLadder = cluster.getSensorID().getLadderNumber();
1033 int iSensor = cluster.getSensorID().getSensorNumber();
1034 VxdID sensorID(iLayer, iLadder, iSensor);
1035 int index = gTools->getSVDSensorIndex(sensorID);
1038 float time = cluster.getClsTime();
1040 time = time -
m_svdEventInfo->getSVD2FTSWTimeShift(cluster.getFirstFrame());
1042 vector<int> vec = cluster.getTimeGroupId();
1043 auto minElement = min_element(vec.begin(), vec.end());
1045 if (vec.size() > 0) {
1046 groupId = *minElement;
1048 if (cluster.isUCluster()) {
1052 if (trgQuality == 1)
1054 if (trgQuality == 2)
1062 if (trgQuality == 1)
1064 if (trgQuality == 2)
1070 if (cluster.isUCluster()) {
1071 countsU.at(index).insert(SensorInfo.
getUCellID(cluster.getPosition()));
1072 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE,
1073 (
int)(SensorInfo.
getUCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1088 if (nSamples == 3) {
1099 if (nSamples == 3) {
1117 countsV.at(index).insert(SensorInfo.
getVCellID(cluster.getPosition()));
1118 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE,
1119 (
int)(SensorInfo.
getVCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1134 if (nSamples == 3) {
1145 if (nSamples == 3) {
1164 for (
int i = 0; i < nSVDSensors; i++) {
1165 if ((
m_clustersU[i] !=
nullptr) && (countsU[i].size() > 0))
1167 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
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 (default)
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
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.