Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 10:00:39

0001 import FWCore.ParameterSet.Config as cms
0002 from HeterogeneousCore.CUDACore.SwitchProducerCUDA import SwitchProducerCUDA
0003 from Configuration.ProcessModifiers.gpu_cff import gpu
0004 
0005 # legacy pixel rechit producer
0006 siPixelRecHits = cms.EDProducer("SiPixelRecHitConverter",
0007     src = cms.InputTag("siPixelClusters"),
0008     CPE = cms.string('PixelCPEGeneric'),
0009     VerboseLevel = cms.untracked.int32(0)
0010 )
0011 
0012 # SwitchProducer wrapping the legacy pixel rechit producer
0013 siPixelRecHitsPreSplitting = SwitchProducerCUDA(
0014     cpu = siPixelRecHits.clone(
0015         src = 'siPixelClustersPreSplitting'
0016     )
0017 )
0018 
0019 # phase 2 tracker modifier
0020 from Configuration.Eras.Modifier_phase2_tracker_cff import phase2_tracker
0021 # HIon modifiers
0022 from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA
0023 
0024 # convert the pixel rechits from legacy to SoA format on CPU
0025 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitSoAFromLegacyPhase1_cfi import siPixelRecHitSoAFromLegacyPhase1 as _siPixelRecHitsPreSplittingSoA
0026 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitSoAFromLegacyPhase2_cfi import siPixelRecHitSoAFromLegacyPhase2 as _siPixelRecHitsPreSplittingSoAPhase2
0027 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitSoAFromLegacyHIonPhase1_cfi import siPixelRecHitSoAFromLegacyHIonPhase1 as _siPixelRecHitsPreSplittingSoAHIonPhase1
0028 
0029 siPixelRecHitsPreSplittingCPU = _siPixelRecHitsPreSplittingSoA.clone(convertToLegacy=True)
0030 (pp_on_AA & ~phase2_tracker).toReplaceWith(siPixelRecHitsPreSplittingCPU, _siPixelRecHitsPreSplittingSoAHIonPhase1.clone(convertToLegacy=True, CPE = cms.string('PixelCPEFastHIonPhase1')))
0031 phase2_tracker.toReplaceWith(siPixelRecHitsPreSplittingCPU, _siPixelRecHitsPreSplittingSoAPhase2.clone(convertToLegacy=True, CPE = cms.string('PixelCPEFastPhase2')))
0032 
0033 # modifier used to prompt patatrack pixel tracks reconstruction on cpu
0034 from Configuration.ProcessModifiers.pixelNtupletFit_cff import pixelNtupletFit
0035 pixelNtupletFit.toModify(siPixelRecHitsPreSplitting,
0036     cpu = cms.EDAlias(
0037             siPixelRecHitsPreSplittingCPU = cms.VPSet(
0038                  cms.PSet(type = cms.string("SiPixelRecHitedmNewDetSetVector")),
0039                  cms.PSet(type = cms.string("uintAsHostProduct"))
0040              )
0041 ))
0042 
0043 
0044 siPixelRecHitsPreSplittingTask = cms.Task(
0045     # SwitchProducer wrapping the legacy pixel rechit producer or the cpu SoA producer
0046     siPixelRecHitsPreSplitting
0047 )
0048 
0049 # reconstruct the pixel rechits on the gpu
0050 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitCUDAPhase1_cfi import siPixelRecHitCUDAPhase1 as _siPixelRecHitCUDAPhase1
0051 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitCUDAPhase2_cfi import siPixelRecHitCUDAPhase2 as _siPixelRecHitCUDAPhase2
0052 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitCUDAHIonPhase1_cfi import siPixelRecHitCUDAHIonPhase1 as _siPixelRecHitCUDAHIonPhase1
0053 
0054 siPixelRecHitsPreSplittingCUDA = _siPixelRecHitCUDAPhase1.clone(
0055     beamSpot = "offlineBeamSpotToCUDA"
0056 )
0057 (pp_on_AA & ~phase2_tracker).toReplaceWith(siPixelRecHitsPreSplittingCUDA,_siPixelRecHitCUDAHIonPhase1.clone(
0058     beamSpot = "offlineBeamSpotToCUDA"
0059 ))
0060 phase2_tracker.toReplaceWith(siPixelRecHitsPreSplittingCUDA,_siPixelRecHitCUDAPhase2.clone(
0061     beamSpot = "offlineBeamSpotToCUDA"
0062 ))
0063 
0064 #this is an alias for the SoA on GPU or CPU to be used for DQM
0065 siPixelRecHitsPreSplittingSoA = SwitchProducerCUDA(
0066     cpu = cms.EDAlias(
0067             siPixelRecHitsPreSplittingCPU = cms.VPSet(
0068                  cms.PSet(type = cms.string("pixelTopologyPhase1TrackingRecHitSoAHost")),
0069                  cms.PSet(type = cms.string("uintAsHostProduct"))
0070              )),
0071 )
0072 
0073 (pp_on_AA & ~phase2_tracker).toModify(siPixelRecHitsPreSplittingSoA,
0074     cpu = cms.EDAlias(
0075         siPixelRecHitsPreSplittingCPU = cms.VPSet(
0076              cms.PSet(type = cms.string("pixelTopologyHIonPhase1TrackingRecHitSoAHost")),
0077              cms.PSet(type = cms.string("uintAsHostProduct"))
0078          )))
0079 
0080 phase2_tracker.toModify(siPixelRecHitsPreSplittingSoA,
0081     cpu = cms.EDAlias(
0082         siPixelRecHitsPreSplittingCPU = cms.VPSet(
0083              cms.PSet(type = cms.string("pixelTopologyPhase2TrackingRecHitSoAHost")),
0084              cms.PSet(type = cms.string("uintAsHostProduct"))
0085          )))
0086 
0087 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitSoAFromCUDAPhase1_cfi import siPixelRecHitSoAFromCUDAPhase1 as _siPixelRecHitSoAFromCUDA
0088 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitSoAFromCUDAHIonPhase1_cfi import siPixelRecHitSoAFromCUDAHIonPhase1 as _siPixelRecHitSoAFromCUDAHIonPhase1
0089 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitSoAFromCUDAPhase2_cfi import siPixelRecHitSoAFromCUDAPhase2 as _siPixelRecHitSoAFromCUDAPhase2
0090 
0091 (gpu & pixelNtupletFit).toModify(siPixelRecHitsPreSplittingSoA, cuda = _siPixelRecHitSoAFromCUDA.clone())
0092 (gpu & pixelNtupletFit & phase2_tracker).toModify(siPixelRecHitsPreSplittingSoA, cuda = _siPixelRecHitSoAFromCUDAPhase2.clone())
0093 
0094 # transfer the pixel rechits to the host and convert them from SoA
0095 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitFromCUDAPhase1_cfi import siPixelRecHitFromCUDAPhase1 as _siPixelRecHitFromCUDA
0096 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitFromCUDAHIonPhase1_cfi import siPixelRecHitFromCUDAHIonPhase1 as _siPixelRecHitFromCUDAHIonPhase1
0097 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitFromCUDAPhase2_cfi import siPixelRecHitFromCUDAPhase2 as _siPixelRecHitFromCUDAPhase2
0098 
0099 (gpu & pixelNtupletFit).toModify(siPixelRecHitsPreSplitting, cuda = _siPixelRecHitFromCUDA.clone())
0100 (gpu & pixelNtupletFit & pp_on_AA).toModify(siPixelRecHitsPreSplitting, cuda = _siPixelRecHitFromCUDAHIonPhase1.clone())
0101 (gpu & pixelNtupletFit & phase2_tracker).toModify(siPixelRecHitsPreSplitting, cuda = _siPixelRecHitFromCUDAPhase2.clone())
0102 
0103 
0104 pixelNtupletFit.toReplaceWith(siPixelRecHitsPreSplittingTask, cms.Task(
0105     cms.Task(
0106         # reconstruct the pixel rechits on the cpu
0107         siPixelRecHitsPreSplittingCPU,
0108         # SwitchProducer wrapping an EDAlias on cpu or the converter from SoA to legacy on gpu
0109         siPixelRecHitsPreSplittingTask.copy(),
0110         # producing and converting on cpu (if needed)
0111         siPixelRecHitsPreSplittingSoA)
0112         )
0113         )
0114 
0115 
0116 #(gpu & pixelNtupletFit & phase2_tracker).toReplaceWith(siPixelRecHitsPreSplitting , cuda = _siPixelRecHitFromCUDAPhase2.clone())
0117 
0118 (gpu & pixelNtupletFit).toReplaceWith(siPixelRecHitsPreSplittingTask, cms.Task(
0119     # reconstruct the pixel rechits on the gpu or on the cpu
0120     # (normally only one of the two is run because only one is consumed from later stages)
0121     siPixelRecHitsPreSplittingCUDA,
0122     siPixelRecHitsPreSplittingCPU,
0123     # SwitchProducer wrapping an EDAlias on cpu or the converter from SoA to legacy on gpu
0124     siPixelRecHitsPreSplittingTask.copy(),
0125     # producing and converting on cpu (if needed)
0126     siPixelRecHitsPreSplittingSoA
0127 ))