diff --git a/Configuration/ProcessModifiers/python/trackingMkFitCommon_cff.py b/Configuration/ProcessModifiers/python/trackingMkFitCommon_cff.py
new file mode 100644
index 0000000000000..d6ddd4f9ba133
--- /dev/null
+++ b/Configuration/ProcessModifiers/python/trackingMkFitCommon_cff.py
@@ -0,0 +1,4 @@
+import FWCore.ParameterSet.Config as cms
+
+# This modifier does iteration-independent changes for enabling mkFit
+trackingMkFitCommon = cms.Modifier()
diff --git a/Configuration/ProcessModifiers/python/trackingMkFitDetachedQuadStep_cff.py b/Configuration/ProcessModifiers/python/trackingMkFitDetachedQuadStep_cff.py
new file mode 100644
index 0000000000000..18bd2a903f982
--- /dev/null
+++ b/Configuration/ProcessModifiers/python/trackingMkFitDetachedQuadStep_cff.py
@@ -0,0 +1,4 @@
+import FWCore.ParameterSet.Config as cms
+
+# This modifier sets replaces the default pattern recognition with mkFit for detachedQuadStep
+trackingMkFitDetachedQuadStep = cms.Modifier()
diff --git a/Configuration/ProcessModifiers/python/trackingMkFitDetachedTripletStep_cff.py b/Configuration/ProcessModifiers/python/trackingMkFitDetachedTripletStep_cff.py
new file mode 100644
index 0000000000000..9cb5bcf705357
--- /dev/null
+++ b/Configuration/ProcessModifiers/python/trackingMkFitDetachedTripletStep_cff.py
@@ -0,0 +1,4 @@
+import FWCore.ParameterSet.Config as cms
+
+# This modifier sets replaces the default pattern recognition with mkFit for detachedTripletStep
+trackingMkFitDetachedTripletStep = cms.Modifier()
diff --git a/Configuration/ProcessModifiers/python/trackingMkFitHighPtTripletStep_cff.py b/Configuration/ProcessModifiers/python/trackingMkFitHighPtTripletStep_cff.py
new file mode 100644
index 0000000000000..4db29d1d80275
--- /dev/null
+++ b/Configuration/ProcessModifiers/python/trackingMkFitHighPtTripletStep_cff.py
@@ -0,0 +1,4 @@
+import FWCore.ParameterSet.Config as cms
+
+# This modifier sets replaces the default pattern recognition with mkFit for highPtTripletStep
+trackingMkFitHighPtTripletStep = cms.Modifier()
diff --git a/Configuration/ProcessModifiers/python/trackingMkFitInitialStep_cff.py b/Configuration/ProcessModifiers/python/trackingMkFitInitialStep_cff.py
new file mode 100644
index 0000000000000..3c4445795d201
--- /dev/null
+++ b/Configuration/ProcessModifiers/python/trackingMkFitInitialStep_cff.py
@@ -0,0 +1,4 @@
+import FWCore.ParameterSet.Config as cms
+
+# This modifier sets replaces the default pattern recognition with mkFit for initialStep
+trackingMkFitInitialStep = cms.Modifier()
diff --git a/Configuration/ProcessModifiers/python/trackingMkFitLowPtQuadStep_cff.py b/Configuration/ProcessModifiers/python/trackingMkFitLowPtQuadStep_cff.py
new file mode 100644
index 0000000000000..5b0c4a622e86a
--- /dev/null
+++ b/Configuration/ProcessModifiers/python/trackingMkFitLowPtQuadStep_cff.py
@@ -0,0 +1,4 @@
+import FWCore.ParameterSet.Config as cms
+
+# This modifier sets replaces the default pattern recognition with mkFit for lowPtQuadStep
+trackingMkFitLowPtQuadStep = cms.Modifier()
diff --git a/Configuration/ProcessModifiers/python/trackingMkFitLowPtTripletStep_cff.py b/Configuration/ProcessModifiers/python/trackingMkFitLowPtTripletStep_cff.py
new file mode 100644
index 0000000000000..d4ecaf8cb950d
--- /dev/null
+++ b/Configuration/ProcessModifiers/python/trackingMkFitLowPtTripletStep_cff.py
@@ -0,0 +1,4 @@
+import FWCore.ParameterSet.Config as cms
+
+# This modifier sets replaces the default pattern recognition with mkFit for lowPtTripletStep
+trackingMkFitLowPtTripletStep = cms.Modifier()
diff --git a/Configuration/ProcessModifiers/python/trackingMkFitMixedTripletStep_cff.py b/Configuration/ProcessModifiers/python/trackingMkFitMixedTripletStep_cff.py
new file mode 100644
index 0000000000000..104fc5aeb5029
--- /dev/null
+++ b/Configuration/ProcessModifiers/python/trackingMkFitMixedTripletStep_cff.py
@@ -0,0 +1,4 @@
+import FWCore.ParameterSet.Config as cms
+
+# This modifier sets replaces the default pattern recognition with mkFit for mixedTripletStep
+trackingMkFitMixedTripletStep = cms.Modifier()
diff --git a/Configuration/ProcessModifiers/python/trackingMkFitPixelLessStep_cff.py b/Configuration/ProcessModifiers/python/trackingMkFitPixelLessStep_cff.py
new file mode 100644
index 0000000000000..396d80eb7bf2e
--- /dev/null
+++ b/Configuration/ProcessModifiers/python/trackingMkFitPixelLessStep_cff.py
@@ -0,0 +1,4 @@
+import FWCore.ParameterSet.Config as cms
+
+# This modifier sets replaces the default pattern recognition with mkFit for pixelLessStep
+trackingMkFitPixelLessStep = cms.Modifier()
diff --git a/Configuration/ProcessModifiers/python/trackingMkFitTobTecStep_cff.py b/Configuration/ProcessModifiers/python/trackingMkFitTobTecStep_cff.py
new file mode 100644
index 0000000000000..b8317e86fff68
--- /dev/null
+++ b/Configuration/ProcessModifiers/python/trackingMkFitTobTecStep_cff.py
@@ -0,0 +1,4 @@
+import FWCore.ParameterSet.Config as cms
+
+# This modifier sets replaces the default pattern recognition with mkFit for tobTecStep
+trackingMkFitTobTecStep = cms.Modifier()
diff --git a/Configuration/ProcessModifiers/python/trackingMkFit_cff.py b/Configuration/ProcessModifiers/python/trackingMkFit_cff.py
index 08903e6a84258..b62a8d8376937 100644
--- a/Configuration/ProcessModifiers/python/trackingMkFit_cff.py
+++ b/Configuration/ProcessModifiers/python/trackingMkFit_cff.py
@@ -1,4 +1,26 @@
import FWCore.ParameterSet.Config as cms
-# This modifier sets replaces the default pattern recognition with mkFit (possibly in selected iterations only)
-trackingMkFit = cms.Modifier()
+from Configuration.ProcessModifiers.trackingMkFitCommon_cff import *
+from Configuration.ProcessModifiers.trackingMkFitInitialStep_cff import *
+from Configuration.ProcessModifiers.trackingMkFitLowPtQuadStep_cff import *
+from Configuration.ProcessModifiers.trackingMkFitHighPtTripletStep_cff import *
+from Configuration.ProcessModifiers.trackingMkFitLowPtTripletStep_cff import *
+from Configuration.ProcessModifiers.trackingMkFitDetachedQuadStep_cff import *
+from Configuration.ProcessModifiers.trackingMkFitDetachedTripletStep_cff import *
+from Configuration.ProcessModifiers.trackingMkFitMixedTripletStep_cff import *
+from Configuration.ProcessModifiers.trackingMkFitPixelLessStep_cff import *
+from Configuration.ProcessModifiers.trackingMkFitTobTecStep_cff import *
+
+# Use mkFit in selected iterations
+trackingMkFit = cms.ModifierChain(
+ trackingMkFitCommon,
+ trackingMkFitInitialStep,
+ trackingMkFitLowPtQuadStep,
+ trackingMkFitHighPtTripletStep,
+ trackingMkFitLowPtTripletStep,
+ trackingMkFitDetachedQuadStep,
+# trackingMkFitDetachedTripletStep, # to be enabled later
+# trackingMkFitMixedTripletStep, # to be enabled later
+ trackingMkFitPixelLessStep,
+ trackingMkFitTobTecStep,
+)
diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py
index 8b7ccd217e6c2..724a2e3f0639d 100644
--- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py
+++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py
@@ -291,11 +291,14 @@ def condition_(self, fragment, stepList, key, hasHarvest):
class UpgradeWorkflow_trackingMkFit(UpgradeWorkflowTracking):
def setup_(self, step, stepName, stepDict, k, properties):
+ if 'Digi' in step: stepDict[stepName][k] = merge([self.step2, stepDict[step][k]])
if 'Reco' in step: stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
def condition_(self, fragment, stepList, key, hasHarvest):
return '2017' in key or '2021' in key
upgradeWFs['trackingMkFit'] = UpgradeWorkflow_trackingMkFit(
steps = [
+ 'Digi',
+ 'DigiTrigger',
'Reco',
'RecoGlobal',
],
@@ -303,6 +306,9 @@ def condition_(self, fragment, stepList, key, hasHarvest):
suffix = '_trackingMkFit',
offset = 0.7,
)
+upgradeWFs['trackingMkFit'].step2 = {
+ '--customise': 'RecoTracker/MkFit/customizeHLTIter0ToMkFit.customizeHLTIter0ToMkFit'
+}
upgradeWFs['trackingMkFit'].step3 = {
'--procModifiers': 'trackingMkFit'
}
diff --git a/RecoTracker/IterativeTracking/python/DetachedQuadStep_cff.py b/RecoTracker/IterativeTracking/python/DetachedQuadStep_cff.py
index 8f0f7e466fb3a..4e2b04aa63213 100644
--- a/RecoTracker/IterativeTracking/python/DetachedQuadStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/DetachedQuadStep_cff.py
@@ -186,6 +186,29 @@
phase2clustersToSkip = cms.InputTag('detachedQuadStepClusters')
)
+from Configuration.ProcessModifiers.trackingMkFitDetachedQuadStep_cff import trackingMkFitDetachedQuadStep
+import RecoTracker.MkFit.mkFitSeedConverter_cfi as mkFitSeedConverter_cfi
+import RecoTracker.MkFit.mkFitIterationConfigESProducer_cfi as mkFitIterationConfigESProducer_cfi
+import RecoTracker.MkFit.mkFitProducer_cfi as mkFitProducer_cfi
+import RecoTracker.MkFit.mkFitOutputConverter_cfi as mkFitOutputConverter_cfi
+detachedQuadStepTrackCandidatesMkFitSeeds = mkFitSeedConverter_cfi.mkFitSeedConverter.clone(
+ seeds = 'detachedQuadStepSeeds',
+)
+detachedQuadStepTrackCandidatesMkFitConfig = mkFitIterationConfigESProducer_cfi.mkFitIterationConfigESProducer.clone(
+ config = 'RecoTracker/MkFit/data/mkfit-phase1-detachedQuadStep.json',
+ ComponentName = 'detachedQuadStepTrackCandidatesMkFitConfig',
+)
+detachedQuadStepTrackCandidatesMkFit = mkFitProducer_cfi.mkFitProducer.clone(
+ seeds = 'detachedQuadStepTrackCandidatesMkFitSeeds',
+ config = ('', 'detachedQuadStepTrackCandidatesMkFitConfig'),
+ clustersToSkip = 'detachedQuadStepClusters',
+)
+trackingMkFitDetachedQuadStep.toReplaceWith(detachedQuadStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
+ seeds = 'detachedQuadStepSeeds',
+ mkFitSeeds = 'detachedQuadStepTrackCandidatesMkFitSeeds',
+ tracks = 'detachedQuadStepTrackCandidatesMkFit',
+))
+
#For FastSim phase1 tracking
import FastSimulation.Tracking.TrackCandidateProducer_cfi
_fastSim_detachedQuadStepTrackCandidates = FastSimulation.Tracking.TrackCandidateProducer_cfi.trackCandidateProducer.clone(
@@ -337,6 +360,11 @@
detachedQuadStepTracks,
detachedQuadStep)
DetachedQuadStep = cms.Sequence(DetachedQuadStepTask)
+
+_DetachedQuadStepTask_trackingMkFit = DetachedQuadStepTask.copy()
+_DetachedQuadStepTask_trackingMkFit.add(detachedQuadStepTrackCandidatesMkFitSeeds, detachedQuadStepTrackCandidatesMkFit, detachedQuadStepTrackCandidatesMkFitConfig)
+trackingMkFitDetachedQuadStep.toReplaceWith(DetachedQuadStepTask, _DetachedQuadStepTask_trackingMkFit)
+
_DetachedQuadStepTask_Phase2PU140 = DetachedQuadStepTask.copy()
_DetachedQuadStepTask_Phase2PU140.replace(detachedQuadStep, cms.Task(detachedQuadStepSelector,detachedQuadStep))
trackingPhase2PU140.toReplaceWith(DetachedQuadStepTask, _DetachedQuadStepTask_Phase2PU140)
diff --git a/RecoTracker/IterativeTracking/python/DetachedTripletStep_cff.py b/RecoTracker/IterativeTracking/python/DetachedTripletStep_cff.py
index a97483e20256f..a8748a1b1f627 100644
--- a/RecoTracker/IterativeTracking/python/DetachedTripletStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/DetachedTripletStep_cff.py
@@ -214,6 +214,29 @@
detachedTripletStepTrackCandidates.TrajectoryCleaner = 'detachedTripletStepTrajectoryCleanerBySharedHits'
trackingLowPU.toModify(detachedTripletStepTrajectoryCleanerBySharedHits, fractionShared = 0.19)
+from Configuration.ProcessModifiers.trackingMkFitDetachedTripletStep_cff import trackingMkFitDetachedTripletStep
+import RecoTracker.MkFit.mkFitSeedConverter_cfi as mkFitSeedConverter_cfi
+import RecoTracker.MkFit.mkFitIterationConfigESProducer_cfi as mkFitIterationConfigESProducer_cfi
+import RecoTracker.MkFit.mkFitProducer_cfi as mkFitProducer_cfi
+import RecoTracker.MkFit.mkFitOutputConverter_cfi as mkFitOutputConverter_cfi
+detachedTripletStepTrackCandidatesMkFitSeeds = mkFitSeedConverter_cfi.mkFitSeedConverter.clone(
+ seeds = 'detachedTripletStepSeeds',
+)
+detachedTripletStepTrackCandidatesMkFitConfig = mkFitIterationConfigESProducer_cfi.mkFitIterationConfigESProducer.clone(
+ ComponentName = 'detachedTripletStepTrackCandidatesMkFitConfig',
+ config = 'RecoTracker/MkFit/data/mkfit-phase1-detachedTripletStep.json',
+)
+detachedTripletStepTrackCandidatesMkFit = mkFitProducer_cfi.mkFitProducer.clone(
+ seeds = 'detachedTripletStepTrackCandidatesMkFitSeeds',
+ config = ('', 'detachedTripletStepTrackCandidatesMkFitConfig'),
+ clustersToSkip = 'detachedTripletStepClusters',
+)
+trackingMkFitDetachedTripletStep.toReplaceWith(detachedTripletStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
+ seeds = 'detachedTripletStepSeeds',
+ mkFitSeeds = 'detachedTripletStepTrackCandidatesMkFitSeeds',
+ tracks = 'detachedTripletStepTrackCandidatesMkFit',
+))
+
import FastSimulation.Tracking.TrackCandidateProducer_cfi
_fastSim_detachedTripletStepTrackCandidates = FastSimulation.Tracking.TrackCandidateProducer_cfi.trackCandidateProducer.clone(
src = 'detachedTripletStepSeeds',
@@ -379,6 +402,11 @@
detachedTripletStepClassifier1,detachedTripletStepClassifier2,
detachedTripletStep)
DetachedTripletStep = cms.Sequence(DetachedTripletStepTask)
+
+_DetachedTripletStepTask_trackingMkFit = DetachedTripletStepTask.copy()
+_DetachedTripletStepTask_trackingMkFit.add(detachedTripletStepTrackCandidatesMkFitSeeds, detachedTripletStepTrackCandidatesMkFit, detachedTripletStepTrackCandidatesMkFitConfig)
+trackingMkFitDetachedTripletStep.toReplaceWith(DetachedTripletStepTask, _DetachedTripletStepTask_trackingMkFit)
+
_DetachedTripletStepTask_LowPU = DetachedTripletStepTask.copyAndExclude([detachedTripletStepClassifier2])
_DetachedTripletStepTask_LowPU.replace(detachedTripletStepClassifier1, detachedTripletStepSelector)
trackingLowPU.toReplaceWith(DetachedTripletStepTask, _DetachedTripletStepTask_LowPU)
diff --git a/RecoTracker/IterativeTracking/python/HighPtTripletStep_cff.py b/RecoTracker/IterativeTracking/python/HighPtTripletStep_cff.py
index a249bad2528c6..cd1d48e1b848d 100644
--- a/RecoTracker/IterativeTracking/python/HighPtTripletStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/HighPtTripletStep_cff.py
@@ -215,6 +215,29 @@
useHitsSplitting = True
)
+from Configuration.ProcessModifiers.trackingMkFitHighPtTripletStep_cff import trackingMkFitHighPtTripletStep
+import RecoTracker.MkFit.mkFitSeedConverter_cfi as mkFitSeedConverter_cfi
+import RecoTracker.MkFit.mkFitIterationConfigESProducer_cfi as mkFitIterationConfigESProducer_cfi
+import RecoTracker.MkFit.mkFitProducer_cfi as mkFitProducer_cfi
+import RecoTracker.MkFit.mkFitOutputConverter_cfi as mkFitOutputConverter_cfi
+highPtTripletStepTrackCandidatesMkFitSeeds = mkFitSeedConverter_cfi.mkFitSeedConverter.clone(
+ seeds = 'highPtTripletStepSeeds',
+)
+highPtTripletStepTrackCandidatesMkFitConfig = mkFitIterationConfigESProducer_cfi.mkFitIterationConfigESProducer.clone(
+ ComponentName = 'highPtTripletStepTrackCandidatesMkFitConfig',
+ config = 'RecoTracker/MkFit/data/mkfit-phase1-highPtTripletStep.json',
+)
+highPtTripletStepTrackCandidatesMkFit = mkFitProducer_cfi.mkFitProducer.clone(
+ seeds = 'highPtTripletStepTrackCandidatesMkFitSeeds',
+ config = ('', 'highPtTripletStepTrackCandidatesMkFitConfig'),
+ clustersToSkip = 'highPtTripletStepClusters',
+)
+trackingMkFitHighPtTripletStep.toReplaceWith(highPtTripletStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
+ seeds = 'highPtTripletStepSeeds',
+ mkFitSeeds = 'highPtTripletStepTrackCandidatesMkFitSeeds',
+ tracks = 'highPtTripletStepTrackCandidatesMkFit',
+))
+
# For Phase2PU140
from TrackingTools.TrajectoryCleaning.TrajectoryCleanerBySharedHits_cfi import trajectoryCleanerBySharedHits as _trajectoryCleanerBySharedHits
highPtTripletStepTrajectoryCleanerBySharedHits = _trajectoryCleanerBySharedHits.clone(
@@ -332,6 +355,11 @@
highPtTripletStepTracks,
highPtTripletStep)
HighPtTripletStep = cms.Sequence(HighPtTripletStepTask)
+
+_HighPtTripletStepTask_trackingMkFit = HighPtTripletStepTask.copy()
+_HighPtTripletStepTask_trackingMkFit.add(highPtTripletStepTrackCandidatesMkFitSeeds, highPtTripletStepTrackCandidatesMkFit, highPtTripletStepTrackCandidatesMkFitConfig)
+trackingMkFitHighPtTripletStep.toReplaceWith(HighPtTripletStepTask, _HighPtTripletStepTask_trackingMkFit)
+
_HighPtTripletStepTask_Phase2PU140 = HighPtTripletStepTask.copy()
_HighPtTripletStepTask_Phase2PU140.replace(highPtTripletStep, highPtTripletStepSelector)
_HighPtTripletStep_Phase2PU140 = cms.Sequence(_HighPtTripletStepTask_Phase2PU140)
diff --git a/RecoTracker/IterativeTracking/python/InitialStep_cff.py b/RecoTracker/IterativeTracking/python/InitialStep_cff.py
index fb77d3ce0acaf..d8fa10a6768d4 100644
--- a/RecoTracker/IterativeTracking/python/InitialStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/InitialStep_cff.py
@@ -223,19 +223,32 @@
useHitsSplitting = True
)
-from Configuration.ProcessModifiers.trackingMkFit_cff import trackingMkFit
-import RecoTracker.MkFit.mkFitInputConverter_cfi as mkFitInputConverter_cfi
+from Configuration.ProcessModifiers.trackingMkFitInitialStep_cff import trackingMkFitInitialStep
+from RecoTracker.MkFit.mkFitGeometryESProducer_cfi import mkFitGeometryESProducer
+import RecoTracker.MkFit.mkFitSiPixelHitConverter_cfi as mkFitSiPixelHitConverter_cfi
+import RecoTracker.MkFit.mkFitSiStripHitConverter_cfi as mkFitSiStripHitConverter_cfi
+import RecoTracker.MkFit.mkFitEventOfHitsProducer_cfi as mkFitEventOfHitsProducer_cfi
+import RecoTracker.MkFit.mkFitSeedConverter_cfi as mkFitSeedConverter_cfi
+import RecoTracker.MkFit.mkFitIterationConfigESProducer_cfi as mkFitIterationConfigESProducer_cfi
import RecoTracker.MkFit.mkFitProducer_cfi as mkFitProducer_cfi
import RecoTracker.MkFit.mkFitOutputConverter_cfi as mkFitOutputConverter_cfi
-initialStepTrackCandidatesMkFitInput = mkFitInputConverter_cfi.mkFitInputConverter.clone(
+mkFitSiPixelHits = mkFitSiPixelHitConverter_cfi.mkFitSiPixelHitConverter.clone() # TODO: figure out better place for this module?
+mkFitSiStripHits = mkFitSiStripHitConverter_cfi.mkFitSiStripHitConverter.clone() # TODO: figure out better place for this module?
+mkFitEventOfHits = mkFitEventOfHitsProducer_cfi.mkFitEventOfHitsProducer.clone() # TODO: figure out better place for this module?
+initialStepTrackCandidatesMkFitSeeds = mkFitSeedConverter_cfi.mkFitSeedConverter.clone(
seeds = 'initialStepSeeds',
)
+initialStepTrackCandidatesMkFitConfig = mkFitIterationConfigESProducer_cfi.mkFitIterationConfigESProducer.clone(
+ ComponentName = 'initialStepTrackCandidatesMkFitConfig',
+ config = 'RecoTracker/MkFit/data/mkfit-phase1-initialStep.json',
+)
initialStepTrackCandidatesMkFit = mkFitProducer_cfi.mkFitProducer.clone(
- hitsSeeds = 'initialStepTrackCandidatesMkFitInput',
+ seeds = 'initialStepTrackCandidatesMkFitSeeds',
+ config = ('', 'initialStepTrackCandidatesMkFitConfig'),
)
-trackingMkFit.toReplaceWith(initialStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
+trackingMkFitInitialStep.toReplaceWith(initialStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
seeds = 'initialStepSeeds',
- hitsSeeds = 'initialStepTrackCandidatesMkFitInput',
+ mkFitSeeds = 'initialStepTrackCandidatesMkFitSeeds',
tracks = 'initialStepTrackCandidatesMkFit',
))
@@ -413,9 +426,14 @@
initialStep,caloJetsForTrkTask)
InitialStep = cms.Sequence(InitialStepTask)
+from Configuration.ProcessModifiers.trackingMkFitCommon_cff import trackingMkFitCommon
+_InitialStepTask_trackingMkFitCommon = InitialStepTask.copy()
+_InitialStepTask_trackingMkFitCommon.add(mkFitSiPixelHits, mkFitSiStripHits, mkFitEventOfHits, mkFitGeometryESProducer)
+trackingMkFitCommon.toReplaceWith(InitialStepTask, _InitialStepTask_trackingMkFitCommon)
+
_InitialStepTask_trackingMkFit = InitialStepTask.copy()
-_InitialStepTask_trackingMkFit.add(initialStepTrackCandidatesMkFitInput, initialStepTrackCandidatesMkFit)
-trackingMkFit.toReplaceWith(InitialStepTask, _InitialStepTask_trackingMkFit)
+_InitialStepTask_trackingMkFit.add(initialStepTrackCandidatesMkFitSeeds, initialStepTrackCandidatesMkFit, initialStepTrackCandidatesMkFitConfig)
+trackingMkFitInitialStep.toReplaceWith(InitialStepTask, _InitialStepTask_trackingMkFit)
_InitialStepTask_LowPU = InitialStepTask.copyAndExclude([firstStepPrimaryVerticesUnsorted, initialStepTrackRefsForJets, caloJetsForTrkTask, firstStepPrimaryVertices, initialStepClassifier1, initialStepClassifier2, initialStepClassifier3])
_InitialStepTask_LowPU.replace(initialStep, initialStepSelector)
diff --git a/RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py b/RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py
index 93ad826dd28c6..f7b44fcfe68a4 100644
--- a/RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py
@@ -176,6 +176,29 @@
phase2clustersToSkip = cms.InputTag('lowPtQuadStepClusters')
)
+from Configuration.ProcessModifiers.trackingMkFitLowPtQuadStep_cff import trackingMkFitLowPtQuadStep
+import RecoTracker.MkFit.mkFitSeedConverter_cfi as mkFitSeedConverter_cfi
+import RecoTracker.MkFit.mkFitIterationConfigESProducer_cfi as mkFitIterationConfigESProducer_cfi
+import RecoTracker.MkFit.mkFitProducer_cfi as mkFitProducer_cfi
+import RecoTracker.MkFit.mkFitOutputConverter_cfi as mkFitOutputConverter_cfi
+lowPtQuadStepTrackCandidatesMkFitSeeds = mkFitSeedConverter_cfi.mkFitSeedConverter.clone(
+ seeds = 'lowPtQuadStepSeeds',
+)
+lowPtQuadStepTrackCandidatesMkFitConfig = mkFitIterationConfigESProducer_cfi.mkFitIterationConfigESProducer.clone(
+ ComponentName = 'lowPtQuadStepTrackCandidatesMkFitConfig',
+ config = 'RecoTracker/MkFit/data/mkfit-phase1-lowPtQuadStep.json',
+)
+lowPtQuadStepTrackCandidatesMkFit = mkFitProducer_cfi.mkFitProducer.clone(
+ seeds = 'lowPtQuadStepTrackCandidatesMkFitSeeds',
+ config = ('', 'lowPtQuadStepTrackCandidatesMkFitConfig'),
+ clustersToSkip = 'lowPtQuadStepClusters',
+)
+trackingMkFitLowPtQuadStep.toReplaceWith(lowPtQuadStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
+ seeds = 'lowPtQuadStepSeeds',
+ mkFitSeeds = 'lowPtQuadStepTrackCandidatesMkFitSeeds',
+ tracks = 'lowPtQuadStepTrackCandidatesMkFit',
+))
+
#For FastSim phase1 tracking
import FastSimulation.Tracking.TrackCandidateProducer_cfi
_fastSim_lowPtQuadStepTrackCandidates = FastSimulation.Tracking.TrackCandidateProducer_cfi.trackCandidateProducer.clone(
@@ -278,6 +301,10 @@
lowPtQuadStep)
LowPtQuadStep = cms.Sequence(LowPtQuadStepTask)
+_LowPtQuadStepTask_trackingMkFit = LowPtQuadStepTask.copy()
+_LowPtQuadStepTask_trackingMkFit.add(lowPtQuadStepTrackCandidatesMkFitSeeds, lowPtQuadStepTrackCandidatesMkFit, lowPtQuadStepTrackCandidatesMkFitConfig)
+trackingMkFitLowPtQuadStep.toReplaceWith(LowPtQuadStepTask, _LowPtQuadStepTask_trackingMkFit)
+
_LowPtQuadStepTask_Phase2PU140 = LowPtQuadStepTask.copy()
_LowPtQuadStepTask_Phase2PU140.replace(lowPtQuadStep, lowPtQuadStepSelector)
trackingPhase2PU140.toReplaceWith(LowPtQuadStepTask, _LowPtQuadStepTask_Phase2PU140)
diff --git a/RecoTracker/IterativeTracking/python/LowPtTripletStep_cff.py b/RecoTracker/IterativeTracking/python/LowPtTripletStep_cff.py
index b20d60df49116..66fd32de00ec1 100644
--- a/RecoTracker/IterativeTracking/python/LowPtTripletStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/LowPtTripletStep_cff.py
@@ -242,6 +242,29 @@
phase2clustersToSkip = cms.InputTag('lowPtTripletStepClusters')
)
+from Configuration.ProcessModifiers.trackingMkFitLowPtTripletStep_cff import trackingMkFitLowPtTripletStep
+import RecoTracker.MkFit.mkFitSeedConverter_cfi as mkFitSeedConverter_cfi
+import RecoTracker.MkFit.mkFitProducer_cfi as mkFitProducer_cfi
+import RecoTracker.MkFit.mkFitIterationConfigESProducer_cfi as mkFitIterationConfigESProducer_cfi
+import RecoTracker.MkFit.mkFitOutputConverter_cfi as mkFitOutputConverter_cfi
+lowPtTripletStepTrackCandidatesMkFitSeeds = mkFitSeedConverter_cfi.mkFitSeedConverter.clone(
+ seeds = 'lowPtTripletStepSeeds',
+)
+lowPtTripletStepTrackCandidatesMkFitConfig = mkFitIterationConfigESProducer_cfi.mkFitIterationConfigESProducer.clone(
+ ComponentName = 'lowPtTripletStepTrackCandidatesMkFitConfig',
+ config = 'RecoTracker/MkFit/data/mkfit-phase1-lowPtTripletStep.json',
+)
+lowPtTripletStepTrackCandidatesMkFit = mkFitProducer_cfi.mkFitProducer.clone(
+ seeds = 'lowPtTripletStepTrackCandidatesMkFitSeeds',
+ config = ('', 'lowPtTripletStepTrackCandidatesMkFitConfig'),
+ clustersToSkip = 'lowPtTripletStepClusters',
+)
+trackingMkFitLowPtTripletStep.toReplaceWith(lowPtTripletStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
+ seeds = 'lowPtTripletStepSeeds',
+ mkFitSeeds = 'lowPtTripletStepTrackCandidatesMkFitSeeds',
+ tracks = 'lowPtTripletStepTrackCandidatesMkFit',
+))
+
import FastSimulation.Tracking.TrackCandidateProducer_cfi
fastSim.toReplaceWith(lowPtTripletStepTrackCandidates,
FastSimulation.Tracking.TrackCandidateProducer_cfi.trackCandidateProducer.clone(
@@ -379,6 +402,10 @@
lowPtTripletStep)
LowPtTripletStep = cms.Sequence(LowPtTripletStepTask)
+_LowPtTripletStepTask_trackingMkFit = LowPtTripletStepTask.copy()
+_LowPtTripletStepTask_trackingMkFit.add(lowPtTripletStepTrackCandidatesMkFitSeeds, lowPtTripletStepTrackCandidatesMkFit)
+trackingMkFitLowPtTripletStep.toReplaceWith(LowPtTripletStepTask, _LowPtTripletStepTask_trackingMkFit)
+
_LowPtTripletStepTask_LowPU_Phase2PU140 = LowPtTripletStepTask.copy()
_LowPtTripletStepTask_LowPU_Phase2PU140.replace(lowPtTripletStep, lowPtTripletStepSelector)
trackingLowPU.toReplaceWith(LowPtTripletStepTask, _LowPtTripletStepTask_LowPU_Phase2PU140)
diff --git a/RecoTracker/IterativeTracking/python/MixedTripletStep_cff.py b/RecoTracker/IterativeTracking/python/MixedTripletStep_cff.py
index c3051b3053241..82f3b9cb60aeb 100644
--- a/RecoTracker/IterativeTracking/python/MixedTripletStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/MixedTripletStep_cff.py
@@ -291,6 +291,30 @@
useHitsSplitting = True,
TrajectoryCleaner = 'mixedTripletStepTrajectoryCleanerBySharedHits'
)
+
+from Configuration.ProcessModifiers.trackingMkFitMixedTripletStep_cff import trackingMkFitMixedTripletStep
+import RecoTracker.MkFit.mkFitSeedConverter_cfi as mkFitSeedConverter_cfi
+import RecoTracker.MkFit.mkFitIterationConfigESProducer_cfi as mkFitIterationConfigESProducer_cfi
+import RecoTracker.MkFit.mkFitProducer_cfi as mkFitProducer_cfi
+import RecoTracker.MkFit.mkFitOutputConverter_cfi as mkFitOutputConverter_cfi
+mixedTripletStepTrackCandidatesMkFitSeeds = mkFitSeedConverter_cfi.mkFitSeedConverter.clone(
+ seeds = 'mixedTripletStepSeeds',
+)
+mixedTripletStepTrackCandidatesMkFitConfig = mkFitIterationConfigESProducer_cfi.mkFitIterationConfigESProducer.clone(
+ ComponentName = 'mixedTripletStepTrackCandidatesMkFitConfig',
+ config = 'RecoTracker/MkFit/data/mkfit-phase1-mixedTripletStep.json',
+)
+mixedTripletStepTrackCandidatesMkFit = mkFitProducer_cfi.mkFitProducer.clone(
+ seeds = 'mixedTripletStepTrackCandidatesMkFitSeeds',
+ config = ('', 'mixedTripletStepTrackCandidatesMkFitConfig'),
+ clustersToSkip = 'mixedTripletStepClusters',
+)
+trackingMkFitMixedTripletStep.toReplaceWith(mixedTripletStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
+ seeds = 'mixedTripletStepSeeds',
+ mkFitSeeds = 'mixedTripletStepTrackCandidatesMkFitSeeds',
+ tracks = 'mixedTripletStepTrackCandidatesMkFit',
+))
+
import FastSimulation.Tracking.TrackCandidateProducer_cfi
fastSim.toReplaceWith(mixedTripletStepTrackCandidates,
FastSimulation.Tracking.TrackCandidateProducer_cfi.trackCandidateProducer.clone(
@@ -475,6 +499,11 @@
mixedTripletStepClassifier1,mixedTripletStepClassifier2,
mixedTripletStep)
MixedTripletStep = cms.Sequence(MixedTripletStepTask)
+
+_MixedTripletStepTask_trackingMkFit = MixedTripletStepTask.copy()
+_MixedTripletStepTask_trackingMkFit.add(mixedTripletStepTrackCandidatesMkFitSeeds, mixedTripletStepTrackCandidatesMkFit, mixedTripletStepTrackCandidatesMkFitConfig)
+trackingMkFitMixedTripletStep.toReplaceWith(MixedTripletStepTask, _MixedTripletStepTask_trackingMkFit)
+
_MixedTripletStepTask_LowPU = MixedTripletStepTask.copyAndExclude([chargeCut2069Clusters, mixedTripletStepClassifier1])
_MixedTripletStepTask_LowPU.replace(mixedTripletStepClassifier2, mixedTripletStepSelector)
trackingLowPU.toReplaceWith(MixedTripletStepTask, _MixedTripletStepTask_LowPU)
diff --git a/RecoTracker/IterativeTracking/python/PixelLessStep_cff.py b/RecoTracker/IterativeTracking/python/PixelLessStep_cff.py
index de8694abee81b..5e6d115c97b21 100644
--- a/RecoTracker/IterativeTracking/python/PixelLessStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/PixelLessStep_cff.py
@@ -284,6 +284,30 @@
TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('pixelLessStepTrajectoryBuilder')),
TrajectoryCleaner = 'pixelLessStepTrajectoryCleanerBySharedHits'
)
+
+from Configuration.ProcessModifiers.trackingMkFitPixelLessStep_cff import trackingMkFitPixelLessStep
+import RecoTracker.MkFit.mkFitSeedConverter_cfi as mkFitSeedConverter_cfi
+import RecoTracker.MkFit.mkFitIterationConfigESProducer_cfi as mkFitIterationConfigESProducer_cfi
+import RecoTracker.MkFit.mkFitProducer_cfi as mkFitProducer_cfi
+import RecoTracker.MkFit.mkFitOutputConverter_cfi as mkFitOutputConverter_cfi
+pixelLessStepTrackCandidatesMkFitSeeds = mkFitSeedConverter_cfi.mkFitSeedConverter.clone(
+ seeds = 'pixelLessStepSeeds',
+)
+pixelLessStepTrackCandidatesMkFitConfig = mkFitIterationConfigESProducer_cfi.mkFitIterationConfigESProducer.clone(
+ ComponentName = 'pixelLessStepTrackCandidatesMkFitConfig',
+ config = 'RecoTracker/MkFit/data/mkfit-phase1-pixelLessStep.json',
+)
+pixelLessStepTrackCandidatesMkFit = mkFitProducer_cfi.mkFitProducer.clone(
+ seeds = 'pixelLessStepTrackCandidatesMkFitSeeds',
+ config = ('', 'pixelLessStepTrackCandidatesMkFitConfig'),
+ clustersToSkip = 'pixelLessStepClusters',
+)
+trackingMkFitPixelLessStep.toReplaceWith(pixelLessStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
+ seeds = 'pixelLessStepSeeds',
+ mkFitSeeds = 'pixelLessStepTrackCandidatesMkFitSeeds',
+ tracks = 'pixelLessStepTrackCandidatesMkFit',
+))
+
import FastSimulation.Tracking.TrackCandidateProducer_cfi
fastSim.toReplaceWith(pixelLessStepTrackCandidates,
FastSimulation.Tracking.TrackCandidateProducer_cfi.trackCandidateProducer.clone(
@@ -465,6 +489,10 @@
pixelLessStep)
PixelLessStep = cms.Sequence(PixelLessStepTask)
+_PixelLessStepTask_trackingMkFit = PixelLessStepTask.copy()
+_PixelLessStepTask_trackingMkFit.add(pixelLessStepTrackCandidatesMkFitSeeds, pixelLessStepTrackCandidatesMkFit, pixelLessStepTrackCandidatesMkFit)
+trackingMkFitPixelLessStep.toReplaceWith(PixelLessStepTask, _PixelLessStepTask_trackingMkFit)
+
_PixelLessStepTask_LowPU = PixelLessStepTask.copyAndExclude([pixelLessStepHitTriplets, pixelLessStepClassifier1, pixelLessStepClassifier2])
_PixelLessStepTask_LowPU.replace(pixelLessStep, pixelLessStepSelector)
trackingLowPU.toReplaceWith(PixelLessStepTask, _PixelLessStepTask_LowPU)
diff --git a/RecoTracker/IterativeTracking/python/TobTecStep_cff.py b/RecoTracker/IterativeTracking/python/TobTecStep_cff.py
index af527c2b64769..ec17f33d6f31c 100644
--- a/RecoTracker/IterativeTracking/python/TobTecStep_cff.py
+++ b/RecoTracker/IterativeTracking/python/TobTecStep_cff.py
@@ -268,6 +268,30 @@
cleanTrajectoryAfterInOut = True,
TrajectoryCleaner = 'tobTecStepTrajectoryCleanerBySharedHits'
)
+
+from Configuration.ProcessModifiers.trackingMkFitTobTecStep_cff import trackingMkFitTobTecStep
+import RecoTracker.MkFit.mkFitSeedConverter_cfi as mkFitSeedConverter_cfi
+import RecoTracker.MkFit.mkFitIterationConfigESProducer_cfi as mkFitIterationConfigESProducer_cfi
+import RecoTracker.MkFit.mkFitProducer_cfi as mkFitProducer_cfi
+import RecoTracker.MkFit.mkFitOutputConverter_cfi as mkFitOutputConverter_cfi
+tobTecStepTrackCandidatesMkFitSeeds = mkFitSeedConverter_cfi.mkFitSeedConverter.clone(
+ seeds = 'tobTecStepSeeds',
+)
+tobTecStepTrackCandidatesMkFitConfig = mkFitIterationConfigESProducer_cfi.mkFitIterationConfigESProducer.clone(
+ ComponentName = 'tobTecStepTrackCandidatesMkFitConfig',
+ config = 'RecoTracker/MkFit/data/mkfit-phase1-tobTecStep.json',
+)
+tobTecStepTrackCandidatesMkFit = mkFitProducer_cfi.mkFitProducer.clone(
+ seeds = 'tobTecStepTrackCandidatesMkFitSeeds',
+ config = ('', 'tobTecStepTrackCandidatesMkFitConfig'),
+ clustersToSkip = 'tobTecStepClusters',
+)
+trackingMkFitTobTecStep.toReplaceWith(tobTecStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
+ seeds = 'tobTecStepSeeds',
+ mkFitSeeds = 'tobTecStepTrackCandidatesMkFitSeeds',
+ tracks = 'tobTecStepTrackCandidatesMkFit',
+))
+
import FastSimulation.Tracking.TrackCandidateProducer_cfi
fastSim.toReplaceWith(tobTecStepTrackCandidates,
FastSimulation.Tracking.TrackCandidateProducer_cfi.trackCandidateProducer.clone(
@@ -449,6 +473,9 @@
tobTecStep)
TobTecStep = cms.Sequence(TobTecStepTask)
+_TobTecStepTask_trackingMkFit = TobTecStepTask.copy()
+_TobTecStepTask_trackingMkFit.add(tobTecStepTrackCandidatesMkFitSeeds, tobTecStepTrackCandidatesMkFit, tobTecStepTrackCandidatesMkFitConfig)
+trackingMkFitTobTecStep.toReplaceWith(TobTecStepTask, _TobTecStepTask_trackingMkFit)
### Following are specific for LowPU, they're collected here to
### not to interfere too much with the default configuration
diff --git a/RecoTracker/MkFit/BuildFile.xml b/RecoTracker/MkFit/BuildFile.xml
index 8d936740b9bf6..177da9dffc6df 100644
--- a/RecoTracker/MkFit/BuildFile.xml
+++ b/RecoTracker/MkFit/BuildFile.xml
@@ -1,5 +1,8 @@
+
+
+
diff --git a/RecoTracker/MkFit/README.md b/RecoTracker/MkFit/README.md
index 6808838744399..3bd44016f71ef 100644
--- a/RecoTracker/MkFit/README.md
+++ b/RecoTracker/MkFit/README.md
@@ -30,4 +30,50 @@ tracker detector. Support for the phase2 tracker will be added later.
These can be used with e.g.
```bash
$ runTheMatrix.py -l --apply 2 --command "--procModifiers trackingMkFit --customise RecoTracker/MkFit/customizeInitialStepToMkFit.customizeInitialStepOnly"
-```
\ No newline at end of file
+```
+
+## Description of configuration parameters
+
+### Iteration configuration [class IterationConfig]
+
+* *m_track_algorithm:* CMSSW track algorithm (used internally for reporting and consistency checks)
+* *m_requires_seed_hit_sorting:* do hits on seed tracks need to be sorted (required for seeds that include strip layers)
+* *m_require_quality_filter:* is additional post-processing required for result tracks
+* *m_params:* IterationParams structure for this iteration
+* *m_layer_configs:* std::vector of per-layer parameters
+
+### Iteration parameters [class IterationParams]
+
+* *nlayers_per_seed:* internal mkFit parameter used for standalone validation
+* *maxCandsPerSeed:* maximum number of concurrent track candidates per given seed
+* *maxHolesPerCand:* maximum number of allowed holes on a candidate
+* *maxConsecHoles:* maximum number of allowed consecutive holes on a candidate
+* *chi2Cut:* chi2 cut for accepting a new hit
+* *chi2CutOverlap:* chi2 cut for accepting an overlap hit
+* *pTCutOverlap:* pT cut below which the overlap hits are not picked up
+
+#### Seed cleaning params (based on elliptical dR-dz cut)
+
+* *c_ptthr_hpt:* pT threshold used to tighten seed cleaning requirements
+* *c_drmax_bh:* dR cut used for seed tracks with std::fabs(eta)<0.9 and pT > c_ptthr_hpt
+* *c_dzmax_bh:* dz cut used for seed tracks with std::fabs(eta)<0.9 and pT > c_ptthr_hpt
+* *c_drmax_eh:* dR cut used for seed tracks with std::fabs(eta)>0.9 and pT > c_ptthr_hpt
+* *c_dzmax_eh:* dz cut used for seed tracks with std::fabs(eta)>0.9 and pT > c_ptthr_hpt
+* *c_drmax_bl:* dR cut used for seed tracks with std::fabs(eta)<0.9 and pT < c_ptthr_hpt
+* *c_dzmax_bl:* dz cut used for seed tracks with std::fabs(eta)<0.9 and pT < c_ptthr_hpt
+* *c_drmax_el:* dR cut used for seed tracks with std::fabs(eta)>0.9 and pT < c_ptthr_hpt
+* *c_dzmax_el:* dz cut used for seed tracks with std::fabs(eta)>0.9 and pT < c_ptthr_hpt
+
+#### Duplicate cleaning parameters
+
+* *minHitsQF:* min number of hits on track candidate to apply duplicate cleaning based on fraction of shared hits
+* *fracSharedHits:* min fraction of shared hits to determine duplicate track candidate
+
+### Per-layer parameters [class IterationLayerConfig]
+
+* *m_select_min_dphi, m_select_max_dphi:* geometry-driven dphi baseline selection window cut
+* *m_select_min_dq, m_select_max_dq:* geometry-driven dr (endcap) / dz (barrel) baseline selection window cut
+* *c_dp_[012]:* dphi selection window cut (= [0]*1/pT + [1]*std::fabs(theta-pi/2) + [2])
+* *c_dp_sf:* additional scaling factor for dphi cut
+* *c_dq_[012]:* dr (endcap) / dz (barrel) selection window cut (= [0]*1/pT + [1]*std::fabs(theta-pi/2) + [2])
+* *c_dq_sf:* additional scaling factor for dr (endcap) / dz (barrel) cut
diff --git a/RecoTracker/MkFit/interface/MkFitClusterIndexToHit.h b/RecoTracker/MkFit/interface/MkFitClusterIndexToHit.h
new file mode 100644
index 0000000000000..7c8d9db2bb3cf
--- /dev/null
+++ b/RecoTracker/MkFit/interface/MkFitClusterIndexToHit.h
@@ -0,0 +1,20 @@
+#ifndef RecoTracker_MkFit_MkFitClusterIndexToHit_h
+#define RecoTracker_MkFit_MkFitClusterIndexToHit_h
+
+#include
+
+class TrackingRecHit;
+
+class MkFitClusterIndexToHit {
+public:
+ MkFitClusterIndexToHit() = default;
+
+ std::vector& hits() { return hits_; }
+ std::vector const& hits() const { return hits_; }
+
+private:
+ // Indexed by cluster index
+ std::vector hits_;
+};
+
+#endif
diff --git a/RecoTracker/MkFit/interface/MkFitEventOfHits.h b/RecoTracker/MkFit/interface/MkFitEventOfHits.h
new file mode 100644
index 0000000000000..cb5ea6358da1b
--- /dev/null
+++ b/RecoTracker/MkFit/interface/MkFitEventOfHits.h
@@ -0,0 +1,36 @@
+#ifndef RecoTracker_MkFit_MkFitEventOfHits_h
+#define RecoTracker_MkFit_MkFitEventOfHits_h
+
+#include
+
+namespace mkfit {
+ class EventOfHits;
+}
+
+/**
+ * The mkfit::EventOfHits is a container of mkfit::LayerOfHits
+ * structures that mkFit uses to group (and index) hits. Having them
+ * grouped together allows mkFit to pass them easily around top-level
+ * steering functions.
+ *
+ * It has some conceptual similarities to MeasurementTrackerEvent.
+ */
+class MkFitEventOfHits {
+public:
+ MkFitEventOfHits();
+ MkFitEventOfHits(std::unique_ptr);
+ ~MkFitEventOfHits();
+
+ MkFitEventOfHits(MkFitEventOfHits const&) = delete;
+ MkFitEventOfHits& operator=(MkFitEventOfHits const&) = delete;
+ MkFitEventOfHits(MkFitEventOfHits&&);
+ MkFitEventOfHits& operator=(MkFitEventOfHits&&);
+
+ mkfit::EventOfHits& get() { return *eventOfHits_; }
+ mkfit::EventOfHits const& get() const { return *eventOfHits_; }
+
+private:
+ std::unique_ptr eventOfHits_;
+};
+
+#endif
diff --git a/RecoTracker/MkFit/interface/MkFitGeometry.h b/RecoTracker/MkFit/interface/MkFitGeometry.h
new file mode 100644
index 0000000000000..1fe5b6447580e
--- /dev/null
+++ b/RecoTracker/MkFit/interface/MkFitGeometry.h
@@ -0,0 +1,49 @@
+#ifndef RecoTracker_MkFit_MkFitGeometry_h
+#define RecoTracker_MkFit_MkFitGeometry_h
+
+#include "DataFormats/DetId/interface/DetId.h"
+
+#include
+#include
+#include
+
+namespace mkfit {
+ class LayerNumberConverter;
+ class TrackerInfo;
+ class IterationsInfo;
+} // namespace mkfit
+
+class DetLayer;
+class GeometricSearchTracker;
+class TrackerGeometry;
+class TrackerTopology;
+
+/**
+ * Collection of geometry-related objects for mkFit
+ */
+class MkFitGeometry {
+public:
+ explicit MkFitGeometry(const TrackerGeometry& geom,
+ const GeometricSearchTracker& tracker,
+ const TrackerTopology& ttopo,
+ std::unique_ptr trackerInfo,
+ std::unique_ptr iterationsInfo);
+ ~MkFitGeometry();
+
+ int mkFitLayerNumber(DetId detId) const;
+ mkfit::LayerNumberConverter const& layerNumberConverter() const { return *lnc_; }
+ mkfit::TrackerInfo const& trackerInfo() const { return *trackerInfo_; }
+ mkfit::IterationsInfo const& iterationsInfo() const { return *iterationsInfo_; }
+ const std::vector& detLayers() const { return dets_; }
+ unsigned int uniqueIdInLayer(int layer, unsigned int detId) const { return detIdToShortId_.at(layer).at(detId); }
+
+private:
+ const TrackerTopology* ttopo_;
+ std::unique_ptr lnc_; // for pimpl pattern
+ std::unique_ptr trackerInfo_;
+ std::unique_ptr iterationsInfo_; // only temporarily here, to be moved into proper place later
+ std::vector dets_;
+ std::vector> detIdToShortId_;
+};
+
+#endif
diff --git a/RecoTracker/MkFit/interface/MkFitHitIndexMap.h b/RecoTracker/MkFit/interface/MkFitHitIndexMap.h
deleted file mode 100644
index c7b6eea50263a..0000000000000
--- a/RecoTracker/MkFit/interface/MkFitHitIndexMap.h
+++ /dev/null
@@ -1,86 +0,0 @@
-#ifndef RecoTracker_MkFit_MkFitHitIndexMap_h
-#define RecoTracker_MkFit_MkFitHitIndexMap_h
-
-#include "DataFormats/Provenance/interface/ProductID.h"
-
-#include
-
-class TrackingRecHit;
-
-/**
- * This class provides mappings
- * - from CMSSW(ProductID, cluster index) to mkFit(layer index, hit index)
- * - from mkFit(layer index, hit index) to pointer to CMSSW hit
- */
-class MkFitHitIndexMap {
-public:
- // This class holds the index and layer of a hit in the hit data
- // structure passed to mkFit
- class MkFitHit {
- public:
- MkFitHit() = default;
- explicit MkFitHit(int i, int l) : index_{i}, layer_{l} {}
-
- int index() const { return index_; }
- int layer() const { return layer_; }
-
- private:
- int index_ = -1;
- int layer_ = -1;
- };
-
- MkFitHitIndexMap() = default;
-
- /**
- * Can be used to preallocate the internal vectors for CMSSW->mkFit mapping
- */
- void resizeByClusterIndex(edm::ProductID id, size_t clusterIndex);
-
- /**
- * Can be used to preallocate the internal vectors for mkFit->CMSSW mapping
- *
- * \param layer Layer index (in mkFit convention)
- * \param additionalSize Number of additional elements to make space for
- */
- void increaseLayerSize(int layer, size_t additionalSize);
-
- /**
- * Inserts a new hit in the mapping
- *
- * \param id ProductID of the cluster collection
- * \param clusterIndex Index of the cluster in the cluster collection
- * \param hit Index and layer of the hit in the mkFit hit data structure
- * \param hitPtr Pointer to the TrackingRecHit
- */
- void insert(edm::ProductID id, size_t clusterIndex, MkFitHit hit, const TrackingRecHit* hitPtr);
-
- /// Get mkFit hit index and layer
- const MkFitHit& mkFitHit(edm::ProductID id, size_t clusterIndex) const;
-
- /// Get CMSSW hit pointer
- const TrackingRecHit* hitPtr(MkFitHit hit) const { return mkFitToCMSSW_.at(hit.layer()).at(hit.index()).ptr; }
-
- /// Get CMSSW cluster index (currently used only for debugging)
- size_t clusterIndex(MkFitHit hit) const { return mkFitToCMSSW_.at(hit.layer()).at(hit.index()).clusterIndex; }
-
-private:
- // Helper struct to map (edm::ProductID, cluster index) to MkFitHit
- struct ClusterToMkFitHit {
- explicit ClusterToMkFitHit(edm::ProductID id) : productID(id) {}
- edm::ProductID productID;
- std::vector mkFitHits; // indexed by cluster index
- };
-
- // Helper struct to map MkFitHit to (TrackingRecHit *, cluster index)
- struct CMSSWHit {
- CMSSWHit() = default;
- explicit CMSSWHit(const TrackingRecHit* p, size_t i) : ptr{p}, clusterIndex{i} {}
- const TrackingRecHit* ptr = nullptr;
- size_t clusterIndex = 0;
- };
-
- std::vector cmsswToMkFit_; // mapping from CMSSW(ProductID, cluster index) -> mkFit(index, layer)
- std::vector > mkFitToCMSSW_; // reverse mapping, mkFit(layer, index) -> CMSSW hit
-};
-
-#endif
diff --git a/RecoTracker/MkFit/interface/MkFitHitWrapper.h b/RecoTracker/MkFit/interface/MkFitHitWrapper.h
new file mode 100644
index 0000000000000..c45f634f9925f
--- /dev/null
+++ b/RecoTracker/MkFit/interface/MkFitHitWrapper.h
@@ -0,0 +1,36 @@
+#ifndef RecoTracker_MkFit_MkFitHitWrapper_h
+#define RecoTracker_MkFit_MkFitHitWrapper_h
+
+#include "DataFormats/Provenance/interface/ProductID.h"
+
+#include
+#include
+
+namespace mkfit {
+ class Hit;
+ using HitVec = std::vector;
+} // namespace mkfit
+
+class MkFitHitWrapper {
+public:
+ MkFitHitWrapper();
+ ~MkFitHitWrapper();
+
+ MkFitHitWrapper(MkFitHitWrapper const&) = delete;
+ MkFitHitWrapper& operator=(MkFitHitWrapper const&) = delete;
+ MkFitHitWrapper(MkFitHitWrapper&&);
+ MkFitHitWrapper& operator=(MkFitHitWrapper&&);
+
+ void setClustersID(edm::ProductID id) { clustersID_ = id; }
+ edm::ProductID clustersID() const { return clustersID_; }
+
+ mkfit::HitVec& hits() { return hits_; }
+ mkfit::HitVec const& hits() const { return hits_; }
+
+private:
+ // Vector is indexed by the cluster index
+ mkfit::HitVec hits_;
+ edm::ProductID clustersID_;
+};
+
+#endif
diff --git a/RecoTracker/MkFit/interface/MkFitInputWrapper.h b/RecoTracker/MkFit/interface/MkFitInputWrapper.h
deleted file mode 100644
index 2edc855b5c643..0000000000000
--- a/RecoTracker/MkFit/interface/MkFitInputWrapper.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef RecoTracker_MkFit_MkFitInputWrapper_h
-#define RecoTracker_MkFit_MkFitInputWrapper_h
-
-#include "RecoTracker/MkFit/interface/MkFitHitIndexMap.h"
-
-#include
-#include
-
-namespace mkfit {
- class Hit;
- class Track;
- class LayerNumberConverter;
- using HitVec = std::vector;
- using TrackVec = std::vector