diff --git a/Configuration/ProcessModifiers/python/hltTrackingMkFitInitialStep_cff.py b/Configuration/ProcessModifiers/python/hltTrackingMkFitInitialStep_cff.py new file mode 100644 index 0000000000000..3ab5b76b07738 --- /dev/null +++ b/Configuration/ProcessModifiers/python/hltTrackingMkFitInitialStep_cff.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +# This modifier sets replaces the default pattern recognition with mkFit for initialStep +hltTrackingMkFitInitialStep = cms.Modifier() diff --git a/Configuration/PyReleaseValidation/README.md b/Configuration/PyReleaseValidation/README.md index 2cecf09dcc40a..a8822e2bdbf34 100644 --- a/Configuration/PyReleaseValidation/README.md +++ b/Configuration/PyReleaseValidation/README.md @@ -65,6 +65,7 @@ The offsets currently in use are: * 0.7561 HLT phase-2 timing menu Alpaka, trimmed tracking * 0.7562 HLT phase-2 timing menu Alpaka, trimmed tracking, single tracking iteration variant * 0.757: HLT phase-2 timing menu Alpaka, single tracking iteration, LST seeding + CKF building variant +* 0.7571: HLT phase-2 timing menu Alpaka, single tracking iteration, LST seeding + mkFit building variant * 0.758 HLT phase-2 timing menu ticl_barrel variant * 0.759: HLT phase-2 timing menu, with NANO:@Phase2HLT * 0.76: HLT phase-2 reduced menu, with DIGI step diff --git a/Configuration/PyReleaseValidation/python/relval_Run4.py b/Configuration/PyReleaseValidation/python/relval_Run4.py index 7eba060d1f6c2..723cee47e175c 100644 --- a/Configuration/PyReleaseValidation/python/relval_Run4.py +++ b/Configuration/PyReleaseValidation/python/relval_Run4.py @@ -79,6 +79,7 @@ numWFIB.extend([prefixDet+34.7561])# HLTTiming75e33, alpaka,phase2_hlt_vertexTrimming numWFIB.extend([prefixDet+34.7562])# HLTTiming75e33, alpaka,phase2_hlt_vertexTrimming,singleIterPatatrack numWFIB.extend([prefixDet+34.757]) # HLTTiming75e33, alpaka,singleIterPatatrack,trackingLST,seedingLST +numWFIB.extend([prefixDet+34.7571]) # HLTTiming75e33, alpaka,singleIterPatatrack,trackingLST,seedingLST,buildingMkFit numWFIB.extend([prefixDet+34.758]) # HLTTiming75e33, ticl_barrel numWFIB.extend([prefixDet+34.759]) # HLTTiming75e33 + NANO numWFIB.extend([prefixDet+34.77]) # NGTScouting diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py index 8d3e8f0dd5811..c9b5ca8da1484 100644 --- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py +++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py @@ -2023,6 +2023,19 @@ def condition(self, fragment, stepList, key, hasHarvest): '-s':'HARVESTING:@hltValidation' } +upgradeWFs['HLTTiming75e33AlpakaSingleIterLSTSeedingMkFitBuilding'] = deepcopy(upgradeWFs['HLTTiming75e33']) +upgradeWFs['HLTTiming75e33AlpakaSingleIterLSTSeedingMkFitBuilding'].suffix = '_HLT75e33TimingAlpakaSingleIterLSTSeedingMkFitBuilding' +upgradeWFs['HLTTiming75e33AlpakaSingleIterLSTSeedingMkFitBuilding'].offset = 0.7571 +upgradeWFs['HLTTiming75e33AlpakaSingleIterLSTSeedingMkFitBuilding'].step2 = { + '-s':'DIGI:pdigi_valid,L1TrackTrigger,L1,L1P2GT,DIGI2RAW,HLT:75e33_timing,VALIDATION:@hltValidation', + '--procModifiers': 'alpaka,singleIterPatatrack,trackingLST,seedingLST,trackingMkFitCommon,hltTrackingMkFitInitialStep', + '--datatier':'GEN-SIM-DIGI-RAW,DQMIO', + '--eventcontent':'FEVTDEBUGHLT,DQMIO' +} +upgradeWFs['HLTTiming75e33AlpakaSingleIterLSTSeedingMkFitBuilding'].step3 = { + '-s':'HARVESTING:@hltValidation' +} + upgradeWFs['HLTTiming75e33TiclBarrel'] = deepcopy(upgradeWFs['HLTTiming75e33']) upgradeWFs['HLTTiming75e33TiclBarrel'].suffix = '_HLT75e33TimingTiclBarrel' upgradeWFs['HLTTiming75e33TiclBarrel'].offset = 0.758 diff --git a/Configuration/PyReleaseValidation/scripts/runTheMatrix.py b/Configuration/PyReleaseValidation/scripts/runTheMatrix.py index a9a323a82be65..6410fa5f9dcac 100755 --- a/Configuration/PyReleaseValidation/scripts/runTheMatrix.py +++ b/Configuration/PyReleaseValidation/scripts/runTheMatrix.py @@ -166,9 +166,10 @@ def runSelected(opt): 29634.756, # HLT phase-2 timing menu trimmed tracking 29634.7561, # HLT phase-2 timing menu Alpaka, trimmed tracking 29634.7562, # HLT phase-2 timing menu Alpaka, trimmed tracking, single tracking iteration variant - 29634.757, # HLT phase-2 timing menu, with NANO:@Phase2HLT + 29634.757, # HLT phase-2 timing menu Alpaka, single tracking iteration, LST seeding + CKF building variant + 29634.7571, # HLT phase-2 timing menu Alpaka, single tracking iteration, LST seeding + mkFit building variant 29634.758, # HLT phase-2 timing menu ticl_barrel variant - 29634.759, # HLT phase-2 timing menu Alpaka, single tracking iteration, LST seeding + CKF building variant + 29634.759, # HLT phase-2 timing menu, with NANO:@Phase2HLT 29634.77, # HLT phase-2 NGT Scouting menu 29634.771, # HLT phase-2 NGT Scouting menu, Alpaka, TICL-v5, TICL-Barrel, CA Extension 29634.772, # HLT phase-2 NGT Scouting menu, with NANO:@NGTScouting diff --git a/HLTrigger/Configuration/python/HLT_75e33/eventsetup/hltESPMkFit_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/eventsetup/hltESPMkFit_cfi.py new file mode 100644 index 0000000000000..9249c5ee1b778 --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/eventsetup/hltESPMkFit_cfi.py @@ -0,0 +1,21 @@ +import FWCore.ParameterSet.Config as cms + +def _addProcessMkFitGeometry(process): + process.mkFitGeometryESProducer = cms.ESProducer("MkFitGeometryESProducer", + appendToDataLabel = cms.string('') + ) + +from Configuration.ProcessModifiers.trackingMkFitCommon_cff import trackingMkFitCommon +modifyConfigurationForTrackingMkFitGeometryMkfit_ = trackingMkFitCommon.makeProcessModifier(_addProcessMkFitGeometry) + +def _addProcesshltInitialStepMkFitConfig(process): + process.hltInitialStepTrackCandidatesMkFitConfig = cms.ESProducer("MkFitIterationConfigESProducer", + ComponentName = cms.string('hltInitialStepTrackCandidatesMkFitConfig'), + appendToDataLabel = cms.string(''), + config = cms.FileInPath('RecoTracker/MkFit/data/mkfit-phase2-initialStep.json'), + maxClusterSize = cms.uint32(8), + minPt = cms.double(0.8) + ) + +from Configuration.ProcessModifiers.hltTrackingMkFitInitialStep_cff import hltTrackingMkFitInitialStep +modifyConfigurationForTrackingMkFithltInitialStepMkFitConfig_ = hltTrackingMkFitInitialStep.makeProcessModifier(_addProcesshltInitialStepMkFitConfig) diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepMkFitSeeds_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepMkFitSeeds_cfi.py new file mode 100644 index 0000000000000..2336eca4bf7ac --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepMkFitSeeds_cfi.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +# MkFitSeedConverter options +hltInitialStepMkFitSeeds = cms.EDProducer("MkFitSeedConverter", + maxNSeeds = cms.uint32(500000), + mightGet = cms.optional.untracked.vstring, + seeds = cms.InputTag("hltInitialStepSeeds"), + ttrhBuilder = cms.ESInputTag("","WithTrackAngle") +) + +from Configuration.ProcessModifiers.trackingLST_cff import trackingLST +from Configuration.ProcessModifiers.seedingLST_cff import seedingLST +from Configuration.ProcessModifiers.hltTrackingMkFitInitialStep_cff import hltTrackingMkFitInitialStep +(trackingLST & seedingLST & hltTrackingMkFitInitialStep).toModify(hltInitialStepMkFitSeeds, seeds = "hltInitialStepTrajectorySeedsLST") diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepTrackCandidatesMkFit_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepTrackCandidatesMkFit_cfi.py new file mode 100644 index 0000000000000..74816164a543b --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepTrackCandidatesMkFit_cfi.py @@ -0,0 +1,19 @@ +import FWCore.ParameterSet.Config as cms + +# InitialStepTrackCandidatesMkFit options +hltInitialStepTrackCandidatesMkFit = cms.EDProducer("MkFitProducer", + backwardFitInCMSSW = cms.bool(False), + buildingRoutine = cms.string('cloneEngine'), + clustersToSkip = cms.InputTag(""), + config = cms.ESInputTag("","hltInitialStepTrackCandidatesMkFitConfig"), + eventOfHits = cms.InputTag("hltMkFitEventOfHits"), + limitConcurrency = cms.untracked.bool(False), + mightGet = cms.optional.untracked.vstring, + minGoodStripCharge = cms.PSet(), + mkFitSilent = cms.untracked.bool(True), + pixelHits = cms.InputTag("hltMkFitSiPixelHits"), + removeDuplicates = cms.bool(True), + seedCleaning = cms.bool(True), + seeds = cms.InputTag("hltInitialStepMkFitSeeds"), + stripHits = cms.InputTag("hltMkFitSiPhase2Hits") +) diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepTrackCandidates_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepTrackCandidates_cfi.py index 93957d71c5571..f1f58c4aee220 100644 --- a/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepTrackCandidates_cfi.py +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepTrackCandidates_cfi.py @@ -44,11 +44,42 @@ ) ) + +_hltInitialStepTrackCandidatesMkFit = cms.EDProducer('MkFitOutputConverter', + batchSize = cms.int32(16), + candMVASel = cms.bool(False), + candCutSel = cms.bool(True), + candMinNHitsCut = cms.int32(3), + candMinPtCut = cms.double(0.8), + candWP = cms.double(0), + doErrorRescale = cms.bool(True), + mightGet = cms.optional.untracked.vstring, + mkFitEventOfHits = cms.InputTag("hltMkFitEventOfHits"), + mkFitPixelHits = cms.InputTag("hltMkFitSiPixelHits"), + mkFitSeeds = cms.InputTag("hltInitialStepMkFitSeeds"), + mkFitStripHits = cms.InputTag("hltMkFitSiPhase2Hits"), + propagatorAlong = cms.ESInputTag("","PropagatorWithMaterial"), + propagatorOpposite = cms.ESInputTag("","PropagatorWithMaterialOpposite"), + qualityMaxInvPt = cms.double(100), + qualityMaxPosErr = cms.double(100), + qualityMaxR = cms.double(120), + qualityMaxZ = cms.double(280), + qualityMinTheta = cms.double(0.01), + qualitySignPt = cms.bool(True), + seeds = cms.InputTag("hltInitialStepSeeds"), + tfDnnLabel = cms.string('trackSelectionTf'), + tracks = cms.InputTag("hltInitialStepTrackCandidatesMkFit"), + ttrhBuilder = cms.ESInputTag("","WithTrackAngle") +) + +_hltInitialStepTrackCandidatesMkFitLSTSeeds = _hltInitialStepTrackCandidatesMkFit.clone(seeds = "hltInitialStepTrajectorySeedsLST") + from Configuration.ProcessModifiers.singleIterPatatrack_cff import singleIterPatatrack from Configuration.ProcessModifiers.trackingLST_cff import trackingLST from Configuration.ProcessModifiers.seedingLST_cff import seedingLST +from Configuration.ProcessModifiers.hltTrackingMkFitInitialStep_cff import hltTrackingMkFitInitialStep # All useful combinations added to make the code work as expected and for clarity -(~singleIterPatatrack & trackingLST & ~seedingLST).toReplaceWith(hltInitialStepTrackCandidates, _hltInitialStepTrackCandidatesLST) -(~singleIterPatatrack & trackingLST & seedingLST).toReplaceWith(hltInitialStepTrackCandidates, _hltInitialStepTrackCandidatesLST) -(singleIterPatatrack & trackingLST & ~seedingLST).toReplaceWith(hltInitialStepTrackCandidates, _hltInitialStepTrackCandidatesLST) +(~(singleIterPatatrack & seedingLST) & trackingLST).toReplaceWith(hltInitialStepTrackCandidates, _hltInitialStepTrackCandidatesLST) (singleIterPatatrack & trackingLST & seedingLST).toModify(hltInitialStepTrackCandidates, src = "hltInitialStepTrajectorySeedsLST") # All LST seeds +(~seedingLST & ~trackingLST & hltTrackingMkFitInitialStep).toReplaceWith(hltInitialStepTrackCandidates, _hltInitialStepTrackCandidatesMkFit) +(singleIterPatatrack & seedingLST & trackingLST & hltTrackingMkFitInitialStep).toReplaceWith(hltInitialStepTrackCandidates, _hltInitialStepTrackCandidatesMkFitLSTSeeds) diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltMkFitEventOfHits_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltMkFitEventOfHits_cfi.py new file mode 100644 index 0000000000000..f00c3330c8307 --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltMkFitEventOfHits_cfi.py @@ -0,0 +1,11 @@ +import FWCore.ParameterSet.Config as cms + +# MkFitEventOfHits options +hltMkFitEventOfHits = cms.EDProducer("MkFitEventOfHitsProducer", + beamSpot = cms.InputTag("offlineBeamSpot"), + mightGet = cms.optional.untracked.vstring, + pixelHits = cms.InputTag("hltMkFitSiPixelHits"), + stripHits = cms.InputTag("hltMkFitSiPhase2Hits"), + usePixelQualityDB = cms.bool(True), + useStripStripQualityDB = cms.bool(False) +) diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltMkFitSiPhase2Hits_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltMkFitSiPhase2Hits_cfi.py new file mode 100644 index 0000000000000..74fe7825881de --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltMkFitSiPhase2Hits_cfi.py @@ -0,0 +1,9 @@ +import FWCore.ParameterSet.Config as cms + +# MkFitSiPhase2Hits options +hltMkFitSiPhase2Hits = cms.EDProducer("MkFitPhase2HitConverter", + mightGet = cms.optional.untracked.vstring, + hits = cms.InputTag("hltSiPhase2RecHits"), + clusters = cms.InputTag("hltSiPhase2Clusters"), + ttrhBuilder = cms.ESInputTag("","WithTrackAngle") +) diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltMkFitSiPixelHits_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltMkFitSiPixelHits_cfi.py new file mode 100644 index 0000000000000..09d608059115f --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltMkFitSiPixelHits_cfi.py @@ -0,0 +1,9 @@ +import FWCore.ParameterSet.Config as cms + +# MkFitSiPixelHits options +hltMkFitSiPixelHits = cms.EDProducer("MkFitSiPixelHitConverter", + hits = cms.InputTag("hltSiPixelRecHits"), + clusters = cms.InputTag("hltSiPixelClusters"), + mightGet = cms.optional.untracked.vstring, + ttrhBuilder = cms.ESInputTag("","WithTrackAngle") +) diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltMkFitSiStripHits_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltMkFitSiStripHits_cfi.py new file mode 100644 index 0000000000000..aa76fb895d618 --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltMkFitSiStripHits_cfi.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + +# MkFitSiStripHits options +hltMkFitSiStripHits = cms.EDProducer("MkFitSiStripHitConverter", + mightGet = cms.optional.untracked.vstring, + minGoodStripCharge = cms.PSet( + refToPSet_ = cms.string('SiStripClusterChargeCutLoose') + ), + rphiHits = cms.InputTag("siStripMatchedRecHits","rphiRecHit"), + stereoHits = cms.InputTag("siStripMatchedRecHits","stereoRecHit"), + ttrhBuilder = cms.ESInputTag("","WithTrackAngle") +) diff --git a/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTInitialStepSequence_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTInitialStepSequence_cfi.py index f08b245561e9a..9154a20050b3a 100644 --- a/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTInitialStepSequence_cfi.py +++ b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTInitialStepSequence_cfi.py @@ -79,3 +79,37 @@ from Configuration.ProcessModifiers.ngtScouting_cff import ngtScouting ngtScouting.toReplaceWith(HLTInitialStepSequence,_HLTInitialStepSequenceNGTScouting) + +from ..sequences.HLTMkFitInputSequence_cfi import * +from ..modules.hltInitialStepMkFitSeeds_cfi import * +from ..modules.hltInitialStepTrackCandidatesMkFit_cfi import * +_HLTInitialStepSequenceMkFitTracking = cms.Sequence( + hltInitialStepSeeds + +hltSiPhase2RecHits + +HLTMkFitInputSequence + +hltInitialStepMkFitSeeds + +hltInitialStepTrackCandidatesMkFit + +hltInitialStepTrackCandidates + +hltInitialStepTracks + +hltInitialStepTrackCutClassifier + +hltInitialStepTrackSelectionHighPurity +) + +from Configuration.ProcessModifiers.hltTrackingMkFitInitialStep_cff import hltTrackingMkFitInitialStep +(~seedingLST & ~trackingLST & hltTrackingMkFitInitialStep).toReplaceWith(HLTInitialStepSequence,_HLTInitialStepSequenceMkFitTracking) + +_HLTInitialStepSequenceSingleIterPatatrackLSTSeedingMkFitTracking = cms.Sequence( + hltInitialStepSeeds + +hltInitialStepSeedTracksLST + +hltSiPhase2RecHits # Probably need to move elsewhere in the final setup + +hltInputLST + +hltLST + +hltInitialStepTrajectorySeedsLST + +HLTMkFitInputSequence + +hltInitialStepMkFitSeeds + +hltInitialStepTrackCandidatesMkFit + +hltInitialStepTrackCandidates + +hltInitialStepTracks +) + +(singleIterPatatrack & trackingLST & seedingLST & hltTrackingMkFitInitialStep).toReplaceWith(HLTInitialStepSequence, _HLTInitialStepSequenceSingleIterPatatrackLSTSeedingMkFitTracking) diff --git a/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTMkFitInputSequence_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTMkFitInputSequence_cfi.py new file mode 100644 index 0000000000000..6fac5cb98072a --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTMkFitInputSequence_cfi.py @@ -0,0 +1,12 @@ +import FWCore.ParameterSet.Config as cms + +from ..modules.hltMkFitSiPixelHits_cfi import * +from ..modules.hltMkFitSiStripHits_cfi import * +from ..modules.hltMkFitSiPhase2Hits_cfi import * +from ..modules.hltMkFitEventOfHits_cfi import * + +HLTMkFitInputSequence = cms.Sequence( + hltMkFitSiPixelHits + +hltMkFitSiPhase2Hits + +hltMkFitEventOfHits +) diff --git a/HLTrigger/Configuration/python/HLT_75e33_cff.py b/HLTrigger/Configuration/python/HLT_75e33_cff.py index 08d279c6a2222..ebb155e4eb7e1 100644 --- a/HLTrigger/Configuration/python/HLT_75e33_cff.py +++ b/HLTrigger/Configuration/python/HLT_75e33_cff.py @@ -85,6 +85,7 @@ fragment.load("HLTrigger/Configuration/HLT_75e33/eventsetup/hltESPPixelCPEFastParams_cfi") fragment.load("HLTrigger/Configuration/HLT_75e33/eventsetup/hltPixelTracksCleanerBySharedHits_cfi") fragment.load("HLTrigger/Configuration/HLT_75e33/eventsetup/hltESPTTRHBuilderWithTrackAngle_cfi") +fragment.load("HLTrigger/Configuration/HLT_75e33/eventsetup/hltESPMkFit_cfi") fragment.load("HLTrigger/Configuration/HLT_75e33/eventsetup/hltESPKFFittingSmootherForL2Muon_cfi") fragment.load("HLTrigger/Configuration/HLT_75e33/eventsetup/hltESPKFTrajectoryFitterForL2Muon_cfi") diff --git a/HLTrigger/Configuration/python/HLT_75e33_timing_cff.py b/HLTrigger/Configuration/python/HLT_75e33_timing_cff.py index df8ea7d06307a..26b62c49b32d6 100644 --- a/HLTrigger/Configuration/python/HLT_75e33_timing_cff.py +++ b/HLTrigger/Configuration/python/HLT_75e33_timing_cff.py @@ -90,6 +90,7 @@ fragment.load("HLTrigger/Configuration/HLT_75e33/eventsetup/hltESPPixelCPEFastParams_cfi") fragment.load("HLTrigger/Configuration/HLT_75e33/eventsetup/hltPixelTracksCleanerBySharedHits_cfi") fragment.load("HLTrigger/Configuration/HLT_75e33/eventsetup/hltESPTTRHBuilderWithTrackAngle_cfi") +fragment.load("HLTrigger/Configuration/HLT_75e33/eventsetup/hltESPMkFit_cfi") fragment.load("HLTrigger/Configuration/HLT_75e33/eventsetup/hltESPKFFittingSmootherForL2Muon_cfi") fragment.load("HLTrigger/Configuration/HLT_75e33/eventsetup/hltESPKFTrajectoryFitterForL2Muon_cfi") diff --git a/RecoTracker/MkFit/plugins/MkFitOutputConverter.cc b/RecoTracker/MkFit/plugins/MkFitOutputConverter.cc index cfb01d77d119b..33af84666fe5f 100644 --- a/RecoTracker/MkFit/plugins/MkFitOutputConverter.cc +++ b/RecoTracker/MkFit/plugins/MkFitOutputConverter.cc @@ -141,8 +141,11 @@ class MkFitOutputConverter : public edm::global::EDProducer<> { const bool doErrorRescale_; const int algo_; - const bool algoCandSelection_; - const float algoCandWorkingPoint_; + const bool algoCandCutSelection_; + const float algoCandMinPtCut_; + const int algoCandMinNHitsCut_; + const bool algoCandMVASelection_; + const float algoCandMVAWorkingPoint_; const int bsize_; const edm::EDGetTokenT bsToken_; const edm::EDGetTokenT verticesToken_; @@ -177,13 +180,16 @@ MkFitOutputConverter::MkFitOutputConverter(edm::ParameterSet const& iConfig) doErrorRescale_{iConfig.getParameter("doErrorRescale")}, algo_{reco::TrackBase::algoByName( TString(iConfig.getParameter("seeds").label()).ReplaceAll("Seeds", "").Data())}, - algoCandSelection_{bool(iConfig.getParameter("candMVASel"))}, - algoCandWorkingPoint_{float(iConfig.getParameter("candWP"))}, + algoCandCutSelection_{bool(iConfig.getParameter("candCutSel"))}, + algoCandMinPtCut_{float(iConfig.getParameter("candMinPtCut"))}, + algoCandMinNHitsCut_{iConfig.getParameter("candMinNHitsCut")}, + algoCandMVASelection_{bool(iConfig.getParameter("candMVASel"))}, + algoCandMVAWorkingPoint_{float(iConfig.getParameter("candWP"))}, bsize_{int(iConfig.getParameter("batchSize"))}, - bsToken_(algoCandSelection_ ? consumes(edm::InputTag("offlineBeamSpot")) - : edm::EDGetTokenT()), - verticesToken_(algoCandSelection_ ? consumes(edm::InputTag("firstStepPrimaryVertices")) - : edm::EDGetTokenT()), + bsToken_(algoCandMVASelection_ ? consumes(edm::InputTag("offlineBeamSpot")) + : edm::EDGetTokenT()), + verticesToken_(algoCandMVASelection_ ? consumes(edm::InputTag("firstStepPrimaryVertices")) + : edm::EDGetTokenT()), tfDnnLabel_(iConfig.getParameter("tfDnnLabel")), tfDnnToken_(esConsumes(edm::ESInputTag("", tfDnnLabel_))) {} @@ -211,6 +217,10 @@ void MkFitOutputConverter::fillDescriptions(edm::ConfigurationDescriptions& desc desc.add("tfDnnLabel", "trackSelectionTf"); + desc.add("candCutSel", false)->setComment("flag used to trigger cut-based selection at cand level"); + desc.add("candMinPtCut", 0)->setComment("min pt cut at cand level"); + desc.add("candMinNHitsCut", 0)->setComment("min cut on number of hits at cand level"); + desc.add("candMVASel", false)->setComment("flag used to trigger MVA selection at cand level"); desc.add("candWP", 0)->setComment("MVA selection at cand level working point"); desc.add("batchSize", 16)->setComment("batch size for cand DNN evaluation"); @@ -232,13 +242,13 @@ void MkFitOutputConverter::produce(edm::StreamID iID, edm::Event& iEvent, const // beamspot as well since the producer can be used in hlt const reco::VertexCollection* vertices = nullptr; const reco::BeamSpot* beamspot = nullptr; - if (algoCandSelection_) { + if (algoCandMVASelection_) { vertices = &iEvent.get(verticesToken_); beamspot = &iEvent.get(bsToken_); } const tensorflow::Session* session = nullptr; - if (algoCandSelection_) + if (algoCandMVASelection_) session = iSetup.getData(tfDnnToken_).getSession(); // Convert mkfit presentation back to CMSSW @@ -308,6 +318,9 @@ TrackCandidateCollection MkFitOutputConverter::convertCandidates(const MkFitOutp continue; } + if (algoCandCutSelection_ && (cand.pT() < algoCandMinPtCut_ || cand.nTotalHits() < algoCandMinNHitsCut_)) + continue; + auto state = cand.state(); // copy because have to modify state.convertFromCCSToGlbCurvilinear(); const auto& param = state.parameters; @@ -512,7 +525,7 @@ TrackCandidateCollection MkFitOutputConverter::convertCandidates(const MkFitOutp states.push_back(tsosDet.first); } - if (algoCandSelection_) { + if (algoCandMVASelection_) { const auto& dnnScores = computeDNNs( output, states, bs, vertices, session, chi2, mkFitOutput.propagatedToFirstLayer() && doErrorRescale_); @@ -520,7 +533,7 @@ TrackCandidateCollection MkFitOutputConverter::convertCandidates(const MkFitOutp reducedOutput.reserve(output.size()); int scoreIndex = 0; for (const auto& score : dnnScores) { - if (score > algoCandWorkingPoint_) + if (score > algoCandMVAWorkingPoint_) reducedOutput.push_back(output[scoreIndex]); scoreIndex++; } diff --git a/RecoTracker/MkFit/plugins/MkFitProducer.cc b/RecoTracker/MkFit/plugins/MkFitProducer.cc index 448b5ac616c53..5bcb7e5390bd8 100644 --- a/RecoTracker/MkFit/plugins/MkFitProducer.cc +++ b/RecoTracker/MkFit/plugins/MkFitProducer.cc @@ -9,6 +9,8 @@ #include "DataFormats/Common/interface/DetSetVectorNew.h" #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" #include "DataFormats/SiStripCluster/interface/SiStripClusterfwd.h" +#include "DataFormats/SiStripCluster/interface/SiStripClusterfwd.h" +#include "DataFormats/Phase2TrackerCluster/interface/Phase2TrackerCluster1D.h" #include "RecoTracker/MkFit/interface/MkFitEventOfHits.h" #include "RecoTracker/MkFit/interface/MkFitHitWrapper.h" @@ -50,6 +52,7 @@ class MkFitProducer : public edm::global::EDProducer seedToken_; edm::EDGetTokenT>> pixelMaskToken_; edm::EDGetTokenT>> stripMaskToken_; + edm::EDGetTokenT>> phase2MaskToken_; const edm::ESGetToken mkFitGeomToken_; const edm::ESGetToken mkFitIterConfigToken_; const edm::EDPutTokenT putToken_; @@ -81,6 +84,7 @@ MkFitProducer::MkFitProducer(edm::ParameterSet const& iConfig) if (not clustersToSkip.label().empty()) { pixelMaskToken_ = consumes(clustersToSkip); stripMaskToken_ = consumes(clustersToSkip); + phase2MaskToken_ = consumes(clustersToSkip); } const auto build = iConfig.getParameter("buildingRoutine"); @@ -153,32 +157,39 @@ void MkFitProducer::produce(edm::StreamID iID, edm::Event& iEvent, const edm::Ev const auto& mkFitGeom = iSetup.getData(mkFitGeomToken_); const auto& mkFitIterConfig = iSetup.getData(mkFitIterConfigToken_); - const std::vector* pixelMaskPtr = nullptr; - std::vector pixelMask; + std::vector pixelMask(pixelHits.hits().size(), false); std::vector stripMask(stripHits.hits().size(), false); if (not pixelMaskToken_.isUninitialized()) { if (not pixelHits.hits().empty()) { const auto& pixelContainerMask = iEvent.get(pixelMaskToken_); - pixelMask.resize(pixelContainerMask.size(), false); if UNLIKELY (pixelContainerMask.refProd().id() != pixelHits.clustersID()) { throw cms::Exception("LogicError") << "MkFitHitWrapper has pixel cluster ID " << pixelHits.clustersID() << " but pixel cluster mask has " << pixelContainerMask.refProd().id(); } pixelContainerMask.copyMaskTo(pixelMask); - pixelMaskPtr = &pixelMask; } if (not stripHits.hits().empty()) { - const auto& stripContainerMask = iEvent.get(stripMaskToken_); - if UNLIKELY (stripContainerMask.refProd().id() != stripHits.clustersID()) { - throw cms::Exception("LogicError") << "MkFitHitWrapper has strip cluster ID " << stripHits.clustersID() - << " but strip cluster mask has " << stripContainerMask.refProd().id(); + if (mkFitGeom.isPhase1()) { + const auto& stripContainerMask = iEvent.get(stripMaskToken_); + if UNLIKELY (stripContainerMask.refProd().id() != stripHits.clustersID()) { + throw cms::Exception("LogicError") << "MkFitHitWrapper has strip cluster ID " << stripHits.clustersID() + << " but strip cluster mask has " << stripContainerMask.refProd().id(); + } + stripContainerMask.copyMaskTo(stripMask); + } else { + const auto& stripContainerMask = iEvent.get(phase2MaskToken_); + if UNLIKELY (stripContainerMask.refProd().id() != stripHits.clustersID()) { + throw cms::Exception("LogicError") << "MkFitHitWrapper has phase2 cluster ID " << stripHits.clustersID() + << " but phase2 cluster mask has " << stripContainerMask.refProd().id(); + } + stripContainerMask.copyMaskTo(stripMask); } - stripContainerMask.copyMaskTo(stripMask); } } else { - if (mkFitGeom.isPhase1() && minGoodStripCharge_ > 0) + if (mkFitGeom.isPhase1() && minGoodStripCharge_ > 0) { stripClusterChargeCut(iEvent.get(stripClusterChargeToken_), stripMask); + } } // seeds need to be mutable because of the possible cleaning @@ -189,7 +200,7 @@ void MkFitProducer::produce(edm::StreamID iID, edm::Event& iEvent, const edm::Ev mkfit::run_OneIteration(mkFitGeom.trackerInfo(), mkFitIterConfig, eventOfHits.get(), - {pixelMaskPtr, &stripMask}, + {&pixelMask, &stripMask}, streamCache(iID)->get(), seeds_mutable, tracks,