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

Comparing UserCode/MitPhysics/Utils/src/JetIDMVA.cc (file contents):
Revision 1.6 by pharris, Mon Apr 23 15:38:00 2012 UTC vs.
Revision 1.17 by pharris, Sat Jan 12 11:49:50 2013 UTC

# Line 15 | Line 15 | using namespace mithep;
15  
16   //--------------------------------------------------------------------------------------------------
17   JetIDMVA::JetIDMVA() :
18 <  fJetPtMin(0)  , //We need to lower this
18 >  fJetPtMin(0.)  , //We need to lower this
19    fDZCut   (0.2),
20    fLowPtMethodName ("JetIDMVALowPt" ),
21    fHighPtMethodName("JetIDMVAHighPt"),
# Line 31 | Line 31 | JetIDMVA::JetIDMVA() :
31    fNCharged (0),
32    fNNeutrals(0),
33    fDRMean   (0),
34 +  fPtD      (0),
35    fFrac01   (0),
36    fFrac02   (0),
37    fFrac03   (0),
38    fFrac04   (0),
39 <  fFrac05   (0)
39 >  fFrac05   (0),
40 >  fDR2Mean  (0)
41   {    
42    fReader = 0;
43   }
44   //--------------------------------------------------------------------------------------------------
45   JetIDMVA::~JetIDMVA() {
46  
47 <  fReader = 0;
47 >  delete fReader;
48 >  delete fLowPtReader;
49   }
50  
51   //--------------------------------------------------------------------------------------------------
# Line 56 | Line 59 | void JetIDMVA::Initialize( JetIDMVA::Cut
59    fIsInitialized = kTRUE;
60    fType          = iType;
61    fCutType       = iCutType;
62 +  
63 +  std::string lCutId = "JetIdParams";
64 +  if(fType == k42)     lCutId = "PuJetIdOptMVA_wp";
65 +  if(fType == k52)     lCutId = "full_5x_wp";
66 +  if(fType == kCut)    lCutId = "PuJetIdCutBased_wp";
67 +  if(fType == k53)     lCutId = "full_53x_wp";
68 +  if(fType == k53MET)  lCutId = "met_53x_wp";
69 +
70 + //Load Cut Matrix
71 +  edm::ParameterSet lDefConfig = edm::readPSetsFrom(iCutFileName.Data())->getParameter<edm::ParameterSet>("JetIdParams");
72 +  edm::ParameterSet lConfig    = edm::readPSetsFrom(iCutFileName.Data())->getParameter<edm::ParameterSet>(lCutId);
73 +  std::string lCutType = "Tight";
74 +  if(fCutType == kMedium) lCutType = "Medium";
75 +  if(fCutType == kLoose ) lCutType = "Loose";
76 +  if(fCutType == kMET   ) lCutType = "MET";
77 +  if(fType != kCut) {
78 +    std::string lLowPtCut = "MET";
79 +    std::vector<double> lPt010  = lDefConfig.getParameter<std::vector<double> >(("Pt010_" +lLowPtCut).c_str());
80 +    std::vector<double> lPt1020 = lConfig.getParameter<std::vector<double> >(("Pt1020_"+lCutType).c_str());
81 +    std::vector<double> lPt2030 = lConfig.getParameter<std::vector<double> >(("Pt2030_"+lCutType).c_str());
82 +    std::vector<double> lPt3050 = lConfig.getParameter<std::vector<double> >(("Pt3050_"+lCutType).c_str());
83 +    for(int i0 = 0; i0 < 4; i0++) fMVACut[0][i0] = lPt010 [i0];
84 +    for(int i0 = 0; i0 < 4; i0++) fMVACut[1][i0] = lPt1020[i0];
85 +    for(int i0 = 0; i0 < 4; i0++) fMVACut[2][i0] = lPt2030[i0];
86 +    for(int i0 = 0; i0 < 4; i0++) fMVACut[3][i0] = lPt3050[i0];
87 +  }
88 +  if(fType == kCut) {
89 +    for(int i0 = 0; i0 < 2; i0++) {
90 +      std::string lFullCutType = lCutType;
91 +      if(i0 == 0) lFullCutType = "BetaStar"+ lCutType;
92 +      if(i0 == 1) lFullCutType = "RMS"     + lCutType;
93 +      std::vector<double> pt010  = lConfig.getParameter<std::vector<double> >(("Pt010_" +lFullCutType).c_str());
94 +      std::vector<double> pt1020 = lConfig.getParameter<std::vector<double> >(("Pt1020_"+lFullCutType).c_str());
95 +      std::vector<double> pt2030 = lConfig.getParameter<std::vector<double> >(("Pt2030_"+lFullCutType).c_str());
96 +      std::vector<double> pt3050 = lConfig.getParameter<std::vector<double> >(("Pt3050_"+lFullCutType).c_str());
97 +      if(i0 == 0) {
98 +        for(int i2 = 0; i2 < 4; i2++) fBetaStarCut[0][i2] = pt010 [i2];
99 +        for(int i2 = 0; i2 < 4; i2++) fBetaStarCut[1][i2] = pt1020[i2];
100 +        for(int i2 = 0; i2 < 4; i2++) fBetaStarCut[2][i2] = pt2030[i2];
101 +        for(int i2 = 0; i2 < 4; i2++) fBetaStarCut[3][i2] = pt3050[i2];
102 +      }
103 +      if(i0 == 1) {
104 +        for(int i2 = 0; i2 < 4; i2++) fRMSCut[0][i2] = pt010 [i2];
105 +        for(int i2 = 0; i2 < 4; i2++) fRMSCut[1][i2] = pt1020[i2];
106 +        for(int i2 = 0; i2 < 4; i2++) fRMSCut[2][i2] = pt2030[i2];
107 +        for(int i2 = 0; i2 < 4; i2++) fRMSCut[3][i2] = pt3050[i2];
108 +      }
109 +    }
110 +    return;
111 +  }
112 +  
113 +  
114 +  fLowPtReader   = 0;
115 +  fLowPtReader   = new TMVA::Reader( "!Color:!Silent:Error" );  
116 +  fLowPtReader->AddVariable( "nvtx"     , &fNVtx      );
117 +  if(fType != k53) fLowPtReader->AddVariable( "jetPt"    , &fJPt1      );  
118 +  if(fType != k53) fLowPtReader->AddVariable( "jetEta"   , &fJEta1     );
119 +  if(fType != k53) fLowPtReader->AddVariable( "jetPhi"   , &fJPhi1     );            
120 +  fLowPtReader->AddVariable( "dZ"       , &fJDZ1      );
121 +  fLowPtReader->AddVariable( "d0"       , &fJD01      );
122 +  fLowPtReader->AddVariable( "beta"     , &fBeta      );
123 +  fLowPtReader->AddVariable( "betaStar" , &fBetaStar  );
124 +  fLowPtReader->AddVariable( "nCharged" , &fNCharged  );
125 +  fLowPtReader->AddVariable( "nNeutrals", &fNNeutrals );
126 +  if(fType != k53 && fType != k53MET) fLowPtReader->AddVariable( "dRMean"   , &fDRMean    );
127 +  if(fType == k53 || fType == k53MET) fLowPtReader->AddVariable( "dR2Mean"  , &fDR2Mean   );
128 +  if(fType == k53 || fType == k53MET) fLowPtReader->AddVariable( "ptD"      , &fPtD       );
129 +  fLowPtReader->AddVariable( "frac01"   , &fFrac01    );
130 +  fLowPtReader->AddVariable( "frac02"   , &fFrac02    );
131 +  fLowPtReader->AddVariable( "frac03"   , &fFrac03    );
132 +  fLowPtReader->AddVariable( "frac04"   , &fFrac04    );
133 +  fLowPtReader->AddVariable( "frac05"   , &fFrac05    );
134 +  
135    fReader        = 0;
136    fReader        = new TMVA::Reader( "!Color:!Silent:Error" );  
137    if (fType == kBaseline) {
# Line 76 | Line 152 | void JetIDMVA::Initialize( JetIDMVA::Cut
152      fReader->AddVariable( "frac04"   , &fFrac04    );
153      fReader->AddVariable( "frac05"   , &fFrac05    );
154    }
155 <  fReader->BookMVA(fLowPtMethodName  , iLowPtWeights );
155 >  if (fType == k42) {
156 >    fReader->AddVariable( "frac01"   , &fFrac01    );
157 >    fReader->AddVariable( "frac02"   , &fFrac02    );
158 >    fReader->AddVariable( "frac03"   , &fFrac03    );
159 >    fReader->AddVariable( "frac04"   , &fFrac04    );
160 >    fReader->AddVariable( "frac05"   , &fFrac05    );
161 >    fReader->AddVariable( "nvtx"     , &fNVtx      );
162 >    fReader->AddVariable( "nNeutrals", &fNNeutrals );
163 >    fReader->AddVariable( "beta"     , &fBeta      );
164 >    fReader->AddVariable( "betaStar" , &fBetaStar  );
165 >    fReader->AddVariable( "dZ"       , &fJDZ1      );
166 >    fReader->AddVariable( "nCharged" , &fNCharged  );
167 >    fReader->AddSpectator( "jetPt"    , &fJPt1      );  
168 >    fReader->AddSpectator( "jetEta"   , &fJEta1     );
169 >  }
170 >  if (fType == k52) {
171 >    fReader->AddVariable( "frac01"   , &fFrac01    );
172 >    fReader->AddVariable( "frac02"   , &fFrac02    );
173 >    fReader->AddVariable( "frac03"   , &fFrac03    );
174 >    fReader->AddVariable( "frac04"   , &fFrac04    );
175 >    fReader->AddVariable( "frac05"   , &fFrac05    );
176 >    fReader->AddVariable( "dR2Mean"  , &fDR2Mean   );
177 >    fReader->AddVariable( "nvtx"     , &fNVtx      );
178 >    fReader->AddVariable( "nNeutrals", &fNNeutrals );
179 >    fReader->AddVariable( "beta"     , &fBeta      );
180 >    fReader->AddVariable( "betaStar" , &fBetaStar  );
181 >    fReader->AddVariable( "dZ"       , &fJDZ1      );
182 >    fReader->AddVariable( "nCharged" , &fNCharged  );
183 >    fReader->AddSpectator( "jetPt"    , &fJPt1      );  
184 >    fReader->AddSpectator( "jetEta"   , &fJEta1     );
185 >  }
186 >  if (fType == k53) {
187 >    fReader->AddVariable( "nvtx"     , &fNVtx      );
188 >    fReader->AddVariable( "dZ"       , &fJDZ1      );
189 >    fReader->AddVariable( "d0"       , &fJD01      );
190 >    fReader->AddVariable( "beta"     , &fBeta      );
191 >    fReader->AddVariable( "betaStar" , &fBetaStar  );
192 >    fReader->AddVariable( "nCharged" , &fNCharged  );
193 >    fReader->AddVariable( "nNeutrals", &fNNeutrals );
194 >    fReader->AddVariable( "dR2Mean"  , &fDRMean    );
195 >    fReader->AddVariable( "ptD"      , &fPtD       );
196 >    fReader->AddVariable( "frac01"   , &fFrac01    );
197 >    fReader->AddVariable( "frac02"   , &fFrac02    );
198 >    fReader->AddVariable( "frac03"   , &fFrac03    );
199 >    fReader->AddVariable( "frac04"   , &fFrac04    );
200 >    fReader->AddVariable( "frac05"   , &fFrac05    );
201 >    fReader->AddSpectator( "jetPt"   , &fJPt1      );  
202 >    fReader->AddSpectator( "jetEta"  , &fJEta1     );
203 >    fReader->AddSpectator( "jetPhi"  , &fJPhi1     );  
204 >  }
205 >  if (fType == k53MET) {
206 >    fReader->AddVariable( "nvtx"     , &fNVtx      );
207 >    fReader->AddVariable( "jetPt"    , &fJPt1      );  
208 >    fReader->AddVariable( "jetEta"   , &fJEta1     );
209 >    fReader->AddVariable( "jetPhi"   , &fJPhi1     );  
210 >    fReader->AddVariable( "dZ"       , &fJDZ1      );
211 >    fReader->AddVariable( "d0"       , &fJD01      );
212 >    fReader->AddVariable( "beta"     , &fBeta      );
213 >    fReader->AddVariable( "betaStar" , &fBetaStar  );
214 >    fReader->AddVariable( "nCharged" , &fNCharged  );
215 >    fReader->AddVariable( "nNeutrals", &fNNeutrals );
216 >    fReader->AddVariable( "dR2Mean"  , &fDRMean    );
217 >    fReader->AddVariable( "ptD"      , &fPtD       );
218 >    fReader->AddVariable( "frac01"   , &fFrac01    );
219 >    fReader->AddVariable( "frac02"   , &fFrac02    );
220 >    fReader->AddVariable( "frac03"   , &fFrac03    );
221 >    fReader->AddVariable( "frac04"   , &fFrac04    );
222 >    fReader->AddVariable( "frac05"   , &fFrac05    );
223 >  }
224 >  if (fType == kQGP) {
225 >    fReader->AddVariable( "nvtx"      , &fNVtx       );
226 >    fReader->AddVariable( "jetPt"     , &fJPt1       );  
227 >    fReader->AddVariable( "jetEta"    , &fJEta1      );
228 >    fReader->AddVariable( "jetPhi"    , &fJPhi1      );            
229 >    fReader->AddVariable( "beta"      , &fBeta      );
230 >    fReader->AddVariable( "betaStar"  , &fBetaStar  );
231 >    fReader->AddVariable( "nParticles", &fNNeutrals );
232 >    fReader->AddVariable( "nCharged"  , &fNCharged  );
233 >    fReader->AddVariable( "dRMean"    , &fDRMean    );
234 >    fReader->AddVariable( "ptD"       , &fPtD       );
235 >    fReader->AddVariable( "frac01"    , &fFrac01    );
236 >    fReader->AddVariable( "frac02"    , &fFrac02    );
237 >    fReader->AddVariable( "frac03"    , &fFrac03    );
238 >    fReader->AddVariable( "frac04"    , &fFrac04    );
239 >    fReader->AddVariable( "frac05"    , &fFrac05    );
240 >  }
241 >
242 >  fLowPtReader->BookMVA(fLowPtMethodName  , iLowPtWeights );
243    fReader->BookMVA(fHighPtMethodName , iHighPtWeights );
244    std::cout << "Jet ID MVA Initialization\n";
245    std::cout << "MethodName : " << fLowPtMethodName << " , type == " << fType << std::endl;
246  
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;
247   }
248  
249   //--------------------------------------------------------------------------------------------------
# Line 117 | Line 263 | Double_t JetIDMVA::MVAValue(
263                              Float_t iFrac02  ,
264                              Float_t iFrac03  ,
265                              Float_t iFrac04  ,
266 <                            Float_t iFrac05  
266 >                            Float_t iFrac05  ,
267 >                            Float_t iDR2Mean ,
268 >                            Float_t iPtD
269                              ){
270    
271    if(!fIsInitialized) {
# Line 136 | Line 284 | Double_t JetIDMVA::MVAValue(
284    fNCharged  = iNCharged;
285    fNNeutrals = iNNeutrals;
286    fDRMean    = iDRMean;
287 +  fPtD       = iPtD;
288    fFrac01    = iFrac01;
289    fFrac02    = iFrac02;
290    fFrac03    = iFrac03;
291    fFrac04    = iFrac04;
292    fFrac05    = iFrac05;
293 +  fDR2Mean   = iDR2Mean;
294  
295    Double_t lMVA = -9999;  
296 <  if(iJPt1 < 10) lMVA = fReader->EvaluateMVA( fLowPtMethodName  );
296 >  if(iJPt1 < 10) lMVA = fLowPtReader->EvaluateMVA( fLowPtMethodName  );
297    if(iJPt1 > 10) lMVA = fReader->EvaluateMVA( fHighPtMethodName );
298  
299    return lMVA;
300   }
301   //--------------------------------------------------------------------------------------------------
302 + Bool_t JetIDMVA::passPt(const PFJet *iJet, FactorizedJetCorrector *iJetCorrector,
303 +                        const PileupEnergyDensityCol *iPileupEnergyDensity,
304 +                        RhoUtilities::RhoType type) {
305 +  if(iJetCorrector == 0) return (iJet->Pt() > fJetPtMin);
306 +  double lPt  = correctedPt(iJet,                  iJetCorrector,iPileupEnergyDensity,type);
307 +  if(lPt < fJetPtMin)                         return false;
308 +  return true;
309 + }
310 + //--------------------------------------------------------------------------------------------------
311   Bool_t JetIDMVA::pass(const PFJet *iJet,const Vertex *iVertex,const VertexCol *iVertices,
312                        FactorizedJetCorrector *iJetCorrector,
313 <                      const PileupEnergyDensityCol *iPileupEnergyDensity) {
313 >                      const PileupEnergyDensityCol *iPileupEnergyDensity,
314 >                      RhoUtilities::RhoType type) {
315    
316    if(!JetTools::passPFLooseId(iJet))                 return false;
317 <  if(iJet->Pt() < fJetPtMin)                         return false;
158 <  if(fabs(iJet->Eta()) > 4.99)                       return true; //==> Castor
159 <  //if(iJet->Pt() > 50)                                return true; //==> we can raise this
317 >  if(fabs(iJet->Eta()) > 4.99)                       return false;
318    
319    double lMVA = MVAValue   (iJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity);
320 <  double lPt  = correctedPt(iJet,                  iJetCorrector,iPileupEnergyDensity);
321 <
320 >  double lPt  = correctedPt(iJet,                  iJetCorrector,iPileupEnergyDensity,type);
321 >  if(lPt < fJetPtMin)                         return false;
322 >  
323    int lPtId = 0;
324 <  if(lPt > 10 && iJet->Pt() < 20) lPtId = 1;
325 <  if(lPt > 20 && iJet->Pt() < 30) lPtId = 2;
324 >  if(lPt > 10 && lPt < 20) lPtId = 1;
325 >  if(lPt > 20 && lPt < 30) lPtId = 2;
326    if(lPt > 30                   ) lPtId = 3;
327    
328    int lEtaId = 0;
# Line 174 | Line 333 | Bool_t JetIDMVA::pass(const PFJet *iJet,
333    double lMVACut = fMVACut[lPtId][lEtaId];
334    if(lMVA < lMVACut) return false;
335    return true;
336 <   //if( fabs(JetTools::impactParameter(iJet,iVertex,true)) < 0.2) return true;
337 <  //if(correctedPt(iJet,iJetCorrector,iPileupEnergyDensity) < fJetPtMin && iJet->TrackCountingHighEffBJetTagsDisc() == -100) return false;
338 <  //This line is a bug in the Met training
339 <  //if(lMVA < -0.8)                            return false;
340 <  //if(lMVA < -0.5 && fabs(iJet->Eta()) > 3.0) return false;
336 > }
337 > //--------------------------------------------------------------------------------------------------
338 > Bool_t JetIDMVA::passCut(const PFJet *iJet,const Vertex *iVertex,const VertexCol *iVertices) {
339 >  if(!JetTools::passPFLooseId(iJet))                 return false;
340 >  if(iJet->Pt()        < fJetPtMin) return false;
341 >  if(fabs(iJet->Eta()) > 4.99)      return false;
342 >  //if(fType == kCut) passCut(iJet,iVertex,iVertices);
343 >
344 >  double lPt = iJet->Pt();
345 >  int lPtId = 0;
346 >  if(lPt > 10 && lPt < 20) lPtId = 1;
347 >  if(lPt > 20 && lPt < 30) lPtId = 2;
348 >  if(lPt > 30                   ) lPtId = 3;
349 >  
350 >  int lEtaId = 0;
351 >  if(fabs(iJet->Eta()) > 2.5  && fabs(iJet->Eta()) < 2.75) lEtaId = 1;
352 >  if(fabs(iJet->Eta()) > 2.75 && fabs(iJet->Eta()) < 3.0 ) lEtaId = 2;
353 >  if(fabs(iJet->Eta()) > 3.0  && fabs(iJet->Eta()) < 5.0 ) lEtaId = 3;
354 >  float betaStarModified = JetTools::betaStarClassic(iJet,iVertex,iVertices)/log(iVertices ->GetEntries()-0.64);
355 >  float dR2Mean          = JetTools::dR2Mean(iJet,-1);
356 >  
357 >  if(betaStarModified < fBetaStarCut[lPtId][lEtaId] &&
358 >     dR2Mean          < fRMSCut     [lPtId][lEtaId]
359 >     ) return true;
360 >  
361 >  return false;
362   }
363   //--------------------------------------------------------------------------------------------------
364   Bool_t JetIDMVA::pass(const PFJet *iJet,const Vertex *iVertex,const VertexCol *iVertices) {
365    if(!JetTools::passPFLooseId(iJet))                 return false;
366    if(iJet->Pt()        < fJetPtMin) return false;
367 <  //if(iJet->Pt()        > 50)        return true; //==> we can raise this
368 <  if(fabs(iJet->Eta()) > 4.99)     return true; //==> Castor
367 >  if(fabs(iJet->Eta()) > 4.99)      return false;
368 >  if(fType == kCut) return passCut(iJet,iVertex,iVertices);
369    double lMVA = MVAValue(iJet,iVertex,iVertices);
370    
371    int lPtId = 0;
# Line 231 | Line 411 | Double_t JetIDMVA::MVAValue(const PFJet
411    fNNeutrals = iJet->NeutralMultiplicity();
412  
413    fDRMean    = JetTools::dRMean(iJet,-1);
414 +  fDR2Mean   = JetTools::dR2Mean(iJet,-1);
415 +  fPtD       = JetTools::W(iJet,-1,0);  
416    fFrac01    = JetTools::frac  (iJet,0.1,0. ,-1);
417    fFrac02    = JetTools::frac  (iJet,0.2,0.1,-1);
418    fFrac03    = JetTools::frac  (iJet,0.3,0.2,-1);
# Line 238 | Line 420 | Double_t JetIDMVA::MVAValue(const PFJet
420    fFrac05    = JetTools::frac  (iJet,0.5,0.4,-1);
421  
422    double lMVA = 0;
423 <  if(fJPt1 < 10) lMVA = fReader->EvaluateMVA( fLowPtMethodName  );
423 >  if(fJPt1 < 10) lMVA = fLowPtReader->EvaluateMVA( fLowPtMethodName  );
424    if(fJPt1 > 10) lMVA = fReader->EvaluateMVA( fHighPtMethodName );
425    if (printDebug == kTRUE) {
426      std::cout << "Debug Jet MVA: "
# Line 253 | Line 435 | Double_t JetIDMVA::MVAValue(const PFJet
435                << fNCharged  << " "
436                << fNNeutrals << " "
437                << fDRMean    << " "
438 +              << fPtD       << " "
439                << fFrac01    << " "
440                << fFrac02    << " "
441                << fFrac03    << " "
442                << fFrac04    << " "
443 <              << fFrac05    
443 >              << fFrac05    << " "
444 >              << fDR2Mean    
445                << " === : === "
446                << lMVA << " "    
447                << std::endl;
# Line 285 | Line 469 | Double_t JetIDMVA::MVAValue(const PFJet
469    fBetaStar  = JetTools::betaStar(iJet,iVertex,iVertices,fDZCut);
470    fNCharged  = iJet->ChargedMultiplicity();
471    fNNeutrals = iJet->NeutralMultiplicity();
472 +  fPtD       = JetTools::W(iJet,-1,0);  
473 +  fDRMean    = JetTools::dRMean (iJet,-1);
474 +  fDR2Mean   = JetTools::dR2Mean(iJet,-1);
475 +  fFrac01    = JetTools::frac   (iJet,0.1,0. ,-1);
476 +  fFrac02    = JetTools::frac   (iJet,0.2,0.1,-1);
477 +  fFrac03    = JetTools::frac   (iJet,0.3,0.2,-1);
478 +  fFrac04    = JetTools::frac   (iJet,0.4,0.3,-1);
479 +  fFrac05    = JetTools::frac   (iJet,0.5,0.4,-1);
480 +
481 +  double lMVA = 0;
482 +  if(fJPt1 < 10) lMVA = fLowPtReader->EvaluateMVA( fLowPtMethodName  );
483 +  if(fJPt1 > 10) lMVA = fReader     ->EvaluateMVA( fHighPtMethodName );
484 +  
485 +  if (printDebug == kTRUE) {
486 +    std::cout << "Debug Jet MVA: "
487 +              << fNVtx      << " "
488 +              << fJPt1      << " "
489 +              << fJEta1     << " "
490 +              << fJPhi1     << " "
491 +              << fJD01      << " "
492 +              << fJDZ1      << " "
493 +              << fBeta      << " "
494 +              << fBetaStar  << " "
495 +              << fNCharged  << " "
496 +              << fNNeutrals << " "
497 +              << fDRMean    << " "
498 +              << fPtD       << " "
499 +              << fFrac01    << " "
500 +              << fFrac02    << " "
501 +              << fFrac03    << " "
502 +              << fFrac04    << " "
503 +              << fFrac05    << " "
504 +              << fDR2Mean    
505 +              << " === : === "
506 +              << lMVA << " "    
507 +              << std::endl;
508 +  }
509 +
510 +  return lMVA;
511 + }
512 + //--------------------------------------------------------------------------------------------------
513 + Double_t* JetIDMVA::QGValue(const PFJet *iJet,const Vertex *iVertex,const VertexCol *iVertices, //Vertex here is the PV
514 +                            FactorizedJetCorrector *iJetCorrector,
515 +                            const PileupEnergyDensityCol *iPileupEnergyDensity,
516 +                            Bool_t printDebug) {
517 +
518 +  Double_t *lId = new double[3];
519 +  lId[0] = -2;
520 +  lId[1] = -2;
521 +  lId[2] = -2;
522 +  if (!fIsInitialized) {
523 +    std::cout << "Error: JetIDMVA not properly initialized.\n";
524 +    return lId;
525 +  }
526 +  if(!JetTools::passPFLooseId(iJet)) return lId;
527 +
528 +  fJPt1       = correctedPt(iJet,iJetCorrector,iPileupEnergyDensity);
529 +  if(fJPt1 < 20) return lId;
530 +
531 +  //set all input variables
532 +  fNVtx       = iVertices->GetEntries();
533 +  fJEta1      = iJet->RawMom().Eta();
534 +  fJPhi1      = iJet->RawMom().Phi();
535 +  fJD01       = JetTools::impactParameter(iJet,iVertex);  
536 +  fJDZ1       = JetTools::impactParameter(iJet,iVertex,true);
537 +  fBeta       = JetTools::Beta(iJet,iVertex,fDZCut);
538 +  fBetaStar   = JetTools::betaStar(iJet,iVertex,iVertices,fDZCut);
539 +  fNCharged   = iJet->ChargedMultiplicity();
540 +  fNNeutrals  = iJet->NeutralMultiplicity();
541 +  fNParticles = fNCharged+fNNeutrals;
542 +  fPtD        = JetTools::W(iJet,-1,0);  
543  
544    fDRMean    = JetTools::dRMean(iJet,-1);
545 +  fDR2Mean   = JetTools::dR2Mean(iJet,-1);
546    fFrac01    = JetTools::frac  (iJet,0.1,0. ,-1);
547    fFrac02    = JetTools::frac  (iJet,0.2,0.1,-1);
548    fFrac03    = JetTools::frac  (iJet,0.3,0.2,-1);
# Line 294 | Line 550 | Double_t JetIDMVA::MVAValue(const PFJet
550    fFrac05    = JetTools::frac  (iJet,0.5,0.4,-1);
551  
552    double lMVA = 0;
553 <  if(fJPt1 < 10) lMVA = fReader->EvaluateMVA( fLowPtMethodName  );
554 <  if(fJPt1 > 10) lMVA = fReader->EvaluateMVA( fHighPtMethodName );
555 <  
553 >  lId[0] = fReader->EvaluateMulticlass( fHighPtMethodName )[0];
554 >  lId[1] = fReader->EvaluateMulticlass( fHighPtMethodName )[1];
555 >  lId[2] = fReader->EvaluateMulticlass( fHighPtMethodName )[2];
556    if (printDebug == kTRUE) {
557      std::cout << "Debug Jet MVA: "
558                << fNVtx      << " "
# Line 314 | Line 570 | Double_t JetIDMVA::MVAValue(const PFJet
570                << fFrac02    << " "
571                << fFrac03    << " "
572                << fFrac04    << " "
573 <              << fFrac05    
573 >              << fFrac05    << " "
574 >              << fDRMean    
575                << " === : === "
576                << lMVA << " "    
577                << std::endl;
578    }
579 <
323 <  return lMVA;
579 >  return lId;
580   }
581 < Double_t JetIDMVA::correctedPt(const PFJet *iJet, FactorizedJetCorrector *iJetCorrector,const PileupEnergyDensityCol *iPUEnergyDensity) {
581 > Double_t JetIDMVA::correctedPt(const PFJet *iJet, FactorizedJetCorrector *iJetCorrector,
582 >                               const PileupEnergyDensityCol *iPUEnergyDensity,
583 >                               RhoUtilities::RhoType type,int iId) {
584 >  Double_t Rho = 0.0;
585 >  switch(type) {
586 >  case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
587 >    Rho = iPUEnergyDensity->At(0)->Rho();
588 >    break;
589 >  case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
590 >    Rho = iPUEnergyDensity->At(0)->RhoLowEta();
591 >    break;
592 >  case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
593 >    Rho = iPUEnergyDensity->At(0)->RhoRandom();
594 >    break;
595 >  case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
596 >    Rho = iPUEnergyDensity->At(0)->RhoRandomLowEta();
597 >    break;
598 >  case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
599 >    Rho = iPUEnergyDensity->At(0)->RhoKt6PFJets();
600 >    break;
601 >  default:
602 >    // use the old default
603 >    Rho = iPUEnergyDensity->At(0)->Rho();
604 >    break;
605 >  }
606 >    
607    const FourVectorM rawMom = iJet->RawMom();
608    iJetCorrector->setJetEta(rawMom.Eta());
609    iJetCorrector->setJetPt (rawMom.Pt());
610    iJetCorrector->setJetPhi(rawMom.Phi());
611    iJetCorrector->setJetE  (rawMom.E());
612 <  iJetCorrector->setRho   (iPUEnergyDensity->At(0)->RhoHighEta());
612 >  iJetCorrector->setRho   (Rho);
613    iJetCorrector->setJetA  (iJet->JetArea());
614    iJetCorrector->setJetEMF(-99.0);    
615 <  Double_t correction = iJetCorrector->getCorrection();
615 >  Double_t correction = 1.;
616 >  if(iId < 0 || iId == 100) correction = iJetCorrector->getCorrection();
617 >  std::vector<float> lCorrections; if(iId != -1 && iId != 100) lCorrections = iJetCorrector->getSubCorrections();
618 >  if(iId > -1 && iId < int(lCorrections.size())) correction = lCorrections[iId];
619 >  if(iId == 100) {
620 >    iJetCorrector->setJetEta(rawMom.Eta());
621 >    iJetCorrector->setJetPt (rawMom.Pt());
622 >    iJetCorrector->setJetPhi(rawMom.Phi());
623 >    iJetCorrector->setJetE  (rawMom.E());
624 >    iJetCorrector->setRho   (Rho);
625 >    iJetCorrector->setJetA  (iJet->JetArea());
626 >    iJetCorrector->setJetEMF(-99.0);
627 >    lCorrections = iJetCorrector->getSubCorrections();
628 >    double correction2 = 1;
629 >    correction2 *= lCorrections[0];
630 >    correction = correction-correction2;
631 >  }
632 >
633    return rawMom.Pt()*correction;
634   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines