11 #include <top/reconstruction/TOP1Dpdf.h>
23 int moduleID,
double binSize):
27 if (binSize <= 0) B2FATAL(
"TOP1Dpdf: bin size must be positive");
30 reco.getTimeWindow(m_minTime, m_maxTime);
31 m_numBins = (m_maxTime - m_minTime) / binSize + 1;
32 m_binSize = (m_maxTime - m_minTime) / m_numBins;
35 if (digits.getEntries() != 0) m_tminFot = m_tmaxFot = digits[0]->getTime();
36 for (
const auto& digit : digits) {
37 if (digit.getHitQuality() == TOPDigit::c_Good) {
38 double t = digit.getTime();
39 m_tminFot = std::min(m_tminFot, t);
40 m_tmaxFot = std::max(m_tmaxFot, t);
49 int nbins = (m_tmaxFot - m_tminFot) / m_binSize;
50 m_bkg = std::max(m_expectedBG, 1.0) / std::max(nbins, m_numBins);
53 TH1F pdfHisto(
"pdf_temporary",
"", m_numBins, m_minTime, m_maxTime);
56 for (
int i = 0; i < m_numBins; i++) pdfHisto.SetBinContent(i + 1, m_bkg);
60 for (
int pix = 1; pix <= 512; pix++) {
61 for (
int k = 0; k < reco.getNumofPDFPeaks(pix); k++) {
65 reco.getPDFPeak(pix, k, pos, wid, nph);
66 m_expectedSignal += nph;
68 pdfHisto.Fill(time, nph);
74 m_tminPDF = std::min(m_tminPDF, time);
75 m_tmaxPDF = std::max(m_tmaxPDF, time);
80 for (
int i = 0; i < m_numBins; i++) {
81 m_logF.push_back(log(pdfHisto.GetBinContent(i + 1)));
83 m_logBkg = log(m_bkg);
86 m_minT0 = m_tminFot - m_tmaxPDF - 2 * m_binSize;
87 double maxT0 = m_tmaxFot - m_tminPDF;
88 m_numBinsT0 = std::max(
int((maxT0 - m_minT0) / m_binSize), 3) + 1;
89 m_maxT0 = m_minT0 + m_binSize * m_numBinsT0;
98 for (
const auto& time :
m_times) {
100 double t = time - timeShift;
114 for (
size_t i = 0; i <
m_logF.size(); i++) {
115 h.SetBinContent(i + 1, exp(
m_logF[i]));