Skip to content

Commit

Permalink
Merge pull request #37580 from trackreco/errorRescalePlusOverlapHits
Browse files Browse the repository at this point in the history
MkFit TrackCandidate error rescale + relaxed selection for overlap hits
  • Loading branch information
cmsbuild committed Apr 25, 2022
2 parents 7f48b04 + 2158049 commit 2c3a99b
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 6 deletions.
2 changes: 1 addition & 1 deletion RecoTracker/MkFit/README.md
Expand Up @@ -51,7 +51,7 @@ $ runTheMatrix.py -l <workflow(s)> --apply 2 --command "--procModifiers tracking
* *maxHolesPerCand:* maximum number of allowed holes on a candidate
* *maxConsecHoles:* maximum number of allowed consecutive holes on a candidate
* *chi2Cut_min:* minimum chi2 cut for accepting a new hit
* *chi2CutOverlap:* chi2 cut for accepting an overlap hit
* *chi2CutOverlap:* chi2 cut for accepting an overlap hit (currently NOT used)
* *pTCutOverlap:* pT cut below which the overlap hits are not picked up

#### Seed cleaning params (based on elliptical dR-dz cut)
Expand Down
13 changes: 12 additions & 1 deletion RecoTracker/MkFit/plugins/MkFitOutputConverter.cc
Expand Up @@ -110,6 +110,8 @@ class MkFitOutputConverter : public edm::global::EDProducer<> {
const float qualityMaxZ_;
const float qualityMaxPosErrSq_;
const bool qualitySignPt_;

const bool doErrorRescale_;
};

MkFitOutputConverter::MkFitOutputConverter(edm::ParameterSet const& iConfig)
Expand All @@ -134,7 +136,8 @@ MkFitOutputConverter::MkFitOutputConverter(edm::ParameterSet const& iConfig)
qualityMaxRsq_{float(pow(iConfig.getParameter<double>("qualityMaxR"), 2))},
qualityMaxZ_{float(iConfig.getParameter<double>("qualityMaxZ"))},
qualityMaxPosErrSq_{float(pow(iConfig.getParameter<double>("qualityMaxPosErr"), 2))},
qualitySignPt_{iConfig.getParameter<bool>("qualitySignPt")} {}
qualitySignPt_{iConfig.getParameter<bool>("qualitySignPt")},
doErrorRescale_{iConfig.getParameter<bool>("doErrorRescale")} {}

void MkFitOutputConverter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
Expand All @@ -156,6 +159,8 @@ void MkFitOutputConverter::fillDescriptions(edm::ConfigurationDescriptions& desc
desc.add<double>("qualityMaxPosErr", 100)->setComment("max position error for converted tracks");
desc.add<bool>("qualitySignPt", true)->setComment("check sign of 1/pt for converted tracks");

desc.add<bool>("doErrorRescale", true)->setComment("rescale candidate error before final fit");

descriptions.addWithDefaultLabel(desc);
}

Expand Down Expand Up @@ -341,6 +346,12 @@ TrackCandidateCollection MkFitOutputConverter::convertCandidates(const MkFitOutp
const auto seedIndex = cand.label();
LogTrace("MkFitOutputConverter") << " from seed " << seedIndex << " seed hits";

// Rescale candidate error if candidate is already propagated to first layer,
// to be consistent with TransientInitialStateEstimator::innerState used in CkfTrackCandidateMakerBase
// Error is only rescaled for candidates propagated to first layer;
// otherwise, candidates undergo backwardFit where error is already rescaled
if (mkFitOutput.propagatedToFirstLayer() && doErrorRescale_)
fts.rescaleError(100.);
auto tsosDet =
mkFitOutput.propagatedToFirstLayer()
? convertInnermostState(fts, recHits, propagatorAlong, propagatorOpposite)
Expand Down
2 changes: 1 addition & 1 deletion RecoTracker/MkFitCore/interface/IterationConfig.h
Expand Up @@ -93,7 +93,7 @@ namespace mkfit {
int maxConsecHoles = 1;
float chi2Cut_min = 15.0;
float chi2CutOverlap = 3.5;
float pTCutOverlap = 1.0;
float pTCutOverlap = 0.0;

//seed cleaning params
float c_ptthr_hpt = 2.0;
Expand Down
8 changes: 5 additions & 3 deletions RecoTracker/MkFitCore/src/MkFinder.cc
Expand Up @@ -1074,7 +1074,8 @@ namespace mkfit {
newcand.setScore(getScoreCand(newcand, true /*penalizeTailMissHits*/, true /*inFindCandidates*/));
newcand.setOriginIndex(m_CandIdx(itrack, 0, 0));

if (chi2 < m_iteration_params->chi2CutOverlap) {
// To apply a fixed cut instead of dynamic cut for overlap: m_iteration_params->chi2CutOverlap
if (chi2 < max_c2) {
CombCandidate &ccand = *newcand.combCandidate();
ccand[m_CandIdx(itrack, 0, 0)].considerHitForOverlap(
hit_idx, layer_of_hits.refHit(hit_idx).detIDinLayer(), chi2);
Expand Down Expand Up @@ -1231,8 +1232,9 @@ namespace mkfit {
nHitsAdded[itrack]++;
const int hit_idx = m_XHitArr.At(itrack, hit_cnt, 0);

// Register hit for overlap consideration, here we apply chi2 cut
if (chi2 < m_iteration_params->chi2CutOverlap) {
// Register hit for overlap consideration, if chi2 cut is passed
// To apply a fixed cut instead of dynamic cut for overlap: m_iteration_params->chi2CutOverlap
if (chi2 < max_c2) {
ccand[m_CandIdx(itrack, 0, 0)].considerHitForOverlap(
hit_idx, layer_of_hits.refHit(hit_idx).detIDinLayer(), chi2);
}
Expand Down

0 comments on commit 2c3a99b

Please sign in to comment.