diff --git a/RecoTracker/MkFit/README.md b/RecoTracker/MkFit/README.md index d2669d7f63307..1ef5b85725b66 100644 --- a/RecoTracker/MkFit/README.md +++ b/RecoTracker/MkFit/README.md @@ -51,7 +51,7 @@ $ runTheMatrix.py -l --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) diff --git a/RecoTracker/MkFit/plugins/MkFitOutputConverter.cc b/RecoTracker/MkFit/plugins/MkFitOutputConverter.cc index 88bc865b66ab9..af056621074ac 100644 --- a/RecoTracker/MkFit/plugins/MkFitOutputConverter.cc +++ b/RecoTracker/MkFit/plugins/MkFitOutputConverter.cc @@ -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) @@ -134,7 +136,8 @@ MkFitOutputConverter::MkFitOutputConverter(edm::ParameterSet const& iConfig) qualityMaxRsq_{float(pow(iConfig.getParameter("qualityMaxR"), 2))}, qualityMaxZ_{float(iConfig.getParameter("qualityMaxZ"))}, qualityMaxPosErrSq_{float(pow(iConfig.getParameter("qualityMaxPosErr"), 2))}, - qualitySignPt_{iConfig.getParameter("qualitySignPt")} {} + qualitySignPt_{iConfig.getParameter("qualitySignPt")}, + doErrorRescale_{iConfig.getParameter("doErrorRescale")} {} void MkFitOutputConverter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; @@ -156,6 +159,8 @@ void MkFitOutputConverter::fillDescriptions(edm::ConfigurationDescriptions& desc desc.add("qualityMaxPosErr", 100)->setComment("max position error for converted tracks"); desc.add("qualitySignPt", true)->setComment("check sign of 1/pt for converted tracks"); + desc.add("doErrorRescale", true)->setComment("rescale candidate error before final fit"); + descriptions.addWithDefaultLabel(desc); } @@ -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) diff --git a/RecoTracker/MkFitCore/interface/IterationConfig.h b/RecoTracker/MkFitCore/interface/IterationConfig.h index cdf33abd8cc05..dab8277ccd66a 100644 --- a/RecoTracker/MkFitCore/interface/IterationConfig.h +++ b/RecoTracker/MkFitCore/interface/IterationConfig.h @@ -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; diff --git a/RecoTracker/MkFitCore/src/MkFinder.cc b/RecoTracker/MkFitCore/src/MkFinder.cc index b4f833298a9b3..56a110c5d5bb0 100644 --- a/RecoTracker/MkFitCore/src/MkFinder.cc +++ b/RecoTracker/MkFitCore/src/MkFinder.cc @@ -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); @@ -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); }