CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/RecoBTag/SecondaryVertex/src/TrackSelector.cc

Go to the documentation of this file.
00001 #include <Math/GenVector/VectorUtil.h>
00002 
00003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00004 
00005 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00006 #include "DataFormats/JetReco/interface/Jet.h"
00007 #include "DataFormats/TrackReco/interface/Track.h"
00008 #include "DataFormats/VertexReco/interface/Vertex.h"
00009 #include "DataFormats/BTauReco/interface/TrackIPTagInfo.h"
00010 
00011 #include "RecoBTag/SecondaryVertex/interface/TrackSelector.h"
00012 
00013 using namespace reco; 
00014 using namespace ROOT::Math;
00015 
00016 TrackSelector::TrackSelector(const edm::ParameterSet &params) :
00017         minPixelHits(params.getParameter<unsigned int>("pixelHitsMin")),
00018         minTotalHits(params.getParameter<unsigned int>("totalHitsMin")),
00019         minPt(params.getParameter<double>("ptMin")),
00020         maxNormChi2(params.getParameter<double>("normChi2Max")),
00021         maxJetDeltaR(params.getParameter<double>("jetDeltaRMax")),
00022         maxDistToAxis(params.getParameter<double>("maxDistToAxis")),
00023         maxDecayLen(params.getParameter<double>("maxDecayLen")),
00024         sip2dValMin(params.getParameter<double>("sip2dValMin")),
00025         sip2dValMax(params.getParameter<double>("sip2dValMax")),
00026         sip2dSigMin(params.getParameter<double>("sip2dSigMin")),
00027         sip2dSigMax(params.getParameter<double>("sip2dSigMax")),
00028         sip3dValMin(params.getParameter<double>("sip3dValMin")),
00029         sip3dValMax(params.getParameter<double>("sip3dValMax")),
00030         sip3dSigMin(params.getParameter<double>("sip3dSigMin")),
00031         sip3dSigMax(params.getParameter<double>("sip3dSigMax"))
00032 {
00033         std::string qualityClass =
00034                         params.getParameter<std::string>("qualityClass");
00035         if (qualityClass == "any" || qualityClass == "Any" ||
00036             qualityClass == "ANY" || qualityClass == "") {
00037                 selectQuality = false;
00038                 quality = reco::TrackBase::undefQuality;
00039         } else {
00040                 selectQuality = true;
00041                 quality = reco::TrackBase::qualityByName(qualityClass);
00042         }
00043 }
00044 
00045 bool
00046 TrackSelector::operator () (const Track &track,
00047                             const TrackIPTagInfo::TrackIPData &ipData,
00048                             const Jet &jet,
00049                             const GlobalPoint &pv) const
00050 {
00051         return (!selectQuality || track.quality(quality)) &&
00052                (minPixelHits <= 0 ||
00053                 track.hitPattern().numberOfValidPixelHits() >= (int)minPixelHits) &&
00054                (minTotalHits <= 0 ||
00055                 track.hitPattern().numberOfValidHits() >= (int)minTotalHits) &&
00056                track.pt() >= minPt &&
00057                track.normalizedChi2() < maxNormChi2 &&
00058                VectorUtil::DeltaR(jet.momentum(),
00059                                   track.momentum()) < maxJetDeltaR &&
00060                std::abs(ipData.distanceToJetAxis.value()) <= maxDistToAxis &&
00061                (ipData.closestToJetAxis - pv).mag() <= maxDecayLen &&
00062                ipData.ip2d.value()        >= sip2dValMin &&
00063                ipData.ip2d.value()        <= sip2dValMax &&
00064                ipData.ip2d.significance() >= sip2dSigMin &&
00065                ipData.ip2d.significance() <= sip2dSigMax &&
00066                ipData.ip3d.value()        >= sip3dValMin &&
00067                ipData.ip3d.value()        <= sip3dValMax &&
00068                ipData.ip3d.significance() >= sip3dSigMin &&
00069                ipData.ip3d.significance() <= sip3dSigMax;
00070 }