ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/RecoilTools.cc
(Generate patch)

Comparing UserCode/MitPhysics/Utils/src/RecoilTools.cc (file contents):
Revision 1.4 by pharris, Fri Apr 13 14:24:00 2012 UTC vs.
Revision 1.21 by pharris, Thu Aug 2 23:48:08 2012 UTC

# Line 8 | Line 8 | using namespace mithep;
8  
9   RecoilTools::RecoilTools(TString iJetLowPtMVAFile,TString iJetHighPtMVAFile,TString iCutFile) {
10    fJetIDMVA = new JetIDMVA();
11 <  fJetIDMVA->Initialize( JetIDMVA::kLoose,iJetLowPtMVAFile,iJetHighPtMVAFile,JetIDMVA::kBaseline,iCutFile);
11 >  fJetIDMVA->Initialize( JetIDMVA::kMET,iJetLowPtMVAFile,iJetHighPtMVAFile,JetIDMVA::kBaseline,iCutFile);
12   }
13   //--------------------------------------------------------------------------------------------------
14   RecoilTools::~RecoilTools() {
# Line 26 | Line 26 | bool RecoilTools::filter(const PFJet *iJ
26    if(pDR2 < 0.5) return false;
27    return true;
28   }
29 <
29 > //--------------------------------------------------------------------------------------------------
30 > bool RecoilTools::filter(const PFCandidate *iCand,Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2) {
31 >  double pDEta1 = iCand->Eta() - iEta1;
32 >  double pDPhi1 = fabs(iCand->Phi() - iPhi1); if(pDPhi1 > 2.*TMath::Pi()-pDPhi1) pDPhi1 = 2.*TMath::Pi()-pDPhi1;
33 >  double pDR1   = sqrt(pDEta1*pDEta1 + pDPhi1*pDPhi1);
34 >  if(pDR1 < 0.3) return false;
35 >  double pDEta2 = iCand->Eta() - iEta2;
36 >  double pDPhi2 = fabs(iCand->Phi() - iPhi2); if(pDPhi2 > 2.*TMath::Pi()-pDPhi2) pDPhi2 = 2.*TMath::Pi()-pDPhi2;
37 >  double pDR2   = sqrt(pDEta2*pDEta2 + pDPhi2*pDPhi2);
38 >  if(pDR2 < 0.3) return false;
39 >  return true;
40 > }
41   //--------------------------------------------------------------------------------------------------
42   Met RecoilTools::pfRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
43 <                          const PFMet *iMet) {
44 <  Met lPFMet(iMet->Px(),iMet->Py());
45 <  lPFMet.SetSumEt(iMet->SumEt());
43 >                          const PFCandidateCol *iCands) {
44 >  double lSumEt = 0;
45 >  FourVectorM lVec(0,0,0,0);
46 >  for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
47 >    lVec -= iCands->At(i0)->Mom();
48 >    lSumEt += iCands->At(i0)->Pt();
49 >  }
50 >  Met lPFMet(lVec.Px(),lVec.Py());
51 >  lPFMet.SetSumEt(lSumEt);
52    lPFMet.SetMex  (lPFMet.Mex()+iVisPt*cos(iVisPhi));  
53    lPFMet.SetMey  (lPFMet.Mey()+iVisPt*sin(iVisPhi));
54    lPFMet.SetSumEt(lPFMet.SumEt()-iVisSumEt);
55    return lPFMet;
56   }
57   //--------------------------------------------------------------------------------------------------
58 + Met RecoilTools::pfRecoil(double iPhi1,double iEta1,double iPhi2,double iEta2,
59 +                          const PFCandidateCol *iCands) {
60 +  double lSumEt = 0;
61 +  FourVectorM lVec(0,0,0,0);
62 +  for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
63 +    const PFCandidate *pfcand = iCands->At(i0);
64 +    if(!filter(pfcand,iPhi1,iEta1,iPhi2,iEta2)) continue;
65 +    lVec   -= pfcand->Mom();
66 +    lSumEt += pfcand->Pt();
67 +  }
68 +  Met lPFMet(lVec.Px(),lVec.Py());
69 +  lPFMet.SetSumEt(lSumEt);
70 +  return lPFMet;
71 + }
72 + //--------------------------------------------------------------------------------------------------
73 + Met RecoilTools::pfCone(double iPhi1,double iEta1,
74 +                          const PFCandidateCol *iCands) {
75 +  double lSumEt = 0;
76 +  FourVectorM lVec(0,0,0,0);
77 +  for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
78 +    const PFCandidate *pfcand = iCands->At(i0);
79 +    if(filter(pfcand,iPhi1,iEta1,100,100)) continue;
80 +    lVec   += pfcand->Mom();
81 +    lSumEt += pfcand->Pt();
82 +  }
83 +  Met lPFMet(lVec.Px(),lVec.Py());
84 +  lPFMet.SetSumEt(lSumEt);
85 +  return lPFMet;
86 + }
87 + //--------------------------------------------------------------------------------------------------
88   Met RecoilTools::trackMet(const PFCandidateCol *iCands,const Vertex *iVertex,Double_t iDZCut) {
89    double trkMetx  = 0;
90    double trkMety  = 0;
91    double trkSumEt = 0;
92 <  for(UInt_t i=0; i<iCands->GetEntries(); ++i) {
93 <    const PFCandidate *pfcand = iCands->At(i);
92 >  for(UInt_t i0=0; i0<iCands->GetEntries(); i0++) {
93 >    const PFCandidate *pfcand = iCands->At(i0);
94 >    double lDZ = 999;
95 >    if(pfcand->HasTrackerTrk())  lDZ =  fabs(pfcand->TrackerTrk()->DzCorrected(*iVertex));//
96 >    else if(pfcand->HasGsfTrk()) lDZ =  fabs(pfcand->GsfTrk()    ->DzCorrected(*iVertex));
97 >    if( fabs(lDZ) > iDZCut) continue;
98 >    trkMetx  -= pfcand->Px();
99 >    trkMety  -= pfcand->Py();
100 >    trkSumEt += pfcand->Pt();
101 >  }
102 >  Met lMet(trkMetx,trkMety);
103 >  lMet.SetSumEt(trkSumEt);
104 >  return lMet;
105 > }
106 > //--------------------------------------------------------------------------------------------------
107 > Met RecoilTools::trackRecoil(double iPhi1,double iEta1,double iPhi2,double iEta2,const PFCandidateCol *iCands,const Vertex *iVertex,Double_t iDZCut) {
108 >  double trkMetx  = 0;
109 >  double trkMety  = 0;
110 >  double trkSumEt = 0;
111 >  for(UInt_t i0=0; i0<iCands->GetEntries(); i0++) {
112 >    const PFCandidate *pfcand = iCands->At(i0);
113 >    if(!filter(pfcand,iPhi1,iEta1,iPhi2,iEta2)) continue;
114      if( (pfcand->HasTrackerTrk() && (fabs(pfcand->TrackerTrk()->DzCorrected(*iVertex))< iDZCut)) ||
115 <        (pfcand->HasGsfTrk()     && (fabs(pfcand->GsfTrk()->DzCorrected(*iVertex))    < iDZCut)) ) {
115 >        (pfcand->HasGsfTrk()     && (fabs(pfcand->GsfTrk()->DzCorrected(*iVertex))    < iDZCut)) ) {
116        trkMetx  -= pfcand->Px();
117        trkMety  -= pfcand->Py();
118        trkSumEt += pfcand->Pt();
# Line 55 | Line 122 | Met RecoilTools::trackMet(const PFCandid
122    lMet.SetSumEt(trkSumEt);
123    return lMet;
124   }
58
125   //--------------------------------------------------------------------------------------------------
126   //Compute the recoil => here this requires the vector sum of the visible components
127   //VisPt    => Vector sum pT  of the visible non-recoiling components
# Line 75 | Line 141 | void RecoilTools::addNeut(const PFJet *i
141                            int iSign) {
142    FourVectorM lVec(0,0,0,0);
143    double lPt = fJetIDMVA->correctedPt(iJet,iJetCorrector,iPUEnergyDensity);
144 <  lPt *= (iJet->NeutralEmEnergy()/iJet->E() + iJet->NeutralHadronEnergy()/iJet->E());
144 >  //if(lPt < 0) lPt = 0.;
145 >  //if(iJet->RawMom().Pt() < 10) lPt = TMath::Max(iJet->RawMom().Pt()-iJet->JetArea()*iPUEnergyDensity->At(0)->Rho(),0.);
146 >  lPt *= (iJet->NeutralEmEnergy()/iJet->RawMom().E() + iJet->NeutralHadronEnergy()/iJet->RawMom().E());
147    lVec.SetPt(lPt); lVec.SetEta(iJet->Eta()); lVec.SetPhi(iJet->Phi()); lVec.SetM(iJet->Mass());
148    if(iSign > 0) iVec -= lVec;
149    if(iSign < 0) iVec += lVec;
150 <  iSumEt += lPt;
150 >  //iSumEt += lPt;
151    //=== Above was a bug in the training
152 <  //if(iSign > 0) iSumEt += lPt;
153 <  //if(iSign < 0) iSumEt -= lPt;
152 >  if(iSign > 0) iSumEt += lPt;
153 >  if(iSign < 0) iSumEt -= lPt;
154   }
155  
156   //--------------------------------------------------------------------------------------------------
157   //Corrected Jets
158 < void RecoilTools::addNeut(const PFJet *iJet,FourVectorM &iVec,Double_t &iSumEt,int iSign) {
158 > void RecoilTools::addNeut(const PFJet *iJet,FourVectorM &iVec,Double_t &iSumEt,double iRho,int iSign) {
159    FourVectorM lVec(0,0,0,0);
160    double lPt = iJet->Pt();
161 <  lPt *= (iJet->NeutralEmEnergy()/iJet->E() + iJet->NeutralHadronEnergy()/iJet->E());
161 >  //if(iJet->RawMom().Pt() < 10) lPt = TMath::Max(iJet->RawMom().Pt()-iJet->JetArea()*iRho,0.);//to be fixed
162 >  //if(iJet->RawMom().Pt() < 10) lPt = iJet->RawMom().Pt()*iJet->L1OffsetCorrectionScale();
163 >  lPt *= (iJet->NeutralEmEnergy()/iJet->RawMom().E() + iJet->NeutralHadronEnergy()/iJet->RawMom().E());
164    lVec.SetPt(lPt); lVec.SetEta(iJet->Eta()); lVec.SetPhi(iJet->Phi()); lVec.SetM(iJet->Mass());
165    if(iSign > 0) iVec   -= lVec;
166    if(iSign < 0) iVec   += lVec;
167 <  iSumEt += lPt;
167 >  //iSumEt += lPt;
168    //=== Above was a bug in the training
169 <  //if(iSign > 0) iSumEt += lPt;
170 <  //if(iSign < 0) iSumEt -= lPt;
169 >  if(iSign > 0) iSumEt += lPt;
170 >  if(iSign < 0) iSumEt -= lPt;
171   }
172  
173   //--------------------------------------------------------------------------------------------------
# Line 114 | Line 184 | Met RecoilTools::NoPUMet( const PFJetCol
184      if(pTrack        ==  0                           ) continue;
185      if(  !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
186             (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
187 +    lSumEt   += pPF->Pt();  
188      lVec     -= pPF->Mom();
118    lSumEt   += pPF->Pt();
189    }
190    int lNPass = 0;
191    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
192      const PFJet *pJet = iJets->At(i0);
193 <    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                       continue; //Quick cleaning==> if not done already
193 >    if(!JetTools::passPFLooseId(pJet))                                              continue;
194 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                       continue;
195 >    if(!fJetIDMVA->passPt(pJet,iJetCorrector,iPileupEnergyDensity))                 continue;
196      if(!fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
197      addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
198      lNPass++;
# Line 129 | Line 201 | Met RecoilTools::NoPUMet( const PFJetCol
201    lMet.SetSumEt( lSumEt);
202    return lMet;
203   }
204 < //--------------------------------------------------------------------------------------------------
204 > //-------------------------------------------------------------------------------------------------
205   //Corrected Jets
206   Met RecoilTools::NoPUMet( const PFJetCol       *iJets,
207 <                          const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
207 >                          const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
208                            Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,Double_t iDZCut) {
209  
210    FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
# Line 144 | Line 216 | Met RecoilTools::NoPUMet( const PFJetCol
216      if(  !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
217             (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
218      lVec     -= pPF->Mom();
219 <    lSumEt   += pPF->Pt();
219 >    lSumEt   += pPF->Pt();  
220    }
221    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
222      const PFJet *pJet = iJets->At(i0);
223 +    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                             continue;
224 +    if(!fJetIDMVA->passPt(pJet))                                           continue;
225      if(!fJetIDMVA->pass(pJet,iVertex,iVertices))                          continue;
226 <    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                             continue; //Quick cleaning==> if not done already
153 <    addNeut(pJet,lVec,lSumEt);
226 >    addNeut(pJet,lVec,lSumEt,iRho);
227    }
228    Met lMet(lVec.Px(),lVec.Py());
229    lMet.SetSumEt(lSumEt);
230    return lMet;
231   }
232   //--------------------------------------------------------------------------------------------------
233 + Met RecoilTools::NoPURecoil(Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
234 +                            const PFJetCol            *iJets,
235 +                            const PFCandidateCol   *iCands   ,
236 +                            const Vertex *iVertex,const VertexCol *iVertices,
237 +                            FactorizedJetCorrector *iJetCorrector,
238 +                            const PileupEnergyDensityCol *iPileupEnergyDensity,Double_t iDZCut) {
239 +
240 +  FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
241 +  for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
242 +    const PFCandidate *pPF = iCands->At(i0);
243 +    if(!filter(pPF,iPhi1,iEta1,iPhi2,iEta2)) continue;
244 +    const Track* pTrack = pPF->TrackerTrk();
245 +    if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
246 +    if(pTrack        ==  0                           ) continue;
247 +    if(  !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
248 +           (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
249 +    lSumEt   += pPF->Pt();  
250 +    lVec     -= pPF->Mom();
251 +  }
252 +  int lNPass = 0;
253 +  for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
254 +    const PFJet *pJet = iJets->At(i0);
255 +    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                       continue;
256 +    if(!fJetIDMVA->passPt(pJet,iJetCorrector,iPileupEnergyDensity))                continue;
257 +    if(iJetCorrector != 0 && iPileupEnergyDensity != 0) if(!fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
258 +    if(iJetCorrector == 0 || iPileupEnergyDensity == 0) if(!fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
259 +    if(iJetCorrector != 0 && iPileupEnergyDensity != 0) addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
260 +    if(iJetCorrector == 0 || iPileupEnergyDensity == 0) addNeut(pJet,lVec,lSumEt,1.);
261 +    lNPass++;
262 +  }
263 +  Met lMet(lVec.Px(),lVec.Py());
264 +  lMet.SetSumEt( lSumEt);
265 +  return lMet;
266 + }
267 +
268 + //--------------------------------------------------------------------------------------------------
269   Met RecoilTools::NoPURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
270                              const PFJetCol            *iJets,FactorizedJetCorrector *iJetCorrector,
271                              const PileupEnergyDensityCol *iPileupEnergyDensity,
# Line 175 | Line 284 | Met RecoilTools::NoPURecoil(Double_t iVi
284   //Corrected Jets
285   Met RecoilTools::NoPURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
286                              const PFJetCol       *iJets,const PFCandidateCol *iCands,
287 <                            const Vertex *iVertex,const VertexCol            *iVertices,
287 >                            const Vertex *iVertex,const VertexCol            *iVertices,Double_t iRho,
288                              Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
289                              Double_t iDZCut) {
290    
291 <  Met lNoPUMet = NoPUMet(iJets,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
291 >  Met lNoPUMet = NoPUMet(iJets,iCands,iVertex,iVertices,iRho,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
292    lNoPUMet.SetMex  (lNoPUMet.Mex()+iVisPt*cos(iVisPhi));  
293    lNoPUMet.SetMey  (lNoPUMet.Mey()+iVisPt*sin(iVisPhi));
294    lNoPUMet.SetSumEt(lNoPUMet.SumEt()-iVisSumEt);
# Line 213 | Line 322 | Met RecoilTools::PUCMet( const PFJetCol
322    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
323      const PFJet *pJet = iJets->At(i0);
324      if(!JetTools::passPFLooseId(pJet))                                             continue;
325 +    if(!fJetIDMVA->passPt(pJet,iJetCorrector,iPileupEnergyDensity))                continue;
326      if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
327 <    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                      continue; //Quick cleaning==> if not done already
327 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                      continue;
328      addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity,-1);
329    }
330    Met lMet(lVec.Px(),lVec.Py());
# Line 224 | Line 334 | Met RecoilTools::PUCMet( const PFJetCol
334   //--------------------------------------------------------------------------------------------------
335   //Corrected jets
336   Met RecoilTools::PUCMet( const PFJetCol       *iJets,const PFCandidateCol *iCands,
337 <                         const Vertex *iVertex,const VertexCol *iVertices,
337 >                         const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
338                           Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
339                           Double_t iDZCut) {
340  
# Line 248 | Line 358 | Met RecoilTools::PUCMet( const PFJetCol
358    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
359      const PFJet *pJet = iJets->At(i0);
360      if(!JetTools::passPFLooseId(pJet))                                   continue;
361 +    if(!fJetIDMVA->passPt(pJet))                                         continue;
362      if(fJetIDMVA->pass(pJet,iVertex,iVertices))                          continue;
363      if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                            continue; //Quick cleaning==> if not done already
364 <    addNeut(pJet,lVec,lSumEt,-1);
364 >    addNeut(pJet,lVec,lSumEt,iRho,-1);
365 >  }
366 >  Met lMet(lVec.Px(),lVec.Py());
367 >  lMet.SetSumEt(lSumEt);
368 >  return lMet;
369 > }
370 > //--------------------------------------------------------------------------------------------------
371 > Met RecoilTools::PUCRecoil( Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
372 >                            const PFJetCol            *iJets,
373 >                            const PFCandidateCol   *iCands   ,
374 >                            const Vertex *iVertex,const VertexCol *iVertices,
375 >                            FactorizedJetCorrector *iJetCorrector,
376 >                           const PileupEnergyDensityCol *iPileupEnergyDensity,Double_t iDZCut) {
377 >
378 >  
379 >  FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
380 >  for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
381 >    const PFCandidate *pPF = iCands->At(i0);
382 >    if(!filter(pPF,iPhi1,iEta1,iPhi2,iEta2)) continue;    
383 >    const Track* pTrack = pPF->TrackerTrk();
384 >    if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
385 >    if(pTrack == 0                                   &&
386 >       (pPF->PFType() == PFCandidate::eGamma         ||
387 >        pPF->PFType() == PFCandidate::eEGammaHF      ||
388 >        pPF->PFType() == PFCandidate::eNeutralHadron ||
389 >        pPF->PFType() == PFCandidate::eHadronHF      ))
390 >      {lVec -= pPF->Mom(); lSumEt += pPF->Pt();}
391 >    if(pTrack        ==  0                           ) continue;
392 >    if(  !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
393 >           (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
394 >    lVec     -= pPF->Mom();
395 >    lSumEt   += pPF->Pt();
396 >  }
397 >  for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
398 >    const PFJet *pJet = iJets->At(i0);
399 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                      continue; //Quick cleaning==> if not done already
400 >    if(!fJetIDMVA->passPt(pJet,iJetCorrector,iPileupEnergyDensity))                continue;
401 >    if(!JetTools::passPFLooseId(pJet))                                             continue;
402 >    if(iJetCorrector != 0 && iPileupEnergyDensity != 0) if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
403 >    if(iJetCorrector == 0 || iPileupEnergyDensity == 0) if(fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
404 >    if(iJetCorrector != 0 && iPileupEnergyDensity != 0) addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity,-1);
405 >    if(iJetCorrector == 0 || iPileupEnergyDensity == 0) addNeut(pJet,lVec,lSumEt,1,-1);
406    }
407    Met lMet(lVec.Px(),lVec.Py());
408    lMet.SetSumEt(lSumEt);
# Line 276 | Line 428 | Met RecoilTools::PUCRecoil(Double_t iVis
428   Met RecoilTools::PUCRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
429                             const PFJetCol       *iJets,
430                             const PFCandidateCol *iCands,const Vertex *iVertex,
431 <                           const VertexCol *iVertices,
431 >                           const VertexCol *iVertices,Double_t iRho,
432                             Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
433                             Double_t iDZCut) {
434 <  Met lPUCMet = PUCMet(iJets,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
434 >  Met lPUCMet = PUCMet(iJets,iCands,iVertex,iVertices,iRho,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
435    lPUCMet.SetMex  (lPUCMet.Mex()+iVisPt*cos(iVisPhi));  
436    lPUCMet.SetMey  (lPUCMet.Mey()+iVisPt*sin(iVisPhi));
437    lPUCMet.SetSumEt(lPUCMet.SumEt()-iVisSumEt);
# Line 307 | Line 459 | Met RecoilTools::PUMet( const PFJetCol
459    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
460      const PFJet *pJet = iJets->At(i0);
461      if(!JetTools::passPFLooseId(pJet))                                             continue;
462 <    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                      continue; //Quick cleaning
462 >    if(!fJetIDMVA->passPt(pJet,iJetCorrector,iPileupEnergyDensity))                continue;
463 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                      continue;    
464      if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
465      addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
466    }
# Line 318 | Line 471 | Met RecoilTools::PUMet( const PFJetCol
471   //--------------------------------------------------------------------------------------------------
472   //Corrected Jets
473   Met RecoilTools::PUMet( const PFJetCol       *iJets,
474 <                        const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
474 >                        const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
475                          Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
476                          Double_t iDZCut) {
477  
# Line 336 | Line 489 | Met RecoilTools::PUMet( const PFJetCol
489    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
490      const PFJet *pJet = iJets->At(i0);
491      if(!JetTools::passPFLooseId(pJet))                                   continue;
492 +    if(!fJetIDMVA->passPt(pJet))                                         continue;
493      if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                            continue; //Quick cleaning
494      if(fJetIDMVA->pass(pJet,iVertex,iVertices))                          continue;
495 <    addNeut(pJet,lVec,lSumEt);
495 >    addNeut(pJet,lVec,lSumEt,iRho);
496 >  }
497 >  Met lMet(lVec.Px(),lVec.Py());
498 >  lMet.SetSumEt(lSumEt);
499 >  return lMet;
500 > }
501 > //--------------------------------------------------------------------------------------------------
502 > Met RecoilTools::PUMet( Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
503 >                        const PFJetCol            *iJets,
504 >                        const PFCandidateCol   *iCands   ,
505 >                        const Vertex *iVertex,const VertexCol *iVertices,
506 >                        FactorizedJetCorrector *iJetCorrector,
507 >                        const PileupEnergyDensityCol *iPileupEnergyDensity,Double_t iDZCut) {
508 >  
509 >  FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
510 >  for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
511 >    const PFCandidate *pPF = iCands->At(i0);
512 >    if(!filter(pPF,iPhi1,iEta1,iPhi2,iEta2)) continue;    
513 >    const Track* pTrack = pPF->TrackerTrk();
514 >    if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
515 >    if(pTrack        ==  0                           ) continue;
516 >    if(   ((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
517 >           (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
518 >    lVec     -= pPF->Mom();
519 >    lSumEt   += pPF->Pt();
520 >  }
521 >  for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
522 >    const PFJet *pJet = iJets->At(i0);
523 >    if(!JetTools::passPFLooseId(pJet))                                             continue;
524 >    if(!fJetIDMVA->passPt(pJet,iJetCorrector,iPileupEnergyDensity))                continue;
525 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                      continue; //Quick cleaning
526 >    if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
527 >    addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
528    }
529    Met lMet(lVec.Px(),lVec.Py());
530    lMet.SetSumEt(lSumEt);
# Line 362 | Line 548 | Met RecoilTools::PURecoil(Double_t iVisP
548   //Corrected Jets
549   Met RecoilTools::PURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
550                            const PFJetCol       *iJets,
551 <                          const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
551 >                          const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
552                            Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
553                            Double_t iDZCut) {
554 <  Met lPUMet = PUMet(iJets,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
554 >  Met lPUMet = PUMet(iJets,iCands,iVertex,iVertices,iRho,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
555    lPUMet.SetMex  (lPUMet.Mex()+iVisPt*cos(iVisPhi));  
556    lPUMet.SetMey  (lPUMet.Mey()+iVisPt*sin(iVisPhi));
557    lPUMet.SetSumEt(lPUMet.SumEt()-iVisSumEt);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines