ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/MVATools.cc
Revision: 1.6
Committed: Wed Dec 7 00:45:17 2011 UTC (13 years, 5 months ago) by mingyang
Content type: text/plain
Branch: MAIN
Changes since 1.5: +22 -1 lines
Log Message:
variable 6

File Contents

# Content
1 // $Id: MVATools.cc,v 1.5 2011/12/05 01:39:48 mingyang 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) {
172
173 //initilize the bool value
174 PassMVA=kFALSE;
175
176 Float_t photon_bdt = MVATools::GetMVAbdtValue(p,vtx,trackCol,vtxCol, _tRho);
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
216 // check which category it is ...
217 _tCat = 1;
218 if ( !isbarrel ) _tCat = 3;
219 if ( R9 < 0.94 ) _tCat++;
220
221 //Electron Veto
222 if(dRTrack > cic4_allcuts_temp_sublead[_tCat-1+6*4]){
223 PassElecVetoInt=1;
224 }
225
226 return PassElecVetoInt;
227
228 }
229
230 //--------------------------------------------------------------------------------------------------
231
232 Float_t MVATools::GetMVAbdtValue(const Photon* p,const Vertex* vtx,const TrackCol* trackCol,const VertexCol* vtxCol,Double_t _tRho) {
233
234 //get the variables used to compute MVA variables
235 ecalIso3 = p->EcalRecHitIsoDr03();
236 ecalIso4 = p->EcalRecHitIsoDr04();
237 hcalIso4 = p->HcalTowerSumEtDr04();
238
239 wVtxInd = 0;
240
241 trackIso1 = IsolationTools::CiCTrackIsolation(p,vtx, 0.3, 0.02, 0.0, 0.0, 0.1, 1.0, trackCol);//Question Ming:whyfPV->At(0) instead of selected vertex using ranking method?
242
243 // track iso only
244 trackIso3 = IsolationTools::CiCTrackIsolation(p,vtx, 0.3, 0.02, 0.0, 0.0, 0.1, 1.0, trackCol);
245
246 // track iso worst vtx
247 trackIso2 = IsolationTools::CiCTrackIsolation(p,vtx, 0.4, 0.02, 0.0, 0.0, 0.1, 1.0, trackCol, &wVtxInd,vtxCol);
248
249 combIso1 = ecalIso3+hcalIso4+trackIso1 - 0.17*_tRho;
250 combIso2 = ecalIso4+hcalIso4+trackIso2 - 0.52*_tRho;
251
252 RawEnergy = p->SCluster()->RawEnergy();
253
254 //mva varialbes v1 and v2
255 tIso1 = (combIso1) *50./p->Et();
256 tIso3 = (trackIso3)*50./p->Et();
257 tIso2 = (combIso2) *50./(p->MomVtx(vtxCol->At(wVtxInd)->Position()).Pt());
258 RelIsoEcal=(ecalIso3-0.17*_tRho)/p->Et();
259 RelIsoHcal=(hcalIso4-0.17*_tRho)/p->Et();
260
261 //compute mva variables for v3
262 HoE = p->HadOverEm();
263 covIEtaIEta = p->CoviEtaiEta();
264 tIso1abs = combIso1;
265 tIso3abs = trackIso3;
266 tIso2abs = combIso2;
267 R9 = p->R9();
268
269 absIsoEcal=(ecalIso3-0.17*_tRho);
270 absIsoHcal=(hcalIso4-0.17*_tRho);
271 RelEMax=p->SCluster()->Seed()->EMax()/RawEnergy;
272 RelETop=p->SCluster()->Seed()->ETop()/RawEnergy;
273 RelEBottom=p->SCluster()->Seed()->EBottom()/RawEnergy;
274 RelELeft=p->SCluster()->Seed()->ELeft()/RawEnergy;
275 RelERight=p->SCluster()->Seed()->ERight()/RawEnergy;
276 RelE2x5Max=p->SCluster()->Seed()->E2x5Max()/RawEnergy;
277 RelE2x5Top=p->SCluster()->Seed()->E2x5Top()/RawEnergy;
278 RelE2x5Bottom=p->SCluster()->Seed()->E2x5Bottom()/RawEnergy;
279 RelE2x5Left=p->SCluster()->Seed()->E2x5Left()/RawEnergy;
280 RelE2x5Right=p->SCluster()->Seed()->E2x5Right()/RawEnergy;
281 RelE5x5=p->SCluster()->Seed()->E5x5()/RawEnergy;
282
283 EtaWidth=p->SCluster()->EtaWidth();
284 PhiWidth=p->SCluster()->PhiWidth();
285 CoviEtaiPhi=p->SCluster()->Seed()->CoviEtaiPhi();
286 CoviPhiiPhi=p->SCluster()->Seed()->CoviPhiiPhi();
287
288 RelPreshowerEnergy=p->SCluster()->PreshowerEnergy()/RawEnergy;
289 NVertexes=vtxCol->GetEntries();
290
291 //spectator variables
292 Pt_MVA=p->Pt();
293 ScEta_MVA=p->SCluster()->Eta();
294
295 isbarrel = (fabs(ScEta_MVA)<1.4442);
296
297 if (isbarrel) {
298 reader = fReaderBarrel;
299 }
300 else {
301 reader = fReaderEndcap;
302 }
303
304 assert(reader);
305
306 bdt = reader->EvaluateMVA("BDT method");
307
308 /* printf("HoE: %f\n",HoE);
309 printf("covIEtaIEta: %f\n",covIEtaIEta);
310 printf("tIso1abs: %f\n",tIso1abs);
311 printf("tIso3abs: %f\n",tIso3abs);
312 printf("tIso2abs: %f\n",tIso2abs);
313
314 printf("absIsoEcal: %f\n",absIsoEcal);
315 printf("absIsoHcal: %f\n",absIsoHcal);
316 printf("RelEMax: %f\n",RelEMax);
317 printf("RelETop: %f\n",RelETop);
318 printf("RelEBottom: %f\n",RelEBottom);
319 printf("RelELeft: %f\n",RelELeft);
320 printf("RelERight: %f\n",RelERight);
321 printf("RelE2x5Max: %f\n",RelE2x5Max);
322 printf("RelE2x5Top: %f\n",RelE2x5Top);
323 printf("RelE2x5Bottom: %f\n",RelE2x5Bottom);
324 printf("RelE2x5Left: %f\n",RelE2x5Left);
325 printf("RelE2x5Right;: %f\n",RelE2x5Right);
326 printf("RelE5x5: %f\n",RelE5x5);
327
328 printf("EtaWidth: %f\n",EtaWidth);
329 printf("PhiWidth: %f\n",PhiWidth);
330 printf("CoviEtaiPhi: %f\n",CoviEtaiPhi);
331 printf("CoviPhiiPhi: %f\n",CoviPhiiPhi);
332
333 if (!isbarrel) {
334 printf("RelPreshowerEnergy: %f\n",RelPreshowerEnergy);
335 }*/
336
337 return bdt;
338 }