diff --git a/RecoEgamma/EgammaPhotonProducers/python/trajectoryBuilderForConversions_cfi.py b/RecoEgamma/EgammaPhotonProducers/python/trajectoryBuilderForConversions_cfi.py index 183650f43c4b9..51290a2d9a55a 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/trajectoryBuilderForConversions_cfi.py +++ b/RecoEgamma/EgammaPhotonProducers/python/trajectoryBuilderForConversions_cfi.py @@ -17,6 +17,8 @@ trajectoryFilter = dict(refToPSet_ = 'TrajectoryFilterForConversions'), maxCand = 5, lostHitPenalty = 30., + foundHitBonus = 0., + minHitForDoubleBonus = 8888, intermediateCleaning = True, alwaysUseInvalidHits = True, seedAs5DHit = False diff --git a/RecoMuon/L3TrackFinder/python/MuonCkfTrajectoryBuilder_cfi.py b/RecoMuon/L3TrackFinder/python/MuonCkfTrajectoryBuilder_cfi.py index 42fce0618221a..8e54dc7fabc4d 100644 --- a/RecoMuon/L3TrackFinder/python/MuonCkfTrajectoryBuilder_cfi.py +++ b/RecoMuon/L3TrackFinder/python/MuonCkfTrajectoryBuilder_cfi.py @@ -19,6 +19,8 @@ rescaleErrorIfFail = cms.double(1.0), propagatorOpposite = cms.string('PropagatorWithMaterialOpposite'), lostHitPenalty = cms.double(30.0), + foundHitBonus = cms.double(0.0), + minHitForDoubleBonus = cms.int32(9999), #this is present in HLT config, appears to be dummy # appendToDataLabel = cms.string( "" ), #safety cone size diff --git a/RecoTracker/CkfPattern/interface/CkfTrajectoryBuilder.h b/RecoTracker/CkfPattern/interface/CkfTrajectoryBuilder.h index 209978eb9dd2d..c5d7b8e0d8df7 100644 --- a/RecoTracker/CkfPattern/interface/CkfTrajectoryBuilder.h +++ b/RecoTracker/CkfPattern/interface/CkfTrajectoryBuilder.h @@ -63,6 +63,8 @@ class CkfTrajectoryBuilder : public BaseCkfTrajectoryBuilder { int theMaxCand; /**< Maximum number of trajectory candidates to propagate to the next layer. */ float theLostHitPenalty; /**< Chi**2 Penalty for each lost hit. */ + float theFoundHitBonus; /**< Chi**2 Bonus for each found hit. */ + int theMinHitForDoubleBonus; /**< minimun number of hits to double the bonus above */ bool theIntermediateCleaning; /**< Tells whether an intermediary cleaning stage should take place during TB. */ bool theAlwaysUseInvalidHits; diff --git a/RecoTracker/CkfPattern/plugins/TrajectoryLessByFoundHits.h b/RecoTracker/CkfPattern/plugins/TrajectoryLessByFoundHits.h deleted file mode 100644 index 77f81ba420db7..0000000000000 --- a/RecoTracker/CkfPattern/plugins/TrajectoryLessByFoundHits.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef TrajectoryLessByFoundHits_h_ -#define TrajectoryLessByFoundHits_h_ - -#include "TrackingTools/PatternTools/interface/Trajectory.h" -#include - -inline bool lessByFoundHits(const Trajectory& a, const Trajectory& b) { return a.foundHits() < b.foundHits(); } -inline bool lessByFoundHits(const TempTrajectory& a, const TempTrajectory& b) { return a.foundHits() < b.foundHits(); } - -struct TrajectoryLessByFoundHits { - bool operator()(const Trajectory& a, const Trajectory& b) const { return a.foundHits() < b.foundHits(); } - bool operator()(const TempTrajectory& a, const TempTrajectory& b) const { return a.foundHits() < b.foundHits(); } -}; -#endif diff --git a/RecoTracker/CkfPattern/plugins/TrajectorySegmentBuilder.cc b/RecoTracker/CkfPattern/plugins/TrajectorySegmentBuilder.cc index df1d438e1f869..fc9fff86b720b 100644 --- a/RecoTracker/CkfPattern/plugins/TrajectorySegmentBuilder.cc +++ b/RecoTracker/CkfPattern/plugins/TrajectorySegmentBuilder.cc @@ -13,7 +13,6 @@ #include "TrackingTools/MeasurementDet/interface/TrajectoryMeasurementGroup.h" #include "TrackingTools/DetLayers/interface/DetGroup.h" #include "TrackingTools/DetLayers/interface/DetLayer.h" -#include "TrajectoryLessByFoundHits.h" #include "TrackingTools/PatternTools/interface/TrajectoryStateUpdator.h" #include "TrackingTools/DetLayers/interface/GeomDetCompatibilityChecker.h" #include "TrackingTools/MeasurementDet/interface/MeasurementDet.h" @@ -482,7 +481,8 @@ void TrajectorySegmentBuilder::cleanCandidates(vector& candidate int index[NC]; for (int i = 0; i != NC; ++i) index[i] = i; - std::sort(index, index + NC, [&candidates](int i, int j) { return lessByFoundHits(candidates[i], candidates[j]); }); + std::sort( + index, index + NC, [&candidates](int i, int j) { return candidates[i].foundHits() < candidates[j].foundHits(); }); // cout << "SortedCandidates.foundHits"; // for (auto i1 : index) // cout << " " << candidates[i1].foundHits(); diff --git a/RecoTracker/CkfPattern/python/CkfTrajectoryBuilder_cfi.py b/RecoTracker/CkfPattern/python/CkfTrajectoryBuilder_cfi.py index d4df8e456eb83..b1ac8c3ead8f5 100644 --- a/RecoTracker/CkfPattern/python/CkfTrajectoryBuilder_cfi.py +++ b/RecoTracker/CkfPattern/python/CkfTrajectoryBuilder_cfi.py @@ -20,6 +20,8 @@ propagatorOpposite = cms.string('PropagatorWithMaterialOpposite'), # propagatorOpposite = cms.string('PropagatorWithMaterialParabolicMfOpposite'), lostHitPenalty = cms.double(30.0), + foundHitBonus = cms.double(0.0), + minHitForDoubleBonus = cms.int32(8888), #SharedSeedCheck = cms.bool(False), seedAs5DHit = cms.bool(False) ) diff --git a/RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc b/RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc index 3680471fd89de..7ee61329f57de 100644 --- a/RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc +++ b/RecoTracker/CkfPattern/src/CkfTrajectoryBuilder.cc @@ -40,6 +40,8 @@ CkfTrajectoryBuilder::CkfTrajectoryBuilder(const edm::ParameterSet& conf, : BaseCkfTrajectoryBuilder(conf, iC, std::move(filter)) { theMaxCand = conf.getParameter("maxCand"); theLostHitPenalty = conf.getParameter("lostHitPenalty"); + theFoundHitBonus = conf.getParameter("foundHitBonus"); + theMinHitForDoubleBonus = conf.getParameter("minHitForDoubleBonus"); theIntermediateCleaning = conf.getParameter("intermediateCleaning"); theAlwaysUseInvalidHits = conf.getParameter("alwaysUseInvalidHits"); } @@ -48,6 +50,8 @@ void CkfTrajectoryBuilder::fillPSetDescription(edm::ParameterSetDescription& iDe BaseCkfTrajectoryBuilder::fillPSetDescription(iDesc); iDesc.add("maxCand", 5); iDesc.add("lostHitPenalty", 30.); + iDesc.add("foundHitBonus", 0.); + iDesc.add("minHitForDoubleBonus", 8888); iDesc.add("intermediateCleaning", true); iDesc.add("alwaysUseInvalidHits", true); @@ -104,10 +108,14 @@ unsigned int CkfTrajectoryBuilder::limitedCandidates(const std::shared_ptr theMinHitForDoubleBonus ? bonus : 0; + return a.chiSquared() + a.lostHits() * theLostHitPenalty - bonus * a.foundHits(); }; + auto trajCandLess = [&](TempTrajectory const& a, TempTrajectory const& b) { return score(a) < score(b); }; + while (!candidates.empty()) { newCand.clear(); bool full = 0;