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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines