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.64 by sixie, Mon Jan 23 20:27:14 2012 UTC vs.
Revision 1.76 by ceballos, Sat May 5 08:51:06 2012 UTC

# Line 14 | Line 14 | ClassImp(mithep::MuonIDMod)
14   //--------------------------------------------------------------------------------------------------
15    MuonIDMod::MuonIDMod(const char *name, const char *title) :
16    BaseMod(name,title),
17 +  fPrintMVADebugInfo(kFALSE),
18    fMuonBranchName(Names::gkMuonBrn),
19    fCleanMuonsName(ModNames::gkCleanMuonsName),  
20    fNonIsolatedMuonsName("random"),  
# Line 45 | Line 46 | ClassImp(mithep::MuonIDMod)
46    fBeamSpot(0),
47    fTracks(0),
48    fPFCandidates(0),
49 +  fPFNoPileUpCands(0),
50    fIntRadius(0.0),
51    fNonIsolatedMuons(0),
52    fNonIsolatedElectrons(0),
# Line 52 | Line 54 | ClassImp(mithep::MuonIDMod)
54    fPileupEnergyDensity(0),
55    fMuonTools(0),
56    fMuonIDMVA(0),
57 <  fMuonMVAWeights_Subdet0Pt10To14p5(""),
56 <  fMuonMVAWeights_Subdet1Pt10To14p5(""),
57 <  fMuonMVAWeights_Subdet0Pt14p5To20(""),
58 <  fMuonMVAWeights_Subdet1Pt14p5To20(""),
59 <  fMuonMVAWeights_Subdet0Pt20ToInf(""),
60 <  fMuonMVAWeights_Subdet1Pt20ToInf("")
57 >  fTheRhoType(RhoUtilities::DEFAULT)
58   {
59    // Constructor.
60   }
# Line 79 | Line 76 | void MuonIDMod::Process()
76    if(fMuIsoType == kTrackCaloSliding ||
77       fMuIsoType == kCombinedRelativeConeAreaCorrected ||
78       fMuIsoType == kPFIsoEffectiveAreaCorrected ||
79 <     fMuIsoType == kMVAIso_BDTG_IDIso  
79 >     fMuIsoType == kMVAIso_BDTG_IDIso ||
80 >     fMuIsoType == kIsoRingsV0_BDTG_Iso ||
81 >     fMuIsoType == kIsoDeltaR
82      ) {
83      LoadEventObject(fPileupEnergyDensityName, fPileupEnergyDensity);
84    }
85 +  if(fMuIsoType == kPFRadialIso || fMuIsoType == kIsoDeltaR){
86 +    // Name is hardcoded, can be changed if someone feels to do it
87 +    fPFNoPileUpCands = GetObjThisEvt<PFCandidateCol>("PFNoPileUp");    
88 +  }
89  
90    MuonOArr *CleanMuons = new MuonOArr;
91    CleanMuons->SetName(fCleanMuonsName);
92  
93    fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
94  
95 <  for (UInt_t i=0; i<fMuons->GetEntries(); ++i) {
95 >  for (UInt_t i=0; i<fMuons->GetEntries() && fVertices->GetEntries() > 0 ; ++i) {
96      const Muon *mu = fMuons->At(i);
97  
98      Bool_t pass = kFALSE;
# Line 170 | Line 173 | void MuonIDMod::Process()
173      if (eta >= fEtaCut)
174        continue;
175  
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 +
192      Double_t RChi2 = 0.0;
193      if     (mu->HasGlobalTrk()) {
194        RChi2 = mu->GlobalTrk()->Chi2()/mu->GlobalTrk()->Ndof();
# Line 257 | Line 276 | void MuonIDMod::Process()
276      if (!idpass)
277        continue;
278  
279 +    Double_t Rho = 0.;
280 +    if(fPileupEnergyDensity){
281 +      const PileupEnergyDensity *rho =  fPileupEnergyDensity->At(0);
282 +
283 +      switch (fTheRhoType) {
284 +      case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
285 +        Rho = rho->RhoLowEta();
286 +        break;
287 +      case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
288 +        Rho = rho->Rho();
289 +        break;
290 +      case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
291 +        Rho = rho->RhoRandomLowEta();
292 +        break;
293 +      case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
294 +        Rho = rho->RhoRandom();
295 +        break;
296 +      default:
297 +        Rho = rho->Rho();
298 +      }
299 +
300 +      if ((TMath::IsNaN(fPileupEnergyDensity->At(0)->Rho()) || std::isinf(fPileupEnergyDensity->At(0)->Rho()))) Rho = 0.;
301 +    }
302 +
303      Bool_t isocut = kFALSE;
304      switch (fMuIsoType) {
305        case kTrackCalo:
# Line 270 | Line 313 | void MuonIDMod::Process()
313          break;
314        case kTrackCaloSliding:
315          {
316 <          const PileupEnergyDensity *rho =  fPileupEnergyDensity->At(0);
274 <          Double_t totalIso =  mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt() - rho->Rho() * TMath::Pi() * 0.3 * 0.3 ;
316 >          Double_t totalIso =  mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt() - Rho * TMath::Pi() * 0.3 * 0.3 ;
317            // trick to change the signal region cut
318            double theIsoCut = fCombIsolationCut;
319            if(theIsoCut < 0.20){
# Line 297 | Line 339 | void MuonIDMod::Process()
339          break;
340        case kCombinedRelativeConeAreaCorrected:
341          {
342 <          const PileupEnergyDensity *rho =  fPileupEnergyDensity->At(0);
343 <          Double_t totalIso =  mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt() - rho->Rho() * TMath::Pi() * 0.3 * 0.3 ;
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 = 0;
351 <          if (!(TMath::IsNaN(fPileupEnergyDensity->At(0)->Rho()) || isinf(fPileupEnergyDensity->At(0)->Rho())))
352 <            tmpRho = fPileupEnergyDensity->At(0)->Rho();
353 <          
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())
# Line 340 | Line 382 | void MuonIDMod::Process()
382              isocut = kTRUE;
383          }
384          break;
385 +      case kPFRadialIso:
386 +        {
387 +          Double_t pfIsoCutValue = 9999;
388 +          if(fPFIsolationCut > 0){
389 +            pfIsoCutValue = fPFIsolationCut;
390 +          } else {
391 +            if (mu->Pt() > 20) {
392 +              pfIsoCutValue = 0.10;
393 +            } else {
394 +              pfIsoCutValue = 0.05;
395 +            }
396 +          }
397 +          Double_t totalIso =  IsolationTools::PFRadialMuonIsolation(mu, fPFNoPileUpCands, 1.0, 0.3);
398 +          if (totalIso < (mu->Pt()*pfIsoCutValue) )
399 +            isocut = kTRUE;
400 +        }
401 +        break;
402        case kPFIsoEffectiveAreaCorrected:
403          {
404            Double_t pfIsoCutValue = 9999;
# Line 349 | Line 408 | void MuonIDMod::Process()
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 <            - fPileupEnergyDensity->At(0)->Rho() * MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso03, mu->Eta());
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          }
# Line 383 | Line 443 | void MuonIDMod::Process()
443          break;
444        case kMVAIso_BDTG_IDIso:
445        {
446 <        Double_t tmpRho = 0;
447 <        if (!(TMath::IsNaN(fPileupEnergyDensity->At(0)->Rho()) || isinf(fPileupEnergyDensity->At(0)->Rho())))
448 <          tmpRho = fPileupEnergyDensity->At(0)->Rho();
449 <
450 <        isocut = ( mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt()
451 <                   -  tmpRho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso03, mu->Eta())
452 <                   -  tmpRho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso03, mu->Eta())
453 <          ) < (mu->Pt()* 0.40);
446 >
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 >        
460 >        Double_t totalIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fVertices->At(0), 0.1, 1.0, 0.3, 0.0, fIntRadius);
461 >        isocut = (totalIso < (mu->Pt()*0.4));
462 >
463 >      }
464 >        break;
465 >      case kIsoRingsV0_BDTG_Iso:
466 >      {
467 >        
468 >        isocut = PassMuonIsoRingsV0_BDTG_Iso(mu, fVertices->At(0), fPileupEnergyDensity);
469 >
470 >      }
471 >        break;
472 >      case kIsoDeltaR:
473 >      {
474 >        
475 >        isocut = PassMuonIsoDeltaR(mu, fVertices->At(0), fPileupEnergyDensity);
476 >
477        }
478          break;
479        case kNoIso:
# Line 451 | Line 534 | void MuonIDMod::SlaveBegin()
534    if (fMuonIsoType.CompareTo("TrackCaloSliding") == 0
535        || fMuonIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0
536        || fMuonIsoType.CompareTo("CombinedRelativeEffectiveAreaCorrected") == 0
537 <       || fMuonIsoType.CompareTo("PFIsoEffectiveAreaCorrected") == 0
537 >      || fMuonIsoType.CompareTo("PFIsoEffectiveAreaCorrected") == 0
538        || fMuonIsoType.CompareTo("MVA_BDTG_IDIso") == 0
539 +      || fMuonIsoType.CompareTo("IsoRingsV0_BDTG_Iso") == 0
540 +      || fMuonIsoType.CompareTo("IsoDeltaR") == 0
541      ) {
542      ReqEventObject(fPileupEnergyDensityName, fPileupEnergyDensity, kTRUE);
543    }
# Line 501 | Line 586 | void MuonIDMod::SlaveBegin()
586      fMuIsoType = kCombinedRelativeEffectiveAreaCorrected;
587    else if (fMuonIsoType.CompareTo("PFIso") == 0)
588      fMuIsoType = kPFIso;
589 +  else if (fMuonIsoType.CompareTo("PFRadialIso") == 0)
590 +    fMuIsoType = kPFRadialIso;
591    else if (fMuonIsoType.CompareTo("PFIsoEffectiveAreaCorrected") == 0)
592      fMuIsoType = kPFIsoEffectiveAreaCorrected;
593    else if (fMuonIsoType.CompareTo("PFIsoNoL") == 0)
# Line 511 | Line 598 | void MuonIDMod::SlaveBegin()
598      fMuIsoType = kCustomIso;
599      SendError(kWarning, "SlaveBegin",
600                "Custom muon isolation is not yet implemented.");
601 <  } else if (fMuonIDType.CompareTo("MVA_BDTG_IDIso") == 0) {
601 >  } else if (fMuonIsoType.CompareTo("MVA_BDTG_IDIso") == 0) {
602      fMuIsoType = kMVAIso_BDTG_IDIso;
603 +  } else if (fMuonIsoType.CompareTo("IsoRingsV0_BDTG_Iso") == 0) {
604 +    fMuIsoType = kIsoRingsV0_BDTG_Iso;
605 +  } else if (fMuonIsoType.CompareTo("IsoDeltaR") == 0) {
606 +    fMuIsoType = kIsoDeltaR;
607    } else {
608      SendError(kAbortAnalysis, "SlaveBegin",
609                "The specified muon isolation %s is not defined.",
# Line 543 | Line 634 | void MuonIDMod::SlaveBegin()
634  
635  
636    //If we use MVA ID, need to load MVA weights
637 <  if(fMuIsoType == kMVAIso_BDTG_IDIso || fMuIDType == kMVAID_BDTG_IDIso) {
637 >  if     (fMuIsoType == kMVAIso_BDTG_IDIso || fMuIDType == kMVAID_BDTG_IDIso) {
638      fMuonTools = new MuonTools();
639      fMuonIDMVA = new MuonIDMVA();
640      fMuonIDMVA->Initialize("BDTG method",
641 <                           fMuonMVAWeights_Subdet0Pt10To14p5,
642 <                           fMuonMVAWeights_Subdet1Pt10To14p5,
643 <                           fMuonMVAWeights_Subdet0Pt14p5To20,
644 <                           fMuonMVAWeights_Subdet1Pt14p5To20,
645 <                           fMuonMVAWeights_Subdet0Pt20ToInf,
646 <                           fMuonMVAWeights_Subdet1Pt20ToInf,
641 >                           string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/BarrelPtBin0_IDIsoCombined_BDTG.weights.xml"))),
642 >                           string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/EndcapPtBin0_IDIsoCombined_BDTG.weights.xml"))),
643 >                           string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/BarrelPtBin1_IDIsoCombined_BDTG.weights.xml"))),
644 >                           string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/EndcapPtBin1_IDIsoCombined_BDTG.weights.xml"))),
645 >                           string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/BarrelPtBin2_IDIsoCombined_BDTG.weights.xml"))),
646 >                           string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/EndcapPtBin2_IDIsoCombined_BDTG.weights.xml"))),
647                             MuonIDMVA::kIDIsoCombinedDetIso);
648    }
649 +  else if(fMuIsoType == kIsoRingsV0_BDTG_Iso) {
650 +    std::vector<std::string> muonidiso_weightfiles;
651 +    muonidiso_weightfiles.push_back(string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/MuonIsoMVA_BDTG_V0_barrel_lowpt.weights.xml"))));
652 +    muonidiso_weightfiles.push_back(string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/MuonIsoMVA_BDTG_V0_barrel_highpt.weights.xml"))));
653 +    muonidiso_weightfiles.push_back(string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/MuonIsoMVA_BDTG_V0_endcap_lowpt.weights.xml"))));
654 +    muonidiso_weightfiles.push_back(string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/MuonIsoMVA_BDTG_V0_endcap_highpt.weights.xml"))));
655 +    muonidiso_weightfiles.push_back(string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/MuonIsoMVA_BDTG_V0_tracker.weights.xml"))));
656 +    muonidiso_weightfiles.push_back(string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/MuonIsoMVA_BDTG_V0_global.weights.xml"))));
657 +    fMuonTools = new MuonTools();
658 +    fMuonIDMVA = new MuonIDMVA();
659 +    fMuonIDMVA->Initialize("MuonIso_BDTG_IsoRings",
660 +                       MuonIDMVA::kIsoRingsV0,
661 +                       kTRUE,
662 +                       muonidiso_weightfiles);
663 +  }
664 +  else if(fMuIsoType == kIsoDeltaR) {
665 +    std::vector<std::string> muonidiso_weightfiles;
666 +    muonidiso_weightfiles.push_back(string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/MuonIsoMVA_santi-V1_LB_BDT.weights.xml"))));
667 +    muonidiso_weightfiles.push_back(string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/MuonIsoMVA_santi-V1_LE_BDT.weights.xml"))));
668 +    muonidiso_weightfiles.push_back(string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/MuonIsoMVA_santi-V1_HB_BDT.weights.xml"))));
669 +    muonidiso_weightfiles.push_back(string((getenv("CMSSW_BASE")+string("/src/MitPhysics/data/MuonMVAWeights/MuonIsoMVA_santi-V1_HE_BDT.weights.xml"))));
670 +    fMuonTools = new MuonTools();
671 +    fMuonIDMVA = new MuonIDMVA();
672 +    fMuonIDMVA->Initialize("muonHZZ2012IsoDRMVA",
673 +                       MuonIDMVA::kIsoDeltaR,
674 +                       kTRUE,
675 +                       muonidiso_weightfiles);
676 +  }
677  
678   }
679  
# Line 578 | Line 697 | Bool_t MuonIDMod::PassMuonMVA_BDTG_IdIso
697    if (muTrk->Pt() > 20.0) ptBin = 2;
698  
699    Int_t MVABin = -1;
700 <  if (subdet == 0 && ptBin == 0) MVABin = 0;
701 <  if (subdet == 1 && ptBin == 0) MVABin = 1;
702 <  if (subdet == 0 && ptBin == 1) MVABin = 2;
703 <  if (subdet == 1 && ptBin == 1) MVABin = 3;
704 <  if (subdet == 0 && ptBin == 2) MVABin = 4;
705 <  if (subdet == 1 && ptBin == 2) MVABin = 5;
700 >  if      (subdet == 0 && ptBin == 0) MVABin = 0;
701 >  else if (subdet == 1 && ptBin == 0) MVABin = 1;
702 >  else if (subdet == 0 && ptBin == 1) MVABin = 2;
703 >  else if (subdet == 1 && ptBin == 1) MVABin = 3;
704 >  else if (subdet == 0 && ptBin == 2) MVABin = 4;
705 >  else if (subdet == 1 && ptBin == 2) MVABin = 5;
706 >
707 >  Double_t MVACut = -999;
708 >  if      (MVABin == 0) MVACut = -0.5618;
709 >  else if (MVABin == 1) MVACut = -0.3002;
710 >  else if (MVABin == 2) MVACut = -0.4642;
711 >  else if (MVABin == 3) MVACut = -0.2478;
712 >  else if (MVABin == 4) MVACut =  0.1706;
713 >  else if (MVABin == 5) MVACut =  0.8146;
714 >
715 >  if (MVAValue > MVACut) return kTRUE;
716 >  return kFALSE;
717 > }
718 >
719 > //--------------------------------------------------------------------------------------------------
720 > Bool_t MuonIDMod::PassMuonIsoRingsV0_BDTG_Iso(const Muon *mu, const Vertex *vertex,
721 >                                              const PileupEnergyDensityCol *PileupEnergyDensity) const
722 > {
723 >
724 >  const Track *muTrk=0;
725 >  if(mu->HasTrackerTrk())         { muTrk = mu->TrackerTrk();    }
726 >  else if(mu->HasStandaloneTrk()) { muTrk = mu->StandaloneTrk(); }
727 >  
728 >  ElectronOArr *tempElectrons = new  ElectronOArr;
729 >  MuonOArr     *tempMuons     = new  MuonOArr;
730 >  Double_t MVAValue = fMuonIDMVA->MVAValue(mu,vertex,fMuonTools,fPFCandidates,
731 >                      PileupEnergyDensity,MuonTools::kMuEAFall11MC,tempElectrons,tempMuons,kFALSE);
732 >  delete tempElectrons;
733 >  delete tempMuons;
734 >
735 >  Int_t MVABin = fMuonIDMVA->GetMVABin(muTrk->Eta(), muTrk->Pt(), mu->IsGlobalMuon(), mu->IsTrackerMuon());
736  
737    Double_t MVACut = -999;
738 <  if (MVABin == 0) MVACut = -0.5618;
739 <  if (MVABin == 1) MVACut = -0.3002;
740 <  if (MVABin == 2) MVACut = -0.4642;
741 <  if (MVABin == 3) MVACut = -0.2478;
742 <  if (MVABin == 4) MVACut = 0.1706;
743 <  if (MVABin == 5) MVACut = 0.8146;
738 >  if      (MVABin == 0) MVACut = -0.593;
739 >  else if (MVABin == 1) MVACut =  0.337;
740 >  else if (MVABin == 2) MVACut = -0.767;
741 >  else if (MVABin == 3) MVACut =  0.410;
742 >  else if (MVABin == 4) MVACut = -0.989;
743 >  else if (MVABin == 5) MVACut = -0.995;
744  
745    if (MVAValue > MVACut) return kTRUE;
746    return kFALSE;
747   }
748 +
749 + //--------------------------------------------------------------------------------------------------
750 + Bool_t MuonIDMod::PassMuonIsoDeltaR(const Muon *mu, const Vertex *vertex,
751 +                                    const PileupEnergyDensityCol *PileupEnergyDensity) const
752 + {
753 +
754 +  const Track *muTrk=0;
755 +  if(mu->HasTrackerTrk())         { muTrk = mu->TrackerTrk();    }
756 +  else if(mu->HasStandaloneTrk()) { muTrk = mu->StandaloneTrk(); }
757 +  
758 +  ElectronOArr *tempElectrons = new  ElectronOArr;
759 +  MuonOArr     *tempMuons     = new  MuonOArr;
760 +  Double_t MVAValue = fMuonIDMVA->MVAValue(mu,vertex,fMuonTools,fPFNoPileUpCands,
761 +                      PileupEnergyDensity,MuonTools::kMuEAFall11MC,tempElectrons,tempMuons,kTRUE);
762 +  delete tempElectrons;
763 +  delete tempMuons;
764 +
765 +  Int_t MVABin = fMuonIDMVA->GetMVABin(muTrk->Eta(), muTrk->Pt(), mu->IsGlobalMuon(), mu->IsTrackerMuon());
766 +
767 +  Double_t MVACut = -999;
768 +  if      (MVABin == 0) MVACut =  0.000;
769 +  else if (MVABin == 1) MVACut =  0.000;
770 +  else if (MVABin == 2) MVACut =  0.000;
771 +  else if (MVABin == 3) MVACut =  0.000;
772 +
773 +  if (MVAValue > MVACut) return kTRUE;
774 +  return kFALSE;
775 + }
776 +
777 + //--------------------------------------------------------------------------------------------------
778 + void MuonIDMod::Terminate()
779 + {
780 +  // Run finishing code on the computer (slave) that did the analysis
781 +  delete fMuonIDMVA;
782 +  
783 +  delete fMuonTools;
784 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines