ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/ElectronIDMVA.cc
Revision: 1.2
Committed: Sun Sep 25 15:03:41 2011 UTC (13 years, 7 months ago) by sixie
Content type: text/plain
Branch: MAIN
Changes since 1.1: +0 -23 lines
Log Message:
remove debug print out

File Contents

# User Rev Content
1 sixie 1.1 #include "MitPhysics/Utils/interface/ElectronIDMVA.h"
2     #include "MitPhysics/Utils/interface/ElectronTools.h"
3     #include "MitPhysics/Utils/interface/IsolationTools.h"
4     #include "MitAna/DataTree/interface/StableData.h"
5     #include <TFile.h>
6     #include <TRandom3.h>
7     #include "TMVA/Tools.h"
8     #include "TMVA/Reader.h"
9    
10    
11     ClassImp(mithep::ElectronIDMVA)
12    
13     using namespace mithep;
14    
15     //--------------------------------------------------------------------------------------------------
16     ElectronIDMVA::ElectronIDMVA() :
17     fMethodname("BDTG method"),
18     fLH(0),
19     fIsInitialized(kFALSE)
20     {
21     // Constructor.
22     for(UInt_t i=0; i<6; ++i) {
23     fTMVAReader[i] = 0;
24     }
25     }
26    
27    
28     //--------------------------------------------------------------------------------------------------
29     ElectronIDMVA::~ElectronIDMVA()
30     {
31     for(UInt_t i=0; i<6; ++i) {
32     if (fTMVAReader[i]) delete fTMVAReader[i];
33     }
34     }
35    
36     //--------------------------------------------------------------------------------------------------
37     void ElectronIDMVA::Initialize( TString methodName,
38     TString Subdet0Pt10To20Weights ,
39     TString Subdet1Pt10To20Weights ,
40     TString Subdet2Pt10To20Weights,
41     TString Subdet0Pt20ToInfWeights,
42     TString Subdet1Pt20ToInfWeights,
43     TString Subdet2Pt20ToInfWeights,
44     ElectronLikelihood *LH) {
45    
46     fIsInitialized = kTRUE;
47    
48     fMethodname = methodName;
49     fLH = LH;
50     if (!fLH) { std::cout << "Error: Likelihood is not properly initialized.\n"; assert(fLH); }
51    
52     for(UInt_t i=0; i<6; ++i) {
53     if (fTMVAReader[i]) delete fTMVAReader[i];
54    
55     fTMVAReader[i] = new TMVA::Reader( "!Color:!Silent:Error" );
56     fTMVAReader[i]->SetVerbose(kTRUE);
57     fTMVAReader[i]->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
58     fTMVAReader[i]->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
59     fTMVAReader[i]->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
60     fTMVAReader[i]->AddVariable( "HoverE", &fMVAVar_EleHoverE );
61     fTMVAReader[i]->AddVariable( "D0", &fMVAVar_EleD0 );
62     fTMVAReader[i]->AddVariable( "FBrem", &fMVAVar_EleFBrem );
63     fTMVAReader[i]->AddVariable( "EOverP", &fMVAVar_EleEOverP );
64     fTMVAReader[i]->AddVariable( "ESeedClusterOverPout", &fMVAVar_EleESeedClusterOverPout );
65     fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
66     fTMVAReader[i]->AddVariable( "NBrem", &fMVAVar_EleNBrem );
67     fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
68     fTMVAReader[i]->AddVariable( "ESeedClusterOverPIn", &fMVAVar_EleESeedClusterOverPIn );
69     fTMVAReader[i]->AddVariable( "IP3d", &fMVAVar_EleIP3d );
70     fTMVAReader[i]->AddVariable( "IP3dSig", &fMVAVar_EleIP3dSig );
71     fTMVAReader[i]->AddVariable( "StandardLikelihood", &fMVAVar_EleStandardLikelihood );
72    
73     if (i==0) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt10To20Weights );
74     if (i==1) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt10To20Weights );
75     if (i==2) fTMVAReader[i]->BookMVA(fMethodname , Subdet2Pt10To20Weights );
76     if (i==3) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt20ToInfWeights );
77     if (i==4) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt20ToInfWeights );
78     if (i==5) fTMVAReader[i]->BookMVA(fMethodname , Subdet2Pt20ToInfWeights );
79    
80     }
81    
82     std::cout << "Electron ID MVA Initialization\n";
83     std::cout << "MethodName : " << fMethodname << std::endl;
84     std::cout << "Load weights file : " << Subdet0Pt10To20Weights << std::endl;
85     std::cout << "Load weights file : " << Subdet1Pt10To20Weights << std::endl;
86     std::cout << "Load weights file : " << Subdet2Pt10To20Weights << std::endl;
87     std::cout << "Load weights file : " << Subdet0Pt20ToInfWeights << std::endl;
88     std::cout << "Load weights file : " << Subdet1Pt20ToInfWeights << std::endl;
89     std::cout << "Load weights file : " << Subdet2Pt20ToInfWeights << std::endl;
90    
91     }
92    
93    
94     //--------------------------------------------------------------------------------------------------
95     Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex) {
96    
97     if (!fIsInitialized) {
98     std::cout << "Error: ElectronIDMVA not properly initialized.\n";
99     return -9999;
100     }
101    
102     Int_t subdet = 0;
103     if (ele->SCluster()->AbsEta() < 1.0) subdet = 0;
104     else if (ele->SCluster()->AbsEta() < 1.479) subdet = 1;
105     else subdet = 2;
106     Int_t ptBin = 0;
107     if (ele->Pt() > 20.0) ptBin = 1;
108    
109     //set all input variables
110     fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
111     fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
112     fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
113     fMVAVar_EleHoverE = ele->HadronicOverEm();
114     fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
115     fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
116     fMVAVar_EleFBrem = ele->FBrem();
117     fMVAVar_EleEOverP = ele->ESuperClusterOverP();
118     fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
119     if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
120     else fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
121     fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
122     fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->ESuperClusterOverP()*ele->BestTrk()->P())) - 1.0 / ele->BestTrk()->P();
123     fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
124     fMVAVar_EleIP3d = ele->Ip3dPV();
125     fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
126     fMVAVar_EleStandardLikelihood = ElectronTools::Likelihood(fLH, ele);
127    
128     Double_t mva = -9999;
129     TMVA::Reader *reader = 0;
130     Int_t MVABin = -1;
131     if (subdet == 0 && ptBin == 0) MVABin = 0;
132     if (subdet == 1 && ptBin == 0) MVABin = 1;
133     if (subdet == 2 && ptBin == 0) MVABin = 2;
134     if (subdet == 0 && ptBin == 1) MVABin = 3;
135     if (subdet == 1 && ptBin == 1) MVABin = 4;
136     if (subdet == 2 && ptBin == 1) MVABin = 5;
137     assert(MVABin >= 0 && MVABin <= 5);
138     reader = fTMVAReader[MVABin];
139    
140     mva = reader->EvaluateMVA( fMethodname );
141    
142     return mva;
143     }