ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/HbbAnalyzer/plugins/HbbAnalyzerNew.cc
(Generate patch)

Comparing UserCode/VHbbAnalysis/HbbAnalyzer/plugins/HbbAnalyzerNew.cc (file contents):
Revision 1.13 by tboccali, Mon Jul 25 08:55:40 2011 UTC vs.
Revision 1.23 by bortigno, Mon Aug 22 14:05:52 2011 UTC

# Line 21 | Line 21 | Implementation:
21   #include "VHbbAnalysis/VHbbDataFormats/interface/VHbbEvent.h"
22   #include "VHbbAnalysis/VHbbDataFormats/interface/VHbbEventAuxInfo.h"
23  
24 + #include "FWCore/Framework/interface/ESHandle.h"
25 + #include "DataFormats/PatCandidates/interface/PATObject.h"
26 + #include "DataFormats/PatCandidates/interface/TriggerObject.h"
27 + #include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h"
28 + #include "RecoBTag/Records/interface/BTagPerformanceRecord.h"
29 + #include "CondFormats/PhysicsToolsObjects/interface/BinningPointByMap.h"
30 + #include "RecoBTag/PerformanceDB/interface/BtagPerformance.h"
31 +
32   #include "DataFormats/GeometryVector/interface/VectorUtil.h"
33  
34  
# Line 294 | Line 302 | HbbAnalyzerNew::produce(edm::Event& iEve
302    Handle<reco::VertexCollection> recVtxs;
303    iEvent.getByLabel("offlinePrimaryVertices", recVtxs);
304    
305 +  auxInfo->pvInfo.nVertices = recVtxs->size();
306 +
307    for(size_t i = 0; i < recVtxs->size(); ++ i) {
308      const Vertex &vtx = (*recVtxs)[i];
309      double RecVtxProb=TMath::Prob(vtx.chi2(),vtx.ndof());
# Line 311 | Line 321 | HbbAnalyzerNew::produce(edm::Event& iEve
321  
322      
323    edm::Handle<double> rhoHandle;
324 <  iEvent.getByLabel(edm::InputTag("kt6PFJets", "rho"),rhoHandle); // configure srcRho = cms.InputTag('kt6PFJets")
315 <  auxInfo->puInfo.rho = *rhoHandle;
324 >  iEvent.getByLabel(edm::InputTag("kt6PFJets", "rho"),rhoHandle);   auxInfo->puInfo.rho = *rhoHandle;
325    
326    //// real start
327    
# Line 523 | Line 532 | HbbAnalyzerNew::produce(edm::Event& iEve
532    edm::Handle<CandidateView> dielectrons;
533    iEvent.getByLabel(dielecLabel_,dielectrons);
534  
535 +  //BTAGGING SCALE FACTOR FROM DATABASE
536 +  //Combined Secondary Vertex Loose
537 +  edm::ESHandle<BtagPerformance> bTagSF_CSVL_;
538 +  iSetup.get<BTagPerformanceRecord>().get("BTAGCSVL",bTagSF_CSVL_);
539 +  const BtagPerformance & bTagSF_CSVL = *(bTagSF_CSVL_.product());
540 +  //Combined Secondary Vertex Medium
541 +  edm::ESHandle<BtagPerformance> bTagSF_CSVM_;
542 +  iSetup.get<BTagPerformanceRecord>().get("BTAGCSVM",bTagSF_CSVM_);
543 +  const BtagPerformance & bTagSF_CSVM = *(bTagSF_CSVM_.product());
544 +  //Combined Secondary Vertex Tight
545 +  edm::ESHandle<BtagPerformance> bTagSF_CSVT_;
546 +  iSetup.get<BTagPerformanceRecord>().get("BTAGCSVT",bTagSF_CSVT_);
547 +  const BtagPerformance & bTagSF_CSVT = *(bTagSF_CSVT_.product());
548 +
549 +  edm::ESHandle<BtagPerformance> mistagSF_CSVL_;
550 +  iSetup.get<BTagPerformanceRecord>().get("MISTAGCSVL",mistagSF_CSVL_);
551 +  const BtagPerformance & mistagSF_CSVL = *(mistagSF_CSVL_.product());
552 +  //Combined Secondary Vertex Medium
553 +  edm::ESHandle<BtagPerformance> mistagSF_CSVM_;
554 +  iSetup.get<BTagPerformanceRecord>().get("MISTAGCSVM",mistagSF_CSVM_);
555 +  const BtagPerformance & mistagSF_CSVM = *(mistagSF_CSVM_.product());
556 +  //Combined Secondary Vertex Tight
557 +  edm::ESHandle<BtagPerformance> mistagSF_CSVT_;
558 +  iSetup.get<BTagPerformanceRecord>().get("MISTAGCSVT",mistagSF_CSVT_);
559 +  const BtagPerformance & mistagSF_CSVT = *(mistagSF_CSVT_.product());
560 +
561  
562    for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets1.begin(); jet_iter!=simplejets1.end(); ++jet_iter){
563      //     if(jet_iter->pt()>50)
# Line 541 | Line 576 | HbbAnalyzerNew::produce(edm::Event& iEve
576      sj.ntracks=jet_iter->associatedTracks().size();
577      sj.p4=GENPTOLORP(jet_iter);
578      sj.chargedTracksFourMomentum=(getChargedTracksMomentum(&*(jet_iter)));
579 <    
579 >    sj.SF_CSVL=1;
580 >    sj.SF_CSVM=1;
581 >    sj.SF_CSVT=1;
582 >    sj.SF_CSVLerr=0;
583 >    sj.SF_CSVMerr=0;
584 >    sj.SF_CSVTerr=0;
585      //
586      // add tVector
587      //
# Line 551 | Line 591 | HbbAnalyzerNew::produce(edm::Event& iEve
591  
592      if(runOnMC_){
593        double minb1DR=9999.;
594 +      //scale factor
595 +      BinningPointByMap measurePoint;
596 +      //for a USDG
597 +      //for CB jets
598 +      //scale factor 1 for CB jets over 240GeV/c
599 +      if( TMath::Abs(sj.flavour) == 4 or TMath::Abs(sj.flavour) == 5 ){
600 +        measurePoint.insert( BinningVariables::JetEt, sj.p4.Et() );
601 +        measurePoint.insert( BinningVariables::JetAbsEta, fabs(sj.p4.Eta()) );
602 +        if( bTagSF_CSVL.isResultOk(PerformanceResult::BTAGBEFFCORR , measurePoint) ){
603 +          sj.SF_CSVL = bTagSF_CSVL.getResult(PerformanceResult::BTAGBEFFCORR , measurePoint);
604 +          sj.SF_CSVLerr = bTagSF_CSVL.getResult(PerformanceResult::BTAGBERRCORR , measurePoint);          
605 +          if(verbose_){
606 +            std::clog << "C/B Jet flavour = " << sj.flavour << std::endl;
607 +            std::clog << "C/B Jet Et = " << sj.p4.Et() << std::endl;
608 +            std::clog << "C/B Jet eta = " << sj.p4.Eta() << std::endl;      
609 +            std::clog << "C/B Scale Factor = " << sj.SF_CSVL << std::endl;
610 +            std::clog << "C/B Scale Factor error = " << sj.SF_CSVLerr << std::endl;
611 +          }
612 +        }
613 +        if( bTagSF_CSVM.isResultOk(PerformanceResult::BTAGBEFFCORR , measurePoint) ){
614 +          sj.SF_CSVM = bTagSF_CSVM.getResult(PerformanceResult::BTAGBEFFCORR , measurePoint);
615 +          sj.SF_CSVMerr = bTagSF_CSVM.getResult(PerformanceResult::BTAGBERRCORR , measurePoint);          
616 +        }
617 +        if( bTagSF_CSVT.isResultOk(PerformanceResult::BTAGBEFFCORR , measurePoint) ){
618 +          sj.SF_CSVT = bTagSF_CSVT.getResult(PerformanceResult::BTAGBEFFCORR , measurePoint);
619 +          sj.SF_CSVTerr = bTagSF_CSVT.getResult(PerformanceResult::BTAGBERRCORR , measurePoint);          
620 +        }
621 +        else{
622 +          std::cerr << "No SF found in the database for this jet" << std::endl;
623 +          if(verbose_){
624 +            std::clog << "No SF found: Jet flavour = " << sj.flavour << std::endl;
625 +            std::clog << "No SF found: Jet Et = " << sj.p4.Et() << std::endl;
626 +            std::clog << "No SF found: Jet eta = " << sj.p4.Eta() << std::endl;
627 +          }
628 +        }
629 +      }
630 +      else {
631 +        measurePoint.insert( BinningVariables::JetEt, sj.p4.Et() );
632 +        measurePoint.insert( BinningVariables::JetAbsEta, fabs(sj.p4.Eta()) );
633 +        if( mistagSF_CSVL.isResultOk(PerformanceResult::BTAGLEFFCORR , measurePoint) ){
634 +          sj.SF_CSVL = mistagSF_CSVL.getResult(PerformanceResult::BTAGLEFFCORR , measurePoint);
635 +          sj.SF_CSVLerr = mistagSF_CSVL.getResult(PerformanceResult::BTAGLERRCORR , measurePoint);
636 +          if(verbose_){
637 +            std::clog << "Light Jet flavour = " << sj.flavour << std::endl;
638 +            std::clog << "Light Jet Et = " << sj.p4.Et() << std::endl;
639 +            std::clog << "Light Jet eta = " << sj.p4.Eta() << std::endl;            
640 +            std::clog << "Light Scale Factor = " << sj.SF_CSVL << std::endl;
641 +            std::clog << "Light Scale Factor error = " << sj.SF_CSVLerr << std::endl;
642 +          }
643 +        }
644 +        if( mistagSF_CSVM.isResultOk(PerformanceResult::BTAGLEFFCORR , measurePoint) ){
645 +          sj.SF_CSVM = mistagSF_CSVM.getResult(PerformanceResult::BTAGLEFFCORR , measurePoint);
646 +          sj.SF_CSVMerr = mistagSF_CSVM.getResult(PerformanceResult::BTAGLERRCORR , measurePoint);
647 +        }
648 +        if( mistagSF_CSVT.isResultOk(PerformanceResult::BTAGLEFFCORR , measurePoint) ){
649 +          sj.SF_CSVT = mistagSF_CSVT.getResult(PerformanceResult::BTAGLEFFCORR , measurePoint);
650 +          sj.SF_CSVTerr = mistagSF_CSVT.getResult(PerformanceResult::BTAGLERRCORR , measurePoint);
651 +        }
652 +        else{
653 +          std::cerr << "No SF found in the database for this jet" << std::endl;
654 +          if(verbose_){
655 +            std::clog << "No SF found: Jet flavour = " << sj.flavour << std::endl;
656 +            std::clog << "No SF found: Jet Et = " << sj.p4.Et() << std::endl;
657 +            std::clog << "No SF found: Jet eta = " << sj.p4.Eta() << std::endl;
658 +          }
659 +        }
660 +      }
661 +
662        for(size_t i = 0; i < genParticles->size(); ++ i) {
663          const GenParticle & p = (*genParticles)[i];
664          int id = p.pdgId();
665          if(abs(id)<=6 || id==21 || id==23 || abs(id)==24){
666 +          TLorentzVector bestMCp4_,bestMCp4mom_;
667            double bb1DR=TMath::Sqrt((p.eta()-p4Jet.eta())*(p.eta()-p4Jet.eta())+
668                                     (p.phi()-p4Jet.phi())*(p.phi()-p4Jet.phi()));
669 <          if(bb1DR<minb1DR) {minb1DR=bb1DR; sj.bestMCid=id; if(p.mother()!=0) sj.bestMCmomid=p.mother()->pdgId();}
669 >          if(bb1DR<minb1DR){
670 >            minb1DR=bb1DR;
671 >            sj.bestMCid=id;
672 >            bestMCp4_.SetPtEtaPhiE(p.pt(),p.eta(),p.phi(),p.energy());
673 >            sj.bestMCp4= bestMCp4_;
674 >            if(p.mother()!=0){
675 >              sj.bestMCmomid=p.mother()->pdgId();
676 >              bestMCp4mom_.SetPtEtaPhiE(p.mother()->pt(),p.mother()->eta(),p.mother()->phi(),p.mother()->energy());
677 >              sj.bestMCp4mom=bestMCp4mom_;
678 >            }
679 >          }
680          }
681        }
682 <    } //isMC    
682 >    } //isMC
683      hbbInfo->simpleJets.push_back(sj);
684      
685    }
# Line 738 | Line 857 | HbbAnalyzerNew::produce(edm::Event& iEve
857      mf.tIso=mu->trackIso();
858      mf.eIso=mu->ecalIso();
859      mf.hIso=mu->hcalIso();
860 +    mf.pfChaIso=mu->chargedHadronIso();
861 +    mf.pfPhoIso=mu->photonIso();
862 +    mf.pfNeuIso=mu->neutralHadronIso();
863      Geom::Phi<double> deltaphi(mu->phi()-atan2(mf.p4.Px(), mf.p4.Py()));
864      double acop = deltaphi.value();
865      mf.acop=acop;
866  
867      mf.ipDb=mu->dB();
868      mf.ipErrDb=mu->edB();
869 <    if(mu->isGlobalMuon()) mf.cat=1;
870 <    else if(mu->isTrackerMuon()) mf.cat=2;
871 <    else mf.cat=3;
869 >    mf.cat=0;
870 >    if(mu->isGlobalMuon()) mf.cat|=1;
871 >    if(mu->isTrackerMuon()) mf.cat|=2;
872 >    if(mu->isStandAloneMuon()) mf.cat|=4;
873      TrackRef trkMu1Ref = mu->get<TrackRef>();
874      if(trkMu1Ref.isNonnull()){
875        const Track* MuTrk1 = mu->get<TrackRef>().get();
# Line 768 | Line 891 | HbbAnalyzerNew::produce(edm::Event& iEve
891        mf.globChi2=-99;
892        mf.globNHits=-99;
893      }
894 +
895 +    //Muon trigger matching
896 +    for (int itrig = 0; itrig != ntrigs; ++itrig){
897 +      std::string trigName=triggerNames_.triggerName(itrig);
898 +      if( (mu->triggerObjectMatchesByPath(trigName).size() != 0) ){
899 +        mf.hltMatchedBits.push_back(itrig);
900 +        if(verbose_){
901 +          std::clog << "Trigger Matching box" << std::endl;
902 +          std::clog << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
903 +          std::clog << "Matching parameters are defined in the cfg" << std::endl;
904 +          std::clog << "Trigger bit = " << itrig << std::endl;
905 +          std::clog << "Trigger name = " << trigName << std::endl;
906 +          std::clog << "Trigger object matched collection size = " << mu->triggerObjectMatchesByPath(trigName).size() << std::endl;
907 +          std::clog << "Pat Muon pt = " << mf.p4.Pt() << " HLT object matched = " << mu->triggerObjectMatch(0)->p4().Pt() << std::endl;
908 +          std::clog << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
909 +        }
910 +      }
911 +    }
912      //
913 +
914      // add stamuon
915  
916      //    if (mu->isStandAloneMuon()) {
# Line 801 | Line 943 | HbbAnalyzerNew::produce(edm::Event& iEve
943      ef.tIso=elec->trackIso();
944      ef.eIso=elec->ecalIso();
945      ef.hIso=elec->hcalIso();
946 +    ef.pfChaIso=elec->chargedHadronIso();
947 +    ef.pfPhoIso=elec->photonIso();
948 +    ef.pfNeuIso=elec->neutralHadronIso();
949 +
950      Geom::Phi<double> deltaphi(elec->superCluster()->phi()-atan2(hbbInfo->calomet.p4.Py(),hbbInfo->calomet.p4.Px()));
951      ef.acop = deltaphi.value();
952      //
953      // fill eleids
954      //    
955 <    ef.id95 = elec->electronID("simpleEleId95cIso");
955 > /*    ef.id95 = elec->electronID("simpleEleId95cIso");
956      ef.id85 = elec->electronID("simpleEleId85cIso");
957      ef.id70 = elec->electronID("simpleEleId70cIso");
958      ef.id95r = elec->electronID("simpleEleId95relIso");
959      ef.id70r = elec->electronID("simpleEleId70relIso");
960      ef.id85r = elec->electronID("simpleEleId85relIso");
961 + */
962 +    ef.id95 =elec->electronID("eidVBTFCom95");
963 +    ef.id95r=elec->electronID("eidVBTFRel95");
964 +    ef.id85 =elec->electronID("eidVBTFCom85");
965 +    ef.id85r=elec->electronID("eidVBTFRel85");
966 +    ef.id80 =elec->electronID("eidVBTFCom80");
967 +    ef.id80r=elec->electronID("eidVBTFRel80");
968 +    ef.id70 =elec->electronID("eidVBTFCom70");
969 +    ef.id70r=elec->electronID("eidVBTFRel70");
970 +
971 +    //Muon trigger matching
972 +    for (int itrig = 0; itrig != ntrigs; ++itrig){
973 +      std::string trigName=triggerNames_.triggerName(itrig);
974 +      if( (elec->triggerObjectMatchesByPath(trigName).size() != 0) ){
975 +        ef.hltMatchedBits.push_back(itrig);
976 +        if(verbose_){
977 +          std::clog << "Trigger Matching box" << std::endl;
978 +          std::clog << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
979 +          std::clog << "Matching parameters are defined in the cfg" << std::endl;
980 +          std::clog << "Trigger bit = " << itrig << std::endl;
981 +          std::clog << "Trigger name = " << trigName << std::endl;
982 +          std::clog << "Trigger object matched collection size = " << elec->triggerObjectMatchesByPath(trigName).size() << std::endl;
983 +          std::clog << "Pat Electron pt = " << ef.p4.Pt() << " HLT object matched = " << elec->triggerObjectMatch(0)->p4().Pt() << std::endl;
984 +          std::clog << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
985 +        }
986 +      }
987 +    }
988  
989      if(runOnMC_){
990        const GenParticle* elecMc = elec->genLepton();
# Line 877 | Line 1050 | HbbAnalyzerNew::produce(edm::Event& iEve
1050      df.daughter1.ipErrDb=muonDau0.edB();
1051      df.daughter2.ipErrDb=muonDau1.edB();
1052  
1053 <
1054 <    if(muonDau0.isGlobalMuon()) df.daughter1.cat =1;
1055 <    else if(muonDau0.isTrackerMuon()) df.daughter1.cat=2;
1056 <    else df.daughter1.cat=3;
1057 <    if(muonDau1.isGlobalMuon()) df.daughter2.cat =1;
1058 <    else if(muonDau1.isTrackerMuon()) df.daughter2.cat=2;
1059 <    else df.daughter2.cat=3;
1053 >    df.daughter1.cat=0;
1054 >    if(muonDau0.isGlobalMuon()) df.daughter1.cat|=1;
1055 >    if(muonDau0.isTrackerMuon()) df.daughter1.cat|=2;
1056 >    if(muonDau0.isStandAloneMuon()) df.daughter1.cat|=4;
1057 >    df.daughter2.cat=0;
1058 >    if(muonDau1.isGlobalMuon()) df.daughter2.cat|=1;
1059 >    if(muonDau1.isTrackerMuon()) df.daughter2.cat|=2;
1060 >    if(muonDau1.isStandAloneMuon()) df.daughter2.cat|=4;
1061  
1062      TrackRef trkMu1Ref = muonDau0.get<TrackRef>();
1063      TrackRef trkMu2Ref = muonDau1.get<TrackRef>();
# Line 956 | Line 1130 | HbbAnalyzerNew::produce(edm::Event& iEve
1130      df.daughter2.hIso = elecDau1.hcalIso();
1131      
1132      // ids
1133 <    df.daughter1.id95 = elecDau0.electronID("simpleEleId95cIso");
1133 >    /*df.daughter1.id95 = elecDau0.electronID("simpleEleId95cIso");
1134      df.daughter1.id85 = elecDau0.electronID  ("simpleEleId85cIso");
1135      df.daughter1.id70 = elecDau0.electronID  ("simpleEleId70cIso");
1136      df.daughter1.id95r = elecDau0.electronID ("simpleEleId95relIso");
# Line 970 | Line 1144 | HbbAnalyzerNew::produce(edm::Event& iEve
1144      df.daughter2.id95r = elecDau1.electronID ("simpleEleId95relIso");
1145      df.daughter2.id85r = elecDau1.electronID ("simpleEleId85relIso");
1146      df.daughter2.id70r = elecDau1.electronID ("simpleEleId70relIso");
1147 <
1147 > */
1148      hbbInfo->diElectronInfo.push_back(df);
1149      
1150    }
# Line 989 | Line 1163 | HbbAnalyzerNew::produce(edm::Event& iEve
1163  
1164  
1165    iEvent.put(hbbInfo);
1166 +  iEvent.put(auxInfo);
1167  
1168  
1169   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines