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.80 by ceballos, Mon May 7 18:05:51 2012 UTC vs.
Revision 1.84 by ceballos, Fri Jun 15 11:58:54 2012 UTC

# Line 30 | Line 30 | ClassImp(mithep::MuonIDMod)
30    fCaloIsolationCut(3.0),
31    fCombIsolationCut(0.15),
32    fCombRelativeIsolationCut(0.15),
33 <  fPFIsolationCut(-1.0),
33 >  fPFIsolationCut(-999.0),
34    fMuonPtMin(10),
35    fApplyD0Cut(kTRUE),
36    fApplyDZCut(kTRUE),
# Line 74 | Line 74 | void MuonIDMod::Process()
74    LoadEventObject(fTrackName, fTracks);
75    LoadEventObject(fPFCandidatesName, fPFCandidates);
76    if(fMuIsoType == kTrackCaloSliding ||
77 +     fMuIsoType == kCombinedRelativeConeAreaCorrected ||        
78 +     fMuIsoType == kPFIsoEffectiveAreaCorrected ||
79       fMuIsoType == kMVAIso_BDTG_IDIso ||
80       fMuIsoType == kIsoRingsV0_BDTG_Iso ||
81       fMuIsoType == kIsoDeltaR
# Line 158 | Line 160 | void MuonIDMod::Process()
160            eta = TMath::Abs(mu->TrackerTrk()->Eta());
161          }
162          break;
163 +      case kGlobalOnly:
164 +        pass = mu->HasGlobalTrk();
165 +        if (pass && mu->TrackerTrk()) {
166 +          pt  = mu->TrackerTrk()->Pt();
167 +          eta = TMath::Abs(mu->TrackerTrk()->Eta());
168 +        }
169 +        else {
170 +          pt  = mu->Pt();
171 +          eta = TMath::Abs(mu->Eta());
172 +        }
173 +        break;
174        default:
175          break;
176      }
# Line 204 | Line 217 | void MuonIDMod::Process()
217                   mu->Quality().Quality(MuonQuality::GlobalMuonPromptTight);
218          break;
219        case kTight:
220 <        idpass = mu->BestTrk() !=  0 &&
221 <                 mu->Quality().Quality(MuonQuality::TMOneStationTight) &&
222 <                 mu->Quality().Quality(MuonQuality::TM2DCompatibilityTight) &&
223 <                 mu->BestTrk()->NHits() > 10 &&
224 <                 RChi2 < 10.0 &&
212 <                 mu->Quality().Quality(MuonQuality::GlobalMuonPromptTight);
220 >        idpass = mu->BestTrk() != 0 &&
221 >                 mu->NTrkLayersHit() > 5 &&
222 >                 mu->IsPFMuon() == kTRUE &&
223 >                 mu->BestTrk()->NPixelHits() > 0 &&
224 >                 RChi2 < 10.0;
225          break;
226 +      // 2012 WW analysis for 42x (there is no PFMuon link)
227        case kWWMuIdV1:
228          idpass = mu->BestTrk() != 0 &&
229 <                 mu->BestTrk()->NHits() > 10 &&
229 >                 mu->NTrkLayersHit() > 5 &&
230                   mu->BestTrk()->NPixelHits() > 0 &&
231                   mu->BestTrk()->PtErr()/mu->BestTrk()->Pt() < 0.1 &&
232 <                 RChi2 < 10.0 &&
220 <                (mu->NSegments() > 1 || mu->NMatches() > 1) &&
221 <                 mu->Quality().Quality(MuonQuality::GlobalMuonPromptTight);
232 >                 mu->TrkKink() < 20.0;
233          break;
234 +      // 2010 WW analysis
235        case kWWMuIdV2:
236          idpass = mu->BestTrk() != 0 &&
237                   mu->BestTrk()->NHits() > 10 &&
238                   mu->BestTrk()->NPixelHits() > 0 &&
239                   mu->BestTrk()->PtErr()/mu->BestTrk()->Pt() < 0.1;
240          break;
241 +      // 2011 WW analysis
242        case kWWMuIdV3:
243          idpass = mu->BestTrk() != 0 &&
244                   mu->BestTrk()->NHits() > 10 &&
# Line 233 | Line 246 | void MuonIDMod::Process()
246                   mu->BestTrk()->PtErr()/mu->BestTrk()->Pt() < 0.1 &&
247                   mu->TrkKink() < 20.0;
248          break;
249 +      // 2012 WW analysis
250        case kWWMuIdV4:
251          idpass = mu->BestTrk() != 0 &&
252                   mu->NTrkLayersHit() > 5 &&
# Line 316 | Line 330 | void MuonIDMod::Process()
330            if (totalIso < (mu->Pt()*theIsoCut)) isocut = kTRUE;
331          }
332          break;
333 <      case kTrackCaloSlidingNoCorrection:
333 >    case kTrackCaloSlidingNoCorrection:
334          {
335            Double_t totalIso =  1.0 * mu->IsoR03SumPt() +
336                                 1.0 * mu->IsoR03EmEt()  +
# Line 330 | Line 344 | void MuonIDMod::Process()
344            if (totalIso < (mu->Pt()*theIsoCut)) isocut = kTRUE;
345          }
346          break;
347 <      case kPFIso:
348 <        {
349 <          Double_t pfIsoCutValue = 9999;
350 <          if(fPFIsolationCut > 0){
351 <            pfIsoCutValue = fPFIsolationCut;
352 <          } else {
353 <            if (mu->AbsEta() < 1.479) {
354 <              if (mu->Pt() > 20) {
355 <                pfIsoCutValue = 0.13;
356 <              } else {
357 <                pfIsoCutValue = 0.06;
358 <              }
359 <            } else {
360 <              if (mu->Pt() > 20) {
361 <                pfIsoCutValue = 0.09;
362 <              } else {
363 <                pfIsoCutValue = 0.05;
364 <              }
347 >    case kCombinedRelativeConeAreaCorrected:    
348 >      {          
349 >        //const PileupEnergyDensity *rho =  fPileupEnergyDensity->At(0); // Fabian: made Rho customable          
350 >        Double_t totalIso =  mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt() - Rho * TMath::Pi() * 0.3 * 0.3 ;          
351 >        double theIsoCut = fCombRelativeIsolationCut;    
352 >        if (totalIso < (mu->Pt()*theIsoCut)) isocut = kTRUE;    
353 >      }          
354 >      break;    
355 >    case kCombinedRelativeEffectiveAreaCorrected:        
356 >      {          
357 >        Double_t tmpRho = Rho;   // Fabian: made the Rho type customable.        
358 >        //if (!(TMath::IsNaN(fPileupEnergyDensity->At(0)->Rho()) || std::isinf(fPileupEnergyDensity->At(0)->Rho())))    
359 >        //tmpRho = fPileupEnergyDensity->At(0)->Rho();  
360 >        
361 >        isocut = ( mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt()      
362 >                   -  tmpRho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso03, mu->Eta())      
363 >                   -  tmpRho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso03, mu->Eta())    
364 >                   ) < (mu->Pt()* 0.40);        
365 >      }          
366 >      break;
367 >    case kPFIso:
368 >      {
369 >        Double_t pfIsoCutValue = 9999;
370 >        if(fPFIsolationCut > 0){
371 >          pfIsoCutValue = fPFIsolationCut;
372 >        } else {
373 >          if (mu->AbsEta() < 1.479) {
374 >            if (mu->Pt() > 20) {
375 >              pfIsoCutValue = 0.13;
376 >            } else {
377 >              pfIsoCutValue = 0.06;
378              }
379 <          }
380 <          Double_t totalIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fVertices->At(0), 0.1, 1.0, 0.3, 0.0, fIntRadius);
381 <          if (totalIso < (mu->Pt()*pfIsoCutValue) )
382 <            isocut = kTRUE;
379 >          } else {
380 >            if (mu->Pt() > 20) {
381 >              pfIsoCutValue = 0.09;
382 >            } else {
383 >              pfIsoCutValue = 0.05;
384 >            }
385 >          }
386          }
387 <        break;
388 <      case kPFRadialIso:
389 <        {
390 <          Double_t pfIsoCutValue = 9999;
391 <          if(fPFIsolationCut > 0){
392 <            pfIsoCutValue = fPFIsolationCut;
393 <          } else {
394 <            if (mu->Pt() > 20) {
395 <              pfIsoCutValue = 0.10;
396 <            } else {
387 >        Double_t totalIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fVertices->At(0), 0.1, 1.0, 0.3, 0.0, fIntRadius);
388 >        if (totalIso < (mu->Pt()*pfIsoCutValue) )
389 >          isocut = kTRUE;
390 >      }
391 >      break;
392 >    case kPFRadialIso:
393 >      {
394 >        Double_t pfIsoCutValue = 9999;
395 >        if(fPFIsolationCut > 0){
396 >          pfIsoCutValue = fPFIsolationCut;
397 >        } else {
398 >          if (mu->Pt() > 20) {
399 >            pfIsoCutValue = 0.10;
400 >          } else {
401                pfIsoCutValue = 0.05;
402              }
403            }
# Line 371 | Line 405 | void MuonIDMod::Process()
405            if (totalIso < (mu->Pt()*pfIsoCutValue) )
406              isocut = kTRUE;
407          }
408 <        break;
409 <      case kPFIsoNoL:
408 >      break;
409 >    case kPFIsoEffectiveAreaCorrected:  
410 >      {          
411 >        Double_t pfIsoCutValue = 9999;  
412 >        if(fPFIsolationCut > 0){        
413 >          pfIsoCutValue = fPFIsolationCut;      
414 >        } else {        
415 >          pfIsoCutValue = fPFIsolationCut; //leave it like this for now          
416 >        }        
417 >        Double_t EffectiveAreaCorrectedPFIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fVertices->At(0), 0.1, 1.0, 0.3, 0.0, fIntRadius)    
418 >          - Rho * MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso03, mu->Eta());  
419 >        //- fPileupEnergyDensity->At(0)->Rho() * MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso03, mu->Eta());  // Fabian: made Rho-type customable      
420 >        isocut = EffectiveAreaCorrectedPFIso < (mu->Pt() * pfIsoCutValue);      
421 >        break;  
422 >      }
423 >      
424 >      
425 >    case kPFIsoNoL:
426          {
427            fNonIsolatedMuons     = GetObjThisEvt<MuonCol>(fNonIsolatedMuonsName);
428            fNonIsolatedElectrons = GetObjThisEvt<ElectronCol>(fNonIsolatedElectronsName);
# Line 478 | Line 528 | void MuonIDMod::SlaveBegin()
528    ReqEventObject(fTrackName, fTracks, kTRUE);
529    ReqEventObject(fPFCandidatesName, fPFCandidates, kTRUE);
530    if (fMuonIsoType.CompareTo("TrackCaloSliding") == 0
531 +      || fMuonIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0        
532 +      || fMuonIsoType.CompareTo("CombinedRelativeEffectiveAreaCorrected") == 0  
533 +      || fMuonIsoType.CompareTo("PFIsoEffectiveAreaCorrected") == 0
534        || fMuonIsoType.CompareTo("MVA_BDTG_IDIso") == 0
535        || fMuonIsoType.CompareTo("IsoRingsV0_BDTG_Iso") == 0
536        || fMuonIsoType.CompareTo("IsoDeltaR") == 0
# Line 525 | Line 578 | void MuonIDMod::SlaveBegin()
578      fMuIsoType = kTrackCaloSliding;
579    else if (fMuonIsoType.CompareTo("TrackCaloSlidingNoCorrection") == 0)
580      fMuIsoType = kTrackCaloSlidingNoCorrection;
581 +  else if (fMuonIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0)    
582 +    fMuIsoType = kCombinedRelativeConeAreaCorrected;    
583 +  else if (fMuonIsoType.CompareTo("CombinedRelativeEffectiveAreaCorrected") == 0)        
584 +    fMuIsoType = kCombinedRelativeEffectiveAreaCorrected;
585    else if (fMuonIsoType.CompareTo("PFIso") == 0)
586      fMuIsoType = kPFIso;
587    else if (fMuonIsoType.CompareTo("PFRadialIso") == 0)
588      fMuIsoType = kPFRadialIso;
589 +  else if (fMuonIsoType.CompareTo("PFIsoEffectiveAreaCorrected") == 0)  
590 +    fMuIsoType = kPFIsoEffectiveAreaCorrected;
591    else if (fMuonIsoType.CompareTo("PFIsoNoL") == 0)
592      fMuIsoType = kPFIsoNoL;
593    else if (fMuonIsoType.CompareTo("NoIso") == 0)
# Line 564 | Line 623 | void MuonIDMod::SlaveBegin()
623      fMuClassType = kCaloMuon;
624    else if (fMuonClassType.CompareTo("TrackerBased") == 0)
625      fMuClassType = kTrackerBased;
626 +  else if (fMuonClassType.CompareTo("GlobalOnly") == 0)
627 +    fMuClassType = kGlobalOnly;
628    else {
629      SendError(kAbortAnalysis, "SlaveBegin",
630                "The specified muon class %s is not defined.",
# Line 684 | Line 745 | Bool_t MuonIDMod::PassMuonIsoRingsV0_BDT
745    else if(mu->Pt() >= 20 && eta <  1.479) MVACut = 0.82;
746    else if(mu->Pt() >= 20 && eta >= 1.479) MVACut = 0.86;
747  
748 +  if(fPFIsolationCut > -1.0) MVACut = fPFIsolationCut;
749 +
750    if(isDebug == kTRUE){
751      printf("PassMuonIsoRingsV0_BDTG_IsoDebug: %d, pt, eta = %f, %f, rho = %f(%f) : RingsMVA = %f, bin: %d\n",
752             GetEventHeader()->EvtNum(),mu->Pt(), mu->Eta(),

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines