ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/JetIDMVA.cc
Revision: 1.7
Committed: Tue May 1 16:53:38 2012 UTC (13 years ago) by pharris
Content type: text/plain
Branch: MAIN
Changes since 1.6: +7 -7 lines
Log Message:
Fixed Castor Jet Bug

File Contents

# Content
1 #include "FWCore/PythonParameterSet/interface/MakeParameterSets.h"
2 #include "FWCore/ParameterSet/interface/ParameterSet.h"
3 #include "MitPhysics/Utils/interface/JetIDMVA.h"
4 #include "MitPhysics/Utils/interface/JetTools.h"
5 #include "MitAna/DataTree/interface/StableData.h"
6 #include <TFile.h>
7 #include <TRandom3.h>
8 #include "TMVA/Tools.h"
9 #include "TMVA/Reader.h"
10
11
12 ClassImp(mithep::JetIDMVA)
13
14 using namespace mithep;
15
16 //--------------------------------------------------------------------------------------------------
17 JetIDMVA::JetIDMVA() :
18 fJetPtMin(0) , //We need to lower this
19 fDZCut (0.2),
20 fLowPtMethodName ("JetIDMVALowPt" ),
21 fHighPtMethodName("JetIDMVAHighPt"),
22 fIsInitialized(kFALSE),
23 fNVtx (0),
24 fJPt1 (0),
25 fJEta1 (0),
26 fJPhi1 (0),
27 fJD01 (0),
28 fJDZ1 (0),
29 fBeta (0),
30 fBetaStar (0),
31 fNCharged (0),
32 fNNeutrals(0),
33 fDRMean (0),
34 fFrac01 (0),
35 fFrac02 (0),
36 fFrac03 (0),
37 fFrac04 (0),
38 fFrac05 (0)
39 {
40 fReader = 0;
41 }
42 //--------------------------------------------------------------------------------------------------
43 JetIDMVA::~JetIDMVA() {
44
45 fReader = 0;
46 }
47
48 //--------------------------------------------------------------------------------------------------
49 void JetIDMVA::Initialize( JetIDMVA::CutType iCutType,
50 TString iLowPtWeights,
51 TString iHighPtWeights,
52 JetIDMVA::MVAType iType,
53 TString iCutFileName)
54 {
55
56 fIsInitialized = kTRUE;
57 fType = iType;
58 fCutType = iCutType;
59 fReader = 0;
60 fReader = new TMVA::Reader( "!Color:!Silent:Error" );
61 if (fType == kBaseline) {
62 fReader->AddVariable( "nvtx" , &fNVtx );
63 fReader->AddVariable( "jetPt" , &fJPt1 );
64 fReader->AddVariable( "jetEta" , &fJEta1 );
65 fReader->AddVariable( "jetPhi" , &fJPhi1 );
66 fReader->AddVariable( "dZ" , &fJDZ1 );
67 fReader->AddVariable( "d0" , &fJD01 );
68 fReader->AddVariable( "beta" , &fBeta );
69 fReader->AddVariable( "betaStar" , &fBetaStar );
70 fReader->AddVariable( "nCharged" , &fNCharged );
71 fReader->AddVariable( "nNeutrals", &fNNeutrals );
72 fReader->AddVariable( "dRMean" , &fDRMean );
73 fReader->AddVariable( "frac01" , &fFrac01 );
74 fReader->AddVariable( "frac02" , &fFrac02 );
75 fReader->AddVariable( "frac03" , &fFrac03 );
76 fReader->AddVariable( "frac04" , &fFrac04 );
77 fReader->AddVariable( "frac05" , &fFrac05 );
78 }
79 fReader->BookMVA(fLowPtMethodName , iLowPtWeights );
80 fReader->BookMVA(fHighPtMethodName , iHighPtWeights );
81 std::cout << "Jet ID MVA Initialization\n";
82 std::cout << "MethodName : " << fLowPtMethodName << " , type == " << fType << std::endl;
83
84 //Load Cut Matrix
85 edm::ParameterSet lConfig = edm::readPSetsFrom(iCutFileName.Data())->getParameter<edm::ParameterSet>("JetIdParams");
86 std::string lCutType = "Tight";
87 if(fCutType == kMedium) lCutType = "Medium";
88 if(fCutType == kLoose ) lCutType = "Loose";
89 if(fCutType == kMET ) lCutType = "MET";
90 std::vector<double> lPt010 = lConfig.getParameter<std::vector<double> >(("Pt010_" +lCutType).c_str());
91 std::vector<double> lPt1020 = lConfig.getParameter<std::vector<double> >(("Pt1020_"+lCutType).c_str());
92 std::vector<double> lPt2030 = lConfig.getParameter<std::vector<double> >(("Pt2030_"+lCutType).c_str());
93 std::vector<double> lPt3050 = lConfig.getParameter<std::vector<double> >(("Pt3050_"+lCutType).c_str());
94 for(int i0 = 0; i0 < 4; i0++) fMVACut[0][i0] = lPt010 [i0];
95 for(int i0 = 0; i0 < 4; i0++) fMVACut[1][i0] = lPt1020[i0];
96 for(int i0 = 0; i0 < 4; i0++) fMVACut[2][i0] = lPt2030[i0];
97 for(int i0 = 0; i0 < 4; i0++) fMVACut[3][i0] = lPt3050[i0];
98 //std::cout << " Working Points : << " << std::endl;
99 //for(int i0 = 0; i0 < 4; i0++) for(int i1 = 0; i1 < 4; i1++)
100 // std::cout << " ==> " << i0 << " -- " << i1 << " -- " << fMVACut[i0][i1] << std::endl;
101 }
102
103 //--------------------------------------------------------------------------------------------------
104 Double_t JetIDMVA::MVAValue(
105 Float_t iNPV ,
106 Float_t iJPt1 ,
107 Float_t iJEta1 ,
108 Float_t iJPhi1 ,
109 Float_t iJD01 ,
110 Float_t iJDZ1 ,
111 Float_t iBeta ,
112 Float_t iBetaStar,
113 Float_t iNCharged,
114 Float_t iNNeutrals,
115 Float_t iDRMean ,
116 Float_t iFrac01 ,
117 Float_t iFrac02 ,
118 Float_t iFrac03 ,
119 Float_t iFrac04 ,
120 Float_t iFrac05
121 ){
122
123 if(!fIsInitialized) {
124 std::cout << "Error: JetIDMVA not properly initialized.\n";
125 return -9999;
126 }
127
128 fNVtx = iNPV;
129 fJPt1 = iJPt1;
130 fJEta1 = iJEta1;
131 fJPhi1 = fJPhi1;
132 fJD01 = iJD01;
133 fJDZ1 = iJDZ1;
134 fBeta = iBeta;
135 fBetaStar = iBetaStar;
136 fNCharged = iNCharged;
137 fNNeutrals = iNNeutrals;
138 fDRMean = iDRMean;
139 fFrac01 = iFrac01;
140 fFrac02 = iFrac02;
141 fFrac03 = iFrac03;
142 fFrac04 = iFrac04;
143 fFrac05 = iFrac05;
144
145 Double_t lMVA = -9999;
146 if(iJPt1 < 10) lMVA = fReader->EvaluateMVA( fLowPtMethodName );
147 if(iJPt1 > 10) lMVA = fReader->EvaluateMVA( fHighPtMethodName );
148
149 return lMVA;
150 }
151 //--------------------------------------------------------------------------------------------------
152 Bool_t JetIDMVA::pass(const PFJet *iJet,const Vertex *iVertex,const VertexCol *iVertices,
153 FactorizedJetCorrector *iJetCorrector,
154 const PileupEnergyDensityCol *iPileupEnergyDensity) {
155
156 if(!JetTools::passPFLooseId(iJet)) return false;
157 if(iJet->Pt() < fJetPtMin) return false;
158 if(fabs(iJet->Eta()) > 4.99) return false;
159
160 double lMVA = MVAValue (iJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity);
161 double lPt = correctedPt(iJet, iJetCorrector,iPileupEnergyDensity);
162 if(lPt > 50) return true; //==> we can raise this
163
164 int lPtId = 0;
165 if(lPt > 10 && lPt < 20) lPtId = 1;
166 if(lPt > 20 && lPt < 30) lPtId = 2;
167 if(lPt > 30 ) lPtId = 3;
168
169 int lEtaId = 0;
170 if(fabs(iJet->Eta()) > 2.5 && fabs(iJet->Eta()) < 2.75) lEtaId = 1;
171 if(fabs(iJet->Eta()) > 2.75 && fabs(iJet->Eta()) < 3.0 ) lEtaId = 2;
172 if(fabs(iJet->Eta()) > 3.0 && fabs(iJet->Eta()) < 5.0 ) lEtaId = 3;
173
174 double lMVACut = fMVACut[lPtId][lEtaId];
175 if(lMVA < lMVACut) return false;
176 return true;
177 //if( fabs(JetTools::impactParameter(iJet,iVertex,true)) < 0.2) return true;
178 //if(correctedPt(iJet,iJetCorrector,iPileupEnergyDensity) < fJetPtMin && iJet->TrackCountingHighEffBJetTagsDisc() == -100) return false;
179 //This line is a bug in the Met training
180 //if(lMVA < -0.8) return false;
181 //if(lMVA < -0.5 && fabs(iJet->Eta()) > 3.0) return false;
182 }
183 //--------------------------------------------------------------------------------------------------
184 Bool_t JetIDMVA::pass(const PFJet *iJet,const Vertex *iVertex,const VertexCol *iVertices) {
185 if(!JetTools::passPFLooseId(iJet)) return false;
186 if(iJet->Pt() < fJetPtMin) return false;
187 if(iJet->Pt() > 50) return true; //==> we can raise this
188 if(fabs(iJet->Eta()) > 4.99) return false;
189 double lMVA = MVAValue(iJet,iVertex,iVertices);
190
191 int lPtId = 0;
192 if(iJet->Pt() > 10 && iJet->Pt() < 20) lPtId = 1;
193 if(iJet->Pt() > 20 && iJet->Pt() < 30) lPtId = 2;
194 if(iJet->Pt() > 30 ) lPtId = 3;
195
196 int lEtaId = 0;
197 if(fabs(iJet->Eta()) > 2.5 && fabs(iJet->Eta()) < 2.75) lEtaId = 1;
198 if(fabs(iJet->Eta()) > 2.75 && fabs(iJet->Eta()) < 3.0 ) lEtaId = 2;
199 if(fabs(iJet->Eta()) > 3.0 && fabs(iJet->Eta()) < 5.0 ) lEtaId = 3;
200
201 double lMVACut = fMVACut[lPtId][lEtaId];
202 if(lMVA < lMVACut) return false;
203 return true;
204 //if(lMVA < -0.8) return false;
205 //if(lMVA < -0.5 && fabs(iJet->Eta()) > 3.0) return false;
206 //if(iJet->Pt() < fJetPtMin && iJet->TrackCountingHighEffBJetTagsDisc() == -100) return false; //This line is a bug in the Met training
207 //if( fabs(JetTools::impactParameter(iJet,iVertex,true)) < 0.2) return true;
208 }
209 //--------------------------------------------------------------------------------------------------
210 Double_t JetIDMVA::MVAValue(const PFJet *iJet,const Vertex *iVertex,const VertexCol *iVertices, //Vertex here is the PV
211 FactorizedJetCorrector *iJetCorrector,
212 const PileupEnergyDensityCol *iPileupEnergyDensity,
213 Bool_t printDebug) {
214
215 if (!fIsInitialized) {
216 std::cout << "Error: JetIDMVA not properly initialized.\n";
217 return -9999;
218 }
219 if(!JetTools::passPFLooseId(iJet)) return -2.;
220
221 //set all input variables
222 fNVtx = iVertices->GetEntries();
223 fJPt1 = correctedPt(iJet,iJetCorrector,iPileupEnergyDensity);
224 fJEta1 = iJet->RawMom().Eta();
225 fJPhi1 = iJet->RawMom().Phi();
226 fJD01 = JetTools::impactParameter(iJet,iVertex);
227 fJDZ1 = JetTools::impactParameter(iJet,iVertex,true);
228 fBeta = JetTools::Beta(iJet,iVertex,fDZCut);
229 fBetaStar = JetTools::betaStar(iJet,iVertex,iVertices,fDZCut);
230 fNCharged = iJet->ChargedMultiplicity();
231 fNNeutrals = iJet->NeutralMultiplicity();
232
233 fDRMean = JetTools::dRMean(iJet,-1);
234 fFrac01 = JetTools::frac (iJet,0.1,0. ,-1);
235 fFrac02 = JetTools::frac (iJet,0.2,0.1,-1);
236 fFrac03 = JetTools::frac (iJet,0.3,0.2,-1);
237 fFrac04 = JetTools::frac (iJet,0.4,0.3,-1);
238 fFrac05 = JetTools::frac (iJet,0.5,0.4,-1);
239
240 double lMVA = 0;
241 if(fJPt1 < 10) lMVA = fReader->EvaluateMVA( fLowPtMethodName );
242 if(fJPt1 > 10) lMVA = fReader->EvaluateMVA( fHighPtMethodName );
243 if (printDebug == kTRUE) {
244 std::cout << "Debug Jet MVA: "
245 << fNVtx << " "
246 << fJPt1 << " "
247 << fJEta1 << " "
248 << fJPhi1 << " "
249 << fJD01 << " "
250 << fJDZ1 << " "
251 << fBeta << " "
252 << fBetaStar << " "
253 << fNCharged << " "
254 << fNNeutrals << " "
255 << fDRMean << " "
256 << fFrac01 << " "
257 << fFrac02 << " "
258 << fFrac03 << " "
259 << fFrac04 << " "
260 << fFrac05
261 << " === : === "
262 << lMVA << " "
263 << std::endl;
264 }
265
266 return lMVA;
267 }
268 Double_t JetIDMVA::MVAValue(const PFJet *iJet,const Vertex *iVertex, const VertexCol *iVertices,//Vertex here is the PV
269 Bool_t printDebug) {
270
271 if (!fIsInitialized) {
272 std::cout << "Error: JetIDMVA not properly initialized.\n";
273 return -9999;
274 }
275 if(!JetTools::passPFLooseId(iJet)) return -2.;
276
277 //set all input variables
278 fNVtx = iVertices->GetEntries();
279 fJPt1 = iJet->Pt();
280 fJEta1 = iJet->RawMom().Eta();
281 fJPhi1 = iJet->RawMom().Phi();
282 fJD01 = JetTools::impactParameter(iJet,iVertex);
283 fJDZ1 = JetTools::impactParameter(iJet,iVertex,true);
284 fBeta = JetTools::Beta(iJet,iVertex,fDZCut);
285 fBetaStar = JetTools::betaStar(iJet,iVertex,iVertices,fDZCut);
286 fNCharged = iJet->ChargedMultiplicity();
287 fNNeutrals = iJet->NeutralMultiplicity();
288
289 fDRMean = JetTools::dRMean(iJet,-1);
290 fFrac01 = JetTools::frac (iJet,0.1,0. ,-1);
291 fFrac02 = JetTools::frac (iJet,0.2,0.1,-1);
292 fFrac03 = JetTools::frac (iJet,0.3,0.2,-1);
293 fFrac04 = JetTools::frac (iJet,0.4,0.3,-1);
294 fFrac05 = JetTools::frac (iJet,0.5,0.4,-1);
295
296 double lMVA = 0;
297 if(fJPt1 < 10) lMVA = fReader->EvaluateMVA( fLowPtMethodName );
298 if(fJPt1 > 10) lMVA = fReader->EvaluateMVA( fHighPtMethodName );
299
300 if (printDebug == kTRUE) {
301 std::cout << "Debug Jet MVA: "
302 << fNVtx << " "
303 << fJPt1 << " "
304 << fJEta1 << " "
305 << fJPhi1 << " "
306 << fJD01 << " "
307 << fJDZ1 << " "
308 << fBeta << " "
309 << fBetaStar << " "
310 << fNCharged << " "
311 << fNNeutrals << " "
312 << fDRMean << " "
313 << fFrac01 << " "
314 << fFrac02 << " "
315 << fFrac03 << " "
316 << fFrac04 << " "
317 << fFrac05
318 << " === : === "
319 << lMVA << " "
320 << std::endl;
321 }
322
323 return lMVA;
324 }
325 Double_t JetIDMVA::correctedPt(const PFJet *iJet, FactorizedJetCorrector *iJetCorrector,const PileupEnergyDensityCol *iPUEnergyDensity) {
326 const FourVectorM rawMom = iJet->RawMom();
327 iJetCorrector->setJetEta(rawMom.Eta());
328 iJetCorrector->setJetPt (rawMom.Pt());
329 iJetCorrector->setJetPhi(rawMom.Phi());
330 iJetCorrector->setJetE (rawMom.E());
331 iJetCorrector->setRho (iPUEnergyDensity->At(0)->RhoHighEta());
332 iJetCorrector->setJetA (iJet->JetArea());
333 iJetCorrector->setJetEMF(-99.0);
334 Double_t correction = iJetCorrector->getCorrection();
335 return rawMom.Pt()*correction;
336 }