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.3 by fabstoec, Tue Oct 18 11:27:19 2011 UTC vs.
Revision 1.4 by mingyang, Mon Dec 5 00:47:46 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        }
# Line 108 | Line 141 | void MVATools::InitializeMVA(int Variabl
141    
142    fReaderEndcap->BookMVA("BDT method",EndcapWeights);
143    fReaderBarrel->BookMVA("BDT method",BarrelWeights);
144 <
144 >  
145    assert(fReaderEndcap);
146    assert(fReaderBarrel);
147    
148   }
149  
150 < //--------------------------------------------------------------------------------------------------
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, Float_t bdtCutBarrel, Float_t bdtCutEndcap, Bool_t applyEleVeto) {
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 <  
150 > Bool_t MVATools::PassMVASelection(const Photon* p,const Vertex* vtx,const TrackCol* trackCol,const VertexCol* vtxCol,Double_t _tRho,const ElectronCol* els,Float_t bdtCutBarrel, Float_t bdtCutEndcap) {
151    
152    //initilize the bool value
153    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, NULL, NULL, (!applyEleVeto ? els : NULL) );//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, NULL, NULL, (!applyEleVeto ? els : NULL));
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, (!applyEleVeto ? els : NULL));
153  
154  combIso1 = ecalIso3+hcalIso4+trackIso1 - 0.17*_tRho;
155  combIso2 = ecalIso4+hcalIso4+trackIso2 - 0.52*_tRho;
156  
157  RawEnergy = p->SCluster()->RawEnergy();
158  
159  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);
154    
155 <  // check which category it is ...
199 <  _tCat = 1;
200 <  if ( !isbarrel ) _tCat = 3;
201 <  if ( R9 < 0.94 ) _tCat++;
155 >  Float_t photon_bdt =  MVATools::GetMVAbdtValue(p,vtx,trackCol,vtxCol, _tRho,els);
156    
157 <  //Electron Veto (made electron Veto optinal (Fabian) )
158 <  if(dRTrack > cic4_allcuts_temp_sublead[_tCat-1+6*4] || !applyEleVeto ){
159 <    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>bdtCutBarrel){
221 <        PassMVA=kTRUE;  
222 <      }
157 >  if (isbarrel) {
158 >    if(bdt>bdtCutBarrel){
159 >      PassMVA=kTRUE;    
160      }
224    else {
225      if(bdt>bdtCutEndcap){
226        PassMVA=kTRUE;  
227      }
228    }
229
161    }
162 <
162 >  else {
163 >    if(bdt>bdtCutEndcap){
164 >      PassMVA=kTRUE;    
165 >    }
166 >  }
167    return PassMVA;
168   }
169  
# Line 296 | Line 231 | Float_t MVATools::GetMVAbdtValue(const P
231    RawEnergy = p->SCluster()->RawEnergy();
232    
233    dRTrack = PhotonTools::ElectronVetoCiC(p, els);
234 <  
235 <  //compute MVA variables 0
301 <  HoE = p->HadOverEm();
302 <  covIEtaIEta = p->CoviEtaiEta();
234 >
235 >  //mva varialbes v1 and v2
236    tIso1 = (combIso1) *50./p->Et();
237    tIso3 = (trackIso3)*50./p->Et();
238    tIso2 = (combIso2) *50./(p->MomVtx(vtxCol->At(wVtxInd)->Position()).Pt());
306  R9 = p->R9();
307  
308  //newly added MVA variables 1
239    RelIsoEcal=(ecalIso3-0.17*_tRho)/p->Et();
240    RelIsoHcal=(hcalIso4-0.17*_tRho)/p->Et();
241 <  
241 >
242 >  //compute mva variables for v3
243 >  HoE = p->HadOverEm();
244 >  covIEtaIEta = p->CoviEtaiEta();
245 >  tIso1abs = combIso1;
246 >  tIso3abs = trackIso3;
247 >  tIso2abs = combIso2;
248 >  R9 = p->R9();
249 >
250 >  absIsoEcal=(ecalIso3-0.17*_tRho);
251 >  absIsoHcal=(hcalIso4-0.17*_tRho);
252    RelEMax=p->SCluster()->Seed()->EMax()/RawEnergy;
253    RelETop=p->SCluster()->Seed()->ETop()/RawEnergy;
254    RelEBottom=p->SCluster()->Seed()->EBottom()/RawEnergy;
# Line 321 | Line 261 | Float_t MVATools::GetMVAbdtValue(const P
261    RelE2x5Right=p->SCluster()->Seed()->E2x5Right()/RawEnergy;
262    RelE5x5=p->SCluster()->Seed()->E5x5()/RawEnergy;
263    
324  //newly added MVA variables 2
264    EtaWidth=p->SCluster()->EtaWidth();
265    PhiWidth=p->SCluster()->PhiWidth();
266    CoviEtaiPhi=p->SCluster()->Seed()->CoviEtaiPhi();
267    CoviPhiiPhi=p->SCluster()->Seed()->CoviPhiiPhi();
268 +
269    RelPreshowerEnergy=p->SCluster()->PreshowerEnergy()/RawEnergy;
270 +  NVertexes=vtxCol->GetEntries();
271    
272    //spectator variables
273    Pt_MVA=p->Pt();
# Line 345 | Line 286 | Float_t MVATools::GetMVAbdtValue(const P
286  
287    bdt = reader->EvaluateMVA("BDT method");
288  
289 <  /*  printf("HoE: %f\n",HoE);
289 >  printf("HoE: %f\n",HoE);
290    printf("covIEtaIEta: %f\n",covIEtaIEta);
291 <  printf("tIso1: %f\n",tIso1);
292 <  printf("tIso3: %f\n",tIso3);
293 <  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);
291 >  printf("tIso1abs: %f\n",tIso1abs);
292 >  printf("tIso3abs: %f\n",tIso3abs);
293 >  printf("tIso2abs: %f\n",tIso2abs);
294    
295 +  printf("absIsoEcal: %f\n",absIsoEcal);
296 +  printf("absIsoHcal: %f\n",absIsoHcal);
297    printf("RelEMax: %f\n",RelEMax);
298    printf("RelETop: %f\n",RelETop);
299    printf("RelEBottom: %f\n",RelEBottom);
# Line 372 | Line 311 | Float_t MVATools::GetMVAbdtValue(const P
311    printf("CoviEtaiPhi: %f\n",CoviEtaiPhi);
312    printf("CoviPhiiPhi: %f\n",CoviPhiiPhi);
313    
314 <  if (isbarrel) {
314 >  if (!isbarrel) {
315      printf("RelPreshowerEnergy: %f\n",RelPreshowerEnergy);
316 <    }*/
316 >  }
317    
318    return bdt;
319   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines