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.75 by arizzi, Thu May 24 15:55:16 2012 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 198 | Line 207 | HbbAnalyzerNew::produce(edm::Event& iEve
207    iEvent.getByLabel(edm::InputTag("kt6PFJets25", "rho"),rho25Handle);  
208    auxInfo->puInfo.rho25 = *rho25Handle;
209  
210 +  edm::Handle<double> rhoNeutralHandle;
211 +  iEvent.getByLabel(edm::InputTag("kt6PFJetsCentralNeutral", "rho"),rhoNeutralHandle);  
212 +  auxInfo->puInfo.rhoNeutral = *rhoNeutralHandle;
213 +
214 +
215    edm::Handle<std::vector< PileupSummaryInfo> > puHandle;
216  
217    if (runOnMC_){
# Line 207 | Line 221 | HbbAnalyzerNew::produce(edm::Event& iEve
221        std::vector< PileupSummaryInfo> pu = (*puHandle);
222        for (std::vector<PileupSummaryInfo>::const_iterator it= pu.begin(); it!=pu.end(); ++it){
223           int bx = (*it).getBunchCrossing();
224 +         if(bx == 0) { auxInfo->puInfo.truePU = (*it).getTrueNumInteractions();}
225          unsigned int num = (*it).getPU_NumInteractions();
226          //      std::cout <<" PU PUSHING "<<bx<<" " <<num<<std::endl;
227          auxInfo->puInfo.pus[bx]  =num;
# Line 373 | Line 388 | HbbAnalyzerNew::produce(edm::Event& iEve
388  
389    /////// end generator block    
390  
391 + /// photon used in isolation
392 +  edm::Handle<edm::View<reco::PFCandidate> > photonIsoH;
393 +  iEvent.getByLabel("pfAllPhotons",photonIsoH);
394 +  edm::View<reco::PFCandidate> photonsForIso = *photonIsoH;
395  
396    edm::Handle<edm::View<pat::Muon> > muonHandle;
397    iEvent.getByLabel(muoLabel_,muonHandle);
# Line 395 | Line 414 | HbbAnalyzerNew::produce(edm::Event& iEve
414  
415    // standard jets
416  
398  edm::Handle<edm::View<pat::Jet> > simplejet1Handle;
399  iEvent.getByLabel(simplejet1Label_,simplejet1Handle);
400  edm::View<pat::Jet> simplejets1 = *simplejet1Handle;
417  
418    edm::Handle<edm::View<pat::Jet> > simplejet2Handle;
419    iEvent.getByLabel(simplejet2Label_,simplejet2Handle);
# Line 407 | Line 423 | HbbAnalyzerNew::produce(edm::Event& iEve
423    iEvent.getByLabel(simplejet3Label_,simplejet3Handle);
424    edm::View<pat::Jet> simplejets3 = *simplejet3Handle;
425  
410  edm::Handle<edm::View<pat::Jet> > simplejet4Handle;
411  iEvent.getByLabel(simplejet4Label_,simplejet4Handle);
412  edm::View<pat::Jet> simplejets4 = *simplejet4Handle;
426  
427  
428    edm::Handle<edm::View<pat::Electron> > electronHandle;
# Line 424 | Line 437 | HbbAnalyzerNew::produce(edm::Event& iEve
437    edm::Handle<edm::View<pat::Tau> > tauHandle;
438    iEvent.getByLabel(tauLabel_,tauHandle);
439    edm::View<pat::Tau> taus = *tauHandle;
440 <
440 >  
441 >  //Get the computer for the CSV
442 >  ESHandle<JetTagComputer> handle;
443 >  iSetup.get<JetTagComputerRecord>().get("combinedSecondaryVertex", handle);
444 >  computer = dynamic_cast<const GenericMVAJetTagComputer*>(handle.product());
445  
446    //BTAGGING SCALE FACTOR FROM DATABASE
447    //Combined Secondary Vertex Loose
# Line 455 | Line 472 | BTagSFContainer btagSFs;
472    btagSFs.MISTAGSF_CSVT = (mistagSF_CSVT_.product());
473  
474   #ifdef ENABLE_SIMPLEJETS1
475 +  edm::Handle<edm::View<pat::Jet> > simplejet1Handle;
476 +  iEvent.getByLabel(simplejet1Label_,simplejet1Handle);
477 +  edm::View<pat::Jet> simplejets1 = *simplejet1Handle;
478    for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets1.begin(); jet_iter!=simplejets1.end(); ++jet_iter){
479      //     if(jet_iter->pt()>50)
480      //       njetscounter++;
# Line 543 | Line 563 | BTagSFContainer btagSFs;
563    }
564  
565   #ifdef ENABLE_SIMPLEJETS4
566 +  edm::Handle<edm::View<pat::Jet> > simplejet4Handle;
567 +  iEvent.getByLabel(simplejet4Label_,simplejet4Handle);
568 +  edm::View<pat::Jet> simplejets4 = *simplejet4Handle;
569    for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets4.begin(); jet_iter!=simplejets4.end(); ++jet_iter){
570      //     if(jet_iter->pt()>50)
571      //       njetscounter++;
572 <    VHbbEvent::SimpleJet sj;
572 >  
573 >   VHbbEvent::SimpleJet sj;
574      //    std::cout <<" sj4"<<std::endl;
575      fillSimpleJet(sj,jet_iter);
576      //    if(!runOnMC_)  
577      setJecUnc(sj,jecUnc);
578 +  
579  
580  
581      Particle::LorentzVector p4Jet = jet_iter->p4();
# Line 586 | Line 611 | BTagSFContainer btagSFs;
611    }
612   #endif //ENABLE SIMPLEJETS4
613  
614 <  
614 >
615    for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets2.begin(); jet_iter!=simplejets2.end(); ++jet_iter){
616      
617 +
618 +
619      VHbbEvent::SimpleJet sj;
620      //    std::cout <<" sj2"<<std::endl;
621 <    fillSimpleJet(sj,jet_iter);    
621 >    fillSimpleJet(sj,jet_iter);  
622 >
623 >    ///###########          PU JET ID #################
624 >   // add puId...
625 >    edm::Handle<edm::ValueMap<float> > puJetIdMVA;
626 >    iEvent.getByLabel("puJetMva","fullDiscriminant", puJetIdMVA);
627 >
628 >    edm::Handle<edm::ValueMap<int> > puJetIdFlag;
629 >    iEvent.getByLabel("puJetMva", "fullId", puJetIdFlag);
630 >
631 >    //    cout  << " pt " << jet_iter->pt() << " eta " << jet_iter->eta() << std::endl;
632 >    unsigned int idx = jet_iter - simplejets2.begin();
633 >
634 >
635 >
636 >    sj.puJetIdMva   = (*puJetIdMVA)[simplejets2.refAt(idx)];
637 >    int    idflag = (*puJetIdFlag)[simplejets2.refAt(idx)];
638 >  
639 >    
640 >    //     cout << " PU JetID MVA " << mva;
641 >    if( PileupJetIdentifier::passJetId( idflag, PileupJetIdentifier::kLoose )) {
642 >      //cout << " pass loose wp";
643 >      sj.puJetIdL =1;
644 >        }
645 >    if( PileupJetIdentifier::passJetId( idflag, PileupJetIdentifier::kMedium )) {
646 >      //    cout << " pass medium wp";
647 >      sj.puJetIdM =1;
648 >    }
649 >    if( PileupJetIdentifier::passJetId( idflag, PileupJetIdentifier::kTight )) {
650 >      //    cout << " pass tight wp";
651 >      sj.puJetIdT =1;
652 >    }
653 >    //    cout << endl;
654 >    //  #############  END OF PU JET ID ######################
655 >
656 >  
657      //  if(!runOnMC_)  
658   setJecUnc(sj,jecUnc);
659      /*    sj.flavour = jet_iter->partonFlavour();
# Line 614 | Line 676 | BTagSFContainer btagSFs;
676      sj.SF_CSVLerr=0;
677      sj.SF_CSVMerr=0;
678      sj.SF_CSVTerr=0;
679 <
679 >  
680 >
681      //
682      // addtaginfo for csv
683      //
# Line 909 | Line 972 | BTagSFContainer btagSFs;
972    }
973  
974    // type 1 corr met NoPU
975 <  edm::Handle<edm::View<reco::MET> > pfmetNoPUType1corrHandle;
975 > /*  edm::Handle<edm::View<reco::MET> > pfmetNoPUType1corrHandle;
976    iEvent.getByLabel("patType1CorrectedPFMetNoPU",pfmetNoPUType1corrHandle);
977    edm::View<reco::MET> pfmetsNoPUType1corr = *pfmetNoPUType1corrHandle;
978    if(pfmetsNoPUType1corr.size()){
# Line 933 | Line 996 | BTagSFContainer btagSFs;
996      if (verbose_)     std::cout <<" type 1 +2 corrected pfMET "<<     hbbInfo->pfmetNoPUType1p2corr.metSig <<" " <<     hbbInfo->pfmetNoPUType1p2corr.sumEt<<std::endl;
997    }
998  
999 + */
1000  
1001    /*
1002    // MET uncertainty vector
# Line 1298 | Line 1362 | BTagSFContainer btagSFs;
1362    }
1363    
1364    edm::Handle<edm::View<pat::MET> > metPFHandle;
1365 <  iEvent.getByLabel("patMETsPF",metPFHandle);
1365 >  iEvent.getByLabel("patMETsPFlow",metPFHandle);
1366    edm::View<pat::MET> metsPF = *metPFHandle;
1367    
1368    if(metsPF.size()){
# Line 1325 | Line 1389 | BTagSFContainer btagSFs;
1389      mf.eIso=mu->ecalIso();
1390      mf.hIso=mu->hcalIso();
1391      mf.pfChaIso=mu->chargedHadronIso();
1392 <    mf.pfChaPUIso=mu->userIso(5);
1392 >    mf.pfChaPUIso=mu->puChargedHadronIso(); //userIso(5);
1393      mf.pfPhoIso=mu->photonIso();
1394      mf.pfNeuIso=mu->neutralHadronIso();
1395      Geom::Phi<double> deltaphi(mu->phi()-atan2(mf.p4.Px(), mf.p4.Py()));
# Line 1357 | Line 1421 | BTagSFContainer btagSFs;
1421  
1422        mf.nValidTracker = p1.numberOfValidTrackerHits();
1423        mf.nValidPixel = p1.numberOfValidPixelHits();
1424 +      mf.nValidLayers = p1.trackerLayersWithMeasurement();
1425 +      mf.isPF = mu->isPFMuon();
1426  
1427  
1428  
# Line 1414 | Line 1480 | BTagSFContainer btagSFs;
1480  
1481   if(verbose_)
1482      std::cout << " INPUT electrons "<<electrons.size()<<std::endl;
1483 +  InputTag  reducedEBRecHitCollection(string("reducedEcalRecHitsEB"));
1484 +  InputTag  reducedEERecHitCollection(string("reducedEcalRecHitsEE"));
1485 +  EcalClusterLazyTools lazyTools(iEvent, iSetup, reducedEBRecHitCollection, reducedEERecHitCollection);
1486 +  edm::ESHandle<TransientTrackBuilder> builder;
1487 +  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", builder);
1488 +  const TransientTrackBuilder & transientTrackBuilder= *(builder.product());
1489 +
1490    for(edm::View<pat::Electron>::const_iterator elec = electrons.begin(); elec!=electrons.end(); ++elec){
1491      VHbbEvent::ElectronInfo ef;
1492      ef.p4=GENPTOLORP(elec);
# Line 1425 | Line 1498 | BTagSFContainer btagSFs;
1498      ef.eIso=elec->ecalIso();
1499      ef.hIso=elec->hcalIso();
1500      ef.pfChaIso=elec->chargedHadronIso();
1501 <    ef.pfChaPUIso=elec->userIso(5);
1501 >    ef.pfChaPUIso=elec->puChargedHadronIso();//userIso(5);
1502      ef.pfPhoIso=elec->photonIso();
1503 +    ef.pfPhoIsoDoubleCounted=0;
1504 +
1505 + /* Check if there are photons sharing the super cluster*/
1506 +    for(size_t k=0;k<photonsForIso.size();k++) {
1507 +       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 ) {
1508 +          std::cout << "Double counting of supercluster!" << std::endl;
1509 +          ef.pfPhoIsoDoubleCounted+=photonsForIso[k].pt();
1510 +     }
1511 +    }
1512      ef.pfNeuIso=elec->neutralHadronIso();
1513  
1514      //
# Line 1447 | Line 1529 | BTagSFContainer btagSFs;
1529      ef.HoE = elec->hadronicOverEm();
1530      ef.convDist = elec->convDist();
1531      ef.convDcot = elec->convDcot();
1532 <    if(elec->gsfTrack().isNonnull()) ef.innerHits = elec->gsfTrack()->trackerExpectedHitsInner().numberOfHits();  
1532 >    if(elec->gsfTrack().isNonnull())
1533 >    {
1534 >     ef.innerHits = elec->gsfTrack()->trackerExpectedHitsInner().numberOfHits();  
1535 >    }
1536      ef.isEB = elec->isEB();
1537      ef.isEE = elec->isEE();
1538 + /* 2012 ELEID*/
1539 +
1540 +  const pat::Electron & ele = *elec;
1541 +  bool validKF= false;
1542 +  reco::TrackRef myTrackRef = ele.closestCtfTrackRef();
1543 +  validKF = (myTrackRef.isAvailable());
1544 +  validKF = (myTrackRef.isNonnull());  
1545 +
1546 +  // Pure tracking variables
1547 +  ef.fMVAVar_fbrem           =  ele.fbrem();
1548 +  ef.fMVAVar_kfchi2          =  (validKF) ? myTrackRef->normalizedChi2() : 0 ;
1549 +  ef.fMVAVar_kfhits          =  (validKF) ? myTrackRef->hitPattern().trackerLayersWithMeasurement() : -1. ;
1550 +  //  fMVAVar_kfhitsall          =  (validKF) ? myTrackRef->numberOfValidHits() : -1. ;   //  save also this in your ntuple as possible alternative
1551 +  ef.fMVAVar_gsfchi2         =  ele.gsfTrack()->normalizedChi2();  
1552 +
1553 +  
1554 +  // Geometrical matchings
1555 +  ef.fMVAVar_deta            =  ele.deltaEtaSuperClusterTrackAtVtx();
1556 +  ef.fMVAVar_dphi            =  ele.deltaPhiSuperClusterTrackAtVtx();
1557 +  ef.fMVAVar_detacalo        =  ele.deltaEtaSeedClusterTrackAtCalo();
1558 +  // fMVAVar_dphicalo        =  ele.deltaPhiSeedClusterTrackAtCalo();   //  save also this in your ntuple
1559 +
1560 +
1561 +  // Pure ECAL -> shower shapes
1562 +  ef.fMVAVar_see             =  ele.sigmaIetaIeta();    //EleSigmaIEtaIEta
1563 +  std::vector<float> vCov = lazyTools.localCovariances(*(ele.superCluster()->seed())) ;
1564 +  if (!isnan(vCov[2])) ef.fMVAVar_spp = sqrt (vCov[2]);   //EleSigmaIPhiIPhi
1565 +  else ef.fMVAVar_spp = 0.;    
1566 +  // fMVAVar_sigmaIEtaIPhi = vCov[1];  //  save also this in your ntuple
1567 +
1568 +  ef.fMVAVar_etawidth        =  ele.superCluster()->etaWidth();
1569 +  ef.fMVAVar_phiwidth        =  ele.superCluster()->phiWidth();
1570 +  ef.fMVAVar_e1x5e5x5        =  (ele.e5x5()) !=0. ? 1.-(ele.e1x5()/ele.e5x5()) : -1. ;
1571 +  ef.fMVAVar_R9              =  lazyTools.e3x3(*(ele.superCluster()->seed())) / ele.superCluster()->rawEnergy();
1572 +  //fMVAVar_nbrems          =  fabs(ele.numberOfBrems());    //  save also this in your ntuple
1573 +
1574 +  // Energy matching
1575 +  ef.fMVAVar_HoE             =  ele.hadronicOverEm();
1576 +  ef.fMVAVar_EoP             =  ele.eSuperClusterOverP();
1577 +  // fMVAVar_IoEmIoP         =  (1.0/(ele.superCluster()->energy())) - (1.0 / ele.p());  // in the future to be changed with ele.gsfTrack()->p()
1578 +  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
1579 +
1580 +  ef.fMVAVar_eleEoPout       =  ele.eEleClusterOverPout();
1581 +  ef.fMVAVar_PreShowerOverRaw=  ele.superCluster()->preshowerEnergy() / ele.superCluster()->rawEnergy();
1582 +  // fMVAVar_EoPout          =  ele.eSeedClusterOverPout();     //  save also this in your ntuple
1583 +
1584 +
1585 +  // Spectators
1586 +  ef.fMVAVar_eta             =  ele.superCluster()->eta();        
1587 +  ef.fMVAVar_pt              =  ele.pt();                          
1588 +
1589 +  //additional for cut based
1590 +  ef.dxy = elec->gsfTrack()->dxy(vertex.position());
1591 +  ef.dz  = elec->gsfTrack()->dz(vertex.position());
1592 +
1593 +
1594 +    //d0
1595 +    if (ele.gsfTrack().isNonnull()) {
1596 +      ef.fMVAVar_d0 = (-1.0)*ele.gsfTrack()->dxy(vertex.position());
1597 +    } else if (ele.closestCtfTrackRef().isNonnull()) {
1598 +      ef.fMVAVar_d0 = (-1.0)*ele.closestCtfTrackRef()->dxy(vertex.position());
1599 +    } else {
1600 +      ef.fMVAVar_d0 = -9999.0;
1601 +    
1602 +    //default values for IP3D
1603 +    ef.fMVAVar_ip3d = -999.0;
1604 +    // fMVAVar_ip3dSig = 0.0;
1605 +    if (ele.gsfTrack().isNonnull()) {
1606 +      const double gsfsign   = ( (-ele.gsfTrack()->dxy(vertex.position()))   >=0 ) ? 1. : -1.;
1607 +      
1608 +      const reco::TransientTrack &tt = transientTrackBuilder.build(ele.gsfTrack());
1609 +      const std::pair<bool,Measurement1D> &ip3dpv =  IPTools::absoluteImpactParameter3D(tt,vertex);
1610 +      if (ip3dpv.first) {
1611 +        double ip3d = gsfsign*ip3dpv.second.value();
1612 +        //double ip3derr = ip3dpv.second.error();  
1613 +        ef.fMVAVar_ip3d = ip3d;
1614 +        // fMVAVar_ip3dSig = ip3d/ip3derr;
1615 +      }
1616 +    }
1617 +  }
1618 +  
1619 +
1620 + /* end of 2012 ELEID*/
1621 +
1622      //
1623      // fill eleids
1624      //    
# Line 1468 | Line 1637 | BTagSFContainer btagSFs;
1637      ef.id80r=elec->electronID("eidVBTFRel80");
1638      ef.id70 =elec->electronID("eidVBTFCom70");
1639      ef.id70r=elec->electronID("eidVBTFRel70");
1640 +    ef.mvaOut=elec->electronID("mvaNonTrigV0");
1641 +    ef.mvaOutTrig=elec->electronID("mvaTrigV0");
1642  
1643      //Electron trigger matching
1644      for (int itrig = 0; itrig != ntrigs; ++itrig){
# Line 1821 | Line 1992 | void HbbAnalyzerNew ::fillSimpleJet (VHb
1992      sj.SF_CSVTerr=0;
1993  
1994      
1995 +
1996 +
1997 +    
1998      if (jet_iter->isPFJet() == true) {
1999  
2000        sj.chargedHadronEFraction = jet_iter-> chargedHadronEnergyFraction();
# Line 1830 | Line 2004 | void HbbAnalyzerNew ::fillSimpleJet (VHb
2004        sj.nConstituents = jet_iter->getPFConstituents().size();
2005        
2006      }
2007 +    sj.jetArea = jet_iter->jetArea();
2008      //
2009      // addtaginfo for csv
2010      //
# Line 1838 | Line 2013 | void HbbAnalyzerNew ::fillSimpleJet (VHb
2013  
2014      const reco::SecondaryVertexTagInfo * tf = jet_iter->tagInfoSecondaryVertex();
2015     if (tf){
2016 +      math::XYZTLorentzVectorD vertexSum;
2017 +      for(size_t vi=0;vi< tf->nVertices();vi++)
2018 +      {
2019 +        vertexSum+=tf->secondaryVertex(vi).p4();
2020 +      }
2021 +      sj.vtxP4 = GENPTOLOR(vertexSum);
2022 +
2023       if (tf->nVertices() >0){
2024 <        sj.vtxMass = tf->secondaryVertex(0).p4().mass();
2024 >        sj.vtxPosition = TVector3(tf->secondaryVertex(0).position().x(),tf->secondaryVertex(0).position().y(),tf->secondaryVertex(0).position().z());
2025 >        sj.vtxMass =  tf->secondaryVertex(0).p4().mass();
2026          sj.vtxNTracks = tf->secondaryVertex(0).nTracks();
2027          std::vector<reco::TrackBaseRef >::const_iterator tit =  tf->secondaryVertex(0).tracks_begin();
2028          for (; tit<  tf->secondaryVertex(0).tracks_end(); ++tit){
# Line 1850 | Line 2033 | void HbbAnalyzerNew ::fillSimpleJet (VHb
2033          sj.vtx3deL = m.error();
2034       }
2035      }
2036 +    
2037 +    // CSV track info
2038 +    const reco::SecondaryVertexTagInfo * svTagInfos = jet_iter->tagInfoSecondaryVertex();
2039 +    const reco::TrackIPTagInfo * ipTagInfos = jet_iter->tagInfoTrackIP();
2040 +    for (edm::RefVector<reco::TrackCollection>::const_iterator t = ipTagInfos->selectedTracks().begin(); t != ipTagInfos->selectedTracks().end(); t++){
2041 +      sj.btagTrackIds.push_back(t->key());
2042 +    }// all btag IP selected tracks    
2043 +    std::vector<const reco::BaseTagInfo*> tagInfos;
2044 +    tagInfos.push_back(dynamic_cast<const reco::BaseTagInfo*>(ipTagInfos));
2045 +    tagInfos.push_back(dynamic_cast<const reco::BaseTagInfo*>(svTagInfos));
2046 +    JetTagComputer::TagInfoHelper helper(tagInfos);
2047 +    reco::TaggingVariableList varList = computer->taggingVariables(helper); // computer for getting CSV variables
2048 +      
2049 +    for(reco::TaggingVariableList::const_iterator iter = varList.begin(); iter != varList.end(); ++iter)
2050 +    {
2051 +      //std::cout << reco::TaggingVariableTokens[iter->first] << " = " << iter->second << std::endl;
2052 +      for (edm::RefVector<reco::TrackCollection>::const_iterator t = ipTagInfos->selectedTracks().begin(); t != ipTagInfos->selectedTracks().end(); t++){
2053 +        
2054 +        if (strcmp(reco::TaggingVariableTokens[iter->first], "trackMomentum") == 0 && (fabs((float)iter->second - (float)(*t)->p()) < 0.0001) ){
2055 +          sj.csvTrackIds.push_back(t->key());
2056 +        }// if tagged track
2057 +      }// loop on IPtracks        
2058 +    }// loop on CSV variables
2059 +
2060 +    
2061 +    sj.btagNTracks= ipTagInfos->selectedTracks().size();
2062 +    sj.csvNTracks = sj.csvTrackIds.size();
2063 +
2064     //
2065      // add tVector
2066      //
2067      sj.tVector = getTvect(&(*jet_iter));
2068  
2069 +    sj.ptRaw = jet_iter->correctedJet(0).pt();
2070 +
2071 +    sj.ptLeadTrack =-9999.;
2072 +    if (jet_iter->isPFJet() == true) {
2073 +       std::vector <reco::PFCandidatePtr> constituents = jet_iter->getPFConstituents ();
2074 +       for (unsigned ic = 0; ic < constituents.size (); ++ic) {
2075 +         if ( constituents[ic]->particleId() > 3 ) continue;
2076 +         reco::TrackRef trackRef = constituents[ic]->trackRef();
2077 +       if ( trackRef.isNonnull() ) { if(trackRef->pt() > sj.ptLeadTrack) sj.ptLeadTrack=trackRef->pt(); }
2078 +      }
2079 +     }
2080 +
2081  
2082   }
2083  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines