ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/ElectronIDMVA.cc
Revision: 1.5
Committed: Fri Oct 7 14:04:12 2011 UTC (13 years, 7 months ago) by sixie
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_025c, Mit_025b, Mit_025a, Mit_025
Changes since 1.4: +3 -5 lines
Log Message:
update electron mva. change naming scheme to make it easier on users

File Contents

# Content
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 fIsInitialized(kFALSE)
19 {
20 // Constructor.
21 for(UInt_t i=0; i<6; ++i) {
22 fTMVAReader[i] = 0;
23 }
24 }
25
26
27 //--------------------------------------------------------------------------------------------------
28 ElectronIDMVA::~ElectronIDMVA()
29 {
30 for(UInt_t i=0; i<6; ++i) {
31 if (fTMVAReader[i]) delete fTMVAReader[i];
32 }
33 }
34
35 //--------------------------------------------------------------------------------------------------
36 void ElectronIDMVA::Initialize( TString methodName,
37 TString Subdet0Pt10To20Weights ,
38 TString Subdet1Pt10To20Weights ,
39 TString Subdet2Pt10To20Weights,
40 TString Subdet0Pt20ToInfWeights,
41 TString Subdet1Pt20ToInfWeights,
42 TString Subdet2Pt20ToInfWeights,
43 ElectronIDMVA::MVAType type) {
44
45 fIsInitialized = kTRUE;
46
47 fMethodname = methodName;
48
49 for(UInt_t i=0; i<6; ++i) {
50 if (fTMVAReader[i]) delete fTMVAReader[i];
51
52 fTMVAReader[i] = new TMVA::Reader( "!Color:!Silent:Error" );
53 fTMVAReader[i]->SetVerbose(kTRUE);
54
55 if (type == kBaseline) {
56 fTMVAReader[i]->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
57 fTMVAReader[i]->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
58 fTMVAReader[i]->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
59 fTMVAReader[i]->AddVariable( "FBrem", &fMVAVar_EleFBrem );
60 fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
61 fTMVAReader[i]->AddVariable( "NBrem", &fMVAVar_EleNBrem );
62 fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
63 }
64
65 if (type == kNoIPInfo) {
66 fTMVAReader[i]->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
67 fTMVAReader[i]->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
68 fTMVAReader[i]->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
69 fTMVAReader[i]->AddVariable( "FBrem", &fMVAVar_EleFBrem );
70 fTMVAReader[i]->AddVariable( "EOverP", &fMVAVar_EleEOverP );
71 fTMVAReader[i]->AddVariable( "ESeedClusterOverPout", &fMVAVar_EleESeedClusterOverPout );
72 fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
73 fTMVAReader[i]->AddVariable( "NBrem", &fMVAVar_EleNBrem );
74 fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
75 fTMVAReader[i]->AddVariable( "ESeedClusterOverPIn", &fMVAVar_EleESeedClusterOverPIn );
76 }
77 if (type == kWithIPInfo) {
78 fTMVAReader[i]->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
79 fTMVAReader[i]->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
80 fTMVAReader[i]->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
81 fTMVAReader[i]->AddVariable( "D0", &fMVAVar_EleD0 );
82 fTMVAReader[i]->AddVariable( "FBrem", &fMVAVar_EleFBrem );
83 fTMVAReader[i]->AddVariable( "EOverP", &fMVAVar_EleEOverP );
84 fTMVAReader[i]->AddVariable( "ESeedClusterOverPout", &fMVAVar_EleESeedClusterOverPout );
85 fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
86 fTMVAReader[i]->AddVariable( "NBrem", &fMVAVar_EleNBrem );
87 fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
88 fTMVAReader[i]->AddVariable( "ESeedClusterOverPIn", &fMVAVar_EleESeedClusterOverPIn );
89 fTMVAReader[i]->AddVariable( "IP3d", &fMVAVar_EleIP3d );
90 fTMVAReader[i]->AddVariable( "IP3dSig", &fMVAVar_EleIP3dSig );
91 }
92
93 if (i==0) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt10To20Weights );
94 if (i==1) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt10To20Weights );
95 if (i==2) fTMVAReader[i]->BookMVA(fMethodname , Subdet2Pt10To20Weights );
96 if (i==3) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt20ToInfWeights );
97 if (i==4) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt20ToInfWeights );
98 if (i==5) fTMVAReader[i]->BookMVA(fMethodname , Subdet2Pt20ToInfWeights );
99
100 }
101
102 std::cout << "Electron ID MVA Initialization\n";
103 std::cout << "MethodName : " << fMethodname << " , type == " << type << std::endl;
104 std::cout << "Load weights file : " << Subdet0Pt10To20Weights << std::endl;
105 std::cout << "Load weights file : " << Subdet1Pt10To20Weights << std::endl;
106 std::cout << "Load weights file : " << Subdet2Pt10To20Weights << std::endl;
107 std::cout << "Load weights file : " << Subdet0Pt20ToInfWeights << std::endl;
108 std::cout << "Load weights file : " << Subdet1Pt20ToInfWeights << std::endl;
109 std::cout << "Load weights file : " << Subdet2Pt20ToInfWeights << std::endl;
110
111 }
112
113 //--------------------------------------------------------------------------------------------------
114 Double_t ElectronIDMVA::MVAValue(Double_t ElePt , Double_t EleSCEta,
115 Double_t EleSigmaIEtaIEta,
116 Double_t EleDEtaIn,
117 Double_t EleDPhiIn,
118 Double_t EleHoverE,
119 Double_t EleD0,
120 Double_t EleDZ,
121 Double_t EleFBrem,
122 Double_t EleEOverP,
123 Double_t EleESeedClusterOverPout,
124 Double_t EleSigmaIPhiIPhi,
125 Double_t EleNBrem,
126 Double_t EleOneOverEMinusOneOverP,
127 Double_t EleESeedClusterOverPIn,
128 Double_t EleIP3d,
129 Double_t EleIP3dSig
130 ) {
131
132 if (!fIsInitialized) {
133 std::cout << "Error: ElectronIDMVA not properly initialized.\n";
134 return -9999;
135 }
136
137 Int_t subdet = 0;
138 if (fabs(EleSCEta) < 1.0) subdet = 0;
139 else if (fabs(EleSCEta) < 1.479) subdet = 1;
140 else subdet = 2;
141 Int_t ptBin = 0;
142 if (ElePt > 20.0) ptBin = 1;
143
144 //set all input variables
145 fMVAVar_EleSigmaIEtaIEta = EleSigmaIEtaIEta;
146 fMVAVar_EleDEtaIn = EleDEtaIn;
147 fMVAVar_EleDPhiIn = EleDPhiIn;
148 fMVAVar_EleHoverE = EleHoverE;
149 fMVAVar_EleD0 = EleD0;
150 fMVAVar_EleDZ = EleDZ;
151 fMVAVar_EleFBrem = EleFBrem;
152 fMVAVar_EleEOverP = EleEOverP;
153 fMVAVar_EleESeedClusterOverPout = EleESeedClusterOverPout;
154 fMVAVar_EleSigmaIPhiIPhi = EleSigmaIPhiIPhi;
155 fMVAVar_EleNBrem = EleNBrem;
156 fMVAVar_EleOneOverEMinusOneOverP = EleOneOverEMinusOneOverP;
157 fMVAVar_EleESeedClusterOverPIn = EleESeedClusterOverPIn;
158 fMVAVar_EleIP3d = EleIP3d;
159 fMVAVar_EleIP3dSig = EleIP3dSig;
160
161 Double_t mva = -9999;
162 TMVA::Reader *reader = 0;
163 Int_t MVABin = -1;
164 if (subdet == 0 && ptBin == 0) MVABin = 0;
165 if (subdet == 1 && ptBin == 0) MVABin = 1;
166 if (subdet == 2 && ptBin == 0) MVABin = 2;
167 if (subdet == 0 && ptBin == 1) MVABin = 3;
168 if (subdet == 1 && ptBin == 1) MVABin = 4;
169 if (subdet == 2 && ptBin == 1) MVABin = 5;
170 assert(MVABin >= 0 && MVABin <= 5);
171 reader = fTMVAReader[MVABin];
172
173 mva = reader->EvaluateMVA( fMethodname );
174
175 return mva;
176 }
177
178
179
180 //--------------------------------------------------------------------------------------------------
181 Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex) {
182
183 if (!fIsInitialized) {
184 std::cout << "Error: ElectronIDMVA not properly initialized.\n";
185 return -9999;
186 }
187
188 Int_t subdet = 0;
189 if (ele->SCluster()->AbsEta() < 1.0) subdet = 0;
190 else if (ele->SCluster()->AbsEta() < 1.479) subdet = 1;
191 else subdet = 2;
192 Int_t ptBin = 0;
193 if (ele->Pt() > 20.0) ptBin = 1;
194
195 //set all input variables
196 fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
197 fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
198 fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
199 fMVAVar_EleHoverE = ele->HadronicOverEm();
200 fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
201 fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
202 fMVAVar_EleFBrem = ele->FBrem();
203 fMVAVar_EleEOverP = ele->ESuperClusterOverP();
204 fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
205 if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
206 else fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
207 fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
208 fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->SCluster()->Energy())) - 1.0 / ele->BestTrk()->P();
209 fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
210 fMVAVar_EleIP3d = ele->Ip3dPV();
211 fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
212
213 Double_t mva = -9999;
214 TMVA::Reader *reader = 0;
215 Int_t MVABin = -1;
216 if (subdet == 0 && ptBin == 0) MVABin = 0;
217 if (subdet == 1 && ptBin == 0) MVABin = 1;
218 if (subdet == 2 && ptBin == 0) MVABin = 2;
219 if (subdet == 0 && ptBin == 1) MVABin = 3;
220 if (subdet == 1 && ptBin == 1) MVABin = 4;
221 if (subdet == 2 && ptBin == 1) MVABin = 5;
222 assert(MVABin >= 0 && MVABin <= 5);
223 reader = fTMVAReader[MVABin];
224
225 mva = reader->EvaluateMVA( fMethodname );
226
227 return mva;
228 }