Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:06

0001 
0002 #include "SimTracker/TrackHistory/interface/JetVetoedTracksAssociatorDRVertex.h"
0003 
0004 JetVetoedTracksAssociationDRVertex::JetVetoedTracksAssociationDRVertex(double dr) : mDeltaR2Threshold(dr * dr) {}
0005 
0006 void JetVetoedTracksAssociationDRVertex::produce(reco::JetTracksAssociation::Container *fAssociation,
0007                                                  const std::vector<edm::RefToBase<reco::Jet>> &fJets,
0008                                                  const std::vector<reco::TrackRef> &fTracks,
0009                                                  TrackClassifier &classifier) const {
0010   // cache tracks kinematics
0011   std::vector<math::RhoEtaPhiVector> trackP3s;
0012   trackP3s.reserve(fTracks.size());
0013   for (unsigned i = 0; i < fTracks.size(); ++i) {
0014     const reco::Track *track = &*(fTracks[i]);
0015     trackP3s.push_back(math::RhoEtaPhiVector(track->p(), track->eta(), track->phi()));
0016   }
0017   // loop on jets and associate
0018   for (unsigned j = 0; j < fJets.size(); ++j) {
0019     reco::TrackRefVector assoTracks;
0020     const reco::Jet *jet = &*(fJets[j]);
0021     double jetEta = jet->eta();
0022     double jetPhi = jet->phi();
0023     for (unsigned t = 0; t < fTracks.size(); ++t) {
0024       double dR2 = deltaR2(jetEta, jetPhi, trackP3s[t].eta(), trackP3s[t].phi());
0025       classifier.evaluate(reco::TrackBaseRef(fTracks[t]));
0026       if (dR2 < mDeltaR2Threshold &&
0027           (classifier.is(TrackClassifier::BWeakDecay) || classifier.is(TrackClassifier::CWeakDecay) ||
0028            classifier.is(TrackClassifier::PrimaryVertex)))
0029         assoTracks.push_back(fTracks[t]);
0030     }
0031     reco::JetTracksAssociation::setValue(fAssociation, fJets[j], assoTracks);
0032   }
0033 }