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

Comparing UserCode/MitPhysics/Mods/src/MuonIDMod.cc (file contents):
Revision 1.37 by ceballos, Fri Jan 21 11:25:28 2011 UTC vs.
Revision 1.46 by ceballos, Tue Apr 5 06:37:07 2011 UTC

# Line 1 | Line 1
1 <        // $Id$
1 > // $Id$
2  
3   #include "MitPhysics/Mods/interface/MuonIDMod.h"
4   #include "MitCommon/MathTools/interface/MathUtils.h"
5 < #include "MitAna/DataTree/interface/MuonCol.h"
5 > #include "MitAna/DataTree/interface/MuonFwd.h"
6 > #include "MitAna/DataTree/interface/ElectronFwd.h"
7   #include "MitAna/DataTree/interface/VertexCol.h"
8   #include "MitPhysics/Init/interface/ModNames.h"
9  
# Line 15 | Line 16 | ClassImp(mithep::MuonIDMod)
16    BaseMod(name,title),
17    fMuonBranchName(Names::gkMuonBrn),
18    fCleanMuonsName(ModNames::gkCleanMuonsName),  
19 +  fNonIsolatedMuonsName("random"),  
20 +  fNonIsolatedElectronsName("random"),  
21    fVertexName(ModNames::gkGoodVertexesName),
22 +  fBeamSpotName(Names::gkBeamSpotBrn),
23 +  fTrackName(Names::gkTrackBrn),
24 +  fPFCandidatesName(Names::gkPFCandidatesBrn),
25    fMuonIDType("WWMuId"),
26 <  fMuonIsoType("TrackCaloSliding"),  
26 >  fMuonIsoType("TrackCaloSliding"),
27    fMuonClassType("Global"),  
28    fTrackIsolationCut(3.0),
29    fCaloIsolationCut(3.0),
30    fCombIsolationCut(0.15),
31    fMuonPtMin(10),
32    fApplyD0Cut(kTRUE),
33 +  fApplyDZCut(kTRUE),
34    fD0Cut(0.020),
35 +  fDZCut(0.20),
36 +  fWhichVertex(-1),
37    fEtaCut(2.4),
29  fReverseIsoCut(kFALSE),
30  fReverseD0Cut(kFALSE),
38    fMuIDType(kIdUndef),
39    fMuIsoType(kIsoUndef),
40    fMuClassType(kClassUndef),
41    fMuons(0),
42    fVertices(0),
43 <  fMuonTools(0)
43 >  fBeamSpot(0),
44 >  fTracks(0),
45 >  fPFCandidates(0),
46 >  fNonIsolatedMuons(0),
47 >  fNonIsolatedElectrons(0),
48 >  fPileupEnergyDensityName(Names::gkPileupEnergyDensityBrn),
49 >  fPileupEnergyDensity(0)
50   {
51    // Constructor.
52   }
# Line 43 | Line 56 | void MuonIDMod::Process()
56   {
57    // Process entries of the tree.
58  
59 <  LoadEventObject(fMuonBranchName, fMuons);
60 <
59 >  if(fMuIsoType != kPFIsoNoL) {
60 >    LoadEventObject(fMuonBranchName, fMuons);
61 >  }
62 >  else {
63 >    fMuons = GetObjThisEvt<MuonOArr>(fMuonBranchName);
64 >  }
65 >  LoadEventObject(fBeamSpotName, fBeamSpot);
66 >  LoadEventObject(fTrackName, fTracks);
67 >  LoadEventObject(fPFCandidatesName, fPFCandidates);
68 >  if(fMuIsoType == kTrackCaloSliding) {
69 >    LoadEventObject(fPileupEnergyDensityName, fPileupEnergyDensity);
70 >  }
71    MuonOArr *CleanMuons = new MuonOArr;
72    CleanMuons->SetName(fCleanMuonsName);
73  
74 +  fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
75 +
76    for (UInt_t i=0; i<fMuons->GetEntries(); ++i) {
77      const Muon *mu = fMuons->At(i);
78  
# Line 181 | Line 206 | void MuonIDMod::Process()
206            (mu->IsoR03EmEt() + mu->IsoR03HadEt() < fCaloIsolationCut);
207          break;
208        case kTrackCaloCombined:
209 <        isocut = (1.0 * mu->IsoR03SumPt() + 1.0 * mu->IsoR03EmEt() +
210 <                  1.0 * mu->IsoR03HadEt() < fCombIsolationCut);
209 >        isocut = (1.0 * mu->IsoR03SumPt() +
210 >                  1.0 * mu->IsoR03EmEt()  +
211 >                  1.0 * mu->IsoR03HadEt() < fCombIsolationCut);
212          break;
213        case kTrackCaloSliding:
214          {
215 <          Double_t totalIso = 1.0 * mu->IsoR03SumPt() +
216 <                              1.0 * mu->IsoR03EmEt() +
217 <                              1.0 * mu->IsoR03HadEt();
215 >          const PileupEnergyDensity *rho =  fPileupEnergyDensity->At(0);
216 >          Double_t totalIso =  mu->IsoR03SumPt() + TMath::Max(mu->IsoR03EmEt() + mu->IsoR03HadEt() - rho->Rho() * TMath::Pi() * 0.3 * 0.3, 0.0);
217 >          // trick to change the signal region cut
218 >          double theIsoCut = fCombIsolationCut;
219 >          if(theIsoCut < 0.20){
220 >            if(mu->Pt() >  20.0) theIsoCut = 0.15;
221 >            else                 theIsoCut = 0.10;
222 >          }
223 >          if (totalIso < (mu->Pt()*theIsoCut)) isocut = kTRUE;
224 >        }
225 >        break;
226 >      case kTrackCaloSlidingNoCorrection:
227 >        {
228 >          Double_t totalIso =  1.0 * mu->IsoR03SumPt() +
229 >                               1.0 * mu->IsoR03EmEt()  +
230 >                               1.0 * mu->IsoR03HadEt();
231 >          // trick to change the signal region cut
232 >          double theIsoCut = fCombIsolationCut;
233 >          if(theIsoCut < 0.20){
234 >            if(mu->Pt() >  20.0) theIsoCut = 0.15;
235 >            else                 theIsoCut = 0.10;
236 >          }
237 >          if (totalIso < (mu->Pt()*theIsoCut)) isocut = kTRUE;
238 >        }
239 >        break;
240 >      case kPFIso:
241 >        {
242 >          Double_t beta = IsolationTools::BetaM(fTracks, mu, fVertices->At(0), 0.0, 0.2, 0.3, 0.02);
243 >          if(beta == 0) beta = 1.0;
244 >          Double_t totalIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fVertices->At(0), 0.2, 0.5, 0.3, 0.02, 0, beta, fNonIsolatedMuons, fNonIsolatedElectrons);
245 >          if (totalIso < (mu->Pt()*fCombIsolationCut) )
246 >            isocut = kTRUE;
247 >        }
248 >        break;
249 >      case kPFIsoNoL:
250 >        {
251 >          fNonIsolatedMuons     = GetObjThisEvt<MuonCol>(fNonIsolatedMuonsName);
252 >          fNonIsolatedElectrons = GetObjThisEvt<ElectronCol>(fNonIsolatedElectronsName);
253 >
254 >          Double_t beta = IsolationTools::BetaM(fTracks, mu, fVertices->At(0), 0.0, 0.2, 0.3, 0.02);
255 >          if(beta == 0) beta = 1.0;
256 >          Double_t totalIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fVertices->At(0), 0.2, 0.5, 0.3, 0.02, 3, beta, fNonIsolatedMuons, fNonIsolatedElectrons);
257            if (totalIso < (mu->Pt()*fCombIsolationCut) )
258              isocut = kTRUE;
194
195          if     (fReverseIsoCut == kTRUE &&
196                  isocut == kFALSE && totalIso < 10)
197            isocut = kTRUE;
198          else if(fReverseIsoCut == kTRUE)
199            isocut = kFALSE;
259          }
260          break;
261        case kNoIso:
# Line 210 | Line 269 | void MuonIDMod::Process()
269      if (isocut == kFALSE)
270        continue;
271  
272 +    // apply d0 cut
273      if (fApplyD0Cut) {
274 <      fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
275 <      Bool_t passD0cut = MuonTools::PassD0Cut(mu, fVertices, fD0Cut);
274 >      Bool_t passD0cut = kTRUE;
275 >      if(fD0Cut < 0.05) { // trick to change the signal region cut
276 >        if      (mu->Pt() >  20.0) fD0Cut = 0.02;
277 >        else if (mu->Pt() <= 20.0) fD0Cut = 0.01;
278 >      }
279 >      if(fWhichVertex >= -1) passD0cut = MuonTools::PassD0Cut(mu, fVertices, fD0Cut, fWhichVertex);
280 >      else                   passD0cut = MuonTools::PassD0Cut(mu, fBeamSpot, fD0Cut);
281        if (!passD0cut)
282          continue;
283      }
284  
285 +    // apply dz cut
286 +    if (fApplyDZCut) {
287 +      Bool_t passDZcut = MuonTools::PassDZCut(mu, fVertices, fDZCut, fWhichVertex);
288 +      if (!passDZcut)
289 +        continue;
290 +    }
291 +
292      // add good muon
293      CleanMuons->Add(mu);
294    }
# Line 234 | Line 306 | void MuonIDMod::SlaveBegin()
306    // Run startup code on the computer (slave) doing the actual analysis. Here,
307    // we just request the muon collection branch.
308  
309 <  ReqEventObject(fMuonBranchName, fMuons, kTRUE);
310 <
311 <  fMuonTools = new MuonTools;
309 >   // In this case we cannot have a branch
310 >  if (fMuonIsoType.CompareTo("PFIsoNoL") != 0) {
311 >    ReqEventObject(fMuonBranchName, fMuons, kTRUE);
312 >  }
313 >  ReqEventObject(fBeamSpotName, fBeamSpot, kTRUE);
314 >  ReqEventObject(fTrackName, fTracks, kTRUE);
315 >  ReqEventObject(fPFCandidatesName, fPFCandidates, kTRUE);
316 >  if (fMuonIsoType.CompareTo("TrackCaloSliding") == 0) {
317 >    ReqEventObject(fPileupEnergyDensityName, fPileupEnergyDensity, kTRUE);
318 >  }
319  
320    if (fMuonIDType.CompareTo("WMuId") == 0)
321      fMuIDType = kWMuId;
# Line 267 | Line 346 | void MuonIDMod::SlaveBegin()
346      fMuIsoType = kTrackCaloCombined;
347    else if (fMuonIsoType.CompareTo("TrackCaloSliding") == 0)
348      fMuIsoType = kTrackCaloSliding;
349 +  else if (fMuonIsoType.CompareTo("TrackCaloSlidingNoCorrection") == 0)
350 +    fMuIsoType = kTrackCaloSlidingNoCorrection;
351 +  else if (fMuonIsoType.CompareTo("PFIso") == 0)
352 +    fMuIsoType = kPFIso;
353 +  else if (fMuonIsoType.CompareTo("PFIsoNoL") == 0)
354 +    fMuIsoType = kPFIsoNoL;
355    else if (fMuonIsoType.CompareTo("NoIso") == 0)
356      fMuIsoType = kNoIso;
357    else if (fMuonIsoType.CompareTo("Custom") == 0) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines