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.1 by pharris, Wed Mar 21 18:56:26 2012 UTC vs.
Revision 1.4 by pharris, Fri Apr 13 14:24:00 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::kLoose,iJetLowPtMVAFile,iJetHighPtMVAFile,JetIDMVA::kBaseline,iCutFile);
12   }
13   //--------------------------------------------------------------------------------------------------
14   RecoilTools::~RecoilTools() {
# Line 80 | Line 80 | void RecoilTools::addNeut(const PFJet *i
80    if(iSign > 0) iVec -= lVec;
81    if(iSign < 0) iVec += lVec;
82    iSumEt += lPt;
83 +  //=== Above was a bug in the training
84 +  //if(iSign > 0) iSumEt += lPt;
85 +  //if(iSign < 0) iSumEt -= lPt;
86   }
87 +
88 + //--------------------------------------------------------------------------------------------------
89 + //Corrected Jets
90 + void RecoilTools::addNeut(const PFJet *iJet,FourVectorM &iVec,Double_t &iSumEt,int iSign) {
91 +  FourVectorM lVec(0,0,0,0);
92 +  double lPt = iJet->Pt();
93 +  lPt *= (iJet->NeutralEmEnergy()/iJet->E() + iJet->NeutralHadronEnergy()/iJet->E());
94 +  lVec.SetPt(lPt); lVec.SetEta(iJet->Eta()); lVec.SetPhi(iJet->Phi()); lVec.SetM(iJet->Mass());
95 +  if(iSign > 0) iVec   -= lVec;
96 +  if(iSign < 0) iVec   += lVec;
97 +  iSumEt += lPt;
98 +  //=== Above was a bug in the training
99 +  //if(iSign > 0) iSumEt += lPt;
100 +  //if(iSign < 0) iSumEt -= lPt;
101 + }
102 +
103   //--------------------------------------------------------------------------------------------------
104   Met RecoilTools::NoPUMet( const PFJetCol       *iJets,FactorizedJetCorrector *iJetCorrector,
105                            const PileupEnergyDensityCol *iPileupEnergyDensity,
106 <                          const PFCandidateCol *iCands,const Vertex *iVertex,
106 >                          const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
107                            Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,Double_t iDZCut) {
108  
109    FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
# Line 98 | Line 117 | Met RecoilTools::NoPUMet( const PFJetCol
117      lVec     -= pPF->Mom();
118      lSumEt   += pPF->Pt();
119    }
120 +  int lNPass = 0;
121    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
122      const PFJet *pJet = iJets->At(i0);
123 <    if(!fJetIDMVA->pass(pJet,iVertex,iJetCorrector,iPileupEnergyDensity)) continue;
124 <    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                             continue; //Quick cleaning==> if not done already
123 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                       continue; //Quick cleaning==> if not done already
124 >    if(!fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
125      addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
126 +    lNPass++;
127 +  }
128 +  Met lMet(lVec.Px(),lVec.Py());
129 +  lMet.SetSumEt( lSumEt);
130 +  return lMet;
131 + }
132 + //--------------------------------------------------------------------------------------------------
133 + //Corrected Jets
134 + Met RecoilTools::NoPUMet( const PFJetCol       *iJets,
135 +                          const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
136 +                          Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,Double_t iDZCut) {
137 +
138 +  FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
139 +  for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
140 +    const PFCandidate *pPF = iCands->At(i0);
141 +    const Track* pTrack = pPF->TrackerTrk();
142 +    if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
143 +    if(pTrack        ==  0                           ) continue;
144 +    if(  !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
145 +           (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
146 +    lVec     -= pPF->Mom();
147 +    lSumEt   += pPF->Pt();
148 +  }
149 +  for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
150 +    const PFJet *pJet = iJets->At(i0);
151 +    if(!fJetIDMVA->pass(pJet,iVertex,iVertices))                          continue;
152 +    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                             continue; //Quick cleaning==> if not done already
153 +    addNeut(pJet,lVec,lSumEt);
154    }
155    Met lMet(lVec.Px(),lVec.Py());
156    lMet.SetSumEt(lSumEt);
# Line 110 | Line 158 | Met RecoilTools::NoPUMet( const PFJetCol
158   }
159   //--------------------------------------------------------------------------------------------------
160   Met RecoilTools::NoPURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
161 <                            const PFJetCol       *iJets,FactorizedJetCorrector *iJetCorrector,
161 >                            const PFJetCol            *iJets,FactorizedJetCorrector *iJetCorrector,
162                              const PileupEnergyDensityCol *iPileupEnergyDensity,
163 <                            const PFCandidateCol *iCands,const Vertex *iVertex,
163 >                            const PFCandidateCol   *iCands   ,const Vertex *iVertex,
164 >                            const VertexCol *iVertices,
165 >                            Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
166 >                            Double_t iDZCut) {
167 >  
168 >  Met lNoPUMet = NoPUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
169 >  lNoPUMet.SetMex  (lNoPUMet.Mex()+iVisPt*cos(iVisPhi));  
170 >  lNoPUMet.SetMey  (lNoPUMet.Mey()+iVisPt*sin(iVisPhi));
171 >  lNoPUMet.SetSumEt(lNoPUMet.SumEt()-iVisSumEt);
172 >  return lNoPUMet;
173 > }
174 > //--------------------------------------------------------------------------------------------------
175 > //Corrected Jets
176 > Met RecoilTools::NoPURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
177 >                            const PFJetCol       *iJets,const PFCandidateCol *iCands,
178 >                            const Vertex *iVertex,const VertexCol            *iVertices,
179                              Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
180                              Double_t iDZCut) {
181    
182 <  Met lNoPUMet = NoPUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
182 >  Met lNoPUMet = NoPUMet(iJets,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
183    lNoPUMet.SetMex  (lNoPUMet.Mex()+iVisPt*cos(iVisPhi));  
184    lNoPUMet.SetMey  (lNoPUMet.Mey()+iVisPt*sin(iVisPhi));
185    lNoPUMet.SetSumEt(lNoPUMet.SumEt()-iVisSumEt);
# Line 125 | Line 188 | Met RecoilTools::NoPURecoil(Double_t iVi
188   //--------------------------------------------------------------------------------------------------
189   Met RecoilTools::PUCMet( const PFJetCol       *iJets,FactorizedJetCorrector *iJetCorrector,
190                           const PileupEnergyDensityCol *iPileupEnergyDensity,
191 <                         const PFCandidateCol *iCands,const Vertex *iVertex,
191 >                         const PFCandidateCol *iCands,
192 >                         const Vertex *iVertex,const VertexCol *iVertices,
193 >                         Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
194 >                         Double_t iDZCut) {
195 >
196 >  FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
197 >  for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
198 >    const PFCandidate *pPF = iCands->At(i0);
199 >    const Track* pTrack = pPF->TrackerTrk();
200 >    if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
201 >    if(pTrack == 0                                   &&
202 >       (pPF->PFType() == PFCandidate::eGamma         ||
203 >        pPF->PFType() == PFCandidate::eEGammaHF      ||
204 >        pPF->PFType() == PFCandidate::eNeutralHadron ||
205 >        pPF->PFType() == PFCandidate::eHadronHF      ))
206 >      {lVec -= pPF->Mom(); lSumEt += pPF->Pt();}
207 >    if(pTrack        ==  0                           ) continue;
208 >    if(  !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
209 >           (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
210 >    lVec     -= pPF->Mom();
211 >    lSumEt   += pPF->Pt();
212 >  }
213 >  for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
214 >    const PFJet *pJet = iJets->At(i0);
215 >    if(!JetTools::passPFLooseId(pJet))                                             continue;
216 >    if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
217 >    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                      continue; //Quick cleaning==> if not done already
218 >    addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity,-1);
219 >  }
220 >  Met lMet(lVec.Px(),lVec.Py());
221 >  lMet.SetSumEt(lSumEt);
222 >  return lMet;
223 > }
224 > //--------------------------------------------------------------------------------------------------
225 > //Corrected jets
226 > Met RecoilTools::PUCMet( const PFJetCol       *iJets,const PFCandidateCol *iCands,
227 >                         const Vertex *iVertex,const VertexCol *iVertices,
228                           Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
229                           Double_t iDZCut) {
230  
# Line 148 | Line 247 | Met RecoilTools::PUCMet( const PFJetCol
247    }
248    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
249      const PFJet *pJet = iJets->At(i0);
151    if(fJetIDMVA->correctedPt(pJet,iJetCorrector,iPileupEnergyDensity) < fJetIDMVA->fJetPtMin
152       && pJet->TrackCountingHighEffBJetTagsDisc() == -100)              continue; //This line is a bug in the Met training//
250      if(!JetTools::passPFLooseId(pJet))                                   continue;
251 <    if(fJetIDMVA->pass(pJet,iVertex,iJetCorrector,iPileupEnergyDensity)) continue;
251 >    if(fJetIDMVA->pass(pJet,iVertex,iVertices))                          continue;
252      if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                            continue; //Quick cleaning==> if not done already
253 <    addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity,-1);
253 >    addNeut(pJet,lVec,lSumEt,-1);
254    }
255    Met lMet(lVec.Px(),lVec.Py());
256    lMet.SetSumEt(lSumEt);
# Line 165 | Line 262 | Met RecoilTools::PUCRecoil(Double_t iVis
262                             const PFJetCol       *iJets,FactorizedJetCorrector *iJetCorrector,
263                             const PileupEnergyDensityCol *iPileupEnergyDensity,
264                             const PFCandidateCol *iCands,const Vertex *iVertex,
265 +                           const VertexCol *iVertices,
266                             Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
267                             Double_t iDZCut) {
268 <  Met lPUCMet = PUCMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
268 >  Met lPUCMet = PUCMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
269 >  lPUCMet.SetMex  (lPUCMet.Mex()+iVisPt*cos(iVisPhi));  
270 >  lPUCMet.SetMey  (lPUCMet.Mey()+iVisPt*sin(iVisPhi));
271 >  lPUCMet.SetSumEt(lPUCMet.SumEt()-iVisSumEt);
272 >  return lPUCMet;
273 > }
274 > //--------------------------------------------------------------------------------------------------
275 > //Corrected Jets
276 > Met RecoilTools::PUCRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
277 >                           const PFJetCol       *iJets,
278 >                           const PFCandidateCol *iCands,const Vertex *iVertex,
279 >                           const VertexCol *iVertices,
280 >                           Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
281 >                           Double_t iDZCut) {
282 >  Met lPUCMet = PUCMet(iJets,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
283    lPUCMet.SetMex  (lPUCMet.Mex()+iVisPt*cos(iVisPhi));  
284    lPUCMet.SetMey  (lPUCMet.Mey()+iVisPt*sin(iVisPhi));
285    lPUCMet.SetSumEt(lPUCMet.SumEt()-iVisSumEt);
# Line 177 | Line 289 | Met RecoilTools::PUCRecoil(Double_t iVis
289   Met RecoilTools::PUMet( const PFJetCol       *iJets,FactorizedJetCorrector *iJetCorrector,
290                          const PileupEnergyDensityCol *iPileupEnergyDensity,
291                          const PFCandidateCol *iCands,const Vertex *iVertex,
292 +                        const VertexCol      *iVertices,
293 +                        Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
294 +                        Double_t iDZCut) {
295 +
296 +  FourVectorM lVec        (0,0,0,0); double lSumEt          = 0;
297 +  for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
298 +    const PFCandidate *pPF = iCands->At(i0);
299 +    const Track* pTrack = pPF->TrackerTrk();
300 +    if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
301 +    if(pTrack        ==  0                           ) continue;
302 +    if(   ((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
303 +           (pPF->HasGsfTrk()     && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex))    <iDZCut)))) continue;
304 +    lVec     -= pPF->Mom();
305 +    lSumEt   += pPF->Pt();
306 +  }
307 +  for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
308 +    const PFJet *pJet = iJets->At(i0);
309 +    if(!JetTools::passPFLooseId(pJet))                                             continue;
310 +    if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                                      continue; //Quick cleaning
311 +    if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
312 +    addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
313 +  }
314 +  Met lMet(lVec.Px(),lVec.Py());
315 +  lMet.SetSumEt(lSumEt);
316 +  return lMet;
317 + }
318 + //--------------------------------------------------------------------------------------------------
319 + //Corrected Jets
320 + Met RecoilTools::PUMet( const PFJetCol       *iJets,
321 +                        const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
322                          Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
323                          Double_t iDZCut) {
324  
# Line 193 | Line 335 | Met RecoilTools::PUMet( const PFJetCol
335    }
336    for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
337      const PFJet *pJet = iJets->At(i0);
196    if(fJetIDMVA->correctedPt(pJet,iJetCorrector,iPileupEnergyDensity) < fJetIDMVA->fJetPtMin
197       && pJet->TrackCountingHighEffBJetTagsDisc() == -100)              continue; //This line is a bug in the Met training//
338      if(!JetTools::passPFLooseId(pJet))                                   continue;
339      if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2))                            continue; //Quick cleaning
340 <    if(fJetIDMVA->pass(pJet,iVertex,iJetCorrector,iPileupEnergyDensity)) continue;
341 <    addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
340 >    if(fJetIDMVA->pass(pJet,iVertex,iVertices))                          continue;
341 >    addNeut(pJet,lVec,lSumEt);
342    }
343    Met lMet(lVec.Px(),lVec.Py());
344    lMet.SetSumEt(lSumEt);
# Line 209 | Line 349 | Met RecoilTools::PURecoil(Double_t iVisP
349                            const PFJetCol       *iJets,FactorizedJetCorrector *iJetCorrector,
350                            const PileupEnergyDensityCol *iPileupEnergyDensity,
351                            const PFCandidateCol *iCands,const Vertex *iVertex,
352 +                          const VertexCol      *iVertices,
353 +                          Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
354 +                          Double_t iDZCut) {
355 +  Met lPUMet = PUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
356 +  lPUMet.SetMex  (lPUMet.Mex()+iVisPt*cos(iVisPhi));  
357 +  lPUMet.SetMey  (lPUMet.Mey()+iVisPt*sin(iVisPhi));
358 +  lPUMet.SetSumEt(lPUMet.SumEt()-iVisSumEt);
359 +  return lPUMet;
360 + }
361 + //--------------------------------------------------------------------------------------------------
362 + //Corrected Jets
363 + Met RecoilTools::PURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
364 +                          const PFJetCol       *iJets,
365 +                          const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
366                            Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
367                            Double_t iDZCut) {
368 <  Met lPUMet = PUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
368 >  Met lPUMet = PUMet(iJets,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
369    lPUMet.SetMex  (lPUMet.Mex()+iVisPt*cos(iVisPhi));  
370    lPUMet.SetMey  (lPUMet.Mey()+iVisPt*sin(iVisPhi));
371    lPUMet.SetSumEt(lPUMet.SumEt()-iVisSumEt);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines