File indexing completed on 2023-03-17 11:17:16
0001
0002 #include "RecoBTag/TrackProbability/interface/HistogramProbabilityEstimator.h"
0003 #include "RecoBTag/TrackProbability/interface/TrackClassFilter.h"
0004 #include "CondFormats/BTauObjects/interface/CalibratedHistogram.h"
0005
0006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0007 #include <algorithm>
0008 using namespace reco;
0009 using namespace std;
0010
0011 pair<bool, double> HistogramProbabilityEstimator::probability(
0012 bool quality, int ipType, float significance, const Track& track, const Jet& jet, const Vertex& vertex) const {
0013 TrackClassFilter::Input input(quality, track, jet, vertex);
0014
0015 double trackProbability = 0;
0016
0017 double absSignificance = fabs(significance);
0018
0019 const CalibratedHistogram* probabilityHistogram = nullptr;
0020 vector<TrackProbabilityCalibration::Entry>::const_iterator found;
0021 vector<TrackProbabilityCalibration::Entry>::const_iterator it;
0022 vector<TrackProbabilityCalibration::Entry>::const_iterator it_end;
0023 if (ipType == 0) {
0024 it = m_calibration3D->data.begin();
0025 it_end = m_calibration3D->data.end();
0026 } else if (ipType == 1) {
0027 it = m_calibration2D->data.begin();
0028 it_end = m_calibration2D->data.end();
0029 } else
0030 return pair<bool, double>(probabilityHistogram, trackProbability);
0031
0032 found = std::find_if(it, it_end, [&input](auto const& c) { return TrackClassFilter()(input, c); });
0033 if (found != it_end)
0034 probabilityHistogram = &found->histogram;
0035 if (!probabilityHistogram) {
0036
0037 } else {
0038 trackProbability = 1. - probabilityHistogram->normalizedIntegral(absSignificance);
0039 }
0040 if (absSignificance != 0)
0041 trackProbability *= significance / absSignificance;
0042
0043 return pair<bool, double>(probabilityHistogram, trackProbability);
0044 }