Belle II Software development
BackgroundPDF.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include <top/reconstruction_cpp/BackgroundPDF.h>
10#include <top/reconstruction_cpp/TOPRecoManager.h>
11#include <framework/logging/Logger.h>
12
13using namespace std;
14
15namespace Belle2 {
20 namespace TOP {
21
23 m_moduleID(moduleID)
24 {
25 const auto* yScanner = TOPRecoManager::getYScanner(moduleID);
26 if (not yScanner) B2FATAL("TOP::BackgroundPDF: invalid slot number, moduleID = " << moduleID);
27
28 const auto& pixelPositions = yScanner->getPixelPositions().getPixels();
29 const auto& pixelMasks = yScanner->getPixelMasks().getMasks();
30 const auto& pixelEfficiencies = yScanner->getPixelEfficiencies().getEfficiencies();
31
32 if (pixelMasks.size() != pixelPositions.size() or pixelEfficiencies.size() != pixelPositions.size()) {
33 B2FATAL("TOP::BackgroundPDF: pixel positions, masks and efficiencies have different sizes for slot " << moduleID
34 << LogVar("pixelPositions.size()", pixelPositions.size())
35 << LogVar("pixelMasks.size()", pixelMasks.size())
36 << LogVar("pixelEfficiencies.size()", pixelEfficiencies.size()));
37 }
38
39 m_pdf.resize(pixelPositions.size(), 0);
40 set();
41 }
42
43
45 {
46 const auto* yScanner = TOPRecoManager::getYScanner(m_moduleID);
47 const auto& pixelPositions = yScanner->getPixelPositions().getPixels();
48 const auto& pixelMasks = yScanner->getPixelMasks().getMasks();
49 const auto& pixelEfficiencies = yScanner->getPixelEfficiencies().getEfficiencies();
50
51 double S = 0;
52 for (size_t i = 0; i < m_pdf.size(); i++) {
53 const auto& pixel = pixelPositions[i];
54 double s = pixel.Dx * pixel.Dy;
55 S += s;
56 if (pixelMasks[i]) {
57 m_pdf[i] = s * pixelEfficiencies[i];
58 } else {
59 m_pdf[i] = 0;
60 }
61 }
62
63 double sum = 0;
64 for (auto pdf : m_pdf) sum += pdf;
65 if (sum == 0) return;
66
67 for (auto& pdf : m_pdf) pdf /= sum;
68 m_effi = sum / S;
69 }
70
71
72 double BackgroundPDF::getPDFValue(int pixelID) const
73 {
74 unsigned k = pixelID - 1;
75 if (k < m_pdf.size()) return m_pdf[k] / TOPRecoManager::getTimeWindowSize();
76 return 0;
77 }
78
79 } // namespace TOP
81} // namespace Belle2
82
83
BackgroundPDF(int moduleID)
Class constructor.
double getPDFValue(int pixelID) const
Returns PDF value for given pixel.
void set()
Sets the PDF.
double m_effi
average relative efficiency
Definition: BackgroundPDF.h:67
std::vector< double > m_pdf
pixel part of PDF (index = pixelID - 1)
Definition: BackgroundPDF.h:66
static double getTimeWindowSize()
Returns size of time window.
static const YScanner * getYScanner(int moduleID)
Returns y-scanner of a given module.
Class to store variables with their name which were sent to the logging service.
Abstract base class for different kinds of events.
STL namespace.