ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/MVATools.cc
Revision: 1.8
Committed: Tue Dec 13 21:13:23 2011 UTC (13 years, 4 months ago) by bendavid
Content type: text/plain
Branch: MAIN
Changes since 1.7: +4 -7 lines
Log Message:
gamma gamma Electron veto inversion, systematics mod, and macro

File Contents

# Content
1 // $Id: MVATools.cc,v 1.7 2011/12/11 00:03:05 bendavid Exp $
2
3 #include "MitPhysics/Utils/interface/PhotonTools.h"
4 #include "MitPhysics/Utils/interface/MVATools.h"
5 #include "MitPhysics/Utils/interface/ElectronTools.h"
6 #include "MitPhysics/Utils/interface/IsolationTools.h"
7 #include "MitAna/DataTree/interface/StableData.h"
8 #include <TFile.h>
9 #include <TRandom3.h>
10 #include "TMVA/Tools.h"//MVA
11 #include "TMVA/Reader.h"//MVA
12
13 ClassImp(mithep::MVATools)
14
15 using namespace mithep;
16
17
18 //--------------------------------------------------------------------------------------------------
19 MVATools::MVATools():
20 fReaderEndcap(0),
21 fReaderBarrel(0),
22
23 //MVA Variables v4
24 HoE(0),
25 covIEtaIEta(0),
26 tIso1abs(0),
27 tIso3abs(0),
28 tIso2abs(0),
29 R9(0),
30
31 absIsoEcal(0),
32 absIsoHcal(0),
33 RelEMax(0),
34 RelETop(0),
35 RelEBottom(0),
36 RelELeft(0),
37 RelERight(0),
38 RelE2x5Max(0),
39 RelE2x5Top(0),
40 RelE2x5Bottom(0),
41 RelE2x5Left(0),
42 RelE2x5Right(0),
43 RelE5x5(0),
44
45 EtaWidth(0),
46 PhiWidth(0),
47 CoviEtaiPhi(0),
48 CoviPhiiPhi(0),
49
50 NVertexes(0),
51 RelPreshowerEnergy(0),
52
53 //MVA v2 and v1
54 RelIsoEcal(0),
55 RelIsoHcal(0),
56 tIso1(0),
57 tIso3(0),
58 tIso2(0)
59 {
60 // Constructor.
61 }
62
63 //--------------------------------------------------------------------------------------------------
64 void MVATools::InitializeMVA(int VariableType, TString EndcapWeights,TString BarrelWeights) {
65
66 if (fReaderEndcap) delete fReaderEndcap;
67 if (fReaderBarrel) delete fReaderBarrel;
68
69 fReaderEndcap = new TMVA::Reader( "!Color:!Silent:Error" );
70 fReaderBarrel = new TMVA::Reader( "!Color:!Silent:Error" );
71
72 TMVA::Reader *readers[2];
73 readers[0] = fReaderEndcap;
74 readers[1] = fReaderBarrel;
75
76 for (UInt_t i=0; i<2; ++i) {
77
78 if(VariableType==0||VariableType==1||VariableType==2){
79 readers[i]->AddVariable( "HoE", &HoE );
80 readers[i]->AddVariable( "covIEtaIEta", &covIEtaIEta );
81 readers[i]->AddVariable( "tIso1", &tIso1 );
82 readers[i]->AddVariable( "tIso3", &tIso3 );
83 readers[i]->AddVariable( "tIso2", &tIso2 );
84 readers[i]->AddVariable( "R9", &R9 );
85 }
86
87 if(VariableType==3||VariableType==4){
88 readers[i]->AddVariable( "HoE", &HoE );
89 readers[i]->AddVariable( "covIEtaIEta", &covIEtaIEta );
90 readers[i]->AddVariable( "tIso1abs", &tIso1abs );
91 readers[i]->AddVariable( "tIso3abs", &tIso3abs );
92 readers[i]->AddVariable( "tIso2abs", &tIso2abs );
93 readers[i]->AddVariable( "R9", &R9 );
94 }
95
96 if(VariableType==1||VariableType==2){
97 readers[i]->AddVariable( "RelIsoEcal", &RelIsoEcal );
98 readers[i]->AddVariable( "RelIsoHcal", &RelIsoHcal );
99 readers[i]->AddVariable( "RelEMax", &RelEMax );
100 readers[i]->AddVariable( "RelETop", &RelETop );
101 readers[i]->AddVariable( "RelEBottom", &RelEBottom );
102 readers[i]->AddVariable( "RelELeft", &RelELeft );
103 readers[i]->AddVariable( "RelERight", &RelERight );
104 readers[i]->AddVariable( "RelE2x5Max", &RelE2x5Max );
105 readers[i]->AddVariable( "RelE2x5Top", &RelE2x5Top );
106 readers[i]->AddVariable( "RelE2x5Bottom", &RelE2x5Bottom );
107 readers[i]->AddVariable( "RelE2x5Left", &RelE2x5Left );
108 readers[i]->AddVariable( "RelE2x5Right", &RelE2x5Right );
109 readers[i]->AddVariable( "RelE5x5", &RelE5x5 );
110 }
111
112 if(VariableType==3||VariableType==4){
113 readers[i]->AddVariable( "absIsoEcal", &absIsoEcal );
114 readers[i]->AddVariable( "absIsoHcal", &absIsoHcal );
115 readers[i]->AddVariable( "RelEMax", &RelEMax );
116 readers[i]->AddVariable( "RelETop", &RelEBottom);
117 readers[i]->AddVariable( "RelEBottom", &RelEBottom );
118 readers[i]->AddVariable( "RelELeft", &RelELeft );
119 readers[i]->AddVariable( "RelERight", &RelERight );
120 readers[i]->AddVariable( "RelE2x5Max", &RelE2x5Max );
121 readers[i]->AddVariable( "RelE2x5Top", &RelE2x5Top );
122 readers[i]->AddVariable( "RelE2x5Bottom", &RelE2x5Bottom );
123 readers[i]->AddVariable( "RelE2x5Left", &RelE2x5Left );
124 readers[i]->AddVariable( "RelE2x5Right", &RelE2x5Right );
125 readers[i]->AddVariable( "RelE5x5", &RelE5x5 );
126 }
127
128 if(VariableType==2||VariableType==3||VariableType==4){
129 readers[i]->AddVariable( "EtaWidth", &EtaWidth );
130 readers[i]->AddVariable( "PhiWidth", &PhiWidth );
131 readers[i]->AddVariable( "CoviEtaiPhi", &CoviEtaiPhi );
132 readers[i]->AddVariable( "CoviPhiiPhi", &CoviPhiiPhi );
133 if(VariableType==4){
134 readers[i]->AddVariable( "NVertexes", &NVertexes );
135 }
136 if(i==0){
137 readers[i]->AddVariable( "RelPreshowerEnergy", &RelPreshowerEnergy );
138 }
139 }
140
141 if(VariableType==6){
142 readers[i]->AddVariable( "HoE", &HoE );
143 readers[i]->AddVariable( "covIEtaIEta", &covIEtaIEta );
144 readers[i]->AddVariable( "tIso1abs", &tIso1abs );
145 readers[i]->AddVariable( "tIso3abs", &tIso3abs );
146 readers[i]->AddVariable( "tIso2abs", &tIso2abs );
147 readers[i]->AddVariable( "R9", &R9 );
148 readers[i]->AddVariable( "absIsoEcal", &absIsoEcal );
149 readers[i]->AddVariable( "absIsoHcal", &absIsoHcal );
150 readers[i]->AddVariable( "RelE5x5", &RelE5x5 );
151 readers[i]->AddVariable( "EtaWidth", &EtaWidth );
152 readers[i]->AddVariable( "PhiWidth", &PhiWidth );
153 readers[i]->AddVariable( "CoviEtaiPhi", &CoviEtaiPhi );
154 readers[i]->AddVariable( "CoviPhiiPhi", &CoviPhiiPhi );
155 readers[i]->AddVariable( "NVertexes", &NVertexes );
156 if(i==0){
157 readers[i]->AddVariable( "RelPreshowerEnergy", &RelPreshowerEnergy );
158 }
159 }
160
161 }
162
163 fReaderEndcap->BookMVA("BDT method",EndcapWeights);
164 fReaderBarrel->BookMVA("BDT method",BarrelWeights);
165
166 assert(fReaderEndcap);
167 assert(fReaderBarrel);
168
169 }
170
171 Bool_t MVATools::PassMVASelection(const Photon* p,const Vertex* vtx,const TrackCol* trackCol,const VertexCol* vtxCol,Double_t _tRho,Float_t bdtCutBarrel, Float_t bdtCutEndcap, const ElectronCol* els, Bool_t applyElectronVeto) {
172
173 //initilize the bool value
174 PassMVA=kFALSE;
175
176 Float_t photon_bdt = MVATools::GetMVAbdtValue(p,vtx,trackCol,vtxCol, _tRho, els, applyElectronVeto);
177
178 if (isbarrel) {
179 if(bdt>bdtCutBarrel){
180 PassMVA=kTRUE;
181 }
182 }
183 else {
184 if(bdt>bdtCutEndcap){
185 PassMVA=kTRUE;
186 }
187 }
188 return PassMVA;
189 }
190
191 //---------------------------------------------------------------------------------
192 Int_t MVATools::PassElectronVetoInt(const Photon* p, const ElectronCol* els) {
193
194 // these values are taken from the H2GGlobe code... (actually from Marco/s mail)
195 float cic4_allcuts_temp_sublead[] = {
196 3.8, 2.2, 1.77, 1.29,
197 11.7, 3.4, 3.9, 1.84,
198 3.5, 2.2, 2.3, 1.45,
199 0.0106, 0.0097, 0.028, 0.027,
200 0.082, 0.062, 0.065, 0.048,
201 0.94, 0.36, 0.94, 0.32,
202 1., 0.062, 0.97, 0.97,
203 1.5, 1.5, 1.5, 1.5 }; // the last line is PixelmatchVeto and un-used
204
205 //initilize the bool value
206 PassElecVetoInt=0;
207
208 dRTrack = PhotonTools::ElectronVetoCiC(p, els);
209
210 ScEta_MVA=p->SCluster()->Eta();
211
212 isbarrel = (fabs(ScEta_MVA)<1.4442);
213
214 //R9 = p->R9();
215 R9 = p->E33()/p->SCluster()->RawEnergy();
216
217 // check which category it is ...
218 _tCat = 1;
219 if ( !isbarrel ) _tCat = 3;
220 if ( R9 < 0.94 ) _tCat++;
221
222 //Electron Veto
223 if(dRTrack > cic4_allcuts_temp_sublead[_tCat-1+6*4]){
224 PassElecVetoInt=1;
225 }
226
227 return PassElecVetoInt;
228
229 }
230
231 //--------------------------------------------------------------------------------------------------
232
233 Float_t MVATools::GetMVAbdtValue(const Photon* p,const Vertex* vtx,const TrackCol* trackCol,const VertexCol* vtxCol,Double_t _tRho, const ElectronCol* els, Bool_t applyElectronVeto) {
234
235 //get the variables used to compute MVA variables
236 ecalIso3 = p->EcalRecHitIsoDr03();
237 ecalIso4 = p->EcalRecHitIsoDr04();
238 hcalIso4 = p->HcalTowerSumEtDr04();
239
240 wVtxInd = 0;
241
242 trackIso1 = IsolationTools::CiCTrackIsolation(p,vtx, 0.3, 0.02, 0.0, 0.0, 0.1, 1.0, trackCol, NULL, NULL, (!applyElectronVeto ? els : NULL) );//Question Ming:whyfPV->At(0) instead of selected vertex using ranking method?
243
244 // track iso worst vtx
245 trackIso2 = IsolationTools::CiCTrackIsolation(p,vtx, 0.4, 0.02, 0.0, 0.0, 0.1, 1.0, trackCol, &wVtxInd,vtxCol, (!applyElectronVeto ? els : NULL) );
246
247 combIso1 = ecalIso3+hcalIso4+trackIso1 - 0.17*_tRho;
248 combIso2 = ecalIso4+hcalIso4+trackIso2 - 0.52*_tRho;
249
250 RawEnergy = p->SCluster()->RawEnergy();
251
252 //mva varialbes v1 and v2
253 tIso1 = (combIso1) *50./p->Et();
254 tIso3 = (trackIso1)*50./p->Et();
255 tIso2 = (combIso2) *50./(p->MomVtx(vtxCol->At(wVtxInd)->Position()).Pt());
256 RelIsoEcal=(ecalIso3-0.17*_tRho)/p->Et();
257 RelIsoHcal=(hcalIso4-0.17*_tRho)/p->Et();
258
259 //compute mva variables for v3
260 HoE = p->HadOverEm();
261 covIEtaIEta = p->CoviEtaiEta();
262 tIso1abs = combIso1;
263 tIso3abs = trackIso1;
264 tIso2abs = combIso2;
265 R9 = p->R9();
266
267 absIsoEcal=(ecalIso3-0.17*_tRho);
268 absIsoHcal=(hcalIso4-0.17*_tRho);
269 RelEMax=p->SCluster()->Seed()->EMax()/RawEnergy;
270 RelETop=p->SCluster()->Seed()->ETop()/RawEnergy;
271 RelEBottom=p->SCluster()->Seed()->EBottom()/RawEnergy;
272 RelELeft=p->SCluster()->Seed()->ELeft()/RawEnergy;
273 RelERight=p->SCluster()->Seed()->ERight()/RawEnergy;
274 RelE2x5Max=p->SCluster()->Seed()->E2x5Max()/RawEnergy;
275 RelE2x5Top=p->SCluster()->Seed()->E2x5Top()/RawEnergy;
276 RelE2x5Bottom=p->SCluster()->Seed()->E2x5Bottom()/RawEnergy;
277 RelE2x5Left=p->SCluster()->Seed()->E2x5Left()/RawEnergy;
278 RelE2x5Right=p->SCluster()->Seed()->E2x5Right()/RawEnergy;
279 RelE5x5=p->SCluster()->Seed()->E5x5()/RawEnergy;
280
281 EtaWidth=p->SCluster()->EtaWidth();
282 PhiWidth=p->SCluster()->PhiWidth();
283 CoviEtaiPhi=p->SCluster()->Seed()->CoviEtaiPhi();
284 CoviPhiiPhi=p->SCluster()->Seed()->CoviPhiiPhi();
285
286 RelPreshowerEnergy=p->SCluster()->PreshowerEnergy()/RawEnergy;
287 NVertexes=vtxCol->GetEntries();
288
289 //spectator variables
290 Pt_MVA=p->Pt();
291 ScEta_MVA=p->SCluster()->Eta();
292
293 isbarrel = (fabs(ScEta_MVA)<1.4442);
294
295 if (isbarrel) {
296 reader = fReaderBarrel;
297 }
298 else {
299 reader = fReaderEndcap;
300 }
301
302 assert(reader);
303
304 bdt = reader->EvaluateMVA("BDT method");
305
306 /* printf("HoE: %f\n",HoE);
307 printf("covIEtaIEta: %f\n",covIEtaIEta);
308 printf("tIso1abs: %f\n",tIso1abs);
309 printf("tIso3abs: %f\n",tIso3abs);
310 printf("tIso2abs: %f\n",tIso2abs);
311
312 printf("absIsoEcal: %f\n",absIsoEcal);
313 printf("absIsoHcal: %f\n",absIsoHcal);
314 printf("RelEMax: %f\n",RelEMax);
315 printf("RelETop: %f\n",RelETop);
316 printf("RelEBottom: %f\n",RelEBottom);
317 printf("RelELeft: %f\n",RelELeft);
318 printf("RelERight: %f\n",RelERight);
319 printf("RelE2x5Max: %f\n",RelE2x5Max);
320 printf("RelE2x5Top: %f\n",RelE2x5Top);
321 printf("RelE2x5Bottom: %f\n",RelE2x5Bottom);
322 printf("RelE2x5Left: %f\n",RelE2x5Left);
323 printf("RelE2x5Right;: %f\n",RelE2x5Right);
324 printf("RelE5x5: %f\n",RelE5x5);
325
326 printf("EtaWidth: %f\n",EtaWidth);
327 printf("PhiWidth: %f\n",PhiWidth);
328 printf("CoviEtaiPhi: %f\n",CoviEtaiPhi);
329 printf("CoviPhiiPhi: %f\n",CoviPhiiPhi);
330
331 if (!isbarrel) {
332 printf("RelPreshowerEnergy: %f\n",RelPreshowerEnergy);
333 }*/
334
335 return bdt;
336 }