From 55a79c8d296c38fa3567f6397ca4497075f779ed Mon Sep 17 00:00:00 2001 From: silviodonato Date: Thu, 10 Sep 2026 17:05:35 +0200 Subject: [PATCH] add a wf and sequences to run HGCal-only reco, validation, harvesting --- .../python/upgradeWorkflowComponents.py | 23 +++++++++++++++++++ .../python/Reconstruction_cff.py | 16 +++++++++++++ .../Configuration/python/autoValidation.py | 1 + .../python/customiseHGCalOnly.py | 7 ++++++ .../python/globalValidation_cff.py | 5 ++++ 5 files changed, 52 insertions(+) create mode 100644 Validation/Configuration/python/customiseHGCalOnly.py diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py index 34ccf23046f3b..6dfd0ddfa4a4a 100644 --- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py +++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py @@ -1375,6 +1375,29 @@ def setup_(self, step, stepName, stepDict, k, properties): offset = 0.521, ) +# HGCal-only local reconstruction and validation, without general tracking +# - Phase-2 only (HGCal does not exist in Run3) +# - RAW2DIGI + HGCal-only reconstruction, with DQM and validation +# - harvesting +class UpgradeWorkflow_HGCalOnly(PatatrackWorkflow): + def condition(self, fragment, stepList, key, hasHarvest): + return ('Run4' in key) and (fragment == "TTbar_14TeV") and hasHarvest + +upgradeWFs['HGCalOnly'] = UpgradeWorkflow_HGCalOnly( + digi = { + # nothing special needed for the HGCal-only reconstruction + }, + reco = { + '-s': 'RAW2DIGI:RawToDigi,RECO:reconstruction_hgcalOnly,VALIDATION:@HGCalOnlyValidation', + '--customise': 'Validation/Configuration/customiseHGCalOnly.customiseHGCalOnly', + }, + harvest = { + '-s': 'HARVESTING:@HGCalOnlyValidation' + }, + suffix = 'HGCalOnly', + offset = 0.531, +) + ############################################################################################################### ### Alpaka workflows ### diff --git a/Configuration/StandardSequences/python/Reconstruction_cff.py b/Configuration/StandardSequences/python/Reconstruction_cff.py index 0dfbe1086fe98..4dc5164a37554 100644 --- a/Configuration/StandardSequences/python/Reconstruction_cff.py +++ b/Configuration/StandardSequences/python/Reconstruction_cff.py @@ -270,6 +270,22 @@ reconstruction_hcalOnly = cms.Sequence(reconstruction_hcalOnlyTask) reconstruction_hcalOnlyLegacy = cms.Sequence(reconstruction_hcalOnlyLegacyTask) +# define a sequence to run the HGCal local reco without the tracking step, for HGCalOnly workflows +particleFlowClusterHGCalNoTracks = particleFlowClusterHGCal.clone( + initialClusteringStep=dict(tracksterSrc='ticlTrackstersCLUE3DHigh') +) +hgcalLocalRecoTask_hgcalOnly = hgcalLocalRecoTask.copyAndExclude([particleFlowClusterHGCal]) +hgcalLocalRecoTask_hgcalOnly.add(particleFlowClusterHGCalNoTracks) + +reconstruction_hgcalOnlyTask = cms.Task( + bunchSpacingProducer, + offlineBeamSpot, + hgcalLocalRecoTask_hgcalOnly, + mergeTICLTask, + pfClusteringHGCalTask +) +reconstruction_hgcalOnly = cms.Sequence(reconstruction_hgcalOnlyTask) + #need a fully expanded sequence copy modulesToRemove = list() # copy does not work well noTrackingAndDependent = list() diff --git a/Validation/Configuration/python/autoValidation.py b/Validation/Configuration/python/autoValidation.py index 9d7909dcce8eb..a75f7280f4259 100644 --- a/Validation/Configuration/python/autoValidation.py +++ b/Validation/Configuration/python/autoValidation.py @@ -19,6 +19,7 @@ 'standardValidationHiMix' : ['prevalidation','validationHiMix','validationHarvesting'], 'standardValidationNoHLTHiMix' : ['prevalidationNoHLT','validationNoHLTHiMix','validationHarvestingNoHLT'], 'HGCalValidation' : ['globalPrevalidationHGCal', 'globalValidationHGCal', 'hgcalValidatorPostProcessor'], + 'HGCalOnlyValidation' : ['globalPrevalidationHGCal', 'globalValidationHGCalOnly', 'hgcalValidatorPostProcessor'], 'BarrelValidation' : ['globalPrevalidationBarrel', 'globalValidationBarrel', 'barrelValidatorPostProcessor'], 'MTDValidation' : ['', 'globalValidationMTD', 'mtdValidationPostProcessor'], 'ecalValidation_phase2' : ['', 'validationECALPhase2', ''], diff --git a/Validation/Configuration/python/customiseHGCalOnly.py b/Validation/Configuration/python/customiseHGCalOnly.py new file mode 100644 index 0000000000000..5f300a1c5fb24 --- /dev/null +++ b/Validation/Configuration/python/customiseHGCalOnly.py @@ -0,0 +1,7 @@ +import FWCore.ParameterSet.Config as cms + + +def customiseHGCalOnly(process): + ## avoid crash due to missing track collection in HGCalOnly workflows + process.trackingParticleGsfTrackAssociation.ignoremissingtrackcollection = cms.untracked.bool(True) + return process diff --git a/Validation/Configuration/python/globalValidation_cff.py b/Validation/Configuration/python/globalValidation_cff.py index 780cdb410c044..439516351f47a 100644 --- a/Validation/Configuration/python/globalValidation_cff.py +++ b/Validation/Configuration/python/globalValidation_cff.py @@ -271,6 +271,11 @@ globalValidationHGCal = cms.Sequence(hgcalValidation) +## remove the DQM modules depending on tracks from the HGCalOnly validation workflows +globalValidationHGCalOnly = globalValidationHGCal.copy() +globalValidationHGCalOnly.remove(hgcalTiclPFValidation) +globalValidationHGCalOnly.remove(hgcalPFJetValidation) + globalPrevalidationBarrel = cms.Sequence() _globalPrevalidationBarrel = globalPrevalidationBarrel.copy() _globalPrevalidationBarrel += cms.Sequence(barrelAssociators)