9 #include <tracking/modules/svdROIFinder/SVDROIDQMModule.h>
11 #include <TDirectory.h>
29 , hInterDictionary(172, [](const
Belle2::
VxdID & vxdid) {
return (
size_t)vxdid.getID(); })
30 , hROIDictionary(172, [](
const Belle2::VxdID& vxdid) {
return (
size_t)vxdid.getID(); })
31 , hROIDictionaryEvt(172, [](
const Belle2::VxdID& vxdid) {
return (
size_t)vxdid.getID(); })
42 setDescription(
"Monitor of the ROIs creation on HLT");
43 setPropertyFlags(c_ParallelProcessingCertified);
45 addParam(
"SVDShaperDigitsName", m_SVDShaperDigitsName,
46 "name of the list of SVDShaperDigits", std::string(
""));
47 addParam(
"SVDRecoDigitsName", m_SVDRecoDigitsName,
48 "name of the list of SVDRecoDigits", std::string(
""));
49 addParam(
"SVDClustersName", m_SVDClustersName,
50 "name of the list of SVDClusters", std::string(
""));
52 addParam(
"InterceptsName", m_InterceptsName,
53 "name of the list of interceptions", std::string(
""));
55 addParam(
"ROIsName", m_ROIsName,
56 "name of the list of ROIs", std::string(
""));
58 addParam(
"specificLayer", m_specificLayer,
59 "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.",
62 addParam(
"plotRecoDigits", m_plotRecoDigits,
63 "Set true to produce the plots for RecoDigits (false by default)", m_plotRecoDigits);
71 TDirectory* oldDir = gDirectory;
72 TDirectory* roiDir = oldDir->mkdir(
"SVDROIs");
76 hCellU =
new TH1F(
"hCellU",
"CellID U", 769, -0.5, 768.5);
77 hCellU->GetXaxis()->SetTitle(
"U cell ID");
78 hCellV =
new TH1F(
"hCellV",
"CellID V", 769, -0.5, 768.5);
79 hCellV->GetXaxis()->SetTitle(
"V cell ID");
82 hnInter =
new TH1F(
"hnInter",
"number of intercepts", 100, 0, 100);
85 hnROIs =
new TH1F(
"hnROIs",
"number of ROIs", 100, 0, 100);
86 harea =
new TH1F(
"harea",
"ROIs area", 100, 0, 100000);
87 hredFactor =
new TH1F(
"hredFactor",
"ROI reduction factor", 1000, 0, 1);
118 hCellU->Fill(it.getCellID());
120 hCellV->Fill(it.getCellID());
129 (it->second).value = 0;
132 double redFactor = 0;
139 const int nPixelsU = aSensorInfo.
getUCells();
140 const int nPixelsV = aSensorInfo.
getVCells();
142 int minU = it.getMinUid();
143 int minV = it.getMinVid();
144 int maxU = it.getMaxUid();
145 int maxV = it.getMaxVid();
147 int tmpROIarea = (maxU - minU) * (maxV - minV);
148 ROIarea += tmpROIarea;
149 redFactor += (double)tmpROIarea / (nPixelsU * nPixelsV *
m_numModules);
155 harea->Fill((
double)ROIarea);
162 aROIHistoAccumulateAndFill.
fill(aROIHistoAccumulateAndFill.
hPtr, aROIHistoAccumulateAndFill.
value);
180 std::set<Belle2::VxdID>::iterator itSvdLayers = svdLayers.begin();
186 itSvdLayers = svdLayers.begin();
188 B2INFO(
"No specific SVD layer (3,4,5,6) selected (m_specificLayer = " <<
m_specificLayer <<
189 "). Producing plots for all SVD layers.");
192 while (itSvdLayers != svdLayers.end()) {
195 std::set<Belle2::VxdID>::iterator itSvdLadders = svdLadders.begin();
197 while (itSvdLadders != svdLadders.end()) {
200 std::set<Belle2::VxdID>::iterator itSvdSensors = svdSensors.begin();
202 while (itSvdSensors != svdSensors.end()) {
208 const int nPixelsU = wSensorInfo.
getUCells();
209 const int nPixelsV = wSensorInfo.
getVCells();
210 std::string sensorid = std::to_string(itSvdSensors->getLayerNumber()) +
"_" + std::to_string(
211 itSvdSensors->getLadderNumber()) +
"_" +
212 std::to_string(itSvdSensors->getSensorNumber());
218 name =
"hNROIs_" + sensorid;
219 title =
"number of ROIs for sensor " + sensorid;
222 new TH1F(name.c_str(), title.c_str(), 25, 0, 25),
223 [](
const ROIid*,
double & val) {val++;},
224 [](TH1 * hPtr,
double & val) { hPtr->Fill(val); },
236 name =
"hCoorU_" + sensorid;
237 title =
"U coordinate of the extrapolation in U for sensor " + sensorid;
242 new TH1F(name.c_str(), title.c_str(), 100, -5, 5),
243 [](TH1 * hPtr,
const SVDIntercept * inter) { hPtr->Fill(inter->getCoorU()); }
248 name =
"hCoorV_" + sensorid;
249 title =
"V coordinate of the extrapolation in V for sensor " + sensorid;
254 new TH1F(name.c_str(), title.c_str(), 100, -5, 5),
255 [](TH1 * hPtr,
const SVDIntercept * inter) { hPtr->Fill(inter->getCoorV()); }
261 name =
"hCoorU_vs_CoorV_" + sensorid;
262 title =
"U vs V intercept (cm) " + sensorid;
263 tmp2D =
new TH2F(name.c_str(), title.c_str(), 100, -5, 5, 100, -5, 5);
264 tmp2D->GetXaxis()->SetTitle(
"intercept U coor (cm)");
265 tmp2D->GetYaxis()->SetTitle(
"intercept V coor (cm)");
278 name =
"hStatErrU_" + sensorid;
279 title =
"stat error of the extrapolation in U for sensor " + sensorid;
284 new TH1F(name.c_str(), title.c_str(), 100, 0, 0.35),
285 [](TH1 * hPtr,
const SVDIntercept * inter) { hPtr->Fill(inter->getSigmaU()); }
289 name =
"hStatErrV_" + sensorid;
290 title =
"stat error of the extrapolation in V for sensor " + sensorid;
295 new TH1F(name.c_str(), title.c_str(), 100, 0, 0.35),
296 [](TH1 * hPtr,
const SVDIntercept * inter) { hPtr->Fill(inter->getSigmaV()); }
302 name =
"hResidU_" + sensorid;
303 title =
"U residuals = intercept - digit, for sensor " + sensorid;
304 tmp1D =
new TH1F(name.c_str(), title.c_str(), 1000, -5, 5);
313 if ((
int)it.getSensorID() == (
int)inter->
getSensorID()) {
315 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
316 hPtr->Fill(inter->getCoorU() - aSensorInfo.getUCellPosition(it.getCellID()));
324 name =
"hResidV_" + sensorid;
325 title =
"V residuals = intercept - digit, for sensor " + sensorid;
326 tmp1D =
new TH1F(name.c_str(), title.c_str(), 1000, -5, 5);
335 if ((
int)it.getSensorID() == (
int)inter->
getSensorID()) {
336 if (!it.isUStrip()) {
337 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
338 hPtr->Fill(inter->getCoorV() - aSensorInfo.getVCellPosition(it.getCellID()));
348 name =
"hResidU_vs_CoorU_" + sensorid;
349 title =
"U residual (cm) vs coor U (cm) " + sensorid;
350 tmp2D =
new TH2F(name.c_str(), title.c_str(), 1000, -5, 5, 1000, -5, 5);
351 tmp2D->GetYaxis()->SetTitle(
"U resid (cm)");
352 tmp2D->GetXaxis()->SetTitle(
"U coor (cm)");
361 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && it.isUStrip()) {
362 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
363 double resid = inter->getCoorU() - aSensorInfo.getUCellPosition(it.getCellID());
364 hPtr->Fill(inter->getCoorU(), resid);
371 name =
"hResidV_vs_CoorV_" + sensorid;
372 title =
"V residual (cm) vs coor V (cm) " + sensorid;
373 tmp2D =
new TH2F(name.c_str(), title.c_str(), 1000, -5, 5, 1000, -5, 5);
374 tmp2D->GetYaxis()->SetTitle(
"V resid (cm)");
375 tmp2D->GetXaxis()->SetTitle(
"V coor (cm)");
384 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (!it.isUStrip())) {
385 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
386 double resid = inter->getCoorV() - aSensorInfo.getVCellPosition(it.getCellID());
387 hPtr->Fill(inter->getCoorV(), resid);
398 name =
"hResidU_vs_charge_" + sensorid;
399 title =
"U residual (cm) vs charge " + sensorid;
400 tmp2D =
new TH2F(name.c_str(), title.c_str(), 250, 0, 250, 100, -5, 5);
401 tmp2D->GetYaxis()->SetTitle(
"U resid (cm)");
402 tmp2D->GetXaxis()->SetTitle(
"charge");
411 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (it.isUStrip())) {
412 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
413 double resid = inter->getCoorU() - aSensorInfo.getUCellPosition(it.getCellID());
414 hPtr->Fill(it.getCharge(), resid);
421 name =
"hResidV_vs_charge_" + sensorid;
422 title =
"V residual (cm) vs charge " + sensorid;
423 tmp2D =
new TH2F(name.c_str(), title.c_str(), 250, 0, 250, 100, -5, 5);
424 tmp2D->GetYaxis()->SetTitle(
"V resid (cm)");
425 tmp2D->GetXaxis()->SetTitle(
"charge");
434 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (!it.isUStrip())) {
435 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
436 double resid = inter->getCoorV() - aSensorInfo.getVCellPosition(it.getCellID());
437 hPtr->Fill(it.getCharge(), resid);
446 name =
"hClusterResidU_" + sensorid;
447 title =
"Cluster U residuals = intercept - cluster, for sensor " + sensorid;
448 tmp1D =
new TH1F(name.c_str(), title.c_str(), 1000, -5, 5);
457 if ((
int)it.getSensorID() == (
int)inter->
getSensorID()) {
458 if (it.isUCluster()) {
459 hPtr->Fill(inter->getCoorU() - it.getPosition(inter->getCoorV()));
467 name =
"hClusterResidV_" + sensorid;
468 title =
"Cluster V residuals = intercept - cluster, for sensor " + sensorid;
469 tmp1D =
new TH1F(name.c_str(), title.c_str(), 1000, -5, 5);
478 if ((
int)it.getSensorID() == (
int)inter->
getSensorID()) {
479 if (!it.isUCluster()) {
480 hPtr->Fill(inter->getCoorV() - it.getPosition());
489 name =
"hClusterResidU_vs_CoorU_" + sensorid;
490 title =
"Cluster U residual (cm) vs coor U (cm) " + sensorid;
491 tmp2D =
new TH2F(name.c_str(), title.c_str(), 1000, -5, 5, 1000, -5, 5);
492 tmp2D->GetYaxis()->SetTitle(
"Cluster U resid (cm)");
493 tmp2D->GetXaxis()->SetTitle(
"U coor (cm)");
494 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
501 for (
auto& it : this->m_SVDClusters)
502 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && it.isUCluster()) {
503 double resid = inter->getCoorU() - it.getPosition(inter->getCoorV());
504 hPtr->Fill(inter->getCoorU(), resid);
511 name =
"hClusterResidV_vs_CoorV_" + sensorid;
512 title =
"Cluster V residual (cm) vs coor V (cm) " + sensorid;
513 tmp2D =
new TH2F(name.c_str(), title.c_str(), 1000, -5, 5, 1000, -5, 5);
514 tmp2D->GetYaxis()->SetTitle(
"Cluster V resid (cm)");
515 tmp2D->GetXaxis()->SetTitle(
"V coor (cm)");
516 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
523 for (
auto& it : this->m_SVDClusters)
524 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (!it.isUCluster())) {
525 double resid = inter->getCoorV() - it.getPosition();
526 hPtr->Fill(inter->getCoorV(), resid);
535 name =
"hClusterResidU_vs_charge_" + sensorid;
536 title =
"Cluster U residual (cm) vs charge " + sensorid;
537 tmp2D =
new TH2F(name.c_str(), title.c_str(), 250, 0, 250, 100, -5, 5);
538 tmp2D->GetYaxis()->SetTitle(
"U resid (cm)");
539 tmp2D->GetXaxis()->SetTitle(
"charge (ke-)");
540 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
547 for (
auto& it : this->m_SVDClusters)
548 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (it.isUCluster())) {
549 double resid = inter->getCoorU() - it.getPosition(inter->getCoorV());
550 hPtr->Fill(it.getCharge() / 1000., resid);
557 name =
"hClusterResidV_vs_charge_" + sensorid;
558 title =
"Cluster V residual (cm) vs charge " + sensorid;
559 tmp2D =
new TH2F(name.c_str(), title.c_str(), 250, 0, 250, 100, -5, 5);
560 tmp2D->GetYaxis()->SetTitle(
"Cluster V resid (cm)");
561 tmp2D->GetXaxis()->SetTitle(
"charge (ke-)");
562 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
569 for (
auto& it : this->m_SVDClusters)
570 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (!it.isUCluster())) {
571 double resid = inter->getCoorV() - it.getPosition();
572 hPtr->Fill(it.getCharge() / 1000., resid);
580 name =
"hClusterResidU_vs_time_" + sensorid;
581 title =
"Cluster U residual (cm) vs time " + sensorid;
582 tmp2D =
new TH2F(name.c_str(), title.c_str(), 400, -200, 200, 100, -5, 5);
583 tmp2D->GetYaxis()->SetTitle(
"U resid (cm)");
584 tmp2D->GetXaxis()->SetTitle(
"time (ns)");
585 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
592 for (
auto& it : this->m_SVDClusters)
593 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (it.isUCluster())) {
594 double resid = inter->getCoorU() - it.getPosition(inter->getCoorV());
595 hPtr->Fill(it.getClsTime(), resid);
602 name =
"hClusterResidV_vs_time_" + sensorid;
603 title =
"Cluster V residual (cm) vs time " + sensorid;
604 tmp2D =
new TH2F(name.c_str(), title.c_str(), 400, -200, 200, 100, -5, 5);
605 tmp2D->GetYaxis()->SetTitle(
"Cluster V resid (cm)");
606 tmp2D->GetXaxis()->SetTitle(
"time (ns)");
607 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
614 for (
auto& it : this->m_SVDClusters)
615 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (!it.isUCluster())) {
616 double resid = inter->getCoorV() - it.getPosition();
617 hPtr->Fill(it.getClsTime(), resid);
625 name =
"hCoorU_vs_UDigit_" + sensorid;
626 title =
"U intercept (cm) vs U Digit (ID) " + sensorid;
627 tmp2D =
new TH2F(name.c_str(), title.c_str(), 1000, -5, 5, 1000, -5, 5);
628 tmp2D->GetXaxis()->SetTitle(
"intercept U coor (cm)");
629 tmp2D->GetYaxis()->SetTitle(
"digit U coor (cm)");
630 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
637 for (
auto& it : this->m_SVDShaperDigits)
638 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (it.isUStrip())) {
639 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
640 hPtr->Fill(inter->getCoorU(), aSensorInfo.getUCellPosition(it.getCellID()));
648 name =
"hCoorV_vs_VDigit_" + sensorid;
649 title =
"V intercept (cm) vs V Digit (ID) " + sensorid;
650 tmp2D =
new TH2F(name.c_str(), title.c_str(), 1000, -5, 5, 1000, -5, 5);
651 tmp2D->GetXaxis()->SetTitle(
"intercept V coor (cm)");
652 tmp2D->GetYaxis()->SetTitle(
"digi V coor (cm)");
653 hInterDictionary.insert(std::pair< Belle2::VxdID, InterHistoAndFill >
660 for (
auto& it : this->m_SVDShaperDigits) {
661 if (((
int)it.getSensorID() == (
int)inter->
getSensorID()) && (!it.isUStrip())) {
662 const VXD::SensorInfoBase& aSensorInfo = m_geoCache.getSensorInfo(it.getSensorID());
663 hPtr->Fill(inter->getCoorV(), aSensorInfo.getVCellPosition(it.getCellID()));
681 name =
"hminU_" + sensorid;
682 title =
"ROI min in U for sensor " + sensorid;
683 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
687 new TH1F(name.c_str(), title.c_str(), nPixelsU, 0, nPixelsU),
688 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill(roi->getMinUid()); }
692 name =
"hminV_" + sensorid;
693 title =
"ROI min in V for sensor " + sensorid;
694 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
698 new TH1F(name.c_str(), title.c_str(), nPixelsV, 0, nPixelsV),
699 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill(roi->getMinVid()); }
705 name =
"hmaxU_" + sensorid;
706 title =
"ROI max in U for sensor " + sensorid;
707 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
711 new TH1F(name.c_str(), title.c_str(), nPixelsU, 0, nPixelsU),
712 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill(roi->getMaxUid()); }
716 name =
"hmaxV_" + sensorid;
717 title =
"ROI max in V for sensor " + sensorid;
718 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
722 new TH1F(name.c_str(), title.c_str(), nPixelsV, 0, nPixelsV),
723 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill(roi->getMaxVid()); }
730 name =
"hwidthU_" + sensorid;
731 title =
"ROI width in U for sensor " + sensorid;
732 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
736 new TH1F(name.c_str(), title.c_str(), nPixelsU, 0, nPixelsU),
737 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill(roi->getMaxUid() - roi->getMinUid()); }
741 name =
"hwidthV_" + sensorid;
742 title =
"ROI width in V for sensor " + sensorid;
743 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
747 new TH1F(name.c_str(), title.c_str(), nPixelsV, 0, nPixelsV),
748 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill(roi->getMaxVid() - roi->getMinVid()); }
754 name =
"hROIcenter_" + sensorid;
755 title =
"ROI center " + sensorid;
756 tmp2D =
new TH2F(name.c_str(), title.c_str(), nPixelsU, 0, nPixelsU, nPixelsV, 0, nPixelsV);
757 tmp2D->GetXaxis()->SetTitle(
" U (ID)");
758 tmp2D->GetYaxis()->SetTitle(
" V (ID)");
759 hROIDictionary.insert(std::pair< Belle2::VxdID, ROIHistoAndFill >
764 [](TH1 * hPtr,
const ROIid * roi) { hPtr->Fill((roi->getMaxUid() + roi->getMinUid()) / 2, (roi->getMaxVid() + roi->getMinVid()) / 2); }
785 for (
auto it = its.first; it != its.second; ++it) {
787 aInterHistoAndFill.second(aInterHistoAndFill.first, inter);
797 for (
auto it = its.first; it != its.second; ++it) {
799 aROIHistoAndFill.second(aROIHistoAndFill.first, roi);
803 for (
auto it = itsEvt.first; it != itsEvt.second; ++it)
804 (it->second).accumulate(roi, (it->second).value);
814 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.
REG_MODULE(arichBtest)
Register the Module.
Abstract base class for different kinds of events.
struct: histograms to be filled once per event + filling fucntion + accumulate function
std::function< void(TH1 *, double &) > fill
fill function
TH1 * hPtr
histogram pointer
double value
value used to fill