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 |
|
|
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()); |
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_){ |
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); |
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; |
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 |
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++; |
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(); |
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(); |
671 |
|
sj.SF_CSVLerr=0; |
672 |
|
sj.SF_CSVMerr=0; |
673 |
|
sj.SF_CSVTerr=0; |
674 |
< |
|
674 |
> |
|
675 |
> |
|
676 |
|
// |
677 |
|
// addtaginfo for csv |
678 |
|
// |
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()){ |
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 |
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()){ |
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())); |
1416 |
|
|
1417 |
|
mf.nValidTracker = p1.numberOfValidTrackerHits(); |
1418 |
|
mf.nValidPixel = p1.numberOfValidPixelHits(); |
1419 |
+ |
mf.nValidLayers = p1.trackerLayersWithMeasurement(); |
1420 |
+ |
mf.isPF = mu->isPFMuon(); |
1421 |
|
|
1422 |
|
|
1423 |
|
|
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); |
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 |
|
|
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 |
|
// |
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){ |
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); |
1975 |
|
sj.SF_CSVTerr=0; |
1976 |
|
|
1977 |
|
|
1978 |
+ |
|
1979 |
+ |
|
1980 |
+ |
|
1981 |
|
if (jet_iter->isPFJet() == true) { |
1982 |
|
|
1983 |
|
sj.chargedHadronEFraction = jet_iter-> chargedHadronEnergyFraction(); |
1987 |
|
sj.nConstituents = jet_iter->getPFConstituents().size(); |
1988 |
|
|
1989 |
|
} |
1990 |
+ |
sj.jetArea = jet_iter->jetArea(); |
1991 |
|
// |
1992 |
|
// addtaginfo for csv |
1993 |
|
// |
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){ |
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 |
|
|