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.64 by sethzenz, Wed Mar 28 08:37:05 2012 UTC vs.
Revision 1.73 by degrutto, Wed May 16 15:13:51 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 395 | Line 409 | HbbAnalyzerNew::produce(edm::Event& iEve
409  
410    // standard jets
411  
398  edm::Handle<edm::View<pat::Jet> > simplejet1Handle;
399  iEvent.getByLabel(simplejet1Label_,simplejet1Handle);
400  edm::View<pat::Jet> simplejets1 = *simplejet1Handle;
412  
413    edm::Handle<edm::View<pat::Jet> > simplejet2Handle;
414    iEvent.getByLabel(simplejet2Label_,simplejet2Handle);
# Line 407 | Line 418 | HbbAnalyzerNew::produce(edm::Event& iEve
418    iEvent.getByLabel(simplejet3Label_,simplejet3Handle);
419    edm::View<pat::Jet> simplejets3 = *simplejet3Handle;
420  
410  edm::Handle<edm::View<pat::Jet> > simplejet4Handle;
411  iEvent.getByLabel(simplejet4Label_,simplejet4Handle);
412  edm::View<pat::Jet> simplejets4 = *simplejet4Handle;
421  
422  
423    edm::Handle<edm::View<pat::Electron> > electronHandle;
# Line 424 | Line 432 | HbbAnalyzerNew::produce(edm::Event& iEve
432    edm::Handle<edm::View<pat::Tau> > tauHandle;
433    iEvent.getByLabel(tauLabel_,tauHandle);
434    edm::View<pat::Tau> taus = *tauHandle;
435 <
435 >  
436 >  //Get the computer for the CSV
437 >  ESHandle<JetTagComputer> handle;
438 >  iSetup.get<JetTagComputerRecord>().get("combinedSecondaryVertex", handle);
439 >  computer = dynamic_cast<const GenericMVAJetTagComputer*>(handle.product());
440  
441    //BTAGGING SCALE FACTOR FROM DATABASE
442    //Combined Secondary Vertex Loose
# Line 455 | Line 467 | BTagSFContainer btagSFs;
467    btagSFs.MISTAGSF_CSVT = (mistagSF_CSVT_.product());
468  
469   #ifdef ENABLE_SIMPLEJETS1
470 +  edm::Handle<edm::View<pat::Jet> > simplejet1Handle;
471 +  iEvent.getByLabel(simplejet1Label_,simplejet1Handle);
472 +  edm::View<pat::Jet> simplejets1 = *simplejet1Handle;
473    for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets1.begin(); jet_iter!=simplejets1.end(); ++jet_iter){
474      //     if(jet_iter->pt()>50)
475      //       njetscounter++;
# Line 543 | Line 558 | BTagSFContainer btagSFs;
558    }
559  
560   #ifdef ENABLE_SIMPLEJETS4
561 +  edm::Handle<edm::View<pat::Jet> > simplejet4Handle;
562 +  iEvent.getByLabel(simplejet4Label_,simplejet4Handle);
563 +  edm::View<pat::Jet> simplejets4 = *simplejet4Handle;
564    for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets4.begin(); jet_iter!=simplejets4.end(); ++jet_iter){
565      //     if(jet_iter->pt()>50)
566      //       njetscounter++;
567 <    VHbbEvent::SimpleJet sj;
567 >  
568 >   VHbbEvent::SimpleJet sj;
569      //    std::cout <<" sj4"<<std::endl;
570      fillSimpleJet(sj,jet_iter);
571      //    if(!runOnMC_)  
572      setJecUnc(sj,jecUnc);
573 +  
574  
575  
576      Particle::LorentzVector p4Jet = jet_iter->p4();
# Line 586 | Line 606 | BTagSFContainer btagSFs;
606    }
607   #endif //ENABLE SIMPLEJETS4
608  
609 <  
609 >
610    for(edm::View<pat::Jet>::const_iterator jet_iter = simplejets2.begin(); jet_iter!=simplejets2.end(); ++jet_iter){
611      
612 +
613 +
614      VHbbEvent::SimpleJet sj;
615      //    std::cout <<" sj2"<<std::endl;
616 <    fillSimpleJet(sj,jet_iter);    
616 >    fillSimpleJet(sj,jet_iter);  
617 >
618 >    ///###########          PU JET ID #################
619 >   // add puId...
620 >    edm::Handle<edm::ValueMap<float> > puJetIdMVA;
621 >    iEvent.getByLabel("puJetMva","fullDiscriminant", puJetIdMVA);
622 >
623 >    edm::Handle<edm::ValueMap<int> > puJetIdFlag;
624 >    iEvent.getByLabel("puJetMva", "fullId", puJetIdFlag);
625 >
626 >    //    cout  << " pt " << jet_iter->pt() << " eta " << jet_iter->eta() << std::endl;
627 >    unsigned int idx = jet_iter - simplejets2.begin();
628 >
629 >
630 >
631 >    sj.puJetIdMva   = (*puJetIdMVA)[simplejets2.refAt(idx)];
632 >    int    idflag = (*puJetIdFlag)[simplejets2.refAt(idx)];
633 >  
634 >    
635 >    //     cout << " PU JetID MVA " << mva;
636 >    if( PileupJetIdentifier::passJetId( idflag, PileupJetIdentifier::kLoose )) {
637 >      //cout << " pass loose wp";
638 >      sj.puJetIdL =1;
639 >        }
640 >    if( PileupJetIdentifier::passJetId( idflag, PileupJetIdentifier::kMedium )) {
641 >      //    cout << " pass medium wp";
642 >      sj.puJetIdM =1;
643 >    }
644 >    if( PileupJetIdentifier::passJetId( idflag, PileupJetIdentifier::kTight )) {
645 >      //    cout << " pass tight wp";
646 >      sj.puJetIdT =1;
647 >    }
648 >    //    cout << endl;
649 >    //  #############  END OF PU JET ID ######################
650 >
651 >  
652      //  if(!runOnMC_)  
653   setJecUnc(sj,jecUnc);
654      /*    sj.flavour = jet_iter->partonFlavour();
# Line 614 | Line 671 | BTagSFContainer btagSFs;
671      sj.SF_CSVLerr=0;
672      sj.SF_CSVMerr=0;
673      sj.SF_CSVTerr=0;
674 <
674 >  
675 >
676      //
677      // addtaginfo for csv
678      //
# Line 909 | Line 967 | BTagSFContainer btagSFs;
967    }
968  
969    // type 1 corr met NoPU
970 <  edm::Handle<edm::View<reco::MET> > pfmetNoPUType1corrHandle;
970 > /*  edm::Handle<edm::View<reco::MET> > pfmetNoPUType1corrHandle;
971    iEvent.getByLabel("patType1CorrectedPFMetNoPU",pfmetNoPUType1corrHandle);
972    edm::View<reco::MET> pfmetsNoPUType1corr = *pfmetNoPUType1corrHandle;
973    if(pfmetsNoPUType1corr.size()){
# Line 933 | Line 991 | BTagSFContainer btagSFs;
991      if (verbose_)     std::cout <<" type 1 +2 corrected pfMET "<<     hbbInfo->pfmetNoPUType1p2corr.metSig <<" " <<     hbbInfo->pfmetNoPUType1p2corr.sumEt<<std::endl;
992    }
993  
994 + */
995  
996    /*
997    // MET uncertainty vector
# Line 1298 | Line 1357 | BTagSFContainer btagSFs;
1357    }
1358    
1359    edm::Handle<edm::View<pat::MET> > metPFHandle;
1360 <  iEvent.getByLabel("patMETsPF",metPFHandle);
1360 >  iEvent.getByLabel("patMETs",metPFHandle);
1361    edm::View<pat::MET> metsPF = *metPFHandle;
1362    
1363    if(metsPF.size()){
# Line 1325 | Line 1384 | BTagSFContainer btagSFs;
1384      mf.eIso=mu->ecalIso();
1385      mf.hIso=mu->hcalIso();
1386      mf.pfChaIso=mu->chargedHadronIso();
1387 <    mf.pfChaPUIso=mu->userIso(5);
1387 >    mf.pfChaPUIso=mu->puChargedHadronIso(); //userIso(5);
1388      mf.pfPhoIso=mu->photonIso();
1389      mf.pfNeuIso=mu->neutralHadronIso();
1390      Geom::Phi<double> deltaphi(mu->phi()-atan2(mf.p4.Px(), mf.p4.Py()));
# Line 1357 | Line 1416 | BTagSFContainer btagSFs;
1416  
1417        mf.nValidTracker = p1.numberOfValidTrackerHits();
1418        mf.nValidPixel = p1.numberOfValidPixelHits();
1419 +      mf.nValidLayers = p1.trackerLayersWithMeasurement();
1420 +      mf.isPF = mu->isPFMuon();
1421  
1422  
1423  
# Line 1414 | Line 1475 | BTagSFContainer btagSFs;
1475  
1476   if(verbose_)
1477      std::cout << " INPUT electrons "<<electrons.size()<<std::endl;
1478 +  InputTag  reducedEBRecHitCollection(string("reducedEcalRecHitsEB"));
1479 +  InputTag  reducedEERecHitCollection(string("reducedEcalRecHitsEE"));
1480 +  EcalClusterLazyTools lazyTools(iEvent, iSetup, reducedEBRecHitCollection, reducedEERecHitCollection);
1481 +  edm::ESHandle<TransientTrackBuilder> builder;
1482 +  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", builder);
1483 +  const TransientTrackBuilder & transientTrackBuilder= *(builder.product());
1484 +
1485    for(edm::View<pat::Electron>::const_iterator elec = electrons.begin(); elec!=electrons.end(); ++elec){
1486      VHbbEvent::ElectronInfo ef;
1487      ef.p4=GENPTOLORP(elec);
# Line 1425 | Line 1493 | BTagSFContainer btagSFs;
1493      ef.eIso=elec->ecalIso();
1494      ef.hIso=elec->hcalIso();
1495      ef.pfChaIso=elec->chargedHadronIso();
1496 <    ef.pfChaPUIso=elec->userIso(5);
1496 >    ef.pfChaPUIso=elec->puChargedHadronIso();//userIso(5);
1497      ef.pfPhoIso=elec->photonIso();
1498      ef.pfNeuIso=elec->neutralHadronIso();
1499  
# Line 1450 | Line 1518 | BTagSFContainer btagSFs;
1518      if(elec->gsfTrack().isNonnull()) ef.innerHits = elec->gsfTrack()->trackerExpectedHitsInner().numberOfHits();  
1519      ef.isEB = elec->isEB();
1520      ef.isEE = elec->isEE();
1521 + /* 2012 ELEID*/
1522 +
1523 +  const pat::Electron & ele = *elec;
1524 +  bool validKF= false;
1525 +  reco::TrackRef myTrackRef = ele.closestCtfTrackRef();
1526 +  validKF = (myTrackRef.isAvailable());
1527 +  validKF = (myTrackRef.isNonnull());  
1528 +
1529 +  // Pure tracking variables
1530 +  ef.fMVAVar_fbrem           =  ele.fbrem();
1531 +  ef.fMVAVar_kfchi2          =  (validKF) ? myTrackRef->normalizedChi2() : 0 ;
1532 +  ef.fMVAVar_kfhits          =  (validKF) ? myTrackRef->hitPattern().trackerLayersWithMeasurement() : -1. ;
1533 +  //  fMVAVar_kfhitsall          =  (validKF) ? myTrackRef->numberOfValidHits() : -1. ;   //  save also this in your ntuple as possible alternative
1534 +  ef.fMVAVar_gsfchi2         =  ele.gsfTrack()->normalizedChi2();  
1535 +
1536 +  
1537 +  // Geometrical matchings
1538 +  ef.fMVAVar_deta            =  ele.deltaEtaSuperClusterTrackAtVtx();
1539 +  ef.fMVAVar_dphi            =  ele.deltaPhiSuperClusterTrackAtVtx();
1540 +  ef.fMVAVar_detacalo        =  ele.deltaEtaSeedClusterTrackAtCalo();
1541 +  // fMVAVar_dphicalo        =  ele.deltaPhiSeedClusterTrackAtCalo();   //  save also this in your ntuple
1542 +
1543 +
1544 +  // Pure ECAL -> shower shapes
1545 +  ef.fMVAVar_see             =  ele.sigmaIetaIeta();    //EleSigmaIEtaIEta
1546 +  std::vector<float> vCov = lazyTools.localCovariances(*(ele.superCluster()->seed())) ;
1547 +  if (!isnan(vCov[2])) ef.fMVAVar_spp = sqrt (vCov[2]);   //EleSigmaIPhiIPhi
1548 +  else ef.fMVAVar_spp = 0.;    
1549 +  // fMVAVar_sigmaIEtaIPhi = vCov[1];  //  save also this in your ntuple
1550 +
1551 +  ef.fMVAVar_etawidth        =  ele.superCluster()->etaWidth();
1552 +  ef.fMVAVar_phiwidth        =  ele.superCluster()->phiWidth();
1553 +  ef.fMVAVar_e1x5e5x5        =  (ele.e5x5()) !=0. ? 1.-(ele.e1x5()/ele.e5x5()) : -1. ;
1554 +  ef.fMVAVar_R9              =  lazyTools.e3x3(*(ele.superCluster()->seed())) / ele.superCluster()->rawEnergy();
1555 +  //fMVAVar_nbrems          =  fabs(ele.numberOfBrems());    //  save also this in your ntuple
1556 +
1557 +  // Energy matching
1558 +  ef.fMVAVar_HoE             =  ele.hadronicOverEm();
1559 +  ef.fMVAVar_EoP             =  ele.eSuperClusterOverP();
1560 +  // fMVAVar_IoEmIoP         =  (1.0/(ele.superCluster()->energy())) - (1.0 / ele.p());  // in the future to be changed with ele.gsfTrack()->p()
1561 +  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
1562 +
1563 +  ef.fMVAVar_eleEoPout       =  ele.eEleClusterOverPout();
1564 +  ef.fMVAVar_PreShowerOverRaw=  ele.superCluster()->preshowerEnergy() / ele.superCluster()->rawEnergy();
1565 +  // fMVAVar_EoPout          =  ele.eSeedClusterOverPout();     //  save also this in your ntuple
1566 +
1567 +
1568 +  // Spectators
1569 +  ef.fMVAVar_eta             =  ele.superCluster()->eta();        
1570 +  ef.fMVAVar_pt              =  ele.pt();                          
1571 +
1572 +  //additional for cut based
1573 +  ef.dxy = elec->gsfTrack()->dxy(vertex.position());
1574 +  ef.dz  = elec->gsfTrack()->dz(vertex.position());
1575 +
1576 +
1577 +    //d0
1578 +    if (ele.gsfTrack().isNonnull()) {
1579 +      ef.fMVAVar_d0 = (-1.0)*ele.gsfTrack()->dxy(vertex.position());
1580 +    } else if (ele.closestCtfTrackRef().isNonnull()) {
1581 +      ef.fMVAVar_d0 = (-1.0)*ele.closestCtfTrackRef()->dxy(vertex.position());
1582 +    } else {
1583 +      ef.fMVAVar_d0 = -9999.0;
1584 +    
1585 +    //default values for IP3D
1586 +    ef.fMVAVar_ip3d = -999.0;
1587 +    // fMVAVar_ip3dSig = 0.0;
1588 +    if (ele.gsfTrack().isNonnull()) {
1589 +      const double gsfsign   = ( (-ele.gsfTrack()->dxy(vertex.position()))   >=0 ) ? 1. : -1.;
1590 +      
1591 +      const reco::TransientTrack &tt = transientTrackBuilder.build(ele.gsfTrack());
1592 +      const std::pair<bool,Measurement1D> &ip3dpv =  IPTools::absoluteImpactParameter3D(tt,vertex);
1593 +      if (ip3dpv.first) {
1594 +        double ip3d = gsfsign*ip3dpv.second.value();
1595 +        //double ip3derr = ip3dpv.second.error();  
1596 +        ef.fMVAVar_ip3d = ip3d;
1597 +        // fMVAVar_ip3dSig = ip3d/ip3derr;
1598 +      }
1599 +    }
1600 +  }
1601 +  
1602 +
1603 + /* end of 2012 ELEID*/
1604 +
1605      //
1606      // fill eleids
1607      //    
# Line 1468 | Line 1620 | BTagSFContainer btagSFs;
1620      ef.id80r=elec->electronID("eidVBTFRel80");
1621      ef.id70 =elec->electronID("eidVBTFCom70");
1622      ef.id70r=elec->electronID("eidVBTFRel70");
1623 +    ef.mvaOut=elec->electronID("mvaNonTrigV0");
1624 +    ef.mvaOutTrig=elec->electronID("mvaTrigV0");
1625  
1626      //Electron trigger matching
1627      for (int itrig = 0; itrig != ntrigs; ++itrig){
# Line 1805 | Line 1959 | void HbbAnalyzerNew ::fillSimpleJet (VHb
1959      sj.jpb=jet_iter->bDiscriminator("jetBProbabilityBJetTags");
1960      sj.ssvhe=jet_iter->bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
1961      sj.csv=jet_iter->bDiscriminator("combinedSecondaryVertexBJetTags");
1962 <   sj.csvmva=jet_iter->bDiscriminator("combinedSecondaryVertexMVABJetTags");
1962 >    sj.csvmva=jet_iter->bDiscriminator("combinedSecondaryVertexMVABJetTags");
1963 >    sj.csvivf=jet_iter->bDiscriminator("combinedInclusiveSecondaryVertexBJetTags");
1964 >    sj.cmva=jet_iter->bDiscriminator("combinedMVABJetTags");
1965      sj.charge=jet_iter->jetCharge();
1966      sj.ntracks=jet_iter->associatedTracks().size();
1967      sj.p4=GENPTOLORP(jet_iter);
# Line 1819 | Line 1975 | void HbbAnalyzerNew ::fillSimpleJet (VHb
1975      sj.SF_CSVTerr=0;
1976  
1977      
1978 +
1979 +
1980 +    
1981      if (jet_iter->isPFJet() == true) {
1982  
1983        sj.chargedHadronEFraction = jet_iter-> chargedHadronEnergyFraction();
# Line 1828 | Line 1987 | void HbbAnalyzerNew ::fillSimpleJet (VHb
1987        sj.nConstituents = jet_iter->getPFConstituents().size();
1988        
1989      }
1990 +    sj.jetArea = jet_iter->jetArea();
1991      //
1992      // addtaginfo for csv
1993      //
# Line 1836 | Line 1996 | void HbbAnalyzerNew ::fillSimpleJet (VHb
1996  
1997      const reco::SecondaryVertexTagInfo * tf = jet_iter->tagInfoSecondaryVertex();
1998     if (tf){
1999 +      math::XYZTLorentzVectorD vertexSum;
2000 +      for(size_t vi=0;vi< tf->nVertices();vi++)
2001 +      {
2002 +        vertexSum+=tf->secondaryVertex(vi).p4();
2003 +      }
2004 +      sj.vtxP4 = GENPTOLOR(vertexSum);
2005 +
2006       if (tf->nVertices() >0){
2007 <        sj.vtxMass = tf->secondaryVertex(0).p4().mass();
2007 >        sj.vtxPosition = TVector3(tf->secondaryVertex(0).position().x(),tf->secondaryVertex(0).position().y(),tf->secondaryVertex(0).position().z());
2008 >        sj.vtxMass =  tf->secondaryVertex(0).p4().mass();
2009          sj.vtxNTracks = tf->secondaryVertex(0).nTracks();
2010          std::vector<reco::TrackBaseRef >::const_iterator tit =  tf->secondaryVertex(0).tracks_begin();
2011          for (; tit<  tf->secondaryVertex(0).tracks_end(); ++tit){
# Line 1848 | Line 2016 | void HbbAnalyzerNew ::fillSimpleJet (VHb
2016          sj.vtx3deL = m.error();
2017       }
2018      }
2019 +    
2020 +    // CSV track info
2021 +    const reco::SecondaryVertexTagInfo * svTagInfos = jet_iter->tagInfoSecondaryVertex();
2022 +    const reco::TrackIPTagInfo * ipTagInfos = jet_iter->tagInfoTrackIP();
2023 +    for (edm::RefVector<reco::TrackCollection>::const_iterator t = ipTagInfos->selectedTracks().begin(); t != ipTagInfos->selectedTracks().end(); t++){
2024 +      sj.btagTrackIds.push_back(t->key());
2025 +    }// all btag IP selected tracks    
2026 +    std::vector<const reco::BaseTagInfo*> tagInfos;
2027 +    tagInfos.push_back(dynamic_cast<const reco::BaseTagInfo*>(ipTagInfos));
2028 +    tagInfos.push_back(dynamic_cast<const reco::BaseTagInfo*>(svTagInfos));
2029 +    JetTagComputer::TagInfoHelper helper(tagInfos);
2030 +    reco::TaggingVariableList varList = computer->taggingVariables(helper); // computer for getting CSV variables
2031 +      
2032 +    for(reco::TaggingVariableList::const_iterator iter = varList.begin(); iter != varList.end(); ++iter)
2033 +    {
2034 +      //std::cout << reco::TaggingVariableTokens[iter->first] << " = " << iter->second << std::endl;
2035 +      for (edm::RefVector<reco::TrackCollection>::const_iterator t = ipTagInfos->selectedTracks().begin(); t != ipTagInfos->selectedTracks().end(); t++){
2036 +        
2037 +        if (strcmp(reco::TaggingVariableTokens[iter->first], "trackMomentum") == 0 && (fabs((float)iter->second - (float)(*t)->p()) < 0.0001) ){
2038 +          sj.csvTrackIds.push_back(t->key());
2039 +        }// if tagged track
2040 +      }// loop on IPtracks        
2041 +    }// loop on CSV variables
2042 +
2043 +    
2044 +    sj.btagNTracks= ipTagInfos->selectedTracks().size();
2045 +    sj.csvNTracks = sj.csvTrackIds.size();
2046 +
2047     //
2048      // add tVector
2049      //
2050      sj.tVector = getTvect(&(*jet_iter));
2051  
2052 +    sj.ptRaw = jet_iter->correctedJet(0).pt();
2053 +
2054 +    sj.ptLeadTrack =-9999.;
2055 +    if (jet_iter->isPFJet() == true) {
2056 +       std::vector <reco::PFCandidatePtr> constituents = jet_iter->getPFConstituents ();
2057 +       for (unsigned ic = 0; ic < constituents.size (); ++ic) {
2058 +         if ( constituents[ic]->particleId() > 3 ) continue;
2059 +         reco::TrackRef trackRef = constituents[ic]->trackRef();
2060 +       if ( trackRef.isNonnull() ) { if(trackRef->pt() > sj.ptLeadTrack) sj.ptLeadTrack=trackRef->pt(); }
2061 +      }
2062 +     }
2063 +
2064  
2065   }
2066  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines