ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/MetLeptonTools.cc
Revision: 1.1
Committed: Thu Aug 9 13:15:43 2012 UTC (12 years, 9 months ago) by pharris
Content type: text/plain
Branch: MAIN
Log Message:
Added New MVA Met

File Contents

# User Rev Content
1 pharris 1.1 #include "MitPhysics/Utils/interface/MetLeptonTools.h"
2     #include <algorithm>
3     #include <vector>
4    
5     using namespace mithep;
6    
7     ClassImp(mithep::MetLeptonTools)
8    
9     bool MetLeptonTools::looseTauId(const PFTau *iTau) {
10     if(iTau->Pt() < 19) return false;
11     if(fabs(iTau->Eta()) > fabs(2.3) ) return false;
12     if(!iTau->DiscriminationByDecayModeFinding()) return false;
13     if(!iTau->DiscriminationByLooseElectronRejection()) return false;
14     if(!iTau->DiscriminationByLooseMuonRejection()) return false;
15     if(!iTau->DiscriminationByVLooseIsolation() ) return false;
16     return true;
17     }
18     bool MetLeptonTools::looseEleId(const Electron *iElectron,const PileupEnergyDensityCol* iPUEnergyDensity,
19     const PFCandidateCol *iCands,const Vertex *iPV,const VertexCol *iVertices) {
20     if(iElectron->Pt() < 9.5) return false;
21     if(fabs(iElectron->Eta()) > 2.5) return false;
22     if(fabs(iElectron->Eta()) > 1.4442 && fabs(iElectron->Eta()) < 1.566) return false;
23     //if(!fEleTools->PassSpikeRemovalFilter(iElectron)) return false;
24     //if(isConversion(iElectron)) return false;
25     //if(iElectron->BestTrk()->D0Corrected(*iPV) > 0.04 ) return false;
26     //if(iElectron->BestTrk()->DzCorrected(*iPV) > 0.2 ) return false;
27     //if(!passEleMVA(iElectron ,iPUEnergyDensity,iCands,iPV) ) return false;
28     //if(isoDeltaBeta(iElectron, iCands,iPV,iVertices) > 0.30) return false;
29     //return true;
30    
31     if(iElectron->GsfTrk() == 0) return false;
32     if(iElectron->GsfTrk()) if(iElectron->GsfTrk()->NExpectedHitsInner() > 0) return false;
33     //double lIso = isoPV(iElectron,iCands,iPV,iVertices,true)/iElectron->Et();
34     //if(!iElectron->IsTrackerDriven()) return false;
35     //if(lIso > 0.2) return false;
36    
37     if(iElectron->TrackIsolationDr03()/iElectron->Et() > 0.2) return false;
38     //Electron Veto Id
39     if(fabs(iElectron->Eta()) < 1.5) {
40     if(fabs(iElectron->DeltaEtaSuperClusterTrackAtVtx()) > 0.007) return false;
41     if(fabs(iElectron->DeltaPhiSuperClusterTrackAtVtx()) > 0.8) return false;
42     if(iElectron->CoviEtaiEta() > 0.01) return false;
43     if(iElectron->HadronicOverEm() > 0.15) return false;
44     double lE = iElectron->SCluster()->Energy();
45     double lP = iElectron->P();
46     if(fabs(1./lE-1./lP) > 0.05 ) return false;
47     } else {
48     if(fabs(iElectron->DeltaEtaSuperClusterTrackAtVtx()) > 0.007) return false;
49     if(fabs(iElectron->DeltaPhiSuperClusterTrackAtVtx()) > 0.03) return false;
50     if(iElectron->CoviEtaiEta() > 0.03) return false;
51     if(iElectron->HadronicOverEm() > 0.10) return false;
52     double lE = iElectron->SCluster()->Energy();
53     double lP = iElectron->P();
54     if(fabs(1./lE-1./lP) > 0.05 ) return false;
55     }
56     return true;
57     }
58     bool MetLeptonTools::looseMuId(const Muon *iMu,const PFCandidateCol *iCands,const Vertex *iPV,const VertexCol *iVertices) {
59     if(iMu->TrackerTrk() == 0) return false;
60     if(iMu->Pt() < 9.5 ) return false;
61     if(fabs(iMu->BestTrk()->Eta()) > 2.5) return false;
62     //if(fabs(iMu->BestTrk()->DzCorrected(*iPV)) > 0.2) return false;
63     //if(iMu->BestTrk()->D0Corrected(*iPV) > 2.0) return false;
64     if(iMu->BestTrk()->D0() > 2.0) return false;
65     if(iMu->BestTrk()->RChi2() > 10 ) return false;
66     if(iMu->TrackerTrk()->NPixelHits() < 1 ) return false;
67     if(iMu->TrackerTrk()->NHits() < 6 ) return false;
68     if(iMu->NValidHits() < 1 ) return false;
69     if(iMu->NMatches() < 1 ) return false;
70     //if(PFIsolation(iMu,iCands) > 0.2) return false;
71     //if(isoPV(iMu,iCands,iPV,iVertices)/iMu->Pt() > 0.2) return false;
72     if(iMu->IsoR03SumPt()/iMu->Pt() > 0.2) return false;
73     return true;
74     }
75     double MetLeptonTools::vis(const PFTau *iTau) {
76     double lPtTot = 0.;
77     double lChargedPtTot = 0.;
78     for(unsigned int i0 = 0; i0 < iTau->NSignalPFCands(); i0++) {
79     lPtTot += iTau->SignalPFCand(i0)->Pt();
80     if(iTau->SignalPFCand(i0)->BestTrk() == 0) continue;
81     lChargedPtTot += iTau->SignalPFCand(i0)->Pt();
82     }
83     return lChargedPtTot/lPtTot;
84     }
85     Float_t MetLeptonTools::PFIsolation(const ChargedParticle *iLep,const PFCandidateCol *iCands) {
86     Double_t lPtSum = 0.;
87     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
88     const PFCandidate *pCand = iCands->At(i0);
89     if(pCand->PFType() != PFCandidate::eHadron) continue;
90     Double_t pDR = MathUtils::DeltaR(iLep->Mom(), pCand->Mom());
91     if(pCand->Pt() < 0.5) continue;
92     if(pDR < 0.015 && fabs(iLep->Eta()) > 1.56) continue;
93     if(pDR > 0.3) continue;
94     lPtSum += pCand->Pt();
95     }
96     return lPtSum;
97     }
98     Float_t MetLeptonTools::isoPV(const ChargedParticle *iLep,const PFCandidateCol *iCands,
99     const Vertex *iPV,const VertexCol *iVertices,bool iEle) {
100     Float_t lPtSumCharge = 0.;
101     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
102     const PFCandidate *pCand = iCands->At(i0);
103     Double_t pDR = MathUtils::DeltaR(iLep->Mom(), pCand->Mom());
104     if(pCand->PFType() != PFCandidate::eHadron) continue;
105     if(pDR > 0.3) continue;
106     if(pDR < 0.0001) continue;
107     if(iEle && pDR < 0.015 && fabs(iLep->Eta()) > 1.56) continue;
108     if(iEle && pDR < 0.01 && fabs(iLep->Eta()) < 1.56) continue;
109     if(pCand->HasTrackerTrk() && iPV !=0) {
110     if( iPV->HasTrack(pCand->TrackerTrk())) lPtSumCharge += pCand->Pt();
111     //if( iPV->HasTrack(pCand->TrackerTrk())) std::cout << "===> Adding ===> " << pCand->Pt() << " --" << pDR << " -- " << pCand->BestTrk()->DzCorrected(*iPV) << std::endl;
112     if( iPV->HasTrack(pCand->TrackerTrk())) continue;
113     }
114     Double_t pDzMin = 10000;
115     Bool_t pVertexFound = kFALSE;
116     const Vertex *pClosestVtx = 0;
117     for(UInt_t i1 = 0; i1 < iVertices->GetEntries(); i1++) {
118     const Vertex *pVtx = iVertices->At(i1);
119     if(pVtx->HasTrack(pCand->TrackerTrk())) {
120     pClosestVtx = pVtx; pVertexFound = kTRUE; break;
121     }
122     Double_t pDz = fabs(pCand->SourceVertex().Z() - pVtx->Z());
123     if(pDz < pDzMin) {
124     pClosestVtx = pVtx;
125     pDzMin = pDz;
126     }
127     }
128     if(pVertexFound || pClosestVtx != iPV) continue;
129     //std::cout << "===> Adding NV ===> " << pCand->Pt() << " --" << pDR << " -- " << pCand->BestTrk()->DzCorrected(*iPV) << std::endl;
130     lPtSumCharge += pCand->Pt();
131     }
132     return lPtSumCharge;// + TMath::Max(lPtSumNeut-lPtSumPU*0.5,0.))/iLep->Pt();
133     }