From 03d87db7f39649f824ba801fe241dcbb8ae5cf10 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 5 Oct 2020 15:54:27 +0200 Subject: [PATCH] code checks --- .../HiJetAlgos/plugins/HiBadParticleFilter.cc | 441 +++++++++--------- 1 file changed, 216 insertions(+), 225 deletions(-) diff --git a/RecoHI/HiJetAlgos/plugins/HiBadParticleFilter.cc b/RecoHI/HiJetAlgos/plugins/HiBadParticleFilter.cc index d27ffedf17c61..af5a955483ba8 100644 --- a/RecoHI/HiJetAlgos/plugins/HiBadParticleFilter.cc +++ b/RecoHI/HiJetAlgos/plugins/HiBadParticleFilter.cc @@ -35,273 +35,264 @@ class HiBadParticleFilter : public edm::global::EDFilter<> { // ----------member data --------------------------- - edm::EDGetTokenT > tokenPFCandidates_; - edm::EDGetTokenT tokenPV_; - - const bool taggingMode_; - const bool verbose_; - const double minMuonPt_; - const double minChargedHadronPt_; - const double minMuonTrackRelPtErr_; - const double maxSigLoose_; - const double maxSigTight_; - const double minCaloCompatibility_; - const unsigned minTrackNHits_; - const unsigned minPixelNHits_; + edm::EDGetTokenT > tokenPFCandidates_; + edm::EDGetTokenT tokenPV_; + + const bool taggingMode_; + const bool verbose_; + const double minMuonPt_; + const double minChargedHadronPt_; + const double minMuonTrackRelPtErr_; + const double maxSigLoose_; + const double maxSigTight_; + const double minCaloCompatibility_; + const unsigned minTrackNHits_; + const unsigned minPixelNHits_; }; // // constructors and destructor // HiBadParticleFilter::HiBadParticleFilter(const edm::ParameterSet& iConfig) - : tokenPFCandidates_ ( consumes >(iConfig.getParameter ("PFCandidates") )) - , tokenPV_ ( consumes (iConfig.getParameter ("offlinePV") )) - , taggingMode_ ( iConfig.getParameter ("taggingMode") ) - , verbose_ ( iConfig.getParameter ("verbose") ) - , minMuonPt_ ( iConfig.getParameter ("minMuonPt") ) - , minChargedHadronPt_ ( iConfig.getParameter ("minChargedHadronPt") ) - , minMuonTrackRelPtErr_ ( iConfig.getParameter ("minMuonTrackRelPtErr") ) - , maxSigLoose_ ( iConfig.getParameter ("maxSigLoose") ) - , maxSigTight_ ( iConfig.getParameter ("maxSigTight") ) - , minCaloCompatibility_ ( iConfig.getParameter ("minCaloCompatibility") ) - , minTrackNHits_ ( iConfig.getParameter ("minTrackNHits") ) - , minPixelNHits_ ( iConfig.getParameter ("minPixelNHits") ) -{ + : tokenPFCandidates_(consumes >(iConfig.getParameter("PFCandidates"))), + tokenPV_(consumes(iConfig.getParameter("offlinePV"))), + taggingMode_(iConfig.getParameter("taggingMode")), + verbose_(iConfig.getParameter("verbose")), + minMuonPt_(iConfig.getParameter("minMuonPt")), + minChargedHadronPt_(iConfig.getParameter("minChargedHadronPt")), + minMuonTrackRelPtErr_(iConfig.getParameter("minMuonTrackRelPtErr")), + maxSigLoose_(iConfig.getParameter("maxSigLoose")), + maxSigTight_(iConfig.getParameter("maxSigTight")), + minCaloCompatibility_(iConfig.getParameter("minCaloCompatibility")), + minTrackNHits_(iConfig.getParameter("minTrackNHits")), + minPixelNHits_(iConfig.getParameter("minPixelNHits")) { produces(); produces(); produces("cleaned"); } -HiBadParticleFilter::~HiBadParticleFilter() { } - +HiBadParticleFilter::~HiBadParticleFilter() {} // // member functions // // ------------ method called on each new Event ------------ -bool -HiBadParticleFilter::filter(edm::StreamID iID, edm::Event& iEvent, const edm::EventSetup& iSetup) const -{ +bool HiBadParticleFilter::filter(edm::StreamID iID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { using namespace std; using namespace edm; typedef View CandidateView; Handle pfCandidates; - iEvent.getByToken(tokenPFCandidates_,pfCandidates); + iEvent.getByToken(tokenPFCandidates_, pfCandidates); const reco::VertexCollection* recoVertices; edm::Handle vertexCollection; - iEvent.getByToken(tokenPV_,vertexCollection); + iEvent.getByToken(tokenPV_, vertexCollection); recoVertices = vertexCollection.product(); auto pOutputCandidateCollection = std::make_unique(); auto pBadCandidateCollection = std::make_unique(); - bool foundBadCandidate = false; - - for(unsigned j=0;jsize();++j ) { - const reco::PFCandidate & pfCandidate = (*pfCandidates)[j]; - - - if(abs(pfCandidate.particleId()) == 3) // muon cleaning - { - if(pfCandidate.pt() > minMuonPt_){ - - if(!pfCandidate.muonRef()->isGlobalMuon() || !pfCandidate.muonRef()->isTrackerMuon() || !pfCandidate.trackRef().isNonnull()) - { - if(verbose_) std::cout<<" bad muon fit "<isGlobalMuon()<<" isTracker "<isTrackerMuon()<<" has track "<ptError()/track->pt()>minMuonTrackRelPtErr_ || track->pt()push_back(pfCandidate); - foundBadCandidate=true; - continue; - } - - if(track->pt()pt() > pfCandidate.pt()*1.5){ - if(verbose_){ - std::cout<<" bad muon algo, bad ptack pT "<pt()<<" cand pT "<push_back(pfCandidate); - continue; - } - if(track->originalAlgo() == 14 && track->hitPattern().trackerLayersWithMeasurement()<10){ - if(verbose_){ - std::cout<<" bad muon original algo 14, small number of hits "<hitPattern().trackerLayersWithMeasurement()<push_back(pfCandidate); - continue; - } - } - } + for (unsigned j = 0; j < pfCandidates->size(); ++j) { + const reco::PFCandidate& pfCandidate = (*pfCandidates)[j]; + + if (abs(pfCandidate.particleId()) == 3) // muon cleaning + { + if (pfCandidate.pt() > minMuonPt_) { + if (!pfCandidate.muonRef()->isGlobalMuon() || !pfCandidate.muonRef()->isTrackerMuon() || + !pfCandidate.trackRef().isNonnull()) { + if (verbose_) + std::cout << " bad muon fit " << pfCandidate.pt() << std::endl; + cout << " isGlobal " << pfCandidate.muonRef()->isGlobalMuon() << " isTracker " + << pfCandidate.muonRef()->isTrackerMuon() << " has track " << pfCandidate.trackRef().isNonnull() + << std::endl; + foundBadCandidate = true; + continue; + } + reco::TrackRef track = pfCandidate.trackRef(); + + if (track->ptError() / track->pt() > minMuonTrackRelPtErr_ || track->pt() < pfCandidate.pt() / 2.) { + if (verbose_) { + std::cout << " bad muon err " << pfCandidate.pt() << std::endl; + std::cout << " rel err = " << track->ptError() / track->pt() << std::endl; + } + foundBadCandidate = true; + continue; + } + + if (track->algo() == 13 || track->algo() == 14 || track->originalAlgo() == 14 || track->originalAlgo() == 13 || + track->hitPattern().trackerLayersWithMeasurement() < 7) { + float xVtx = (*recoVertices)[0].position().x(); + float yVtx = (*recoVertices)[0].position().y(); + float zVtx = (*recoVertices)[0].position().z(); + float xVtxErr = (*recoVertices)[0].xError(); + float yVtxErr = (*recoVertices)[0].yError(); + float zVtxErr = (*recoVertices)[0].zError(); + + math::XYZPoint vtx_temp(xVtx, yVtx, zVtx); + + float Dz = track->dz(vtx_temp); + float DzError = sqrt(track->dzError() * track->dzError() + zVtxErr * zVtxErr); + float Dxy = track->dxy(vtx_temp); + float DxyError = sqrt(track->dxyError() * track->dxyError() + xVtxErr * yVtxErr); + float dzSig = Dz / DzError; + float dxySig = Dxy / DxyError; + + float sig3d = sqrt(dxySig * dxySig + dzSig * dzSig); + + if (sig3d > maxSigLoose_) { + if (verbose_) { + std::cout << " bad muon algo 14, large IP " << pfCandidate.pt() << std::endl; + std::cout << " dxy " << Dxy << " dxy err " << DxyError << std::endl; + std::cout << " dz " << Dz << " dz err " << DzError << std::endl; + } + pBadCandidateCollection->push_back(pfCandidate); + foundBadCandidate = true; + continue; + } + + if (track->pt() < pfCandidate.pt() / 1.5 || track->pt() > pfCandidate.pt() * 1.5) { + if (verbose_) { + std::cout << " bad muon algo, bad ptack pT " << pfCandidate.pt() << std::endl; + std::cout << " track pT " << track->pt() << " cand pT " << pfCandidate.pt() << std::endl; + } + foundBadCandidate = true; + pBadCandidateCollection->push_back(pfCandidate); + continue; + } + if (track->originalAlgo() == 14 && track->hitPattern().trackerLayersWithMeasurement() < 10) { + if (verbose_) { + std::cout << " bad muon original algo 14, small number of hits " << pfCandidate.pt() << std::endl; + std::cout << " trakc N hits " << track->hitPattern().trackerLayersWithMeasurement() << std::endl; + } + foundBadCandidate = true; + pBadCandidateCollection->push_back(pfCandidate); + continue; + } + } } - else if(abs(pfCandidate.particleId()) == 1) //charged hadron cleaning - { - if(pfCandidate.pt() > minChargedHadronPt_) - { - - reco::TrackRef track = pfCandidate.trackRef(); - - unsigned nHits = track->numberOfValidHits(); - unsigned nPixelHits = track->hitPattern().numberOfValidPixelHits(); - - if((nHits < minTrackNHits_ && nPixelHits < minPixelNHits_ ) || nHits==3 ){ - if(verbose_) std::cout<<" bad track with small nPixelHits, pT = "<(new bool(pass)) ); - - return taggingMode_ || pass; + iEvent.put(std::move(pOutputCandidateCollection)); + iEvent.put(std::move(pBadCandidateCollection), "cleaned"); + iEvent.put(std::make_unique(pass)); + return taggingMode_ || pass; } - - - //define this as a plug-in DEFINE_FWK_MODULE(HiBadParticleFilter);