|
![CMS Logo](/cmsdoxygen/common/rightImage.jpg) |
#include <PFAlgo3.h>
|
void | calo_relink (Region &r, const std::vector< int > &calo2ntk, const std::vector< float > &calo2sumtkpt, const std::vector< float > &calo2sumtkpterr) const |
| try to recover split hadron showers (v1.0): More...
|
|
void | emcalo_algo (Region &r, const std::vector< int > &em2ntk, const std::vector< float > &em2sumtkpt, const std::vector< float > &em2sumtkpterr) const |
| process ecal clusters after linking More...
|
|
void | emtk_algo (Region &r, const std::vector< int > &tk2em, const std::vector< int > &em2ntk, const std::vector< float > &em2sumtkpterr) const |
| promote all flagged tracks to electrons More...
|
|
void | link_em2calo (Region &r, std::vector< int > &em2calo) const |
| match all em to the closest had (can happen in parallel to the above) More...
|
|
void | link_tk2calo (Region &r, std::vector< int > &tk2calo) const |
| track to calo matching More...
|
|
void | link_tk2em (Region &r, std::vector< int > &tk2em) const |
| match all tracks to the closest EM cluster More...
|
|
void | link_tk2mu (Region &r, std::vector< int > &tk2mu, std::vector< int > &mu2tk) const |
| do muon track linking (also sets track.muonLink) More...
|
|
void | linkedcalo_algo (Region &r, const std::vector< int > &calo2ntk, const std::vector< float > &calo2sumtkpt, const std::vector< float > &calo2sumtkpterr, std::vector< float > &calo2alpha) const |
| process matched calo clusters, compare energy to sum track pt, compute track rescaling factor if needed More...
|
|
void | linkedtk_algo (Region &r, const std::vector< int > &tk2calo, const std::vector< int > &calo2ntk, const std::vector< float > &calo2alpha) const |
| process matched tracks, if necessary rescale or average More...
|
|
void | save_muons (Region &r, const std::vector< int > &tk2mu) const |
| save muons in output list More...
|
|
void | sub_em2calo (Region &r, const std::vector< int > &em2calo) const |
| subtract EM component from Calo clusters for all photons and electrons (within tracker coverage) More...
|
|
void | sum_tk2calo (Region &r, const std::vector< int > &tk2calo, std::vector< int > &calo2ntk, std::vector< float > &calo2sumtkpt, std::vector< float > &calo2sumtkpterr) const |
| for each calo, compute the sum of the track pt More...
|
|
void | sum_tk2em (Region &r, const std::vector< int > &tk2em, std::vector< int > &em2ntk, std::vector< float > &em2sumtkpt, std::vector< float > &em2sumtkpterr) const |
| for each EM cluster, count and add up the pt of all the corresponding tracks (skipping muons) More...
|
|
void | unlinkedcalo_algo (Region &r) const |
| process unmatched calo clusters More...
|
|
void | unlinkedtk_algo (Region &r, const std::vector< int > &tk2calo) const |
| promote unlinked low pt tracks to hadrons More...
|
|
PFParticle & | addCaloToPF (Region &r, const CaloCluster &calo) const |
|
PFParticle & | addCaloToPF (std::vector< PFParticle > &pfs, const CaloCluster &calo) const |
|
PFParticle & | addTrackToPF (Region &r, const PropagatedTrack &tk) const |
|
PFParticle & | addTrackToPF (std::vector< PFParticle > &pfs, const PropagatedTrack &tk) const |
|
void | initRegion (Region &r) const |
|
Definition at line 7 of file PFAlgo3.h.
◆ BadTrackStatus
◆ GoodTrackStatus
Enumerator |
---|
GoodTK_Calo_TkPt | |
GoodTK_Calo_TkCaloPt | |
GoodTk_Calo_CaloPt | |
GoodTK_NoCalo | |
Definition at line 27 of file PFAlgo3.h.
◆ MuMatchMode
Enumerator |
---|
BoxBestByPtRatio | |
DrBestByPtRatio | |
DrBestByPtDiff | |
Definition at line 14 of file PFAlgo3.h.
14 { BoxBestByPtRatio, DrBestByPtRatio, DrBestByPtDiff }
muMatchMode_;
◆ TkCaloLinkMetric
Enumerator |
---|
BestByDR | |
BestByDRPt | |
BestByDR2Pt2 | |
Definition at line 17 of file PFAlgo3.h.
17 { BestByDR = 0, BestByDRPt = 1, BestByDR2Pt2 = 2 };
◆ PFAlgo3()
Definition at line 19 of file PFAlgo3.cc.
25 if (muMatchMode ==
"boxBestByPtRatio")
27 else if (muMatchMode ==
"drBestByPtRatio")
29 else if (muMatchMode ==
"drBestByPtDiff")
32 throw cms::Exception(
"Configuration",
"bad value for trackMuMatch configurable");
35 if (tkCaloLinkMetric ==
"bestByDR")
37 else if (tkCaloLinkMetric ==
"bestByDRPt")
39 else if (tkCaloLinkMetric ==
"bestByDR2Pt2")
42 throw cms::Exception(
"Configuration",
"bad value for tkCaloLinkMetric configurable");
References BestByDR, BestByDR2Pt2, BestByDRPt, BoxBestByPtRatio, caloReLinkDr_, caloReLinkStep_, caloReLinkThreshold_, caloTrkWeightedAverage_, l1tpf_impl::PFAlgoBase::debug_, DrBestByPtDiff, DrBestByPtRatio, drMatch_, drMatchEm_, drMatchEmHad_, drMatchMu_, ecalPriority_, emCaloUseAlsoCaloSigma_, emHadSubtractionPtSlope_, Exception, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), maxInvisiblePt_, muMatchMode_, ptMatchHigh_, ptMatchLow_, ptMinFracMatchEm_, rescaleTracks_, AlCaHLTBitMon_QueryRunRegistry::string, sumTkCaloErr2_, tightTrackMaxChi2_, tightTrackMaxInvisiblePt_, tightTrackMinStubs_, tkCaloLinkMetric_, trackEmMayUseCaloMomenta_, trackEmUseAlsoTrackSigma_, and useTrackCaloSigma_.
◆ calo_relink()
void PFAlgo3::calo_relink |
( |
Region & |
r, |
|
|
const std::vector< int > & |
calo2ntk, |
|
|
const std::vector< float > & |
calo2sumtkpt, |
|
|
const std::vector< float > & |
calo2sumtkpterr |
|
) |
| const |
|
protected |
try to recover split hadron showers (v1.0):
OPTIONAL STEP: try to recover split hadron showers (v1.0):
Definition at line 672 of file PFAlgo3.cc.
680 std::vector<float> addtopt(
r.calo.size(), 0);
681 for (
int ic = 0, nc =
r.calo.size(); ic < nc; ++ic) {
682 auto &
calo =
r.calo[ic];
683 if (calo2ntk[ic] != 0 ||
calo.used ||
r.globalAbsEta(
calo.floatEta()) > 2.5)
687 for (
int ic2 = 0; ic2 < nc; ++ic2) {
688 const auto &calo2 =
r.calo[ic2];
689 if (calo2ntk[ic2] == 0 || calo2.used ||
r.globalAbsEta(calo2.floatEta()) > 2.5)
691 float dr = floatDR(
calo, calo2);
696 calo2sumtkpt[ic2] - calo2.floatPt() + (
useTrackCaloSigma_ ? calo2sumtkpterr[ic2] : calo2.floatPtErr());
704 const auto &calo2 =
r.calo[i2best];
707 "PFAlgo3 \t calo %3d (pt %7.2f) with no tracks matched within dr %.3f with calo %3d with pt %7.2f (sum tk "
708 "pt %7.2f), track excess %7.2f +- %7.2f\n",
714 calo2sumtkpt[i2best],
715 calo2sumtkpt[i2best] - calo2.floatPt(),
718 addtopt[i2best] +=
calo.floatPt();
722 for (
int ic = 0, nc =
r.calo.size(); ic < nc; ++ic) {
724 auto &
calo =
r.calo[ic];
726 dbgPrintf(
"PFAlgo3 \t calo %3d (pt %7.2f, sum tk pt %7.2f) is increased to pt %7.2f after merging\n",
730 calo.floatPt() + addtopt[ic]);
731 calo.setFloatPt(
calo.floatPt() + addtopt[ic]);
References caloReLinkDr_, caloReLinkThreshold_, dbgPrintf(), l1tpf_impl::PFAlgoBase::debug_, flavorHistoryFilter_cfi::dr, alignCSCRings::r, and useTrackCaloSigma_.
Referenced by runPF().
◆ emcalo_algo()
void PFAlgo3::emcalo_algo |
( |
Region & |
r, |
|
|
const std::vector< int > & |
em2ntk, |
|
|
const std::vector< float > & |
em2sumtkpt, |
|
|
const std::vector< float > & |
em2sumtkpterr |
|
) |
| const |
|
protected |
process ecal clusters after linking
Definition at line 376 of file PFAlgo3.cc.
381 for (
int iem = 0, nem =
r.emcalo.size(); iem < nem; ++iem) {
382 auto &em =
r.emcalo[iem];
386 if (
r.globalAbsEta(em.floatEta()) > 2.5)
389 dbgPrintf(
"PFAlgo3 \t EM %3d (pt %7.2f) has %2d tracks (sumpt %7.2f, sumpterr %7.2f), ptdif %7.2f +- %7.2f\n",
395 em.floatPt() - em2sumtkpt[iem],
396 std::max<float>(em2sumtkpterr[iem], em.floatPtErr()));
397 if (em2ntk[iem] == 0) {
402 dbgPrintf(
"PFAlgo3 \t EM %3d (pt %7.2f) ---> promoted to photon\n", iem, em.floatPt());
405 float ptdiff = em.floatPt() - em2sumtkpt[iem];
408 if (pterr > 2 * em.floatPt()) {
409 pterr = 2 * em.floatPt();
411 dbgPrintf(
"PFAlgo3 \t EM %3d (pt %7.2f) ---> clamp pterr ---> new ptdiff %7.2f +- %7.2f\n",
424 p.setFloatPt(ptdiff);
426 dbgPrintf(
"PFAlgo3 \t EM %3d (pt %7.2f) ---> promoted to electron(s) + photon (pt %7.2f)\n",
433 dbgPrintf(
"PFAlgo3 \t EM %3d (pt %7.2f) ---> promoted to electron(s)\n", iem, em.floatPt());
References l1tpf_impl::PFAlgoBase::addCaloToPF(), dbgPrintf(), l1tpf_impl::PFAlgoBase::debug_, AlCaHLTBitMon_ParallelJobs::p, ptMatchHigh_, ptMatchLow_, alignCSCRings::r, and trackEmUseAlsoTrackSigma_.
Referenced by runPF().
◆ emtk_algo()
void PFAlgo3::emtk_algo |
( |
Region & |
r, |
|
|
const std::vector< int > & |
tk2em, |
|
|
const std::vector< int > & |
em2ntk, |
|
|
const std::vector< float > & |
em2sumtkpterr |
|
) |
| const |
|
protected |
◆ link_em2calo()
void PFAlgo3::link_em2calo |
( |
Region & |
r, |
|
|
std::vector< int > & |
em2calo |
|
) |
| const |
|
protected |
match all em to the closest had (can happen in parallel to the above)
Definition at line 327 of file PFAlgo3.cc.
329 for (
int iem = 0, nem =
r.emcalo.size(); iem < nem; ++iem) {
330 const auto &em =
r.emcalo[iem];
332 for (
int ic = 0, nc =
r.calo.size(); ic < nc; ++ic) {
333 const auto &
calo =
r.calo[ic];
336 float dr = floatDR(
calo, em);
342 if (
debug_ && em2calo[iem] != -1)
343 dbgPrintf(
"PFAlgo3 \t EM %3d (pt %7.2f) matches to calo %3d (pt %7.2f, empt %7.2f) with dr %.3f\n",
347 em2calo[iem] == -1 ? 0.0 :
r.calo[em2calo[iem]].floatPt(),
348 em2calo[iem] == -1 ? 0.0 :
r.calo[em2calo[iem]].floatEmPt(),
References dbgPrintf(), l1tpf_impl::PFAlgoBase::debug_, flavorHistoryFilter_cfi::dr, drMatchEmHad_, ptMinFracMatchEm_, and alignCSCRings::r.
Referenced by runPF().
◆ link_tk2calo()
void PFAlgo3::link_tk2calo |
( |
Region & |
r, |
|
|
std::vector< int > & |
tk2calo |
|
) |
| const |
|
protected |
track to calo matching
Definition at line 538 of file PFAlgo3.cc.
540 for (
int itk = 0, ntk =
r.track.size(); itk < ntk; ++itk) {
541 const auto &tk =
r.track[itk];
542 if (tk.muonLink || tk.used)
544 float drbest =
drMatch_, dptscale = 0;
551 dptscale =
drMatch_ / tk.floatCaloPtErr();
555 dptscale =
drMatch_ / tk.floatCaloPtErr();
558 float minCaloPt = tk.floatPt() -
ptMatchLow_ * tk.floatCaloPtErr();
560 dbgPrintf(
"PFAlgo3 \t track %3d (pt %7.2f) to be matched to calo, min pT %7.2f\n", itk, tk.floatPt(), minCaloPt);
561 for (
int ic = 0, nc =
r.calo.size(); ic < nc; ++ic) {
562 auto &
calo =
r.calo[ic];
563 if (
calo.used ||
calo.floatPt() <= minCaloPt)
565 float dr = floatDR(tk,
calo), dq;
574 dq =
dr + std::max<float>(tk.floatPt() -
calo.floatPt(), 0.) * dptscale;
582 dq = hypot(
dr, std::max<float>(tk.floatPt() -
calo.floatPt(), 0.) * dptscale);
591 if (
debug_ && tk2calo[itk] != -1)
592 dbgPrintf(
"PFAlgo3 \t track %3d (pt %7.2f) matches to calo %3d (pt %7.2f) with dist %.3f\n",
596 tk2calo[itk] == -1 ? 0.0 :
r.calo[tk2calo[itk]].floatPt(),
599 if (
debug_ && tk2calo[itk] == -1) {
602 for (
int ic = 0, nc =
r.calo.size(); ic < nc; ++ic) {
603 auto &
calo =
r.calo[ic];
606 float dr = floatDR(tk,
calo);
614 "PFAlgo3 \t track %3d (pt %7.2f) would match to calo %3d (pt %7.2f) with dr %.3f if the pt min and dr "
615 "requirement had been relaxed\n",
619 r.calo[ibest].floatPt(),
References BestByDR, BestByDR2Pt2, BestByDRPt, dbgPrintf(), l1tpf_impl::PFAlgoBase::debug_, flavorHistoryFilter_cfi::dr, drMatch_, ptMatchLow_, alignCSCRings::r, and tkCaloLinkMetric_.
Referenced by runPF().
◆ link_tk2em()
void PFAlgo3::link_tk2em |
( |
Region & |
r, |
|
|
std::vector< int > & |
tk2em |
|
) |
| const |
|
protected |
◆ link_tk2mu()
void PFAlgo3::link_tk2mu |
( |
Region & |
r, |
|
|
std::vector< int > & |
tk2mu, |
|
|
std::vector< int > & |
mu2tk |
|
) |
| const |
|
protected |
do muon track linking (also sets track.muonLink)
Definition at line 216 of file PFAlgo3.cc.
219 for (
int itk = 0, ntk =
r.track.size(); itk < ntk; ++itk) {
222 for (
int imu = 0, nmu =
r.muon.size(); imu < nmu; ++imu) {
223 const auto &
mu =
r.muon[imu];
226 "PFAlgo3 \t muon %3d (pt %7.2f, eta %+5.2f, phi %+5.2f) \n", imu,
mu.floatPt(),
mu.floatEta(),
mu.floatPhi());
227 float minDistance = 9e9;
236 minDistance = 0.5 *
mu.floatPt();
240 for (
int itk = 0, ntk =
r.track.size(); itk < ntk; ++itk) {
241 const auto &tk =
r.track[itk];
243 int dphi =
std::abs((
mu.hwPhi - tk.hwPhi) % CaloCluster::PHI_WRAP);
244 float dr = floatDR(
mu, tk);
245 float dpt =
std::abs(
mu.floatPt() - tk.floatPt());
246 float dptr = (
mu.hwPt > tk.hwPt ?
mu.floatPt() / tk.floatPt() : tk.floatPt() /
mu.floatPt());
251 ok = (deta < intDrMuonMatchBox) && (dphi < intDrMuonMatchBox);
265 "PFAlgo3 \t\t possible match with track %3d (pt %7.2f, caloeta %+5.2f, calophi %+5.2f, dr %.2f, eta "
266 "%+5.2f, phi %+5.2f, dr %.2f): angular %1d, distance %.3f (vs %.3f)\n",
274 deltaR(
mu.floatEta(),
mu.floatPhi(), tk.floatVtxEta(), tk.floatVtxPhi()),
287 if (
debug_ && imatch > -1)
288 dbgPrintf(
"PFAlgo3 \t muon %3d (pt %7.2f) linked to track %3d (pt %7.2f)\n",
292 r.track[imatch].floatPt());
293 if (
debug_ && imatch == -1)
294 dbgPrintf(
"PFAlgo3 \t muon %3d (pt %7.2f) not linked to any track\n", imu,
mu.floatPt());
298 r.track[imatch].muonLink =
true;
References funct::abs(), BoxBestByPtRatio, reco::ceil(), dbgPrintf(), l1tpf_impl::PFAlgoBase::debug_, PbPb_ZMuSkimMuonDPG_cff::deltaR, HLT_FULL_cff::distance, flavorHistoryFilter_cfi::dr, DrBestByPtDiff, DrBestByPtRatio, drMatchMu_, M_PI, amptDefaultParameters_cff::mu, muMatchMode_, convertSQLiteXML::ok, alignCSCRings::r, and mathSSE::sqrt().
Referenced by runPF().
◆ linkedcalo_algo()
void PFAlgo3::linkedcalo_algo |
( |
Region & |
r, |
|
|
const std::vector< int > & |
calo2ntk, |
|
|
const std::vector< float > & |
calo2sumtkpt, |
|
|
const std::vector< float > & |
calo2sumtkpterr, |
|
|
std::vector< float > & |
calo2alpha |
|
) |
| const |
|
protected |
process matched calo clusters, compare energy to sum track pt, compute track rescaling factor if needed
----------— next step (needs the previous) -------------—
Definition at line 736 of file PFAlgo3.cc.
743 for (
int ic = 0, nc =
r.calo.size(); ic < nc; ++ic) {
744 auto &
calo =
r.calo[ic];
745 if (calo2ntk[ic] == 0 ||
calo.used)
747 float ptdiff =
calo.floatPt() - calo2sumtkpt[ic];
751 "PFAlgo3 \t calo %3d (pt %7.2f +- %7.2f, empt %7.2f) has %2d tracks (sumpt %7.2f, sumpterr %7.2f), ptdif "
764 if (
calo.floatEmPt() > 1) {
768 "PFAlgo3 \t calo %3d (pt %7.2f, empt %7.2f) ---> make photon with pt %7.2f, reduce ptdiff to %7.2f "
777 p.setFloatPt(emptdiff);
783 dbgPrintf(
"PFAlgo3 \t calo %3d (pt %7.2f, empt %7.2f) ---> make also neutral hadron with pt %7.2f\n",
789 p.setFloatPt(ptdiff);
794 dbgPrintf(
"PFAlgo3 \t calo %3d (pt %7.2f) ---> promoted to neutral with pt %7.2f\n",
799 p.setFloatPt(ptdiff);
807 "PFAlgo3 \t calo %3d (pt %7.2f) ---> to be deleted, will use tracks instead\n", ic,
calo.floatPt());
814 dbgPrintf(
"PFAlgo3 \t calo %3d (pt %7.2f) ---> tracks overshoot and will be scaled down by %.4f\n",
819 dbgPrintf(
"PFAlgo3 \t calo %3d (pt %7.2f) ---> tracks overshoot by %.4f\n",
822 calo2sumtkpt[ic] /
calo.floatPt());
References l1tpf_impl::PFAlgoBase::addCaloToPF(), dbgPrintf(), l1tpf_impl::PFAlgoBase::debug_, ecalPriority_, min(), l1t::PFCandidate::NeutralHadron, AlCaHLTBitMon_ParallelJobs::p, l1t::PFCandidate::Photon, ptMatchHigh_, ptMatchLow_, alignCSCRings::r, rescaleTracks_, and useTrackCaloSigma_.
Referenced by runPF().
◆ linkedtk_algo()
void PFAlgo3::linkedtk_algo |
( |
Region & |
r, |
|
|
const std::vector< int > & |
tk2calo, |
|
|
const std::vector< int > & |
calo2ntk, |
|
|
const std::vector< float > & |
calo2alpha |
|
) |
| const |
|
protected |
process matched tracks, if necessary rescale or average
Definition at line 828 of file PFAlgo3.cc.
833 for (
int itk = 0, ntk =
r.track.size(); itk < ntk; ++itk) {
834 auto &tk =
r.track[itk];
835 if (tk2calo[itk] == -1 || tk.muonLink || tk.used)
839 const auto &
calo =
r.calo[tk2calo[itk]];
840 p.cluster.src =
calo.src;
841 if (
calo.hwFlags == 1) {
845 float ptavg = tk.floatPt();
846 if (tk.floatPtErr() > 0) {
847 float wcalo = 1.0 /
std::pow(tk.floatCaloPtErr(), 2);
848 float wtk = 1.0 /
std::pow(tk.floatPtErr(), 2);
849 ptavg = (
calo.floatPt() * wcalo + tk.floatPt() * wtk) / (wcalo + wtk);
855 "PFAlgo3 \t track %3d (pt %7.2f +- %7.2f) combined with calo %3d (pt %7.2f +- %7.2f (from tk) yielding "
856 "candidate of pt %7.2f\n",
867 dbgPrintf(
"PFAlgo3 \t track %3d (pt %7.2f) linked to calo %3d promoted to charged hadron\n",
872 }
else if (
calo.hwFlags == 2) {
874 p.setFloatPt(tk.floatPt() * calo2alpha[tk2calo[itk]]);
878 "PFAlgo3 \t track %3d (pt %7.2f, stubs %2d chi2 %7.1f) linked to calo %3d promoted to charged hadron with "
879 "pt %7.2f after maybe rescaling\n",
References l1tpf_impl::PFAlgoBase::addTrackToPF(), caloTrkWeightedAverage_, dbgPrintf(), l1tpf_impl::PFAlgoBase::debug_, GoodTk_Calo_CaloPt, GoodTK_Calo_TkCaloPt, GoodTK_Calo_TkPt, createfilelist::int, AlCaHLTBitMon_ParallelJobs::p, funct::pow(), and alignCSCRings::r.
Referenced by runPF().
◆ runPF()
void PFAlgo3::runPF |
( |
Region & |
r | ) |
const |
|
overridevirtual |
----------— first step (can all go in parallel) -------------—
----------— next step (needs the previous) -------------—
----------— next step (needs the previous) -------------—
----------— next step (needs the previous) -------------—
----------— next step (needs the previous) -------------—
----------— next step (needs the previous) -------------—
----------— next step (needs the previous) -------------— OPTIONAL STEP: try to recover split hadron showers (v1.0):
----------— next step (needs the previous) -------------—
----------— next step (needs the previous) -------------— process matched tracks, if necessary rescale or average
Implements l1tpf_impl::PFAlgoBase.
Definition at line 69 of file PFAlgo3.cc.
76 "PFAlgo3\nPFAlgo3 region eta [ %+5.2f , %+5.2f ], phi [ %+5.2f , %+5.2f ], fiducial eta [ %+5.2f , %+5.2f ], "
77 "phi [ %+5.2f , %+5.2f ]\n",
78 r.etaMin -
r.etaExtra,
79 r.etaMax +
r.etaExtra,
80 r.phiCenter -
r.phiHalfWidth -
r.phiExtra,
81 r.phiCenter +
r.phiHalfWidth +
r.phiExtra,
84 r.phiCenter -
r.phiHalfWidth,
85 r.phiCenter +
r.phiHalfWidth);
86 dbgPrintf(
"PFAlgo3 \t N(track) %3lu N(em) %3lu N(calo) %3lu N(mu) %3lu\n",
91 for (
int itk = 0, ntk =
r.track.size(); itk < ntk; ++itk) {
92 const auto &tk =
r.track[itk];
94 "PFAlgo3 \t track %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f "
95 "fid %1d calo ptErr %7.2f stubs %2d chi2 %7.1f\n",
103 int(
r.fiducialLocal(tk.floatEta(), tk.floatPhi())),
108 for (
int iem = 0, nem =
r.emcalo.size(); iem < nem; ++iem) {
109 const auto &em =
r.emcalo[iem];
111 "PFAlgo3 \t EM %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f "
112 "fid %1d calo ptErr %7.2f\n",
120 int(
r.fiducialLocal(em.floatEta(), em.floatPhi())),
123 for (
int ic = 0, nc =
r.calo.size(); ic < nc; ++ic) {
124 auto &
calo =
r.calo[ic];
126 "PFAlgo3 \t calo %3d: pt %7.2f +- %5.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f "
127 "fid %1d calo ptErr %7.2f em pt %7.2f \n",
139 for (
int im = 0, nm =
r.muon.size(); im < nm; ++im) {
140 auto &
mu =
r.muon[im];
142 "PFAlgo3 \t muon %3d: pt %7.2f vtx eta %+5.2f vtx phi %+5.2f calo eta %+5.2f calo phi %+5.2f "
150 int(
r.fiducialLocal(
mu.floatEta(),
mu.floatPhi())));
154 std::vector<int> tk2mu(
r.track.size(), -1), mu2tk(
r.muon.size(), -1);
158 std::vector<int> tk2em(
r.track.size(), -1);
162 std::vector<int> em2calo(
r.emcalo.size(), -1);
167 std::vector<int> em2ntk(
r.emcalo.size(), 0);
168 std::vector<float> em2sumtkpt(
r.emcalo.size(), 0);
169 std::vector<float> em2sumtkpterr(
r.emcalo.size(), 0);
170 sum_tk2em(
r, tk2em, em2ntk, em2sumtkpt, em2sumtkpterr);
183 std::vector<int> tk2calo(
r.track.size(), -1);
188 std::vector<int> calo2ntk(
r.calo.size(), 0);
189 std::vector<float> calo2sumtkpt(
r.calo.size(), 0);
190 std::vector<float> calo2sumtkpterr(
r.calo.size(), 0);
191 sum_tk2calo(
r, tk2calo, calo2ntk, calo2sumtkpt, calo2sumtkpterr);
200 calo_relink(
r, calo2ntk, calo2sumtkpt, calo2sumtkpterr);
204 std::vector<float> calo2alpha(
r.calo.size(), 1);
References calo_relink(), caloReLinkStep_, dbgPrintf(), l1tpf_impl::PFAlgoBase::debug_, emcalo_algo(), emtk_algo(), l1tpf_impl::PFAlgoBase::initRegion(), createfilelist::int, link_em2calo(), link_tk2calo(), link_tk2em(), link_tk2mu(), linkedcalo_algo(), linkedtk_algo(), amptDefaultParameters_cff::mu, alignCSCRings::r, save_muons(), sub_em2calo(), sum_tk2calo(), sum_tk2em(), unlinkedcalo_algo(), and unlinkedtk_algo().
◆ save_muons()
void PFAlgo3::save_muons |
( |
Region & |
r, |
|
|
const std::vector< int > & |
tk2mu |
|
) |
| const |
|
protected |
◆ sub_em2calo()
void PFAlgo3::sub_em2calo |
( |
Region & |
r, |
|
|
const std::vector< int > & |
em2calo |
|
) |
| const |
|
protected |
subtract EM component from Calo clusters for all photons and electrons (within tracker coverage)
Definition at line 476 of file PFAlgo3.cc.
480 for (
int ic = 0, nc =
r.calo.size(); ic < nc; ++ic) {
481 auto &
calo =
r.calo[ic];
482 float pt0 =
calo.floatPt(), ept0 =
calo.floatEmPt(),
pt = pt0, ept = ept0;
484 for (
int iem = 0, nem =
r.emcalo.size(); iem < nem; ++iem) {
485 if (em2calo[iem] == ic) {
486 const auto &em =
r.emcalo[iem];
490 "PFAlgo3 \t EM %3d (pt %7.2f) is subtracted from calo %3d (pt %7.2f) scaled by %.3f (deltaPt = "
504 "PFAlgo3 \t EM %3d (pt %7.2f) not subtracted from calo %3d (pt %7.2f), and calo marked to be kept "
505 "after EM subtraction\n",
516 "PFAlgo3 \t calo %3d (pt %7.2f +- %7.2f) has a subtracted pt of %7.2f, empt %7.2f -> %7.2f, isem %d\n",
525 calo.setFloatEmPt(ept);
528 (
calo.isEM && ept <= 0.125 * ept0))) {
530 dbgPrintf(
"PFAlgo3 \t calo %3d (pt %7.2f) ----> discarded\n", ic,
calo.floatPt());
532 calo.setFloatPt(pt0);
References dbgPrintf(), l1tpf_impl::PFAlgoBase::debug_, emCaloUseAlsoCaloSigma_, emHadSubtractionPtSlope_, DiDispStaMuonMonitor_cfi::pt, and alignCSCRings::r.
Referenced by runPF().
◆ sum_tk2calo()
void PFAlgo3::sum_tk2calo |
( |
Region & |
r, |
|
|
const std::vector< int > & |
tk2calo, |
|
|
std::vector< int > & |
calo2ntk, |
|
|
std::vector< float > & |
calo2sumtkpt, |
|
|
std::vector< float > & |
calo2sumtkpterr |
|
) |
| const |
|
protected |
for each calo, compute the sum of the track pt
Definition at line 625 of file PFAlgo3.cc.
631 for (
int ic = 0, nc =
r.calo.size(); ic < nc; ++ic) {
632 const auto &
calo =
r.calo[ic];
633 if (
r.globalAbsEta(
calo.floatEta()) > 2.5)
635 for (
int itk = 0, ntk =
r.track.size(); itk < ntk; ++itk) {
636 if (tk2calo[itk] == ic) {
637 const auto &tk =
r.track[itk];
638 if (tk.muonLink || tk.used)
641 calo2sumtkpt[ic] += tk.floatPt();
646 calo2sumtkpterr[ic] =
std::sqrt(calo2sumtkpterr[ic]);
References funct::pow(), alignCSCRings::r, mathSSE::sqrt(), and sumTkCaloErr2_.
Referenced by runPF().
◆ sum_tk2em()
void PFAlgo3::sum_tk2em |
( |
Region & |
r, |
|
|
const std::vector< int > & |
tk2em, |
|
|
std::vector< int > & |
em2ntk, |
|
|
std::vector< float > & |
em2sumtkpt, |
|
|
std::vector< float > & |
em2sumtkpterr |
|
) |
| const |
|
protected |
for each EM cluster, count and add up the pt of all the corresponding tracks (skipping muons)
Definition at line 353 of file PFAlgo3.cc.
359 for (
int iem = 0, nem =
r.emcalo.size(); iem < nem; ++iem) {
360 const auto &em =
r.emcalo[iem];
361 if (
r.globalAbsEta(em.floatEta()) > 2.5)
363 for (
int itk = 0, ntk =
r.track.size(); itk < ntk; ++itk) {
364 if (tk2em[itk] == iem) {
365 const auto &tk =
r.track[itk];
369 em2sumtkpt[iem] += tk.floatPt();
370 em2sumtkpterr[iem] += tk.floatPtErr();
References alignCSCRings::r.
Referenced by runPF().
◆ unlinkedcalo_algo()
void PFAlgo3::unlinkedcalo_algo |
( |
Region & |
r | ) |
const |
|
protected |
◆ unlinkedtk_algo()
void PFAlgo3::unlinkedtk_algo |
( |
Region & |
r, |
|
|
const std::vector< int > & |
tk2calo |
|
) |
| const |
|
protected |
promote unlinked low pt tracks to hadrons
Definition at line 650 of file PFAlgo3.cc.
652 for (
int itk = 0, ntk =
r.track.size(); itk < ntk; ++itk) {
653 auto &tk =
r.track[itk];
654 if (tk2calo[itk] != -1 || tk.muonLink || tk.used)
658 if (tk.floatPt() <
maxPt) {
660 dbgPrintf(
"PFAlgo3 \t track %3d (pt %7.2f) not matched to calo, kept as charged hadron\n", itk, tk.floatPt());
666 dbgPrintf(
"PFAlgo3 \t track %3d (pt %7.2f) not matched to calo, dropped\n", itk, tk.floatPt());
References l1tpf_impl::PFAlgoBase::addTrackToPF(), dbgPrintf(), l1tpf_impl::PFAlgoBase::debug_, GoodTK_NoCalo, maxInvisiblePt_, MuonErrorMatrixAnalyzer_cfi::maxPt, AlCaHLTBitMon_ParallelJobs::p, alignCSCRings::r, tightTrackMaxChi2_, tightTrackMaxInvisiblePt_, and tightTrackMinStubs_.
Referenced by runPF().
◆ caloReLinkDr_
float l1tpf_impl::PFAlgo3::caloReLinkDr_ |
|
protected |
◆ caloReLinkStep_
bool l1tpf_impl::PFAlgo3::caloReLinkStep_ |
|
protected |
◆ caloReLinkThreshold_
float l1tpf_impl::PFAlgo3::caloReLinkThreshold_ |
|
protected |
◆ caloTrkWeightedAverage_
bool l1tpf_impl::PFAlgo3::caloTrkWeightedAverage_ |
|
protected |
◆ drMatch_
float l1tpf_impl::PFAlgo3::drMatch_ |
|
protected |
◆ drMatchEm_
float l1tpf_impl::PFAlgo3::drMatchEm_ |
|
protected |
◆ drMatchEmHad_
float l1tpf_impl::PFAlgo3::drMatchEmHad_ |
|
protected |
◆ drMatchMu_
float l1tpf_impl::PFAlgo3::drMatchMu_ |
|
protected |
◆ ecalPriority_
bool l1tpf_impl::PFAlgo3::ecalPriority_ |
|
protected |
◆ emCaloUseAlsoCaloSigma_
bool l1tpf_impl::PFAlgo3::emCaloUseAlsoCaloSigma_ |
|
protected |
◆ emHadSubtractionPtSlope_
float l1tpf_impl::PFAlgo3::emHadSubtractionPtSlope_ |
|
protected |
◆ maxInvisiblePt_
float l1tpf_impl::PFAlgo3::maxInvisiblePt_ |
|
protected |
◆ muMatchMode_
◆ ptMatchHigh_
float l1tpf_impl::PFAlgo3::ptMatchHigh_ |
|
protected |
◆ ptMatchLow_
float l1tpf_impl::PFAlgo3::ptMatchLow_ |
|
protected |
◆ ptMinFracMatchEm_
float l1tpf_impl::PFAlgo3::ptMinFracMatchEm_ |
|
protected |
◆ rescaleTracks_
bool l1tpf_impl::PFAlgo3::rescaleTracks_ |
|
protected |
◆ rescaleUnmatchedTrack_
bool l1tpf_impl::PFAlgo3::rescaleUnmatchedTrack_ |
|
protected |
◆ sumTkCaloErr2_
bool l1tpf_impl::PFAlgo3::sumTkCaloErr2_ |
|
protected |
◆ tightTrackMaxChi2_
float l1tpf_impl::PFAlgo3::tightTrackMaxChi2_ |
|
protected |
◆ tightTrackMaxInvisiblePt_
float l1tpf_impl::PFAlgo3::tightTrackMaxInvisiblePt_ |
|
protected |
◆ tightTrackMinStubs_
unsigned int l1tpf_impl::PFAlgo3::tightTrackMinStubs_ |
|
protected |
◆ tkCaloLinkMetric_
◆ trackEmMayUseCaloMomenta_
bool l1tpf_impl::PFAlgo3::trackEmMayUseCaloMomenta_ |
|
protected |
◆ trackEmUseAlsoTrackSigma_
bool l1tpf_impl::PFAlgo3::trackEmUseAlsoTrackSigma_ |
|
protected |
◆ useTrackCaloSigma_
bool l1tpf_impl::PFAlgo3::useTrackCaloSigma_ |
|
protected |
bool emCaloUseAlsoCaloSigma_
float emHadSubtractionPtSlope_
float tightTrackMaxInvisiblePt_
PFParticle & addCaloToPF(Region &r, const CaloCluster &calo) const
bool trackEmUseAlsoTrackSigma_
enum l1tpf_impl::PFAlgo3::MuMatchMode muMatchMode_
T getUntrackedParameter(std::string const &, T const &) const
unsigned int tightTrackMinStubs_
TkCaloLinkMetric tkCaloLinkMetric_
void emcalo_algo(Region &r, const std::vector< int > &em2ntk, const std::vector< float > &em2sumtkpt, const std::vector< float > &em2sumtkpterr) const
process ecal clusters after linking
bool caloTrkWeightedAverage_
PFAlgoBase(const edm::ParameterSet &)
void unlinkedtk_algo(Region &r, const std::vector< int > &tk2calo) const
promote unlinked low pt tracks to hadrons
constexpr int32_t ceil(float num)
void link_tk2em(Region &r, std::vector< int > &tk2em) const
match all tracks to the closest EM cluster
void sum_tk2calo(Region &r, const std::vector< int > &tk2calo, std::vector< int > &calo2ntk, std::vector< float > &calo2sumtkpt, std::vector< float > &calo2sumtkpterr) const
for each calo, compute the sum of the track pt
void unlinkedcalo_algo(Region &r) const
process unmatched calo clusters
void link_em2calo(Region &r, std::vector< int > &em2calo) const
match all em to the closest had (can happen in parallel to the above)
bool trackEmMayUseCaloMomenta_
void save_muons(Region &r, const std::vector< int > &tk2mu) const
save muons in output list
void linkedcalo_algo(Region &r, const std::vector< int > &calo2ntk, const std::vector< float > &calo2sumtkpt, const std::vector< float > &calo2sumtkpterr, std::vector< float > &calo2alpha) const
process matched calo clusters, compare energy to sum track pt, compute track rescaling factor if need...
void initRegion(Region &r) const
void link_tk2mu(Region &r, std::vector< int > &tk2mu, std::vector< int > &mu2tk) const
do muon track linking (also sets track.muonLink)
PFParticle & addTrackToPF(Region &r, const PropagatedTrack &tk) const
float caloReLinkThreshold_
void calo_relink(Region &r, const std::vector< int > &calo2ntk, const std::vector< float > &calo2sumtkpt, const std::vector< float > &calo2sumtkpterr) const
try to recover split hadron showers (v1.0):
void dbgPrintf(const char *formatString, Args &&... args)
void sub_em2calo(Region &r, const std::vector< int > &em2calo) const
subtract EM component from Calo clusters for all photons and electrons (within tracker coverage)
T getParameter(std::string const &) const
Power< A, B >::type pow(const A &a, const B &b)
void emtk_algo(Region &r, const std::vector< int > &tk2em, const std::vector< int > &em2ntk, const std::vector< float > &em2sumtkpterr) const
promote all flagged tracks to electrons
Abs< T >::type abs(const T &t)
void link_tk2calo(Region &r, std::vector< int > &tk2calo) const
track to calo matching
void linkedtk_algo(Region &r, const std::vector< int > &tk2calo, const std::vector< int > &calo2ntk, const std::vector< float > &calo2alpha) const
process matched tracks, if necessary rescale or average
void sum_tk2em(Region &r, const std::vector< int > &tk2em, std::vector< int > &em2ntk, std::vector< float > &em2sumtkpt, std::vector< float > &em2sumtkpterr) const
for each EM cluster, count and add up the pt of all the corresponding tracks (skipping muons)