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.73 by ceballos, Thu May 3 10:22:10 2012 UTC vs.
Revision 1.76 by ceballos, Sat May 5 08:51:06 2012 UTC

# Line 54 | Line 54 | ClassImp(mithep::MuonIDMod)
54    fPileupEnergyDensity(0),
55    fMuonTools(0),
56    fMuonIDMVA(0),
57  fMuonMVAWeights_Subdet0Pt10To14p5(""),
58  fMuonMVAWeights_Subdet1Pt10To14p5(""),
59  fMuonMVAWeights_Subdet0Pt14p5To20(""),
60  fMuonMVAWeights_Subdet1Pt14p5To20(""),
61  fMuonMVAWeights_Subdet0Pt20ToInf(""),
62  fMuonMVAWeights_Subdet1Pt20ToInf(""),
57    fTheRhoType(RhoUtilities::DEFAULT)
58   {
59    // Constructor.
# Line 82 | 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){
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    }
# Line 466 | Line 462 | void MuonIDMod::Process()
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:
480          isocut = kTRUE;
481          break;
# Line 524 | 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 586 | 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 618 | 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 671 | Line 715 | Bool_t MuonIDMod::PassMuonMVA_BDTG_IdIso
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.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