9#include <tracking/modules/roiFinding/svd/SVDROIDQMModule.h>
10#include <svd/dataobjects/SVDShaperDigit.h>
11#include <svd/dataobjects/SVDRecoDigit.h>
12#include <svd/dataobjects/SVDCluster.h>
13#include <tracking/dataobjects/ROIid.h>
14#include <tracking/dataobjects/SVDIntercept.h>
16#include <TDirectory.h>
34 , hInterDictionary(172, [](const
Belle2::
VxdID & vxdid) {
return (
size_t)vxdid.getID(); })
35, hROIDictionary(172, [](
const Belle2::VxdID& vxdid) {
return (
size_t)vxdid.getID(); })
36, hROIDictionaryEvt(172, [](
const Belle2::VxdID& vxdid) {
return (
size_t)vxdid.getID(); })
47 setDescription(
"Monitor of the ROIs creation on HLT");
48 setPropertyFlags(c_ParallelProcessingCertified);
50 addParam(
"SVDShaperDigitsName", m_SVDShaperDigitsName,
51 "name of the list of SVDShaperDigits", std::string(
""));
52 addParam(
"SVDRecoDigitsName", m_SVDRecoDigitsName,
53 "name of the list of SVDRecoDigits", std::string(
""));
54 addParam(
"SVDClustersName", m_SVDClustersName,
55 "name of the list of SVDClusters", std::string(
""));
57 addParam(
"InterceptsName", m_InterceptsName,
58 "name of the list of interceptions", std::string(
""));
60 addParam(
"ROIsName", m_ROIsName,
61 "name of the list of ROIs", std::string(
""));
63 addParam(
"specificLayer", m_specificLayer,
64 "Layer number, if you want the plots only for a specific SVD layer. If it is not a SVD layer (3, 4, 5, 6) than the plots for all SVD layers are produced. Default is (-1), i.e. plots for all SVD layers are produced.",
67 addParam(
"plotRecoDigits", m_plotRecoDigits,
68 "Set true to produce the plots for RecoDigits (false by default)", m_plotRecoDigits);
76 TDirectory* oldDir = gDirectory;
77 TDirectory* roiDir = oldDir->mkdir(
"SVDROIs");
81 hCellU =
new TH1F(
"hCellU",
"CellID U", 769, -0.5, 768.5);
82 hCellU->GetXaxis()->SetTitle(
"U cell ID");
83 hCellV =
new TH1F(
"hCellV",
"CellID V", 769, -0.5, 768.5);
84 hCellV->GetXaxis()->SetTitle(
"V cell ID");
87 hnInter =
new TH1F(
"hnInter",
"number of intercepts", 100, 0, 100);
90 hnROIs =
new TH1F(
"hnROIs",
"number of ROIs", 100, 0, 100);
91 harea =
new TH1F(
"harea",
"ROIs area", 100, 0, 100000);
92 hredFactor =
new TH1F(
"hredFactor",
"ROI reduction factor", 1000, 0, 1);
123 hCellU->Fill(it.getCellID());
125 hCellV->Fill(it.getCellID());
134 (it->second).value = 0;
137 double redFactor = 0;
144 const int nPixelsU = aSensorInfo.
getUCells();
145 const int nPixelsV = aSensorInfo.
getVCells();
147 int minU = it.getMinUid();
148 int minV = it.getMinVid();
149 int maxU = it.getMaxUid();
150 int maxV = it.getMaxVid();
152 int tmpROIarea = (maxU - minU) * (maxV - minV);
153 ROIarea += tmpROIarea;
154 redFactor += (double)tmpROIarea / (nPixelsU * nPixelsV *
m_numModules);
160 harea->Fill((
double)ROIarea);
167 aROIHistoAccumulateAndFill.
fill(aROIHistoAccumulateAndFill.
hPtr, aROIHistoAccumulateAndFill.
value);
185 std::set<Belle2::VxdID>::iterator itSvdLayers = svdLayers.begin();
191 itSvdLayers = svdLayers.begin();
193 B2INFO(
"No specific SVD layer (3,4,5,6) selected (m_specificLayer = " <<
m_specificLayer <<
194 "). Producing plots for all SVD layers.");
197 while (itSvdLayers != svdLayers.end()) {
200 std::set<Belle2::VxdID>::iterator itSvdLadders = svdLadders.begin();
202 while (itSvdLadders != svdLadders.end()) {
205 std::set<Belle2::VxdID>::iterator itSvdSensors = svdSensors.begin();
207 while (itSvdSensors != svdSensors.end()) {
213 const int nPixelsU = wSensorInfo.
getUCells();
214 const int nPixelsV = wSensorInfo.
getVCells();
215 std::string sensorid = std::to_string(itSvdSensors->getLayerNumber()) +
"_" + std::to_string(
216 itSvdSensors->getLadderNumber()) +
"_" +
217 std::to_string(itSvdSensors->getSensorNumber());
223 name =
"hNROIs_" + sensorid;
224 title =
"number of ROIs for sensor " + sensorid;
227 new TH1F(name.c_str(), title.c_str(), 25, 0, 25),
228 [](
const ROIid*,
double & val) {val++;},
229 [](TH1 * hPtr,
double & val) { hPtr->Fill(val); },
241 name =
"hCoorU_" + sensorid;
242 title =
"U coordinate of the extrapolation in U for sensor " + sensorid;
247 new TH1F(name.c_str(), title.c_str(), 100, -5, 5),
248 [](TH1 * hPtr,
const SVDIntercept * inter) { hPtr->Fill(inter->getCoorU()); }
253 name =
"hCoorV_" + sensorid;
254 title =
"V coordinate of the extrapolation in V for sensor " + sensorid;
259 new TH1F(name.c_str(), title.c_str(), 100, -5, 5),
260 [](TH1 * hPtr,
const SVDIntercept * inter) { hPtr->Fill(inter->getCoorV()); }
266 name =
"hCoorU_vs_CoorV_" + sensorid;
267 title =
"U vs V intercept (cm) " + sensorid;
268 tmp2D =
new TH2F(name.c_str(), title.c_str(), 100, -5, 5, 100, -5, 5);
269 tmp2D->GetXaxis()->SetTitle(
"intercept U coor (cm)");
270 tmp2D->GetYaxis()->SetTitle(
"intercept V coor (cm)");
283 name =
"hStatErrU_" + sensorid;
284 title =
"stat error of the extrapolation in U for sensor " + sensorid;
289 new TH1F(name.c_str(), title.c_str(), 100, 0, 0.35),
290 [](TH1 * hPtr,
const SVDIntercept * inter) { hPtr->Fill(inter->getSigmaU()); }
294 name =
"hStatErrV_" + sensorid;
295 title =
"stat error of the extrapolation in V for sensor " + sensorid;
300 new TH1F(name.c_str(), title.c_str(), 100, 0, 0.35),
301 [](TH1 * hPtr,
const SVDIntercept * inter) { hPtr->Fill(inter->getSigmaV()); }
307 name =
"hResidU_" + sensorid;
308 title =
"U residuals = intercept - digit, for sensor " + sensorid;
309 tmp1D =
new TH1F(name.c_str(), title.c_str(), 1000, -5, 5);
318 if ((
int)it.getSensorID() == (
int)inter->
getSensorID()) {
320 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
321 hPtr->Fill(inter->getCoorU() - aSensorInfo.getUCellPosition(it.getCellID()));
329 name =
"hResidV_" + sensorid;
330 title =
"V residuals = intercept - digit, for sensor " + sensorid;
331 tmp1D =
new TH1F(name.c_str(), title.c_str(), 1000, -5, 5);
340 if ((
int)it.getSensorID() == (
int)inter->
getSensorID()) {
341 if (!it.isUStrip()) {
342 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
343 hPtr->Fill(inter->getCoorV() - aSensorInfo.getVCellPosition(it.getCellID()));
353 name =
"hResidU_vs_CoorU_" + sensorid;
354 title =
"U residual (cm) vs coor U (cm) " + sensorid;
355 tmp2D =
new TH2F(name.c_str(), title.c_str(), 1000, -5, 5, 1000, -5, 5);
356 tmp2D->GetYaxis()->SetTitle(
"U resid (cm)");
357 tmp2D->GetXaxis()->SetTitle(
"U coor (cm)");
366 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && it.isUStrip()) {
367 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
368 double resid = inter->getCoorU() - aSensorInfo.getUCellPosition(it.getCellID());
369 hPtr->Fill(inter->getCoorU(), resid);
376 name =
"hResidV_vs_CoorV_" + sensorid;
377 title =
"V residual (cm) vs coor V (cm) " + sensorid;
378 tmp2D =
new TH2F(name.c_str(), title.c_str(), 1000, -5, 5, 1000, -5, 5);
379 tmp2D->GetYaxis()->SetTitle(
"V resid (cm)");
380 tmp2D->GetXaxis()->SetTitle(
"V coor (cm)");
389 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (!it.isUStrip())) {
390 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
391 double resid = inter->getCoorV() - aSensorInfo.getVCellPosition(it.getCellID());
392 hPtr->Fill(inter->getCoorV(), resid);
403 name =
"hResidU_vs_charge_" + sensorid;
404 title =
"U residual (cm) vs charge " + sensorid;
405 tmp2D =
new TH2F(name.c_str(), title.c_str(), 250, 0, 250, 100, -5, 5);
406 tmp2D->GetYaxis()->SetTitle(
"U resid (cm)");
407 tmp2D->GetXaxis()->SetTitle(
"charge");
416 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (it.isUStrip())) {
417 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
418 double resid = inter->getCoorU() - aSensorInfo.getUCellPosition(it.getCellID());
419 hPtr->Fill(it.getCharge(), resid);
426 name =
"hResidV_vs_charge_" + sensorid;
427 title =
"V residual (cm) vs charge " + sensorid;
428 tmp2D =
new TH2F(name.c_str(), title.c_str(), 250, 0, 250, 100, -5, 5);
429 tmp2D->GetYaxis()->SetTitle(
"V resid (cm)");
430 tmp2D->GetXaxis()->SetTitle(
"charge");
439 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (!it.isUStrip())) {
440 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
441 double resid = inter->getCoorV() - aSensorInfo.getVCellPosition(it.getCellID());
442 hPtr->Fill(it.getCharge(), resid);
451 name =
"hClusterResidU_" + sensorid;
452 title =
"Cluster U residuals = intercept - cluster, for sensor " + sensorid;
453 tmp1D =
new TH1F(name.c_str(), title.c_str(), 1000, -5, 5);
462 if ((
int)it.getSensorID() == (
int)inter->
getSensorID()) {
463 if (it.isUCluster()) {
464 hPtr->Fill(inter->getCoorU() - it.getPosition(inter->getCoorV()));
472 name =
"hClusterResidV_" + sensorid;
473 title =
"Cluster V residuals = intercept - cluster, for sensor " + sensorid;
474 tmp1D =
new TH1F(name.c_str(), title.c_str(), 1000, -5, 5);
483 if ((
int)it.getSensorID() == (
int)inter->
getSensorID()) {
484 if (!it.isUCluster()) {
485 hPtr->Fill(inter->getCoorV() - it.getPosition());
494 name =
"hClusterResidU_vs_CoorU_" + sensorid;
495 title =
"Cluster U residual (cm) vs coor U (cm) " + sensorid;
496 tmp2D =
new TH2F(name.c_str(), title.c_str(), 1000, -5, 5, 1000, -5, 5);
497 tmp2D->GetYaxis()->SetTitle(
"Cluster U resid (cm)");
498 tmp2D->GetXaxis()->SetTitle(
"U coor (cm)");
499 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
506 for (
auto& it : this->m_SVDClusters)
507 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && it.isUCluster()) {
508 double resid = inter->getCoorU() - it.getPosition(inter->getCoorV());
509 hPtr->Fill(inter->getCoorU(), resid);
516 name =
"hClusterResidV_vs_CoorV_" + sensorid;
517 title =
"Cluster V residual (cm) vs coor V (cm) " + sensorid;
518 tmp2D =
new TH2F(name.c_str(), title.c_str(), 1000, -5, 5, 1000, -5, 5);
519 tmp2D->GetYaxis()->SetTitle(
"Cluster V resid (cm)");
520 tmp2D->GetXaxis()->SetTitle(
"V coor (cm)");
521 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
528 for (
auto& it : this->m_SVDClusters)
529 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (!it.isUCluster())) {
530 double resid = inter->getCoorV() - it.getPosition();
531 hPtr->Fill(inter->getCoorV(), resid);
540 name =
"hClusterResidU_vs_charge_" + sensorid;
541 title =
"Cluster U residual (cm) vs charge " + sensorid;
542 tmp2D =
new TH2F(name.c_str(), title.c_str(), 250, 0, 250, 100, -5, 5);
543 tmp2D->GetYaxis()->SetTitle(
"U resid (cm)");
544 tmp2D->GetXaxis()->SetTitle(
"charge (ke-)");
545 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
552 for (
auto& it : this->m_SVDClusters)
553 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (it.isUCluster())) {
554 double resid = inter->getCoorU() - it.getPosition(inter->getCoorV());
555 hPtr->Fill(it.getCharge() / 1000., resid);
562 name =
"hClusterResidV_vs_charge_" + sensorid;
563 title =
"Cluster V residual (cm) vs charge " + sensorid;
564 tmp2D =
new TH2F(name.c_str(), title.c_str(), 250, 0, 250, 100, -5, 5);
565 tmp2D->GetYaxis()->SetTitle(
"Cluster V resid (cm)");
566 tmp2D->GetXaxis()->SetTitle(
"charge (ke-)");
567 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
574 for (
auto& it : this->m_SVDClusters)
575 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (!it.isUCluster())) {
576 double resid = inter->getCoorV() - it.getPosition();
577 hPtr->Fill(it.getCharge() / 1000., resid);
585 name =
"hClusterResidU_vs_time_" + sensorid;
586 title =
"Cluster U residual (cm) vs time " + sensorid;
587 tmp2D =
new TH2F(name.c_str(), title.c_str(), 400, -200, 200, 100, -5, 5);
588 tmp2D->GetYaxis()->SetTitle(
"U resid (cm)");
589 tmp2D->GetXaxis()->SetTitle(
"time (ns)");
590 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
597 for (
auto& it : this->m_SVDClusters)
598 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (it.isUCluster())) {
599 double resid = inter->getCoorU() - it.getPosition(inter->getCoorV());
600 hPtr->Fill(it.getClsTime(), resid);
607 name =
"hClusterResidV_vs_time_" + sensorid;
608 title =
"Cluster V residual (cm) vs time " + sensorid;
609 tmp2D =
new TH2F(name.c_str(), title.c_str(), 400, -200, 200, 100, -5, 5);
610 tmp2D->GetYaxis()->SetTitle(
"Cluster V resid (cm)");
611 tmp2D->GetXaxis()->SetTitle(
"time (ns)");
612 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
619 for (
auto& it : this->m_SVDClusters)
620 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (!it.isUCluster())) {
621 double resid = inter->getCoorV() - it.getPosition();
622 hPtr->Fill(it.getClsTime(), resid);
630 name =
"hCoorU_vs_UDigit_" + sensorid;
631 title =
"U intercept (cm) vs U Digit (ID) " + sensorid;
632 tmp2D =
new TH2F(name.c_str(), title.c_str(), 1000, -5, 5, 1000, -5, 5);
633 tmp2D->GetXaxis()->SetTitle(
"intercept U coor (cm)");
634 tmp2D->GetYaxis()->SetTitle(
"digit U coor (cm)");
635 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
642 for (
auto& it : this->m_SVDShaperDigits)
643 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (it.isUStrip())) {
644 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
645 hPtr->Fill(inter->getCoorU(), aSensorInfo.getUCellPosition(it.getCellID()));
653 name =
"hCoorV_vs_VDigit_" + sensorid;
654 title =
"V intercept (cm) vs V Digit (ID) " + sensorid;
655 tmp2D =
new TH2F(name.c_str(), title.c_str(), 1000, -5, 5, 1000, -5, 5);
656 tmp2D->GetXaxis()->SetTitle(
"intercept V coor (cm)");
657 tmp2D->GetYaxis()->SetTitle(
"digi V coor (cm)");
658 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
665 for (
auto& it : this->m_SVDShaperDigits) {
666 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (!it.isUStrip())) {
667 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
668 hPtr->Fill(inter->getCoorV(), aSensorInfo.getVCellPosition(it.getCellID()));
686 name =
"hminU_" + sensorid;
687 title =
"ROI min in U for sensor " + sensorid;
688 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
692 new TH1F(name.c_str(), title.c_str(), nPixelsU, 0, nPixelsU),
693 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill(roi->getMinUid()); }
697 name =
"hminV_" + sensorid;
698 title =
"ROI min in V for sensor " + sensorid;
699 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
703 new TH1F(name.c_str(), title.c_str(), nPixelsV, 0, nPixelsV),
704 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill(roi->getMinVid()); }
710 name =
"hmaxU_" + sensorid;
711 title =
"ROI max in U for sensor " + sensorid;
712 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
716 new TH1F(name.c_str(), title.c_str(), nPixelsU, 0, nPixelsU),
717 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill(roi->getMaxUid()); }
721 name =
"hmaxV_" + sensorid;
722 title =
"ROI max in V for sensor " + sensorid;
723 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
727 new TH1F(name.c_str(), title.c_str(), nPixelsV, 0, nPixelsV),
728 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill(roi->getMaxVid()); }
735 name =
"hwidthU_" + sensorid;
736 title =
"ROI width in U for sensor " + sensorid;
737 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
741 new TH1F(name.c_str(), title.c_str(), nPixelsU, 0, nPixelsU),
742 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill(roi->getMaxUid() - roi->getMinUid()); }
746 name =
"hwidthV_" + sensorid;
747 title =
"ROI width in V for sensor " + sensorid;
748 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
752 new TH1F(name.c_str(), title.c_str(), nPixelsV, 0, nPixelsV),
753 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill(roi->getMaxVid() - roi->getMinVid()); }
759 name =
"hROIcenter_" + sensorid;
760 title =
"ROI center " + sensorid;
761 tmp2D =
new TH2F(name.c_str(), title.c_str(), nPixelsU, 0, nPixelsU, nPixelsV, 0, nPixelsV);
762 tmp2D->GetXaxis()->SetTitle(
" U (ID)");
763 tmp2D->GetYaxis()->SetTitle(
" V (ID)");
764 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
769 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill((roi->getMaxUid() + roi->getMinUid()) / 2, (roi->getMaxVid() + roi->getMinVid()) / 2); }
790 for (
auto it = its.first; it != its.second; ++it) {
792 aInterHistoAndFill.second(aInterHistoAndFill.first, inter);
802 for (
auto it = its.first; it != its.second; ++it) {
804 aROIHistoAndFill.second(aROIHistoAndFill.first, roi);
808 for (
auto it = itsEvt.first; it != itsEvt.second; ++it)
809 (it->second).accumulate(roi, (it->second).value);
819 delete &(it->second);
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
ROIid stores the U and V ids and the sensor id of the Region Of Interest.
SVDIntercept stores the U,V coordinates and uncertainties of the intersection of a track with an SVD ...
std::unordered_multimap< Belle2::VxdID, ROIHistoAccumulateAndFill &, std::function< size_t(const Belle2::VxdID &) > > hROIDictionaryEvt
map of histograms to be filled once per event
int m_numModules
number of hardware modules
std::unordered_multimap< Belle2::VxdID, InterHistoAndFill, std::function< size_t(const Belle2::VxdID &)> > hInterDictionary
map of histograms to be filled once per intercept
std::pair< TH1 *, std::function< void(TH1 *, const SVDIntercept *) > > InterHistoAndFill
typedef: histograms to be filled once per intercept + filling function
std::string m_InterceptsName
Name of the SVDIntercept StoreArray.
StoreArray< SVDCluster > m_SVDClusters
svd cluster store array
bool m_plotRecoDigits
Produce plots for SVDRecoDigits when True.
VXD::GeoCache & m_geoCache
the geo cache instance
TH1F * hnROIs
number of ROIs
int n_events
number of events
void initialize() override
register histograms
TDirectory * m_ROIDir
ROI directory in the root file.
void fillSensorInterHistos(const SVDIntercept *inter)
fill histograms per sensor, filled once per intercept
void createHistosDictionaries()
create the dictionary
std::string m_SVDRecoDigitsName
reco digit list name
std::string m_SVDClustersName
cluster list name
void fillSensorROIHistos(const ROIid *roi)
fill histograms per sensor, filled once per ROI
void event() override
fill per-event histograms
void endRun() override
fill per-run histograms
SVDROIDQMModule()
Constructor defining the parameters.
int m_specificLayer
specific layer selected for which to produce the plots.
std::pair< TH1 *, std::function< void(TH1 *, const ROIid *) > > ROIHistoAndFill
typedef: histograms to be filled once per roi + filling function
TH1F * hredFactor
reduction factor
StoreArray< SVDShaperDigit > m_SVDShaperDigits
shaper digit store array
StoreArray< SVDRecoDigit > m_SVDRecoDigits
reco digit store array
std::string m_ROIsName
Name of the ROIid StoreArray.
TH1F * hnInter
number of intercpets
TDirectory * m_InterDir
intercepts directory in the root file
std::unordered_multimap< Belle2::VxdID, ROIHistoAndFill, std::function< size_t(const Belle2::VxdID &)> > hROIDictionary
map of histograms to be filled once per roi
StoreArray< SVDIntercept > m_Intercepts
SVDIntercept Store Arrays.
std::string m_SVDShaperDigitsName
shaper digit list name
void defineHisto() override
define histograms
StoreArray< ROIid > m_ROIs
ROis store array.
bool isOptional(const std::string &name="")
Tell the DataStore about an optional input.
double getCoorV() const
return the V coordinate of the intercept
VxdID::baseType getSensorID() const
return the sensor ID
double getCoorU() const
return the U coordinate of the intercept
const std::set< Belle2::VxdID > getLayers(SensorInfoBase::SensorType sensortype=SensorInfoBase::VXD)
Return a set of all known Layers.
const SensorInfoBase & getSensorInfo(Belle2::VxdID id) const
Return a referecne to the SensorInfo of a given SensorID.
const std::set< Belle2::VxdID > & getSensors(Belle2::VxdID ladder) const
Return a set of all sensor IDs belonging to a given ladder.
const std::set< Belle2::VxdID > & getLadders(Belle2::VxdID layer) const
Return a set of all ladder IDs belonging to a given layer.
Base class to provide Sensor Information for PXD and SVD.
int getVCells() const
Return number of pixel/strips in v direction.
int getUCells() const
Return number of pixel/strips in u direction.
Class to uniquely identify a any structure of the PXD and SVD.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.
struct: histograms to be filled once per event + filling function + accumulate function
std::function< void(TH1 *, double &) > fill
fill function
TH1 * hPtr
histogram pointer
double value
value used to fill