ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitHzz4l/LeptonSelection/src/IsolationSelection.cc
(Generate patch)

Comparing UserCode/MitHzz4l/LeptonSelection/src/IsolationSelection.cc (file contents):
Revision 1.18 by khahn, Sat May 12 03:00:14 2012 UTC vs.
Revision 1.19 by khahn, Mon May 14 17:27:34 2012 UTC

# Line 21 | Line 21 | double gChargedIso;
21   double gGammaIso;
22   double gNeutralIso;
23  
24 + extern vector<bool> PFnoPUflag;
25  
26   //--------------------------------------------------------------------------------------------------
27   Float_t computePFMuonIso(const mithep::Muon *muon,
# Line 343 | Line 344 | SelectionStatus muonIsoMVASelection(Cont
344      Double_t deta = (mu->Eta() - pf->Eta());
345      Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(mu->Phi()),Double_t(pf->Phi()));
346      Double_t dr = mithep::MathUtils::DeltaR(mu->Phi(),mu->Eta(), pf->Phi(), pf->Eta());
347 +    if (dr > 0.5) continue;
348 +    if (dr < 0.01) continue;
349 +
350 +    if (pf->HasTrackerTrk() && (pf->TrackerTrk() == mu->TrackerTrk()) ) continue;
351 +
352 +    //
353 +    // Lepton Footprint Removal
354 +    //
355 +    Bool_t IsLeptonFootprint = kFALSE;
356 +    if (dr < 1.0) {
357 +
358 +      //
359 +      // Check for electrons
360 +      //
361 +      for (Int_t q=0; q < electronsToVeto.size(); ++q) {
362 +        const mithep::Electron *tmpele = electronsToVeto[q];
363 +        // 4l electron
364 +        if( pf->HasTrackerTrk() ) {
365 +          if( pf->TrackerTrk() == tmpele->TrackerTrk() )
366 +            IsLeptonFootprint = kTRUE;
367 +        }
368 +        if( pf->HasGsfTrk() ) {
369 +          if( pf->GsfTrk() == tmpele->GsfTrk() )
370 +            IsLeptonFootprint = kTRUE;
371 +        }
372 +        // PF charged
373 +        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) >= 1.479
374 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015)
375 +          IsLeptonFootprint = kTRUE;
376 +        // PF gamma
377 +        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) >= 1.479
378 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08)
379 +          IsLeptonFootprint = kTRUE;
380 +      } // loop over electrons
381 +      
382 +      /*
383 +      //
384 +      // Check for muons
385 +      //
386 +      for (Int_t q=0; q < muonsToVeto.size(); ++q) {
387 +        const mithep::Muon *tmpmu = muonsToVeto[q];
388 +        // 4l muon
389 +        if( pf->HasTrackerTrk() ) {
390 +          if( pf->TrackerTrk() == tmpmu->TrackerTrk() )
391 +            IsLeptonFootprint = kTRUE;
392 +        }
393 +        // PF charged
394 +        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01)
395 +          IsLeptonFootprint = kTRUE;
396 +      } // loop over muons
397 +      */
398 +
399 +    if (IsLeptonFootprint)
400 +      continue;
401 +
402 +    //
403 +    // Charged Iso Rings
404 +    //
405 +    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
406 +
407 +      if( dr < 0.01 ) continue; // only for muon iso mva?
408 +      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
409 +
410 + //       if( pf->HasTrackerTrk() ) {
411 + //      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
412 + //      if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
413 + //                            << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
414 + //                            << dr << endl;
415 + //       }
416 +
417 +
418 +      // Footprint Veto
419 +      if (dr < 0.1) tmpChargedIso_DR0p0To0p1 += pf->Pt();
420 +      if (dr >= 0.1 && dr < 0.2) tmpChargedIso_DR0p1To0p2 += pf->Pt();
421 +      if (dr >= 0.2 && dr < 0.3) tmpChargedIso_DR0p2To0p3 += pf->Pt();
422 +      if (dr >= 0.3 && dr < 0.4) tmpChargedIso_DR0p3To0p4 += pf->Pt();
423 +      if (dr >= 0.4 && dr < 0.5) tmpChargedIso_DR0p4To0p5 += pf->Pt();
424 +      if (dr >= 0.5 && dr < 0.7) tmpChargedIso_DR0p5To0p7 += pf->Pt();
425 +    }
426 +
427 +    //
428 +    // Gamma Iso Rings
429 +    //
430 +    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
431 +      if (dr < 0.1) tmpGammaIso_DR0p0To0p1 += pf->Pt();
432 +      if (dr >= 0.1 && dr < 0.2) tmpGammaIso_DR0p1To0p2 += pf->Pt();
433 +      if (dr >= 0.2 && dr < 0.3) tmpGammaIso_DR0p2To0p3 += pf->Pt();
434 +      if (dr >= 0.3 && dr < 0.4) tmpGammaIso_DR0p3To0p4 += pf->Pt();
435 +      if (dr >= 0.4 && dr < 0.5) tmpGammaIso_DR0p4To0p5 += pf->Pt();
436 +      if (dr >= 0.5 && dr < 0.7) tmpGammaIso_DR0p5To0p7 += pf->Pt();
437 +    }
438 +
439 +    //
440 +    // Other Neutral Iso Rings
441 +    //
442 +    else {
443 +      if (dr < 0.1) tmpNeutralHadronIso_DR0p0To0p1 += pf->Pt();
444 +      if (dr >= 0.1 && dr < 0.2) tmpNeutralHadronIso_DR0p1To0p2 += pf->Pt();
445 +      if (dr >= 0.2 && dr < 0.3) tmpNeutralHadronIso_DR0p2To0p3 += pf->Pt();
446 +      if (dr >= 0.3 && dr < 0.4) tmpNeutralHadronIso_DR0p3To0p4 += pf->Pt();
447 +      if (dr >= 0.4 && dr < 0.5) tmpNeutralHadronIso_DR0p4To0p5 += pf->Pt();
448 +      if (dr >= 0.5 && dr < 0.7) tmpNeutralHadronIso_DR0p5To0p7 += pf->Pt();
449 +    }
450 +
451 +    }
452 +
453 +  }
454 +
455 +  fChargedIso_DR0p0To0p1   = fmin((tmpChargedIso_DR0p0To0p1)/mu->Pt(), 2.5);
456 +  fChargedIso_DR0p1To0p2   = fmin((tmpChargedIso_DR0p1To0p2)/mu->Pt(), 2.5);
457 +  fChargedIso_DR0p2To0p3   = fmin((tmpChargedIso_DR0p2To0p3)/mu->Pt(), 2.5);
458 +  fChargedIso_DR0p3To0p4   = fmin((tmpChargedIso_DR0p3To0p4)/mu->Pt(), 2.5);
459 +  fChargedIso_DR0p4To0p5   = fmin((tmpChargedIso_DR0p4To0p5)/mu->Pt(), 2.5);
460 +
461 +
462 +  double rho = 0;
463 + //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
464 + //     rho = fPUEnergyDensity->At(0)->Rho();
465 +  if (!(isnan(fPUEnergyDensity->At(0)->RhoLowEta()) || isinf(fPUEnergyDensity->At(0)->RhoLowEta())))
466 +    rho = fPUEnergyDensity->At(0)->RhoLowEta();
467 +  
468 +  // WARNING!!!!  
469 +  // hardcode for sync ...
470 +  EffectiveAreaVersion = muT.kMuEAData2011;
471 +  // WARNING!!!!  
472 +
473 +
474 +  fGammaIso_DR0p0To0p1 = fmax(fmin((tmpGammaIso_DR0p0To0p1
475 +                                  -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p0To0p1,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
476 +                                 ,2.5)
477 +                             ,0.0);
478 +  fGammaIso_DR0p1To0p2 = fmax(fmin((tmpGammaIso_DR0p1To0p2
479 +                                  -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p1To0p2,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
480 +                                 ,2.5)
481 +                             ,0.0);
482 +  fGammaIso_DR0p2To0p3 = fmax(fmin((tmpGammaIso_DR0p2To0p3
483 +                                  -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p2To0p3,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
484 +                                 ,2.5)
485 +                             ,0.0);
486 +  fGammaIso_DR0p3To0p4 = fmax(fmin((tmpGammaIso_DR0p3To0p4
487 +                                  -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p3To0p4,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
488 +                                 ,2.5)
489 +                             ,0.0);
490 +  fGammaIso_DR0p4To0p5 = fmax(fmin((tmpGammaIso_DR0p4To0p5
491 +                                  -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p4To0p5,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
492 +                                 ,2.5)
493 +                             ,0.0);
494 +
495 +
496 +
497 +  fNeutralHadronIso_DR0p0To0p1 = fmax(fmin((tmpNeutralHadronIso_DR0p0To0p1
498 +                                          -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p0To0p1,
499 +                                                                 mu->Eta(),EffectiveAreaVersion))/mu->Pt()
500 +                                         , 2.5)
501 +                                     , 0.0);
502 +  fNeutralHadronIso_DR0p1To0p2 = fmax(fmin((tmpNeutralHadronIso_DR0p1To0p2
503 +                                            -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p1To0p2,
504 +                                                                   mu->Eta(),EffectiveAreaVersion))/mu->Pt()
505 +                                           , 2.5)
506 +                                       , 0.0);
507 +  fNeutralHadronIso_DR0p2To0p3 = fmax(fmin((tmpNeutralHadronIso_DR0p2To0p3
508 +                                          -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p2To0p3,
509 +                                                                 mu->Eta(),EffectiveAreaVersion))/mu->Pt()
510 +                                         , 2.5)
511 +                                     , 0.0);
512 +  fNeutralHadronIso_DR0p3To0p4 = fmax(fmin((tmpNeutralHadronIso_DR0p3To0p4
513 +                                          -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p3To0p4,
514 +                                                                 mu->Eta(), EffectiveAreaVersion))/mu->Pt()
515 +                                         , 2.5)
516 +                                     , 0.0);
517 +  fNeutralHadronIso_DR0p4To0p5 = fmax(fmin((tmpNeutralHadronIso_DR0p4To0p5
518 +                                          -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p4To0p5,
519 +                                                                 mu->Eta(), EffectiveAreaVersion))/mu->Pt()
520 +                                         , 2.5)
521 +                                     , 0.0);
522 +
523 +
524 +  double mvaval = muIsoMVA->MVAValue_IsoRings( mu->Pt(),
525 +                                               mu->Eta(),
526 +                                               mu->IsGlobalMuon(),
527 +                                               mu->IsTrackerMuon(),
528 +                                               fChargedIso_DR0p0To0p1,
529 +                                               fChargedIso_DR0p1To0p2,
530 +                                               fChargedIso_DR0p2To0p3,
531 +                                               fChargedIso_DR0p3To0p4,
532 +                                               fChargedIso_DR0p4To0p5,
533 +                                               fGammaIso_DR0p0To0p1,
534 +                                               fGammaIso_DR0p1To0p2,
535 +                                               fGammaIso_DR0p2To0p3,
536 +                                               fGammaIso_DR0p3To0p4,
537 +                                               fGammaIso_DR0p4To0p5,
538 +                                               fNeutralHadronIso_DR0p0To0p1,
539 +                                               fNeutralHadronIso_DR0p1To0p2,
540 +                                               fNeutralHadronIso_DR0p2To0p3,
541 +                                               fNeutralHadronIso_DR0p3To0p4,
542 +                                               fNeutralHadronIso_DR0p4To0p5,
543 +                                               ctrl.debug);
544 +
545 +  SelectionStatus status;
546 +  bool pass;
547 +
548 +  pass = false;
549 +  if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
550 +      && fabs(mu->Eta()) <= 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN0)   pass = true;
551 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
552 +           && fabs(mu->Eta()) <= 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN1)  pass = true;
553 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
554 +           && fabs(mu->Eta()) > 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN2)  pass = true;
555 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
556 +           && fabs(mu->Eta()) > 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN3)  pass = true;
557 +  else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon() && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN4)  pass = true;
558 +  else if( mu->IsGlobalMuon() && !(mu->IsTrackerMuon()) && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN5)  pass = true;
559 +  if( pass ) status.orStatus(SelectionStatus::LOOSEISO);
560 +
561 +  pass = false;
562 +  if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
563 +      && fabs(mu->Eta()) <= 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN0)   pass = true;
564 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
565 +           && fabs(mu->Eta()) <= 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN1)  pass = true;
566 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
567 +           && fabs(mu->Eta()) > 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN2)  pass = true;
568 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
569 +           && fabs(mu->Eta()) > 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN3)  pass = true;
570 +  else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon() && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN4)  pass = true;
571 +  else if( mu->IsGlobalMuon() && !(mu->IsTrackerMuon()) && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN5)  pass = true;
572 +  if( pass ) status.orStatus(SelectionStatus::TIGHTISO);
573 +
574 +  //  pass &= (fChargedIso_DR0p0To0p1 + fChargedIso_DR0p1To0p2 + fChargedIso_DR0p2To0p3 < 0.7);
575 +
576 +  if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
577 +  return status;
578 +
579 + }
580 +
581 +
582 + //--------------------------------------------------------------------------------------------------
583 + SelectionStatus muonIsoMVASelection(ControlFlags &ctrl,
584 +                                    const mithep::Muon * mu,
585 +                                    const mithep::Vertex & vtx,
586 +                                    const mithep::Array<mithep::PFCandidate> * fPFCandidates,
587 +                                    float rho,
588 +                                    //const mithep::Array<mithep::PileupEnergyDensity> * fPUEnergyDensity,
589 +                                    mithep::MuonTools::EMuonEffectiveAreaTarget EffectiveAreaVersion,
590 +                                    vector<const mithep::Muon*> muonsToVeto,
591 +                                    vector<const mithep::Electron*> electronsToVeto)
592 + //--------------------------------------------------------------------------------------------------
593 + // hacked version
594 + {
595 +
596 +  if( ctrl.debug ) {
597 +    cout << "muonIsoMVASelection :: muons to veto " << endl;
598 +    for( int i=0; i<muonsToVeto.size(); i++ ) {
599 +      const mithep::Muon * vmu = muonsToVeto[i];
600 +      cout << "\tpt: " << vmu->Pt()
601 +           << "\teta: " << vmu->Eta()
602 +           << "\tphi: " << vmu->Phi()
603 +           << endl;
604 +    }
605 +    cout << "muonIsoMVASelection :: electrson to veto " << endl;
606 +    for( int i=0; i<electronsToVeto.size(); i++ ) {
607 +      const mithep::Electron * vel = electronsToVeto[i];
608 +      cout << "\tpt: " << vel->Pt()
609 +           << "\teta: " << vel->Eta()
610 +           << "\tphi: " << vel->Phi()
611 +           << endl;
612 +    }
613 +  }
614 +  bool failiso=false;
615 +
616 +  //
617 +  // tmp iso rings
618 +  //
619 +  Double_t tmpChargedIso_DR0p0To0p1  = 0;
620 +  Double_t tmpChargedIso_DR0p1To0p2  = 0;
621 +  Double_t tmpChargedIso_DR0p2To0p3  = 0;
622 +  Double_t tmpChargedIso_DR0p3To0p4  = 0;
623 +  Double_t tmpChargedIso_DR0p4To0p5  = 0;
624 +  Double_t tmpChargedIso_DR0p5To0p7  = 0;
625 +
626 +  Double_t tmpGammaIso_DR0p0To0p1  = 0;
627 +  Double_t tmpGammaIso_DR0p1To0p2  = 0;
628 +  Double_t tmpGammaIso_DR0p2To0p3  = 0;
629 +  Double_t tmpGammaIso_DR0p3To0p4  = 0;
630 +  Double_t tmpGammaIso_DR0p4To0p5  = 0;
631 +  Double_t tmpGammaIso_DR0p5To0p7  = 0;
632 +
633 +  Double_t tmpNeutralHadronIso_DR0p0To0p1  = 0;
634 +  Double_t tmpNeutralHadronIso_DR0p1To0p2  = 0;
635 +  Double_t tmpNeutralHadronIso_DR0p2To0p3  = 0;
636 +  Double_t tmpNeutralHadronIso_DR0p3To0p4  = 0;
637 +  Double_t tmpNeutralHadronIso_DR0p4To0p5  = 0;
638 +  Double_t tmpNeutralHadronIso_DR0p5To0p7  = 0;
639 +
640 +        
641 +
642 +  //
643 +  // final rings for the MVA
644 +  //
645 +  Double_t fChargedIso_DR0p0To0p1;
646 +  Double_t fChargedIso_DR0p1To0p2;
647 +  Double_t fChargedIso_DR0p2To0p3;
648 +  Double_t fChargedIso_DR0p3To0p4;
649 +  Double_t fChargedIso_DR0p4To0p5;
650 +  Double_t fChargedIso_DR0p5To0p7;
651 +
652 +  Double_t fGammaIso_DR0p0To0p1;
653 +  Double_t fGammaIso_DR0p1To0p2;
654 +  Double_t fGammaIso_DR0p2To0p3;
655 +  Double_t fGammaIso_DR0p3To0p4;
656 +  Double_t fGammaIso_DR0p4To0p5;
657 +  Double_t fGammaIso_DR0p5To0p7;
658 +
659 +  Double_t fNeutralHadronIso_DR0p0To0p1;
660 +  Double_t fNeutralHadronIso_DR0p1To0p2;
661 +  Double_t fNeutralHadronIso_DR0p2To0p3;
662 +  Double_t fNeutralHadronIso_DR0p3To0p4;
663 +  Double_t fNeutralHadronIso_DR0p4To0p5;
664 +  Double_t fNeutralHadronIso_DR0p5To0p7;
665 +
666 +
667 +  //
668 +  //Loop over PF Candidates
669 +  //
670 +  for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
671 +
672 +    if( !(PFnoPUflag[k]) ) continue; // my PF no PU hack
673 +
674 +    const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
675 +
676 +    Double_t deta = (mu->Eta() - pf->Eta());
677 +    Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(mu->Phi()),Double_t(pf->Phi()));
678 +    Double_t dr = mithep::MathUtils::DeltaR(mu->Phi(),mu->Eta(), pf->Phi(), pf->Eta());
679      if (dr > 1.0) continue;
680  
681      if (pf->HasTrackerTrk() && (pf->TrackerTrk() == mu->TrackerTrk()) ) continue;
# Line 368 | Line 701 | SelectionStatus muonIsoMVASelection(Cont
701              IsLeptonFootprint = kTRUE;
702          }
703          // PF charged
704 <        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
704 >        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) >= 1.479
705              && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015)
706            IsLeptonFootprint = kTRUE;
707          // PF gamma
708 <        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
708 >        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) >= 1.479
709              && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08)
710            IsLeptonFootprint = kTRUE;
711        } // loop over electrons
# Line 402 | Line 735 | SelectionStatus muonIsoMVASelection(Cont
735      //
736      if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
737  
738 <      //      if( dr < 0.01 ) continue; // only for muon iso mva?
738 >      if( dr < 0.01 ) continue; // only for muon iso mva?
739        if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
740  
741 <      if( pf->HasTrackerTrk() ) {
742 <        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
743 <        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
744 <                              << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
745 <                              << dr << endl;
746 <      }
747 <      if( pf->HasGsfTrk() ) {
748 <        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
749 <        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
750 <                              << abs(pf->GsfTrk()->DzCorrected(vtx)) << " "
751 <                              << dr << endl;
752 <      }
741 > //       if( pf->HasTrackerTrk() ) {
742 > //      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
743 > //      if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
744 > //                            << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
745 > //                            << dr << endl;
746 > //       }
747 > //       if( pf->HasGsfTrk() ) {
748 > //      if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
749 > //      if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
750 > //                            << abs(pf->GsfTrk()->DzCorrected(vtx)) << " "
751 > //                            << dr << endl;
752 > //       }
753  
754        // Footprint Veto
755        if (dr < 0.1) tmpChargedIso_DR0p0To0p1 += pf->Pt();
# Line 455 | Line 788 | SelectionStatus muonIsoMVASelection(Cont
788  
789    }
790  
791 <  fChargedIso_DR0p0To0p1   = min((tmpChargedIso_DR0p0To0p1)/mu->Pt(), 2.5);
792 <  fChargedIso_DR0p1To0p2   = min((tmpChargedIso_DR0p1To0p2)/mu->Pt(), 2.5);
793 <  fChargedIso_DR0p2To0p3   = min((tmpChargedIso_DR0p2To0p3)/mu->Pt(), 2.5);
794 <  fChargedIso_DR0p3To0p4   = min((tmpChargedIso_DR0p3To0p4)/mu->Pt(), 2.5);
795 <  fChargedIso_DR0p4To0p5   = min((tmpChargedIso_DR0p4To0p5)/mu->Pt(), 2.5);
791 >  fChargedIso_DR0p0To0p1   = fmin((tmpChargedIso_DR0p0To0p1)/mu->Pt(), 2.5);
792 >  fChargedIso_DR0p1To0p2   = fmin((tmpChargedIso_DR0p1To0p2)/mu->Pt(), 2.5);
793 >  fChargedIso_DR0p2To0p3   = fmin((tmpChargedIso_DR0p2To0p3)/mu->Pt(), 2.5);
794 >  fChargedIso_DR0p3To0p4   = fmin((tmpChargedIso_DR0p3To0p4)/mu->Pt(), 2.5);
795 >  fChargedIso_DR0p4To0p5   = fmin((tmpChargedIso_DR0p4To0p5)/mu->Pt(), 2.5);
796  
797  
798 <  double rho = 0;
799 <  if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
800 <    rho = fPUEnergyDensity->At(0)->Rho();
798 > //   double rho = 0;
799 > //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
800 > //     rho = fPUEnergyDensity->At(0)->Rho();
801   //   if (!(isnan(fPUEnergyDensity->At(0)->RhoLowEta()) || isinf(fPUEnergyDensity->At(0)->RhoLowEta())))
802   //     rho = fPUEnergyDensity->At(0)->RhoLowEta();
803    
# Line 474 | Line 807 | SelectionStatus muonIsoMVASelection(Cont
807    // WARNING!!!!  
808  
809  
810 <  fGammaIso_DR0p0To0p1 = max(min((tmpGammaIso_DR0p0To0p1
810 >  fGammaIso_DR0p0To0p1 = fmax(fmin((tmpGammaIso_DR0p0To0p1
811                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p0To0p1,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
812                                   ,2.5)
813                               ,0.0);
814 <  fGammaIso_DR0p1To0p2 = max(min((tmpGammaIso_DR0p1To0p2
814 >  fGammaIso_DR0p1To0p2 = fmax(fmin((tmpGammaIso_DR0p1To0p2
815                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p1To0p2,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
816                                   ,2.5)
817                               ,0.0);
818 <  fGammaIso_DR0p2To0p3 = max(min((tmpGammaIso_DR0p2To0p3
818 >  fGammaIso_DR0p2To0p3 = fmax(fmin((tmpGammaIso_DR0p2To0p3
819                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p2To0p3,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
820                                   ,2.5)
821                               ,0.0);
822 <  fGammaIso_DR0p3To0p4 = max(min((tmpGammaIso_DR0p3To0p4
822 >  fGammaIso_DR0p3To0p4 = fmax(fmin((tmpGammaIso_DR0p3To0p4
823                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p3To0p4,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
824                                   ,2.5)
825                               ,0.0);
826 <  fGammaIso_DR0p4To0p5 = max(min((tmpGammaIso_DR0p4To0p5
826 >  fGammaIso_DR0p4To0p5 = fmax(fmin((tmpGammaIso_DR0p4To0p5
827                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p4To0p5,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
828                                   ,2.5)
829                               ,0.0);
830  
831  
832  
833 <  fNeutralHadronIso_DR0p0To0p1 = max(min((tmpNeutralHadronIso_DR0p0To0p1
833 >  fNeutralHadronIso_DR0p0To0p1 = fmax(fmin((tmpNeutralHadronIso_DR0p0To0p1
834                                            -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p0To0p1,
835                                                                   mu->Eta(),EffectiveAreaVersion))/mu->Pt()
836                                           , 2.5)
837                                       , 0.0);
838 <  fNeutralHadronIso_DR0p1To0p2 = max(min((tmpNeutralHadronIso_DR0p1To0p2
838 >  fNeutralHadronIso_DR0p1To0p2 = fmax(fmin((tmpNeutralHadronIso_DR0p1To0p2
839                                              -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p1To0p2,
840                                                                     mu->Eta(),EffectiveAreaVersion))/mu->Pt()
841                                             , 2.5)
842                                         , 0.0);
843 <  fNeutralHadronIso_DR0p2To0p3 = max(min((tmpNeutralHadronIso_DR0p2To0p3
843 >  fNeutralHadronIso_DR0p2To0p3 = fmax(fmin((tmpNeutralHadronIso_DR0p2To0p3
844                                            -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p2To0p3,
845                                                                   mu->Eta(),EffectiveAreaVersion))/mu->Pt()
846                                           , 2.5)
847                                       , 0.0);
848 <  fNeutralHadronIso_DR0p3To0p4 = max(min((tmpNeutralHadronIso_DR0p3To0p4
848 >  fNeutralHadronIso_DR0p3To0p4 = fmax(fmin((tmpNeutralHadronIso_DR0p3To0p4
849                                            -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p3To0p4,
850                                                                   mu->Eta(), EffectiveAreaVersion))/mu->Pt()
851                                           , 2.5)
852                                       , 0.0);
853 <  fNeutralHadronIso_DR0p4To0p5 = max(min((tmpNeutralHadronIso_DR0p4To0p5
853 >  fNeutralHadronIso_DR0p4To0p5 = fmax(fmin((tmpNeutralHadronIso_DR0p4To0p5
854                                            -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p4To0p5,
855                                                                   mu->Eta(), EffectiveAreaVersion))/mu->Pt()
856                                           , 2.5)
# Line 561 | Line 894 | SelectionStatus muonIsoMVASelection(Cont
894    else if( mu->IsGlobalMuon() && !(mu->IsTrackerMuon()) && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN5)  pass = true;
895    if( pass ) status.orStatus(SelectionStatus::LOOSEISO);
896  
897 +  /*
898    pass = false;
899    if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
900        && fabs(mu->Eta()) <= 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN0)   pass = true;
# Line 573 | Line 907 | SelectionStatus muonIsoMVASelection(Cont
907    else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon() && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN4)  pass = true;
908    else if( mu->IsGlobalMuon() && !(mu->IsTrackerMuon()) && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN5)  pass = true;
909    if( pass ) status.orStatus(SelectionStatus::TIGHTISO);
910 +  */
911  
912    //  pass &= (fChargedIso_DR0p0To0p1 + fChargedIso_DR0p1To0p2 + fChargedIso_DR0p2To0p3 < 0.7);
913  
914 <  if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
914 >  status.isoMVA = mvaval;
915 >
916 >  if(ctrl.debug)  {
917 >    cout << "returning status : " << hex << status.getStatus() << dec << endl;
918 >    cout << "MVAVAL : " << status.isoMVA << endl;
919 >  }
920    return status;
921  
922   }
923  
924 +
925   //--------------------------------------------------------------------------------------------------
926   void initMuonIsoMVA() {
927   //--------------------------------------------------------------------------------------------------
# Line 759 | Line 1100 | double  muonPFIso04(ControlFlags &ctrl,
1100    // WARNING!!!!  
1101  
1102  
1103 <  double pfIso = fChargedIso + max(0.0,(fGammaIso + fNeutralHadronIso
1103 >  double pfIso = fChargedIso + fmax(0.0,(fGammaIso + fNeutralHadronIso
1104                                          -rho*muT.MuonEffectiveArea(muT.kMuGammaAndNeutralHadronIso04,
1105                                                                     mu->Eta(),EffectiveAreaVersion)));
1106  
# Line 817 | Line 1158 | double  muonPFIso04(ControlFlags &ctrl,
1158    //Loop over PF Candidates
1159    //
1160    for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
1161 +
1162 +    if( !(PFnoPUflag[k]) ) continue; // my PF no PU hack
1163      const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
1164  
1165      Double_t deta = (mu->Eta() - pf->Eta());
# Line 881 | Line 1224 | double  muonPFIso04(ControlFlags &ctrl,
1224      //
1225      if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
1226  
1227 <      if( dr < 0.01 ) continue; // only for muon iso mva?
1227 >      //if( dr < 0.01 ) continue; // only for muon iso mva?
1228        if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
1229  
1230 <      if( pf->HasTrackerTrk() ) {
1231 <        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1232 <        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
1233 <                              << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
1234 <                              << dr << endl;
1235 <      }
1236 <      if( pf->HasGsfTrk() ) {
1237 <        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1238 <        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
1239 <                              << abs(pf->GsfTrk()->DzCorrected(vtx)) << " "
1240 <                              << dr << endl;
1241 <      }
1230 >
1231 > //       if( pf->HasTrackerTrk() ) {
1232 > //      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1233 > //      if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
1234 > //                            << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
1235 > //                            << dr << endl;
1236 > //       }
1237 > //       if( pf->HasGsfTrk() ) {
1238 > //      if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1239 > //      if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
1240 > //                            << abs(pf->GsfTrk()->DzCorrected(vtx)) << " "
1241 > //                            << dr << endl;
1242 > //       }
1243  
1244  
1245        fChargedIso += pf->Pt();
# Line 905 | Line 1249 | double  muonPFIso04(ControlFlags &ctrl,
1249      // Gamma Iso
1250      //
1251      else if (abs(pf->PFType()) == PFCandidate::eGamma) {
1252 +      // KH, add to sync
1253        if( pf->Pt() > 0.5 )
1254        fGammaIso += pf->Pt();
1255      }
# Line 932 | Line 1277 | double  muonPFIso04(ControlFlags &ctrl,
1277    // WARNING!!!!  
1278  
1279  
1280 <  double pfIso = fChargedIso + max(0.0,(fGammaIso + fNeutralHadronIso
1280 >  double pfIso = fChargedIso + fmax(0.0,(fGammaIso + fNeutralHadronIso
1281                                          -rho*muT.MuonEffectiveArea(muT.kMuGammaAndNeutralHadronIso04,
1282                                                                     mu->Eta(),EffectiveAreaVersion)));
1283    gChargedIso = fChargedIso;
# Line 959 | Line 1304 | SelectionStatus muonReferenceIsoSelectio
1304  
1305    double pfIso = muonPFIso04( ctrl, mu, vtx, fPFCandidates, fPUEnergyDensity,
1306                                EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
1307 <  cout << "--------------> setting muon isoPF04 to" << pfIso << endl;
1307 >  //  cout << "--------------> setting muon isoPF04 to" << pfIso << endl;
1308    status.isoPF04 = pfIso;
1309    status.chisoPF04 = gChargedIso;
1310    status.gaisoPF04 = gGammaIso;
# Line 995 | Line 1340 | SelectionStatus muonReferenceIsoSelectio
1340    
1341    double pfIso = muonPFIso04( ctrl, mu, vtx, fPFCandidates, rho,
1342                                EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
1343 +
1344 +  status.isoPF04 = pfIso;
1345 +  status.chisoPF04 = gChargedIso;
1346 +  status.gaisoPF04 = gGammaIso;
1347 +  status.neisoPF04 = gNeutralIso;
1348 +
1349    bool pass = false;
1350    if( (pfIso/mu->Pt()) < MUON_REFERENCE_PFISO_CUT ) pass = true;
1351    
# Line 1095 | Line 1446 | SelectionStatus electronIsoMVASelection(
1446    //Loop over PF Candidates
1447    //
1448    for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
1449 +
1450 +    if( !(PFnoPUflag[k]) ) continue; // my PF no PU hack
1451 +
1452      const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
1453      Double_t deta = (ele->Eta() - pf->Eta());
1454      Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(ele->Phi()),Double_t(pf->Phi()));
1455      Double_t dr = mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta());
1456 <    if (dr >= 0.5) continue;
1456 >    if (dr > 0.5) continue;
1457      if(ctrl.debug) {
1458        cout << "pf :: type: " << pf->PFType() << "\tpt: " << pf->Pt();
1459        if( pf->HasTrackerTrk() ) cout << "\tdZ: " << pf->TrackerTrk()->DzCorrected(vtx);
# Line 1136 | Line 1490 | SelectionStatus electronIsoMVASelection(
1490            }
1491          }
1492          // PF charged
1493 <        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
1493 >        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) >= 1.479
1494              && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015) {
1495            if( ctrl.debug) cout << "\tcharged trk, dR matches 4L ele ..." << endl;
1496            IsLeptonFootprint = kTRUE;
1497          }
1498          // PF gamma
1499 <        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
1499 >        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) >= 1.479
1500              && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08) {
1501            if( ctrl.debug) cout << "\tPF gamma, matches 4L ele ..." << endl;
1502            IsLeptonFootprint = kTRUE;
# Line 1178 | Line 1532 | SelectionStatus electronIsoMVASelection(
1532      //
1533      if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
1534  
1535 <      if( pf->HasTrackerTrk() )
1536 <        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1537 <      if( pf->HasGsfTrk() )
1538 <        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1535 > //       if( pf->HasGsfTrk() ) {
1536 > //       if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1537 > //       } else if( pf->HasTrackerTrk() ){
1538 > //      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1539 > //       }
1540  
1541        // Veto any PFmuon, or PFEle
1542        if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
# Line 1241 | Line 1596 | SelectionStatus electronIsoMVASelection(
1596  
1597    }
1598  
1599 <  fChargedIso_DR0p0To0p1   = min((tmpChargedIso_DR0p0To0p1)/ele->Pt(), 2.5);
1600 <  fChargedIso_DR0p1To0p2   = min((tmpChargedIso_DR0p1To0p2)/ele->Pt(), 2.5);
1601 <  fChargedIso_DR0p2To0p3   = min((tmpChargedIso_DR0p2To0p3)/ele->Pt(), 2.5);
1602 <  fChargedIso_DR0p3To0p4   = min((tmpChargedIso_DR0p3To0p4)/ele->Pt(), 2.5);
1603 <  fChargedIso_DR0p4To0p5   = min((tmpChargedIso_DR0p4To0p5)/ele->Pt(), 2.5);
1599 >  fChargedIso_DR0p0To0p1   = fmin((tmpChargedIso_DR0p0To0p1)/ele->Pt(), 2.5);
1600 >  fChargedIso_DR0p1To0p2   = fmin((tmpChargedIso_DR0p1To0p2)/ele->Pt(), 2.5);
1601 >  fChargedIso_DR0p2To0p3   = fmin((tmpChargedIso_DR0p2To0p3)/ele->Pt(), 2.5);
1602 >  fChargedIso_DR0p3To0p4   = fmin((tmpChargedIso_DR0p3To0p4)/ele->Pt(), 2.5);
1603 >  fChargedIso_DR0p4To0p5   = fmin((tmpChargedIso_DR0p4To0p5)/ele->Pt(), 2.5);
1604  
1605    double rho = 0;
1606 <  //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
1607 <  //     rho = fPUEnergyDensity->At(0)->Rho();
1606 > //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
1607 > //     rho = fPUEnergyDensity->At(0)->Rho();
1608    if (!(isnan(fPUEnergyDensity->At(0)->RhoLowEta()) || isinf(fPUEnergyDensity->At(0)->RhoLowEta())))
1609      rho = fPUEnergyDensity->At(0)->RhoLowEta();
1610  
1611    // WARNING!!!!  
1612    // hardcode for sync ...
1613 <  EffectiveAreaVersion = eleT.kEleEAData2011;
1613 >  //  EffectiveAreaVersion = eleT.kEleEAData2011;
1614 >  EffectiveAreaVersion = eleT.kEleEAFall11MC;
1615    // WARNING!!!!  
1616  
1617    if( ctrl.debug) {
# Line 1280 | Line 1636 | SelectionStatus electronIsoMVASelection(
1636           << endl;
1637    }
1638  
1639 <  fGammaIso_DR0p0To0p1 = max(min((tmpGammaIso_DR0p0To0p1
1639 >  fGammaIso_DR0p0To0p1 = fmax(fmin((tmpGammaIso_DR0p0To0p1
1640                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p0To0p1,
1641                                                                ele->SCluster()->Eta(),
1642                                                                EffectiveAreaVersion))/ele->Pt()
1643                                   ,2.5)
1644                               ,0.0);
1645 <  fGammaIso_DR0p1To0p2 = max(min((tmpGammaIso_DR0p1To0p2
1645 >  fGammaIso_DR0p1To0p2 = fmax(fmin((tmpGammaIso_DR0p1To0p2
1646                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p1To0p2,
1647                                                                ele->SCluster()->Eta(),
1648                                                                EffectiveAreaVersion))/ele->Pt()
1649                                   ,2.5)
1650                               ,0.0);
1651 <  fGammaIso_DR0p2To0p3 = max(min((tmpGammaIso_DR0p2To0p3
1651 >  fGammaIso_DR0p2To0p3 = fmax(fmin((tmpGammaIso_DR0p2To0p3
1652                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p2To0p3,
1653                                                                ele->SCluster()->Eta()
1654                                                                ,EffectiveAreaVersion))/ele->Pt()
1655                                   ,2.5)
1656                               ,0.0);
1657 <  fGammaIso_DR0p3To0p4 = max(min((tmpGammaIso_DR0p3To0p4
1657 >  fGammaIso_DR0p3To0p4 = fmax(fmin((tmpGammaIso_DR0p3To0p4
1658                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p3To0p4,
1659                                                                ele->SCluster()->Eta(),
1660                                                                EffectiveAreaVersion))/ele->Pt()
1661                                   ,2.5)
1662                               ,0.0);
1663 <  fGammaIso_DR0p4To0p5 = max(min((tmpGammaIso_DR0p4To0p5
1663 >  fGammaIso_DR0p4To0p5 = fmax(fmin((tmpGammaIso_DR0p4To0p5
1664                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p4To0p5,
1665                                                                ele->SCluster()->Eta(),
1666                                                                EffectiveAreaVersion))/ele->Pt()
# Line 1312 | Line 1668 | SelectionStatus electronIsoMVASelection(
1668                               ,0.0);
1669  
1670  
1671 <  fNeutralHadronIso_DR0p0To0p1 = max(min((tmpNeutralHadronIso_DR0p0To0p1
1671 >  fNeutralHadronIso_DR0p0To0p1 = fmax(fmin((tmpNeutralHadronIso_DR0p0To0p1
1672                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p0To0p1,
1673                                                                   ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
1674                                           , 2.5)
1675                                       , 0.0);
1676 <  fNeutralHadronIso_DR0p1To0p2 = max(min((tmpNeutralHadronIso_DR0p1To0p2
1676 >  fNeutralHadronIso_DR0p1To0p2 = fmax(fmin((tmpNeutralHadronIso_DR0p1To0p2
1677                                              -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p1To0p2,
1678                                                                     ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
1679                                             , 2.5)
1680                                         , 0.0);
1681 <  fNeutralHadronIso_DR0p2To0p3 = max(min((tmpNeutralHadronIso_DR0p2To0p3
1681 >  fNeutralHadronIso_DR0p2To0p3 = fmax(fmin((tmpNeutralHadronIso_DR0p2To0p3
1682                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p2To0p3,
1683                                                                   ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
1684                                           , 2.5)
1685                                       , 0.0);
1686 <  fNeutralHadronIso_DR0p3To0p4 = max(min((tmpNeutralHadronIso_DR0p3To0p4
1686 >  fNeutralHadronIso_DR0p3To0p4 = fmax(fmin((tmpNeutralHadronIso_DR0p3To0p4
1687                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p3To0p4,
1688                                                                   ele->SCluster()->Eta(), EffectiveAreaVersion))/ele->Pt()
1689                                           , 2.5)
1690                                       , 0.0);
1691 <  fNeutralHadronIso_DR0p4To0p5 = max(min((tmpNeutralHadronIso_DR0p4To0p5
1691 >  fNeutralHadronIso_DR0p4To0p5 = fmax(fmin((tmpNeutralHadronIso_DR0p4To0p5
1692                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p4To0p5,
1693                                                                   ele->SCluster()->Eta(), EffectiveAreaVersion))/ele->Pt()
1694                                           , 2.5)
# Line 1399 | Line 1755 | SelectionStatus electronIsoMVASelection(
1755   }
1756  
1757  
1758 +
1759 + //--------------------------------------------------------------------------------------------------
1760 + SelectionStatus electronIsoMVASelection(ControlFlags &ctrl,
1761 +                                        const mithep::Electron * ele,
1762 +                                        const mithep::Vertex & vtx,
1763 +                                        const mithep::Array<mithep::PFCandidate> * fPFCandidates,
1764 +                                        float rho,
1765 +                                        //const mithep::Array<mithep::PileupEnergyDensity> * fPUEnergyDensity,
1766 +                                        mithep::ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaVersion,
1767 +                                        vector<const mithep::Muon*> muonsToVeto,
1768 +                                        vector<const mithep::Electron*> electronsToVeto)
1769 + //--------------------------------------------------------------------------------------------------
1770 + // hacked version
1771 + {
1772 +  if( ctrl.debug ) {
1773 +    cout << "================> hacked ele Iso MVA <======================" << endl;
1774 +  }
1775 +
1776 +  if( ctrl.debug ) {
1777 +    cout << "electronIsoMVASelection :: muons to veto " << endl;
1778 +    for( int i=0; i<muonsToVeto.size(); i++ ) {
1779 +      const mithep::Muon * vmu = muonsToVeto[i];
1780 +      cout << "\tpt: " << vmu->Pt()
1781 +           << "\teta: " << vmu->Eta()
1782 +           << "\tphi: " << vmu->Phi()
1783 +           << endl;
1784 +    }
1785 +    cout << "electronIsoMVASelection :: electrson to veto " << endl;
1786 +    for( int i=0; i<electronsToVeto.size(); i++ ) {
1787 +      const mithep::Electron * vel = electronsToVeto[i];
1788 +      cout << "\tpt: " << vel->Pt()
1789 +           << "\teta: " << vel->Eta()
1790 +           << "\tphi: " << vel->Phi()
1791 +           << "\ttrk: " << vel->TrackerTrk()
1792 +           << endl;
1793 +    }
1794 +  }
1795 +
1796 +  bool failiso=false;
1797 +
1798 +  //
1799 +  // tmp iso rings
1800 +  //
1801 +  Double_t tmpChargedIso_DR0p0To0p1  = 0;
1802 +  Double_t tmpChargedIso_DR0p1To0p2  = 0;
1803 +  Double_t tmpChargedIso_DR0p2To0p3  = 0;
1804 +  Double_t tmpChargedIso_DR0p3To0p4  = 0;
1805 +  Double_t tmpChargedIso_DR0p4To0p5  = 0;
1806 +
1807 +  Double_t tmpGammaIso_DR0p0To0p1  = 0;
1808 +  Double_t tmpGammaIso_DR0p1To0p2  = 0;
1809 +  Double_t tmpGammaIso_DR0p2To0p3  = 0;
1810 +  Double_t tmpGammaIso_DR0p3To0p4  = 0;
1811 +  Double_t tmpGammaIso_DR0p4To0p5  = 0;
1812 +
1813 +
1814 +  Double_t tmpNeutralHadronIso_DR0p0To0p1  = 0;
1815 +  Double_t tmpNeutralHadronIso_DR0p1To0p2  = 0;
1816 +  Double_t tmpNeutralHadronIso_DR0p2To0p3  = 0;
1817 +  Double_t tmpNeutralHadronIso_DR0p3To0p4  = 0;
1818 +  Double_t tmpNeutralHadronIso_DR0p4To0p5  = 0;
1819 +
1820 +        
1821 +
1822 +  //
1823 +  // final rings for the MVA
1824 +  //
1825 +  Double_t fChargedIso_DR0p0To0p1;
1826 +  Double_t fChargedIso_DR0p1To0p2;
1827 +  Double_t fChargedIso_DR0p2To0p3;
1828 +  Double_t fChargedIso_DR0p3To0p4;
1829 +  Double_t fChargedIso_DR0p4To0p5;
1830 +
1831 +  Double_t fGammaIso_DR0p0To0p1;
1832 +  Double_t fGammaIso_DR0p1To0p2;
1833 +  Double_t fGammaIso_DR0p2To0p3;
1834 +  Double_t fGammaIso_DR0p3To0p4;
1835 +  Double_t fGammaIso_DR0p4To0p5;
1836 +
1837 +  Double_t fNeutralHadronIso_DR0p0To0p1;
1838 +  Double_t fNeutralHadronIso_DR0p1To0p2;
1839 +  Double_t fNeutralHadronIso_DR0p2To0p3;
1840 +  Double_t fNeutralHadronIso_DR0p3To0p4;
1841 +  Double_t fNeutralHadronIso_DR0p4To0p5;
1842 +
1843 +
1844 +  //
1845 +  //Loop over PF Candidates
1846 +  //
1847 +  for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
1848 +
1849 +    if( !(PFnoPUflag[k]) ) continue; // my PF no PU hack
1850 +
1851 +    const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
1852 +    Double_t deta = (ele->Eta() - pf->Eta());
1853 +    Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(ele->Phi()),Double_t(pf->Phi()));
1854 +    Double_t dr = mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta());
1855 +    if (dr > 1.0) continue;
1856 +
1857 +    if(ctrl.debug) {
1858 +      cout << "pf :: type: " << pf->PFType() << "\tpt: " << pf->Pt();
1859 +      if( pf->HasTrackerTrk() ) cout << "\tdZ: " << pf->TrackerTrk()->DzCorrected(vtx);
1860 +      cout << endl;
1861 +    }
1862 +
1863 +
1864 +    if ( (pf->HasTrackerTrk() && (pf->TrackerTrk() == ele->TrackerTrk())) ||
1865 +         (pf->HasGsfTrk() && (pf->GsfTrk() == ele->GsfTrk()))) continue;
1866 +    
1867 +
1868 +    //
1869 +    // Lepton Footprint Removal
1870 +    //
1871 +    Bool_t IsLeptonFootprint = kFALSE;
1872 +    if (dr < 1.0) {
1873 +
1874 +
1875 +      //
1876 +      // Check for electrons
1877 +      //
1878 +
1879 +      for (Int_t q=0; q < electronsToVeto.size(); ++q) {
1880 +        const mithep::Electron *tmpele = electronsToVeto[q];
1881 +        double tmpdr = mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta());
1882 +
1883 +        // 4l electron
1884 +        if( pf->HasTrackerTrk()  ) {
1885 +          if( pf->TrackerTrk() == tmpele->TrackerTrk() ) {
1886 +            if( ctrl.debug) cout << "\tcharged tktrk, matches 4L ele ..." << endl;
1887 +            IsLeptonFootprint = kTRUE;
1888 +          }
1889 +        }
1890 +        if( pf->HasGsfTrk()  ) {
1891 +          if( pf->GsfTrk() == tmpele->GsfTrk() ) {
1892 +            if( ctrl.debug) cout << "\tcharged gsftrk, matches 4L ele ..." << endl;
1893 +            IsLeptonFootprint = kTRUE;
1894 +          }
1895 +        }
1896 +        // PF charged
1897 +        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) >= 1.479 && tmpdr < 0.015) {
1898 +          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L ele ..." << endl;
1899 +          IsLeptonFootprint = kTRUE;
1900 +        }
1901 +        // PF gamma
1902 +        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) >= 1.479
1903 +            && tmpdr < 0.08) {
1904 +          if( ctrl.debug) cout << "\tPF gamma, matches 4L ele ..." << endl;
1905 +          IsLeptonFootprint = kTRUE;
1906 +        }
1907 +      } // loop over electrons
1908 +
1909 +
1910 +      /* KH - comment for sync            
1911 +      //
1912 +      // Check for muons
1913 +      //
1914 +      for (Int_t q=0; q < muonsToVeto.size(); ++q) {
1915 +        const mithep::Muon *tmpmu = muonsToVeto[q];
1916 +        // 4l muon
1917 +        if( pf->HasTrackerTrk() ) {
1918 +          if (pf->TrackerTrk() == tmpmu->TrackerTrk() ){
1919 +            if( ctrl.debug) cout << "\tmatches 4L mu ..." << endl;
1920 +            IsLeptonFootprint = kTRUE;
1921 +          }
1922 +        }
1923 +        // PF charged
1924 +        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01) {
1925 +          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L mu ..." << endl;
1926 +          IsLeptonFootprint = kTRUE;
1927 +        }
1928 +      } // loop over muons
1929 +      */
1930 +
1931 +    if (IsLeptonFootprint)
1932 +      continue;
1933 +
1934 +    //
1935 +    // Charged Iso Rings
1936 +    //
1937 +    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
1938 +
1939 + //       if( pf->HasGsfTrk() ) {
1940 + //       if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1941 + //       } else if( pf->HasTrackerTrk() ){
1942 + //      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1943 + //       }
1944 +
1945 +      // Veto any PFmuon, or PFEle
1946 +      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
1947 +
1948 +      // Footprint Veto
1949 +      if (fabs(ele->SCluster()->Eta()) > 1.479 && dr < 0.015) continue;
1950 +
1951 +      if( ctrl.debug) cout << "charged:: pt: " << pf->Pt()
1952 +                           << "\ttype: " << pf->PFType()
1953 +                           << "\ttrk: " << pf->TrackerTrk() << endl;
1954 +
1955 +      if (dr < 0.1) tmpChargedIso_DR0p0To0p1 += pf->Pt();
1956 +      if (dr >= 0.1 && dr < 0.2) tmpChargedIso_DR0p1To0p2 += pf->Pt();
1957 +      if (dr >= 0.2 && dr < 0.3) tmpChargedIso_DR0p2To0p3 += pf->Pt();
1958 +      if (dr >= 0.3 && dr < 0.4) tmpChargedIso_DR0p3To0p4 += pf->Pt();
1959 +      if (dr >= 0.4 && dr < 0.5) tmpChargedIso_DR0p4To0p5 += pf->Pt();
1960 +
1961 +    }
1962 +
1963 +    //
1964 +    // Gamma Iso Rings
1965 +    //
1966 +    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
1967 +
1968 +      if (fabs(ele->SCluster()->Eta()) > 1.479 && dr < 0.08) continue;
1969 +
1970 +      if( ctrl.debug) cout << "gamma:: " << pf->Pt() << " "
1971 +                           << dr << endl;
1972 +
1973 +      if (dr < 0.1) tmpGammaIso_DR0p0To0p1 += pf->Pt();
1974 +      if (dr >= 0.1 && dr < 0.2) tmpGammaIso_DR0p1To0p2 += pf->Pt();
1975 +      if (dr >= 0.2 && dr < 0.3) tmpGammaIso_DR0p2To0p3 += pf->Pt();
1976 +      if (dr >= 0.3 && dr < 0.4) tmpGammaIso_DR0p3To0p4 += pf->Pt();
1977 +      if (dr >= 0.4 && dr < 0.5) tmpGammaIso_DR0p4To0p5 += pf->Pt();
1978 +    }
1979 +
1980 +    //
1981 +    // Other Neutral Iso Rings
1982 +    //
1983 +    else {
1984 +      if( ctrl.debug) cout << "neutral:: " << pf->Pt() << " "
1985 +                           << dr << endl;
1986 +      if (dr < 0.1) tmpNeutralHadronIso_DR0p0To0p1 += pf->Pt();
1987 +      if (dr >= 0.1 && dr < 0.2) tmpNeutralHadronIso_DR0p1To0p2 += pf->Pt();
1988 +      if (dr >= 0.2 && dr < 0.3) tmpNeutralHadronIso_DR0p2To0p3 += pf->Pt();
1989 +      if (dr >= 0.3 && dr < 0.4) tmpNeutralHadronIso_DR0p3To0p4 += pf->Pt();
1990 +      if (dr >= 0.4 && dr < 0.5) tmpNeutralHadronIso_DR0p4To0p5 += pf->Pt();
1991 +    }
1992 +
1993 +    }
1994 +
1995 +  }
1996 +
1997 +  fChargedIso_DR0p0To0p1   = fmin((tmpChargedIso_DR0p0To0p1)/ele->Pt(), 2.5);
1998 +  fChargedIso_DR0p1To0p2   = fmin((tmpChargedIso_DR0p1To0p2)/ele->Pt(), 2.5);
1999 +  fChargedIso_DR0p2To0p3   = fmin((tmpChargedIso_DR0p2To0p3)/ele->Pt(), 2.5);
2000 +  fChargedIso_DR0p3To0p4   = fmin((tmpChargedIso_DR0p3To0p4)/ele->Pt(), 2.5);
2001 +  fChargedIso_DR0p4To0p5   = fmin((tmpChargedIso_DR0p4To0p5)/ele->Pt(), 2.5);
2002 +
2003 +  if(ctrl.debug) {
2004 +    cout << "fChargedIso_DR0p0To0p1 : " << fChargedIso_DR0p0To0p1  << endl;
2005 +    cout << "fChargedIso_DR0p1To0p2 : " << fChargedIso_DR0p1To0p2  << endl;
2006 +    cout << "fChargedIso_DR0p2To0p3 : " << fChargedIso_DR0p2To0p3  << endl;
2007 +    cout << "fChargedIso_DR0p3To0p4 : " << fChargedIso_DR0p3To0p4  << endl;
2008 +    cout << "fChargedIso_DR0p4To0p5 : " << fChargedIso_DR0p4To0p5  << endl;
2009 +  }
2010 +
2011 +
2012 +  //  rho=0;
2013 +  //  double rho = 0;
2014 +  //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
2015 +  //     rho = fPUEnergyDensity->At(0)->Rho();
2016 +  //   if (!(isnan(fPUEnergyDensity->At(0)->RhoLowEta()) || isinf(fPUEnergyDensity->At(0)->RhoLowEta())))
2017 +  //     rho = fPUEnergyDensity->At(0)->RhoLowEta();
2018 +  
2019 +  // WARNING!!!!  
2020 +  // hardcode for sync ...
2021 +  EffectiveAreaVersion = eleT.kEleEAData2011;
2022 +  // WARNING!!!!  
2023 +
2024 +  if( ctrl.debug) {
2025 +    cout << "RHO: " << rho << endl;
2026 +    cout << "eta: " << ele->SCluster()->Eta() << endl;
2027 +    cout << "target: " << EffectiveAreaVersion << endl;
2028 +    cout << "effA 0-1: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p0To0p1,
2029 +                                                       ele->SCluster()->Eta(),
2030 +                                                       EffectiveAreaVersion)
2031 +         << endl;
2032 +    cout << "effA 1-2: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p1To0p2,
2033 +                                                       ele->SCluster()->Eta(),
2034 +                                                       EffectiveAreaVersion)
2035 +         << endl;
2036 +    cout << "effA 2-3: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p2To0p3,
2037 +                                                       ele->SCluster()->Eta(),
2038 +                                                       EffectiveAreaVersion)
2039 +         << endl;
2040 +    cout << "effA 3-4: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p3To0p4,
2041 +                                                       ele->SCluster()->Eta(),
2042 +                                                       EffectiveAreaVersion)
2043 +         << endl;
2044 +  }
2045 +
2046 +  fGammaIso_DR0p0To0p1 = fmax(fmin((tmpGammaIso_DR0p0To0p1
2047 +                                  -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p0To0p1,
2048 +                                                              ele->SCluster()->Eta(),
2049 +                                                              EffectiveAreaVersion))/ele->Pt()
2050 +                                 ,2.5)
2051 +                             ,0.0);
2052 +  fGammaIso_DR0p1To0p2 = fmax(fmin((tmpGammaIso_DR0p1To0p2
2053 +                                  -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p1To0p2,
2054 +                                                              ele->SCluster()->Eta(),
2055 +                                                              EffectiveAreaVersion))/ele->Pt()
2056 +                                 ,2.5)
2057 +                             ,0.0);
2058 +  fGammaIso_DR0p2To0p3 = fmax(fmin((tmpGammaIso_DR0p2To0p3
2059 +                                  -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p2To0p3,
2060 +                                                              ele->SCluster()->Eta()
2061 +                                                              ,EffectiveAreaVersion))/ele->Pt()
2062 +                                 ,2.5)
2063 +                             ,0.0);
2064 +  fGammaIso_DR0p3To0p4 = fmax(fmin((tmpGammaIso_DR0p3To0p4
2065 +                                  -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p3To0p4,
2066 +                                                              ele->SCluster()->Eta(),
2067 +                                                              EffectiveAreaVersion))/ele->Pt()
2068 +                                 ,2.5)
2069 +                             ,0.0);
2070 +  fGammaIso_DR0p4To0p5 = fmax(fmin((tmpGammaIso_DR0p4To0p5
2071 +                                  -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p4To0p5,
2072 +                                                              ele->SCluster()->Eta(),
2073 +                                                              EffectiveAreaVersion))/ele->Pt()
2074 +                                 ,2.5)
2075 +                             ,0.0);
2076 +
2077 +
2078 +  if( ctrl.debug) {
2079 +    cout << "fGammaIso_DR0p0To0p1: " << fGammaIso_DR0p0To0p1 << endl;
2080 +    cout << "fGammaIso_DR0p1To0p2: " << fGammaIso_DR0p1To0p2 << endl;
2081 +    cout << "fGammaIso_DR0p2To0p3: " << fGammaIso_DR0p2To0p3 << endl;
2082 +    cout << "fGammaIso_DR0p3To0p4: " << fGammaIso_DR0p3To0p4 << endl;
2083 +    cout << "fGammaIso_DR0p4To0p5: " << fGammaIso_DR0p4To0p5 << endl;
2084 +  }
2085 +
2086 +  fNeutralHadronIso_DR0p0To0p1 = fmax(fmin((tmpNeutralHadronIso_DR0p0To0p1
2087 +                                          -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p0To0p1,
2088 +                                                                 ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
2089 +                                         , 2.5)
2090 +                                     , 0.0);
2091 +  fNeutralHadronIso_DR0p1To0p2 = fmax(fmin((tmpNeutralHadronIso_DR0p1To0p2
2092 +                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p1To0p2,
2093 +                                                                   ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
2094 +                                           , 2.5)
2095 +                                       , 0.0);
2096 +  fNeutralHadronIso_DR0p2To0p3 = fmax(fmin((tmpNeutralHadronIso_DR0p2To0p3
2097 +                                          -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p2To0p3,
2098 +                                                                 ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
2099 +                                         , 2.5)
2100 +                                     , 0.0);
2101 +  fNeutralHadronIso_DR0p3To0p4 = fmax(fmin((tmpNeutralHadronIso_DR0p3To0p4
2102 +                                          -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p3To0p4,
2103 +                                                                 ele->SCluster()->Eta(), EffectiveAreaVersion))/ele->Pt()
2104 +                                         , 2.5)
2105 +                                     , 0.0);
2106 +  fNeutralHadronIso_DR0p4To0p5 = fmax(fmin((tmpNeutralHadronIso_DR0p4To0p5
2107 +                                          -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p4To0p5,
2108 +                                                                 ele->SCluster()->Eta(), EffectiveAreaVersion))/ele->Pt()
2109 +                                         , 2.5)
2110 +                                     , 0.0);
2111 +
2112 +  if( ctrl.debug) {
2113 +    cout << "fNeutralHadronIso_DR0p0To0p1: " << fNeutralHadronIso_DR0p0To0p1 << endl;
2114 +    cout << "fNeutralHadronIso_DR0p1To0p2: " << fNeutralHadronIso_DR0p1To0p2 << endl;
2115 +    cout << "fNeutralHadronIso_DR0p2To0p3: " << fNeutralHadronIso_DR0p2To0p3 << endl;
2116 +    cout << "fNeutralHadronIso_DR0p3To0p4: " << fNeutralHadronIso_DR0p3To0p4 << endl;
2117 +    cout << "fNeutralHadronIso_DR0p4To0p5: " << fNeutralHadronIso_DR0p4To0p5 << endl;
2118 +  }
2119 +
2120 +  double mvaval = eleIsoMVA->MVAValue_IsoRings( ele->Pt(),
2121 +                                                ele->SCluster()->Eta(),
2122 +                                                fChargedIso_DR0p0To0p1,
2123 +                                                fChargedIso_DR0p1To0p2,
2124 +                                                fChargedIso_DR0p2To0p3,
2125 +                                                fChargedIso_DR0p3To0p4,
2126 +                                                fChargedIso_DR0p4To0p5,
2127 +                                                fGammaIso_DR0p0To0p1,
2128 +                                                fGammaIso_DR0p1To0p2,
2129 +                                                fGammaIso_DR0p2To0p3,
2130 +                                                fGammaIso_DR0p3To0p4,
2131 +                                                fGammaIso_DR0p4To0p5,
2132 +                                                fNeutralHadronIso_DR0p0To0p1,
2133 +                                                fNeutralHadronIso_DR0p1To0p2,
2134 +                                                fNeutralHadronIso_DR0p2To0p3,
2135 +                                                fNeutralHadronIso_DR0p3To0p4,
2136 +                                                fNeutralHadronIso_DR0p4To0p5,
2137 +                                                ctrl.debug);
2138 +
2139 +  SelectionStatus status;
2140 +  status.isoMVA = mvaval;
2141 +  bool pass = false;
2142 +
2143 +  Int_t subdet = 0;
2144 +  if (fabs(ele->SCluster()->Eta()) < 0.8) subdet = 0;
2145 +  else if (fabs(ele->SCluster()->Eta()) < 1.479) subdet = 1;
2146 +  else subdet = 2;
2147 +
2148 +  Int_t ptBin = 0;
2149 +  if (ele->Pt() >= 10.0) ptBin = 1;
2150 +  
2151 +  Int_t MVABin = -1;
2152 +  if (subdet == 0 && ptBin == 0) MVABin = 0;
2153 +  if (subdet == 1 && ptBin == 0) MVABin = 1;
2154 +  if (subdet == 2 && ptBin == 0) MVABin = 2;
2155 +  if (subdet == 0 && ptBin == 1) MVABin = 3;
2156 +  if (subdet == 1 && ptBin == 1) MVABin = 4;
2157 +  if (subdet == 2 && ptBin == 1) MVABin = 5;
2158 +
2159 +  pass = false;
2160 +  if( MVABin == 0 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN0 ) pass = true;
2161 +  if( MVABin == 1 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN1 ) pass = true;
2162 +  if( MVABin == 2 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN2 ) pass = true;
2163 +  if( MVABin == 3 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN3 ) pass = true;
2164 +  if( MVABin == 4 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN4 ) pass = true;
2165 +  if( MVABin == 5 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN5 ) pass = true;
2166 +  if( pass ) status.orStatus(SelectionStatus::LOOSEISO);
2167 +
2168 + //   pass = false;
2169 + //   if( MVABin == 0 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN0 ) pass = true;
2170 + //   if( MVABin == 1 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN1 ) pass = true;
2171 + //   if( MVABin == 2 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN2 ) pass = true;
2172 + //   if( MVABin == 3 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN3 ) pass = true;
2173 + //   if( MVABin == 4 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN4 ) pass = true;
2174 + //   if( MVABin == 5 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN5 ) pass = true;
2175 + //   if( pass ) status.orStatus(SelectionStatus::TIGHTISO);
2176 +
2177 +  if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
2178 +  return status;
2179 +  
2180 + }
2181 +
2182 +
2183   //--------------------------------------------------------------------------------------------------
2184   void initElectronIsoMVA() {
2185   //--------------------------------------------------------------------------------------------------
# Line 1571 | Line 2352 | float electronPFIso04(ControlFlags &ctrl
2352        }
2353        if( ctrl.debug) cout << "gamma:: " << pf->Pt() << " "
2354                             << dr << endl;
2355 <      if( pf->Pt() > 0.5 )
2355 >      // KH, add to sync
2356 >      //      if( pf->Pt() > 0.5 )
2357          fGammaIso += pf->Pt();
2358      }
2359  
# Line 1581 | Line 2363 | float electronPFIso04(ControlFlags &ctrl
2363      else {
2364        if( ctrl.debug) cout << "neutral:: " << pf->Pt() << " "
2365                             << dr << endl;
2366 +      // KH, add to sync
2367        if( pf->Pt() > 0.5 )
2368          fNeutralHadronIso += pf->Pt();
2369      }
# Line 1601 | Line 2384 | float electronPFIso04(ControlFlags &ctrl
2384    // WARNING!!!!  
2385  
2386  
2387 <  double pfIso = fChargedIso +
2388 <    max(0.0,fGammaIso -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIso04,
2389 <                                                ele->Eta(),EffectiveAreaVersion)) +
1607 <    max(0.0,fNeutralHadronIso -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIso04,
1608 <                                                        ele->Eta(),EffectiveAreaVersion)) ;
2387 >  double pfIso = fChargedIso + fmax(0.0,(fGammaIso + fNeutralHadronIso
2388 >                                        -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaAndNeutralHadronIso04,
2389 >                                                                   ele->Eta(),EffectiveAreaVersion)));
2390  
2391    gChargedIso = fChargedIso;
2392    gGammaIso = fGammaIso;
# Line 1636 | Line 2417 | float electronPFIso04(ControlFlags &ctrl
2417             << "\tphi: " << vmu->Phi()
2418             << endl;
2419      }
2420 <    cout << "electronIsoMVASelection :: electrson to veto " << endl;
2420 >    cout << "electronIsoMVASelection :: electrons to veto " << endl;
2421      for( int i=0; i<electronsToVeto.size(); i++ ) {
2422        const mithep::Electron * vel = electronsToVeto[i];
2423        cout << "\tpt: " << vel->Pt()
# Line 1660 | Line 2441 | float electronPFIso04(ControlFlags &ctrl
2441    //Loop over PF Candidates
2442    //
2443    for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
2444 +
2445 +
2446      const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
2447      Double_t deta = (ele->Eta() - pf->Eta());
2448      Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(ele->Phi()),Double_t(pf->Phi()));
2449      Double_t dr = mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta());
2450 <    if (dr >= 0.4) continue;
2450 >
2451 >    if (dr > 0.4) continue;
2452 >    if( !(PFnoPUflag[k]) ) continue; // my PF no PU hack
2453 >
2454      if(ctrl.debug) {
2455 <      cout << "pf :: type: " << pf->PFType() << "\tpt: " << pf->Pt();
2456 <      if( pf->HasTrackerTrk() ) cout << "\tdZ: " << pf->TrackerTrk()->DzCorrected(vtx);
2455 >      cout << "pf :: type: " << pf->PFType() << "\tpt: " << pf->Pt() << "\tdR: " << dr;
2456 >      if( pf->HasTrackerTrk() ) cout << "\tdZ: " << pf->TrackerTrk()->DzCorrected(vtx)
2457 >                                     << "\ttrk: " << pf->HasTrackerTrk()
2458 >                                     << "\tgsf: " << pf->HasGsfTrk();
2459 >      
2460        cout << endl;
2461      }
2462  
2463  
2464 <    if ( (pf->HasTrackerTrk() && (pf->TrackerTrk() == ele->TrackerTrk())) ||
2465 <         (pf->HasGsfTrk() && (pf->GsfTrk() == ele->GsfTrk()))) continue;
2466 <    
2464 >    //
2465 >    // sync : I don't think theyre doing this ...
2466 >    //
2467 >    //     if ( (pf->HasTrackerTrk() && (pf->TrackerTrk() == ele->TrackerTrk())) ||
2468 >    //   (pf->HasGsfTrk() && (pf->GsfTrk() == ele->GsfTrk()))) {
2469 >    //       if( ctrl.debug ) cout << "\tskipping, matches to the electron ..."  << endl;
2470 >    //       continue;
2471 >    //     }
2472 >
2473  
2474      //
2475      // Lepton Footprint Removal
# Line 1687 | Line 2482 | float electronPFIso04(ControlFlags &ctrl
2482        //
2483        for (Int_t q=0; q < electronsToVeto.size(); ++q) {
2484          const mithep::Electron *tmpele = electronsToVeto[q];
2485 +        /*
2486          // 4l electron
2487          if( pf->HasTrackerTrk()  ) {
2488            if( pf->TrackerTrk() == tmpele->TrackerTrk() ) {
# Line 1700 | Line 2496 | float electronPFIso04(ControlFlags &ctrl
2496              IsLeptonFootprint = kTRUE;
2497            }
2498          }
2499 +        */
2500          // PF charged
2501          if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
2502              && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015) {
# Line 1743 | Line 2540 | float electronPFIso04(ControlFlags &ctrl
2540      //
2541      if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
2542  
2543 <      if( pf->HasTrackerTrk() )
2544 <        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
2545 <      if( pf->HasGsfTrk() )
2546 <        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
2543 > //       if( pf->HasTrackerTrk() )
2544 > //      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
2545 > //       if( pf->HasGsfTrk() )
2546 > //      if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
2547  
2548        // Veto any PFmuon, or PFEle
2549 <      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
2549 >      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) {
2550 >         cout << "\t skipping, pf is and ele or mu .." <<endl;
2551 >        continue;
2552 >      }
2553  
2554        // Footprint Veto
2555        if (fabs(ele->SCluster()->Eta()) > 1.479 && dr < 0.015) continue;
# Line 1771 | Line 2571 | float electronPFIso04(ControlFlags &ctrl
2571        }
2572        if( ctrl.debug) cout << "gamma:: " << pf->Pt() << " "
2573                             << dr << endl;
2574 <      fGammaIso += pf->Pt();
2574 >      // KH, add to sync
2575 >      //      if( pf->Pt() > 0.5 )
2576 >        fGammaIso += pf->Pt();
2577      }
2578  
2579      //
# Line 1799 | Line 2601 | float electronPFIso04(ControlFlags &ctrl
2601    // WARNING!!!!  
2602  
2603  
2604 <  double pfIso = fChargedIso +
2605 <    max(0.0,fGammaIso -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIso04,
2606 <                                                ele->Eta(),EffectiveAreaVersion)) +
2607 <    max(0.0,fNeutralHadronIso -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIso04,
2608 <                                                        ele->Eta(),EffectiveAreaVersion)) ;
2604 >  double pfIso = fChargedIso + fmax(0.0,(fGammaIso + fNeutralHadronIso
2605 >                                        -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaAndNeutralHadronIso04,
2606 >                                                                   ele->Eta(),EffectiveAreaVersion)));
2607 >
2608 >
2609 >  gChargedIso = fChargedIso;
2610 >  gGammaIso = fGammaIso;
2611 >  gNeutralIso = fNeutralHadronIso;  
2612    return pfIso;
2613   }
2614  
# Line 1824 | Line 2629 | SelectionStatus electronReferenceIsoSele
2629  
2630    double pfIso = electronPFIso04( ctrl, ele, vtx, fPFCandidates, fPUEnergyDensity,
2631                                    EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
2632 <  cout << "--------------> setting electron isoPF04 to " << pfIso << endl;
2632 >  //  cout << "--------------> setting electron isoPF04 to " << pfIso << endl;
2633    status.isoPF04 = pfIso;
2634    status.chisoPF04 = gChargedIso;
2635    status.gaisoPF04 = gGammaIso;
# Line 1860 | Line 2665 | SelectionStatus electronReferenceIsoSele
2665  
2666    double pfIso = electronPFIso04( ctrl, ele, vtx, fPFCandidates, rho,
2667                                    EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
2668 +  status.isoPF04 = pfIso;
2669 +  status.chisoPF04 = gChargedIso;
2670 +  status.gaisoPF04 = gGammaIso;
2671 +  status.neisoPF04 = gNeutralIso;
2672    bool pass = false;
2673    if( (pfIso/ele->Pt()) < ELECTRON_REFERENCE_PFISO_CUT ) pass = true;
2674  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines