Skip to content

Commit

Permalink
Merge pull request #38280 from forthommel/pps-direct_simu_stdseq-12_5_X
Browse files Browse the repository at this point in the history
[PPS] Direct simulation as sequence
  • Loading branch information
cmsbuild committed Aug 4, 2022
2 parents f47ea73 + 8897905 commit f10295e
Show file tree
Hide file tree
Showing 47 changed files with 722 additions and 760 deletions.
4 changes: 2 additions & 2 deletions Configuration/Eras/python/Era_Phase2_cff.py
Expand Up @@ -15,7 +15,7 @@
from Configuration.Eras.Modifier_phase2_timing_cff import phase2_timing
from Configuration.Eras.Modifier_phase2_timing_layer_cff import phase2_timing_layer
from Configuration.Eras.Modifier_phase2_trigger_cff import phase2_trigger
from Configuration.Eras.Modifier_ctpps_2021_cff import ctpps_2021
from Configuration.Eras.Modifier_ctpps_2022_cff import ctpps_2022
from Configuration.ProcessModifiers.dd4hep_cff import dd4hep

Phase2 = cms.ModifierChain(Run3_noMkFit.copyAndExclude([phase1Pixel,trackingPhase1,ctpps_2021,dd4hep]), phase2_common, phase2_tracker, trackingPhase2PU140, phase2_ecal, phase2_hcal, phase2_hgcal, phase2_muon, phase2_GEM, hcalHardcodeConditions, phase2_timing, phase2_timing_layer, phase2_trigger)
Phase2 = cms.ModifierChain(Run3_noMkFit.copyAndExclude([phase1Pixel,trackingPhase1,ctpps_2022,dd4hep]), phase2_common, phase2_tracker, trackingPhase2PU140, phase2_ecal, phase2_hcal, phase2_hgcal, phase2_muon, phase2_GEM, hcalHardcodeConditions, phase2_timing, phase2_timing_layer, phase2_trigger)
4 changes: 2 additions & 2 deletions Configuration/Eras/python/Era_Run3_cff.py
Expand Up @@ -8,11 +8,11 @@
from Configuration.Eras.Modifier_run2_GEM_2017_cff import run2_GEM_2017
from Configuration.Eras.Modifier_stage2L1Trigger_2021_cff import stage2L1Trigger_2021
from Configuration.Eras.Modifier_ctpps_2018_cff import ctpps_2018
from Configuration.Eras.Modifier_ctpps_2021_cff import ctpps_2021
from Configuration.Eras.Modifier_ctpps_2022_cff import ctpps_2022
from Configuration.ProcessModifiers.dd4hep_cff import dd4hep
from Configuration.Eras.Modifier_run3_nanoAOD_devel_cff import run3_nanoAOD_devel
from Configuration.Eras.Modifier_run3_egamma_cff import run3_egamma
from Configuration.Eras.Modifier_run3_RPC_cff import run3_RPC

Run3 = cms.ModifierChain(Run2_2018.copyAndExclude([run2_GEM_2017, ctpps_2018]), run3_common, run3_egamma, run3_GEM, run3_HB, run3_HFSL, stage2L1Trigger_2021, ctpps_2021, dd4hep, run3_nanoAOD_devel, run3_RPC)
Run3 = cms.ModifierChain(Run2_2018.copyAndExclude([run2_GEM_2017, ctpps_2018]), run3_common, run3_egamma, run3_GEM, run3_HB, run3_HFSL, stage2L1Trigger_2021, ctpps_2022, dd4hep, run3_nanoAOD_devel, run3_RPC)

@@ -1,3 +1,3 @@
import FWCore.ParameterSet.Config as cms

ctpps_2021 = cms.Modifier()
ctpps_2022 = cms.Modifier()
6 changes: 4 additions & 2 deletions Configuration/StandardSequences/python/Eras.py
Expand Up @@ -63,7 +63,7 @@ def __init__(self):
'stage1L1Trigger', 'fastSim',
'peripheralPbPb', 'pA_2016',
'run2_HE_2017', 'stage2L1Trigger', 'stage2L1Trigger_2017', 'stage2L1Trigger_2018', 'stage2L1Trigger_2021',
'run2_HF_2017', 'run2_HCAL_2017', 'run2_HEPlan1_2017', 'run2_HB_2018','run2_HE_2018',
'run2_HF_2017', 'run2_HCAL_2017', 'run2_HEPlan1_2017', 'run2_HB_2018','run2_HE_2018',
'run3_HB', 'run3_HFSL', 'run3_common', 'run3_RPC',
'phase1Pixel', 'run3_GEM', 'run2_GEM_2017',
'run2_CSC_2018',
Expand All @@ -73,7 +73,9 @@ def __init__(self):
'phase2_timing_layer', 'phase2_etlV4', 'phase2_hcal', 'phase2_ecal','phase2_ecal_devel',
'phase2_trigger',
'phase2_squarePixels', 'phase2_3DPixels',
'trackingLowPU', 'trackingPhase1', 'ctpps', 'ctpps_2016', 'ctpps_2017', 'ctpps_2018', 'ctpps_2021', 'trackingPhase2PU140','highBetaStar_2018',
'trackingLowPU', 'trackingPhase1',
'ctpps', 'ctpps_2016', 'ctpps_2017', 'ctpps_2018', 'ctpps_2022',
'trackingPhase2PU140','highBetaStar_2018',
'tracker_apv_vfp30_2016', 'pf_badHcalMitigationOff', 'run2_miniAOD_80XLegacy','run2_miniAOD_94XFall17', 'run2_nanoAOD_92X',
'run2_nanoAOD_94XMiniAODv1', 'run2_nanoAOD_94XMiniAODv2', 'run2_nanoAOD_94X2016',
'run2_miniAOD_devel', 'run2_nanoAOD_102Xv1', 'run2_nanoAOD_106Xv1', 'run2_nanoAOD_106Xv2',
Expand Down
6 changes: 3 additions & 3 deletions EventFilter/CTPPSRawToDigi/python/ctppsDigiToRaw_cff.py
Expand Up @@ -7,7 +7,7 @@
ctppsRawData = cms.Task()
# The comment lines below will be included in the next PR for Run2

#from Configuration.Eras.Modifier_ctpps_2016_cff import ctpps_2016
#from Configuration.Eras.Modifier_ctpps_2016_cff import ctpps_2016
#ctpps_2016.toReplaceWith(ctppsRawData, cms.Task(ctppsTotemRawData))

#from Configuration.Eras.Modifier_ctpps_2017_cff import ctpps_2017
Expand All @@ -16,5 +16,5 @@
#from Configuration.Eras.Modifier_ctpps_2018_cff import ctpps_2018
#ctpps_2018.toReplaceWith(ctppsRawData, cms.Task(ctppsPixelRawData))

from Configuration.Eras.Modifier_ctpps_2021_cff import ctpps_2021
ctpps_2021.toReplaceWith(ctppsRawData, cms.Task(ctppsPixelRawData))
from Configuration.Eras.Modifier_ctpps_2022_cff import ctpps_2022
ctpps_2022.toReplaceWith(ctppsRawData, cms.Task(ctppsPixelRawData))
4 changes: 2 additions & 2 deletions EventFilter/RawDataCollector/python/rawDataCollector_cfi.py
Expand Up @@ -36,8 +36,8 @@
run3_GEM.toModify( rawDataCollector.RawCollectionList, func = lambda list: list.append(cms.InputTag("gemPacker")) )

# For Run2 it is needed to include the general ctpps era ctpps_2016
from Configuration.Eras.Modifier_ctpps_2021_cff import ctpps_2021
ctpps_2021.toModify(rawDataCollector.RawCollectionList, func = lambda list: list.extend([cms.InputTag("ctppsTotemRawData"),cms.InputTag("ctppsPixelRawData")]) )
from Configuration.Eras.Modifier_ctpps_2022_cff import ctpps_2022
ctpps_2022.toModify(rawDataCollector.RawCollectionList, func = lambda list: list.extend([cms.InputTag("ctppsTotemRawData"),cms.InputTag("ctppsPixelRawData")]) )

