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.76 by ceballos, Sat May 5 08:51:06 2012 UTC vs.
Revision 1.80 by ceballos, Mon May 7 18:05:51 2012 UTC

# 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 ||
77       fMuIsoType == kMVAIso_BDTG_IDIso ||
78       fMuIsoType == kIsoRingsV0_BDTG_Iso ||
79       fMuIsoType == kIsoDeltaR
# Line 173 | Line 171 | void MuonIDMod::Process()
171      if (eta >= fEtaCut)
172        continue;
173  
176
177    //***********************************************************************************************
178    //Debug Info For Lepton MVA
179    //***********************************************************************************************
180    if( fPrintMVADebugInfo &&
181        (fMuIsoType == kMVAIso_BDTG_IDIso || fMuIDType == kMVAID_BDTG_IDIso)
182      ) {
183      cout << "Event: " << GetEventHeader()->RunNum() << " " << GetEventHeader()->LumiSec() << " "
184           << GetEventHeader()->EvtNum() << " : Rho = " << fPileupEnergyDensity->At(0)->Rho()
185           << " : Muon " << i << " "
186           << endl;
187      fMuonIDMVA->MVAValue(mu,fVertices->At(0),fMuonTools,fPFCandidates,fPileupEnergyDensity,kTRUE);
188    }
189    //***********************************************************************************************
190
191
174      Double_t RChi2 = 0.0;
175      if     (mu->HasGlobalTrk()) {
176        RChi2 = mu->GlobalTrk()->Chi2()/mu->GlobalTrk()->Ndof();
# Line 251 | Line 233 | void MuonIDMod::Process()
233                   mu->BestTrk()->PtErr()/mu->BestTrk()->Pt() < 0.1 &&
234                   mu->TrkKink() < 20.0;
235          break;
236 +      case kWWMuIdV4:
237 +        idpass = mu->BestTrk() != 0 &&
238 +                 mu->NTrkLayersHit() > 5 &&
239 +                 mu->IsPFMuon() == kTRUE &&
240 +                 mu->BestTrk()->NPixelHits() > 0 &&
241 +                 mu->BestTrk()->PtErr()/mu->BestTrk()->Pt() < 0.1 &&
242 +                 mu->TrkKink() < 20.0;
243 +        break;
244        case kMVAID_BDTG_IDIso:
245          {
246            Bool_t passDenominatorM2 = (mu->BestTrk() != 0 &&
# Line 293 | Line 283 | void MuonIDMod::Process()
283        case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
284          Rho = rho->RhoRandom();
285          break;
286 +      case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
287 +        Rho = rho->RhoKt6PFJets();
288 +        break;
289        default:
290          Rho = rho->Rho();
291        }
# Line 337 | Line 330 | void MuonIDMod::Process()
330            if (totalIso < (mu->Pt()*theIsoCut)) isocut = kTRUE;
331          }
332          break;
340      case kCombinedRelativeConeAreaCorrected:
341        {
342          //const PileupEnergyDensity *rho =  fPileupEnergyDensity->At(0); // Fabian: made Rho customable
343          Double_t totalIso =  mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt() - Rho * TMath::Pi() * 0.3 * 0.3 ;
344          double theIsoCut = fCombRelativeIsolationCut;
345          if (totalIso < (mu->Pt()*theIsoCut)) isocut = kTRUE;
346        }
347        break;          
348    case kCombinedRelativeEffectiveAreaCorrected:
349      {
350        Double_t tmpRho = Rho;   // Fabian: made the Rho type customable.
351        //if (!(TMath::IsNaN(fPileupEnergyDensity->At(0)->Rho()) || std::isinf(fPileupEnergyDensity->At(0)->Rho())))
352        //tmpRho = fPileupEnergyDensity->At(0)->Rho();
353        
354          isocut = ( mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt()
355                     -  tmpRho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso03, mu->Eta())
356                     -  tmpRho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso03, mu->Eta())
357            ) < (mu->Pt()* 0.40);
358        }
359        break;          
333        case kPFIso:
334          {
335            Double_t pfIsoCutValue = 9999;
# Line 399 | Line 372 | void MuonIDMod::Process()
372              isocut = kTRUE;
373          }
374          break;
402      case kPFIsoEffectiveAreaCorrected:
403        {
404          Double_t pfIsoCutValue = 9999;
405          if(fPFIsolationCut > 0){
406            pfIsoCutValue = fPFIsolationCut;
407          } else {
408            pfIsoCutValue = fPFIsolationCut; //leave it like this for now
409          }
410          Double_t EffectiveAreaCorrectedPFIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fVertices->At(0), 0.1, 1.0, 0.3, 0.0, fIntRadius)
411            - Rho * MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso03, mu->Eta());
412          //- fPileupEnergyDensity->At(0)->Rho() * MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso03, mu->Eta());  // Fabian: made Rho-type customable
413          isocut = EffectiveAreaCorrectedPFIso < (mu->Pt() * pfIsoCutValue);
414          break;
415        }
375        case kPFIsoNoL:
376          {
377            fNonIsolatedMuons     = GetObjThisEvt<MuonCol>(fNonIsolatedMuonsName);
# Line 444 | Line 403 | void MuonIDMod::Process()
403        case kMVAIso_BDTG_IDIso:
404        {
405  
447        // **************************************************************************
448        // Don't use effective area correction denominator. Instead use the old one.
449        // **************************************************************************
450
451        //         Double_t tmpRho = 0;
452        //         if (!(TMath::IsNaN(fPileupEnergyDensity->At(0)->Rho()) || isinf(fPileupEnergyDensity->At(0)->Rho())))
453        //           tmpRho = fPileupEnergyDensity->At(0)->Rho();
454        
455        //         isocut = ( mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt()
456        //                    -  tmpRho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso03, mu->Eta())
457        //                    -  tmpRho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso03, mu->Eta())
458        //           ) < (mu->Pt()* 0.40);
459        
406          Double_t totalIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fVertices->At(0), 0.1, 1.0, 0.3, 0.0, fIntRadius);
407          isocut = (totalIso < (mu->Pt()*0.4));
408  
# Line 532 | Line 478 | void MuonIDMod::SlaveBegin()
478    ReqEventObject(fTrackName, fTracks, kTRUE);
479    ReqEventObject(fPFCandidatesName, fPFCandidates, kTRUE);
480    if (fMuonIsoType.CompareTo("TrackCaloSliding") == 0
535      || fMuonIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0
536      || fMuonIsoType.CompareTo("CombinedRelativeEffectiveAreaCorrected") == 0
537      || fMuonIsoType.CompareTo("PFIsoEffectiveAreaCorrected") == 0
481        || fMuonIsoType.CompareTo("MVA_BDTG_IDIso") == 0
482        || fMuonIsoType.CompareTo("IsoRingsV0_BDTG_Iso") == 0
483        || fMuonIsoType.CompareTo("IsoDeltaR") == 0
# Line 557 | Line 500 | void MuonIDMod::SlaveBegin()
500      fMuIDType = kWWMuIdV2;
501    else if (fMuonIDType.CompareTo("WWMuIdV3") == 0)
502      fMuIDType = kWWMuIdV3;
503 +  else if (fMuonIDType.CompareTo("WWMuIdV4") == 0)
504 +    fMuIDType = kWWMuIdV4;
505    else if (fMuonIDType.CompareTo("NoId") == 0)
506      fMuIDType = kNoId;
507    else if (fMuonIDType.CompareTo("Custom") == 0) {
# Line 580 | Line 525 | void MuonIDMod::SlaveBegin()
525      fMuIsoType = kTrackCaloSliding;
526    else if (fMuonIsoType.CompareTo("TrackCaloSlidingNoCorrection") == 0)
527      fMuIsoType = kTrackCaloSlidingNoCorrection;
583  else if (fMuonIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0)
584    fMuIsoType = kCombinedRelativeConeAreaCorrected;
585  else if (fMuonIsoType.CompareTo("CombinedRelativeEffectiveAreaCorrected") == 0)
586    fMuIsoType = kCombinedRelativeEffectiveAreaCorrected;
528    else if (fMuonIsoType.CompareTo("PFIso") == 0)
529      fMuIsoType = kPFIso;
530    else if (fMuonIsoType.CompareTo("PFRadialIso") == 0)
531      fMuIsoType = kPFRadialIso;
591  else if (fMuonIsoType.CompareTo("PFIsoEffectiveAreaCorrected") == 0)
592    fMuIsoType = kPFIsoEffectiveAreaCorrected;
532    else if (fMuonIsoType.CompareTo("PFIsoNoL") == 0)
533      fMuIsoType = kPFIsoNoL;
534    else if (fMuonIsoType.CompareTo("NoIso") == 0)
# Line 644 | Line 583 | void MuonIDMod::SlaveBegin()
583                             string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/EndcapPtBin1_IDIsoCombined_BDTG.weights.xml"))),
584                             string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/BarrelPtBin2_IDIsoCombined_BDTG.weights.xml"))),
585                             string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/EndcapPtBin2_IDIsoCombined_BDTG.weights.xml"))),
586 <                           MuonIDMVA::kIDIsoCombinedDetIso);
586 >                           MuonIDMVA::kIDIsoCombinedDetIso,
587 >                           fTheRhoType);
588    }
589    else if(fMuIsoType == kIsoRingsV0_BDTG_Iso) {
590      std::vector<std::string> muonidiso_weightfiles;
# Line 659 | Line 599 | void MuonIDMod::SlaveBegin()
599      fMuonIDMVA->Initialize("MuonIso_BDTG_IsoRings",
600                         MuonIDMVA::kIsoRingsV0,
601                         kTRUE,
602 <                       muonidiso_weightfiles);
602 >                       muonidiso_weightfiles,
603 >                       fTheRhoType);
604    }
605    else if(fMuIsoType == kIsoDeltaR) {
606      std::vector<std::string> muonidiso_weightfiles;
# Line 672 | Line 613 | void MuonIDMod::SlaveBegin()
613      fMuonIDMVA->Initialize("muonHZZ2012IsoDRMVA",
614                         MuonIDMVA::kIsoDeltaR,
615                         kTRUE,
616 <                       muonidiso_weightfiles);
616 >                       muonidiso_weightfiles,
617 >                       fTheRhoType);
618    }
619  
620   }
# Line 721 | Line 663 | Bool_t MuonIDMod::PassMuonIsoRingsV0_BDT
663                                                const PileupEnergyDensityCol *PileupEnergyDensity) const
664   {
665  
666 +  Bool_t isDebug = kFALSE;
667    const Track *muTrk=0;
668    if(mu->HasTrackerTrk())         { muTrk = mu->TrackerTrk();    }
669    else if(mu->HasStandaloneTrk()) { muTrk = mu->StandaloneTrk(); }
# Line 728 | Line 671 | Bool_t MuonIDMod::PassMuonIsoRingsV0_BDT
671    ElectronOArr *tempElectrons = new  ElectronOArr;
672    MuonOArr     *tempMuons     = new  MuonOArr;
673    Double_t MVAValue = fMuonIDMVA->MVAValue(mu,vertex,fMuonTools,fPFCandidates,
674 <                      PileupEnergyDensity,MuonTools::kMuEAFall11MC,tempElectrons,tempMuons,kFALSE);
674 >                      PileupEnergyDensity,MuonTools::kMuEAFall11MC,tempElectrons,tempMuons,isDebug);
675    delete tempElectrons;
676    delete tempMuons;
677  
678    Int_t MVABin = fMuonIDMVA->GetMVABin(muTrk->Eta(), muTrk->Pt(), mu->IsGlobalMuon(), mu->IsTrackerMuon());
679  
680 <  Double_t MVACut = -999;
681 <  if      (MVABin == 0) MVACut = -0.593;
682 <  else if (MVABin == 1) MVACut =  0.337;
683 <  else if (MVABin == 2) MVACut = -0.767;
684 <  else if (MVABin == 3) MVACut =  0.410;
685 <  else if (MVABin == 4) MVACut = -0.989;
686 <  else if (MVABin == 5) MVACut = -0.995;
680 >  Double_t MVACut = -1.0;
681 >  Double_t eta = mu->AbsEta();
682 >  if     (mu->Pt() <  20 && eta <  1.479) MVACut = 0.86;
683 >  else if(mu->Pt() <  20 && eta >= 1.479) MVACut = 0.82;
684 >  else if(mu->Pt() >= 20 && eta <  1.479) MVACut = 0.82;
685 >  else if(mu->Pt() >= 20 && eta >= 1.479) MVACut = 0.86;
686 >
687 >  if(isDebug == kTRUE){
688 >    printf("PassMuonIsoRingsV0_BDTG_IsoDebug: %d, pt, eta = %f, %f, rho = %f(%f) : RingsMVA = %f, bin: %d\n",
689 >           GetEventHeader()->EvtNum(),mu->Pt(), mu->Eta(),
690 >           fPileupEnergyDensity->At(0)->Rho(),fPileupEnergyDensity->At(0)->RhoKt6PFJets(),MVAValue,MVABin);
691 >  }
692  
693    if (MVAValue > MVACut) return kTRUE;
694    return kFALSE;
# Line 758 | Line 706 | Bool_t MuonIDMod::PassMuonIsoDeltaR(cons
706    ElectronOArr *tempElectrons = new  ElectronOArr;
707    MuonOArr     *tempMuons     = new  MuonOArr;
708    Double_t MVAValue = fMuonIDMVA->MVAValue(mu,vertex,fMuonTools,fPFNoPileUpCands,
709 <                      PileupEnergyDensity,MuonTools::kMuEAFall11MC,tempElectrons,tempMuons,kTRUE);
709 >                      PileupEnergyDensity,MuonTools::kMuEAFall11MC,tempElectrons,tempMuons,kFALSE);
710    delete tempElectrons;
711    delete tempMuons;
712  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines