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

Comparing UserCode/MitPhysics/Utils/src/ElectronIDMVA.cc (file contents):
Revision 1.4 by sixie, Mon Oct 3 16:32:09 2011 UTC vs.
Revision 1.12 by sixie, Sun Apr 15 12:08:19 2012 UTC

# Line 15 | Line 15 | using namespace mithep;
15   //--------------------------------------------------------------------------------------------------
16   ElectronIDMVA::ElectronIDMVA() :
17   fMethodname("BDTG method"),
18 < fIsInitialized(kFALSE)
18 > fIsInitialized(kFALSE),
19 > fMVAType(ElectronIDMVA::kUninitialized),
20 > fUseBinnedVersion(kTRUE),
21 > fNMVABins(0)
22   {
23    // 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) {
30 >  for(UInt_t i=0; i<fTMVAReader.size(); ++i) {
31      if (fTMVAReader[i]) delete fTMVAReader[i];
32    }
33   }
34  
35   //--------------------------------------------------------------------------------------------------
36 + void ElectronIDMVA::Initialize( std::string methodName,
37 +                                std::string weightsfile,
38 +                                ElectronIDMVA::MVAType type)
39 + {
40 +  
41 +  std::vector<std::string> tempWeightFileVector;
42 +  tempWeightFileVector.push_back(weightsfile);
43 +  Initialize(methodName,type,kFALSE,tempWeightFileVector);
44 + }
45 +
46 + //--------------------------------------------------------------------------------------------------
47   void ElectronIDMVA::Initialize( TString methodName,
48                                  TString Subdet0Pt10To20Weights ,
49                                  TString Subdet1Pt10To20Weights ,
# Line 42 | Line 53 | void ElectronIDMVA::Initialize( TString
53                                  TString Subdet2Pt20ToInfWeights,
54                                  ElectronIDMVA::MVAType type) {
55  
56 +  std::vector<std::string> tempWeightFileVector;
57 +  tempWeightFileVector.push_back(std::string(Subdet0Pt10To20Weights.Data()));
58 +  tempWeightFileVector.push_back(std::string(Subdet1Pt10To20Weights.Data()));
59 +  tempWeightFileVector.push_back(std::string(Subdet2Pt10To20Weights.Data()));
60 +  tempWeightFileVector.push_back(std::string(Subdet0Pt20ToInfWeights.Data()));
61 +  tempWeightFileVector.push_back(std::string(Subdet1Pt20ToInfWeights.Data()));
62 +  tempWeightFileVector.push_back(std::string(Subdet2Pt20ToInfWeights.Data()));
63 +  Initialize(std::string(methodName.Data()),type,kTRUE,tempWeightFileVector);
64 +
65 + }
66 +
67 +
68 + //--------------------------------------------------------------------------------------------------
69 + void ElectronIDMVA::Initialize(  std::string methodName,
70 +                                 ElectronIDMVA::MVAType type,
71 +                                 Bool_t useBinnedVersion,
72 +                                 std::vector<std::string> weightsfiles
73 +                                
74 + ) {
75 +
76 +  //clean up first
77 +  for (uint i=0;i<fTMVAReader.size(); ++i) {
78 +    if (fTMVAReader[i]) delete fTMVAReader[i];
79 +  }
80 +  fTMVAReader.clear();
81 +
82 +  //initialize
83    fIsInitialized = kTRUE;
46  
84    fMethodname = methodName;
85 <    
86 <  for(UInt_t i=0; i<6; ++i) {
87 <    if (fTMVAReader[i]) delete fTMVAReader[i];
85 >  fMVAType = type;
86 >  fUseBinnedVersion = useBinnedVersion;
87 >
88 >  //Define expected number of bins
89 >  UInt_t ExpectedNBins = 0;
90 >  if (!fUseBinnedVersion) {
91 >    ExpectedNBins = 1;
92 >  } else if (type == kBaseline
93 >             ||type == kNoIPInfo
94 >             ||type == kWithIPInfo
95 >             ||type == kIDIsoCombined) {
96 >    ExpectedNBins = 6;
97 >  } else if (type == kIDEGamma2012TrigV0 ||
98 >             type == kIDEGamma2012NonTrigV0) {
99 >    ExpectedNBins = 6;
100 >  } else if (type == kIsoRingsV0) {
101 >    ExpectedNBins = 4;
102 >  }
103 >  fNMVABins = ExpectedNBins;
104 >
105 >  //Check number of weight files given
106 >  if (fNMVABins != weightsfiles.size() ) {
107 >    std::cout << "Error: Expected Number of bins = " << fNMVABins << " does not equal to weightsfiles.size() = "
108 >              << weightsfiles.size() << std::endl;
109 >    assert(fNMVABins == weightsfiles.size());
110 >  }
111 >
112  
113 <    fTMVAReader[i] = new TMVA::Reader( "!Color:!Silent:Error" );  
114 <    fTMVAReader[i]->SetVerbose(kTRUE);
113 >  for(UInt_t i=0; i<fNMVABins; ++i) {
114 >    TMVA::Reader *tmpTMVAReader = new TMVA::Reader( "!Color:!Silent:Error" );  
115 >    tmpTMVAReader->SetVerbose(kTRUE);
116  
117      if (type == kBaseline) {
118 <      fTMVAReader[i]->AddVariable( "SigmaIEtaIEta",         &fMVAVar_EleSigmaIEtaIEta         );
119 <      fTMVAReader[i]->AddVariable( "DEtaIn",                &fMVAVar_EleDEtaIn                );
120 <      fTMVAReader[i]->AddVariable( "DPhiIn",                &fMVAVar_EleDPhiIn                );
121 <      fTMVAReader[i]->AddVariable( "FBrem",                 &fMVAVar_EleFBrem                 );
122 <      fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi",         &fMVAVar_EleSigmaIPhiIPhi         );
123 <      fTMVAReader[i]->AddVariable( "NBrem",                 &fMVAVar_EleNBrem                 );
124 <      fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );      
118 >      tmpTMVAReader->AddVariable( "SigmaIEtaIEta",         &fMVAVar_EleSigmaIEtaIEta            );
119 >      tmpTMVAReader->AddVariable( "DEtaIn",                &fMVAVar_EleDEtaIn                   );
120 >      tmpTMVAReader->AddVariable( "DPhiIn",                &fMVAVar_EleDPhiIn                   );
121 >      tmpTMVAReader->AddVariable( "FBrem",                 &fMVAVar_EleFBrem                    );
122 >      tmpTMVAReader->AddVariable( "SigmaIPhiIPhi",         &fMVAVar_EleSigmaIPhiIPhi            );
123 >      tmpTMVAReader->AddVariable( "NBrem",                 &fMVAVar_EleNBrem                    );
124 >      tmpTMVAReader->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP    );      
125 >    }    
126 >    if (type == kNoIPInfo) {
127 >      tmpTMVAReader->AddVariable( "SigmaIEtaIEta",         &fMVAVar_EleSigmaIEtaIEta            );
128 >      tmpTMVAReader->AddVariable( "DEtaIn",                &fMVAVar_EleDEtaIn                   );
129 >      tmpTMVAReader->AddVariable( "DPhiIn",                &fMVAVar_EleDPhiIn                   );
130 >      tmpTMVAReader->AddVariable( "FBrem",                 &fMVAVar_EleFBrem                    );
131 >      tmpTMVAReader->AddVariable( "EOverP",                &fMVAVar_EleEOverP                   );
132 >      tmpTMVAReader->AddVariable( "ESeedClusterOverPout",  &fMVAVar_EleESeedClusterOverPout     );
133 >      tmpTMVAReader->AddVariable( "SigmaIPhiIPhi",         &fMVAVar_EleSigmaIPhiIPhi            );
134 >      tmpTMVAReader->AddVariable( "NBrem",                 &fMVAVar_EleNBrem                    );
135 >      tmpTMVAReader->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP    );      
136 >      tmpTMVAReader->AddVariable( "ESeedClusterOverPIn",   &fMVAVar_EleESeedClusterOverPIn      );
137 >    }
138 >    if (type == kWithIPInfo) {
139 >      tmpTMVAReader->AddVariable( "SigmaIEtaIEta",         &fMVAVar_EleSigmaIEtaIEta            );
140 >      tmpTMVAReader->AddVariable( "DEtaIn",                &fMVAVar_EleDEtaIn                   );
141 >      tmpTMVAReader->AddVariable( "DPhiIn",                &fMVAVar_EleDPhiIn                   );
142 >      tmpTMVAReader->AddVariable( "D0",                    &fMVAVar_EleD0                       );
143 >      tmpTMVAReader->AddVariable( "FBrem",                 &fMVAVar_EleFBrem                    );
144 >      tmpTMVAReader->AddVariable( "EOverP",                &fMVAVar_EleEOverP                   );
145 >      tmpTMVAReader->AddVariable( "ESeedClusterOverPout",  &fMVAVar_EleESeedClusterOverPout     );
146 >      tmpTMVAReader->AddVariable( "SigmaIPhiIPhi",         &fMVAVar_EleSigmaIPhiIPhi            );
147 >      tmpTMVAReader->AddVariable( "NBrem",                 &fMVAVar_EleNBrem                    );
148 >      tmpTMVAReader->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP    );      
149 >      tmpTMVAReader->AddVariable( "ESeedClusterOverPIn",   &fMVAVar_EleESeedClusterOverPIn      );
150 >      tmpTMVAReader->AddVariable( "IP3d",                  &fMVAVar_EleIP3d                     );
151 >      tmpTMVAReader->AddVariable( "IP3dSig",               &fMVAVar_EleIP3dSig                  );
152 >    }
153 >    if (type == kIDIsoCombined) {
154 >      tmpTMVAReader->AddVariable( "SigmaIEtaIEta",         &fMVAVar_EleSigmaIEtaIEta            );
155 >      tmpTMVAReader->AddVariable( "DEtaIn",                &fMVAVar_EleDEtaIn                   );
156 >      tmpTMVAReader->AddVariable( "DPhiIn",                &fMVAVar_EleDPhiIn                   );
157 >      tmpTMVAReader->AddVariable( "D0",                    &fMVAVar_EleD0                       );
158 >      tmpTMVAReader->AddVariable( "FBrem",                 &fMVAVar_EleFBrem                    );
159 >      tmpTMVAReader->AddVariable( "EOverP",                &fMVAVar_EleEOverP                   );
160 >      tmpTMVAReader->AddVariable( "ESeedClusterOverPout",  &fMVAVar_EleESeedClusterOverPout     );
161 >      tmpTMVAReader->AddVariable( "SigmaIPhiIPhi",         &fMVAVar_EleSigmaIPhiIPhi            );
162 >      tmpTMVAReader->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP    );      
163 >      tmpTMVAReader->AddVariable( "ESeedClusterOverPIn",   &fMVAVar_EleESeedClusterOverPIn      );
164 >      tmpTMVAReader->AddVariable( "IP3d",                  &fMVAVar_EleIP3d                     );
165 >      tmpTMVAReader->AddVariable( "IP3dSig",               &fMVAVar_EleIP3dSig                  );
166 >
167 >      tmpTMVAReader->AddVariable( "GsfTrackChi2OverNdof",  &fMVAVar_EleGsfTrackChi2OverNdof     );
168 >      tmpTMVAReader->AddVariable( "dEtaCalo",              &fMVAVar_EledEtaCalo                 );
169 >      tmpTMVAReader->AddVariable( "dPhiCalo",              &fMVAVar_EledPhiCalo                 );
170 >      tmpTMVAReader->AddVariable( "R9",                    &fMVAVar_EleR9                       );
171 >      tmpTMVAReader->AddVariable( "SCEtaWidth",            &fMVAVar_EleSCEtaWidth               );
172 >      tmpTMVAReader->AddVariable( "SCPhiWidth",            &fMVAVar_EleSCPhiWidth               );
173 >      tmpTMVAReader->AddVariable( "CovIEtaIPhi",           &fMVAVar_EleCovIEtaIPhi              );
174 >      if (i == 2 || i == 5) {
175 >        tmpTMVAReader->AddVariable( "PreShowerOverRaw",      &fMVAVar_ElePreShowerOverRaw       );
176 >      }
177 >      tmpTMVAReader->AddVariable( "ChargedIso03",          &fMVAVar_EleChargedIso03OverPt       );
178 >      tmpTMVAReader->AddVariable( "NeutralHadronIso03",    &fMVAVar_EleNeutralHadronIso03OverPt );
179 >      tmpTMVAReader->AddVariable( "GammaIso03",            &fMVAVar_EleGammaIso03OverPt         );
180 >      tmpTMVAReader->AddVariable( "ChargedIso04",          &fMVAVar_EleChargedIso04OverPt       );
181 >      tmpTMVAReader->AddVariable( "NeutralHadronIso04",    &fMVAVar_EleNeutralHadronIso04OverPt );
182 >      tmpTMVAReader->AddVariable( "GammaIso04",            &fMVAVar_EleGammaIso04OverPt         );
183 >
184 >    }
185 >
186 >    if (type == kIDEGamma2012TrigV0 || type == kIDEGamma2012NonTrigV0 ) {
187 >      // Pure tracking variables
188 >      tmpTMVAReader->AddVariable("fbrem",           &fMVAVar_EleFBrem);
189 >      tmpTMVAReader->AddVariable("kfchi2",          &fMVAVar_EleKFTrkChiSqr);
190 >      tmpTMVAReader->AddVariable("kfhits",          &fMVAVar_EleKFTrkNHits);  //Don't have this in BAMBU
191 >      tmpTMVAReader->AddVariable("kfhitsall",       &fMVAVar_EleKFTrkNHits);
192 >      tmpTMVAReader->AddVariable("gsfchi2",         &fMVAVar_EleGsfTrackChi2OverNdof);
193 >      tmpTMVAReader->AddVariable("deta",            &fMVAVar_EleDEtaIn);
194 >      tmpTMVAReader->AddVariable("dphi",            &fMVAVar_EleDPhiIn);
195 >      tmpTMVAReader->AddVariable("detacalo",        &fMVAVar_EledEtaCalo);
196 >      tmpTMVAReader->AddVariable("see",             &fMVAVar_EleSigmaIEtaIEta);
197 >      tmpTMVAReader->AddVariable("spp",             &fMVAVar_EleSigmaIPhiIPhi);
198 >      tmpTMVAReader->AddVariable("etawidth",        &fMVAVar_EleSCEtaWidth);
199 >      tmpTMVAReader->AddVariable("phiwidth",        &fMVAVar_EleSCPhiWidth);
200 >      tmpTMVAReader->AddVariable("e1x5e5x5",        &fMVAVar_EleE1x5OverE5x5);
201 >      tmpTMVAReader->AddVariable("R9",              &fMVAVar_EleR9);
202 >      tmpTMVAReader->AddVariable("HoE",             &fMVAVar_EleHoverE);
203 >      tmpTMVAReader->AddVariable("EoP",             &fMVAVar_EleEOverP);
204 >      tmpTMVAReader->AddVariable("IoEmIoP",         &fMVAVar_EleOneOverEMinusOneOverP);
205 >      tmpTMVAReader->AddVariable("eleEoPout",       &fMVAVar_EleEEleClusterOverPout);
206 >      tmpTMVAReader->AddVariable("EoPout",          &fMVAVar_EleESeedClusterOverPout); //we have this only in BAMBU
207 >      tmpTMVAReader->AddVariable("PreShowerOverRaw",&fMVAVar_ElePreShowerOverRaw);
208 >    
209 >      tmpTMVAReader->AddSpectator("eta",            &fMVAVar_EleEta);
210 >      tmpTMVAReader->AddSpectator("pt",             &fMVAVar_ElePt);
211      }
212      
213 <    if (type == kV1) {
214 <      fTMVAReader[i]->AddVariable( "SigmaIEtaIEta",         &fMVAVar_EleSigmaIEtaIEta         );
215 <      fTMVAReader[i]->AddVariable( "DEtaIn",                &fMVAVar_EleDEtaIn                );
216 <      fTMVAReader[i]->AddVariable( "DPhiIn",                &fMVAVar_EleDPhiIn                );
217 <      fTMVAReader[i]->AddVariable( "HoverE",                &fMVAVar_EleHoverE                );
218 <      fTMVAReader[i]->AddVariable( "FBrem",                 &fMVAVar_EleFBrem                 );
219 <      fTMVAReader[i]->AddVariable( "EOverP",                &fMVAVar_EleEOverP                );
220 <      fTMVAReader[i]->AddVariable( "ESeedClusterOverPout",  &fMVAVar_EleESeedClusterOverPout  );
221 <      fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi",         &fMVAVar_EleSigmaIPhiIPhi         );
222 <      fTMVAReader[i]->AddVariable( "NBrem",                 &fMVAVar_EleNBrem                 );
223 <      fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );      
224 <      fTMVAReader[i]->AddVariable( "ESeedClusterOverPIn",   &fMVAVar_EleESeedClusterOverPIn   );
225 <    }
226 <    if (type == kV2) {
227 <      fTMVAReader[i]->AddVariable( "SigmaIEtaIEta",         &fMVAVar_EleSigmaIEtaIEta         );
228 <      fTMVAReader[i]->AddVariable( "DEtaIn",                &fMVAVar_EleDEtaIn                );
229 <      fTMVAReader[i]->AddVariable( "DPhiIn",                &fMVAVar_EleDPhiIn                );
230 <      fTMVAReader[i]->AddVariable( "HoverE",                &fMVAVar_EleHoverE                );
231 <      fTMVAReader[i]->AddVariable( "D0",                    &fMVAVar_EleD0                    );
232 <      fTMVAReader[i]->AddVariable( "FBrem",                 &fMVAVar_EleFBrem                 );
233 <      fTMVAReader[i]->AddVariable( "EOverP",                &fMVAVar_EleEOverP                );
234 <      fTMVAReader[i]->AddVariable( "ESeedClusterOverPout",  &fMVAVar_EleESeedClusterOverPout  );
235 <      fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi",         &fMVAVar_EleSigmaIPhiIPhi         );
236 <      fTMVAReader[i]->AddVariable( "NBrem",                 &fMVAVar_EleNBrem                 );
237 <      fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );      
238 <      fTMVAReader[i]->AddVariable( "ESeedClusterOverPIn",   &fMVAVar_EleESeedClusterOverPIn   );
239 <      fTMVAReader[i]->AddVariable( "IP3d",                  &fMVAVar_EleIP3d                  );
240 <      fTMVAReader[i]->AddVariable( "IP3dSig",               &fMVAVar_EleIP3dSig               );
241 <    }
94 <
95 <    if (i==0) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt10To20Weights );
96 <    if (i==1) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt10To20Weights );
97 <    if (i==2) fTMVAReader[i]->BookMVA(fMethodname , Subdet2Pt10To20Weights );
98 <    if (i==3) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt20ToInfWeights );
99 <    if (i==4) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt20ToInfWeights );
100 <    if (i==5) fTMVAReader[i]->BookMVA(fMethodname , Subdet2Pt20ToInfWeights );
213 >    if (type == kIsoRingsV0) {
214 >      tmpTMVAReader->AddVariable( "ChargedIso_DR0p0To0p1",         &fMVAVar_ChargedIso_DR0p0To0p1        );
215 >      tmpTMVAReader->AddVariable( "ChargedIso_DR0p1To0p2",         &fMVAVar_ChargedIso_DR0p1To0p2        );
216 >      tmpTMVAReader->AddVariable( "ChargedIso_DR0p2To0p3",         &fMVAVar_ChargedIso_DR0p2To0p3        );
217 >      tmpTMVAReader->AddVariable( "ChargedIso_DR0p3To0p4",         &fMVAVar_ChargedIso_DR0p3To0p4        );
218 >      tmpTMVAReader->AddVariable( "ChargedIso_DR0p4To0p5",         &fMVAVar_ChargedIso_DR0p4To0p5        );
219 >      tmpTMVAReader->AddVariable( "ChargedIso_DR0p5To0p7",         &fMVAVar_ChargedIso_DR0p4To0p5        );
220 >      tmpTMVAReader->AddVariable( "GammaIso_DR0p0To0p1",           &fMVAVar_GammaIso_DR0p0To0p1          );
221 >      tmpTMVAReader->AddVariable( "GammaIso_DR0p1To0p2",           &fMVAVar_GammaIso_DR0p1To0p2          );
222 >      tmpTMVAReader->AddVariable( "GammaIso_DR0p2To0p3",           &fMVAVar_GammaIso_DR0p2To0p3          );
223 >      tmpTMVAReader->AddVariable( "GammaIso_DR0p3To0p4",           &fMVAVar_GammaIso_DR0p3To0p4          );
224 >      tmpTMVAReader->AddVariable( "GammaIso_DR0p4To0p5",           &fMVAVar_GammaIso_DR0p4To0p5          );
225 >      tmpTMVAReader->AddVariable( "GammaIso_DR0p5To0p7",           &fMVAVar_GammaIso_DR0p4To0p5          );
226 >      tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p0To0p1",   &fMVAVar_NeutralHadronIso_DR0p0To0p1  );
227 >      tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p1To0p2",   &fMVAVar_NeutralHadronIso_DR0p1To0p2  );
228 >      tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p2To0p3",   &fMVAVar_NeutralHadronIso_DR0p2To0p3  );
229 >      tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p3To0p4",   &fMVAVar_NeutralHadronIso_DR0p3To0p4  );
230 >      tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p4To0p5",   &fMVAVar_NeutralHadronIso_DR0p4To0p5  );
231 >      tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p5To0p7",   &fMVAVar_NeutralHadronIso_DR0p4To0p5  );
232 >      tmpTMVAReader->AddSpectator( "eta",   &fMVAVar_EleEta );
233 >      tmpTMVAReader->AddSpectator( "pt" ,   &fMVAVar_ElePt  );
234 >    }
235 >
236 >    tmpTMVAReader->BookMVA(fMethodname , weightsfiles[i] );
237 >    std::cout << "MVABin " << i << " : MethodName = " << fMethodname
238 >              << " , type == " << type << " , "
239 >              << "Load weights file : " << weightsfiles[i]
240 >              << std::endl;
241 >    fTMVAReader.push_back(tmpTMVAReader);
242  
243    }
244 +  std::cout << "Electron ID MVA Completed\n";
245 + }
246  
104  std::cout << "Electron ID MVA Initialization\n";
105  std::cout << "MethodName : " << fMethodname << " , type == " << type << std::endl;
106  std::cout << "Load weights file : " << Subdet0Pt10To20Weights << std::endl;
107  std::cout << "Load weights file : " << Subdet1Pt10To20Weights << std::endl;
108  std::cout << "Load weights file : " << Subdet2Pt10To20Weights << std::endl;
109  std::cout << "Load weights file : " << Subdet0Pt20ToInfWeights << std::endl;
110  std::cout << "Load weights file : " << Subdet1Pt20ToInfWeights << std::endl;
111  std::cout << "Load weights file : " << Subdet2Pt20ToInfWeights << std::endl;
247  
248 + //--------------------------------------------------------------------------------------------------
249 + UInt_t ElectronIDMVA::GetMVABin( double eta, double pt) const {
250 +  
251 +    //Default is to return the first bin
252 +    uint bin = 0;
253 +
254 +    if (fMVAType == ElectronIDMVA::kBaseline
255 +        ||fMVAType == ElectronIDMVA::kNoIPInfo
256 +        ||fMVAType == ElectronIDMVA::kWithIPInfo
257 +        ||fMVAType == ElectronIDMVA::kIDIsoCombined) {
258 +      if (pt < 20 && fabs(eta) < 1.0) bin = 0;
259 +      if (pt < 20 && fabs(eta) >= 1.0 && fabs(eta) < 1.479) bin = 1;
260 +      if (pt < 20 && fabs(eta) >= 1.479) bin = 2;
261 +      if (pt >= 20 && fabs(eta) < 1.0) bin = 3;
262 +      if (pt >= 20 && fabs(eta) >= 1.0 && fabs(eta) < 1.479) bin = 4;
263 +      if (pt >= 20 && fabs(eta) >= 1.479) bin = 5;
264 +    }
265 +
266 +    if (fMVAType == ElectronIDMVA::kIsoRingsV0) {
267 +      if (pt < 10 && fabs(eta) < 1.479) bin = 0;
268 +      if (pt < 10 && fabs(eta) >= 1.479) bin = 1;
269 +      if (pt >= 10 && fabs(eta) < 1.479) bin = 2;
270 +      if (pt >= 10 && fabs(eta) >= 1.479) bin = 3;
271 +    }
272 +
273 +    if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0 ||
274 +        fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0 ) {
275 +      bin = 0;
276 +      if (pt < 10 && fabs(eta) < 0.8) bin = 0;
277 +      if (pt < 10 && fabs(eta) >= 0.8 && fabs(eta) < 1.479 ) bin = 1;
278 +      if (pt < 10 && fabs(eta) >= 1.479) bin = 2;
279 +      if (pt >= 10 && fabs(eta) < 0.8) bin = 3;
280 +      if (pt >= 10 && fabs(eta) >= 0.8 && fabs(eta) < 1.479 ) bin = 4;
281 +      if (pt >= 10 && fabs(eta) >= 1.479) bin = 5;
282 +    }
283 +
284 +    return bin;
285   }
286  
287 +
288 +
289   //--------------------------------------------------------------------------------------------------
290 < Double_t ElectronIDMVA::MVAValue(Double_t ElePt , Double_t EleSCEta,
290 > Double_t ElectronIDMVA::MVAValue(Double_t ElePt , Double_t EleEta,
291                                   Double_t EleSigmaIEtaIEta,
292                                   Double_t EleDEtaIn,
293                                   Double_t EleDPhiIn,
# Line 137 | Line 311 | Double_t ElectronIDMVA::MVAValue(Double_
311    }
312  
313    Int_t subdet = 0;
314 <  if (fabs(EleSCEta) < 1.0) subdet = 0;
315 <  else if (fabs(EleSCEta) < 1.479) subdet = 1;
314 >  if (fabs(EleEta) < 1.0) subdet = 0;
315 >  else if (fabs(EleEta) < 1.479) subdet = 1;
316    else subdet = 2;
317    Int_t ptBin = 0;
318    if (ElePt > 20.0) ptBin = 1;
# Line 177 | Line 351 | Double_t ElectronIDMVA::MVAValue(Double_
351    return mva;
352   }
353  
354 + //--------------------------------------------------------------------------------------------------
355 + Double_t ElectronIDMVA::MVAValue(Double_t ElePt , Double_t EleEta, Double_t PileupEnergyDensity,
356 +                                 Double_t EleSigmaIEtaIEta,
357 +                                 Double_t EleDEtaIn,
358 +                                 Double_t EleDPhiIn,
359 +                                 Double_t EleHoverE,
360 +                                 Double_t EleD0,
361 +                                 Double_t EleDZ,
362 +                                 Double_t EleFBrem,
363 +                                 Double_t EleEOverP,
364 +                                 Double_t EleESeedClusterOverPout,
365 +                                 Double_t EleSigmaIPhiIPhi,
366 +                                 Double_t EleNBrem,
367 +                                 Double_t EleOneOverEMinusOneOverP,
368 +                                 Double_t EleESeedClusterOverPIn,
369 +                                 Double_t EleIP3d,
370 +                                 Double_t EleIP3dSig,
371 +                                 Double_t EleGsfTrackChi2OverNdof,
372 +                                 Double_t EledEtaCalo,
373 +                                 Double_t EledPhiCalo,
374 +                                 Double_t EleR9,
375 +                                 Double_t EleSCEtaWidth,
376 +                                 Double_t EleSCPhiWidth,
377 +                                 Double_t EleCovIEtaIPhi,
378 +                                 Double_t ElePreShowerOverRaw,
379 +                                 Double_t EleChargedIso03,
380 +                                 Double_t EleNeutralHadronIso03,
381 +                                 Double_t EleGammaIso03,
382 +                                 Double_t EleChargedIso04,
383 +                                 Double_t EleNeutralHadronIso04,
384 +                                 Double_t EleGammaIso04,
385 +                                 Bool_t printDebug
386 +  ) {
387 +  
388 +  if (!fIsInitialized) {
389 +    std::cout << "Error: ElectronIDMVA not properly initialized.\n";
390 +    return -9999;
391 +  }
392 +
393 +  Double_t Rho = 0;
394 +  if (!(TMath::IsNaN(PileupEnergyDensity) || isinf(PileupEnergyDensity))) Rho = PileupEnergyDensity;
395 +
396 +  Int_t subdet = 0;
397 +  if (fabs(EleEta) < 1.0) subdet = 0;
398 +  else if (fabs(EleEta) < 1.479) subdet = 1;
399 +  else subdet = 2;
400 +  Int_t ptBin = 0;
401 +  if (ElePt > 20.0) ptBin = 1;
402 +  
403 +  //set all input variables
404 +  fMVAVar_EleSigmaIEtaIEta = EleSigmaIEtaIEta;
405 +  fMVAVar_EleDEtaIn = EleDEtaIn;
406 +  fMVAVar_EleDPhiIn = EleDPhiIn;
407 +  fMVAVar_EleHoverE = EleHoverE;
408 +  fMVAVar_EleD0 = EleD0;
409 +  fMVAVar_EleDZ = EleDZ;
410 +  fMVAVar_EleFBrem = EleFBrem;
411 +  fMVAVar_EleEOverP = EleEOverP;
412 +  fMVAVar_EleESeedClusterOverPout = EleESeedClusterOverPout;
413 +  fMVAVar_EleSigmaIPhiIPhi = EleSigmaIPhiIPhi;
414 +  fMVAVar_EleNBrem = EleNBrem;
415 +  fMVAVar_EleOneOverEMinusOneOverP = EleOneOverEMinusOneOverP;
416 +  fMVAVar_EleESeedClusterOverPIn = EleESeedClusterOverPIn;
417 +  fMVAVar_EleIP3d = EleIP3d;
418 +  fMVAVar_EleIP3dSig = EleIP3dSig;
419 +  fMVAVar_EleGsfTrackChi2OverNdof = EleGsfTrackChi2OverNdof;
420 +  fMVAVar_EledEtaCalo = EledEtaCalo;
421 +  fMVAVar_EledPhiCalo = EledPhiCalo;
422 +  fMVAVar_EleR9 = EleR9;
423 +  fMVAVar_EleSCEtaWidth = EleSCEtaWidth;
424 +  fMVAVar_EleSCPhiWidth = EleSCPhiWidth;
425 +  fMVAVar_EleCovIEtaIPhi = EleCovIEtaIPhi;
426 +  fMVAVar_ElePreShowerOverRaw = ElePreShowerOverRaw;
427 +  fMVAVar_EleChargedIso03OverPt
428 +    = (EleChargedIso03
429 +       - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleChargedIso03, EleEta)) / ElePt;
430 +  fMVAVar_EleNeutralHadronIso03OverPt
431 +    = (EleNeutralHadronIso03
432 +       - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso03, EleEta)
433 +       + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso007,EleEta)) / ElePt;
434 +  fMVAVar_EleGammaIso03OverPt
435 +    = (EleGammaIso03
436 +       - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso03, EleEta)
437 +       + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoVetoEtaStrip03,EleEta))/ElePt;
438 +  fMVAVar_EleChargedIso04OverPt
439 +    = (EleChargedIso04
440 +       - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleChargedIso04, EleEta))/ElePt;
441 +  fMVAVar_EleNeutralHadronIso04OverPt
442 +    = (EleNeutralHadronIso04
443 +       - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso04, EleEta)
444 +       + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso007,EleEta))/ElePt;
445 +  fMVAVar_EleGammaIso04OverPt
446 +    = (EleGammaIso04
447 +       - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso04, EleEta)
448 +       + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoVetoEtaStrip04,EleEta))/ElePt;
449 +
450 +
451 +
452 +
453 +  Double_t mva = -9999;  
454 +  TMVA::Reader *reader = 0;
455 +  Int_t MVABin = -1;
456 +  if (subdet == 0 && ptBin == 0) MVABin = 0;
457 +  if (subdet == 1 && ptBin == 0) MVABin = 1;
458 +  if (subdet == 2 && ptBin == 0) MVABin = 2;
459 +  if (subdet == 0 && ptBin == 1) MVABin = 3;
460 +  if (subdet == 1 && ptBin == 1) MVABin = 4;
461 +  if (subdet == 2 && ptBin == 1) MVABin = 5;
462 +  assert(MVABin >= 0 && MVABin <= 5);
463 +  reader = fTMVAReader[MVABin];
464 +                                                
465 +  mva = reader->EvaluateMVA( fMethodname );
466 +
467 +  if (printDebug == kTRUE) {
468 +    std::cout << "Debug Electron MVA: "
469 +         << ElePt << " " << EleEta << " " << " --> MVABin " << MVABin << " : "    
470 +         << fMVAVar_EleSigmaIEtaIEta << " "
471 +         << fMVAVar_EleDEtaIn << " "
472 +         << fMVAVar_EleDPhiIn << " "
473 +         << fMVAVar_EleHoverE << " "
474 +         << fMVAVar_EleD0 << " "
475 +         << fMVAVar_EleDZ << " "
476 +         << fMVAVar_EleFBrem << " "
477 +         << fMVAVar_EleEOverP << " "
478 +         << fMVAVar_EleESeedClusterOverPout << " "
479 +         << fMVAVar_EleSigmaIPhiIPhi << " "
480 +         << fMVAVar_EleNBrem << " "
481 +         << fMVAVar_EleOneOverEMinusOneOverP << " "
482 +         << fMVAVar_EleESeedClusterOverPIn << " "
483 +         << fMVAVar_EleIP3d << " "
484 +         << fMVAVar_EleIP3dSig << " "
485 +         << fMVAVar_EleGsfTrackChi2OverNdof << " "
486 +         << fMVAVar_EledEtaCalo << " "
487 +         << fMVAVar_EledPhiCalo << " "
488 +         << fMVAVar_EleR9 << " "
489 +         << fMVAVar_EleSCEtaWidth << " "
490 +         << fMVAVar_EleSCPhiWidth << " "
491 +         << fMVAVar_EleCovIEtaIPhi << " "
492 +         << fMVAVar_ElePreShowerOverRaw << " "
493 +         << fMVAVar_EleChargedIso03OverPt  << " "
494 +         << fMVAVar_EleNeutralHadronIso03OverPt  << " "
495 +         << fMVAVar_EleGammaIso03OverPt  << " "
496 +         << fMVAVar_EleChargedIso04OverPt  << " "
497 +         << fMVAVar_EleNeutralHadronIso04OverPt  << " "
498 +         << fMVAVar_EleGammaIso04OverPt  << " "
499 +         << " === : === "
500 +         << mva
501 +         << std::endl;
502 +  }
503 +
504 +  return mva;
505 + }
506  
507  
508   //--------------------------------------------------------------------------------------------------
509 < Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex) {
509 > Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex,
510 >                                 const PFCandidateCol *PFCands,
511 >                                 const PileupEnergyDensityCol *PileupEnergyDensity,
512 >                                 Double_t intRadius,
513 >                                 Bool_t printDebug) {
514    
515    if (!fIsInitialized) {
516      std::cout << "Error: ElectronIDMVA not properly initialized.\n";
# Line 193 | Line 523 | Double_t ElectronIDMVA::MVAValue(const E
523    else subdet = 2;
524    Int_t ptBin = 0;
525    if (ele->Pt() > 20.0) ptBin = 1;
526 +
527 +  Double_t Rho = 0;
528 +  if (!(TMath::IsNaN(PileupEnergyDensity->At(0)->Rho()) || isinf(PileupEnergyDensity->At(0)->Rho()))) Rho = PileupEnergyDensity->At(0)->Rho();
529 +
530 +  //set all input variables
531 +  fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
532 +  fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
533 +  fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
534 +  fMVAVar_EleHoverE = ele->HadronicOverEm();
535 +  fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
536 +  fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
537 +  fMVAVar_EleFBrem = ele->FBrem();
538 +  fMVAVar_EleEOverP = ele->ESuperClusterOverP();
539 +  fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
540 +  if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
541 +  else fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
542 +  fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
543 +  fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->SCluster()->Energy())) - 1.0 / ele->BestTrk()->P();
544 +  fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
545 +  fMVAVar_EleIP3d = ele->Ip3dPV();
546 +  fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
547 +  fMVAVar_EleGsfTrackChi2OverNdof = ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof();
548 +  fMVAVar_EledEtaCalo =  ele->DeltaEtaSeedClusterTrackAtCalo();
549 +  fMVAVar_EledPhiCalo = ele->DeltaPhiSeedClusterTrackAtCalo();
550 +  fMVAVar_EleR9 = ele->SCluster()->R9();
551 +  fMVAVar_EleSCEtaWidth = ele->SCluster()->EtaWidth();
552 +  fMVAVar_EleSCPhiWidth = ele->SCluster()->PhiWidth();
553 +  fMVAVar_EleCovIEtaIPhi = ele->SCluster()->Seed()->CoviEtaiPhi();
554 +  fMVAVar_ElePreShowerOverRaw = ele->SCluster()->PreshowerEnergy() / ele->SCluster()->RawEnergy();
555 +  fMVAVar_EleChargedIso03OverPt
556 +    = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 99999, 0.3, intRadius)
557 +       - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleChargedIso03, ele->SCluster()->Eta())) / ele->Pt();
558 +  fMVAVar_EleNeutralHadronIso03OverPt
559 +    = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 0.5, 0.3, intRadius, PFCandidate::eNeutralHadron)
560 +       - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso03, ele->SCluster()->Eta())
561 +       + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso007,ele->SCluster()->Eta())) / ele->Pt();
562 +  fMVAVar_EleGammaIso03OverPt
563 +    = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 0.5, 0.3, intRadius, PFCandidate::eGamma)
564 +       - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso03, ele->SCluster()->Eta())
565 +       + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoVetoEtaStrip03,ele->SCluster()->Eta())) / ele->Pt();
566 +  fMVAVar_EleChargedIso04OverPt
567 +    = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 99999, 0.4, intRadius)
568 +       - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleChargedIso04, ele->SCluster()->Eta())) / ele->Pt();
569 +  fMVAVar_EleNeutralHadronIso04OverPt
570 +    = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 0.5, 0.4, intRadius, PFCandidate::eNeutralHadron)
571 +       - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso04, ele->SCluster()->Eta())
572 +       + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso007,ele->SCluster()->Eta())) / ele->Pt() ;
573 +  fMVAVar_EleGammaIso04OverPt
574 +    = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 0.5, 0.4, intRadius, PFCandidate::eGamma)
575 +       - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso04, ele->SCluster()->Eta())
576 +       + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoVetoEtaStrip04,ele->SCluster()->Eta())) / ele->Pt();
577    
578 +  //Additional vars
579 +  fMVAVar_EleEEleClusterOverPout = 0;
580 +  fMVAVar_EleKFTrkChiSqr = ele->TrackerTrk()->RChi2();
581 +  fMVAVar_EleKFTrkNHits = ele->TrackerTrk()->NHits();
582 +  fMVAVar_EleE1x5OverE5x5 = ele->SCluster()->Seed()->E1x5() / ele->SCluster()->Seed()->E5x5();
583 +
584 +
585 +
586 +
587 +  Double_t mva = -9999;  
588 +  TMVA::Reader *reader = 0;
589 +  Int_t MVABin = -1;
590 +  if (subdet == 0 && ptBin == 0) MVABin = 0;
591 +  if (subdet == 1 && ptBin == 0) MVABin = 1;
592 +  if (subdet == 2 && ptBin == 0) MVABin = 2;
593 +  if (subdet == 0 && ptBin == 1) MVABin = 3;
594 +  if (subdet == 1 && ptBin == 1) MVABin = 4;
595 +  if (subdet == 2 && ptBin == 1) MVABin = 5;
596 +  assert(MVABin >= 0 && MVABin <= 5);
597 +  reader = fTMVAReader[MVABin];
598 +                                                
599 +  mva = reader->EvaluateMVA( fMethodname );
600 +
601 +  if (printDebug == kTRUE) {
602 + //     std::cout << "Debug Electron MVA: "
603 + //               << ele->Pt() << " " << ele->Eta() << " " << ele->Phi() << " : "
604 + //               << ele->Pt() << " " << ele->SCluster()->AbsEta() << " --> MVABin " << MVABin << " : "    
605 + //               << fMVAVar_EleSigmaIEtaIEta << " "
606 + //               << fMVAVar_EleDEtaIn << " "
607 + //               << fMVAVar_EleDPhiIn << " "
608 + //               << fMVAVar_EleHoverE << " "
609 + //               << fMVAVar_EleD0 << " "
610 + //               << fMVAVar_EleDZ << " "
611 + //               << fMVAVar_EleFBrem << " "
612 + //               << fMVAVar_EleEOverP << " "
613 + //               << fMVAVar_EleESeedClusterOverPout << " "
614 + //               << fMVAVar_EleSigmaIPhiIPhi << " "
615 + //               << fMVAVar_EleNBrem << " "
616 + //               << fMVAVar_EleOneOverEMinusOneOverP << " "
617 + //               << fMVAVar_EleESeedClusterOverPIn << " "
618 + //               << fMVAVar_EleIP3d << " "
619 + //               << fMVAVar_EleIP3dSig << " "
620 + //               << fMVAVar_EleGsfTrackChi2OverNdof << " "
621 + //               << fMVAVar_EledEtaCalo << " "
622 + //               << fMVAVar_EledPhiCalo << " "
623 + //               << fMVAVar_EleR9 << " "
624 + //               << fMVAVar_EleSCEtaWidth << " "
625 + //               << fMVAVar_EleSCPhiWidth << " "
626 + //               << fMVAVar_EleCovIEtaIPhi << " "
627 + //               << fMVAVar_ElePreShowerOverRaw << " "
628 + //               << fMVAVar_EleChargedIso03OverPt  << " "
629 + //               << fMVAVar_EleNeutralHadronIso03OverPt  << " "
630 + //               << fMVAVar_EleGammaIso03OverPt  << " "
631 + //               << fMVAVar_EleChargedIso04OverPt  << " "
632 + //               << fMVAVar_EleNeutralHadronIso04OverPt  << " "
633 + //               << fMVAVar_EleGammaIso04OverPt  << " "
634 + //               << " === : === "
635 + //               << mva << " "    
636 + //               << std::endl;
637 +    std::cout << "Debug Electron MVA: "
638 +              << ele->Pt() << " " << ele->Eta() << " " << ele->Phi() << " : "
639 +              << ele->Pt() << " " << ele->SCluster()->AbsEta() << " --> MVABin " << MVABin << " : "    
640 +              << fMVAVar_EleSigmaIEtaIEta << " "
641 +              << fMVAVar_EleDEtaIn << " "
642 +              << fMVAVar_EleDPhiIn << " "
643 +              << fMVAVar_EleHoverE << " "
644 +              << fMVAVar_EleD0 << " "
645 +              << fMVAVar_EleDZ << " "
646 +              << fMVAVar_EleFBrem << " "
647 +              << fMVAVar_EleEOverP << " "
648 +              << fMVAVar_EleESeedClusterOverPout << " "
649 +              << fMVAVar_EleSigmaIPhiIPhi << " "
650 +              << fMVAVar_EleNBrem << " "
651 +              << fMVAVar_EleOneOverEMinusOneOverP << " "
652 +              << fMVAVar_EleESeedClusterOverPIn << " "
653 +              << fMVAVar_EleIP3d << " "
654 +              << fMVAVar_EleIP3dSig << " "
655 +              << fMVAVar_EleGsfTrackChi2OverNdof << " "
656 +              << fMVAVar_EledEtaCalo << " "
657 +              << fMVAVar_EledPhiCalo << " "
658 +              << fMVAVar_EleR9 << " "
659 +              << fMVAVar_EleSCEtaWidth << " "
660 +              << fMVAVar_EleSCPhiWidth << " "
661 +              << fMVAVar_EleCovIEtaIPhi << " "
662 +              << fMVAVar_ElePreShowerOverRaw << " "
663 +              << fMVAVar_EleKFTrkChiSqr  << " "
664 +              << fMVAVar_EleKFTrkNHits  << " "
665 +              << fMVAVar_EleE1x5OverE5x5  << " "
666 +              << " ::: "
667 +      
668 +              << " === : === "
669 +              << mva << " "    
670 +              << std::endl;
671 +    
672 +  }
673 +
674 +  return mva;
675 + }
676 +
677 + //--------------------------------------------------------------------------------------------------
678 + Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex,
679 +                                 Bool_t printDebug) {
680 +  
681 +  if (!fIsInitialized) {
682 +    std::cout << "Error: ElectronIDMVA not properly initialized.\n";
683 +    return -9999;
684 +  }
685 +
686 +  Int_t subdet = 0;
687 +  if (ele->SCluster()->AbsEta() < 1.0) subdet = 0;
688 +  else if (ele->SCluster()->AbsEta() < 1.479) subdet = 1;
689 +  else subdet = 2;
690 +  Int_t ptBin = 0;
691 +  if (ele->Pt() > 20.0) ptBin = 1;
692 +  
693 +  fMVAVar_ElePt = ele->Pt();
694 +  fMVAVar_EleEta = ele->Eta();
695 +
696    //set all input variables
697    fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
698    fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
# Line 207 | Line 706 | Double_t ElectronIDMVA::MVAValue(const E
706    if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
707    else fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
708    fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
709 <  fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->ESuperClusterOverP()*ele->BestTrk()->P())) - 1.0 / ele->BestTrk()->P();
709 >  fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->SCluster()->Energy())) - 1.0 / ele->BestTrk()->P();
710    fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
711    fMVAVar_EleIP3d = ele->Ip3dPV();
712    fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
713  
714 +
715 +  fMVAVar_EleEEleClusterOverPout = 0;
716 +  fMVAVar_EleKFTrkChiSqr = ele->TrackerTrk()->RChi2();
717 +  fMVAVar_EleKFTrkNHits = ele->TrackerTrk()->NHits();
718 +  fMVAVar_EleGsfTrackChi2OverNdof = ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof();
719 +  fMVAVar_EledEtaCalo =  ele->DeltaEtaSeedClusterTrackAtCalo();
720 +  fMVAVar_EleSCEtaWidth = ele->SCluster()->EtaWidth();
721 +  fMVAVar_EleSCPhiWidth = ele->SCluster()->PhiWidth();
722 +  fMVAVar_EleE1x5OverE5x5 = ele->SCluster()->Seed()->E1x5() / ele->SCluster()->Seed()->E5x5();
723 +  fMVAVar_EleR9 = ele->SCluster()->R9();
724 +  fMVAVar_EleHoverE = ele->HadronicOverEm();
725 +  fMVAVar_EleEOverP = ele->ESuperClusterOverP();
726 +  fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->SCluster()->Energy())) - 1.0 / ele->BestTrk()->P();
727 +  fMVAVar_EleR9 = ele->SCluster()->R9();
728 +  fMVAVar_ElePreShowerOverRaw = ele->SCluster()->PreshowerEnergy() / ele->SCluster()->RawEnergy();
729 +    
730 +
731    Double_t mva = -9999;  
732    TMVA::Reader *reader = 0;
733    Int_t MVABin = -1;
# Line 226 | Line 742 | Double_t ElectronIDMVA::MVAValue(const E
742                                                  
743    mva = reader->EvaluateMVA( fMethodname );
744  
745 +  if (printDebug == kTRUE) {
746 +    std::cout << "Debug Electron MVA: "
747 +              << ele->Pt() << " " << ele->Eta() << " " << ele->Phi() << " : "
748 +              << ele->Pt() << " " << ele->SCluster()->AbsEta() << " --> MVABin " << MVABin << " : "    
749 +              << fMVAVar_EleSigmaIEtaIEta << " "
750 +              << fMVAVar_EleDEtaIn << " "
751 +              << fMVAVar_EleDPhiIn << " "
752 +              << fMVAVar_EleHoverE << " "
753 +              << fMVAVar_EleD0 << " "
754 +              << fMVAVar_EleDZ << " "
755 +              << fMVAVar_EleFBrem << " "
756 +              << fMVAVar_EleEOverP << " "
757 +              << fMVAVar_EleESeedClusterOverPout << " "
758 +              << fMVAVar_EleSigmaIPhiIPhi << " "
759 +              << fMVAVar_EleNBrem << " "
760 +              << fMVAVar_EleOneOverEMinusOneOverP << " "
761 +              << fMVAVar_EleESeedClusterOverPIn << " "
762 +              << fMVAVar_EleIP3d << " "
763 +              << fMVAVar_EleIP3dSig << " "
764 +              << fMVAVar_EleGsfTrackChi2OverNdof << " "
765 +              << fMVAVar_EledEtaCalo << " "
766 +              << fMVAVar_EledPhiCalo << " "
767 +              << fMVAVar_EleR9 << " "
768 +              << fMVAVar_EleSCEtaWidth << " "
769 +              << fMVAVar_EleSCPhiWidth << " "
770 +              << fMVAVar_EleCovIEtaIPhi << " "
771 +              << fMVAVar_ElePreShowerOverRaw << " "
772 +              << fMVAVar_EleKFTrkChiSqr  << " "
773 +              << fMVAVar_EleKFTrkNHits  << " "
774 +              << fMVAVar_EleE1x5OverE5x5  << " "
775 +              << " === : === "
776 +              << mva << " "    
777 +              << std::endl;
778 +    
779 +  }
780 +
781 +
782 +
783    return mva;
784   }
785 +
786 +
787 +
788 +
789 + //--------------------------------------------------------------------------------------------------
790 + //MVA Includes Isolation with removal of other leptons
791 + //
792 + Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex,
793 +                                 const PFCandidateCol *PFCands,
794 +                                 const PileupEnergyDensityCol *PileupEnergyDensity,
795 +                                 ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaTarget,
796 +                                 const ElectronCol *goodElectrons,
797 +                                 const MuonCol *goodMuons,
798 +                                 Bool_t printDebug) {
799 +  
800 +  if (!fIsInitialized) {
801 +    std::cout << "Error: ElectronIDMVA not properly initialized.\n";
802 +    return -9999;
803 +  }
804 +
805 +  Double_t Rho = 0;
806 +  if (!(TMath::IsNaN(PileupEnergyDensity->At(0)->Rho()) || isinf(PileupEnergyDensity->At(0)->Rho()))) Rho = PileupEnergyDensity->At(0)->Rho();
807 +
808 +  //set all input variables
809 +  fMVAVar_ElePt = ele->Pt();
810 +  fMVAVar_EleEta = ele->SCluster()->Eta();
811 +  fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
812 +  fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
813 +  fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
814 +  fMVAVar_EleHoverE = ele->HadronicOverEm();
815 +  fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
816 +  fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
817 +  fMVAVar_EleFBrem = ele->FBrem();
818 +  fMVAVar_EleEOverP = ele->ESuperClusterOverP();
819 +  fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
820 +  if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
821 +  else fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
822 +  fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
823 +
824 +  if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0
825 +      || fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0
826 +      || fMVAType == ElectronIDMVA::kIsoRingsV0) {
827 +    fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->SCluster()->Energy())) - 1.0 / ele->P();
828 +  } else {
829 +    fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->SCluster()->Energy())) - 1.0 / ele->BestTrk()->P();
830 +  }
831 +
832 +  fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
833 +  fMVAVar_EleIP3d = ele->Ip3dPV();
834 +  fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
835 +  fMVAVar_EleGsfTrackChi2OverNdof = ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof();
836 +  fMVAVar_EledEtaCalo =  ele->DeltaEtaSeedClusterTrackAtCalo();
837 +  fMVAVar_EledPhiCalo = ele->DeltaPhiSeedClusterTrackAtCalo();
838 +  fMVAVar_EleR9 = ele->SCluster()->R9();
839 +  fMVAVar_EleSCEtaWidth = ele->SCluster()->EtaWidth();
840 +  fMVAVar_EleSCPhiWidth = ele->SCluster()->PhiWidth();
841 +  fMVAVar_EleCovIEtaIPhi = ele->SCluster()->Seed()->CoviEtaiPhi();
842 +  fMVAVar_ElePreShowerOverRaw = ele->SCluster()->PreshowerEnergy() / ele->SCluster()->RawEnergy();
843 +
844 +  //Additional vars
845 +  fMVAVar_EleEEleClusterOverPout = 0;
846 +  if (ele->TrackerTrk()) {
847 +    fMVAVar_EleKFTrkChiSqr = ele->TrackerTrk()->RChi2();
848 +    fMVAVar_EleKFTrkNHits = ele->TrackerTrk()->NHits();
849 +  } else {
850 +    fMVAVar_EleKFTrkChiSqr = 0;
851 +    fMVAVar_EleKFTrkNHits = -1;
852 +  }
853 +  
854 +  fMVAVar_EleE1x5OverE5x5 = (ele->SCluster()->Seed()->E5x5() > 0.0) ? 1.0-ele->SCluster()->Seed()->E1x5() / ele->SCluster()->Seed()->E5x5() : -1. ;
855 +
856 +  Double_t tmpChargedIso_DR0p0To0p1  = 0;
857 +  Double_t tmpChargedIso_DR0p1To0p2  = 0;
858 +  Double_t tmpChargedIso_DR0p2To0p3  = 0;
859 +  Double_t tmpChargedIso_DR0p3To0p4  = 0;
860 +  Double_t tmpChargedIso_DR0p4To0p5  = 0;
861 +  Double_t tmpGammaIso_DR0p0To0p1  = 0;
862 +  Double_t tmpGammaIso_DR0p1To0p2  = 0;
863 +  Double_t tmpGammaIso_DR0p2To0p3  = 0;
864 +  Double_t tmpGammaIso_DR0p3To0p4  = 0;
865 +  Double_t tmpGammaIso_DR0p4To0p5  = 0;
866 +  Double_t tmpNeutralHadronIso_DR0p0To0p1  = 0;
867 +  Double_t tmpNeutralHadronIso_DR0p1To0p2  = 0;
868 +  Double_t tmpNeutralHadronIso_DR0p2To0p3  = 0;
869 +  Double_t tmpNeutralHadronIso_DR0p3To0p4  = 0;
870 +  Double_t tmpNeutralHadronIso_DR0p4To0p5  = 0;
871 +
872 +  for (UInt_t p=0; p<PFCands->GetEntries();p++) {  
873 +    const PFCandidate *pf = PFCands->At(p);
874 +      
875 +    //exclude the electron itself
876 +    if(pf->GsfTrk() && ele->GsfTrk() &&
877 +       pf->GsfTrk() == ele->GsfTrk()) continue;
878 +    if(pf->TrackerTrk() && ele->TrackerTrk() &&
879 +       pf->TrackerTrk() == ele->TrackerTrk()) continue;      
880 +
881 +    //************************************************************
882 +    // New Isolation Calculations
883 +    //************************************************************
884 +    Double_t dr = MathUtils::DeltaR(ele->Mom(), pf->Mom());
885 +
886 +    if (dr < 1.0) {
887 +      Bool_t IsLeptonFootprint = kFALSE;
888 +      //************************************************************
889 +      // Lepton Footprint Removal
890 +      //************************************************************            
891 +      for (UInt_t q=0; q < goodElectrons->GetEntries() ; ++q) {
892 +        //if pf candidate matches an electron passing ID cuts, then veto it
893 +        if(pf->GsfTrk() && goodElectrons->At(q)->GsfTrk() &&
894 +           pf->GsfTrk() == goodElectrons->At(q)->GsfTrk()) IsLeptonFootprint = kTRUE;
895 +        if(pf->TrackerTrk() && goodElectrons->At(q)->TrackerTrk() &&
896 +           pf->TrackerTrk() == goodElectrons->At(q)->TrackerTrk()) IsLeptonFootprint = kTRUE;
897 +        //if pf candidate lies in veto regions of electron passing ID cuts, then veto it
898 +        if(pf->BestTrk() && fabs(goodElectrons->At(q)->SCluster()->Eta()) >= 1.479
899 +           && MathUtils::DeltaR(goodElectrons->At(q)->Mom(), pf->Mom()) < 0.015) IsLeptonFootprint = kTRUE;
900 +        if(pf->PFType() == PFCandidate::eGamma && fabs(goodElectrons->At(q)->SCluster()->Eta()) >= 1.479 &&
901 +           MathUtils::DeltaR(goodElectrons->At(q)->Mom(), pf->Mom()) < 0.08) IsLeptonFootprint = kTRUE;
902 +      }
903 +      for (UInt_t q=0; q < goodMuons->GetEntries() ; ++q) {
904 +        //if pf candidate matches an muon passing ID cuts, then veto it
905 +        if(pf->TrackerTrk() && goodMuons->At(q)->TrackerTrk() &&
906 +           pf->TrackerTrk() == goodMuons->At(q)->TrackerTrk()) IsLeptonFootprint = kTRUE;
907 +        //if pf candidate lies in veto regions of muon passing ID cuts, then veto it
908 +        if(pf->BestTrk() && MathUtils::DeltaR(goodMuons->At(q)->Mom(), pf->Mom()) < 0.01) IsLeptonFootprint = kTRUE;
909 +      }
910 +
911 +      if (!IsLeptonFootprint) {
912 +        Bool_t passVeto = kTRUE;
913 +        //Charged
914 +         if(pf->BestTrk()) {              
915 +           if (!(fabs(pf->BestTrk()->DzCorrected(*vertex) - ele->BestTrk()->DzCorrected(*vertex)) < 0.2)) passVeto = kFALSE;
916 +           //************************************************************
917 +           // Veto any PFmuon, or PFEle
918 +           if (pf->PFType() == PFCandidate::eElectron || pf->PFType() == PFCandidate::eMuon) passVeto = kFALSE;
919 +           //************************************************************
920 +           //************************************************************
921 +           // Footprint Veto
922 +           if (fabs(ele->SCluster()->Eta()) >= 1.479 && dr < 0.015) passVeto = kFALSE;
923 +           //************************************************************
924 +           if (passVeto) {
925 +             if (dr < 0.1) tmpChargedIso_DR0p0To0p1 += pf->Pt();
926 +             if (dr >= 0.1 && dr < 0.2) tmpChargedIso_DR0p1To0p2 += pf->Pt();
927 +             if (dr >= 0.2 && dr < 0.3) tmpChargedIso_DR0p2To0p3 += pf->Pt();
928 +             if (dr >= 0.3 && dr < 0.4) tmpChargedIso_DR0p3To0p4 += pf->Pt();
929 +             if (dr >= 0.4 && dr < 0.5) tmpChargedIso_DR0p4To0p5 += pf->Pt();
930 +           } //pass veto
931 +          
932 +         }
933 +         //Gamma
934 +         else if (pf->PFType() == PFCandidate::eGamma) {
935 +           //************************************************************
936 +           // Footprint Veto
937 +           if (fabs(ele->SCluster()->Eta()) >= 1.479) {
938 +             if (dr < 0.08) passVeto = kFALSE;
939 +           }
940 +           //************************************************************
941 +          
942 +           if (passVeto) {
943 +             if (dr < 0.1) tmpGammaIso_DR0p0To0p1 += pf->Pt();
944 +             if (dr >= 0.1 && dr < 0.2) tmpGammaIso_DR0p1To0p2 += pf->Pt();
945 +             if (dr >= 0.2 && dr < 0.3) tmpGammaIso_DR0p2To0p3 += pf->Pt();
946 +             if (dr >= 0.3 && dr < 0.4) tmpGammaIso_DR0p3To0p4 += pf->Pt();
947 +             if (dr >= 0.4 && dr < 0.5) tmpGammaIso_DR0p4To0p5 += pf->Pt();
948 +           }
949 +         }
950 +         //NeutralHadron
951 +         else {
952 +           if (dr < 0.1) tmpNeutralHadronIso_DR0p0To0p1 += pf->Pt();
953 +           if (dr >= 0.1 && dr < 0.2) tmpNeutralHadronIso_DR0p1To0p2 += pf->Pt();
954 +           if (dr >= 0.2 && dr < 0.3) tmpNeutralHadronIso_DR0p2To0p3 += pf->Pt();
955 +           if (dr >= 0.3 && dr < 0.4) tmpNeutralHadronIso_DR0p3To0p4 += pf->Pt();
956 +           if (dr >= 0.4 && dr < 0.5) tmpNeutralHadronIso_DR0p4To0p5 += pf->Pt();
957 +         }
958 +      } //not lepton footprint
959 +    } //in 1.0 dr cone
960 +  } //loop over PF candidates
961 +
962 +  Double_t fMVAVar_ChargedIso_DR0p0To0p1  = 0;
963 +  Double_t fMVAVar_ChargedIso_DR0p1To0p2  = 0;
964 +  Double_t fMVAVar_ChargedIso_DR0p2To0p3  = 0;
965 +  Double_t fMVAVar_ChargedIso_DR0p3To0p4  = 0;
966 +  Double_t fMVAVar_ChargedIso_DR0p4To0p5  = 0;
967 +  Double_t fMVAVar_GammaIso_DR0p0To0p1  = 0;
968 +  Double_t fMVAVar_GammaIso_DR0p1To0p2  = 0;
969 +  Double_t fMVAVar_GammaIso_DR0p2To0p3  = 0;
970 +  Double_t fMVAVar_GammaIso_DR0p3To0p4  = 0;
971 +  Double_t fMVAVar_GammaIso_DR0p4To0p5  = 0;
972 +  Double_t fMVAVar_NeutralHadronIso_DR0p0To0p1  = 0;
973 +  Double_t fMVAVar_NeutralHadronIso_DR0p1To0p2  = 0;
974 +  Double_t fMVAVar_NeutralHadronIso_DR0p2To0p3  = 0;
975 +  Double_t fMVAVar_NeutralHadronIso_DR0p3To0p4  = 0;
976 +  Double_t fMVAVar_NeutralHadronIso_DR0p4To0p5  = 0;
977 +
978 +  fMVAVar_ChargedIso_DR0p0To0p1   = TMath::Min((tmpChargedIso_DR0p0To0p1)/ele->Pt(), 2.5);
979 +  fMVAVar_ChargedIso_DR0p1To0p2   = TMath::Min((tmpChargedIso_DR0p1To0p2)/ele->Pt(), 2.5);
980 +  fMVAVar_ChargedIso_DR0p2To0p3 = TMath::Min((tmpChargedIso_DR0p2To0p3)/ele->Pt(), 2.5);
981 +  fMVAVar_ChargedIso_DR0p3To0p4 = TMath::Min((tmpChargedIso_DR0p3To0p4)/ele->Pt(), 2.5);
982 +  fMVAVar_ChargedIso_DR0p4To0p5 = TMath::Min((tmpChargedIso_DR0p4To0p5)/ele->Pt(), 2.5);
983 +  fMVAVar_GammaIso_DR0p0To0p1 = TMath::Max(TMath::Min((tmpGammaIso_DR0p0To0p1 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoDR0p0To0p1, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
984 +  fMVAVar_GammaIso_DR0p1To0p2 = TMath::Max(TMath::Min((tmpGammaIso_DR0p1To0p2 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoDR0p1To0p2, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
985 +  fMVAVar_GammaIso_DR0p2To0p3 = TMath::Max(TMath::Min((tmpGammaIso_DR0p2To0p3 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoDR0p2To0p3, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
986 +  fMVAVar_GammaIso_DR0p3To0p4 = TMath::Max(TMath::Min((tmpGammaIso_DR0p3To0p4 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoDR0p3To0p4, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
987 +  fMVAVar_GammaIso_DR0p4To0p5 = TMath::Max(TMath::Min((tmpGammaIso_DR0p4To0p5 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoDR0p4To0p5, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
988 +  fMVAVar_NeutralHadronIso_DR0p0To0p1 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p0To0p1 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIsoDR0p0To0p1, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
989 +  fMVAVar_NeutralHadronIso_DR0p1To0p2 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p1To0p2 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIsoDR0p1To0p2, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
990 +  fMVAVar_NeutralHadronIso_DR0p2To0p3 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p2To0p3 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIsoDR0p2To0p3, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
991 +  fMVAVar_NeutralHadronIso_DR0p3To0p4 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p3To0p4 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIsoDR0p3To0p4, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
992 +  fMVAVar_NeutralHadronIso_DR0p4To0p5 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p4To0p5 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIsoDR0p4To0p5, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
993 +  
994 + //   cout << "gg: " << tmpGammaIso_DR0p4To0p5 << " : " << ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoDR0p4To0p5, ele->SCluster()->Eta(), EffectiveAreaTarget) << " " << EffectiveAreaTarget << endl;
995 +
996 +  //Do Binding of MVA input variables
997 +  if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0
998 +      || fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0
999 +      || fMVAType == ElectronIDMVA::kIsoRingsV0) {
1000 +    bindVariables();
1001 +  }
1002 +
1003 +  Double_t mva = -9999;  
1004 +  TMVA::Reader *reader = 0;
1005 +  Int_t MVABin = -1;
1006 +
1007 +  if (fMVAVar_ElePt < 10 && fabs(fMVAVar_EleEta) < 1.479) MVABin = 0;
1008 +  if (fMVAVar_ElePt < 10 && fabs(fMVAVar_EleEta) >= 1.479) MVABin = 1;
1009 +  if (fMVAVar_ElePt > 10 && fabs(fMVAVar_EleEta) < 1.479) MVABin = 2;
1010 +  if (fMVAVar_ElePt > 10 && fabs(fMVAVar_EleEta) >= 1.479) MVABin = 3;
1011 +  
1012 +  std::cout <<" -> BIN: " << fMVAVar_EleEta << " " << fMVAVar_ElePt << " : " << MVABin << std::endl;
1013 +
1014 +  if (!fUseBinnedVersion) {
1015 +    reader = fTMVAReader[0];
1016 +  } else {
1017 +    reader = fTMVAReader[MVABin];
1018 +  }
1019 +
1020 +                                    
1021 +  mva = reader->EvaluateMVA( fMethodname );
1022 +
1023 +  if (printDebug == kTRUE) {
1024 +
1025 +    std::cout << "Debug Electron MVA: \n";
1026 +    std::cout << " fbrem " <<  fMVAVar_EleFBrem  
1027 +              << " kfchi2 " << fMVAVar_EleKFTrkChiSqr  
1028 +              << " kfhits " << fMVAVar_EleKFTrkNHits  
1029 +              << " kfhitsall " << fMVAVar_EleKFTrkNHits  
1030 +              << " gsfchi2 " << fMVAVar_EleGsfTrackChi2OverNdof  
1031 +              << " deta " <<  fMVAVar_EleDEtaIn  
1032 +              << " dphi " << fMVAVar_EleDPhiIn  
1033 +              << " detacalo " << fMVAVar_EledEtaCalo  
1034 +              << " see " << fMVAVar_EleSigmaIEtaIEta  
1035 +              << " spp " << fMVAVar_EleSigmaIPhiIPhi  
1036 +              << " etawidth " << fMVAVar_EleSCEtaWidth  
1037 +              << " phiwidth " << fMVAVar_EleSCPhiWidth  
1038 +              << " e1x5e5x5 " << fMVAVar_EleE1x5OverE5x5  
1039 +              << " R9 " << fMVAVar_EleR9  
1040 +              << " HoE " << fMVAVar_EleHoverE  
1041 +              << " EoP " << fMVAVar_EleEOverP  
1042 +              << " IoEmIoP " << fMVAVar_EleOneOverEMinusOneOverP  
1043 +              << " eleEoPout " << fMVAVar_EleESeedClusterOverPout  
1044 +              << " EoPout " << fMVAVar_EleESeedClusterOverPout  
1045 +              << " d0 " << fMVAVar_EleD0  
1046 +              << " ip3d " << fMVAVar_EleIP3d  
1047 +              << " eta " << fMVAVar_EleEta  
1048 +              << " pt " << fMVAVar_ElePt << std::endl;
1049 +      
1050 +    std::cout << fMVAVar_ChargedIso_DR0p0To0p1 << " "
1051 +              << fMVAVar_ChargedIso_DR0p1To0p2 << " "
1052 +              << fMVAVar_ChargedIso_DR0p2To0p3 << " "
1053 +              << fMVAVar_ChargedIso_DR0p3To0p4 << " "
1054 +              << fMVAVar_ChargedIso_DR0p4To0p5 << " "
1055 +              << fMVAVar_GammaIso_DR0p0To0p1 << " "
1056 +              << fMVAVar_GammaIso_DR0p1To0p2 << " "
1057 +              << fMVAVar_GammaIso_DR0p2To0p3 << " "
1058 +              << fMVAVar_GammaIso_DR0p3To0p4 << " "
1059 +              << fMVAVar_GammaIso_DR0p4To0p5 << " "
1060 +              << fMVAVar_NeutralHadronIso_DR0p0To0p1 << " "
1061 +              << fMVAVar_NeutralHadronIso_DR0p1To0p2 << " "
1062 +              << fMVAVar_NeutralHadronIso_DR0p2To0p3 << " "
1063 +              << fMVAVar_NeutralHadronIso_DR0p3To0p4 << " "
1064 +              << fMVAVar_NeutralHadronIso_DR0p4To0p5 << " "  
1065 +              << std::endl;
1066 +    std::cout << "MVA: " << mva << " "    
1067 +         << std::endl;    
1068 +  }
1069 +
1070 +  return mva;
1071 + }
1072 +
1073 +
1074 + void ElectronIDMVA::bindVariables() {
1075 +
1076 +  // this binding is needed for variables that sometime diverge.
1077 +
1078 +  if(fMVAVar_EleFBrem < -1.)
1079 +    fMVAVar_EleFBrem = -1.;    
1080 +  
1081 +  fMVAVar_EleDEtaIn = fabs(fMVAVar_EleDEtaIn);
1082 +  if(fMVAVar_EleDEtaIn > 0.06)
1083 +    fMVAVar_EleDEtaIn = 0.06;
1084 +  
1085 +  
1086 +  fMVAVar_EleDPhiIn = fabs(fMVAVar_EleDPhiIn);
1087 +  if(fMVAVar_EleDPhiIn > 0.6)
1088 +    fMVAVar_EleDPhiIn = 0.6;
1089 +  
1090 +  
1091 +  if(fMVAVar_EleESeedClusterOverPout > 20.)
1092 +    fMVAVar_EleESeedClusterOverPout = 20.;
1093 +  
1094 +  if(fMVAVar_EleEOverP > 20.)
1095 +    fMVAVar_EleEOverP = 20.;
1096 +  
1097 +  if(fMVAVar_EleEEleClusterOverPout > 20.)
1098 +    fMVAVar_EleEEleClusterOverPout = 20.;
1099 +  
1100 +  
1101 +  fMVAVar_EledEtaCalo = fabs(fMVAVar_EledEtaCalo);
1102 +  if(fMVAVar_EledEtaCalo > 0.2)
1103 +    fMVAVar_EledEtaCalo = 0.2;
1104 +  
1105 +  
1106 +  if(fMVAVar_EleE1x5OverE5x5 < -1.)
1107 +    fMVAVar_EleE1x5OverE5x5 = -1;
1108 +  
1109 +  if(fMVAVar_EleE1x5OverE5x5 > 2.)
1110 +    fMVAVar_EleE1x5OverE5x5 = 2.;
1111 +  
1112 +  
1113 +  
1114 +  if(fMVAVar_EleR9 > 5)
1115 +    fMVAVar_EleR9 = 5;
1116 +  
1117 +  if(fMVAVar_EleGsfTrackChi2OverNdof > 200.)
1118 +    fMVAVar_EleGsfTrackChi2OverNdof = 200;
1119 +  
1120 +  
1121 +  if(fMVAVar_EleKFTrkChiSqr > 10.)
1122 +    fMVAVar_EleKFTrkChiSqr = 10.;
1123 +  
1124 +  // Needed for a bug in CMSSW_420, fixed in more recent CMSSW versions
1125 +  if(std::isnan(fMVAVar_EleSigmaIPhiIPhi))
1126 +    fMVAVar_EleSigmaIPhiIPhi = 0.;      
1127 +  
1128 +  
1129 +  return;
1130 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines