Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:24:36

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     //    edm::LogWarning ("TrackProbability|HistogramMissing") << " PDF Histogram not found for this track" ;
0037   } else {
0038     trackProbability = 1. - probabilityHistogram->normalizedIntegral(absSignificance);
0039   }
0040   if (absSignificance != 0)
0041     trackProbability *= significance / absSignificance;  //Return a "signed" probability
0042 
0043   return pair<bool, double>(probabilityHistogram, trackProbability);
0044 }