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

Comparing UserCode/MitPhysics/Utils/src/MuonIDMVA.cc (file contents):
Revision 1.8 by sixie, Mon Apr 16 11:08:47 2012 UTC vs.
Revision 1.16 by anlevin, Sat May 12 00:05:30 2012 UTC

# Line 18 | Line 18 | fMethodname("BDTG method"),
18   fIsInitialized(kFALSE),
19   fMVAType(MuonIDMVA::kUninitialized),
20   fUseBinnedVersion(kTRUE),
21 < fNMVABins(0)
21 > fNMVABins(0),
22 > fTheRhoType(RhoUtilities::DEFAULT)
23   {
24   }
25  
# Line 33 | Line 34 | MuonIDMVA::~MuonIDMVA()
34  
35   //--------------------------------------------------------------------------------------------------
36   void MuonIDMVA::Initialize( std::string methodName,
37 <                                std::string weightsfile,
38 <                                MuonIDMVA::MVAType type)
37 >                            std::string weightsfile,
38 >                            MuonIDMVA::MVAType type,
39 >                            RhoUtilities::RhoType theRhoType)
40   {
41    
42    std::vector<std::string> tempWeightFileVector;
43    tempWeightFileVector.push_back(weightsfile);
44 <  Initialize(methodName,type,kFALSE,tempWeightFileVector);
44 >  Initialize(methodName,type,kFALSE,tempWeightFileVector,theRhoType);
45   }
46  
47   //--------------------------------------------------------------------------------------------------
48   void MuonIDMVA::Initialize( TString methodName,
49 <                                TString Subdet0Pt10To20Weights ,
50 <                                TString Subdet1Pt10To20Weights ,
51 <                                TString Subdet2Pt10To20Weights,
52 <                                TString Subdet0Pt20ToInfWeights,
53 <                                TString Subdet1Pt20ToInfWeights,
54 <                                TString Subdet2Pt20ToInfWeights,
55 <                                MuonIDMVA::MVAType type) {
49 >                            TString Subdet0Pt10To20Weights ,
50 >                            TString Subdet1Pt10To20Weights ,
51 >                            TString Subdet2Pt10To20Weights,
52 >                            TString Subdet0Pt20ToInfWeights,
53 >                            TString Subdet1Pt20ToInfWeights,
54 >                            TString Subdet2Pt20ToInfWeights,
55 >                            MuonIDMVA::MVAType type,
56 >                            RhoUtilities::RhoType theRhoType) {
57  
58    std::vector<std::string> tempWeightFileVector;
59    tempWeightFileVector.push_back(std::string(Subdet0Pt10To20Weights.Data()));
# Line 59 | Line 62 | void MuonIDMVA::Initialize( TString meth
62    tempWeightFileVector.push_back(std::string(Subdet0Pt20ToInfWeights.Data()));
63    tempWeightFileVector.push_back(std::string(Subdet1Pt20ToInfWeights.Data()));
64    tempWeightFileVector.push_back(std::string(Subdet2Pt20ToInfWeights.Data()));
65 <  Initialize(std::string(methodName.Data()),type,kTRUE,tempWeightFileVector);
65 >  Initialize(std::string(methodName.Data()),type,kTRUE,tempWeightFileVector,theRhoType);
66  
67   }
68  
69  
70   //--------------------------------------------------------------------------------------------------
71 < void MuonIDMVA::Initialize(  std::string methodName,
72 <                                 MuonIDMVA::MVAType type,
73 <                                 Bool_t useBinnedVersion,
74 <                                 std::vector<std::string> weightsfiles) {
71 > void MuonIDMVA::Initialize( std::string methodName,
72 >                            MuonIDMVA::MVAType type,
73 >                            Bool_t useBinnedVersion,
74 >                            std::vector<std::string> weightsfiles,
75 >                            RhoUtilities::RhoType theRhoType) {
76    
77    //clean up first
78    for (uint i=0;i<fTMVAReader.size(); ++i) {
# Line 82 | Line 86 | void MuonIDMVA::Initialize(  std::string
86    fMethodname = methodName;
87    fMVAType = type;
88    fUseBinnedVersion = useBinnedVersion;
89 +  fTheRhoType = theRhoType;
90  
91    //Define expected number of bins
92    UInt_t ExpectedNBins = 0;
93    if (!fUseBinnedVersion) {
94      ExpectedNBins = 1;
95 <  } else if (type == kV2
96 <             ||type == kV3
97 <             ||type == kV8
98 <             ||type == kIDIsoCombinedDetIso) {
95 >  } else if    (type == kV2
96 >             || type == kV3
97 >             || type == kV8
98 >             || type == kIDIsoCombinedDetIso
99 >             || type == kIsoRingsV0
100 >             || type == kIDV0
101 >             || type == kIDIsoCombinedIsoRingsV0
102 >    ) {
103      ExpectedNBins = 6;
104 <  } else if (type == kIDIsoCombinedIsoRingsV0) {
96 <    ExpectedNBins = 5;
97 <  } else if (type == kIsoRingsV0) {
104 >  } else if (type == kIsoDeltaR){
105      ExpectedNBins = 4;
106    }
107 +
108    fNMVABins = ExpectedNBins;
109  
110    //Check number of weight files given
# Line 197 | Line 205 | void MuonIDMVA::Initialize(  std::string
205        tmpTMVAReader->AddVariable( "HadIso05OverPt",       &fMVAVar_MuHadIso05OverPt        );
206      }
207  
208 +    if (type == kIDV0) {
209 +      tmpTMVAReader->AddVariable( "TkNchi2",              &fMVAVar_MuTkNchi2               );
210 +      if (i!=4) tmpTMVAReader->AddVariable( "GlobalNchi2",&fMVAVar_MuGlobalNchi2           );
211 +      if (i!=4) tmpTMVAReader->AddVariable( "NValidHits", &fMVAVar_MuNValidHits            );
212 +      tmpTMVAReader->AddVariable( "NTrackerHits",         &fMVAVar_MuNTrackerHits          );
213 +      tmpTMVAReader->AddVariable( "NPixelHits",           &fMVAVar_MuNPixelHits            );
214 +      if (i!=5) tmpTMVAReader->AddVariable( "NMatches",   &fMVAVar_MuNMatches              );
215 +      tmpTMVAReader->AddVariable( "TrkKink",              &fMVAVar_MuTrkKink               );      
216 +      tmpTMVAReader->AddVariable( "SegmentCompatibility", &fMVAVar_MuSegmentCompatibility  );      
217 +      tmpTMVAReader->AddVariable( "CaloCompatibility",    &fMVAVar_MuCaloCompatibility     );      
218 +      tmpTMVAReader->AddVariable( "HadEnergy",            &fMVAVar_MuHadEnergy             );      
219 +      tmpTMVAReader->AddVariable( "EmEnergy",             &fMVAVar_MuEmEnergy              );      
220 +      tmpTMVAReader->AddVariable( "HadS9Energy",          &fMVAVar_MuHadS9Energy           );      
221 +      tmpTMVAReader->AddVariable( "EmS9Energy",           &fMVAVar_MuEmS9Energy            );
222 +    }
223 +
224      if (type == kIsoRingsV0) {
225        tmpTMVAReader->AddVariable( "ChargedIso_DR0p0To0p1",         &fMVAVar_ChargedIso_DR0p0To0p1        );
226        tmpTMVAReader->AddVariable( "ChargedIso_DR0p1To0p2",         &fMVAVar_ChargedIso_DR0p1To0p2        );
# Line 213 | Line 237 | void MuonIDMVA::Initialize(  std::string
237        tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p2To0p3",   &fMVAVar_NeutralHadronIso_DR0p2To0p3  );
238        tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p3To0p4",   &fMVAVar_NeutralHadronIso_DR0p3To0p4  );
239        tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p4To0p5",   &fMVAVar_NeutralHadronIso_DR0p4To0p5  );
240 <      tmpTMVAReader->AddSpectator("eta",            &fMVAVar_MuEta);
241 <      tmpTMVAReader->AddSpectator("pt",             &fMVAVar_MuPt);
240 >    }
241 >
242 >    if (type == kIsoDeltaR) {
243 >      tmpTMVAReader->AddVariable("PFCharged",                     &fMVAVar_MuRelIsoPFCharged       );
244 >      tmpTMVAReader->AddVariable("PFNeutral",                     &fMVAVar_MuRelIsoPFNeutral       );
245 >      tmpTMVAReader->AddVariable("PFPhotons",                     &fMVAVar_MuRelIsoPFPhotons       );
246 >      tmpTMVAReader->AddVariable("SumDeltaR",                     &fMVAVar_MuDeltaRSum             );
247 >      tmpTMVAReader->AddVariable("DeltaRMean",                    &fMVAVar_MuDeltaRMean            );
248 >      tmpTMVAReader->AddVariable("Density",                       &fMVAVar_MuDensity               );
249      }
250      
251      tmpTMVAReader->BookMVA(fMethodname , weightsfiles[i] );
# Line 250 | Line 281 | UInt_t MuonIDMVA::GetMVABin( double eta,
281        if (pt >= 20 && fabs(eta) >= 1.5) bin = 5;
282      }
283  
284 <    if (fMVAType == MuonIDMVA::kIDIsoCombinedIsoRingsV0) {
284 >    if (fMVAType == MuonIDMVA::kIsoRingsV0 || fMVAType == MuonIDMVA::kIDV0
285 >        || fMVAType == MuonIDMVA::kIDIsoCombinedIsoRingsV0) {
286        if (isGlobal && isTrackerMuon) {
287          if (pt < 10 && fabs(eta) < 1.479) bin = 0;
288 <        if (pt < 10 && fabs(eta) >= 1.479) bin = 1;
289 <        if (pt >= 10 && fabs(eta) < 1.479) bin = 2;
288 >        if (pt >= 10 && fabs(eta) < 1.479) bin = 1;
289 >        if (pt < 10 && fabs(eta) >= 1.479) bin = 2;
290          if (pt >= 10 && fabs(eta) >= 1.479) bin = 3;
291        } else if (!isGlobal && isTrackerMuon) {
292          bin = 4;
293 +      } else if (isGlobal && !isTrackerMuon) {
294 +        bin = 5;
295        } else {
296          std::cout << "Warning: Muon is not a tracker muon. Such muons are not supported. \n";
297          bin = 0;
298        }
299      }
300  
301 <    if (fMVAType == MuonIDMVA::kIsoRingsV0) {
302 <      if (pt < 10 && fabs(eta) < 1.479) bin = 0;
303 <      if (pt < 10 && fabs(eta) >= 1.479) bin = 1;
304 <      if (pt >= 10 && fabs(eta) < 1.479) bin = 2;
305 <      if (pt >= 10 && fabs(eta) >= 1.479) bin = 3;
301 >    if (fMVAType == MuonIDMVA::kIsoDeltaR){
302 >      if (pt <  20 && fabs(eta) <  1.479) bin = 0;
303 >      if (pt <  20 && fabs(eta) >= 1.479) bin = 1;
304 >      if (pt >= 20 && fabs(eta) <  1.479) bin = 2;
305 >      if (pt >= 20 && fabs(eta) >= 1.479) bin = 3;
306      }
307  
308      return bin;
# Line 473 | Line 507 | Double_t MuonIDMVA::MVAValue(Double_t Mu
507   }
508  
509  
510 + Double_t MuonIDMVA::MVAValue_IsoRings( Double_t MuPt,
511 +                                       Double_t MuEta,
512 +                                                                                                                                                         Bool_t MuIsGlobal,
513 +                                                                                                                                                         Bool_t MuIsTracker,
514 +                                       Double_t ChargedIso_DR0p0To0p1,
515 +                                       Double_t ChargedIso_DR0p1To0p2,
516 +                                       Double_t ChargedIso_DR0p2To0p3,
517 +                                       Double_t ChargedIso_DR0p3To0p4,
518 +                                       Double_t ChargedIso_DR0p4To0p5,
519 +                                       Double_t GammaIso_DR0p0To0p1,
520 +                                       Double_t GammaIso_DR0p1To0p2,
521 +                                       Double_t GammaIso_DR0p2To0p3,
522 +                                       Double_t GammaIso_DR0p3To0p4,
523 +                                       Double_t GammaIso_DR0p4To0p5,
524 +                                       Double_t NeutralHadronIso_DR0p0To0p1,
525 +                                       Double_t NeutralHadronIso_DR0p1To0p2,
526 +                                       Double_t NeutralHadronIso_DR0p2To0p3,
527 +                                       Double_t NeutralHadronIso_DR0p3To0p4,
528 +                                       Double_t NeutralHadronIso_DR0p4To0p5,
529 +                                       Bool_t printDebug) {
530 +
531 +  if (fMVAType != MuonIDMVA::kIsoRingsV0) {
532 +    std::cout << "Error: This function is only supported for MVAType == kIsoRingsV0.\n" << std::endl;
533 +    assert(kFALSE);
534 +  }
535 +
536 +  fMVAVar_MuPt = MuPt;
537 +  fMVAVar_MuEta = MuEta;
538 +  fMVAVar_ChargedIso_DR0p0To0p1 = ChargedIso_DR0p0To0p1;
539 +  fMVAVar_ChargedIso_DR0p1To0p2 = ChargedIso_DR0p1To0p2;
540 +  fMVAVar_ChargedIso_DR0p2To0p3 = ChargedIso_DR0p2To0p3;
541 +  fMVAVar_ChargedIso_DR0p3To0p4 = ChargedIso_DR0p3To0p4;
542 +  fMVAVar_ChargedIso_DR0p4To0p5 = ChargedIso_DR0p4To0p5;
543 +  fMVAVar_GammaIso_DR0p0To0p1 = GammaIso_DR0p0To0p1;
544 +  fMVAVar_GammaIso_DR0p1To0p2 = GammaIso_DR0p1To0p2;
545 +  fMVAVar_GammaIso_DR0p2To0p3 = GammaIso_DR0p2To0p3;
546 +  fMVAVar_GammaIso_DR0p3To0p4 = GammaIso_DR0p3To0p4;
547 +  fMVAVar_GammaIso_DR0p4To0p5 = GammaIso_DR0p4To0p5;
548 +  fMVAVar_NeutralHadronIso_DR0p0To0p1 = NeutralHadronIso_DR0p0To0p1;
549 +  fMVAVar_NeutralHadronIso_DR0p1To0p2 = NeutralHadronIso_DR0p1To0p2;
550 +  fMVAVar_NeutralHadronIso_DR0p2To0p3 = NeutralHadronIso_DR0p2To0p3;
551 +  fMVAVar_NeutralHadronIso_DR0p3To0p4 = NeutralHadronIso_DR0p3To0p4;
552 +  fMVAVar_NeutralHadronIso_DR0p4To0p5 = NeutralHadronIso_DR0p4To0p5;
553 +
554 +  Double_t mva = -9999;  
555 +  TMVA::Reader *reader = 0;
556 +
557 +  if (printDebug == kTRUE) {
558 +    std::cout <<" -> BIN: " << fMVAVar_MuEta << " " << fMVAVar_MuPt << " : "
559 +              << GetMVABin( fMVAVar_MuEta , fMVAVar_MuPt, MuIsGlobal, MuIsTracker) << std::endl;
560 +  }
561 +  reader = fTMVAReader[GetMVABin( fMVAVar_MuEta , fMVAVar_MuPt, MuIsGlobal, MuIsTracker)];                                              
562 +  mva = reader->EvaluateMVA( fMethodname );
563 +
564 +  if (printDebug == kTRUE) {
565 +
566 +    std::cout << "Debug Muon MVA: \n";
567 +    std::cout << fMVAVar_ChargedIso_DR0p0To0p1 << " "
568 +              << fMVAVar_ChargedIso_DR0p1To0p2 << " "
569 +              << fMVAVar_ChargedIso_DR0p2To0p3 << " "
570 +              << fMVAVar_ChargedIso_DR0p3To0p4 << " "
571 +              << fMVAVar_ChargedIso_DR0p4To0p5 << " "
572 +              << fMVAVar_GammaIso_DR0p0To0p1 << " "
573 +              << fMVAVar_GammaIso_DR0p1To0p2 << " "
574 +              << fMVAVar_GammaIso_DR0p2To0p3 << " "
575 +              << fMVAVar_GammaIso_DR0p3To0p4 << " "
576 +              << fMVAVar_GammaIso_DR0p4To0p5 << " "
577 +              << fMVAVar_NeutralHadronIso_DR0p0To0p1 << " "
578 +              << fMVAVar_NeutralHadronIso_DR0p1To0p2 << " "
579 +              << fMVAVar_NeutralHadronIso_DR0p2To0p3 << " "
580 +              << fMVAVar_NeutralHadronIso_DR0p3To0p4 << " "
581 +              << fMVAVar_NeutralHadronIso_DR0p4To0p5 << " "  
582 +              << std::endl;
583 +    std::cout << "MVA: " << mva << " "    
584 +              << std::endl;    
585 +  }  
586 +  return mva;
587 + }
588 +
589 +
590 +
591 + Double_t MuonIDMVA::MVAValue_ID( Double_t MuPt,
592 +                                 Double_t MuEta,
593 +                                 Bool_t MuIsGlobal,
594 +                                 Bool_t MuIsTracker,                                
595 +                                 Double_t MuTkNchi2,
596 +                                 Double_t MuGlobalNchi2,
597 +                                 Double_t MuNValidHits,
598 +                                 Double_t MuNTrackerHits,
599 +                                 Double_t MuNPixelHits,
600 +                                 Double_t MuNMatches,
601 +                                 Double_t MuTrkKink,
602 +                                 Double_t MuSegmentCompatibility,
603 +                                 Double_t MuCaloCompatibility,
604 +                                 Double_t MuHadEnergy,
605 +                                 Double_t MuEmEnergy,
606 +                                 Double_t MuHadS9Energy,
607 +                                 Double_t MuEmS9Energy,
608 +                                 Bool_t printDebug) {
609 +
610 +  if (fMVAType != MuonIDMVA::kIDV0) {
611 +    std::cout << "Error: This function is only supported for MVAType == kIDV0.\n" << std::endl;
612 +    assert(kFALSE);
613 +  }
614 +
615 +  fMVAVar_MuPt = MuPt;
616 +  fMVAVar_MuEta = MuEta;
617 +
618 +  fMVAVar_MuTkNchi2 = MuTkNchi2;
619 +  fMVAVar_MuGlobalNchi2 = MuGlobalNchi2;
620 +  fMVAVar_MuNValidHits = MuNValidHits;
621 +  fMVAVar_MuNTrackerHits = MuNTrackerHits;
622 +  fMVAVar_MuNPixelHits = MuNPixelHits;
623 +  fMVAVar_MuNMatches = MuNMatches;
624 +  fMVAVar_MuTrkKink = MuTrkKink;
625 +  fMVAVar_MuSegmentCompatibility = MuSegmentCompatibility;
626 +  fMVAVar_MuCaloCompatibility = MuCaloCompatibility;
627 +  fMVAVar_MuHadEnergy = MuHadEnergy;
628 +  fMVAVar_MuEmEnergy = MuEmEnergy;
629 +  fMVAVar_MuHadS9Energy = MuHadS9Energy;
630 +  fMVAVar_MuEmS9Energy = MuEmS9Energy;
631 +
632 +  Double_t mva = -9999;  
633 +  TMVA::Reader *reader = 0;
634 +
635 +  if (printDebug == kTRUE) {
636 +    std::cout <<" -> BIN: " << fMVAVar_MuEta << " " << fMVAVar_MuPt << " : "
637 +              << GetMVABin( fMVAVar_MuEta , fMVAVar_MuPt, MuIsGlobal, MuIsTracker) << std::endl;
638 +  }
639 +  reader = fTMVAReader[GetMVABin( fMVAVar_MuEta , fMVAVar_MuPt, MuIsGlobal, MuIsTracker)];                                              
640 +  mva = reader->EvaluateMVA( fMethodname );
641 +
642 +  if (printDebug == kTRUE) {
643 +
644 +    std::cout << "Debug Muon MVA: \n";
645 +    std::cout << fMVAVar_MuTkNchi2              << " "
646 +              << fMVAVar_MuGlobalNchi2          << " "
647 +              << fMVAVar_MuNValidHits           << " "
648 +              << fMVAVar_MuNTrackerHits         << " "
649 +              << fMVAVar_MuNPixelHits           << " "  
650 +              << fMVAVar_MuNMatches             << " "      
651 +              << fMVAVar_MuTrkKink              << " "
652 +              << fMVAVar_MuSegmentCompatibility << " "
653 +              << fMVAVar_MuCaloCompatibility    << " "
654 +              << fMVAVar_MuHadEnergy            << " "  
655 +              << fMVAVar_MuEmEnergy             << " "
656 +              << fMVAVar_MuHadS9Energy          << " "  
657 +              << fMVAVar_MuEmS9Energy           << " "    
658 +              << std::endl;
659 +    std::cout << "MVA: " << mva << " "    
660 +              << std::endl;    
661 +  }
662 +  return mva;
663 + }
664 +
665 +
666  
667   //--------------------------------------------------------------------------------------------------
668   Double_t MuonIDMVA::MVAValue(const Muon *mu, const Vertex *vertex, MuonTools *fMuonTools,
# Line 504 | Line 694 | Double_t MuonIDMVA::MVAValue(const Muon
694    NeutralIso04_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.4, 0.0, 0.0);
695    
696    Double_t Rho = 0;
697 <  if (!(TMath::IsNaN(PileupEnergyDensity->At(0)->Rho()) || isinf(PileupEnergyDensity->At(0)->Rho()))) Rho = PileupEnergyDensity->At(0)->Rho();
698 <
697 > switch(fTheRhoType) {
698 >   case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
699 >     Rho = PileupEnergyDensity->At(0)->Rho();
700 >     break;
701 >   case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
702 >     Rho = PileupEnergyDensity->At(0)->RhoLowEta();
703 >     break;
704 >   case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
705 >     Rho = PileupEnergyDensity->At(0)->RhoRandom();
706 >     break;
707 >   case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
708 >     Rho = PileupEnergyDensity->At(0)->RhoRandomLowEta();
709 >     break;
710 >   case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
711 >     Rho = PileupEnergyDensity->At(0)->RhoKt6PFJets();
712 >     break;
713 >   default:
714 >     // use the old default
715 >     Rho = PileupEnergyDensity->At(0)->Rho();
716 >     break;
717 > }
718  
719    //set all input variables
720    fMVAVar_MuTkNchi2              = muTrk->RChi2();
# Line 617 | Line 826 | Double_t MuonIDMVA::MVAValue(const Muon
826    NeutralIso04_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.4, 0.0, 0.0);
827    
828    Double_t Rho = 0;
829 <  if (!(TMath::IsNaN(PileupEnergyDensity->At(0)->Rho()) || isinf(PileupEnergyDensity->At(0)->Rho()))) Rho = PileupEnergyDensity->At(0)->Rho();
830 <
829 > switch(fTheRhoType) {
830 >   case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
831 >     Rho = PileupEnergyDensity->At(0)->Rho();
832 >     break;
833 >   case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
834 >     Rho = PileupEnergyDensity->At(0)->RhoLowEta();
835 >     break;
836 >   case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
837 >     Rho = PileupEnergyDensity->At(0)->RhoRandom();
838 >     break;
839 >   case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
840 >     Rho = PileupEnergyDensity->At(0)->RhoRandomLowEta();
841 >     break;
842 >   case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
843 >     Rho = PileupEnergyDensity->At(0)->RhoKt6PFJets();
844 >     break;
845 >   default:
846 >     // use the old default
847 >     Rho = PileupEnergyDensity->At(0)->Rho();
848 >     break;
849 > }
850  
851    //set all input variables
852    fMVAVar_MuPt                   = muTrk->Pt();
# Line 667 | Line 895 | Double_t MuonIDMVA::MVAValue(const Muon
895    Double_t tmpNeutralHadronIso_DR0p3To0p4  = 0;
896    Double_t tmpNeutralHadronIso_DR0p4To0p5  = 0;
897  
898 +  Double_t tmpMuDeltaRMean = 0;
899 +  Double_t tmpMuDeltaRSum = 0;
900 +  Double_t tmpMuDensity = 0;
901 +  Double_t tmpMuNPFCand = 0;
902 +
903    for (UInt_t p=0; p<PFCands->GetEntries();p++) {  
904      const PFCandidate *pf = PFCands->At(p);
905        
# Line 684 | Line 917 | Double_t MuonIDMVA::MVAValue(const Muon
917        //************************************************************
918        // Lepton Footprint Removal
919        //************************************************************            
920 <      for (UInt_t q=0; q < goodElectrons->GetEntries() ; ++q) {
921 <        //if pf candidate matches an electron passing ID cuts, then veto it
922 <        if(pf->GsfTrk() && goodElectrons->At(q)->GsfTrk() &&
923 <           pf->GsfTrk() == goodElectrons->At(q)->GsfTrk()) IsLeptonFootprint = kTRUE;
924 <        if(pf->TrackerTrk() && goodElectrons->At(q)->TrackerTrk() &&
925 <           pf->TrackerTrk() == goodElectrons->At(q)->TrackerTrk()) IsLeptonFootprint = kTRUE;
926 <        //if pf candidate lies in veto regions of electron passing ID cuts, then veto it
927 <        if(pf->BestTrk() && fabs(goodElectrons->At(q)->SCluster()->Eta()) >= 1.479
928 <           && MathUtils::DeltaR(goodElectrons->At(q)->Mom(), pf->Mom()) < 0.015) IsLeptonFootprint = kTRUE;
929 <        if(pf->PFType() == PFCandidate::eGamma && fabs(goodElectrons->At(q)->SCluster()->Eta()) >= 1.479 &&
930 <           MathUtils::DeltaR(goodElectrons->At(q)->Mom(), pf->Mom()) < 0.08) IsLeptonFootprint = kTRUE;
920 >      if(goodElectrons) {
921 >        for (UInt_t q=0; q < goodElectrons->GetEntries() ; ++q) {
922 >          //if pf candidate matches an electron passing ID cuts, then veto it
923 >          if(pf->GsfTrk() && goodElectrons->At(q)->GsfTrk() &&
924 >             pf->GsfTrk() == goodElectrons->At(q)->GsfTrk()) IsLeptonFootprint = kTRUE;
925 >          if(pf->TrackerTrk() && goodElectrons->At(q)->TrackerTrk() &&
926 >             pf->TrackerTrk() == goodElectrons->At(q)->TrackerTrk()) IsLeptonFootprint = kTRUE;
927 >          //if pf candidate lies in veto regions of electron passing ID cuts, then veto it
928 >          if(pf->BestTrk() && fabs(goodElectrons->At(q)->SCluster()->Eta()) >= 1.479
929 >             && MathUtils::DeltaR(goodElectrons->At(q)->Mom(), pf->Mom()) < 0.015) IsLeptonFootprint = kTRUE;
930 >          if(pf->PFType() == PFCandidate::eGamma && fabs(goodElectrons->At(q)->SCluster()->Eta()) >= 1.479 &&
931 >             MathUtils::DeltaR(goodElectrons->At(q)->Mom(), pf->Mom()) < 0.08) IsLeptonFootprint = kTRUE;
932 >        }
933        }
934 <      for (UInt_t q=0; q < goodMuons->GetEntries() ; ++q) {
935 <        //if pf candidate matches an muon passing ID cuts, then veto it
936 <        if(pf->TrackerTrk() && goodMuons->At(q)->TrackerTrk() &&
937 <           pf->TrackerTrk() == goodMuons->At(q)->TrackerTrk()) IsLeptonFootprint = kTRUE;
938 <        //if pf candidate lies in veto regions of muon passing ID cuts, then veto it
939 <        if(pf->BestTrk() && MathUtils::DeltaR(goodMuons->At(q)->Mom(), pf->Mom()) < 0.01) IsLeptonFootprint = kTRUE;
934 >      if(goodMuons) {
935 >        for (UInt_t q=0; q < goodMuons->GetEntries() ; ++q) {
936 >          //if pf candidate matches an muon passing ID cuts, then veto it
937 >          if(pf->TrackerTrk() && goodMuons->At(q)->TrackerTrk() &&
938 >             pf->TrackerTrk() == goodMuons->At(q)->TrackerTrk()) IsLeptonFootprint = kTRUE;
939 >          //if pf candidate lies in veto regions of muon passing ID cuts, then veto it
940 >          if(pf->BestTrk() && MathUtils::DeltaR(goodMuons->At(q)->Mom(), pf->Mom()) < 0.01) IsLeptonFootprint = kTRUE;
941 >        }
942        }
943  
944        if (!IsLeptonFootprint) {
# Line 741 | Line 978 | Double_t MuonIDMVA::MVAValue(const Muon
978             if (dr >= 0.3 && dr < 0.4) tmpNeutralHadronIso_DR0p3To0p4 += pf->Pt();
979             if (dr >= 0.4 && dr < 0.5) tmpNeutralHadronIso_DR0p4To0p5 += pf->Pt();
980           }
981 +
982 +         if (dr < 0.5) {
983 +           tmpMuNPFCand++;
984 +           tmpMuDeltaRMean += dr;
985 +           tmpMuDeltaRSum  += dr;
986 +           tmpMuDensity    += pf->Pt() / dr;
987 +         }
988        } //not lepton footprint
989      } //in 1.0 dr cone
990    } //loop over PF candidates
991    
992 <  Double_t fMVAVar_ChargedIso_DR0p0To0p1  = 0;
993 <  Double_t fMVAVar_ChargedIso_DR0p1To0p2  = 0;
994 <  Double_t fMVAVar_ChargedIso_DR0p2To0p3  = 0;
995 <  Double_t fMVAVar_ChargedIso_DR0p3To0p4  = 0;
996 <  Double_t fMVAVar_ChargedIso_DR0p4To0p5  = 0;
997 <  Double_t fMVAVar_GammaIso_DR0p0To0p1  = 0;
998 <  Double_t fMVAVar_GammaIso_DR0p1To0p2  = 0;
999 <  Double_t fMVAVar_GammaIso_DR0p2To0p3  = 0;
1000 <  Double_t fMVAVar_GammaIso_DR0p3To0p4  = 0;
1001 <  Double_t fMVAVar_GammaIso_DR0p4To0p5  = 0;
1002 <  Double_t fMVAVar_NeutralHadronIso_DR0p0To0p1  = 0;
1003 <  Double_t fMVAVar_NeutralHadronIso_DR0p1To0p2  = 0;
1004 <  Double_t fMVAVar_NeutralHadronIso_DR0p2To0p3  = 0;
1005 <  Double_t fMVAVar_NeutralHadronIso_DR0p3To0p4  = 0;
1006 <  Double_t fMVAVar_NeutralHadronIso_DR0p4To0p5  = 0;
992 > //   Double_t fMVAVar_ChargedIso_DR0p0To0p1  = 0;
993 > //   Double_t fMVAVar_ChargedIso_DR0p1To0p2  = 0;
994 > //   Double_t fMVAVar_ChargedIso_DR0p2To0p3  = 0;
995 > //   Double_t fMVAVar_ChargedIso_DR0p3To0p4  = 0;
996 > //   Double_t fMVAVar_ChargedIso_DR0p4To0p5  = 0;
997 > //   Double_t fMVAVar_GammaIso_DR0p0To0p1  = 0;
998 > //   Double_t fMVAVar_GammaIso_DR0p1To0p2  = 0;
999 > //   Double_t fMVAVar_GammaIso_DR0p2To0p3  = 0;
1000 > //   Double_t fMVAVar_GammaIso_DR0p3To0p4  = 0;
1001 > //   Double_t fMVAVar_GammaIso_DR0p4To0p5  = 0;
1002 > //   Double_t fMVAVar_NeutralHadronIso_DR0p0To0p1  = 0;
1003 > //   Double_t fMVAVar_NeutralHadronIso_DR0p1To0p2  = 0;
1004 > //   Double_t fMVAVar_NeutralHadronIso_DR0p2To0p3  = 0;
1005 > //   Double_t fMVAVar_NeutralHadronIso_DR0p3To0p4  = 0;
1006 > //   Double_t fMVAVar_NeutralHadronIso_DR0p4To0p5  = 0;
1007  
1008 <  fMVAVar_ChargedIso_DR0p0To0p1   = TMath::Min((tmpChargedIso_DR0p0To0p1)/mu->Pt(), 2.5);
1009 <  fMVAVar_ChargedIso_DR0p1To0p2   = TMath::Min((tmpChargedIso_DR0p1To0p2)/mu->Pt(), 2.5);
1008 >  fMVAVar_ChargedIso_DR0p0To0p1 = TMath::Min((tmpChargedIso_DR0p0To0p1)/mu->Pt(), 2.5);
1009 >  fMVAVar_ChargedIso_DR0p1To0p2 = TMath::Min((tmpChargedIso_DR0p1To0p2)/mu->Pt(), 2.5);
1010    fMVAVar_ChargedIso_DR0p2To0p3 = TMath::Min((tmpChargedIso_DR0p2To0p3)/mu->Pt(), 2.5);
1011    fMVAVar_ChargedIso_DR0p3To0p4 = TMath::Min((tmpChargedIso_DR0p3To0p4)/mu->Pt(), 2.5);
1012    fMVAVar_ChargedIso_DR0p4To0p5 = TMath::Min((tmpChargedIso_DR0p4To0p5)/mu->Pt(), 2.5);
# Line 776 | Line 1020 | Double_t MuonIDMVA::MVAValue(const Muon
1020    fMVAVar_NeutralHadronIso_DR0p2To0p3 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p2To0p3 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p2To0p3, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1021    fMVAVar_NeutralHadronIso_DR0p3To0p4 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p3To0p4 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p3To0p4, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1022    fMVAVar_NeutralHadronIso_DR0p4To0p5 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p4To0p5 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p4To0p5, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
779  
1023  
1024 +  // Variables for dR MVA
1025 +  fMVAVar_MuRelIsoPFCharged  = 0.;
1026 +  fMVAVar_MuRelIsoPFCharged += TMath::Min((tmpChargedIso_DR0p0To0p1)/mu->Pt(), 2.5);
1027 +  fMVAVar_MuRelIsoPFCharged += TMath::Min((tmpChargedIso_DR0p1To0p2)/mu->Pt(), 2.5);
1028 +  fMVAVar_MuRelIsoPFCharged += TMath::Min((tmpChargedIso_DR0p2To0p3)/mu->Pt(), 2.5);
1029 +  fMVAVar_MuRelIsoPFCharged += TMath::Min((tmpChargedIso_DR0p3To0p4)/mu->Pt(), 2.5);
1030 +  fMVAVar_MuRelIsoPFCharged += TMath::Min((tmpChargedIso_DR0p4To0p5)/mu->Pt(), 2.5);
1031 +  
1032 +  fMVAVar_MuRelIsoPFNeutral  = 0.;
1033 +  fMVAVar_MuRelIsoPFNeutral += TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p0To0p1 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p0To0p1, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1034 +  fMVAVar_MuRelIsoPFNeutral += TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p1To0p2 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p1To0p2, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1035 +  fMVAVar_MuRelIsoPFNeutral += TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p2To0p3 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p2To0p3, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1036 +  fMVAVar_MuRelIsoPFNeutral += TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p3To0p4 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p3To0p4, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1037 +  fMVAVar_MuRelIsoPFNeutral += TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p4To0p5 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p4To0p5, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1038 +
1039 +  fMVAVar_MuRelIsoPFPhotons  = 0.;
1040 +  fMVAVar_MuRelIsoPFPhotons += TMath::Max(TMath::Min((tmpGammaIso_DR0p0To0p1 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p0To0p1, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1041 +  fMVAVar_MuRelIsoPFPhotons += TMath::Max(TMath::Min((tmpGammaIso_DR0p1To0p2 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p1To0p2, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1042 +  fMVAVar_MuRelIsoPFPhotons += TMath::Max(TMath::Min((tmpGammaIso_DR0p2To0p3 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p2To0p3, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1043 +  fMVAVar_MuRelIsoPFPhotons += TMath::Max(TMath::Min((tmpGammaIso_DR0p3To0p4 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p3To0p4, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1044 +  fMVAVar_MuRelIsoPFPhotons += TMath::Max(TMath::Min((tmpGammaIso_DR0p4To0p5 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p4To0p5, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1045 +
1046 +  fMVAVar_MuDeltaRMean      = tmpMuDeltaRMean/TMath::Max(1.0,tmpMuNPFCand);
1047 +  fMVAVar_MuDeltaRSum       = tmpMuDeltaRSum;
1048 +  fMVAVar_MuDensity         = tmpMuDensity;
1049  
1050    Double_t mva = -9999;  
1051    TMVA::Reader *reader = 0;
# Line 793 | Line 1061 | Double_t MuonIDMVA::MVAValue(const Muon
1061    mva = reader->EvaluateMVA( fMethodname );
1062  
1063    if (printDebug) {
1064 <    std::cout << "Debug Muon MVA: \n";
1064 >    std::cout << "Debug Muon MVA: ";
1065      std::cout << " MuTkNchi2 " << fMVAVar_MuTkNchi2              
1066                << " MuGlobalNchi2 " << fMVAVar_MuGlobalNchi2          
1067                << " MuNValidHits " << fMVAVar_MuNValidHits          
# Line 811 | Line 1079 | Double_t MuonIDMVA::MVAValue(const Muon
1079                << " MuHadS9Energy " << fMVAVar_MuHadS9Energy    
1080                << " MuEmS9Energy " << fMVAVar_MuEmS9Energy    
1081                << " eta " << fMVAVar_MuEta  
1082 <              << " pt " << fMVAVar_MuPt << std::endl;
1083 <    
1082 >              << " pt " << fMVAVar_MuPt
1083 >              << " isoInfo: ";
1084      std::cout << fMVAVar_ChargedIso_DR0p0To0p1 << " "
1085                << fMVAVar_ChargedIso_DR0p1To0p2 << " "
1086                << fMVAVar_ChargedIso_DR0p2To0p3 << " "
# Line 827 | Line 1095 | Double_t MuonIDMVA::MVAValue(const Muon
1095                << fMVAVar_NeutralHadronIso_DR0p1To0p2 << " "
1096                << fMVAVar_NeutralHadronIso_DR0p2To0p3 << " "
1097                << fMVAVar_NeutralHadronIso_DR0p3To0p4 << " "
1098 <              << fMVAVar_NeutralHadronIso_DR0p4To0p5 << " "
1099 <              << std::endl;
1100 <    std::cout << "MVA: " << mva
1098 >              << fMVAVar_NeutralHadronIso_DR0p4To0p5;
1099 >    std::cout << " MuRelIsoPFCharged: " << fMVAVar_MuRelIsoPFCharged
1100 >              << " MuRelIsoPFNeutral: " << fMVAVar_MuRelIsoPFNeutral
1101 >              << " MuRelIsoPFPhotons: " << fMVAVar_MuRelIsoPFPhotons
1102 >              << " MuDeltaRMean: "      << fMVAVar_MuDeltaRMean
1103 >              << " MuDeltaRMean: "      << fMVAVar_MuDeltaRMean
1104 >              << " MuDensity: "         << fMVAVar_MuDensity;        
1105 >    std::cout << " MVA: " << mva
1106                << std::endl;
1107    }
1108  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines