diff --git a/Configuration/EventContent/python/EventContent_cff.py b/Configuration/EventContent/python/EventContent_cff.py index 396b424cd3da2..59653a9b73828 100644 --- a/Configuration/EventContent/python/EventContent_cff.py +++ b/Configuration/EventContent/python/EventContent_cff.py @@ -670,6 +670,12 @@ def SwapKeepAndDrop(l): FEVTDEBUGHLTEventContent.outputCommands.append('keep *_*_StripDigiSimLink_*') FEVTDEBUGHLTEventContent.outputCommands.append('keep *_*_PixelDigiSimLink_*') +from Configuration.ProcessModifiers.hltClusterSplitting_cff import hltClusterSplitting +hltClusterSplitting.toModify(FEVTDEBUGHLTEventContent, + outputCommands = FEVTDEBUGHLTEventContent.outputCommands+[ + 'keep *_hltPixelVertices_*_*' + ]) + approxSiStripClusters.toModify(FEVTDEBUGHLTEventContent, outputCommands = FEVTDEBUGHLTEventContent.outputCommands+[ 'keep *_hltSiStripClusters2ApproxClusters_*_*', diff --git a/Configuration/ProcessModifiers/python/hltClusterSplitting_cff.py b/Configuration/ProcessModifiers/python/hltClusterSplitting_cff.py new file mode 100644 index 0000000000000..b7855664076cd --- /dev/null +++ b/Configuration/ProcessModifiers/python/hltClusterSplitting_cff.py @@ -0,0 +1,8 @@ +import FWCore.ParameterSet.Config as cms + +# This modifier enables +# - saving pixel vertices at HLT; +# - using those vertices in input for the cluster splitting and ak4CaloJets; + +hltClusterSplitting = cms.Modifier() + diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py index 0dce1e1c1a852..80eb88c127ee3 100644 --- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py +++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py @@ -2552,6 +2552,72 @@ def condition(self, fragment, stepList, key, hasHarvest): offset = 0.19002, ) +class UpgradeWorkflow_SplittingFromHLT(UpgradeWorkflow): + def setup_(self, step, stepName, stepDict, k, properties): + stepDict[stepName][k] = merge([{'--procModifiers': 'hltClusterSplitting'}, stepDict[step][k]]) + def condition(self, fragment, stepList, key, hasHarvest): + return '2025' in key and fragment=="TTbar_14TeV" + +upgradeWFs['SplittingFromHLT'] = UpgradeWorkflow_SplittingFromHLT( + steps = [ + 'DigiTrigger', + 'Digi', + 'HLTOnly', + 'RecoLocal', + 'Reco', + 'RecoFakeHLT', + 'RecoGlobal', + ], + PU = [ + 'DigiTrigger', + 'Digi', + 'HLTOnly', + 'RecoLocal', + 'Reco', + 'RecoFakeHLT', + 'RecoGlobal', + ], + suffix = '_SplittingFromHLT', + offset = 0.19003, +) + +class UpgradeWorkflow_SplittingProdLike(UpgradeWorkflow_ProdLike): + def __init__(self, suffix, offset,steps, PU): + super(UpgradeWorkflow_SplittingProdLike, self).__init__(steps, PU, suffix, offset) + + def setup_(self, step, stepName, stepDict, k, properties): + # copy steps, then apply specializations + stepDict[stepName][k] = merge([{'--procModifiers': 'hltClusterSplitting'}, stepDict[step][k]]) + + def condition(self, fragment, stepList, key, hasHarvest): + return '2025' in key and fragment=="TTbar_14TeV" + +upgradeWFs['SplittingFromHLTProdLike'] = UpgradeWorkflow_SplittingProdLike( + steps = [ + ], + PU = [ + 'GenSimHLBeamSpot14', + 'Digi', + 'DigiTrigger', + 'HLTOnly', + 'Reco', + 'RecoFakeHLT', + 'RecoGlobal', + 'RecoNano', + 'RecoNanoFakeHLT', + 'HARVEST', + 'HARVESTFakeHLT', + 'HARVESTGlobal', + 'HARVESTNano', + 'HARVESTNanoFakeHLT', + 'MiniAOD', + 'ALCA', + 'Nano', + ], + suffix = '_SplittingFromHLTProdLike', + offset = 0.1900321, +) + # # Simulates Bias Rail in Phase-2 OT PS modules and X% random bad Strips # in PS-s and SS sensors diff --git a/RecoTracker/IterativeTracking/python/InitialStepPreSplitting_cff.py b/RecoTracker/IterativeTracking/python/InitialStepPreSplitting_cff.py index a28f1a80d4389..4397d57b1a4eb 100644 --- a/RecoTracker/IterativeTracking/python/InitialStepPreSplitting_cff.py +++ b/RecoTracker/IterativeTracking/python/InitialStepPreSplitting_cff.py @@ -221,6 +221,12 @@ src = 'caloTowerForTrkPreSplitting', srcPVs = 'firstStepPrimaryVerticesPreSplitting' ) + +from Configuration.ProcessModifiers.hltClusterSplitting_cff import hltClusterSplitting +hltClusterSplitting.toModify(ak4CaloJetsForTrkPreSplitting, + srcPVs = 'hltPixelVertices' +) + jetsForCoreTrackingPreSplitting = jetsForCoreTracking.clone( src = 'ak4CaloJetsForTrkPreSplitting' ) @@ -233,6 +239,8 @@ cores = 'jetsForCoreTrackingPreSplitting' ) + + # Final sequence from RecoLocalTracker.SiPixelRecHits.SiPixelRecHits_cfi import siPixelRecHits from RecoTracker.MeasurementDet.MeasurementTrackerEventProducer_cfi import MeasurementTrackerEvent @@ -254,6 +262,21 @@ siPixelRecHits, MeasurementTrackerEvent, siPixelClusterShapeCache) + +hltClusterSplitting.toModify(siPixelClusters, + vertices = cms.InputTag("hltPixelVertices") +) + +InitialStepPreSplittingFromHLTTask = cms.Task( + caloTowerForTrkPreSplitting, + ak4CaloJetsForTrkPreSplitting, + jetsForCoreTrackingPreSplitting, + siPixelClusters, + siPixelRecHits, + MeasurementTrackerEvent, + siPixelClusterShapeCache) +hltClusterSplitting.toReplaceWith(InitialStepPreSplittingTask, InitialStepPreSplittingFromHLTTask) + InitialStepPreSplitting = cms.Sequence(InitialStepPreSplittingTask) _InitialStepPreSplittingTask_trackingPhase1 = InitialStepPreSplittingTask.copy() _InitialStepPreSplittingTask_trackingPhase1.replace(initialStepHitTripletsPreSplitting, cms.Task(initialStepHitTripletsPreSplitting,initialStepHitQuadrupletsPreSplitting)) diff --git a/Validation/RecoTrack/python/TrackValidation_cff.py b/Validation/RecoTrack/python/TrackValidation_cff.py index 37063ed169dbe..62110c93f5e84 100644 --- a/Validation/RecoTrack/python/TrackValidation_cff.py +++ b/Validation/RecoTrack/python/TrackValidation_cff.py @@ -20,6 +20,7 @@ import RecoTracker.IterativeTracking.iterativeTkConfig as _cfg import RecoTracker.IterativeTracking.iterativeTkUtils as _utils from Configuration.Eras.Modifier_fastSim_cff import fastSim +from Configuration.ProcessModifiers.hltClusterSplitting_cff import hltClusterSplitting ### First define the stuff for the standard validation sequence ## Track selectors @@ -47,8 +48,8 @@ "displacedRegionalStepSeeds", "muonSeededSeedsInOut", "muonSeededSeedsOutIn"] - _seedProducers_fastSim = [ x for x in _seedProducers if x not in _removeForFastSimSeedProducers] +_seedProducers_hltSplit = [ x for x in _seedProducers if x not in ["initialStepSeedsPreSplitting"]] _removeForFastTrackProducers = ["initialStepTracksPreSplitting", "jetCoreRegionalStepTracks", @@ -56,6 +57,7 @@ "muonSeededTracksInOut", "muonSeededTracksOutIn"] _trackProducers_fastSim = [ x for x in _trackProducers if x not in _removeForFastTrackProducers] +_trackProducers_hltSplit = [ x for x in _trackProducers if x not in ["initialStepTracksPreSplitting"]] def _algoToSelector(algo): sel = "" @@ -813,6 +815,10 @@ def _uniqueFirstLayers(layerList): trackValidatorGsfTracks, ])) +hltClusterSplitting.toReplaceWith(tracksValidation, tracksValidation.copyAndExclude([ + trackValidatorBuildingPreSplitting, +])) + ### Then define stuff for standalone mode (i.e. MTV with RECO+DIGI input) # Select by originalAlgo and algoMask @@ -1016,6 +1022,12 @@ def _uniqueFirstLayers(layerList): trackValidatorConversionTrackingOnly, trackValidatorBHadronTrackingOnly ])) + +hltClusterSplitting.toReplaceWith(trackValidatorsTrackingOnly, trackValidatorsTrackingOnly.copyAndExclude([ + trackValidatorBuildingPreSplitting, + trackValidatorSeedingPreSplittingTrackingOnly, +])) + tracksValidationTrackingOnly = cms.Sequence( trackValidatorsTrackingOnly, tracksPreValidationTrackingOnly,