Full constructor.
22 :
23 m_moduleID(pdfConstructor.getModuleID()), m_minTime(TOPRecoManager::getMinTime()),
24 m_maxTime(TOPRecoManager::getMaxTime())
25 {
26
27 if (binSize <= 0) B2FATAL("TOP::PDF1Dim: bin size must be positive");
28 if (not pdfConstructor.isValid()) {
29 B2ERROR("TOP::PDF1Dim: PDFConstructor is not valid, cannot continue");
30 return;
31 }
32
33
34 m_numBins = (m_maxTime - m_minTime) / binSize + 1;
35 m_binSize = (m_maxTime - m_minTime) / m_numBins;
36
37
38 for (const auto& hit : pdfConstructor.getSelectedHits()) {
39 m_times.push_back(hit.time);
40 }
41 if (not m_times.empty()) {
42 std::sort(m_times.begin(), m_times.end());
43 m_tminFot = m_times.front();
44 m_tmaxFot = m_times.back();
45 }
46
47 m_expectedSignal = pdfConstructor.getExpectedSignalPhotons();
48 m_expectedDelta = pdfConstructor.getExpectedDeltaPhotons();
49 m_expectedBG = std::max(pdfConstructor.getBkgRate() * timeWindow, 0.1);
50
51
52 TH1F pdfHisto("pdf_temporary", "", m_numBins, m_minTime, m_maxTime);
53
54
55 m_bkg = m_expectedBG / timeWindow * m_binSize;
56 const auto& deltaRayPDF = pdfConstructor.getDeltaRayPDF();
57 for (int i = 0; i < m_numBins; i++) {
58 double t = pdfHisto.GetBinCenter(i + 1);
59 pdfHisto.SetBinContent(i + 1, m_bkg + m_expectedDelta * deltaRayPDF.getPDFValue(t) * m_binSize);
60 }
61
62
63 bool start = true;
64 for (const auto& pixelPDF : pdfConstructor.getSignalPDF()) {
65 for (const auto& peak : pixelPDF.getPDFPeaks()) {
66 pdfHisto.Fill(peak.t0, m_expectedSignal * peak.nph);
67 if (start) {
68 start = false;
69 m_tminPDF = peak.t0;
70 m_tmaxPDF = peak.t0;
71 }
72 m_tminPDF = std::min(m_tminPDF, peak.t0);
73 m_tmaxPDF = std::max(m_tmaxPDF, peak.t0);
74 }
75 }
76
77
78 for (int i = 0; i < m_numBins; i++) {
79 m_logF.push_back(log(pdfHisto.GetBinContent(i + 1)));
80 }
81 m_logBkg = log(m_bkg);
82
83
84 m_minT0 = m_tminFot - m_tmaxPDF - 2 * m_binSize;
85 double maxT0 = m_tmaxFot - m_tminPDF;
86 m_numBinsT0 = std::max(int((maxT0 - m_minT0) / m_binSize), 3) + 1;
87 m_maxT0 = m_minT0 + m_binSize * m_numBinsT0;
88
89 }