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.65 by arizzi, Fri Mar 30 12:26:25 2012 UTC vs.
Revision 1.80 by apana, Fri Jan 25 22:16:36 2013 UTC

# Line 37 | Line 37 | Implementation:
37   #include "DataFormats/Math/interface/Vector3D.h"
38   #include "Math/GenVector/PxPyPzM4D.h"
39  
40 + #include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h"
41 + #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
42 + #include "TrackingTools/Records/interface/TransientTrackRecord.h"
43 + #include "TrackingTools/IPTools/interface/IPTools.h"
44 +
45 + #include "CMGTools/External/interface/PileupJetIdentifier.h"
46 + #include "CMGTools/External/interface/PileupJetIdAlgo.h"
47 + //#include "CMGTools/External/interface/PileupJetIdProducer.h"
48  
49   #include <cmath>
50  
# Line 183 | Line 191 | HbbAnalyzerNew::produce(edm::Event& iEve
191  
192    const Vertex &RecVtx = (*recVtxs)[VtxIn];
193    const Vertex &RecVtxFirst = (*recVtxs)[0];
194 +  const Vertex &vertex = RecVtxFirst; //used in ele id 2012
195    
196    auxInfo->pvInfo.firstPVInPT2 = TVector3(RecVtxFirst.x(), RecVtxFirst.y(), RecVtxFirst.z());
197    auxInfo->pvInfo.firstPVInProb = TVector3(RecVtx.x(), RecVtx.y(), RecVtx.z());
# Line 197 | Line 206 | HbbAnalyzerNew::produce(edm::Event& iEve
206    edm::Handle<double> rho25Handle;
207    iEvent.getByLabel(edm::InputTag("kt6PFJets25", "rho"),rho25Handle);  
208    auxInfo->puInfo.rho25 = *rho25Handle;
209 +  edm::Handle<double> rho25HandleIso;
210 +  iEvent.getByLabel(edm::InputTag("kt6PFJetsForIsolation", "rho"),rho25HandleIso);  
211 +  auxInfo->puInfo.rho25Iso = *rho25HandleIso;
212  
213 +  edm::Handle<double> rhoNeutralHandle;
214 +  iEvent.getByLabel(edm::InputTag("kt6PFJetsCentralNeutral", "rho"),rhoNeutralHandle);  
215 +  auxInfo->puInfo.rhoNeutral = *rhoNeutralHandle;
216 +
217 +
218    edm::Handle<std::vector< PileupSummaryInfo> > puHandle;
219  
220    if (runOnMC_){
# Line 207 | Line 224 | HbbAnalyzerNew::produce(edm::Event& iEve
224        std::vector< PileupSummaryInfo> pu = (*puHandle);
225        for (std::vector<PileupSummaryInfo>::const_iterator it= pu.begin(); it!=pu.end(); ++it){
226           int bx = (*it).getBunchCrossing();
227 +         if(bx == 0) { auxInfo->puInfo.truePU = (*it).getTrueNumInteractions();}
228          unsigned int num = (*it).getPU_NumInteractions();
229          //      std::cout <<" PU PUSHING "<<bx<<" " <<num<<std::endl;
230          auxInfo->puInfo.pus[bx]  =num;
# Line 373 | Line 391 | HbbAnalyzerNew::produce(edm::Event& iEve
391  
392    /////// end generator block    
393  
394 + /// photon used in isolation
395 +  edm::Handle<edm::View<reco::PFCandidate> > photonIsoH;
396 +  iEvent.getByLabel("pfAllPhotons",photonIsoH);
397 +  edm::View<reco::PFCandidate> photonsForIso = *photonIsoH;
398  
399    edm::Handle<edm::View<pat::Muon> > muonHandle;
400    iEvent.getByLabel(muoLabel_,muonHandle);
401    edm::View<pat::Muon> muons = *muonHandle;
402  
403    // hard jet  
404 <  edm::Handle<edm::View<pat::Jet> > jetHandle;
405 <  iEvent.getByLabel(jetLabel_,jetHandle);
406 <  edm::View<pat::Jet> jets = *jetHandle;
404 >  edm::Handle<edm::View<pat::Jet> > fatjetHandle;
405 >  iEvent.getByLabel(jetLabel_,fatjetHandle);
406 >  edm::View<pat::Jet> fatjets = *fatjetHandle;
407  
408    // sub jet  
409    edm::Handle<edm::View<pat::Jet> > subjetHandle;
# Line 395 | Line 417 | HbbAnalyzerNew::produce(edm::Event& iEve
417  
418    // standard jets
419  
398  edm::Handle<edm::View<pat::Jet> > simplejet1Handle;
399  iEvent.getByLabel(simplejet1Label_,simplejet1Handle);
400  edm::View<pat::Jet> simplejets1 = *simplejet1Handle;
420  
421    edm::Handle<edm::View<pat::Jet> > simplejet2Handle;
422    iEvent.getByLabel(simplejet2Label_,simplejet2Handle);
# Line 407 | Line 426 | HbbAnalyzerNew::produce(edm::Event& iEve
426    iEvent.getByLabel(simplejet3Label_,simplejet3Handle);
427    edm::View<pat::Jet> simplejets3 = *simplejet3Handle;
428  
410  edm::Handle<edm::View<pat::Jet> > simplejet4Handle;
411  iEvent.getByLabel(simplejet4Label_,simplejet4Handle);
412  edm::View<pat::Jet> simplejets4 = *simplejet4Handle;
429  
430  
431    edm::Handle<edm::View<pat::Electron> > electronHandle;
# Line 424 | Line 440 | HbbAnalyzerNew::produce(edm::Event& iEve
440    edm::Handle<edm::View<pat::Tau> > tauHandle;
441    iEvent.getByLabel(tauLabel_,tauHandle);
442    edm::View<pat::Tau> taus = *tauHandle;
443 <
443 >  
444 >  //Get the computer for the CSV
445 >  ESHandle<JetTagComputer> handle;
446 >  iSetup.get<JetTagComputerRecord>().get("combinedSecondaryVertex", handle);
447 >  computer = dynamic_cast<const GenericMVAJetTagComputer*>(handle.product());
448  
449    //BTAGGING SCALE FACTOR FROM DATABASE
450    //Combined Secondary Vertex Loose
# Line 446 | Line 466 | HbbAnalyzerNew::produce(edm::Event& iEve
466    edm::ESHandle<BtagPerformance> mistagSF_CSVT_;
467    iSetup.get<BTagPerformanceRecord>().get("MISTAGCSVT",mistagSF_CSVT_);
468  
469 +
470 +  //ccla moved out to SimpleJets2 loop
471 +  edm::Handle<edm::View<reco::Candidate> > muonNoCutsHandle;
472 +  iEvent.getByLabel(muonoCutsLabel_,muonNoCutsHandle);
473 +  edm::View<reco::Candidate> muonsNoCuts = *muonNoCutsHandle;
474 +
475 +  edm::Handle<edm::View<reco::Candidate> > eleNoCutsHandle;
476 +  iEvent.getByLabel(elenoCutsLabel_,eleNoCutsHandle);
477 +  edm::View<reco::Candidate> elesNoCuts = *eleNoCutsHandle;
478 +
479 +
480   BTagSFContainer btagSFs;
481    btagSFs.BTAGSF_CSVL = (bTagSF_CSVL_.product());
482    btagSFs.BTAGSF_CSVM = (bTagSF_CSVM_.product());
# Line 455 | Line 486 | BTagSFContainer btagSFs;
486    btagSFs.MISTAGSF_CSVT = (mistagSF_CSVT_.product());
487  
488   #ifdef ENABLE_SIMPLEJETS1
489 +  edm::Handle<edm::View<pat::Jet> > simplejet1Handle;
490 +  iEvent.getByLabel(simplejet1Label_,simplejet1Handle);
491 +  edm::View<pat::Jet> simplejets1 = *simplejet1Handle;
492    for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets1.begin(); jet_iter!=simplejets1.end(); ++jet_iter){
493      //     if(jet_iter->pt()>50)
494      //       njetscounter++;
# Line 543 | Line 577 | BTagSFContainer btagSFs;
577    }
578  
579   #ifdef ENABLE_SIMPLEJETS4
580 +  edm::Handle<edm::View<pat::Jet> > simplejet4Handle;
581 +  iEvent.getByLabel(simplejet4Label_,simplejet4Handle);
582 +  edm::View<pat::Jet> simplejets4 = *simplejet4Handle;
583    for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets4.begin(); jet_iter!=simplejets4.end(); ++jet_iter){
584      //     if(jet_iter->pt()>50)
585      //       njetscounter++;
586 <    VHbbEvent::SimpleJet sj;
586 >  
587 >   VHbbEvent::SimpleJet sj;
588      //    std::cout <<" sj4"<<std::endl;
589      fillSimpleJet(sj,jet_iter);
590      //    if(!runOnMC_)  
591      setJecUnc(sj,jecUnc);
592 +  
593  
594  
595      Particle::LorentzVector p4Jet = jet_iter->p4();
# Line 586 | Line 625 | BTagSFContainer btagSFs;
625    }
626   #endif //ENABLE SIMPLEJETS4
627  
628 <  
628 >
629 >
630    for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets2.begin(); jet_iter!=simplejets2.end(); ++jet_iter){
631      
632 +
633 +
634      VHbbEvent::SimpleJet sj;
635      //    std::cout <<" sj2"<<std::endl;
636 <    fillSimpleJet(sj,jet_iter);    
636 >    fillSimpleJet(sj,jet_iter);  
637 >
638 >    ///###########          PU JET ID #################
639 >   // add puId...
640 >    edm::Handle<edm::ValueMap<float> > puJetIdMVA;
641 >    iEvent.getByLabel("puJetMva","fullDiscriminant", puJetIdMVA);
642 >
643 >    edm::Handle<edm::ValueMap<int> > puJetIdFlag;
644 >    iEvent.getByLabel("puJetMva", "fullId", puJetIdFlag);
645 >
646 >    //    cout  << " pt " << jet_iter->pt() << " eta " << jet_iter->eta() << std::endl;
647 >    unsigned int idx = jet_iter - simplejets2.begin();
648 >
649 >
650 >
651 >    sj.puJetIdMva   = (*puJetIdMVA)[simplejets2.refAt(idx)];
652 >    int    idflag = (*puJetIdFlag)[simplejets2.refAt(idx)];
653 >  
654 >    
655 >    //     cout << " PU JetID MVA " << mva;
656 >    if( PileupJetIdentifier::passJetId( idflag, PileupJetIdentifier::kLoose )) {
657 >      //cout << " pass loose wp";
658 >      sj.puJetIdL =1;
659 >        }
660 >    if( PileupJetIdentifier::passJetId( idflag, PileupJetIdentifier::kMedium )) {
661 >      //    cout << " pass medium wp";
662 >      sj.puJetIdM =1;
663 >    }
664 >    if( PileupJetIdentifier::passJetId( idflag, PileupJetIdentifier::kTight )) {
665 >      //    cout << " pass tight wp";
666 >      sj.puJetIdT =1;
667 >    }
668 >    //    cout << endl;
669 >    //  #############  END OF PU JET ID ######################
670 >
671 >  
672      //  if(!runOnMC_)  
673   setJecUnc(sj,jecUnc);
674      /*    sj.flavour = jet_iter->partonFlavour();
# Line 614 | Line 691 | BTagSFContainer btagSFs;
691      sj.SF_CSVLerr=0;
692      sj.SF_CSVMerr=0;
693      sj.SF_CSVTerr=0;
694 <
694 >  
695 >
696      //
697      // addtaginfo for csv
698      //
# Line 679 | Line 757 | BTagSFContainer btagSFs;
757      }  //isMC
758  
759          // add flag if a reco lepton is find inside a cone around the jets...
682    edm::Handle<edm::View<reco::Candidate> > muonNoCutsHandle;
683    iEvent.getByLabel(muonoCutsLabel_,muonNoCutsHandle);
684    edm::View<reco::Candidate> muonsNoCuts = *muonNoCutsHandle;
760      
761      
762  
# Line 707 | Line 782 | BTagSFContainer btagSFs;
782        }
783      }
784      
785 <    
711 <    edm::Handle<edm::View<reco::Candidate> > eleNoCutsHandle;
712 <      iEvent.getByLabel(elenoCutsLabel_,eleNoCutsHandle);
713 <      edm::View<reco::Candidate> elesNoCuts = *eleNoCutsHandle;
714 <
715 <    
785 >    
786  
787        for(edm::View<reco::Candidate>::const_iterator ele = elesNoCuts.begin(); ele!=elesNoCuts.end() && sj.isSemiLept!=1; ++ele){
788      
# Line 766 | Line 836 | BTagSFContainer btagSFs;
836         }
837    */
838    
839 +    // S U B S T R U C T U R E
840 +    // (FastJet3)
841 +    edm::Handle<edm::View<pat::Jet> > ca12jetHandle;
842 +    iEvent.getByLabel("selectedPatJetsCA12PF",ca12jetHandle);
843 +    edm::View<pat::Jet> ca12jets = *ca12jetHandle;
844 +    edm::Handle<edm::View<pat::Jet> > camdft12jetHandle;
845 +    iEvent.getByLabel("selectedPatJetsCA12MassDropFilteredPF",camdft12jetHandle);
846 +    edm::View<pat::Jet> camdft12jets = *camdft12jetHandle;
847 +
848 +    edm::Handle<edm::View<pat::Jet> > camdft12subjetHandle;
849 +    iEvent.getByLabel("selectedPatJetsCA12MassDropFilteredSubjetsPF",camdft12subjetHandle);
850 +    edm::View<pat::Jet> camdft12subjets = *camdft12subjetHandle;
851 +    edm::Handle<edm::View<pat::Jet> > caft12subjetHandle;
852 +    iEvent.getByLabel("selectedPatJetsCA12FilteredSubjetsPF",caft12subjetHandle);
853 +    edm::View<pat::Jet> caft12subjets = *caft12subjetHandle;
854 +    edm::Handle<edm::View<pat::Jet> > capr12subjetHandle;
855 +    iEvent.getByLabel("selectedPatJetsCA12PrunedSubjetsPF",capr12subjetHandle);
856 +    edm::View<pat::Jet> capr12subjets = *capr12subjetHandle;
857 +
858 +    // C A 1 2   R A W   J E T S
859 +    //std::cout << "Fill CA12 Raw jet!" << std::endl;
860 +    for(edm::View<pat::Jet>::const_iterator jet_iter = ca12jets.begin(); jet_iter!=ca12jets.end(); ++jet_iter){
861 +        const std::vector<reco::PFCandidatePtr>& constituents = jet_iter->getPFConstituents();
862 +        //std::cout << "size: " << constituents.size() << std::endl;
863 +        VHbbEvent::RawJet rj;
864 +        rj.p4 = GENPTOLORP(jet_iter);
865 +        rj.Nconstituents = constituents.size();
866 +        for (unsigned int iJC=0; iJC<constituents.size(); ++iJC) {
867 +            rj.constituents_px.push_back( constituents.at(iJC)->px() );
868 +            rj.constituents_py.push_back( constituents.at(iJC)->py() );
869 +            rj.constituents_pz.push_back( constituents.at(iJC)->pz() );
870 +            rj.constituents_e.push_back( constituents.at(iJC)->energy() );
871 +            rj.constituents_pdgId.push_back( constituents.at(iJC)->pdgId() );
872 +        }
873 +        
874 +        if (jet_iter->genJet()){
875 +            const std::vector <const reco::GenParticle*>& genconstituents = jet_iter->genJet()->getGenConstituents();
876 +            rj.genP4 = GENPTOLORP(jet_iter->genJet());
877 +            rj.Ngenconstituents = genconstituents.size();
878 +            for (unsigned int iJC=0; iJC<genconstituents.size(); ++iJC) {
879 +                rj.genconstituents_px.push_back( genconstituents.at(iJC)->px() );
880 +                rj.genconstituents_py.push_back( genconstituents.at(iJC)->py() );
881 +                rj.genconstituents_pz.push_back( genconstituents.at(iJC)->pz() );
882 +                rj.genconstituents_e.push_back( genconstituents.at(iJC)->energy() );
883 +                rj.genconstituents_pdgId.push_back( genconstituents.at(iJC)->pdgId() );
884 +            }
885 +        }
886 +        hbbInfo->CA12_rawJets.push_back(rj);
887 +    }
888 +    
889 +    // C A 1 2   M A S S D R O P / F I L T E R E D   J E T S
890 +    //std::cout << "Fill CA12 MDFT jet!" << std::endl;
891 +    for(edm::View<pat::Jet>::const_iterator jet_iter = camdft12jets.begin(); jet_iter!=camdft12jets.end(); ++jet_iter){
892 +        if(printJet) {std::cout << "Jet Pt: " << jet_iter->pt() << " E,M: " << jet_iter->p4().E() << " " << jet_iter->p4().M() << "\n";}
893 +        const reco::Jet::Constituents& constituents = jet_iter->getJetConstituents();
894 +        //std::cout << "size: " << constituents.size() << std::endl;
895 +        VHbbEvent::HardJet hj;
896 +        hj.p4 = GENPTOLORP(jet_iter);
897 +        hj.constituents = constituents.size();
898 +        
899 +        for (unsigned int iJC=0; iJC<constituents.size(); ++iJC) {
900 +            const reco::Jet::Constituent& icandJet = constituents.at(iJC);
901 +            if(printJet) {std::cout << "subJet Pt: " << icandJet->pt() << " subJet E,M,eta,phi: " <<  icandJet->p4().E() << "," << icandJet->p4().M() << "," << icandJet->eta() << "," << icandJet->phi() << "\n"; }
902 +            hj.subFourMomentum.push_back(GENPTOLORP(icandJet));
903 +            hj.etaSub.push_back(icandJet->eta());
904 +            hj.phiSub.push_back(icandJet->phi());
905 +        }
906 +        hbbInfo->CA12mdft_hardJets.push_back(hj);
907 +    }
908 +    
909 +    // C A 1 2   M A S S D R O P / F I L T E R E D   S U B J E T S
910 +    //std::cout << "Fill CA12 MDFT subjet!" << std::endl;    
911 +    for(edm::View<pat::Jet>::const_iterator subjet_iter = camdft12subjets.begin(); subjet_iter!=camdft12subjets.end(); ++subjet_iter) {
912 +        VHbbEvent::SimpleJet sj;
913 +        fillSimpleJet(sj,subjet_iter);
914 +        //setJecUnc(sj,jecUnc);
915 +        hbbInfo->CA12mdft_subJets.push_back(sj);
916 +    }
917 +    
918 +    // C A 1 2   F I L T E R E D   S U B J E T S
919 +    //std::cout << "Fill CA12 FT subjet!" << std::endl;    
920 +    for(edm::View<pat::Jet>::const_iterator subjet_iter = caft12subjets.begin(); subjet_iter!=caft12subjets.end(); ++subjet_iter) {
921 +        VHbbEvent::SimpleJet sj;
922 +        fillSimpleJet(sj,subjet_iter);
923 +        //setJecUnc(sj,jecUnc);
924 +        hbbInfo->CA12ft_subJets.push_back(sj);
925 +    }
926 +    
927 +    // C A 1 2   P R U N E D   S U B J E T S
928 +    //std::cout << "Fill CA12 PR subjet!" << std::endl;    
929 +    for(edm::View<pat::Jet>::const_iterator subjet_iter = capr12subjets.begin(); subjet_iter!=capr12subjets.end(); ++subjet_iter) {
930 +        VHbbEvent::SimpleJet sj;
931 +        fillSimpleJet(sj,subjet_iter);
932 +        //setJecUnc(sj,jecUnc);
933 +        hbbInfo->CA12pr_subJets.push_back(sj);
934 +    }
935 +
936 +    // S U B S T R U C T U R E
937 +    // (FastJet2)
938 +    for(edm::View<pat::Jet>::const_iterator jet_iter = fatjets.begin(); jet_iter!=fatjets.end(); ++jet_iter){
939 +        if(printJet) {std::cout << "Jet Pt: " << jet_iter->pt() << " E,M: " << jet_iter->p4().E() << " " << jet_iter->p4().M() << "\n";}
940 +        const reco::Jet::Constituents& constituents = jet_iter->getJetConstituents();
941 +        //std::cout << "size: " << constituents.size() << std::endl;
942 +        VHbbEvent::HardJet hj;
943 +        hj.p4 = GENPTOLORP(jet_iter);
944 +        hj.constituents=constituents.size();
945 +        
946 +        for (unsigned int iJC=0; iJC<constituents.size(); ++iJC ){
947 +            const Jet::Constituent& icandJet = constituents.at(iJC);
948 +            if(printJet) {std::cout << "subJet Pt: " << icandJet->pt() << " subJet E,M,eta,phi: " <<  icandJet->p4().E() << "," << icandJet->p4().M() << "," << icandJet->eta() << "," << icandJet->phi() << "\n"; }
949 +            hj.subFourMomentum.push_back(GENPTOLORP(icandJet));
950 +            hj.etaSub.push_back(icandJet->eta());
951 +            hj.phiSub.push_back(icandJet->phi());
952 +        }
953 +        hbbInfo->hardJets.push_back(hj);
954 +    }
955  
956 +    //double matEta[1000*30],matPhi[1000*30];
957 +    //for(int i=0;i<1000;i++){for(int j=0;j<30;j++){matEta[i*j]=-99.;matPhi[i*j]=-99.;}}
958 +    //HardJetSubEta2.SetMatrixArray(matEta);
959 +    //HardJetSubPhi2.SetMatrixArray(matPhi);
960 +    //TMatrixDRow a1(HardJetSubEta2,0);
961 +    //for(int i=0;i<30;i++){
962 +    //  std::cout << "test: " << a1[i] << "\n";  
963 +    //}
964 +
965 +    for(edm::View<pat::Jet>::const_iterator subjet_iter = subjets.begin(); subjet_iter!=subjets.end(); ++subjet_iter) {
966 +        if(printJet) {std::cout << "SubJetTagged Pt: " << subjet_iter->pt() << " E,M,eta,phi,Btag: " << subjet_iter->p4().E()
967 +            << "," << subjet_iter->p4().M() << "," << subjet_iter->eta() << "," << subjet_iter->phi()
968 +            << "," << subjet_iter->bDiscriminator("combinedSecondaryVertexBJetTags") << "\n";}
969 +        VHbbEvent::SimpleJet sj;
970 +        fillSimpleJet(sj,subjet_iter);
971 +        setJecUnc(sj,jecUnc);
972 +        hbbInfo->subJets.push_back(sj);
973 +    }
974 +
975 +    for(edm::View<pat::Jet>::const_iterator subjet_iter = filterjets.begin(); subjet_iter!=filterjets.end(); ++subjet_iter) {
976 +        if(printJet) {std::cout << "FilterjetTagged Pt: " << subjet_iter->pt() << " E,M,eta,phi,Btag: " << subjet_iter->p4().E()
977 +            << "," << subjet_iter->p4().M() << "," << subjet_iter->eta() << "," << subjet_iter->phi()
978 +            << "," << subjet_iter->bDiscriminator("combinedSecondaryVertexBJetTags") << "\n";}
979 +        VHbbEvent::SimpleJet sj;
980 +        fillSimpleJet(sj,subjet_iter);
981 +        setJecUnc(sj,jecUnc);
982 +        
983 +
984 +        if(runOnMC_) {
985 +            // BTV scale factors
986 +            //fillScaleFactors(sj, btagSFs);
987 +
988 +            // physical parton for mother info ONLY
989 +            if( (subjet_iter->genParton()) ) {
990 +                sj.bestMCid = subjet_iter->genParton()->pdgId();
991 +                if( (subjet_iter->genParton()->mother()) )
992 +                    sj.bestMCmomid=subjet_iter->genParton()->mother()->pdgId();
993 +            }
994 +            // genJet
995 +            const reco::GenJet * gJ = subjet_iter->genJet();
996 +            TLorentzVector gJp4;
997 +            if(gJ) {
998 +                gJp4.SetPtEtaPhiE(gJ->pt(),gJ->eta(),gJ->phi(),gJ->energy());
999 +                sj.bestMCp4 = gJp4;
1000 +            }
1001 +        }
1002  
1003 <  /////// hard jet
772 <
773 <  
774 <  double matEta[1000*30],matPhi[1000*30];
775 <  for(int i=0;i<1000;i++){for(int j=0;j<30;j++){matEta[i*j]=-99.;matPhi[i*j]=-99.;}}
776 <
777 <  for(edm::View<pat::Jet>::const_iterator jet_iter = jets.begin(); jet_iter!=jets.end(); ++jet_iter){
1003 >        //ccla    
1004      
1005 <    if(printJet) {std::cout << "Jet Pt: " << jet_iter->pt() << " E,M: " << jet_iter->p4().E() << " " << jet_iter->p4().M() << "\n";}
1005 >
1006 >        for(edm::View<reco::Candidate>::const_iterator mu = muonsNoCuts.begin(); mu!=muonsNoCuts.end() && sj.isSemiLept!=1; ++mu){
1007 >          //      std::cout<< "found a muon with pt " << mu->pt()   << std::endl;
1008 >          const pat::Muon& m = static_cast <const pat::Muon&> (*mu);
1009 >          float Smpt = m.pt();
1010 >          float Smeta = m.eta();
1011 >          float Smphi = m.phi();
1012 >      
1013 >          float SmJdR = deltaR(Smeta, Smphi, sj.p4.Eta(), sj.p4.Phi());
1014 >      
1015 >          if   ( Smpt> lep_ptCutForBjets_ && SmJdR <0.5)  {
1016 >            sj.isSemiLept=1;
1017 >            //isSemiLept(-99), isSemiLeptMCtruth(-99), SoftLeptPt(-99), SoftLeptdR(-99), SoftLeptptRel(-99), SoftLeptpdgId(-99), SoftLeptIdlooseMu(-99), SoftLeptId95(-99), SoftLeptRelCombIso(-99),  
1018 >            sj.SoftLeptpdgId =13;
1019 >            sj.SoftLeptdR= SmJdR;
1020 >            sj.SoftLeptPt=Smpt;
1021 >            TVector3 mvec ( m.p4().Vect().X(), m.p4().Vect().Y(), m.p4().Vect().Z()  );
1022 >            sj.SoftLeptptRel=  sj.p4.Perp(  mvec );
1023 >            sj.SoftLeptRelCombIso = (m.trackIso() + m.ecalIso() + m.hcalIso() ) / Smpt ;
1024 >            sj.SoftLeptIdlooseMu=m.muonID("TMLastStationLoose");
1025 >          }
1026 >        }
1027      
781    reco::Jet::Constituents constituents = jet_iter->getJetConstituents();
1028      
1029 <    //    if(printJet) {std::cout << "NsubJets: " << constituents.size() << "\n";}
1030 <    VHbbEvent::HardJet hj;
1031 <    hj.constituents=constituents.size();
1032 <    hj.p4 =GENPTOLORP(jet_iter);
1029 >        //edm::Handle<edm::View<reco::Candidate> > eleNoCutsHandle;
1030 >        //iEvent.getByLabel(elenoCutsLabel_,eleNoCutsHandle);
1031 >        //edm::View<reco::Candidate> elesNoCuts = *eleNoCutsHandle;
1032 >
1033      
788    for (unsigned int iJC(0); iJC<constituents.size(); ++iJC ){
789      Jet::Constituent icandJet = constituents[iJC];
1034  
1035 <      if(printJet) {std::cout << "subJet Pt: " << icandJet->pt() << " subJet E,M,eta,phi: " <<  icandJet->p4().E() << ","
792 <                              << icandJet->p4().M() << "," << icandJet->eta() << "," << icandJet->phi() << "\n"; }
793 <
794 <
795 <      hj.subFourMomentum.push_back(GENPTOLORP(icandJet));
796 <      hj.etaSub.push_back(icandJet->eta());
797 <      hj.phiSub.push_back(icandJet->phi());
798 <    
799 <    }
800 <    hbbInfo->hardJets.push_back(hj);
801 <  }
1035 >        for(edm::View<reco::Candidate>::const_iterator ele = elesNoCuts.begin(); ele!=elesNoCuts.end() && sj.isSemiLept!=1; ++ele){
1036      
1037 <  //  HardJetSubEta2.SetMatrixArray(matEta);
1038 <  //  HardJetSubPhi2.SetMatrixArray(matPhi);
1039 <  //  TMatrixDRow a1(HardJetSubEta2,0);
1040 <  //  for(int i=0;i<30;i++){
1041 <  //   std::cout << "test: " << a1[i] << "\n";  
1042 <  //  }
1043 <
1044 <  // pat subJets with Btag
1045 <
1046 <
1047 <  for(edm::View<pat::Jet>::const_iterator subjet_iter = subjets.begin(); subjet_iter!=subjets.end(); ++subjet_iter){
1048 <
1049 <    if(printJet) {std::cout << "SubJetTagged Pt: " << subjet_iter->pt() << " E,M,eta,phi,Btag: " << subjet_iter->p4().E()
1050 <                            << "," << subjet_iter->p4().M() << "," << subjet_iter->eta() << "," << subjet_iter->phi()  
1051 <                            << "," << subjet_iter->bDiscriminator("combinedSecondaryVertexBJetTags") << "\n";}
1052 <
1053 <    VHbbEvent::SimpleJet sj;
1054 <    //    std::cout <<" sub jet "<<std::endl;
1055 <    fillSimpleJet(sj,subjet_iter);
1056 <    //  if(!runOnMC_)  
1057 <    setJecUnc(sj,jecUnc);
1058 <    /*    sj.flavour = subjet_iter->partonFlavour();
1059 <    sj.tVector = getTvect(&(*subjet_iter));
1060 <    sj.tche=subjet_iter->bDiscriminator("trackCountingHighEffBJetTags");
1061 <    sj.tchp=subjet_iter->bDiscriminator("trackCountingHighPurBJetTags");
1062 <    sj.jp=subjet_iter->bDiscriminator("jetProbabilityBJetTags");
1063 <    sj.jpb=subjet_iter->bDiscriminator("jetBProbabilityBJetTags");
830 <    sj.ssvhe=subjet_iter->bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
831 <    sj.csv=subjet_iter->bDiscriminator("combinedSecondaryVertexBJetTags");
832 <    sj.csvmva=subjet_iter->bDiscriminator("combinedSecondaryVertexMVABJetTags");
833 <    sj.charge=subjet_iter->jetCharge();
834 <    sj.ntracks=subjet_iter->associatedTracks().size();
835 <    sj.p4=GENPTOLORP(subjet_iter);
836 <    sj.p4=(getChargedTracksMomentum(&*(subjet_iter)));
837 <
838 <    //
839 <    // addtaginfo for csv
840 <    //
1037 >          const pat::Electron& e = static_cast <const pat::Electron&> (*ele);
1038 >          float Smpt = e.pt();
1039 >          float Smeta = e.eta();
1040 >          float Smphi = e.phi();
1041 >      
1042 >          float SmJdR = deltaR(Smeta, Smphi, sj.p4.Eta(), sj.p4.Phi());
1043 >          if   ( Smpt> lep_ptCutForBjets_ && SmJdR <0.5)  {
1044 >            sj.isSemiLept=1;
1045 >            sj.SoftLeptpdgId =11;
1046 >            sj.SoftLeptdR= SmJdR;
1047 >            sj.SoftLeptPt=Smpt;
1048 >            TVector3 mvec ( e.p4().Vect().X(), e.p4().Vect().Y(), e.p4().Vect().Z()  );
1049 >            sj.SoftLeptptRel=  sj.p4.Perp(  mvec );
1050 >            sj.SoftLeptRelCombIso = (e.trackIso() + e.ecalIso() + e.hcalIso() ) / Smpt ;
1051 >            //   sj.SoftLeptId95=e.electronID("eidVBTFCom95");
1052 >            //std::cout << "before ele id " << std::endl;      
1053 >            // std::cout << " e.e.sigmaIetaIeta " << e.sigmaIetaIeta() <<  std::endl;
1054 >            //std::cout << " e.isEB() " << e.isEB() << std::endl;
1055 >            if (  
1056 >                ( fabs(Smeta)<2.5 && !( abs(Smeta)>1.4442 && abs(Smeta)<1.566))  &&
1057 >              
1058 >                (( abs(Smeta)>1.566  && (e.sigmaIetaIeta()<0.01) && ( e.deltaPhiSuperClusterTrackAtVtx()<0.8  && e.deltaPhiSuperClusterTrackAtVtx()>-0.8) && ( e.deltaEtaSuperClusterTrackAtVtx()<0.007 && e.deltaEtaSuperClusterTrackAtVtx()>-0.007 )  )
1059 >                 || ( abs(Smeta)<1.4442  && (e.sigmaIetaIeta()<0.03) && ( e.deltaPhiSuperClusterTrackAtVtx()<0.7 && e.deltaPhiSuperClusterTrackAtVtx()>-0.7 ) && ( e.deltaEtaSuperClusterTrackAtVtx()<0.01 && e.deltaEtaSuperClusterTrackAtVtx()>-0.01 ) ))
1060 >                  )
1061 >              sj.SoftLeptId95=1;
1062 >          }
1063 >        }
1064  
842    if (subjet_iter->hasTagInfo("SimpleSecondaryVertex")) {
1065  
1066 <      const reco::SecondaryVertexTagInfo * tf = subjet_iter->tagInfoSecondaryVertex();
845 <      sj.vtxMass = tf->secondaryVertex(0).p4().mass();
846 <      sj.vtxNTracks = tf->secondaryVertex(0).nTracks();
847 <      Measurement1D m = tf->flightDistance(0);
848 <      sj.vtx3dL = m.value();
849 <      sj.vtx3deL = m.error();
1066 >        hbbInfo->filterJets.push_back(sj);
1067      }
851    */
852    hbbInfo->subJets.push_back(sj);
853
854  }
855
856  for(edm::View<pat::Jet>::const_iterator filterjet_iter = filterjets.begin(); filterjet_iter!=filterjets.end(); ++filterjet_iter){
857
858    if(printJet) {std::cout << "FilterjetTagged Pt: " << filterjet_iter->pt() << " E,M,eta,phi,Btag: " << filterjet_iter->p4().E()  << "," << filterjet_iter->p4().M() << "," << filterjet_iter->eta() << "," << filterjet_iter->phi()  << "," << filterjet_iter->bDiscriminator("combinedSecondaryVertexBJetTags") << "\n";}
859
860    VHbbEvent::SimpleJet fj;
861    //    std::cout <<" sub jet "<<std::endl;
862    fillSimpleJet(fj,filterjet_iter);
863    //  if(!runOnMC_)  
864    setJecUnc(fj,jecUnc);
865
866    hbbInfo->filterJets.push_back(fj);
867    
868
869  }
1068  
1069    //
1070    // add charged met
# Line 909 | Line 1107 | BTagSFContainer btagSFs;
1107    }
1108  
1109    // type 1 corr met NoPU
1110 <  edm::Handle<edm::View<reco::MET> > pfmetNoPUType1corrHandle;
1110 > /*  edm::Handle<edm::View<reco::MET> > pfmetNoPUType1corrHandle;
1111    iEvent.getByLabel("patType1CorrectedPFMetNoPU",pfmetNoPUType1corrHandle);
1112    edm::View<reco::MET> pfmetsNoPUType1corr = *pfmetNoPUType1corrHandle;
1113    if(pfmetsNoPUType1corr.size()){
# Line 933 | Line 1131 | BTagSFContainer btagSFs;
1131      if (verbose_)     std::cout <<" type 1 +2 corrected pfMET "<<     hbbInfo->pfmetNoPUType1p2corr.metSig <<" " <<     hbbInfo->pfmetNoPUType1p2corr.sumEt<<std::endl;
1132    }
1133  
1134 + */
1135  
1136    /*
1137    // MET uncertainty vector
# Line 1298 | Line 1497 | BTagSFContainer btagSFs;
1497    }
1498    
1499    edm::Handle<edm::View<pat::MET> > metPFHandle;
1500 <  iEvent.getByLabel("patMETsPF",metPFHandle);
1500 >  iEvent.getByLabel("patMETsPFlow",metPFHandle);
1501    edm::View<pat::MET> metsPF = *metPFHandle;
1502    
1503    if(metsPF.size()){
# Line 1325 | Line 1524 | BTagSFContainer btagSFs;
1524      mf.eIso=mu->ecalIso();
1525      mf.hIso=mu->hcalIso();
1526      mf.pfChaIso=mu->chargedHadronIso();
1527 <    mf.pfChaPUIso=mu->userIso(5);
1527 >    mf.pfChaPUIso=mu->puChargedHadronIso(); //userIso(5);
1528      mf.pfPhoIso=mu->photonIso();
1529      mf.pfNeuIso=mu->neutralHadronIso();
1530      Geom::Phi<double> deltaphi(mu->phi()-atan2(mf.p4.Px(), mf.p4.Py()));
# Line 1357 | Line 1556 | BTagSFContainer btagSFs;
1556  
1557        mf.nValidTracker = p1.numberOfValidTrackerHits();
1558        mf.nValidPixel = p1.numberOfValidPixelHits();
1559 +      mf.nValidLayers = p1.trackerLayersWithMeasurement();
1560 +      mf.isPF = mu->isPFMuon();
1561  
1562  
1563  
# Line 1414 | Line 1615 | BTagSFContainer btagSFs;
1615  
1616   if(verbose_)
1617      std::cout << " INPUT electrons "<<electrons.size()<<std::endl;
1618 +  InputTag  reducedEBRecHitCollection(string("reducedEcalRecHitsEB"));
1619 +  InputTag  reducedEERecHitCollection(string("reducedEcalRecHitsEE"));
1620 +  EcalClusterLazyTools lazyTools(iEvent, iSetup, reducedEBRecHitCollection, reducedEERecHitCollection);
1621 +  edm::ESHandle<TransientTrackBuilder> builder;
1622 +  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", builder);
1623 +  const TransientTrackBuilder & transientTrackBuilder= *(builder.product());
1624 +
1625    for(edm::View<pat::Electron>::const_iterator elec = electrons.begin(); elec!=electrons.end(); ++elec){
1626      VHbbEvent::ElectronInfo ef;
1627      ef.p4=GENPTOLORP(elec);
# Line 1425 | Line 1633 | BTagSFContainer btagSFs;
1633      ef.eIso=elec->ecalIso();
1634      ef.hIso=elec->hcalIso();
1635      ef.pfChaIso=elec->chargedHadronIso();
1636 <    ef.pfChaPUIso=elec->userIso(5);
1636 >    ef.pfChaPUIso=elec->puChargedHadronIso();//userIso(5);
1637      ef.pfPhoIso=elec->photonIso();
1638 +    ef.pfPhoIsoDoubleCounted=0;
1639 +
1640 + /* Check if there are photons sharing the super cluster*/
1641 +    for(size_t k=0;k<photonsForIso.size();k++) {
1642 +       if(deltaR(elec->eta(),elec->phi(),photonsForIso[k].eta(),photonsForIso[k].phi()) < 0.05 && abs(photonsForIso[k].pt()-elec->pt())/(photonsForIso[k].pt()+elec->pt()) < 0.05 ) {
1643 +          std::cout << "Double counting of supercluster!" << std::endl;
1644 +          ef.pfPhoIsoDoubleCounted+=photonsForIso[k].pt();
1645 +     }
1646 +    }
1647      ef.pfNeuIso=elec->neutralHadronIso();
1648  
1649      //
# Line 1447 | Line 1664 | BTagSFContainer btagSFs;
1664      ef.HoE = elec->hadronicOverEm();
1665      ef.convDist = elec->convDist();
1666      ef.convDcot = elec->convDcot();
1667 <    if(elec->gsfTrack().isNonnull()) ef.innerHits = elec->gsfTrack()->trackerExpectedHitsInner().numberOfHits();  
1667 >    if(elec->gsfTrack().isNonnull())
1668 >    {
1669 >     ef.innerHits = elec->gsfTrack()->trackerExpectedHitsInner().numberOfHits();  
1670 >    }
1671      ef.isEB = elec->isEB();
1672      ef.isEE = elec->isEE();
1673 + /* 2012 ELEID*/
1674 +
1675 +  const pat::Electron & ele = *elec;
1676 +  bool validKF= false;
1677 +  reco::TrackRef myTrackRef = ele.closestCtfTrackRef();
1678 +  validKF = (myTrackRef.isAvailable());
1679 +  validKF = (myTrackRef.isNonnull());  
1680 +
1681 +  // Pure tracking variables
1682 +  ef.fMVAVar_fbrem           =  ele.fbrem();
1683 +  ef.fMVAVar_kfchi2          =  (validKF) ? myTrackRef->normalizedChi2() : 0 ;
1684 +  ef.fMVAVar_kfhits          =  (validKF) ? myTrackRef->hitPattern().trackerLayersWithMeasurement() : -1. ;
1685 +  //  fMVAVar_kfhitsall          =  (validKF) ? myTrackRef->numberOfValidHits() : -1. ;   //  save also this in your ntuple as possible alternative
1686 +  ef.fMVAVar_gsfchi2         =  ele.gsfTrack()->normalizedChi2();  
1687 +
1688 +  
1689 +  // Geometrical matchings
1690 +  ef.fMVAVar_deta            =  ele.deltaEtaSuperClusterTrackAtVtx();
1691 +  ef.fMVAVar_dphi            =  ele.deltaPhiSuperClusterTrackAtVtx();
1692 +  ef.fMVAVar_detacalo        =  ele.deltaEtaSeedClusterTrackAtCalo();
1693 +  // fMVAVar_dphicalo        =  ele.deltaPhiSeedClusterTrackAtCalo();   //  save also this in your ntuple
1694 +
1695 +
1696 +  // Pure ECAL -> shower shapes
1697 +  ef.fMVAVar_see             =  ele.sigmaIetaIeta();    //EleSigmaIEtaIEta
1698 +  std::vector<float> vCov = lazyTools.localCovariances(*(ele.superCluster()->seed())) ;
1699 +  if (!isnan(vCov[2])) ef.fMVAVar_spp = sqrt (vCov[2]);   //EleSigmaIPhiIPhi
1700 +  else ef.fMVAVar_spp = 0.;    
1701 +  // fMVAVar_sigmaIEtaIPhi = vCov[1];  //  save also this in your ntuple
1702 +
1703 +  ef.fMVAVar_etawidth        =  ele.superCluster()->etaWidth();
1704 +  ef.fMVAVar_phiwidth        =  ele.superCluster()->phiWidth();
1705 +  ef.fMVAVar_e1x5e5x5        =  (ele.e5x5()) !=0. ? 1.-(ele.e1x5()/ele.e5x5()) : -1. ;
1706 +  ef.fMVAVar_R9              =  lazyTools.e3x3(*(ele.superCluster()->seed())) / ele.superCluster()->rawEnergy();
1707 +  //fMVAVar_nbrems          =  fabs(ele.numberOfBrems());    //  save also this in your ntuple
1708 +
1709 +  // Energy matching
1710 +  ef.fMVAVar_HoE             =  ele.hadronicOverEm();
1711 +  ef.fMVAVar_EoP             =  ele.eSuperClusterOverP();
1712 +  // fMVAVar_IoEmIoP         =  (1.0/(ele.superCluster()->energy())) - (1.0 / ele.p());  // in the future to be changed with ele.gsfTrack()->p()
1713 +  ef.fMVAVar_IoEmIoP         =  (1.0/ele.ecalEnergy()) - (1.0 / ele.p());  // in the future to be changed with ele.gsfTrack()->p()   // 24/04/2012 changed to correctly access the   corrected supercluster energy from CMSSW_52X
1714 +
1715 +  ef.fMVAVar_eleEoPout       =  ele.eEleClusterOverPout();
1716 +  ef.fMVAVar_PreShowerOverRaw=  ele.superCluster()->preshowerEnergy() / ele.superCluster()->rawEnergy();
1717 +  // fMVAVar_EoPout          =  ele.eSeedClusterOverPout();     //  save also this in your ntuple
1718 +
1719 +
1720 +  // Spectators
1721 +  ef.fMVAVar_eta             =  ele.superCluster()->eta();        
1722 +  ef.fMVAVar_pt              =  ele.pt();                          
1723 +
1724 +  //additional for cut based
1725 +  ef.dxy = elec->gsfTrack()->dxy(vertex.position());
1726 +  ef.dz  = elec->gsfTrack()->dz(vertex.position());
1727 +
1728 +
1729 +    //d0
1730 +    if (ele.gsfTrack().isNonnull()) {
1731 +      ef.fMVAVar_d0 = (-1.0)*ele.gsfTrack()->dxy(vertex.position());
1732 +    } else if (ele.closestCtfTrackRef().isNonnull()) {
1733 +      ef.fMVAVar_d0 = (-1.0)*ele.closestCtfTrackRef()->dxy(vertex.position());
1734 +    } else {
1735 +      ef.fMVAVar_d0 = -9999.0;
1736 +    
1737 +    //default values for IP3D
1738 +    ef.fMVAVar_ip3d = -999.0;
1739 +    // fMVAVar_ip3dSig = 0.0;
1740 +    if (ele.gsfTrack().isNonnull()) {
1741 +      const double gsfsign   = ( (-ele.gsfTrack()->dxy(vertex.position()))   >=0 ) ? 1. : -1.;
1742 +      
1743 +      const reco::TransientTrack &tt = transientTrackBuilder.build(ele.gsfTrack());
1744 +      const std::pair<bool,Measurement1D> &ip3dpv =  IPTools::absoluteImpactParameter3D(tt,vertex);
1745 +      if (ip3dpv.first) {
1746 +        double ip3d = gsfsign*ip3dpv.second.value();
1747 +        //double ip3derr = ip3dpv.second.error();  
1748 +        ef.fMVAVar_ip3d = ip3d;
1749 +        // fMVAVar_ip3dSig = ip3d/ip3derr;
1750 +      }
1751 +    }
1752 +  }
1753 +  
1754 +
1755 + /* end of 2012 ELEID*/
1756 +
1757      //
1758      // fill eleids
1759      //    
# Line 1468 | Line 1772 | BTagSFContainer btagSFs;
1772      ef.id80r=elec->electronID("eidVBTFRel80");
1773      ef.id70 =elec->electronID("eidVBTFCom70");
1774      ef.id70r=elec->electronID("eidVBTFRel70");
1775 +    ef.mvaOut=elec->electronID("mvaNonTrigV0");
1776 +    ef.mvaOutTrig=elec->electronID("mvaTrigV0");
1777  
1778      //Electron trigger matching
1779      for (int itrig = 0; itrig != ntrigs; ++itrig){
# Line 1820 | Line 2126 | void HbbAnalyzerNew ::fillSimpleJet (VHb
2126      sj.SF_CSVMerr=0;
2127      sj.SF_CSVTerr=0;
2128  
2129 +    //for quark-gluon tagger
2130 +    sj.constituentPtDistribution = jet_iter->constituentPtDistribution();
2131 +    sj.constituentEtaPhiSpread = jet_iter->constituentEtaPhiSpread();
2132 +
2133      
2134      if (jet_iter->isPFJet() == true) {
2135  
# Line 1830 | Line 2140 | void HbbAnalyzerNew ::fillSimpleJet (VHb
2140        sj.nConstituents = jet_iter->getPFConstituents().size();
2141        
2142      }
2143 +    sj.jetArea = jet_iter->jetArea();
2144      //
2145      // addtaginfo for csv
2146      //
# Line 1838 | Line 2149 | void HbbAnalyzerNew ::fillSimpleJet (VHb
2149  
2150      const reco::SecondaryVertexTagInfo * tf = jet_iter->tagInfoSecondaryVertex();
2151     if (tf){
2152 +      math::XYZTLorentzVectorD vertexSum;
2153 +      for(size_t vi=0;vi< tf->nVertices();vi++)
2154 +      {
2155 +        vertexSum+=tf->secondaryVertex(vi).p4();
2156 +      }
2157 +      sj.vtxP4 = GENPTOLOR(vertexSum);
2158 +
2159       if (tf->nVertices() >0){
2160 <        sj.vtxMass = tf->secondaryVertex(0).p4().mass();
2160 >        sj.vtxPosition = TVector3(tf->secondaryVertex(0).position().x(),tf->secondaryVertex(0).position().y(),tf->secondaryVertex(0).position().z());
2161 >        sj.vtxMass =  tf->secondaryVertex(0).p4().mass();
2162          sj.vtxNTracks = tf->secondaryVertex(0).nTracks();
2163          std::vector<reco::TrackBaseRef >::const_iterator tit =  tf->secondaryVertex(0).tracks_begin();
2164          for (; tit<  tf->secondaryVertex(0).tracks_end(); ++tit){
# Line 1850 | Line 2169 | void HbbAnalyzerNew ::fillSimpleJet (VHb
2169          sj.vtx3deL = m.error();
2170       }
2171      }
2172 +    
2173 +    // CSV track info
2174 +    const reco::SecondaryVertexTagInfo * svTagInfos = jet_iter->tagInfoSecondaryVertex();
2175 +    const reco::TrackIPTagInfo * ipTagInfos = jet_iter->tagInfoTrackIP();
2176 +    for (edm::RefVector<reco::TrackCollection>::const_iterator t = ipTagInfos->selectedTracks().begin(); t != ipTagInfos->selectedTracks().end(); t++){
2177 +      sj.btagTrackIds.push_back(t->key());
2178 +    }// all btag IP selected tracks    
2179 +    std::vector<const reco::BaseTagInfo*> tagInfos;
2180 +    tagInfos.push_back(dynamic_cast<const reco::BaseTagInfo*>(ipTagInfos));
2181 +    tagInfos.push_back(dynamic_cast<const reco::BaseTagInfo*>(svTagInfos));
2182 +    JetTagComputer::TagInfoHelper helper(tagInfos);
2183 +    reco::TaggingVariableList varList = computer->taggingVariables(helper); // computer for getting CSV variables
2184 +      
2185 +    for(reco::TaggingVariableList::const_iterator iter = varList.begin(); iter != varList.end(); ++iter)
2186 +    {
2187 +      //std::cout << reco::TaggingVariableTokens[iter->first] << " = " << iter->second << std::endl;
2188 +      for (edm::RefVector<reco::TrackCollection>::const_iterator t = ipTagInfos->selectedTracks().begin(); t != ipTagInfos->selectedTracks().end(); t++){
2189 +        
2190 +        if (strcmp(reco::TaggingVariableTokens[iter->first], "trackMomentum") == 0 && (fabs((float)iter->second - (float)(*t)->p()) < 0.0001) ){
2191 +          sj.csvTrackIds.push_back(t->key());
2192 +        }// if tagged track
2193 +      }// loop on IPtracks        
2194 +    }// loop on CSV variables
2195 +
2196 +    
2197 +    sj.btagNTracks= ipTagInfos->selectedTracks().size();
2198 +    sj.csvNTracks = sj.csvTrackIds.size();
2199 +
2200     //
2201      // add tVector
2202      //
2203      sj.tVector = getTvect(&(*jet_iter));
2204  
2205 +    sj.ptRaw = jet_iter->correctedJet(0).pt();
2206 +
2207 +    sj.ptLeadTrack =-9999.;
2208 +    if (jet_iter->isPFJet() == true) {
2209 +       std::vector <reco::PFCandidatePtr> constituents = jet_iter->getPFConstituents ();
2210 +       for (unsigned ic = 0; ic < constituents.size (); ++ic) {
2211 +         if ( constituents[ic]->particleId() > 3 ) continue;
2212 +         reco::TrackRef trackRef = constituents[ic]->trackRef();
2213 +       if ( trackRef.isNonnull() ) { if(trackRef->pt() > sj.ptLeadTrack) sj.ptLeadTrack=trackRef->pt(); }
2214 +      }
2215 +     }
2216 +
2217  
2218   }
2219  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines