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

Comparing UserCode/MitPhysics/Utils/src/MVATools.cc (file contents):
Revision 1.1 by mingyang, Thu Oct 13 17:28:29 2011 UTC vs.
Revision 1.8 by bendavid, Tue Dec 13 21:13:23 2011 UTC

# Line 20 | Line 20 | MVATools::MVATools():
20    fReaderEndcap(0),
21    fReaderBarrel(0),
22    
23 <  //MVA variables 0
23 >  //MVA Variables v4
24    HoE(0),
25    covIEtaIEta(0),
26 <  tIso1(0),
27 <  tIso3(0),
28 <  tIso2(0),
26 >  tIso1abs(0),
27 >  tIso3abs(0),
28 >  tIso2abs(0),
29    R9(0),
30    
31 <  //MVA variables 1
32 <  RelIsoEcal(0),
33 <  RelIsoHcal(0),
34 <  
31 >  absIsoEcal(0),
32 >  absIsoHcal(0),
33    RelEMax(0),
34    RelETop(0),
35    RelEBottom(0),
# Line 44 | Line 42 | MVATools::MVATools():
42    RelE2x5Right(0),
43    RelE5x5(0),
44    
47  //MVA variables 2
45    EtaWidth(0),
46    PhiWidth(0),
47 <  CoviEtaiPhi(0),
47 >  CoviEtaiPhi(0),
48    CoviPhiiPhi(0),
52  RelPreshowerEnergy(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   }
# Line 69 | Line 74 | void MVATools::InitializeMVA(int Variabl
74    readers[1]  = fReaderBarrel;  
75    
76    for (UInt_t i=0; i<2; ++i) {
77 <    
77 >
78      if(VariableType==0||VariableType==1||VariableType==2){
79        readers[i]->AddVariable( "HoE", &HoE );
80        readers[i]->AddVariable( "covIEtaIEta", &covIEtaIEta );
# Line 79 | Line 84 | void MVATools::InitializeMVA(int Variabl
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);
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);
119 >      readers[i]->AddVariable( "RelERight", &RelERight );
120        readers[i]->AddVariable( "RelE2x5Max", &RelE2x5Max );
121        readers[i]->AddVariable( "RelE2x5Top", &RelE2x5Top );
122        readers[i]->AddVariable( "RelE2x5Bottom", &RelE2x5Bottom );
# Line 95 | Line 125 | void MVATools::InitializeMVA(int Variabl
125        readers[i]->AddVariable( "RelE5x5", &RelE5x5 );
126      }
127      
128 <    if(VariableType==2){
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 <
165 >  
166    assert(fReaderEndcap);
167    assert(fReaderBarrel);
168    
169   }
170  
171 < //--------------------------------------------------------------------------------------------------
118 <
119 < Bool_t MVATools::PassMVASelection(const Photon* p,const Vertex* vtx,const TrackCol* trackCol,const VertexCol* vtxCol,Double_t _tRho,const ElectronCol* els,double MVAPtMin) {
120 <  
121 <  // these values are taken from the H2GGlobe code... (actually from Marco/s mail)
122 <  float cic4_allcuts_temp_sublead[] = {
123 <    3.8,         2.2,         1.77,        1.29,
124 <    11.7,        3.4,         3.9,         1.84,
125 <    3.5,         2.2,         2.3,         1.45,
126 <    0.0106,      0.0097,      0.028,       0.027,
127 <    0.082,       0.062,       0.065,       0.048,
128 <    0.94,        0.36,        0.94,        0.32,
129 <    1.,          0.062,       0.97,        0.97,
130 <    1.5,         1.5,         1.5,         1.5 };  // the last line is PixelmatchVeto and un-used
131 <  
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;
135  PassElecVeto=kFALSE;
136  //Bool_t PassElecVeto=PhotonTools::PassElectronVeto(p,els);
137  
138  
139  //get the variables used to compute MVA variables
140  ecalIso3 = p->EcalRecHitIsoDr03();
141  ecalIso4 = p->EcalRecHitIsoDr04();
142  hcalIso4 = p->HcalTowerSumEtDr04();
143  
144  wVtxInd = 0;
145  
146  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?
147  
148  // track iso only
149  trackIso3 = IsolationTools::CiCTrackIsolation(p,vtx, 0.3, 0.02, 0.0, 0.0, 0.1, 1.0, trackCol);
150  
151  // track iso worst vtx
152  trackIso2 = IsolationTools::CiCTrackIsolation(p,vtx, 0.4, 0.02, 0.0, 0.0, 0.1, 1.0, trackCol, &wVtxInd,vtxCol);
153  
154  combIso1 = ecalIso3+hcalIso4+trackIso1 - 0.17*_tRho;
155  combIso2 = ecalIso4+hcalIso4+trackIso2 - 0.52*_tRho;
156  
157  RawEnergy = p->SCluster()->RawEnergy();
175    
176 <  dRTrack = PhotonTools::ElectronVetoCiC(p, els);
160 <  
161 <  //compute MVA variables 0
162 <  HoE = p->HadOverEm();
163 <  covIEtaIEta = p->CoviEtaiEta();
164 <  tIso1 = (combIso1) *50./p->Et();
165 <  tIso3 = (trackIso3)*50./p->Et();
166 <  tIso2 = (combIso2) *50./(p->MomVtx(vtxCol->At(wVtxInd)->Position()).Pt());
167 <  R9 = p->R9();
168 <  
169 <  //newly added MVA variables 1
170 <  RelIsoEcal=(ecalIso3-0.17*_tRho)/p->Et();
171 <  RelIsoHcal=(hcalIso4-0.17*_tRho)/p->Et();
172 <  
173 <  RelEMax=p->SCluster()->Seed()->EMax()/RawEnergy;
174 <  RelETop=p->SCluster()->Seed()->ETop()/RawEnergy;
175 <  RelEBottom=p->SCluster()->Seed()->EBottom()/RawEnergy;
176 <  RelELeft=p->SCluster()->Seed()->ELeft()/RawEnergy;
177 <  RelERight=p->SCluster()->Seed()->ERight()/RawEnergy;
178 <  RelE2x5Max=p->SCluster()->Seed()->E2x5Max()/RawEnergy;
179 <  RelE2x5Top=p->SCluster()->Seed()->E2x5Top()/RawEnergy;
180 <  RelE2x5Bottom=p->SCluster()->Seed()->E2x5Bottom()/RawEnergy;
181 <  RelE2x5Left=p->SCluster()->Seed()->E2x5Left()/RawEnergy;
182 <  RelE2x5Right=p->SCluster()->Seed()->E2x5Right()/RawEnergy;
183 <  RelE5x5=p->SCluster()->Seed()->E5x5()/RawEnergy;
184 <  
185 <  //newly added MVA variables 2
186 <  EtaWidth=p->SCluster()->EtaWidth();
187 <  PhiWidth=p->SCluster()->PhiWidth();
188 <  CoviEtaiPhi=p->SCluster()->Seed()->CoviEtaiPhi();
189 <  CoviPhiiPhi=p->SCluster()->Seed()->CoviPhiiPhi();
190 <  RelPreshowerEnergy=p->SCluster()->PreshowerEnergy()/RawEnergy;
191 <  
192 <  //spectator variables
193 <  Pt_MVA=p->Pt();
194 <  ScEta_MVA=p->SCluster()->Eta();
195 <  
196 <  isbarrel = (fabs(ScEta_MVA)<1.4442);
197 <  
198 <  // check which category it is ...
199 <  _tCat = 1;
200 <  if ( !isbarrel ) _tCat = 3;
201 <  if ( R9 < 0.94 ) _tCat++;
176 >  Float_t photon_bdt =  MVATools::GetMVAbdtValue(p,vtx,trackCol,vtxCol, _tRho, els, applyElectronVeto);
177    
178 <  //Electron Veto
179 <  if(dRTrack > cic4_allcuts_temp_sublead[_tCat-1+6*4]){
180 <    PassElecVeto=kTRUE;
206 <  }
207 <  
208 <  if(PassElecVeto && Pt_MVA>MVAPtMin && ((fabs(ScEta_MVA)<1.4442)||(fabs(ScEta_MVA)>1.566 && fabs(ScEta_MVA)<2.5)) && tIso1<250 && tIso2<250 && tIso3<250){
209 <    
210 <    if (isbarrel) {
211 <      reader = fReaderBarrel;
212 <    }
213 <    else {
214 <      reader = fReaderEndcap;
215 <    }
216 <    
217 <    bdt = reader->EvaluateMVA( "BDT method" );
218 <    
219 <    if (isbarrel) {
220 <      if(bdt>0.0031324){
221 <        PassMVA=kTRUE;  
222 <      }
178 >  if (isbarrel) {
179 >    if(bdt>bdtCutBarrel){
180 >      PassMVA=kTRUE;    
181      }
224    else {
225      if(bdt>0.0086){
226        PassMVA=kTRUE;  
227      }
228    }
229
182    }
183 <
183 >  else {
184 >    if(bdt>bdtCutEndcap){
185 >      PassMVA=kTRUE;    
186 >    }
187 >  }
188    return PassMVA;
189   }
190  
# Line 255 | Line 211 | Int_t MVATools::PassElectronVetoInt(cons
211    
212    isbarrel = (fabs(ScEta_MVA)<1.4442);
213  
214 <  R9 = p->R9();
214 >  //R9 = p->R9();
215 >  R9 = p->E33()/p->SCluster()->RawEnergy();
216    
217    // check which category it is ...
218    _tCat = 1;
# Line 273 | Line 230 | Int_t MVATools::PassElectronVetoInt(cons
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) {
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();
# Line 282 | Line 239 | Float_t MVATools::GetMVAbdtValue(const P
239    
240    wVtxInd = 0;
241    
242 <  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?
243 <  
287 <  // track iso only
288 <  trackIso3 = IsolationTools::CiCTrackIsolation(p,vtx, 0.3, 0.02, 0.0, 0.0, 0.1, 1.0, trackCol);
289 <  
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);
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 <  dRTrack = PhotonTools::ElectronVetoCiC(p, els);
299 <  
300 <  //compute MVA variables 0
301 <  HoE = p->HadOverEm();
302 <  covIEtaIEta = p->CoviEtaiEta();
252 >  //mva varialbes v1 and v2
253    tIso1 = (combIso1) *50./p->Et();
254 <  tIso3 = (trackIso3)*50./p->Et();
254 >  tIso3 = (trackIso1)*50./p->Et();
255    tIso2 = (combIso2) *50./(p->MomVtx(vtxCol->At(wVtxInd)->Position()).Pt());
306  R9 = p->R9();
307  
308  //newly added MVA variables 1
256    RelIsoEcal=(ecalIso3-0.17*_tRho)/p->Et();
257    RelIsoHcal=(hcalIso4-0.17*_tRho)/p->Et();
258 <  
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;
# Line 321 | Line 278 | Float_t MVATools::GetMVAbdtValue(const P
278    RelE2x5Right=p->SCluster()->Seed()->E2x5Right()/RawEnergy;
279    RelE5x5=p->SCluster()->Seed()->E5x5()/RawEnergy;
280    
324  //newly added MVA variables 2
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();
# Line 345 | Line 303 | Float_t MVATools::GetMVAbdtValue(const P
303  
304    bdt = reader->EvaluateMVA("BDT method");
305  
306 <  /*  printf("HoE: %f\n",HoE);
306 >  /* printf("HoE: %f\n",HoE);
307    printf("covIEtaIEta: %f\n",covIEtaIEta);
308 <  printf("tIso1: %f\n",tIso1);
309 <  printf("tIso3: %f\n",tIso3);
310 <  printf("tIso2: %f\n",tIso2);
353 <  printf("tIso1: %f\n",tIso1);
354 <  printf("R9: %f\n",R9);
355 <  printf("RelIsoEcal: %f\n",RelIsoEcal);
356 <  printf("RelIsoHcal: %f\n",RelIsoHcal);
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);
# Line 372 | Line 328 | Float_t MVATools::GetMVAbdtValue(const P
328    printf("CoviEtaiPhi: %f\n",CoviEtaiPhi);
329    printf("CoviPhiiPhi: %f\n",CoviPhiiPhi);
330    
331 <  if (isbarrel) {
331 >  if (!isbarrel) {
332      printf("RelPreshowerEnergy: %f\n",RelPreshowerEnergy);
333      }*/
334    

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines