11 #include <svd/modules/svdClusterQualityEstimator/SVDClusterQualityEstimatorModule.h>
12 #include <svd/modules/svdClusterQualityEstimator/ClusterQualityHelperFunctions.h>
13 #include <framework/utilities/FileSystem.h>
25 setDescription(
"Assignment of probability for a cluster being generated from signal hit.");
27 setPropertyFlags(c_ParallelProcessingCertified);
29 addParam(
"SVDClusters", m_svdClustersName,
30 "SVDCluster collection name",
string(
""));
32 addParam(
"useQualityEstimator", m_useQualityEstimator,
33 "Standard is true. If turned off clusters will not be assigned a quality.",
bool(
true));
35 addParam(
"inputPDF", m_inputPDF,
36 "Path containing pdf root file", std::string(
"/data/svd/clusterQICalibration.root"));
38 addParam(
"useLegacyNaming", m_useLegacyNaming,
39 "Use old PDF name convention?",
bool(
true));
43 void SVDClusterQualityEstimatorModule::initialize()
46 if (m_useQualityEstimator ==
true) {
47 if (m_inputPDF.empty()) {
48 B2ERROR(
"Input PDF filename not set!");
50 std::string fullPath = FileSystem::findFile(m_inputPDF);
51 if (fullPath.empty()) {
52 B2ERROR(
"PDF file:" << m_inputPDF <<
"not located! Check filename input matches name of PDF file!");
54 m_inputPDF = fullPath;
57 m_calibrationFile =
new TFile(m_inputPDF.c_str(),
"READ");
59 if (!m_calibrationFile->IsOpen())
60 B2FATAL(
"Couldn't open pdf file:" << m_inputPDF);
64 m_svdClusters.isRequired(m_svdClustersName);
68 void SVDClusterQualityEstimatorModule::event()
71 if (m_useQualityEstimator ==
true) {
72 for (
auto& svdCluster : m_svdClusters) {
74 double charge = svdCluster.getCharge();
75 double time = svdCluster.getClsTime();
77 int pdfEntries = m_calibrationFile->GetListOfKeys()->GetSize();
79 if (m_useLegacyNaming == 1) {
80 maxSize = floor(pdfEntries / 12);
82 maxSize = floor(pdfEntries / 688);
85 std::string probInputName;
86 std::string errorInputName;
88 clusterPDFName(svdCluster.getSensorID(), svdCluster.getSize(), svdCluster.isUCluster(), maxSize, probInputName, errorInputName,
91 TH2F* probPDF =
nullptr;
92 TH2F* errorPDF =
nullptr;
93 m_calibrationFile->GetObject(probInputName.c_str(), probPDF);
94 m_calibrationFile->GetObject(errorInputName.c_str(), errorPDF);
97 int xBin = probPDF->GetXaxis()->FindFixBin(time);
98 int yBin = probPDF->GetYaxis()->FindFixBin(charge);
100 double signalProb = probPDF->GetBinContent(xBin, yBin);
101 double signalProbError = errorPDF->GetBinContent(xBin, yBin);
103 svdCluster.setQualityIndicator(signalProb);
104 svdCluster.setQualityIndicatorError(signalProbError);
109 void SVDClusterQualityEstimatorModule::terminate()
111 B2INFO(
"SVDClusterQualityEstimatorModule::terminate");
113 if (m_useQualityEstimator ==
true) {
114 m_calibrationFile->Delete();