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"
30 using namespace SoftwareTrigger;
42 SVDDQMExpressRecoModule::SVDDQMExpressRecoModule() :
HistoModule()
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"));
71 SVDDQMExpressRecoModule::~SVDDQMExpressRecoModule()
82 if (gTools->getNumberOfLayers() == 0) {
83 B2FATAL(
"Missing geometry for VXD, check steering file.");
85 if (gTools->getNumberOfSVDLayers() == 0) {
86 B2WARNING(
"Missing geometry for SVD, SVD-DQM is skipped.");
91 TDirectory* oldDir = gDirectory;
98 int nSVDSensors = gTools->getNumberOfSVDSensors();
99 int nSVDChips = gTools->getTotalSVDChips();
102 m_nEvents =
new TH1F(
"SVDDQM_nEvents",
"SVD Number of Events", 1, -0.5, 0.5);
103 m_nEvents->GetYaxis()->SetTitle(
"N events");
108 m_hitMapCountsU =
new TH1F(
"SVDDQM_StripCountsU",
"SVD Integrated Number of ZS5 Fired U-Strips per sensor",
109 nSVDSensors, 0, nSVDSensors);
113 m_hitMapCountsV =
new TH1F(
"SVDDQM_StripCountsV",
"SVD Integrated Number of ZS5 Fired V-Strips per sensor",
114 nSVDSensors, 0, nSVDSensors);
118 m_hitMapClCountsU =
new TH1F(
"SVDDQM_ClusterCountsU",
"SVD Integrated Number of U-Clusters per sensor",
119 nSVDSensors, 0, nSVDSensors);
123 m_hitMapClCountsV =
new TH1F(
"SVDDQM_ClusterCountsV",
"SVD Integrated Number of V-Clusters per sensor",
124 nSVDSensors, 0, nSVDSensors);
128 for (
int i = 0; i < nSVDSensors; i++) {
129 VxdID id = gTools->getSensorIDFromSVDIndex(i);
131 int iLadder =
id.getLadderNumber();
132 int iSensor =
id.getSensorNumber();
133 TString AxisTicks = Form(
"%i_%i_%i", iLayer, iLadder, iSensor);
141 m_hitMapCountsChip =
new TH1F(
"SVDDQM_StripCountsChip",
"SVD Integrated Number of ZS5 Fired Strips per chip",
142 nSVDChips, 0, nSVDChips);
146 m_hitMapClCountsChip =
new TH1F(
"SVDDQM_ClusterCountsChip",
"SVD Integrated Number of Clusters per chip",
147 nSVDChips, 0, nSVDChips);
189 float ChargeMax = 80;
193 float TimeMin = -150;
196 int GroupIdBins = 21;
197 float GroupIdMin = -1.5;
198 float GroupIdMax = 19.5;
203 TString refFrame =
"in FTSW reference";
205 refFrame =
"in SVD reference";
211 string name = str(format(
"SVDDQM_ClusterChargeUAll"));
212 string title = str(format(
"SVD U-Cluster Charge for all sensors"));
217 name = str(format(
"SVDDQM_ClusterChargeVAll"));
218 title = str(format(
"SVD V-Cluster Charge for all sensors"));
226 name = str(format(
"SVDDQM_ClusterChargeU3"));
227 title = str(format(
"SVD U-Cluster Charge for layer 3 sensors"));
228 m_clusterChargeU3 =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
232 name = str(format(
"SVDDQM_ClusterChargeV3"));
233 title = str(format(
"SVD V-Cluster Charge for layer 3 sensors"));
234 m_clusterChargeV3 =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
239 name = str(format(
"SVDDQM_ClusterChargeU456"));
240 title = str(format(
"SVD U-Cluster Charge for layers 4,5,6 sensors"));
246 name = str(format(
"SVDDQM_ClusterChargeV456"));
247 title = str(format(
"SVD V-Cluster Charge for layers 4,5,6 sensors"));
256 name = str(format(
"SVDDQM_ClusterSNRUAll"));
257 title = str(format(
"SVD U-Cluster SNR for all sensors"));
258 m_clusterSNRUAll =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
262 name = str(format(
"SVDDQM_ClusterSNRVAll"));
263 title = str(format(
"SVD V-Cluster SNR for all sensors"));
264 m_clusterSNRVAll =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
271 name = str(format(
"SVDDQM_ClusterSNRU3"));
272 title = str(format(
"SVD U-Cluster SNR for layer 3 sensors"));
273 m_clusterSNRU3 =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
277 name = str(format(
"SVDDQM_ClusterSNRV3"));
278 title = str(format(
"SVD V-Cluster SNR for layer 3 sensors"));
279 m_clusterSNRV3 =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
284 name = str(format(
"SVDDQM_ClusterSNRU456"));
285 title = str(format(
"SVD U-Cluster SNR for layers 4,5,6 sensors"));
286 m_clusterSNRU456 =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
290 name = str(format(
"SVDDQM_ClusterSNRV456"));
291 title = str(format(
"SVD V-Cluster SNR for layers 4,5,6 sensors"));
292 m_clusterSNRV456 =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
299 TString Name =
"SVDDQM_ClusterTimeUAll";
300 TString Title = Form(
"SVD U-Cluster Time %s for all sensors", refFrame.Data());
301 m_clusterTimeUAll =
new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
305 Name =
"SVDDQM_ClusterTimeVAll";
306 Title = Form(
"SVD V-Cluster Time %s for all sensors", refFrame.Data());
307 m_clusterTimeVAll =
new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
314 Name =
"SVDDQM_ClusterTimeU3";
315 Title = Form(
"SVD U-Cluster Time %s for layer 3 sensors", refFrame.Data());
316 m_clusterTimeU3 =
new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
320 name = str(format(
"SVDDQM_ClusterTimeV3"));
321 Title = Form(
"SVD V-Cluster Time %s for layer 3 sensors", refFrame.Data());
322 m_clusterTimeV3 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
327 name = str(format(
"SVDDQM_ClusterTimeU456"));
328 Title = Form(
"SVD U-Cluster Time %s for layers 4,5,6 sensors", refFrame.Data());
329 m_clusterTimeU456 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
333 name = str(format(
"SVDDQM_ClusterTimeV456"));
334 Title = Form(
"SVD V-Cluster Time %s for layers 4,5,6 sensors", refFrame.Data());
335 m_clusterTimeV456 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
343 Name =
"SVDDQM_Cluster3TimeU3";
344 Title = Form(
"SVD U-Cluster Time %s for layer 3 sensors for 3 samples", refFrame.Data());
345 m_cluster3TimeU3 =
new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
349 name = str(format(
"SVDDQM_Cluster3TimeV3"));
350 Title = Form(
"SVD V-Cluster Time %s for layer 3 sensors for 3 samples", refFrame.Data());
351 m_cluster3TimeV3 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
356 name = str(format(
"SVDDQM_Cluster3TimeU456"));
357 Title = Form(
"SVD U-Cluster Time %s for layers 4,5,6 sensors for 3 samples", refFrame.Data());
358 m_cluster3TimeU456 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
362 name = str(format(
"SVDDQM_Cluster3TimeV456"));
363 Title = Form(
"SVD V-Cluster Time %s for layers 4,5,6 sensors for 3 samples", refFrame.Data());
364 m_cluster3TimeV456 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
372 Name =
"SVDDQM_Cluster6TimeU3";
373 Title = Form(
"SVD U-Cluster Time %s for layer 3 sensors for 6 samples", refFrame.Data());
374 m_cluster6TimeU3 =
new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
378 name = str(format(
"SVDDQM_Cluster6TimeV3"));
379 Title = Form(
"SVD V-Cluster Time %s for layer 3 sensors for 6 samples", refFrame.Data());
380 m_cluster6TimeV3 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
385 name = str(format(
"SVDDQM_Cluster6TimeU456"));
386 Title = Form(
"SVD U-Cluster Time %s for layers 4,5,6 sensors for 6 samples", refFrame.Data());
387 m_cluster6TimeU456 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
391 name = str(format(
"SVDDQM_Cluster6TimeV456"));
392 Title = Form(
"SVD V-Cluster Time %s for layers 4,5,6 sensors for 6 samples", refFrame.Data());
393 m_cluster6TimeV456 =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
402 Name =
"SVDDQM_Cluster3TimeGroupId";
403 Title = Form(
"SVD cluster Time GourpId %s vs cluster time for 3 samples", refFrame.Data());
404 m_cluster3TimeGroupId =
new TH2F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
408 Name =
"SVDDQM_Cluster6TimeGroupId";
409 Title = Form(
"SVD cluster Time GourpId %s vs cluster time for 6 samples", refFrame.Data());
410 m_cluster6TimeGroupId =
new TH2F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
418 name = str(format(
"SVDDQM_StripMaxBinUAll"));
419 title = str(format(
"SVD U-Strip MaxBin for all sensors"));
420 m_stripMaxBinUAll =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
424 name = str(format(
"SVDDQM_StripMaxBinVAll"));
425 title = str(format(
"SVD V-Strip MaxBin for all sensors"));
426 m_stripMaxBinVAll =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
431 name = str(format(
"SVDDQM_StripMaxBinU3"));
432 title = str(format(
"SVD U-Strip MaxBin for layer 3 sensors"));
433 m_stripMaxBinU3 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
437 name = str(format(
"SVDDQM_StripMaxBinV3"));
438 title = str(format(
"SVD V-Strip MaxBin for layer 3 sensors"));
439 m_stripMaxBinV3 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
444 name = str(format(
"SVDDQM_StripMaxBinU6"));
445 title = str(format(
"SVD U-Strip MaxBin for layer 6 sensors"));
446 m_stripMaxBinU6 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
450 name = str(format(
"SVDDQM_StripMaxBinV6"));
451 title = str(format(
"SVD V-Strip MaxBin for layer 6 sensors"));
452 m_stripMaxBinV6 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
457 for (
int i = 0; i < nSVDSensors; i++) {
458 VxdID id = gTools->getSensorIDFromSVDIndex(i);
460 int iLadder =
id.getLadderNumber();
461 int iSensor =
id.getSensorNumber();
462 VxdID sensorID(iLayer, iLadder, iSensor);
464 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
470 name = str(format(
"SVDDQM_%1%_FiredU") % sensorDescr);
471 title = str(format(
"SVD Sensor %1% Number of Fired U-Strips") % sensorDescr);
472 m_firedU[i] =
new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
473 m_firedU[i]->GetXaxis()->SetTitle(
"# fired strips");
474 m_firedU[i]->GetYaxis()->SetTitle(
"count");
476 name = str(format(
"SVDDQM_%1%_FiredV") % sensorDescr);
477 title = str(format(
"SVD Sensor %1% Number of Fired V-Strips") % sensorDescr);
478 m_firedV[i] =
new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
479 m_firedV[i]->GetXaxis()->SetTitle(
"# fired strips");
480 m_firedV[i]->GetYaxis()->SetTitle(
"count");
485 name = str(format(
"SVDDQM_%1%_ClustersU") % sensorDescr);
486 title = str(format(
"SVD Sensor %1% Number of U-Clusters") % sensorDescr);
487 m_clustersU[i] =
new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
488 m_clustersU[i]->GetXaxis()->SetTitle(
"# clusters");
491 name = str(format(
"SVDDQM_%1%_ClustersV") % sensorDescr);
492 title = str(format(
"SVD Sensor %1% Number of V-Clusters") % sensorDescr);
493 m_clustersV[i] =
new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
494 m_clustersV[i]->GetXaxis()->SetTitle(
"# clusters");
500 name = str(format(
"SVDDQM_%1%_ADCStripU") % sensorDescr);
501 title = str(format(
"SVD Sensor %1% U-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
502 m_stripSignalU[i] =
new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
506 name = str(format(
"SVDDQM_%1%_ADCStripV") % sensorDescr);
507 title = str(format(
"SVD Sensor %1% V-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
508 m_stripSignalV[i] =
new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
517 name = str(format(
"SVDDQM_%1%_ClusterChargeU") % sensorDescr);
518 title = str(format(
"SVD Sensor %1% U-Cluster Charge") % sensorDescr);
519 m_clusterChargeU[i] =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
523 name = str(format(
"SVDDQM_%1%_ClusterChargeV") % sensorDescr);
524 title = str(format(
"SVD Sensor %1% V-Cluster Charge") % sensorDescr);
525 m_clusterChargeV[i] =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
532 name = str(format(
"SVDDQM_%1%_ClusterSNRU") % sensorDescr);
533 title = str(format(
"SVD Sensor %1% U-Cluster SNR") % sensorDescr);
534 m_clusterSNRU[i] =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
538 name = str(format(
"SVDDQM_%1%_ClusterSNRV") % sensorDescr);
539 title = str(format(
"SVD Sensor %1% V-Cluster SNR") % sensorDescr);
540 m_clusterSNRV[i] =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
548 name = str(format(
"SVDDQM_%1%_StripCountU") % sensorDescr);
549 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number") % sensorDescr);
550 m_stripCountU[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
554 name = str(format(
"SVDDQM_%1%_StripCountV") % sensorDescr);
555 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number") % sensorDescr);
556 m_stripCountV[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
563 name = str(format(
"SVDDQM_%1%_OnlineZSStripCountU") % sensorDescr);
564 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number") % sensorDescr);
569 name = str(format(
"SVDDQM_%1%_OnlineZSStripCountV") % sensorDescr);
570 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number") % sensorDescr);
579 name = str(format(
"SVDDQM_%1%_Strip3CountU") % sensorDescr);
580 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
581 m_strip3CountU[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
585 name = str(format(
"SVDDQM_%1%_Strip3CountV") % sensorDescr);
586 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
587 m_strip3CountV[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
594 name = str(format(
"SVDDQM_%1%_OnlineZSStrip3CountU") % sensorDescr);
595 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
600 name = str(format(
"SVDDQM_%1%_OnlineZSStrip3CountV") % sensorDescr);
601 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
611 name = str(format(
"SVDDQM_%1%_Strip6CountU") % sensorDescr);
612 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
613 m_strip6CountU[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
617 name = str(format(
"SVDDQM_%1%_Strip6CountV") % sensorDescr);
618 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
619 m_strip6CountV[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
626 name = str(format(
"SVDDQM_%1%_OnlineZSStrip6CountU") % sensorDescr);
627 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
632 name = str(format(
"SVDDQM_%1%_OnlineZSStrip6CountV") % sensorDescr);
633 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
643 name = str(format(
"SVDDQM_%1%_StripCountGroupId0U") % sensorDescr);
644 title = str(format(
"SVD Sensor %1% Integrated NumberFired U-Strip for group Id = 0 vs Strip Number") % sensorDescr);
649 name = str(format(
"SVDDQM_%1%_StripCountGroupId0V") % sensorDescr);
650 title = str(format(
"SVD Sensor %1% Integrated Number of Fired V-Strip for group Id = 0 vs Strip Number") % sensorDescr);
659 name = str(format(
"SVDDQM_%1%_ClusterSizeU") % sensorDescr);
660 title = str(format(
"SVD Sensor %1% U-Cluster Size") % sensorDescr);
661 m_clusterSizeU[i] =
new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
665 name = str(format(
"SVDDQM_%1%_ClusterSizeV") % sensorDescr);
666 title = str(format(
"SVD Sensor %1% V-Cluster Size") % sensorDescr);
667 m_clusterSizeV[i] =
new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
674 name = str(format(
"SVDDQM_%1%_ClusterTimeU") % sensorDescr);
675 Title = Form(
"SVD Sensor %s U-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
676 m_clusterTimeU[i] =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
680 name = str(format(
"SVDDQM_%1%_ClusterTimeV") % sensorDescr);
681 Title = Form(
"SVD Sensor %s V-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
682 m_clusterTimeV[i] =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
688 for (
int i = 0; i < nSVDChips; i++) {
689 VxdID id = gTools->getChipIDFromSVDIndex(i);
691 int iLadder =
id.getLadderNumber();
692 int iSensor =
id.getSensorNumber();
693 int iChip = gTools->getSVDChipNumber(
id);
694 int IsU = gTools->isSVDSideU(
id);
695 TString AxisTicks = Form(
"%i_%i_%i_u%i", iLayer, iLadder, iSensor, iChip);
697 AxisTicks = Form(
"%i_%i_%i_v%i", iLayer, iLadder, iSensor, iChip);
709 TDirectory* dirShowAll =
nullptr;
710 dirShowAll = oldDir->mkdir(
"SVDDQMAll");
717 for (
int i = 0; i < nSVDSensors; i++) {
718 VxdID id = gTools->getSensorIDFromSVDIndex(i);
720 int iLadder =
id.getLadderNumber();
721 int iSensor =
id.getSensorNumber();
722 VxdID sensorID(iLayer, iLadder, iSensor);
724 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
728 name = str(format(
"SVD_%1%_StripHitmapU") % sensorDescr);
729 title = str(format(
"SVD Sensor %1% Strip Hitmap in U") % sensorDescr);
733 m_hitMapU[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
734 m_hitMapU[i]->GetYaxis()->SetTitle(
"timebin [time units]");
735 m_hitMapU[i]->GetZaxis()->SetTitle(
"hits");
737 name = str(format(
"SVD_%1%_StripHitmapV") % sensorDescr);
738 title = str(format(
"SVD Sensor %1% Strip Hitmap in V") % sensorDescr);
742 m_hitMapV[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
743 m_hitMapV[i]->GetYaxis()->SetTitle(
"timebin [time units]");
744 m_hitMapV[i]->GetZaxis()->SetTitle(
"hits");
749 name = str(format(
"SVD_%1%_HitmapClstU") % sensorDescr);
750 title = str(format(
"SVD Sensor %1% Hitmap Clusters in U") % sensorDescr);
752 m_hitMapUCl[i] =
new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
753 m_hitMapUCl[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
756 name = str(format(
"SVD_%1%_HitmapClstV") % sensorDescr);
757 title = str(format(
"SVD Sensor %1% Hitmap Clusters in V") % sensorDescr);
759 m_hitMapVCl[i] =
new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
760 m_hitMapVCl[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
776 if (gTools->getNumberOfSVDLayers() != 0) {
795 if (gTools->getNumberOfSVDLayers() == 0)
return;
806 while ((obj = nextH()))
807 if (obj->InheritsFrom(
"TH1")) {
808 if (((TString)obj->GetTitle()).Contains(runID) ==
false) {
809 ((TH1F*)obj)->SetTitle(obj->GetTitle() + runID);
811 ((TH1F*)obj)->Reset();
823 if (!eventAccepted)
return;
834 if (gTools->getNumberOfSVDLayers() == 0)
return;
845 int firstSVDLayer = gTools->getFirstSVDLayer();
846 int lastSVDLayer = gTools->getLastSVDLayer();
847 int nSVDSensors = gTools->getNumberOfSVDSensors();
850 vector< set<int> > uStrips(nSVDSensors);
851 vector< set<int> > vStrips(nSVDSensors);
853 int iLayer = digitIn.getSensorID().getLayerNumber();
854 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
855 int iLadder = digitIn.getSensorID().getLadderNumber();
856 int iSensor = digitIn.getSensorID().getSensorNumber();
857 VxdID sensorID(iLayer, iLadder, iSensor);
858 int index = gTools->getSVDSensorIndex(sensorID);
860 if (digitIn.isUStrip()) {
878 uStrips.at(index).insert(digitIn.getCellID());
879 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
880 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE, Chip);
916 vStrips.at(index).insert(digitIn.getCellID());
917 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
918 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE, Chip);
939 for (
int i = 0; i < nSVDSensors; i++) {
940 if ((
m_firedU[i] !=
nullptr) && (uStrips[i].size() > 0))
941 m_firedU[i]->Fill(uStrips[i].size());
942 if ((
m_firedV[i] !=
nullptr) && (vStrips[i].size() > 0))
943 m_firedV[i]->Fill(vStrips[i].size());
948 if (storeNoZSSVDShaperDigits.
isValid())
950 int iLayer = digitIn.getSensorID().getLayerNumber();
951 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
952 int iLadder = digitIn.getSensorID().getLadderNumber();
953 int iSensor = digitIn.getSensorID().getSensorNumber();
954 VxdID sensorID(iLayer, iLadder, iSensor);
955 int index = gTools->getSVDSensorIndex(sensorID);
957 if (digitIn.isUStrip()) {
974 vector< set<int> > countsU(nSVDSensors);
975 vector< set<int> > countsV(nSVDSensors);
977 for (
const SVDCluster& cluster : storeSVDClusters) {
979 int iLayer = cluster.getSensorID().getLayerNumber();
980 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
981 int iLadder = cluster.getSensorID().getLadderNumber();
982 int iSensor = cluster.getSensorID().getSensorNumber();
983 VxdID sensorID(iLayer, iLadder, iSensor);
984 int index = gTools->getSVDSensorIndex(sensorID);
987 float time = cluster.getClsTime();
989 time = time -
m_svdEventInfo->getSVD2FTSWTimeShift(cluster.getFirstFrame());
991 vector<int> vec = cluster.getTimeGroupId();
992 auto minElement = min_element(vec.begin(), vec.end());
994 if (vec.size() > 0) {
995 groupId = *minElement;
1004 if (cluster.isUCluster()) {
1005 countsU.at(index).insert(SensorInfo.
getUCellID(cluster.getPosition()));
1006 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE,
1007 (
int)(SensorInfo.
getUCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1021 if (nSamples == 3) {
1030 if (nSamples == 3) {
1047 countsV.at(index).insert(SensorInfo.
getVCellID(cluster.getPosition()));
1048 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE,
1049 (
int)(SensorInfo.
getVCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1063 if (nSamples == 3) {
1072 if (nSamples == 3) {
1090 for (
int i = 0; i < nSVDSensors; i++) {
1091 if ((
m_clustersU[i] !=
nullptr) && (countsU[i].size() > 0))
1093 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_onlineZSstrip6CountV
v strip count (online Zero Suppression for 6 samples
TH1F * m_clusterSNRVAll
v SNR of clusters for all sensors
TH1F * m_cluster3TimeV3
v Time of clusters for layer 3 sensors 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.
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.
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_cluster3TimeU3
u Time of clusters for layer 3 sensors for 3 samples
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_hitMapClCountsU
Hitmaps u of Clusters.
float m_CutSVDCharge
cut for accepting strips to hitmap histogram default = 0 ADU
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_stripSignalU
u charge of strips
TH1F * m_clusterChargeUAll
u charge of clusters for all sensors
int m_expNumber
experiment number
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_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.
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
void event() override final
Module function event.
TH1F ** m_onlineZSstripCountV
v strip count (online Zero Suppression
TH1F ** m_stripSignalV
v charge of strips
TH1F ** m_strip6CountU
u strip count for 6 samples
std::string m_storeSVDShaperDigitsName
SVDShaperDigits StoreArray name.
TH1F ** m_stripCountV
v strip count
TH1F * m_cluster6TimeU3
u Time of clusters for layer 3 sensors for 6 samples
TH2F * m_cluster6TimeGroupId
time group id for 6 samples
std::string m_histogramDirectoryName
Name of the histogram directory in ROOT file.
TH1F * m_clusterChargeVAll
v charge of clusters for all sensors
TH1F ** m_onlineZSstrip6CountU
u strip count (online Zero Suppression) for 6 samples
TH1F ** m_clusterTimeV
v time
TH1F * m_clusterSNRU3
u SNR of clusters for layer 3 sensors
TH1F * m_cluster6TimeU456
u Time of clusters for layer 4,5,6 sensors for 6 samples
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)
TList * m_histoList
list of cumulative histograms
TH1F ** m_clusterChargeU
u charge of clusters
TH1F * m_hitMapCountsChip
Hitmaps of digits on chips.
TH1F * m_clusterChargeV3
v charge of clusters for layer 3 sensors
TH2F ** m_hitMapV
Hitmaps pixels for v.
TH2F * m_cluster3TimeGroupId
time group id for 3 samples
TH1F ** m_strip3CountV
v strip count for 3 samples
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_cluster6TimeV456
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_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_cluster3TimeV456
v Time of clusters for layer 4,5,6 sensors for 3 samples
TH1F * m_cluster6TimeV3
v Time of clusters for layer 3 sensors for 6 samples
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
TH1F * m_cluster3TimeU456
u Time of clusters for layer 4,5,6 sensors for 3 samples
TH1F ** m_onlineZSstrip3CountU
u strip count (online Zero Suppression) for 3 samples
TH1F ** m_onlineZSstrip3CountV
v strip count (online Zero Suppression for 3 samples
TH1F * m_stripMaxBinVAll
v MaxBin of strips for all sensors (offline Zero Suppression)
TH1F * m_hitMapClCountsChip
Hitmaps of clusters on chips.
StoreObjPtr< SoftwareTriggerResult > m_resultStoreObjectPointer
Store Object for reading the trigger decision.
float m_CutSVDClusterCharge
cut for accepting clusters to hitmap histogram, default = 0 ke-
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
TH1F ** m_firedV
Fired v strips per event.
TH1F * m_clusterChargeV456
v charge of clusters for layer 4,5,6 sensors
TH1F ** m_strip6CountV
v strip count for 3 samples
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
TH1F ** m_strip3CountU
u strip count for 3 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...
bool isOptional(const std::string &name="")
Tell the DataStore about an optional input.
const std::string & getName() const
Return name under which the object is saved in the DataStore.
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.
static GeoCache & getInstance()
Return a reference to the singleton instance.
const GeoTools * getGeoTools()
Return a raw pointer to a GeoTools object.
static const SensorInfoBase & get(Belle2::VxdID id)
Return a reference to the SensorInfo of a given SensorID.
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.