ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/ElectronIDMVA.cc
Revision: 1.5
Committed: Fri Oct 7 14:04:12 2011 UTC (13 years, 7 months ago) by sixie
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_025c, Mit_025b, Mit_025a, Mit_025
Changes since 1.4: +3 -5 lines
Log Message:
update electron mva. change naming scheme to make it easier on users

File Contents

# User Rev Content
1 sixie 1.1 #include "MitPhysics/Utils/interface/ElectronIDMVA.h"
2     #include "MitPhysics/Utils/interface/ElectronTools.h"
3     #include "MitPhysics/Utils/interface/IsolationTools.h"
4     #include "MitAna/DataTree/interface/StableData.h"
5     #include <TFile.h>
6     #include <TRandom3.h>
7     #include "TMVA/Tools.h"
8     #include "TMVA/Reader.h"
9    
10    
11     ClassImp(mithep::ElectronIDMVA)
12    
13     using namespace mithep;
14    
15     //--------------------------------------------------------------------------------------------------
16     ElectronIDMVA::ElectronIDMVA() :
17     fMethodname("BDTG method"),
18     fIsInitialized(kFALSE)
19     {
20     // 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) {
31     if (fTMVAReader[i]) delete fTMVAReader[i];
32     }
33     }
34    
35     //--------------------------------------------------------------------------------------------------
36     void ElectronIDMVA::Initialize( TString methodName,
37     TString Subdet0Pt10To20Weights ,
38     TString Subdet1Pt10To20Weights ,
39     TString Subdet2Pt10To20Weights,
40     TString Subdet0Pt20ToInfWeights,
41     TString Subdet1Pt20ToInfWeights,
42     TString Subdet2Pt20ToInfWeights,
43 sixie 1.4 ElectronIDMVA::MVAType type) {
44 sixie 1.1
45     fIsInitialized = kTRUE;
46    
47     fMethodname = methodName;
48    
49     for(UInt_t i=0; i<6; ++i) {
50     if (fTMVAReader[i]) delete fTMVAReader[i];
51    
52     fTMVAReader[i] = new TMVA::Reader( "!Color:!Silent:Error" );
53     fTMVAReader[i]->SetVerbose(kTRUE);
54 sixie 1.4
55     if (type == kBaseline) {
56     fTMVAReader[i]->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
57     fTMVAReader[i]->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
58     fTMVAReader[i]->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
59     fTMVAReader[i]->AddVariable( "FBrem", &fMVAVar_EleFBrem );
60     fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
61     fTMVAReader[i]->AddVariable( "NBrem", &fMVAVar_EleNBrem );
62     fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
63     }
64    
65 sixie 1.5 if (type == kNoIPInfo) {
66 sixie 1.4 fTMVAReader[i]->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
67     fTMVAReader[i]->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
68     fTMVAReader[i]->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
69     fTMVAReader[i]->AddVariable( "FBrem", &fMVAVar_EleFBrem );
70     fTMVAReader[i]->AddVariable( "EOverP", &fMVAVar_EleEOverP );
71     fTMVAReader[i]->AddVariable( "ESeedClusterOverPout", &fMVAVar_EleESeedClusterOverPout );
72     fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
73     fTMVAReader[i]->AddVariable( "NBrem", &fMVAVar_EleNBrem );
74     fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
75     fTMVAReader[i]->AddVariable( "ESeedClusterOverPIn", &fMVAVar_EleESeedClusterOverPIn );
76     }
77 sixie 1.5 if (type == kWithIPInfo) {
78 sixie 1.4 fTMVAReader[i]->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
79     fTMVAReader[i]->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
80     fTMVAReader[i]->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
81     fTMVAReader[i]->AddVariable( "D0", &fMVAVar_EleD0 );
82     fTMVAReader[i]->AddVariable( "FBrem", &fMVAVar_EleFBrem );
83     fTMVAReader[i]->AddVariable( "EOverP", &fMVAVar_EleEOverP );
84     fTMVAReader[i]->AddVariable( "ESeedClusterOverPout", &fMVAVar_EleESeedClusterOverPout );
85     fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
86     fTMVAReader[i]->AddVariable( "NBrem", &fMVAVar_EleNBrem );
87     fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
88     fTMVAReader[i]->AddVariable( "ESeedClusterOverPIn", &fMVAVar_EleESeedClusterOverPIn );
89     fTMVAReader[i]->AddVariable( "IP3d", &fMVAVar_EleIP3d );
90     fTMVAReader[i]->AddVariable( "IP3dSig", &fMVAVar_EleIP3dSig );
91     }
92 sixie 1.1
93     if (i==0) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt10To20Weights );
94     if (i==1) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt10To20Weights );
95     if (i==2) fTMVAReader[i]->BookMVA(fMethodname , Subdet2Pt10To20Weights );
96     if (i==3) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt20ToInfWeights );
97     if (i==4) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt20ToInfWeights );
98     if (i==5) fTMVAReader[i]->BookMVA(fMethodname , Subdet2Pt20ToInfWeights );
99    
100     }
101    
102     std::cout << "Electron ID MVA Initialization\n";
103 sixie 1.4 std::cout << "MethodName : " << fMethodname << " , type == " << type << std::endl;
104 sixie 1.1 std::cout << "Load weights file : " << Subdet0Pt10To20Weights << std::endl;
105     std::cout << "Load weights file : " << Subdet1Pt10To20Weights << std::endl;
106     std::cout << "Load weights file : " << Subdet2Pt10To20Weights << std::endl;
107     std::cout << "Load weights file : " << Subdet0Pt20ToInfWeights << std::endl;
108     std::cout << "Load weights file : " << Subdet1Pt20ToInfWeights << std::endl;
109     std::cout << "Load weights file : " << Subdet2Pt20ToInfWeights << std::endl;
110    
111     }
112    
113 sixie 1.3 //--------------------------------------------------------------------------------------------------
114     Double_t ElectronIDMVA::MVAValue(Double_t ElePt , Double_t EleSCEta,
115     Double_t EleSigmaIEtaIEta,
116     Double_t EleDEtaIn,
117     Double_t EleDPhiIn,
118     Double_t EleHoverE,
119     Double_t EleD0,
120     Double_t EleDZ,
121     Double_t EleFBrem,
122     Double_t EleEOverP,
123     Double_t EleESeedClusterOverPout,
124     Double_t EleSigmaIPhiIPhi,
125     Double_t EleNBrem,
126     Double_t EleOneOverEMinusOneOverP,
127     Double_t EleESeedClusterOverPIn,
128     Double_t EleIP3d,
129 sixie 1.4 Double_t EleIP3dSig
130 sixie 1.3 ) {
131    
132     if (!fIsInitialized) {
133     std::cout << "Error: ElectronIDMVA not properly initialized.\n";
134     return -9999;
135     }
136    
137     Int_t subdet = 0;
138     if (fabs(EleSCEta) < 1.0) subdet = 0;
139     else if (fabs(EleSCEta) < 1.479) subdet = 1;
140     else subdet = 2;
141     Int_t ptBin = 0;
142     if (ElePt > 20.0) ptBin = 1;
143    
144     //set all input variables
145     fMVAVar_EleSigmaIEtaIEta = EleSigmaIEtaIEta;
146     fMVAVar_EleDEtaIn = EleDEtaIn;
147     fMVAVar_EleDPhiIn = EleDPhiIn;
148     fMVAVar_EleHoverE = EleHoverE;
149     fMVAVar_EleD0 = EleD0;
150     fMVAVar_EleDZ = EleDZ;
151     fMVAVar_EleFBrem = EleFBrem;
152     fMVAVar_EleEOverP = EleEOverP;
153     fMVAVar_EleESeedClusterOverPout = EleESeedClusterOverPout;
154     fMVAVar_EleSigmaIPhiIPhi = EleSigmaIPhiIPhi;
155     fMVAVar_EleNBrem = EleNBrem;
156     fMVAVar_EleOneOverEMinusOneOverP = EleOneOverEMinusOneOverP;
157     fMVAVar_EleESeedClusterOverPIn = EleESeedClusterOverPIn;
158     fMVAVar_EleIP3d = EleIP3d;
159     fMVAVar_EleIP3dSig = EleIP3dSig;
160    
161     Double_t mva = -9999;
162     TMVA::Reader *reader = 0;
163     Int_t MVABin = -1;
164     if (subdet == 0 && ptBin == 0) MVABin = 0;
165     if (subdet == 1 && ptBin == 0) MVABin = 1;
166     if (subdet == 2 && ptBin == 0) MVABin = 2;
167     if (subdet == 0 && ptBin == 1) MVABin = 3;
168     if (subdet == 1 && ptBin == 1) MVABin = 4;
169     if (subdet == 2 && ptBin == 1) MVABin = 5;
170     assert(MVABin >= 0 && MVABin <= 5);
171     reader = fTMVAReader[MVABin];
172    
173     mva = reader->EvaluateMVA( fMethodname );
174    
175     return mva;
176     }
177    
178    
179 sixie 1.1
180     //--------------------------------------------------------------------------------------------------
181     Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex) {
182    
183     if (!fIsInitialized) {
184     std::cout << "Error: ElectronIDMVA not properly initialized.\n";
185     return -9999;
186     }
187    
188     Int_t subdet = 0;
189     if (ele->SCluster()->AbsEta() < 1.0) subdet = 0;
190     else if (ele->SCluster()->AbsEta() < 1.479) subdet = 1;
191     else subdet = 2;
192     Int_t ptBin = 0;
193     if (ele->Pt() > 20.0) ptBin = 1;
194    
195     //set all input variables
196     fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
197     fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
198     fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
199     fMVAVar_EleHoverE = ele->HadronicOverEm();
200     fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
201     fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
202     fMVAVar_EleFBrem = ele->FBrem();
203     fMVAVar_EleEOverP = ele->ESuperClusterOverP();
204     fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
205     if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
206     else fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
207     fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
208 sixie 1.5 fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->SCluster()->Energy())) - 1.0 / ele->BestTrk()->P();
209 sixie 1.1 fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
210     fMVAVar_EleIP3d = ele->Ip3dPV();
211     fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
212    
213     Double_t mva = -9999;
214     TMVA::Reader *reader = 0;
215     Int_t MVABin = -1;
216     if (subdet == 0 && ptBin == 0) MVABin = 0;
217     if (subdet == 1 && ptBin == 0) MVABin = 1;
218     if (subdet == 2 && ptBin == 0) MVABin = 2;
219     if (subdet == 0 && ptBin == 1) MVABin = 3;
220     if (subdet == 1 && ptBin == 1) MVABin = 4;
221     if (subdet == 2 && ptBin == 1) MVABin = 5;
222     assert(MVABin >= 0 && MVABin <= 5);
223     reader = fTMVAReader[MVABin];
224    
225     mva = reader->EvaluateMVA( fMethodname );
226    
227     return mva;
228     }