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_){ |
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; |
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); |
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); |
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; |
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 |
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++; |
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(); |
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(); |
676 |
|
sj.SF_CSVLerr=0; |
677 |
|
sj.SF_CSVMerr=0; |
678 |
|
sj.SF_CSVTerr=0; |
679 |
< |
|
679 |
> |
|
680 |
> |
|
681 |
|
// |
682 |
|
// addtaginfo for csv |
683 |
|
// |
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()){ |
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 |
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()){ |
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())); |
1421 |
|
|
1422 |
|
mf.nValidTracker = p1.numberOfValidTrackerHits(); |
1423 |
|
mf.nValidPixel = p1.numberOfValidPixelHits(); |
1424 |
+ |
mf.nValidLayers = p1.trackerLayersWithMeasurement(); |
1425 |
+ |
mf.isPF = mu->isPFMuon(); |
1426 |
|
|
1427 |
|
|
1428 |
|
|
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); |
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 |
|
// |
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 |
|
// |
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){ |
1992 |
|
sj.SF_CSVTerr=0; |
1993 |
|
|
1994 |
|
|
1995 |
+ |
|
1996 |
+ |
|
1997 |
+ |
|
1998 |
|
if (jet_iter->isPFJet() == true) { |
1999 |
|
|
2000 |
|
sj.chargedHadronEFraction = jet_iter-> chargedHadronEnergyFraction(); |
2004 |
|
sj.nConstituents = jet_iter->getPFConstituents().size(); |
2005 |
|
|
2006 |
|
} |
2007 |
+ |
sj.jetArea = jet_iter->jetArea(); |
2008 |
|
// |
2009 |
|
// addtaginfo for csv |
2010 |
|
// |
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){ |
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 |
|
|