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.2 by pharris, Wed Apr 4 09:51:31 2012 UTC vs.
Revision 1.19 by pharris, Fri Jul 20 18:21:49 2012 UTC

# Line 6 | Line 6 | ClassImp(mithep::RecoilTools)
6  
7   using namespace mithep;
8  
9 < RecoilTools::RecoilTools(TString iJetMVAFile) {
9 > RecoilTools::RecoilTools(TString iJetLowPtMVAFile,TString iJetHighPtMVAFile,TString iCutFile) {
10    fJetIDMVA = new JetIDMVA();
11 <  fJetIDMVA->Initialize( "JetIDMVA",iJetMVAFile,JetIDMVA::kBaseline);
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      if( (pfcand->HasTrackerTrk() && (fabs(pfcand->TrackerTrk()->DzCorrected(*iVertex))< iDZCut)) ||
95 <        (pfcand->HasGsfTrk()     && (fabs(pfcand->GsfTrk()->DzCorrected(*iVertex))    < iDZCut)) ) {
95 >        (pfcand->HasGsfTrk()     && (fabs(pfcand->GsfTrk()->DzCorrected(*iVertex))    < iDZCut)) ) {
96 >      trkMetx  -= pfcand->Px();
97 >      trkMety  -= pfcand->Py();
98 >      trkSumEt += pfcand->Pt();
99 >    }
100 >  }
101 >  Met lMet(trkMetx,trkMety);
102 >  lMet.SetSumEt(trkSumEt);
103 >  return lMet;
104 > }
105 > //--------------------------------------------------------------------------------------------------
106 > Met RecoilTools::trackRecoil(double iPhi1,double iEta1,double iPhi2,double iEta2,const PFCandidateCol *iCands,const Vertex *iVertex,Double_t iDZCut) {
107 >  double trkMetx  = 0;
108 >  double trkMety  = 0;
109 >  double trkSumEt = 0;
110 >  for(UInt_t i0=0; i0<iCands->GetEntries(); i0++) {
111 >    const PFCandidate *pfcand = iCands->At(i0);
112 >    if(!filter(pfcand,iPhi1,iEta1,iPhi2,iEta2)) continue;
113 >    if( (pfcand->HasTrackerTrk() && (fabs(pfcand->TrackerTrk()->DzCorrected(*iVertex))< iDZCut)) ||
114 >        (pfcand->HasGsfTrk()     && (fabs(pfcand->GsfTrk()->DzCorrected(*iVertex))    < iDZCut)) ) {
115        trkMetx  -= pfcand->Px();
116        trkMety  -= pfcand->Py();
117        trkSumEt += pfcand->Pt();
# Line 55 | Line 121 | Met RecoilTools::trackMet(const PFCandid
121    lMet.SetSumEt(trkSumEt);
122    return lMet;
123   }
58
124   //--------------------------------------------------------------------------------------------------
125   //Compute the recoil => here this requires the vector sum of the visible components
126   //VisPt    => Vector sum pT  of the visible non-recoiling components
# Line 75 | Line 140 | void RecoilTools::addNeut(const PFJet *i
140                            int iSign) {
141    FourVectorM lVec(0,0,0,0);
142    double lPt = fJetIDMVA->correctedPt(iJet,iJetCorrector,iPUEnergyDensity);
143 <  lPt *= (iJet->NeutralEmEnergy()/iJet->E() + iJet->NeutralHadronEnergy()/iJet->E());
143 >  //if(iJet->RawMom().Pt() < 10) lPt = TMath::Max(iJet->RawMom().Pt()-iJet->JetArea()*iPUEnergyDensity->At(0)->Rho(),0.);
144 >  lPt *= (iJet->NeutralEmEnergy()/iJet->RawMom().E() + iJet->NeutralHadronEnergy()/iJet->RawMom().E());
145    lVec.SetPt(lPt); lVec.SetEta(iJet->Eta()); lVec.SetPhi(iJet->Phi()); lVec.SetM(iJet->Mass());
146    if(iSign > 0) iVec -= lVec;
147    if(iSign < 0) iVec += lVec;
148 <  iSumEt += lPt;
148 >  //iSumEt += lPt;
149 >  //=== Above was a bug in the training
150 >  if(iSign > 0) iSumEt += lPt;
151 >  if(iSign < 0) iSumEt -= lPt;
152   }
153  
154   //--------------------------------------------------------------------------------------------------
155   //Corrected Jets
156 < void RecoilTools::addNeut(const PFJet *iJet,FourVectorM &iVec,Double_t &iSumEt,int iSign) {
156 > void RecoilTools::addNeut(const PFJet *iJet,FourVectorM &iVec,Double_t &iSumEt,double iRho,int iSign) {
157    FourVectorM lVec(0,0,0,0);
158    double lPt = iJet->Pt();
159 <  lPt *= (iJet->NeutralEmEnergy()/iJet->E() + iJet->NeutralHadronEnergy()/iJet->E());
159 >  //if(iJet->RawMom().Pt() < 10) lPt = TMath::Max(iJet->RawMom().Pt()-iJet->JetArea()*iRho,0.);//to be fixed
160 >  //if(iJet->RawMom().Pt() < 10) lPt = iJet->RawMom().Pt()*iJet->L1OffsetCorrectionScale();
161 >  lPt *= (iJet->NeutralEmEnergy()/iJet->RawMom().E() + iJet->NeutralHadronEnergy()/iJet->RawMom().E());
162    lVec.SetPt(lPt); lVec.SetEta(iJet->Eta()); lVec.SetPhi(iJet->Phi()); lVec.SetM(iJet->Mass());
163 <  if(iSign > 0) iVec -= lVec;
164 <  if(iSign < 0) iVec += lVec;
165 <  iSumEt += lPt;
163 >  if(iSign > 0) iVec   -= lVec;
164 >  if(iSign < 0) iVec   += lVec;
165 >  //iSumEt += lPt;
166 >  //=== Above was a bug in the training
167 >  if(iSign > 0) iSumEt += lPt;
168 >  if(iSign < 0) iSumEt -= lPt;
169   }
170  
171   //--------------------------------------------------------------------------------------------------
172   Met RecoilTools::NoPUMet( const PFJetCol       *iJets,FactorizedJetCorrector *iJetCorrector,
173                            const PileupEnergyDensityCol *iPileupEnergyDensity,
174 <                          const PFCandidateCol *iCands,const Vertex *iVertex,
174 >                          const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
175                            Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,Double_t iDZCut) {
176  
177    FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
# Line 108 | Line 182 | Met RecoilTools::NoPUMet( const PFJetCol
182      if(pTrack        ==  0                           ) continue;
183      if(  !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
184             (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
185 +    lSumEt   += pPF->Pt();  
186      lVec     -= pPF->Mom();
112    lSumEt   += pPF->Pt();
187    }
188 +  int lNPass = 0;
189    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
190      const PFJet *pJet = iJets->At(i0);
191 <    if(!fJetIDMVA->pass(pJet,iVertex,iJetCorrector,iPileupEnergyDensity)) continue;
192 <    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                             continue; //Quick cleaning==> if not done already
191 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                       continue;
192 >    if(!fJetIDMVA->passPt(pJet,iJetCorrector,iPileupEnergyDensity))                 continue;
193 >    if(!fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
194      addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
195 +    lNPass++;
196    }
197    Met lMet(lVec.Px(),lVec.Py());
198 <  lMet.SetSumEt(lSumEt);
198 >  lMet.SetSumEt( lSumEt);
199    return lMet;
200   }
201 < //--------------------------------------------------------------------------------------------------
201 > //-------------------------------------------------------------------------------------------------
202   //Corrected Jets
203 < Met RecoilTools::NoPUMet( const PFJetCol       *iJets,const PFCandidateCol *iCands,const Vertex *iVertex,
203 > Met RecoilTools::NoPUMet( const PFJetCol       *iJets,
204 >                          const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
205                            Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,Double_t iDZCut) {
206  
207    FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
# Line 135 | Line 213 | Met RecoilTools::NoPUMet( const PFJetCol
213      if(  !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
214             (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
215      lVec     -= pPF->Mom();
216 <    lSumEt   += pPF->Pt();
216 >    lSumEt   += pPF->Pt();  
217    }
218    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
219      const PFJet *pJet = iJets->At(i0);
220 <    if(!fJetIDMVA->pass(pJet,iVertex))                                    continue;
221 <    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                             continue; //Quick cleaning==> if not done already
222 <    addNeut(pJet,lVec,lSumEt);
220 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                             continue;
221 >   if(!fJetIDMVA->passPt(pJet))                                           continue;
222 >    if(!fJetIDMVA->pass(pJet,iVertex,iVertices))                          continue;
223 >    addNeut(pJet,lVec,lSumEt,iRho);
224    }
225    Met lMet(lVec.Px(),lVec.Py());
226    lMet.SetSumEt(lSumEt);
227    return lMet;
228   }
229   //--------------------------------------------------------------------------------------------------
230 + Met RecoilTools::NoPURecoil(Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
231 +                            const PFJetCol            *iJets,
232 +                            const PFCandidateCol   *iCands   ,
233 +                            const Vertex *iVertex,const VertexCol *iVertices,
234 +                            FactorizedJetCorrector *iJetCorrector,
235 +                            const PileupEnergyDensityCol *iPileupEnergyDensity,Double_t iDZCut) {
236 +
237 +  FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
238 +  for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
239 +    const PFCandidate *pPF = iCands->At(i0);
240 +    if(!filter(pPF,iPhi1,iEta1,iPhi2,iEta2)) continue;
241 +    const Track* pTrack = pPF->TrackerTrk();
242 +    if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
243 +    if(pTrack        ==  0                           ) continue;
244 +    if(  !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
245 +           (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
246 +    lSumEt   += pPF->Pt();  
247 +    lVec     -= pPF->Mom();
248 +  }
249 +  int lNPass = 0;
250 +  for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
251 +    const PFJet *pJet = iJets->At(i0);
252 +    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                       continue;
253 +    if(!fJetIDMVA->passPt(pJet,iJetCorrector,iPileupEnergyDensity))                continue;
254 +    //std::cout << " ======> " <<  fJetIDMVA->correctedPt(pJet,iJetCorrector,iPileupEnergyDensity) << " ---" << fJetIDMVA->MVAValue(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity) << " -- " << (pJet->NeutralEmEnergy()/pJet->RawMom().E() + pJet->NeutralHadronEnergy()/pJet->RawMom().E()) << std::endl;
255 +    if(iJetCorrector != 0 && iPileupEnergyDensity != 0) if(!fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
256 +    if(iJetCorrector == 0 || iPileupEnergyDensity == 0) if(!fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
257 +    if(iJetCorrector != 0 && iPileupEnergyDensity != 0) addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
258 +    if(iJetCorrector == 0 || iPileupEnergyDensity == 0) addNeut(pJet,lVec,lSumEt,1.);
259 +    lNPass++;
260 +  }
261 +  Met lMet(lVec.Px(),lVec.Py());
262 +  lMet.SetSumEt( lSumEt);
263 +  return lMet;
264 + }
265 +
266 + //--------------------------------------------------------------------------------------------------
267   Met RecoilTools::NoPURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
268 <                            const PFJetCol       *iJets,FactorizedJetCorrector *iJetCorrector,
268 >                            const PFJetCol            *iJets,FactorizedJetCorrector *iJetCorrector,
269                              const PileupEnergyDensityCol *iPileupEnergyDensity,
270 <                            const PFCandidateCol *iCands,const Vertex *iVertex,
270 >                            const PFCandidateCol   *iCands   ,const Vertex *iVertex,
271 >                            const VertexCol *iVertices,
272                              Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
273                              Double_t iDZCut) {
274    
275 <  Met lNoPUMet = NoPUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
275 >  Met lNoPUMet = NoPUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
276    lNoPUMet.SetMex  (lNoPUMet.Mex()+iVisPt*cos(iVisPhi));  
277    lNoPUMet.SetMey  (lNoPUMet.Mey()+iVisPt*sin(iVisPhi));
278    lNoPUMet.SetSumEt(lNoPUMet.SumEt()-iVisSumEt);
# Line 164 | Line 281 | Met RecoilTools::NoPURecoil(Double_t iVi
281   //--------------------------------------------------------------------------------------------------
282   //Corrected Jets
283   Met RecoilTools::NoPURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
284 <                            const PFJetCol       *iJets,const PFCandidateCol *iCands,const Vertex *iVertex,
284 >                            const PFJetCol       *iJets,const PFCandidateCol *iCands,
285 >                            const Vertex *iVertex,const VertexCol            *iVertices,Double_t iRho,
286                              Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
287                              Double_t iDZCut) {
288    
289 <  Met lNoPUMet = NoPUMet(iJets,iCands,iVertex,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
289 >  Met lNoPUMet = NoPUMet(iJets,iCands,iVertex,iVertices,iRho,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
290    lNoPUMet.SetMex  (lNoPUMet.Mex()+iVisPt*cos(iVisPhi));  
291    lNoPUMet.SetMey  (lNoPUMet.Mey()+iVisPt*sin(iVisPhi));
292    lNoPUMet.SetSumEt(lNoPUMet.SumEt()-iVisSumEt);
# Line 177 | Line 295 | Met RecoilTools::NoPURecoil(Double_t iVi
295   //--------------------------------------------------------------------------------------------------
296   Met RecoilTools::PUCMet( const PFJetCol       *iJets,FactorizedJetCorrector *iJetCorrector,
297                           const PileupEnergyDensityCol *iPileupEnergyDensity,
298 <                         const PFCandidateCol *iCands,const Vertex *iVertex,
298 >                         const PFCandidateCol *iCands,
299 >                         const Vertex *iVertex,const VertexCol *iVertices,
300                           Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
301                           Double_t iDZCut) {
302  
# Line 200 | Line 319 | Met RecoilTools::PUCMet( const PFJetCol
319    }
320    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
321      const PFJet *pJet = iJets->At(i0);
322 <    if(fJetIDMVA->correctedPt(pJet,iJetCorrector,iPileupEnergyDensity) < fJetIDMVA->fJetPtMin
323 <       && pJet->TrackCountingHighEffBJetTagsDisc() == -100)              continue; //This line is a bug in the Met training//
324 <    if(!JetTools::passPFLooseId(pJet))                                   continue;
325 <    if(fJetIDMVA->pass(pJet,iVertex,iJetCorrector,iPileupEnergyDensity)) continue;
207 <    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                            continue; //Quick cleaning==> if not done already
322 >    if(!JetTools::passPFLooseId(pJet))                                             continue;
323 >    if(!fJetIDMVA->passPt(pJet,iJetCorrector,iPileupEnergyDensity))                continue;
324 >    if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
325 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                      continue; //Quick cleaning==> if not done already
326      addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity,-1);
327    }
328    Met lMet(lVec.Px(),lVec.Py());
# Line 213 | Line 331 | Met RecoilTools::PUCMet( const PFJetCol
331   }
332   //--------------------------------------------------------------------------------------------------
333   //Corrected jets
334 < Met RecoilTools::PUCMet( const PFJetCol       *iJets,const PFCandidateCol *iCands,const Vertex *iVertex,
334 > Met RecoilTools::PUCMet( const PFJetCol       *iJets,const PFCandidateCol *iCands,
335 >                         const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
336                           Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
337                           Double_t iDZCut) {
338  
# Line 236 | Line 355 | Met RecoilTools::PUCMet( const PFJetCol
355    }
356    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
357      const PFJet *pJet = iJets->At(i0);
239    if(pJet->Pt() < fJetIDMVA->fJetPtMin
240       && pJet->TrackCountingHighEffBJetTagsDisc() == -100)              continue; //This line is a bug in the Met training//
358      if(!JetTools::passPFLooseId(pJet))                                   continue;
359 <    if(fJetIDMVA->pass(pJet,iVertex))                                    continue;
359 >    if(!fJetIDMVA->passPt(pJet))                                         continue;
360 >    if(fJetIDMVA->pass(pJet,iVertex,iVertices))                          continue;
361      if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                            continue; //Quick cleaning==> if not done already
362 <    addNeut(pJet,lVec,lSumEt,-1);
362 >    addNeut(pJet,lVec,lSumEt,iRho,-1);
363 >  }
364 >  Met lMet(lVec.Px(),lVec.Py());
365 >  lMet.SetSumEt(lSumEt);
366 >  return lMet;
367 > }
368 > //--------------------------------------------------------------------------------------------------
369 > Met RecoilTools::PUCRecoil( Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
370 >                            const PFJetCol            *iJets,
371 >                            const PFCandidateCol   *iCands   ,
372 >                            const Vertex *iVertex,const VertexCol *iVertices,
373 >                            FactorizedJetCorrector *iJetCorrector,
374 >                           const PileupEnergyDensityCol *iPileupEnergyDensity,Double_t iDZCut) {
375 >
376 >  
377 >  FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
378 >  for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
379 >    const PFCandidate *pPF = iCands->At(i0);
380 >    if(!filter(pPF,iPhi1,iEta1,iPhi2,iEta2)) continue;    
381 >    const Track* pTrack = pPF->TrackerTrk();
382 >    if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
383 >    if(pTrack == 0                                   &&
384 >       (pPF->PFType() == PFCandidate::eGamma         ||
385 >        pPF->PFType() == PFCandidate::eEGammaHF      ||
386 >        pPF->PFType() == PFCandidate::eNeutralHadron ||
387 >        pPF->PFType() == PFCandidate::eHadronHF      ))
388 >      {lVec -= pPF->Mom(); lSumEt += pPF->Pt();}
389 >    if(pTrack        ==  0                           ) continue;
390 >    if(  !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
391 >           (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
392 >    lVec     -= pPF->Mom();
393 >    lSumEt   += pPF->Pt();
394 >  }
395 >  for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
396 >    const PFJet *pJet = iJets->At(i0);
397 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                      continue; //Quick cleaning==> if not done already
398 >    if(!fJetIDMVA->passPt(pJet,iJetCorrector,iPileupEnergyDensity))                continue;
399 >    if(!JetTools::passPFLooseId(pJet))                                             continue;
400 >    if(iJetCorrector != 0 && iPileupEnergyDensity != 0) if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
401 >    if(iJetCorrector == 0 || iPileupEnergyDensity == 0) if(fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
402 >    if(iJetCorrector != 0 && iPileupEnergyDensity != 0) addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity,-1);
403 >    if(iJetCorrector == 0 || iPileupEnergyDensity == 0) addNeut(pJet,lVec,lSumEt,1,-1);
404    }
405    Met lMet(lVec.Px(),lVec.Py());
406    lMet.SetSumEt(lSumEt);
# Line 253 | Line 412 | Met RecoilTools::PUCRecoil(Double_t iVis
412                             const PFJetCol       *iJets,FactorizedJetCorrector *iJetCorrector,
413                             const PileupEnergyDensityCol *iPileupEnergyDensity,
414                             const PFCandidateCol *iCands,const Vertex *iVertex,
415 +                           const VertexCol *iVertices,
416                             Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
417                             Double_t iDZCut) {
418 <  Met lPUCMet = PUCMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
418 >  Met lPUCMet = PUCMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
419    lPUCMet.SetMex  (lPUCMet.Mex()+iVisPt*cos(iVisPhi));  
420    lPUCMet.SetMey  (lPUCMet.Mey()+iVisPt*sin(iVisPhi));
421    lPUCMet.SetSumEt(lPUCMet.SumEt()-iVisSumEt);
# Line 266 | Line 426 | Met RecoilTools::PUCRecoil(Double_t iVis
426   Met RecoilTools::PUCRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
427                             const PFJetCol       *iJets,
428                             const PFCandidateCol *iCands,const Vertex *iVertex,
429 +                           const VertexCol *iVertices,Double_t iRho,
430                             Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
431                             Double_t iDZCut) {
432 <  Met lPUCMet = PUCMet(iJets,iCands,iVertex,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
432 >  Met lPUCMet = PUCMet(iJets,iCands,iVertex,iVertices,iRho,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
433    lPUCMet.SetMex  (lPUCMet.Mex()+iVisPt*cos(iVisPhi));  
434    lPUCMet.SetMey  (lPUCMet.Mey()+iVisPt*sin(iVisPhi));
435    lPUCMet.SetSumEt(lPUCMet.SumEt()-iVisSumEt);
# Line 278 | Line 439 | Met RecoilTools::PUCRecoil(Double_t iVis
439   Met RecoilTools::PUMet( const PFJetCol       *iJets,FactorizedJetCorrector *iJetCorrector,
440                          const PileupEnergyDensityCol *iPileupEnergyDensity,
441                          const PFCandidateCol *iCands,const Vertex *iVertex,
442 +                        const VertexCol      *iVertices,
443                          Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
444                          Double_t iDZCut) {
445  
# Line 294 | Line 456 | Met RecoilTools::PUMet( const PFJetCol
456    }
457    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
458      const PFJet *pJet = iJets->At(i0);
459 <    if(fJetIDMVA->correctedPt(pJet,iJetCorrector,iPileupEnergyDensity) < fJetIDMVA->fJetPtMin
460 <       && pJet->TrackCountingHighEffBJetTagsDisc() == -100)              continue; //This line is a bug in the Met training//
461 <    if(!JetTools::passPFLooseId(pJet))                                   continue;
462 <    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                            continue; //Quick cleaning
301 <    if(fJetIDMVA->pass(pJet,iVertex,iJetCorrector,iPileupEnergyDensity)) continue;
459 >    if(!JetTools::passPFLooseId(pJet))                                             continue;
460 >    if(!fJetIDMVA->passPt(pJet,iJetCorrector,iPileupEnergyDensity))                continue;
461 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                      continue; //Quick cleaning
462 >    if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
463      addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
464    }
465    Met lMet(lVec.Px(),lVec.Py());
# Line 308 | Line 469 | Met RecoilTools::PUMet( const PFJetCol
469   //--------------------------------------------------------------------------------------------------
470   //Corrected Jets
471   Met RecoilTools::PUMet( const PFJetCol       *iJets,
472 <                        const PFCandidateCol *iCands,const Vertex *iVertex,
472 >                        const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
473                          Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
474                          Double_t iDZCut) {
475  
# Line 325 | Line 486 | Met RecoilTools::PUMet( const PFJetCol
486    }
487    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
488      const PFJet *pJet = iJets->At(i0);
328    if(pJet->Pt() < fJetIDMVA->fJetPtMin
329       && pJet->TrackCountingHighEffBJetTagsDisc() == -100)              continue; //This line is a bug in the Met training//
489      if(!JetTools::passPFLooseId(pJet))                                   continue;
490 +    if(!fJetIDMVA->passPt(pJet))                                         continue;
491      if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                            continue; //Quick cleaning
492 <    if(fJetIDMVA->pass(pJet,iVertex))                                    continue;
493 <    addNeut(pJet,lVec,lSumEt);
492 >    if(fJetIDMVA->pass(pJet,iVertex,iVertices))                          continue;
493 >    addNeut(pJet,lVec,lSumEt,iRho);
494 >  }
495 >  Met lMet(lVec.Px(),lVec.Py());
496 >  lMet.SetSumEt(lSumEt);
497 >  return lMet;
498 > }
499 > //--------------------------------------------------------------------------------------------------
500 > Met RecoilTools::PUMet( Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
501 >                        const PFJetCol            *iJets,
502 >                        const PFCandidateCol   *iCands   ,
503 >                        const Vertex *iVertex,const VertexCol *iVertices,
504 >                        FactorizedJetCorrector *iJetCorrector,
505 >                        const PileupEnergyDensityCol *iPileupEnergyDensity,Double_t iDZCut) {
506 >  
507 >  FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
508 >  for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
509 >    const PFCandidate *pPF = iCands->At(i0);
510 >    if(!filter(pPF,iPhi1,iEta1,iPhi2,iEta2)) continue;    
511 >    const Track* pTrack = pPF->TrackerTrk();
512 >    if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
513 >    if(pTrack        ==  0                           ) continue;
514 >    if(   ((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
515 >           (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
516 >    lVec     -= pPF->Mom();
517 >    lSumEt   += pPF->Pt();
518 >  }
519 >  for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
520 >    const PFJet *pJet = iJets->At(i0);
521 >    if(!JetTools::passPFLooseId(pJet))                                             continue;
522 >    if(!fJetIDMVA->passPt(pJet,iJetCorrector,iPileupEnergyDensity))                continue;
523 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                      continue; //Quick cleaning
524 >    if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
525 >    addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
526    }
527    Met lMet(lVec.Px(),lVec.Py());
528    lMet.SetSumEt(lSumEt);
# Line 341 | Line 533 | Met RecoilTools::PURecoil(Double_t iVisP
533                            const PFJetCol       *iJets,FactorizedJetCorrector *iJetCorrector,
534                            const PileupEnergyDensityCol *iPileupEnergyDensity,
535                            const PFCandidateCol *iCands,const Vertex *iVertex,
536 +                          const VertexCol      *iVertices,
537                            Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
538                            Double_t iDZCut) {
539 <  Met lPUMet = PUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
539 >  Met lPUMet = PUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
540    lPUMet.SetMex  (lPUMet.Mex()+iVisPt*cos(iVisPhi));  
541    lPUMet.SetMey  (lPUMet.Mey()+iVisPt*sin(iVisPhi));
542    lPUMet.SetSumEt(lPUMet.SumEt()-iVisSumEt);
# Line 353 | Line 546 | Met RecoilTools::PURecoil(Double_t iVisP
546   //Corrected Jets
547   Met RecoilTools::PURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
548                            const PFJetCol       *iJets,
549 <                          const PFCandidateCol *iCands,const Vertex *iVertex,
549 >                          const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
550                            Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
551                            Double_t iDZCut) {
552 <  Met lPUMet = PUMet(iJets,iCands,iVertex,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
552 >  Met lPUMet = PUMet(iJets,iCands,iVertex,iVertices,iRho,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
553    lPUMet.SetMex  (lPUMet.Mex()+iVisPt*cos(iVisPhi));  
554    lPUMet.SetMey  (lPUMet.Mey()+iVisPt*sin(iVisPhi));
555    lPUMet.SetSumEt(lPUMet.SumEt()-iVisSumEt);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines