#include <RecoBTag/ImpactParameter/interface/JetBProbabilityComputer.h>
Public Member Functions | |
float | discriminator (const TagInfoHelper &ti) const |
JetBProbabilityComputer (const edm::ParameterSet ¶meters) | |
double | jetProbability (const std::vector< float > &v) const |
Private Attributes | |
double | m_cutMaxDecayLen |
double | m_cutMaxDistToAxis |
double | m_deltaR |
int | m_ipType |
double | m_minTrackProb |
unsigned int | m_nbTracks |
reco::TrackBase::TrackQuality | m_trackQuality |
int | m_trackSign |
bool | m_useAllQualities |
Definition at line 13 of file JetBProbabilityComputer.h.
JetBProbabilityComputer::JetBProbabilityComputer | ( | const edm::ParameterSet & | parameters | ) | [inline] |
Definition at line 16 of file JetBProbabilityComputer.h.
References edm::ParameterSet::getParameter(), m_cutMaxDecayLen, m_cutMaxDistToAxis, m_deltaR, m_ipType, m_minTrackProb, m_nbTracks, m_trackQuality, m_trackSign, m_useAllQualities, reco::TrackBase::qualityByName(), and JetTagComputer::uses().
00017 { 00018 m_ipType = parameters.getParameter<int>("impactParameterType"); 00019 m_minTrackProb = parameters.getParameter<double>("minimumProbability"); 00020 m_deltaR = parameters.getParameter<double>("deltaR"); 00021 m_trackSign = parameters.getParameter<int>("trackIpSign"); 00022 m_nbTracks = parameters.getParameter<unsigned int>("numberOfBTracks"); 00023 m_cutMaxDecayLen = parameters.getParameter<double>("maximumDecayLength"); 00024 m_cutMaxDistToAxis = parameters.getParameter<double>("maximumDistanceToJetAxis"); 00025 00026 // 00027 // access track quality class; "any" takes everything 00028 // 00029 std::string trackQualityType = parameters.getParameter<std::string>("trackQualityClass"); //used 00030 m_trackQuality = reco::TrackBase::qualityByName(trackQualityType); 00031 m_useAllQualities = false; 00032 if (trackQualityType == "any" || 00033 trackQualityType == "Any" || 00034 trackQualityType == "ANY" ) m_useAllQualities = true; 00035 00036 uses("ipTagInfos"); 00037 }
float JetBProbabilityComputer::discriminator | ( | const TagInfoHelper & | ti | ) | const [inline, virtual] |
log(all);
Reimplemented from JetTagComputer.
Definition at line 39 of file JetBProbabilityComputer.h.
References python::cmstools::all(), b, JetTagComputer::TagInfoHelper::get(), i, reco::TrackIPTagInfo::impactParameterData(), it, reco::JTATagInfo::jet(), jetProbability(), funct::log(), m_cutMaxDecayLen, m_cutMaxDistToAxis, m_deltaR, m_ipType, m_nbTracks, m_trackQuality, m_trackSign, m_useAllQualities, muonGeometry::mag(), p, p4, reco::TrackIPTagInfo::primaryVertex(), reco::TrackIPTagInfo::probabilities(), pv, reco::TrackIPTagInfo::selectedTracks(), python::multivaluedict::sort(), and tracks.
00040 { 00041 const reco::TrackIPTagInfo & tkip = ti.get<reco::TrackIPTagInfo>(); 00042 const edm::RefVector<reco::TrackCollection> & tracks(tkip.selectedTracks()); 00043 const std::vector<float> & allProbabilities((tkip.probabilities(m_ipType))); 00044 const std::vector<reco::TrackIPTagInfo::TrackIPData> & impactParameters((tkip.impactParameterData())); 00045 00046 if(tkip.primaryVertex().isNull()) return 0; 00047 00048 GlobalPoint pv(tkip.primaryVertex()->position().x(),tkip.primaryVertex()->position().y(),tkip.primaryVertex()->position().z()); 00049 00050 std::vector<float> probabilities; 00051 std::vector<float> probabilitiesB; 00052 int i=0; 00053 for(std::vector<float>::const_iterator it = allProbabilities.begin(); it!=allProbabilities.end(); ++it, i++) 00054 { 00055 if (fabs(impactParameters[i].distanceToJetAxis) < m_cutMaxDistToAxis && // distance to JetAxis 00056 (impactParameters[i].closestToJetAxis - pv).mag() < m_cutMaxDecayLen && // max decay len 00057 (m_useAllQualities == true || (*tracks[i]).quality(m_trackQuality)) // use selected track qualities 00058 ) 00059 { 00060 // Use only positive(or negative) tracks for B 00061 float p=fabs(*it); 00062 if( m_deltaR < 0 || ROOT::Math::VectorUtil::DeltaR((*tkip.jet()).p4().Vect(), (*tracks[i]).momentum()) < m_deltaR) 00063 { 00064 if(m_trackSign>0 || *it >0 ) probabilities.push_back(p); //Use all tracks for positive tagger and only negative for negative tagger 00065 00066 if(m_trackSign>0 && *it >=0){probabilitiesB.push_back(*it);} //Use only positive tracks for positive tagger 00067 if(m_trackSign<0 && *it <=0){probabilitiesB.push_back(- *it);} //Use only negative tracks for negative tagger 00068 } 00069 } 00070 } 00071 00072 float all = jetProbability(probabilities); 00073 std::sort(probabilitiesB.begin(), probabilitiesB.end()); 00074 if(probabilitiesB.size() > m_nbTracks ) probabilitiesB.resize(m_nbTracks); 00075 float b = jetProbability(probabilitiesB); 00076 00077 return -log(b)/4-log(all)/4; 00078 }
double JetBProbabilityComputer::jetProbability | ( | const std::vector< float > & | v | ) | const [inline] |
Definition at line 80 of file JetBProbabilityComputer.h.
References GenMuonPlsPt100GeV_cfg::cout, lat::endl(), funct::exp(), edm::es::l(), funct::log(), m_minTrackProb, max, and min.
Referenced by discriminator().
00081 { 00082 int ngoodtracks=v.size(); 00083 double SumJet=0.; 00084 00085 for(std::vector<float>::const_iterator q = v.begin(); q != v.end(); q++){ 00086 SumJet+=(*q>m_minTrackProb)?log(*q):log(m_minTrackProb); 00087 } 00088 00089 double ProbJet; 00090 double Loginvlog=0; 00091 00092 if(SumJet<0.){ 00093 if(ngoodtracks>=2){ 00094 Loginvlog=log(-SumJet); 00095 } 00096 double Prob=1.; 00097 double lfact=1.; 00098 for(int l=1; l!=ngoodtracks; l++){ 00099 lfact*=l; 00100 Prob+=exp(l*Loginvlog-log(1.*lfact)); 00101 } 00102 double LogProb=log(Prob); 00103 ProbJet= 00104 std::min(exp(std::max(LogProb+SumJet,-30.)),1.); 00105 }else{ 00106 ProbJet=1.; 00107 } 00108 if(ProbJet>1) 00109 std::cout << "ProbJet too high: " << ProbJet << std::endl; 00110 00111 //double LogProbJet=-log(ProbJet); 00112 // //return 1.-ProbJet; 00113 return ProbJet; 00114 }
double JetBProbabilityComputer::m_cutMaxDecayLen [private] |
Definition at line 121 of file JetBProbabilityComputer.h.
Referenced by discriminator(), and JetBProbabilityComputer().
double JetBProbabilityComputer::m_cutMaxDistToAxis [private] |
Definition at line 122 of file JetBProbabilityComputer.h.
Referenced by discriminator(), and JetBProbabilityComputer().
double JetBProbabilityComputer::m_deltaR [private] |
Definition at line 118 of file JetBProbabilityComputer.h.
Referenced by discriminator(), and JetBProbabilityComputer().
int JetBProbabilityComputer::m_ipType [private] |
Definition at line 117 of file JetBProbabilityComputer.h.
Referenced by discriminator(), and JetBProbabilityComputer().
double JetBProbabilityComputer::m_minTrackProb [private] |
Definition at line 116 of file JetBProbabilityComputer.h.
Referenced by JetBProbabilityComputer(), and jetProbability().
unsigned int JetBProbabilityComputer::m_nbTracks [private] |
Definition at line 120 of file JetBProbabilityComputer.h.
Referenced by discriminator(), and JetBProbabilityComputer().
Definition at line 123 of file JetBProbabilityComputer.h.
Referenced by discriminator(), and JetBProbabilityComputer().
int JetBProbabilityComputer::m_trackSign [private] |
Definition at line 119 of file JetBProbabilityComputer.h.
Referenced by discriminator(), and JetBProbabilityComputer().
Definition at line 124 of file JetBProbabilityComputer.h.
Referenced by discriminator(), and JetBProbabilityComputer().