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_ClusterTimeGroupIdU";
403 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for U/P Side", refFrame.Data());
404 m_clusterTimeGroupIdU =
new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
408 Name =
"SVDDQM_ClusterTimeGroupIdV";
409 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for V/N Side", refFrame.Data());
410 m_clusterTimeGroupIdV =
new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
418 Name =
"SVDDQM_cluster6TimeGroupIdU";
419 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for U/P Side for coarse trigger", refFrame.Data());
420 m_clusterTime6GroupIdU =
new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
424 Name =
"SVDDQM_cluster6TimeGroupIdV";
425 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for V/N Side for coarse trigger", refFrame.Data());
426 m_clusterTime6GroupIdV =
new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
431 Name =
"SVDDQM_cluster3TimeGroupIdU";
432 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for U/P Side for fine trigger", refFrame.Data());
433 m_clusterTime3GroupIdU =
new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
437 Name =
"SVDDQM_cluster3TimeGroupIdV";
438 Title = Form(
"SVD cluster Time Group Id %s vs cluster time for V/N Side for fine trigger", refFrame.Data());
439 m_clusterTime3GroupIdV =
new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
447 name = str(format(
"SVDDQM_StripMaxBinUAll"));
448 title = str(format(
"SVD U-Strip MaxBin for all sensors"));
449 m_stripMaxBinUAll =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
453 name = str(format(
"SVDDQM_StripMaxBinVAll"));
454 title = str(format(
"SVD V-Strip MaxBin for all sensors"));
455 m_stripMaxBinVAll =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
460 name = str(format(
"SVDDQM_StripMaxBinU3"));
461 title = str(format(
"SVD U-Strip MaxBin for layer 3 sensors"));
462 m_stripMaxBinU3 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
466 name = str(format(
"SVDDQM_StripMaxBinV3"));
467 title = str(format(
"SVD V-Strip MaxBin for layer 3 sensors"));
468 m_stripMaxBinV3 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
473 name = str(format(
"SVDDQM_StripMaxBinU6"));
474 title = str(format(
"SVD U-Strip MaxBin for layer 6 sensors"));
475 m_stripMaxBinU6 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
479 name = str(format(
"SVDDQM_StripMaxBinV6"));
480 title = str(format(
"SVD V-Strip MaxBin for layer 6 sensors"));
481 m_stripMaxBinV6 =
new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
486 for (
int i = 0; i < nSVDSensors; i++) {
487 VxdID id = gTools->getSensorIDFromSVDIndex(i);
489 int iLadder =
id.getLadderNumber();
490 int iSensor =
id.getSensorNumber();
491 VxdID sensorID(iLayer, iLadder, iSensor);
493 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
499 name = str(format(
"SVDDQM_%1%_FiredU") % sensorDescr);
500 title = str(format(
"SVD Sensor %1% Number of Fired U-Strips") % sensorDescr);
501 m_firedU[i] =
new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
502 m_firedU[i]->GetXaxis()->SetTitle(
"# fired strips");
503 m_firedU[i]->GetYaxis()->SetTitle(
"count");
505 name = str(format(
"SVDDQM_%1%_FiredV") % sensorDescr);
506 title = str(format(
"SVD Sensor %1% Number of Fired V-Strips") % sensorDescr);
507 m_firedV[i] =
new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
508 m_firedV[i]->GetXaxis()->SetTitle(
"# fired strips");
509 m_firedV[i]->GetYaxis()->SetTitle(
"count");
514 name = str(format(
"SVDDQM_%1%_ClustersU") % sensorDescr);
515 title = str(format(
"SVD Sensor %1% Number of U-Clusters") % sensorDescr);
516 m_clustersU[i] =
new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
517 m_clustersU[i]->GetXaxis()->SetTitle(
"# clusters");
520 name = str(format(
"SVDDQM_%1%_ClustersV") % sensorDescr);
521 title = str(format(
"SVD Sensor %1% Number of V-Clusters") % sensorDescr);
522 m_clustersV[i] =
new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
523 m_clustersV[i]->GetXaxis()->SetTitle(
"# clusters");
529 name = str(format(
"SVDDQM_%1%_ADCStripU") % sensorDescr);
530 title = str(format(
"SVD Sensor %1% U-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
531 m_stripSignalU[i] =
new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
535 name = str(format(
"SVDDQM_%1%_ADCStripV") % sensorDescr);
536 title = str(format(
"SVD Sensor %1% V-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
537 m_stripSignalV[i] =
new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
546 name = str(format(
"SVDDQM_%1%_ClusterChargeU") % sensorDescr);
547 title = str(format(
"SVD Sensor %1% U-Cluster Charge") % sensorDescr);
548 m_clusterChargeU[i] =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
552 name = str(format(
"SVDDQM_%1%_ClusterChargeV") % sensorDescr);
553 title = str(format(
"SVD Sensor %1% V-Cluster Charge") % sensorDescr);
554 m_clusterChargeV[i] =
new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
561 name = str(format(
"SVDDQM_%1%_ClusterSNRU") % sensorDescr);
562 title = str(format(
"SVD Sensor %1% U-Cluster SNR") % sensorDescr);
563 m_clusterSNRU[i] =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
567 name = str(format(
"SVDDQM_%1%_ClusterSNRV") % sensorDescr);
568 title = str(format(
"SVD Sensor %1% V-Cluster SNR") % sensorDescr);
569 m_clusterSNRV[i] =
new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
577 name = str(format(
"SVDDQM_%1%_StripCountU") % sensorDescr);
578 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number") % sensorDescr);
579 m_stripCountU[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
583 name = str(format(
"SVDDQM_%1%_StripCountV") % sensorDescr);
584 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number") % sensorDescr);
585 m_stripCountV[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
592 name = str(format(
"SVDDQM_%1%_OnlineZSStripCountU") % sensorDescr);
593 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number") % sensorDescr);
598 name = str(format(
"SVDDQM_%1%_OnlineZSStripCountV") % sensorDescr);
599 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number") % sensorDescr);
608 name = str(format(
"SVDDQM_%1%_Strip3CountU") % sensorDescr);
609 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
610 m_strip3CountU[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
614 name = str(format(
"SVDDQM_%1%_Strip3CountV") % sensorDescr);
615 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
616 m_strip3CountV[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
623 name = str(format(
"SVDDQM_%1%_OnlineZSStrip3CountU") % sensorDescr);
624 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
629 name = str(format(
"SVDDQM_%1%_OnlineZSStrip3CountV") % sensorDescr);
630 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
640 name = str(format(
"SVDDQM_%1%_Strip6CountU") % sensorDescr);
641 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
642 m_strip6CountU[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
646 name = str(format(
"SVDDQM_%1%_Strip6CountV") % sensorDescr);
647 title = str(format(
"SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
648 m_strip6CountV[i] =
new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
655 name = str(format(
"SVDDQM_%1%_OnlineZSStrip6CountU") % sensorDescr);
656 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
661 name = str(format(
"SVDDQM_%1%_OnlineZSStrip6CountV") % sensorDescr);
662 title = str(format(
"SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
672 name = str(format(
"SVDDQM_%1%_StripCountGroupId0U") % sensorDescr);
673 title = str(format(
"SVD Sensor %1% Integrated NumberFired U-Strip for group Id = 0 vs Strip Number") % sensorDescr);
678 name = str(format(
"SVDDQM_%1%_StripCountGroupId0V") % sensorDescr);
679 title = str(format(
"SVD Sensor %1% Integrated Number of Fired V-Strip for group Id = 0 vs Strip Number") % sensorDescr);
688 name = str(format(
"SVDDQM_%1%_ClusterSizeU") % sensorDescr);
689 title = str(format(
"SVD Sensor %1% U-Cluster Size") % sensorDescr);
690 m_clusterSizeU[i] =
new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
694 name = str(format(
"SVDDQM_%1%_ClusterSizeV") % sensorDescr);
695 title = str(format(
"SVD Sensor %1% V-Cluster Size") % sensorDescr);
696 m_clusterSizeV[i] =
new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
703 name = str(format(
"SVDDQM_%1%_ClusterTimeU") % sensorDescr);
704 Title = Form(
"SVD Sensor %s U-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
705 m_clusterTimeU[i] =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
709 name = str(format(
"SVDDQM_%1%_ClusterTimeV") % sensorDescr);
710 Title = Form(
"SVD Sensor %s V-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
711 m_clusterTimeV[i] =
new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
717 for (
int i = 0; i < nSVDChips; i++) {
718 VxdID id = gTools->getChipIDFromSVDIndex(i);
720 int iLadder =
id.getLadderNumber();
721 int iSensor =
id.getSensorNumber();
722 int iChip = gTools->getSVDChipNumber(
id);
723 int IsU = gTools->isSVDSideU(
id);
724 TString AxisTicks = Form(
"%i_%i_%i_u%i", iLayer, iLadder, iSensor, iChip);
726 AxisTicks = Form(
"%i_%i_%i_v%i", iLayer, iLadder, iSensor, iChip);
738 TDirectory* dirShowAll =
nullptr;
739 dirShowAll = oldDir->mkdir(
"SVDDQMAll");
746 for (
int i = 0; i < nSVDSensors; i++) {
747 VxdID id = gTools->getSensorIDFromSVDIndex(i);
749 int iLadder =
id.getLadderNumber();
750 int iSensor =
id.getSensorNumber();
751 VxdID sensorID(iLayer, iLadder, iSensor);
753 string sensorDescr = str(format(
"%1%_%2%_%3%") % iLayer % iLadder % iSensor);
757 name = str(format(
"SVD_%1%_StripHitmapU") % sensorDescr);
758 title = str(format(
"SVD Sensor %1% Strip Hitmap in U") % sensorDescr);
762 m_hitMapU[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
763 m_hitMapU[i]->GetYaxis()->SetTitle(
"timebin [time units]");
764 m_hitMapU[i]->GetZaxis()->SetTitle(
"hits");
766 name = str(format(
"SVD_%1%_StripHitmapV") % sensorDescr);
767 title = str(format(
"SVD Sensor %1% Strip Hitmap in V") % sensorDescr);
771 m_hitMapV[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
772 m_hitMapV[i]->GetYaxis()->SetTitle(
"timebin [time units]");
773 m_hitMapV[i]->GetZaxis()->SetTitle(
"hits");
778 name = str(format(
"SVD_%1%_HitmapClstU") % sensorDescr);
779 title = str(format(
"SVD Sensor %1% Hitmap Clusters in U") % sensorDescr);
781 m_hitMapUCl[i] =
new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
782 m_hitMapUCl[i]->GetXaxis()->SetTitle(
"u position [pitch units]");
785 name = str(format(
"SVD_%1%_HitmapClstV") % sensorDescr);
786 title = str(format(
"SVD Sensor %1% Hitmap Clusters in V") % sensorDescr);
788 m_hitMapVCl[i] =
new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
789 m_hitMapVCl[i]->GetXaxis()->SetTitle(
"v position [pitch units]");
805 if (gTools->getNumberOfSVDLayers() != 0) {
826 if (gTools->getNumberOfSVDLayers() == 0)
return;
837 while ((obj = nextH()))
838 if (obj->InheritsFrom(
"TH1")) {
840 TString tmp = (TString)obj->GetTitle();
841 Int_t pos = tmp.Last(
'~');
842 if (pos == -1) pos = tmp.Length() + 2;
844 TString title = tmp(0, pos - 2);
845 ((TH1F*)obj)->SetTitle(title + runID);
846 ((TH1F*)obj)->Reset();
858 if (!eventAccepted)
return;
869 if (gTools->getNumberOfSVDLayers() == 0)
return;
880 int firstSVDLayer = gTools->getFirstSVDLayer();
881 int lastSVDLayer = gTools->getLastSVDLayer();
882 int nSVDSensors = gTools->getNumberOfSVDSensors();
885 vector< set<int> > uStrips(nSVDSensors);
886 vector< set<int> > vStrips(nSVDSensors);
888 int iLayer = digitIn.getSensorID().getLayerNumber();
889 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
890 int iLadder = digitIn.getSensorID().getLadderNumber();
891 int iSensor = digitIn.getSensorID().getSensorNumber();
892 VxdID sensorID(iLayer, iLadder, iSensor);
893 int index = gTools->getSVDSensorIndex(sensorID);
895 if (digitIn.isUStrip()) {
913 uStrips.at(index).insert(digitIn.getCellID());
914 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
915 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE, Chip);
951 vStrips.at(index).insert(digitIn.getCellID());
952 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
953 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE, Chip);
974 for (
int i = 0; i < nSVDSensors; i++) {
975 if ((
m_firedU[i] !=
nullptr) && (uStrips[i].size() > 0))
976 m_firedU[i]->Fill(uStrips[i].size());
977 if ((
m_firedV[i] !=
nullptr) && (vStrips[i].size() > 0))
978 m_firedV[i]->Fill(vStrips[i].size());
983 if (storeNoZSSVDShaperDigits.
isValid())
985 int iLayer = digitIn.getSensorID().getLayerNumber();
986 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
987 int iLadder = digitIn.getSensorID().getLadderNumber();
988 int iSensor = digitIn.getSensorID().getSensorNumber();
989 VxdID sensorID(iLayer, iLadder, iSensor);
990 int index = gTools->getSVDSensorIndex(sensorID);
992 if (digitIn.isUStrip()) {
1001 if (nSamples == 3) {
1009 vector< set<int> > countsU(nSVDSensors);
1010 vector< set<int> > countsV(nSVDSensors);
1012 for (
const SVDCluster& cluster : storeSVDClusters) {
1014 int iLayer = cluster.getSensorID().getLayerNumber();
1015 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer))
continue;
1016 int iLadder = cluster.getSensorID().getLadderNumber();
1017 int iSensor = cluster.getSensorID().getSensorNumber();
1018 VxdID sensorID(iLayer, iLadder, iSensor);
1019 int index = gTools->getSVDSensorIndex(sensorID);
1022 float time = cluster.getClsTime();
1024 time = time -
m_svdEventInfo->getSVD2FTSWTimeShift(cluster.getFirstFrame());
1026 vector<int> vec = cluster.getTimeGroupId();
1027 auto minElement = min_element(vec.begin(), vec.end());
1029 if (vec.size() > 0) {
1030 groupId = *minElement;
1033 if (cluster.isUCluster()) {
1037 if (trgQuality == 1)
1039 if (trgQuality == 2)
1048 if (trgQuality == 1)
1050 if (trgQuality == 2)
1056 if (cluster.isUCluster()) {
1057 countsU.at(index).insert(SensorInfo.
getUCellID(cluster.getPosition()));
1058 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE,
1059 (
int)(SensorInfo.
getUCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1073 if (nSamples == 3) {
1082 if (nSamples == 3) {
1099 countsV.at(index).insert(SensorInfo.
getVCellID(cluster.getPosition()));
1100 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE,
1101 (
int)(SensorInfo.
getVCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1115 if (nSamples == 3) {
1124 if (nSamples == 3) {
1142 for (
int i = 0; i < nSVDSensors; i++) {
1143 if ((
m_clustersU[i] !=
nullptr) && (countsU[i].size() > 0))
1145 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.
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.
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()....
TH2F * m_clusterTime6GroupIdU
time group id for U side for coarse trigger
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.
TH2F * m_clusterTime6GroupIdV
time group id for V side for coarse trigger
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
StoreObjPtr< TRGSummary > m_objTrgSummary
Trigger Summary data object.
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_clusterTime3GroupIdU
time group id for U side for fine trigger
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.
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
TH2F * m_clusterTime3GroupIdV
time group id for V side for fine trigger
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-
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
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.