# Phase-2 Tracker
from Configuration.Eras.Modifier_phase2_tracker_cff import phase2_tracker
Expand Down
12 changes: 8 additions & 4 deletions Geometry/VeryForwardGeometry/python/commons_cff.py
Expand Up @@ -6,10 +6,14 @@ def cloneGeometry(mod_path):
# start by importing the actual module to be cloned
_geom = import_module(mod_path)
# clone all geometry DDL files
totemGeomXMLFiles = copy(_geom.totemGeomXMLFiles)
ctppsDiamondGeomXMLFiles = copy(_geom.ctppsDiamondGeomXMLFiles)
ctppsUFSDGeomXMLFiles = copy(_geom.ctppsUFSDGeomXMLFiles)
ctppsPixelGeomXMLFiles = copy(_geom.ctppsPixelGeomXMLFiles)
if hasattr(_geom, 'totemGeomXMLFiles'):
totemGeomXMLFiles = copy(_geom.totemGeomXMLFiles)
if hasattr(_geom, 'ctppsDiamondGeomXMLFiles'):
ctppsDiamondGeomXMLFiles = copy(_geom.ctppsDiamondGeomXMLFiles)
if hasattr(_geom, 'ctppsUFSDGeomXMLFiles'):
ctppsUFSDGeomXMLFiles = copy(_geom.ctppsUFSDGeomXMLFiles)
if hasattr(_geom, 'ctppsPixelGeomXMLFiles'):
ctppsPixelGeomXMLFiles = copy(_geom.ctppsPixelGeomXMLFiles)
# clone the ESSource and ESModule to be returned
XMLIdealGeometryESSource_CTPPS = _geom.XMLIdealGeometryESSource_CTPPS.clone()
ctppsGeometryESModule = _geom.ctppsGeometryESModule.clone()
Expand Down
30 changes: 22 additions & 8 deletions RecoPPS/Configuration/python/recoCTPPS_cff.py
Expand Up @@ -25,15 +25,29 @@
ctpps_2018.toReplaceWith(
recoCTPPSTask,
cms.Task(
totemRPLocalReconstructionTask ,
ctppsDiamondLocalReconstructionTask ,
totemTimingLocalReconstructionTask ,
ctppsPixelLocalReconstructionTask ,
ctppsLocalTrackLiteProducer ,
ctppsProtons
totemRPLocalReconstructionTask ,
ctppsDiamondLocalReconstructionTask ,
totemTimingLocalReconstructionTask ,
ctppsPixelLocalReconstructionTask ,
ctppsLocalTrackLiteProducer ,
ctppsProtons
)

)


recoCTPPS = cms.Sequence(recoCTPPSTask)

# reconstruction for direct simulation (RecHit-level info)

totemRPFromRHLocalReconstructionTask = totemRPLocalReconstructionTask.copyAndExclude([totemRPClusterProducer, totemRPRecHitProducer])
ctppsDiamondFromRHLocalReconstructionTask = ctppsDiamondLocalReconstructionTask.copyAndExclude([ctppsDiamondRecHits])
ctppsPixelFromRHLocalReconstructionTask = ctppsPixelLocalReconstructionTask.copyAndExclude([ctppsPixelClusters, ctppsPixelRecHits])

recoDirectSimPPSTask = cms.Task(
totemRPFromRHLocalReconstructionTask,
ctppsDiamondFromRHLocalReconstructionTask,
ctppsPixelFromRHLocalReconstructionTask,
ctppsLocalTrackLiteProducer,
ctppsProtons
)

recoDirectSimPPS = cms.Sequence(recoDirectSimPPSTask)
17 changes: 17 additions & 0 deletions RecoPPS/Local/python/ctppsLocalTrackLiteProducer_cff.py
Expand Up @@ -6,7 +6,24 @@

# enable the module for CTPPS era(s)
from Configuration.Eras.Modifier_ctpps_cff import ctpps
from Configuration.Eras.Modifier_ctpps_2016_cff import ctpps_2016
from Configuration.Eras.Modifier_ctpps_2017_cff import ctpps_2017

ctpps.toModify(
ctppsLocalTrackLiteProducer,
includeStrips = False,
includeDiamonds = True,
includePixels = True
)

ctpps_2016.toModify(
ctppsLocalTrackLiteProducer,
includeStrips = True,
includeDiamonds = False,
includePixels = False
)

ctpps_2017.toModify(
ctppsLocalTrackLiteProducer,
includeStrips = True,
includeDiamonds = True,
Expand Down
4 changes: 2 additions & 2 deletions SimGeneral/MixingModule/python/mixObjects_cfi.py
Expand Up @@ -305,8 +305,8 @@
)
)

