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

Comparing UserCode/MitPhysics/Mods/src/MuonIDMod.cc (file contents):
Revision 1.41 by ceballos, Fri Mar 11 15:13:09 2011 UTC vs.
Revision 1.64 by sixie, Mon Jan 23 20:27:14 2012 UTC

# Line 19 | Line 19 | ClassImp(mithep::MuonIDMod)
19    fNonIsolatedMuonsName("random"),  
20    fNonIsolatedElectronsName("random"),  
21    fVertexName(ModNames::gkGoodVertexesName),
22 +  fBeamSpotName(Names::gkBeamSpotBrn),
23    fTrackName(Names::gkTrackBrn),
24    fPFCandidatesName(Names::gkPFCandidatesBrn),
25 <  fMuonIDType("WWMuId"),
26 <  fMuonIsoType("TrackCaloSliding"),
25 >  fMuonIDType("WWMuIdV3"),
26 >  fMuonIsoType("PFIso"),
27    fMuonClassType("Global"),  
28    fTrackIsolationCut(3.0),
29    fCaloIsolationCut(3.0),
30    fCombIsolationCut(0.15),
31 +  fCombRelativeIsolationCut(0.15),
32 +  fPFIsolationCut(-1.0),
33    fMuonPtMin(10),
34    fApplyD0Cut(kTRUE),
35 +  fApplyDZCut(kTRUE),
36    fD0Cut(0.020),
37 +  fDZCut(0.10),
38 +  fWhichVertex(-1),
39    fEtaCut(2.4),
34  fReverseIsoCut(kFALSE),
35  fReverseD0Cut(kFALSE),
40    fMuIDType(kIdUndef),
41    fMuIsoType(kIsoUndef),
42    fMuClassType(kClassUndef),
43    fMuons(0),
44    fVertices(0),
45 +  fBeamSpot(0),
46    fTracks(0),
47    fPFCandidates(0),
48 +  fIntRadius(0.0),
49    fNonIsolatedMuons(0),
50    fNonIsolatedElectrons(0),
51    fPileupEnergyDensityName(Names::gkPileupEnergyDensityBrn),
52 <  fPileupEnergyDensity(0)
52 >  fPileupEnergyDensity(0),
53 >  fMuonTools(0),
54 >  fMuonIDMVA(0),
55 >  fMuonMVAWeights_Subdet0Pt10To14p5(""),
56 >  fMuonMVAWeights_Subdet1Pt10To14p5(""),
57 >  fMuonMVAWeights_Subdet0Pt14p5To20(""),
58 >  fMuonMVAWeights_Subdet1Pt14p5To20(""),
59 >  fMuonMVAWeights_Subdet0Pt20ToInf(""),
60 >  fMuonMVAWeights_Subdet1Pt20ToInf("")
61   {
62    // Constructor.
63   }
# Line 59 | Line 73 | void MuonIDMod::Process()
73    else {
74      fMuons = GetObjThisEvt<MuonOArr>(fMuonBranchName);
75    }
76 +  LoadEventObject(fBeamSpotName, fBeamSpot);
77    LoadEventObject(fTrackName, fTracks);
78    LoadEventObject(fPFCandidatesName, fPFCandidates);
79 <  if(fMuIsoType == kTrackCaloSliding) {
79 >  if(fMuIsoType == kTrackCaloSliding ||
80 >     fMuIsoType == kCombinedRelativeConeAreaCorrected ||
81 >     fMuIsoType == kPFIsoEffectiveAreaCorrected ||
82 >     fMuIsoType == kMVAIso_BDTG_IDIso  
83 >    ) {
84      LoadEventObject(fPileupEnergyDensityName, fPileupEnergyDensity);
85    }
86 +
87    MuonOArr *CleanMuons = new MuonOArr;
88    CleanMuons->SetName(fCleanMuonsName);
89  
# Line 94 | Line 114 | void MuonIDMod::Process()
114            eta = TMath::Abs(mu->Eta());
115          }
116          break;
117 +      case kGlobalTracker:
118 +        pass = (mu->HasGlobalTrk() && mu->GlobalTrk()->Chi2()/mu->GlobalTrk()->Ndof() < 10 &&
119 +               (mu->NSegments() > 1 || mu->NMatches() > 1) && mu->NValidHits() > 0) ||
120 +               (mu->IsTrackerMuon() &&
121 +                mu->Quality().Quality(MuonQuality::TMLastStationTight));
122 +        if (pass) {
123 +          pt  = mu->TrackerTrk()->Pt();
124 +          eta = TMath::Abs(mu->TrackerTrk()->Eta());
125 +        }
126 +        else {
127 +          pt  = mu->Pt();
128 +          eta = TMath::Abs(mu->Eta());
129 +        }
130 +        break;
131        case kSta:
132          pass = mu->HasStandaloneTrk();
133          if (pass) {
# Line 176 | Line 210 | void MuonIDMod::Process()
210                   RChi2 < 10.0 &&
211                   mu->Quality().Quality(MuonQuality::GlobalMuonPromptTight);
212          break;
213 <      case kWWMuId:
213 >      case kWWMuIdV1:
214          idpass = mu->BestTrk() != 0 &&
215                   mu->BestTrk()->NHits() > 10 &&
216 +                 mu->BestTrk()->NPixelHits() > 0 &&
217 +                 mu->BestTrk()->PtErr()/mu->BestTrk()->Pt() < 0.1 &&
218                   RChi2 < 10.0 &&
219                  (mu->NSegments() > 1 || mu->NMatches() > 1) &&
220 +                 mu->Quality().Quality(MuonQuality::GlobalMuonPromptTight);
221 +        break;
222 +      case kWWMuIdV2:
223 +        idpass = mu->BestTrk() != 0 &&
224 +                 mu->BestTrk()->NHits() > 10 &&
225                   mu->BestTrk()->NPixelHits() > 0 &&
185                 mu->Quality().Quality(MuonQuality::GlobalMuonPromptTight) &&
226                   mu->BestTrk()->PtErr()/mu->BestTrk()->Pt() < 0.1;
227          break;
228 +      case kWWMuIdV3:
229 +        idpass = mu->BestTrk() != 0 &&
230 +                 mu->BestTrk()->NHits() > 10 &&
231 +                 mu->BestTrk()->NPixelHits() > 0 &&
232 +                 mu->BestTrk()->PtErr()/mu->BestTrk()->Pt() < 0.1 &&
233 +                 mu->TrkKink() < 20.0;
234 +        break;
235 +      case kMVAID_BDTG_IDIso:
236 +        {
237 +          Bool_t passDenominatorM2 = (mu->BestTrk() != 0 &&
238 +                                      mu->BestTrk()->NHits() > 10 &&
239 +                                      mu->BestTrk()->NPixelHits() > 0 &&
240 +                                      mu->BestTrk()->PtErr()/mu->BestTrk()->Pt() < 0.1 &&
241 +                                      MuonTools::PassD0Cut(mu, fVertices, 0.20, 0) &&
242 +                                      MuonTools::PassDZCut(mu, fVertices, 0.10, 0) &&
243 +                                      mu->TrkKink() < 20.0
244 +            );  
245 +          idpass =  passDenominatorM2;
246 +          //only evaluate MVA if muon passes M2 denominator to save time
247 +          if (idpass) idpass = PassMuonMVA_BDTG_IdIso(mu, fVertices->At(0), fPileupEnergyDensity);
248 +        }
249 +        break;
250        case kNoId:
251          idpass = kTRUE;
252          break;
# Line 208 | Line 270 | void MuonIDMod::Process()
270          break;
271        case kTrackCaloSliding:
272          {
211          //Double_t beta = IsolationTools::BetaM(fTracks, mu, fVertices->At(0), 0.0, 0.2, 0.3, 0.02);
212          //if(beta == 0) beta = 1.0;
273            const PileupEnergyDensity *rho =  fPileupEnergyDensity->At(0);
274 <          Double_t totalIso =  mu->IsoR03SumPt() + TMath::Max(mu->IsoR03EmEt() + mu->IsoR03HadEt() - rho->Rho() * TMath::Pi() * 0.3 * 0.3, 0.0);
275 <          if (totalIso < (mu->Pt()*fCombIsolationCut) )
276 <            isocut = kTRUE;
277 <
278 <          if     (fReverseIsoCut == kTRUE &&
279 <                  isocut == kFALSE && totalIso < 10)
280 <            isocut = kTRUE;
281 <          else if(fReverseIsoCut == kTRUE)
222 <            isocut = kFALSE;
274 >          Double_t totalIso =  mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt() - rho->Rho() * TMath::Pi() * 0.3 * 0.3 ;
275 >          // trick to change the signal region cut
276 >          double theIsoCut = fCombIsolationCut;
277 >          if(theIsoCut < 0.20){
278 >            if(mu->Pt() >  20.0) theIsoCut = 0.15;
279 >            else                 theIsoCut = 0.10;
280 >          }
281 >          if (totalIso < (mu->Pt()*theIsoCut)) isocut = kTRUE;
282          }
283          break;
284        case kTrackCaloSlidingNoCorrection:
# Line 227 | Line 286 | void MuonIDMod::Process()
286            Double_t totalIso =  1.0 * mu->IsoR03SumPt() +
287                                 1.0 * mu->IsoR03EmEt()  +
288                                 1.0 * mu->IsoR03HadEt();
289 <          if (totalIso < (mu->Pt()*fCombIsolationCut) )
290 <            isocut = kTRUE;
289 >          // trick to change the signal region cut
290 >          double theIsoCut = fCombIsolationCut;
291 >          if(theIsoCut < 0.20){
292 >            if(mu->Pt() >  20.0) theIsoCut = 0.15;
293 >            else                 theIsoCut = 0.10;
294 >          }
295 >          if (totalIso < (mu->Pt()*theIsoCut)) isocut = kTRUE;
296          }
297          break;
298 +      case kCombinedRelativeConeAreaCorrected:
299 +        {
300 +          const PileupEnergyDensity *rho =  fPileupEnergyDensity->At(0);
301 +          Double_t totalIso =  mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt() - rho->Rho() * TMath::Pi() * 0.3 * 0.3 ;
302 +          double theIsoCut = fCombRelativeIsolationCut;
303 +          if (totalIso < (mu->Pt()*theIsoCut)) isocut = kTRUE;
304 +        }
305 +        break;          
306 +      case kCombinedRelativeEffectiveAreaCorrected:
307 +        {
308 +          Double_t tmpRho = 0;
309 +          if (!(TMath::IsNaN(fPileupEnergyDensity->At(0)->Rho()) || isinf(fPileupEnergyDensity->At(0)->Rho())))
310 +            tmpRho = fPileupEnergyDensity->At(0)->Rho();
311 +          
312 +          isocut = ( mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt()
313 +                     -  tmpRho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso03, mu->Eta())
314 +                     -  tmpRho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso03, mu->Eta())
315 +            ) < (mu->Pt()* 0.40);
316 +        }
317 +        break;          
318        case kPFIso:
319          {
320 <          Double_t beta = IsolationTools::BetaM(fTracks, mu, fVertices->At(0), 0.0, 0.2, 0.3, 0.02);
321 <          if(beta == 0) beta = 1.0;
322 <          Double_t totalIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fVertices->At(0), 0.2, 0.5, 0.3, 0.02, 0, beta, fNonIsolatedMuons, fNonIsolatedElectrons);
323 <          if (totalIso < (mu->Pt()*fCombIsolationCut) )
320 >          Double_t pfIsoCutValue = 9999;
321 >          if(fPFIsolationCut > 0){
322 >            pfIsoCutValue = fPFIsolationCut;
323 >          } else {
324 >            if (mu->AbsEta() < 1.479) {
325 >              if (mu->Pt() > 20) {
326 >                pfIsoCutValue = 0.13;
327 >              } else {
328 >                pfIsoCutValue = 0.06;
329 >              }
330 >            } else {
331 >              if (mu->Pt() > 20) {
332 >                pfIsoCutValue = 0.09;
333 >              } else {
334 >                pfIsoCutValue = 0.05;
335 >              }
336 >            }
337 >          }
338 >          Double_t totalIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fVertices->At(0), 0.1, 1.0, 0.3, 0.0, fIntRadius);
339 >          if (totalIso < (mu->Pt()*pfIsoCutValue) )
340              isocut = kTRUE;
341          }
342          break;
343 +      case kPFIsoEffectiveAreaCorrected:
344 +        {
345 +          Double_t pfIsoCutValue = 9999;
346 +          if(fPFIsolationCut > 0){
347 +            pfIsoCutValue = fPFIsolationCut;
348 +          } else {
349 +            pfIsoCutValue = fPFIsolationCut; //leave it like this for now
350 +          }
351 +          Double_t EffectiveAreaCorrectedPFIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fVertices->At(0), 0.1, 1.0, 0.3, 0.0, fIntRadius)
352 +            - fPileupEnergyDensity->At(0)->Rho() * MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso03, mu->Eta());
353 +          isocut = EffectiveAreaCorrectedPFIso < (mu->Pt() * pfIsoCutValue);
354 +          break;
355 +        }
356        case kPFIsoNoL:
357          {
358            fNonIsolatedMuons     = GetObjThisEvt<MuonCol>(fNonIsolatedMuonsName);
359            fNonIsolatedElectrons = GetObjThisEvt<ElectronCol>(fNonIsolatedElectronsName);
360  
361 <          Double_t beta = IsolationTools::BetaM(fTracks, mu, fVertices->At(0), 0.0, 0.2, 0.3, 0.02);
362 <          if(beta == 0) beta = 1.0;
363 <          Double_t totalIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fVertices->At(0), 0.2, 0.5, 0.3, 0.02, 3, beta, fNonIsolatedMuons, fNonIsolatedElectrons);
364 <          if (totalIso < (mu->Pt()*fCombIsolationCut) )
361 >          Double_t pfIsoCutValue = 9999;
362 >          if(fPFIsolationCut > 0){
363 >            pfIsoCutValue = fPFIsolationCut;
364 >          } else {
365 >            if (mu->AbsEta() < 1.479) {
366 >              if (mu->Pt() > 20) {
367 >                pfIsoCutValue = 0.13;
368 >              } else {
369 >                pfIsoCutValue = 0.06;
370 >              }
371 >            } else {
372 >              if (mu->Pt() > 20) {
373 >                pfIsoCutValue = 0.09;
374 >              } else {
375 >                pfIsoCutValue = 0.05;
376 >              }
377 >            }
378 >          }
379 >          Double_t totalIso =  IsolationTools::PFMuonIsolation(mu, fPFCandidates, fNonIsolatedMuons, fNonIsolatedElectrons, fVertices->At(0), 0.1, 1.0, 0.3, 0.0, fIntRadius);
380 >          if (totalIso < (mu->Pt()*pfIsoCutValue) )
381              isocut = kTRUE;
382          }
383          break;
384 +      case kMVAIso_BDTG_IDIso:
385 +      {
386 +        Double_t tmpRho = 0;
387 +        if (!(TMath::IsNaN(fPileupEnergyDensity->At(0)->Rho()) || isinf(fPileupEnergyDensity->At(0)->Rho())))
388 +          tmpRho = fPileupEnergyDensity->At(0)->Rho();
389 +
390 +        isocut = ( mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt()
391 +                   -  tmpRho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso03, mu->Eta())
392 +                   -  tmpRho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso03, mu->Eta())
393 +          ) < (mu->Pt()* 0.40);
394 +      }
395 +        break;
396        case kNoIso:
397          isocut = kTRUE;
398          break;
# Line 263 | Line 404 | void MuonIDMod::Process()
404      if (isocut == kFALSE)
405        continue;
406  
407 +    // apply d0 cut
408      if (fApplyD0Cut) {
409 <      Bool_t passD0cut = MuonTools::PassD0Cut(mu, fVertices, fD0Cut);
409 >      Bool_t passD0cut = kTRUE;
410 >      if(fD0Cut < 0.05) { // trick to change the signal region cut
411 >        if      (mu->Pt() >  20.0) fD0Cut = 0.02;
412 >        else if (mu->Pt() <= 20.0) fD0Cut = 0.01;
413 >      }
414 >      if(fWhichVertex >= -1) passD0cut = MuonTools::PassD0Cut(mu, fVertices, fD0Cut, fWhichVertex);
415 >      else                   passD0cut = MuonTools::PassD0Cut(mu, fBeamSpot, fD0Cut);
416        if (!passD0cut)
417          continue;
418      }
419  
420 +    // apply dz cut
421 +    if (fApplyDZCut) {
422 +      Bool_t passDZcut = MuonTools::PassDZCut(mu, fVertices, fDZCut, fWhichVertex);
423 +      if (!passDZcut)
424 +        continue;
425 +    }
426 +
427      // add good muon
428      CleanMuons->Add(mu);
429    }
# Line 290 | Line 445 | void MuonIDMod::SlaveBegin()
445    if (fMuonIsoType.CompareTo("PFIsoNoL") != 0) {
446      ReqEventObject(fMuonBranchName, fMuons, kTRUE);
447    }
448 +  ReqEventObject(fBeamSpotName, fBeamSpot, kTRUE);
449    ReqEventObject(fTrackName, fTracks, kTRUE);
450    ReqEventObject(fPFCandidatesName, fPFCandidates, kTRUE);
451 <  if (fMuonIsoType.CompareTo("TrackCaloSliding") == 0) {
451 >  if (fMuonIsoType.CompareTo("TrackCaloSliding") == 0
452 >      || fMuonIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0
453 >      || fMuonIsoType.CompareTo("CombinedRelativeEffectiveAreaCorrected") == 0
454 >       || fMuonIsoType.CompareTo("PFIsoEffectiveAreaCorrected") == 0
455 >      || fMuonIsoType.CompareTo("MVA_BDTG_IDIso") == 0
456 >    ) {
457      ReqEventObject(fPileupEnergyDensityName, fPileupEnergyDensity, kTRUE);
458    }
459  
460 +
461    if (fMuonIDType.CompareTo("WMuId") == 0)
462      fMuIDType = kWMuId;
463    else if (fMuonIDType.CompareTo("ZMuId") == 0)
# Line 304 | Line 466 | void MuonIDMod::SlaveBegin()
466      fMuIDType = kTight;
467    else if (fMuonIDType.CompareTo("Loose") == 0)
468      fMuIDType = kLoose;
469 <  else if (fMuonIDType.CompareTo("WWMuId") == 0)
470 <    fMuIDType = kWWMuId;
469 >  else if (fMuonIDType.CompareTo("WWMuIdV1") == 0)
470 >    fMuIDType = kWWMuIdV1;
471 >  else if (fMuonIDType.CompareTo("WWMuIdV2") == 0)
472 >    fMuIDType = kWWMuIdV2;
473 >  else if (fMuonIDType.CompareTo("WWMuIdV3") == 0)
474 >    fMuIDType = kWWMuIdV3;
475    else if (fMuonIDType.CompareTo("NoId") == 0)
476      fMuIDType = kNoId;
477    else if (fMuonIDType.CompareTo("Custom") == 0) {
478      fMuIDType = kCustomId;
479      SendError(kWarning, "SlaveBegin",
480                "Custom muon identification is not yet implemented.");
481 +  } else if (fMuonIDType.CompareTo("MVA_BDTG_IDIso") == 0) {
482 +    fMuIDType = kMVAID_BDTG_IDIso;
483    } else {
484      SendError(kAbortAnalysis, "SlaveBegin",
485                "The specified muon identification %s is not defined.",
# Line 327 | Line 495 | void MuonIDMod::SlaveBegin()
495      fMuIsoType = kTrackCaloSliding;
496    else if (fMuonIsoType.CompareTo("TrackCaloSlidingNoCorrection") == 0)
497      fMuIsoType = kTrackCaloSlidingNoCorrection;
498 +  else if (fMuonIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0)
499 +    fMuIsoType = kCombinedRelativeConeAreaCorrected;
500 +  else if (fMuonIsoType.CompareTo("CombinedRelativeEffectiveAreaCorrected") == 0)
501 +    fMuIsoType = kCombinedRelativeEffectiveAreaCorrected;
502    else if (fMuonIsoType.CompareTo("PFIso") == 0)
503      fMuIsoType = kPFIso;
504 +  else if (fMuonIsoType.CompareTo("PFIsoEffectiveAreaCorrected") == 0)
505 +    fMuIsoType = kPFIsoEffectiveAreaCorrected;
506    else if (fMuonIsoType.CompareTo("PFIsoNoL") == 0)
507      fMuIsoType = kPFIsoNoL;
508    else if (fMuonIsoType.CompareTo("NoIso") == 0)
# Line 337 | Line 511 | void MuonIDMod::SlaveBegin()
511      fMuIsoType = kCustomIso;
512      SendError(kWarning, "SlaveBegin",
513                "Custom muon isolation is not yet implemented.");
514 +  } else if (fMuonIDType.CompareTo("MVA_BDTG_IDIso") == 0) {
515 +    fMuIsoType = kMVAIso_BDTG_IDIso;
516    } else {
517      SendError(kAbortAnalysis, "SlaveBegin",
518                "The specified muon isolation %s is not defined.",
# Line 348 | Line 524 | void MuonIDMod::SlaveBegin()
524      fMuClassType = kAll;
525    else if (fMuonClassType.CompareTo("Global") == 0)
526      fMuClassType = kGlobal;
527 +  else if (fMuonClassType.CompareTo("GlobalTracker") == 0)
528 +    fMuClassType = kGlobalTracker;
529    else if (fMuonClassType.CompareTo("Standalone") == 0)
530      fMuClassType = kSta;
531    else if (fMuonClassType.CompareTo("TrackerMuon") == 0)
# Line 362 | Line 540 | void MuonIDMod::SlaveBegin()
540                fMuonClassType.Data());
541      return;
542    }
543 +
544 +
545 +  //If we use MVA ID, need to load MVA weights
546 +  if(fMuIsoType == kMVAIso_BDTG_IDIso || fMuIDType == kMVAID_BDTG_IDIso) {
547 +    fMuonTools = new MuonTools();
548 +    fMuonIDMVA = new MuonIDMVA();
549 +    fMuonIDMVA->Initialize("BDTG method",
550 +                           fMuonMVAWeights_Subdet0Pt10To14p5,
551 +                           fMuonMVAWeights_Subdet1Pt10To14p5,
552 +                           fMuonMVAWeights_Subdet0Pt14p5To20,
553 +                           fMuonMVAWeights_Subdet1Pt14p5To20,
554 +                           fMuonMVAWeights_Subdet0Pt20ToInf,
555 +                           fMuonMVAWeights_Subdet1Pt20ToInf,
556 +                           MuonIDMVA::kIDIsoCombinedDetIso);
557 +  }
558 +
559 + }
560 +
561 +
562 + //--------------------------------------------------------------------------------------------------
563 + Bool_t MuonIDMod::PassMuonMVA_BDTG_IdIso(const Muon *mu, const Vertex *vertex,
564 +                                         const PileupEnergyDensityCol *PileupEnergyDensity) const
565 + {
566 +
567 +  const Track *muTrk=0;
568 +  if(mu->HasTrackerTrk())         { muTrk = mu->TrackerTrk();    }
569 +  else if(mu->HasStandaloneTrk()) { muTrk = mu->StandaloneTrk(); }
570 +  
571 +  Double_t MVAValue = fMuonIDMVA->MVAValue(mu,vertex,fMuonTools,fPFCandidates,PileupEnergyDensity);
572 +
573 +  Int_t subdet = 0;
574 +  if (fabs(muTrk->Eta()) < 1.479) subdet = 0;
575 +  else subdet = 1;
576 +  Int_t ptBin = 0;
577 +  if (muTrk->Pt() > 14.5) ptBin = 1;
578 +  if (muTrk->Pt() > 20.0) ptBin = 2;
579 +
580 +  Int_t MVABin = -1;
581 +  if (subdet == 0 && ptBin == 0) MVABin = 0;
582 +  if (subdet == 1 && ptBin == 0) MVABin = 1;
583 +  if (subdet == 0 && ptBin == 1) MVABin = 2;
584 +  if (subdet == 1 && ptBin == 1) MVABin = 3;
585 +  if (subdet == 0 && ptBin == 2) MVABin = 4;
586 +  if (subdet == 1 && ptBin == 2) MVABin = 5;
587 +
588 +  Double_t MVACut = -999;
589 +  if (MVABin == 0) MVACut = -0.5618;
590 +  if (MVABin == 1) MVACut = -0.3002;
591 +  if (MVABin == 2) MVACut = -0.4642;
592 +  if (MVABin == 3) MVACut = -0.2478;
593 +  if (MVABin == 4) MVACut = 0.1706;
594 +  if (MVABin == 5) MVACut = 0.8146;
595 +
596 +  if (MVAValue > MVACut) return kTRUE;
597 +  return kFALSE;
598   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines