diff --git a/Configuration/ProcessModifiers/python/enableCPfromPU_cff.py b/Configuration/ProcessModifiers/python/enableCPfromPU_cff.py
new file mode 100644
index 0000000000000..b9e00007d5a1c
--- /dev/null
+++ b/Configuration/ProcessModifiers/python/enableCPfromPU_cff.py
@@ -0,0 +1,4 @@
+import FWCore.ParameterSet.Config as cms
+
+# This modifier enables the CaloParticles from pileup in the HGCAL associators and simulated objects.
+enableCPfromPU = cms.Modifier()
diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py
index 56a6db5802678..89f5c426cb4a6 100644
--- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py
+++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py
@@ -898,6 +898,38 @@ def condition(self, fragment, stepList, key, hasHarvest):
'--customise': 'RecoHGCal/TICL/customiseTICLFromReco.customiseTICLForDumper'}
upgradeWFs['ticl_v5_withDumper'].step4 = {'--procModifiers': 'ticl_v5'}
+class UpgradeWorkflow_CPfromPU(UpgradeWorkflow):
+ def setup_(self, step, stepName, stepDict, k, properties):
+ if ('Digi' in step and 'NoHLT' not in step) or ('HLTOnly' in step):
+ stepDict[stepName][k] = merge([self.step2, stepDict[step][k]])
+ if 'RecoGlobal' in step:
+ stepDict[stepName][k] = merge([self.step3, stepDict[step][k]])
+ if 'HARVESTGlobal' in step:
+ stepDict[stepName][k] = merge([self.step4, stepDict[step][k]])
+ def condition(self, fragment, stepList, key, hasHarvest):
+ return (fragment=="TTbar_14TeV" or 'CloseByP' in fragment or 'Eta1p7_2p7' in fragment) and 'Run4' in key
+
+upgradeWFs['CPfromPU'] = UpgradeWorkflow_CPfromPU(
+ steps = [
+ 'HLTOnly',
+ 'DigiTrigger',
+ 'RecoGlobal',
+ 'HARVESTGlobal'
+ ],
+ PU = [
+ 'HLTOnly',
+ 'DigiTrigger',
+ 'RecoGlobal',
+ 'HARVESTGlobal'
+ ],
+ suffix = '_withCPfromPU',
+ offset = 0.208,
+)
+
+upgradeWFs['CPfromPU'].step2 = {'--procModifiers': 'enableCPfromPU'}
+upgradeWFs['CPfromPU'].step3 = {'--procModifiers': 'enableCPfromPU'}
+upgradeWFs['CPfromPU'].step4 = {'--procModifiers': 'enableCPfromPU'}
+
# Improved L2 seeding from L1Tk Muons and L3 Tracker Muon Inside-Out reconstruction first (Phase-2 Muon default)
class UpgradeWorkflow_phase2L2AndL3Muons(UpgradeWorkflow):
def setup_(self, step, stepName, stepDict, k, properties):
diff --git a/SimCalorimetry/HGCalSimProducers/python/hgcHitAssociation_cfi.py b/SimCalorimetry/HGCalSimProducers/python/hgcHitAssociation_cfi.py
index ebe7be82c5df2..21037728b61b4 100644
--- a/SimCalorimetry/HGCalSimProducers/python/hgcHitAssociation_cfi.py
+++ b/SimCalorimetry/HGCalSimProducers/python/hgcHitAssociation_cfi.py
@@ -1,3 +1,11 @@
-from SimCalorimetry.HGCalAssociatorProducers.hgCalLCToCPAssociatorByEnergyScoreProducer_cfi import hgCalLCToCPAssociatorByEnergyScoreProducer as lcAssocByEnergyScoreProducer
+import FWCore.ParameterSet.Config as cms
+from SimCalorimetry.HGCalAssociatorProducers.hgCalLCToCPAssociatorByEnergyScoreProducer_cfi import hgCalLCToCPAssociatorByEnergyScoreProducer as _lcAssocByEnergyScoreProducer
+from SimCalorimetry.HGCalAssociatorProducers.hgCalLCToSCAssociatorByEnergyScoreProducer_cfi import hgCalLCToSCAssociatorByEnergyScoreProducer as _scAssocByEnergyScoreProducer
-from SimCalorimetry.HGCalAssociatorProducers.hgCalLCToSCAssociatorByEnergyScoreProducer_cfi import hgCalLCToSCAssociatorByEnergyScoreProducer as scAssocByEnergyScoreProducer
+lcAssocByEnergyScoreProducer = _lcAssocByEnergyScoreProducer.clone(hardScatterOnly = cms.bool(True))
+scAssocByEnergyScoreProducer = _scAssocByEnergyScoreProducer.clone(hardScatterOnly = cms.bool(True))
+
+from Configuration.ProcessModifiers.enableCPfromPU_cff import enableCPfromPU
+
+enableCPfromPU.toModify(lcAssocByEnergyScoreProducer, hardScatterOnly = cms.bool(False))
+enableCPfromPU.toModify(scAssocByEnergyScoreProducer, hardScatterOnly = cms.bool(False))
diff --git a/SimDataFormats/Track/src/classes_def.xml b/SimDataFormats/Track/src/classes_def.xml
index 09c6a03d5247e..36c55a31e5c7a 100644
--- a/SimDataFormats/Track/src/classes_def.xml
+++ b/SimDataFormats/Track/src/classes_def.xml
@@ -9,20 +9,14 @@
-
+
type(), newObj->momentum(), newObj->vertIndex(), newObj->genpartIndex(), newObj->trackerSurfacePosition(), newObj->trackerSurfaceMomentum());
- tmp.setTrackId(newObj->trackId());
- tmp.setEventId(newObj->eventId());
- tmp.setCrossedBoundaryVars(
- newObj->crossedBoundary(), newObj->getIDAtBoundary(), newObj->getPositionAtBoundary(), newObj->getMomentumAtBoundary());
- if (newObj->isFromBackScattering()) {
- tmp.setFromBackScattering();
- }
- if (newObj->genpartIndex() != -1) {
- tmp.setIsPrimary();
- }
- *newObj=tmp;
+ // set crossedBoundary infos
+ newObj->setCrossedBoundaryVars(onfile.crossedBoundary_, onfile.idAtBoundary_, onfile.positionAtBoundary_, onfile.momentumAtBoundary_);
+ // set isPrimary info of trackInfo_
+ if (onfile.igenpart != -1)
+ newObj->setIsPrimary();
+ // it's not possible to set the isFromBackScattering info for old simTracks
]]>