from Configuration.Eras.Modifier_ctpps_2021_cff import ctpps_2021
ctpps_2021.toModify( theMixObjects,
from Configuration.Eras.Modifier_ctpps_2022_cff import ctpps_2022
ctpps_2022.toModify( theMixObjects,
mixSH = dict(
input = theMixObjects.mixSH.input + [ cms.InputTag("g4SimHits","TotemHitsRP"),cms.InputTag("g4SimHits","CTPPSPixelHits") ],
subdets = theMixObjects.mixSH.subdets + [ 'TotemHitsRP', 'CTPPSPixelHits' ],
Expand Down
4 changes: 2 additions & 2 deletions SimPPS/Configuration/python/GenPPS_cff.py
Expand Up @@ -15,5 +15,5 @@
#from Configuration.Eras.Modifier_ctpps_2018_cff import ctpps_2018
#ctpps_2018.toReplaceWith(PPSTransportTask, cms.Task(LHCTransport))

from Configuration.Eras.Modifier_ctpps_2021_cff import ctpps_2021
ctpps_2021.toReplaceWith(PPSTransportTask, cms.Task(LHCTransport))
from Configuration.Eras.Modifier_ctpps_2022_cff import ctpps_2022
ctpps_2022.toReplaceWith(PPSTransportTask, cms.Task(LHCTransport))
4 changes: 2 additions & 2 deletions SimPPS/Configuration/python/SimPPS_cff.py
Expand Up @@ -23,5 +23,5 @@
#from Configuration.Eras.Modifier_ctpps_2018_cff import ctpps_2018
#ctpps_2018.toReplaceWith(ctppsDigiTask, RPixDetDigitizerTask)

from Configuration.Eras.Modifier_ctpps_2021_cff import ctpps_2021
ctpps_2021.toReplaceWith(ctppsDigiTask, RPixDetDigitizerTask)
from Configuration.Eras.Modifier_ctpps_2022_cff import ctpps_2022
ctpps_2022.toReplaceWith(ctppsDigiTask, RPixDetDigitizerTask)
29 changes: 29 additions & 0 deletions SimPPS/Configuration/python/Utils.py
@@ -0,0 +1,29 @@
import FWCore.ParameterSet.Config as cms

def setupPPSDirectSim(process):
process.load('SimPPS.Configuration.directSimPPS_cff')
process.load('RecoPPS.Configuration.recoCTPPS_cff')
if not hasattr(process, 'RandomNumberGeneratorService'):
process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService")
if not hasattr(process.RandomNumberGeneratorService, 'beamDivergenceVtxGenerator'):
process.RandomNumberGeneratorService.beamDivergenceVtxGenerator = cms.PSet(initialSeed = cms.untracked.uint32(3849))
if not hasattr(process.RandomNumberGeneratorService, 'ppsDirectProtonSimulation'):
process.RandomNumberGeneratorService.ppsDirectProtonSimulation = cms.PSet(initialSeed = cms.untracked.uint32(4981))
process.ppsDirectSim = cms.Path(process.directSimPPS * process.recoDirectSimPPS)
process.schedule.append(process.ppsDirectSim)

from SimPPS.DirectSimProducer.matching_cff import matchDirectSimOutputs
matchDirectSimOutputs(process)
return process

def setupPPSDirectSimAOD(process):
setupPPSDirectSim(process)
from SimPPS.DirectSimProducer.matching_cff import matchDirectSimOutputsAOD
matchDirectSimOutputsAOD(process)
return process

def setupPPSDirectSimMiniAOD(process):
setupPPSDirectSim(process)
from SimPPS.DirectSimProducer.matching_cff import matchDirectSimOutputsMiniAOD
matchDirectSimOutputsMiniAOD(process)
return process
54 changes: 54 additions & 0 deletions SimPPS/Configuration/python/directSimPPS_cff.py
@@ -0,0 +1,54 @@
import FWCore.ParameterSet.Config as cms
from Configuration.StandardSequences.Eras import eras
from SimPPS.DirectSimProducer.ppsDirectProtonSimulation_cff import *

directSimPPSTask = cms.Task(
beamDivergenceVtxGenerator,
ppsDirectProtonSimulation
)

directSimPPS = cms.Sequence(directSimPPSTask)

def unshiftVertex(process, smearingParams):
"""Undo vertex smearing using the parameters used for the sample production"""
if not hasattr(process, 'ctppsBeamParametersFromLHCInfoESSource'):
return
from importlib import import_module
_params = import_module('IOMC.EventVertexGenerators.VtxSmearedParameters_cfi')
if not hasattr(_params, smearingParams):
raise ImportError('Failed to import {} from vertex smearing parameters!'.format(smearingParams))
_params = getattr(_params, smearingParams)
process.ctppsBeamParametersFromLHCInfoESSource.vtxOffsetX45 = cms.double(-_params.X0.value())
process.ctppsBeamParametersFromLHCInfoESSource.vtxOffsetY45 = cms.double(-_params.Y0.value())
process.ctppsBeamParametersFromLHCInfoESSource.vtxOffsetZ45 = cms.double(-_params.Z0.value())

# modify according to era

def _modify2016(process):
print('Process customised for 2016 PPS era')
process.load('SimPPS.DirectSimProducer.simPPS2016_cfi')
unshiftVertex(process, 'Realistic25ns13TeV2016CollisionVtxSmearingParameters')

def _modify2017(process):
print('Process customised for 2017 PPS era')
process.load('SimPPS.DirectSimProducer.simPPS2017_cfi')
unshiftVertex(process, 'Realistic25ns13TeVEarly2017CollisionVtxSmearingParameters')

def _modify2018(process):
print('Process customised for 2018 PPS era')
process.load('SimPPS.DirectSimProducer.simPPS2018_cfi')
unshiftVertex(process, 'Realistic25ns13TeVEarly2018CollisionVtxSmearingParameters')

def _modify2022(process):
print('Process customised for 2022 PPS era')
process.load('SimPPS.DirectSimProducer.simPPS2022_cfi')
if hasattr(process, 'generator'):
process.generator.energy = process.profile_2022_default.ctppsLHCInfo.beamEnergy
if hasattr(process, 'ctppsGeometryESModule'):
# replaced by the composite ESSource
delattr(process, 'ctppsGeometryESModule')

modifyConfigurationStandardSequencesFor2016_ = eras.ctpps_2016.makeProcessModifier(_modify2016)
modifyConfigurationStandardSequencesFor2017_ = eras.ctpps_2017.makeProcessModifier(_modify2017)
modifyConfigurationStandardSequencesFor2018_ = eras.ctpps_2018.makeProcessModifier(_modify2018)
modifyConfigurationStandardSequencesFor2022_ = eras.ctpps_2022.makeProcessModifier(_modify2022)
9 changes: 9 additions & 0 deletions SimPPS/DirectSimProducer/plugins/BuildFile.xml
@@ -0,0 +1,9 @@
<use name="CondFormats/DataRecord"/>
<use name="CondFormats/RunInfo"/>
<use name="Geometry/VeryForwardGeometryBuilder"/>
<use name="Geometry/VeryForwardRPTopology"/>
<use name="SimDataFormats/GeneratorProducts"/>
<use name="rootcore"/>
<library name="SimPPSDirectSimProducerPlugins" file="*.cc">
<flags EDM_PLUGIN="1"/>
</library>
Expand Up @@ -63,10 +63,10 @@

//----------------------------------------------------------------------------------------------------

class CTPPSDirectProtonSimulation : public edm::stream::EDProducer<> {
class PPSDirectProtonSimulation : public edm::stream::EDProducer<> {
public:
explicit CTPPSDirectProtonSimulation(const edm::ParameterSet &);
~CTPPSDirectProtonSimulation() override {}
explicit PPSDirectProtonSimulation(const edm::ParameterSet &);
~PPSDirectProtonSimulation() override {}

static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);

Expand Down Expand Up @@ -149,7 +149,7 @@ class CTPPSDirectProtonSimulation : public edm::stream::EDProducer<> {

//----------------------------------------------------------------------------------------------------

CTPPSDirectProtonSimulation::CTPPSDirectProtonSimulation(const edm::ParameterSet &iConfig)
PPSDirectProtonSimulation::PPSDirectProtonSimulation(const edm::ParameterSet &iConfig)
: tokenLHCInfo_(esConsumes(edm::ESInputTag{"", iConfig.getParameter<std::string>("lhcInfoLabel")})),
tokenBeamParameters_(esConsumes()),
pixelTopologyToken_(esConsumes()),
Expand Down Expand Up @@ -209,7 +209,7 @@ CTPPSDirectProtonSimulation::CTPPSDirectProtonSimulation(const edm::ParameterSet

//----------------------------------------------------------------------------------------------------

void CTPPSDirectProtonSimulation::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
void PPSDirectProtonSimulation::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
edm::ParameterSetDescription desc;
desc.addUntracked<unsigned int>("verbosity", 0);

Expand Down Expand Up @@ -237,12 +237,12 @@ void CTPPSDirectProtonSimulation::fillDescriptions(edm::ConfigurationDescription
desc.add<double>("pitchPixelsHor", 100.e-3);
desc.add<double>("pitchPixelsVer", 150.e-3);

descriptions.add("ctppsDirectProtonSimulation", desc);
descriptions.add("ppsDirectProtonSimulation", desc);
}

//----------------------------------------------------------------------------------------------------

void CTPPSDirectProtonSimulation::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) {
void PPSDirectProtonSimulation::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) {
// get input
edm::Handle<edm::HepMCProduct> hepmc_prod;
iEvent.getByToken(hepMCToken_, hepmc_prod);
Expand Down Expand Up @@ -338,7 +338,7 @@ void CTPPSDirectProtonSimulation::produce(edm::Event &iEvent, const edm::EventSe

//----------------------------------------------------------------------------------------------------

void CTPPSDirectProtonSimulation::processProton(
void PPSDirectProtonSimulation::processProton(
const HepMC::GenVertex *in_vtx,
const HepMC::GenParticle *in_trk,
const CTPPSGeometry &geometry,
Expand Down Expand Up @@ -688,4 +688,4 @@ void CTPPSDirectProtonSimulation::processProton(

//----------------------------------------------------------------------------------------------------

DEFINE_FWK_MODULE(CTPPSDirectProtonSimulation);
DEFINE_FWK_MODULE(PPSDirectProtonSimulation);
31 changes: 31 additions & 0 deletions SimPPS/DirectSimProducer/python/matching_cff.py
@@ -0,0 +1,31 @@
import FWCore.ParameterSet.Config as cms

def matchDirectSimOutputs(process, AOD=False, miniAOD=False):
# match sources of rechits with direct simulation outputs
process.totemRPUVPatternFinder.tagRecHit = cms.InputTag('ppsDirectProtonSimulation')
process.ctppsPixelLocalTracks.tag = cms.InputTag('ppsDirectProtonSimulation')
process.ctppsDiamondLocalTracks.recHitsTag = cms.InputTag('ppsDirectProtonSimulation')
# handle clashes between simulation and GT conditions
process.es_prefer_composrc = cms.ESPrefer('CTPPSCompositeESSource', 'ctppsCompositeESSource')
process.es_prefer_pixtopo = cms.ESPrefer('PPSPixelTopologyESSource', 'ppsPixelTopologyESSource')
process.es_prefer_lhcinfo = cms.ESPrefer('CTPPSBeamParametersFromLHCInfoESSource', 'ctppsBeamParametersFromLHCInfoESSource')
process.es_prefer_assocuts = cms.ESPrefer('PPSAssociationCutsESSource', 'ppsAssociationCutsESSource')
return process

def matchDirectSimOutputsAOD(process):
matchDirectSimOutputs(process)
process.beamDivergenceVtxGenerator.src = cms.InputTag('')
process.beamDivergenceVtxGenerator.srcGenParticle = cms.VInputTag(
cms.InputTag('genPUProtons', 'genPUProtons'),
cms.InputTag('genParticles')
)
return process

def matchDirectSimOutputsMiniAOD(process):
matchDirectSimOutputs(process)
process.beamDivergenceVtxGenerator.src = cms.InputTag('')
process.beamDivergenceVtxGenerator.srcGenParticle = cms.VInputTag(
cms.InputTag('genPUProtons', 'genPUProtons'),
cms.InputTag('prunedGenParticles')
)
return process

0 comments on commit f10295e

Please sign in to comment.