15 |
|
//-------------------------------------------------------------------------------------------------- |
16 |
|
ElectronIDMVA::ElectronIDMVA() : |
17 |
|
fMethodname("BDTG method"), |
18 |
– |
fLH(0), |
18 |
|
fIsInitialized(kFALSE) |
19 |
|
{ |
20 |
|
// Constructor. |
40 |
|
TString Subdet0Pt20ToInfWeights, |
41 |
|
TString Subdet1Pt20ToInfWeights, |
42 |
|
TString Subdet2Pt20ToInfWeights, |
43 |
< |
ElectronLikelihood *LH) { |
43 |
> |
ElectronIDMVA::MVAType type) { |
44 |
|
|
45 |
|
fIsInitialized = kTRUE; |
46 |
|
|
47 |
|
fMethodname = methodName; |
49 |
– |
fLH = LH; |
50 |
– |
if (!fLH) { std::cout << "Error: Likelihood is not properly initialized.\n"; assert(fLH); } |
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 |
< |
fTMVAReader[i]->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta ); |
55 |
< |
fTMVAReader[i]->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn ); |
56 |
< |
fTMVAReader[i]->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn ); |
57 |
< |
fTMVAReader[i]->AddVariable( "HoverE", &fMVAVar_EleHoverE ); |
58 |
< |
fTMVAReader[i]->AddVariable( "D0", &fMVAVar_EleD0 ); |
59 |
< |
fTMVAReader[i]->AddVariable( "FBrem", &fMVAVar_EleFBrem ); |
60 |
< |
fTMVAReader[i]->AddVariable( "EOverP", &fMVAVar_EleEOverP ); |
61 |
< |
fTMVAReader[i]->AddVariable( "ESeedClusterOverPout", &fMVAVar_EleESeedClusterOverPout ); |
62 |
< |
fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi ); |
63 |
< |
fTMVAReader[i]->AddVariable( "NBrem", &fMVAVar_EleNBrem ); |
64 |
< |
fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP ); |
65 |
< |
fTMVAReader[i]->AddVariable( "ESeedClusterOverPIn", &fMVAVar_EleESeedClusterOverPIn ); |
66 |
< |
fTMVAReader[i]->AddVariable( "IP3d", &fMVAVar_EleIP3d ); |
67 |
< |
fTMVAReader[i]->AddVariable( "IP3dSig", &fMVAVar_EleIP3dSig ); |
68 |
< |
fTMVAReader[i]->AddVariable( "StandardLikelihood", &fMVAVar_EleStandardLikelihood ); |
54 |
> |
|
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 |
> |
if (type == kNoIPInfo) { |
66 |
> |
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 |
> |
if (type == kWithIPInfo) { |
78 |
> |
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 |
|
|
93 |
|
if (i==0) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt10To20Weights ); |
94 |
|
if (i==1) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt10To20Weights ); |
100 |
|
} |
101 |
|
|
102 |
|
std::cout << "Electron ID MVA Initialization\n"; |
103 |
< |
std::cout << "MethodName : " << fMethodname << std::endl; |
103 |
> |
std::cout << "MethodName : " << fMethodname << " , type == " << type << std::endl; |
104 |
|
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; |
110 |
|
|
111 |
|
} |
112 |
|
|
113 |
+ |
//-------------------------------------------------------------------------------------------------- |
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 |
+ |
Double_t EleIP3dSig |
130 |
+ |
) { |
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 |
|
|
180 |
|
//-------------------------------------------------------------------------------------------------- |
181 |
|
Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex) { |
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 |
< |
fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->ESuperClusterOverP()*ele->BestTrk()->P())) - 1.0 / ele->BestTrk()->P(); |
208 |
> |
fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->SCluster()->Energy())) - 1.0 / ele->BestTrk()->P(); |
209 |
|
fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn(); |
210 |
|
fMVAVar_EleIP3d = ele->Ip3dPV(); |
211 |
|
fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance(); |
126 |
– |
fMVAVar_EleStandardLikelihood = ElectronTools::Likelihood(fLH, ele); |
212 |
|
|
213 |
|
Double_t mva = -9999; |
214 |
|
TMVA::Reader *reader = 0; |