Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-03-23 16:00:25

0001 import FWCore.ParameterSet.Config as cms
0002 from HeterogeneousCore.AlpakaCore.functions import *
0003 from Configuration.Eras.Modifier_run3_common_cff import run3_common
0004 from Configuration.Eras.Modifier_run3_SiPixel_2025_cff import run3_SiPixel_2025
0005 from Configuration.ProcessModifiers.alpaka_cff import alpaka
0006 
0007 # HIon Modifiers
0008 from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA
0009 # Phase 2 Tracker Modifier
0010 from Configuration.Eras.Modifier_phase2_tracker_cff import phase2_tracker
0011 
0012 # The legacy pixel cluster producer
0013 from RecoLocalTracker.SiPixelClusterizer.SiPixelClusterizerPreSplitting_cfi import siPixelClustersPreSplitting
0014 
0015 siPixelClustersPreSplittingTask = cms.Task(
0016     siPixelClustersPreSplitting
0017 )
0018 
0019 ######################################################################
0020 
0021 ### Alpaka Pixel Clusters Reco
0022 
0023 #from CalibTracker.SiPixelESProducers.siPixelCablingSoAESProducer_cfi import siPixelCablingSoAESProducer
0024 #from CalibTracker.SiPixelESProducers.siPixelGainCalibrationForHLTSoAESProducer_cfi import siPixelGainCalibrationForHLTSoAESProducer
0025 
0026 def _addProcessCalibTrackerAlpakaES(process):
0027     process.load("CalibTracker.SiPixelESProducers.siPixelCablingSoAESProducer_cfi")
0028     process.load("CalibTracker.SiPixelESProducers.siPixelGainCalibrationForHLTSoAESProducer_cfi")
0029 
0030 modifyConfigurationCalibTrackerAlpakaES_ = alpaka.makeProcessModifier(_addProcessCalibTrackerAlpakaES)
0031 
0032 # reconstruct the pixel digis and clusters with alpaka on the device
0033 from RecoLocalTracker.SiPixelClusterizer.siPixelRawToClusterPhase1_cfi import siPixelRawToClusterPhase1 as _siPixelRawToClusterAlpaka
0034 from RecoLocalTracker.SiPixelClusterizer.siPixelRawToClusterHIonPhase1_cfi import siPixelRawToClusterHIonPhase1 as _siPixelRawToClusterAlpakaHIonPhase1
0035 
0036 siPixelClustersPreSplittingAlpaka = _siPixelRawToClusterAlpaka.clone()
0037 
0038 (alpaka & pp_on_AA & ~phase2_tracker).toReplaceWith(siPixelClustersPreSplittingAlpaka,_siPixelRawToClusterAlpakaHIonPhase1.clone())
0039 
0040 (alpaka & run3_common).toModify(siPixelClustersPreSplittingAlpaka,
0041     # use the pixel channel calibrations scheme for Run 3
0042     clusterThreshold_layer1 = 4000,
0043     VCaltoElectronGain      = 1,  # all gains=1, pedestals=0
0044     VCaltoElectronGain_L1   = 1,
0045     VCaltoElectronOffset    = 0,
0046     VCaltoElectronOffset_L1 = 0)
0047 
0048 (alpaka & run3_SiPixel_2025).toModify(siPixelClustersPreSplittingAlpaka,
0049     # lowered L1 cluster charge threshold to cope with reduced charge collection efficiency in the sensor caused by radiation damage
0050     clusterThreshold_layer1 = 2000)
0051 
0052 from RecoLocalTracker.SiPixelClusterizer.siPixelPhase2DigiToCluster_cfi import siPixelPhase2DigiToCluster as _siPixelPhase2DigiToCluster
0053 
0054 # for phase2 no pixel raw2digi is available at the moment
0055 # so we skip the raw2digi step and run on pixel digis copied to gpu
0056 from SimTracker.SiPhase2Digitizer.phase2TrackerDigitizer_cfi import PixelDigitizerAlgorithmCommon
0057 
0058 (alpaka & phase2_tracker).toReplaceWith(siPixelClustersPreSplittingAlpaka, _siPixelPhase2DigiToCluster.clone(
0059     Phase2ReadoutMode = PixelDigitizerAlgorithmCommon.Phase2ReadoutMode.value(), # flag to decide Readout Mode : linear TDR (-1), dual slope with slope parameters (+1,+2,+3,+4 ...) with threshold subtraction
0060     Phase2DigiBaseline = int(PixelDigitizerAlgorithmCommon.ThresholdInElectrons_Barrel.value()), # same for barrel and endcap
0061     Phase2KinkADC = 8,
0062     ElectronPerADCGain = PixelDigitizerAlgorithmCommon.ElectronPerAdc.value()
0063 ))
0064 
0065 # reconstruct the pixel digis and clusters with alpaka on the cpu, for validation
0066 siPixelClustersPreSplittingAlpakaSerial = makeSerialClone(siPixelClustersPreSplittingAlpaka)
0067 
0068 from RecoLocalTracker.SiPixelClusterizer.siPixelDigisClustersFromSoAAlpakaPhase1_cfi import siPixelDigisClustersFromSoAAlpakaPhase1 as _siPixelDigisClustersFromSoAAlpakaPhase1
0069 from RecoLocalTracker.SiPixelClusterizer.siPixelDigisClustersFromSoAAlpakaPhase2_cfi import siPixelDigisClustersFromSoAAlpakaPhase2 as _siPixelDigisClustersFromSoAAlpakaPhase2
0070 from RecoLocalTracker.SiPixelClusterizer.siPixelDigisClustersFromSoAAlpakaHIonPhase1_cfi import siPixelDigisClustersFromSoAAlpakaHIonPhase1 as _siPixelDigisClustersFromSoAAlpakaHIonPhase1
0071 
0072 alpaka.toReplaceWith(siPixelClustersPreSplitting,_siPixelDigisClustersFromSoAAlpakaPhase1.clone(
0073     src = "siPixelClustersPreSplittingAlpaka"
0074 ))
0075 
0076 (alpaka & pp_on_AA & ~phase2_tracker).toReplaceWith(siPixelClustersPreSplitting,_siPixelDigisClustersFromSoAAlpakaHIonPhase1.clone(
0077     src = "siPixelClustersPreSplittingAlpaka"
0078 ))
0079 
0080 (alpaka & phase2_tracker).toReplaceWith(siPixelClustersPreSplitting,_siPixelDigisClustersFromSoAAlpakaPhase2.clone(
0081     clusterThreshold_layer1 = 4000,
0082     clusterThreshold_otherLayers = 4000,
0083     src = "siPixelClustersPreSplittingAlpaka",
0084     storeDigis = False,
0085     produceDigis = False
0086 ))
0087 
0088 # These produce pixelDigiErrors in Alpaka; they are constructed here because they need
0089 # siPixelClustersPreSplittingAlpaka* as input
0090 from EventFilter.SiPixelRawToDigi.siPixelDigiErrorsFromSoAAlpaka_cfi import siPixelDigiErrorsFromSoAAlpaka as _siPixelDigiErrorsFromSoAAlpaka
0091 siPixelDigiErrorsAlpaka = _siPixelDigiErrorsFromSoAAlpaka.clone(
0092     digiErrorSoASrc = cms.InputTag('siPixelClustersPreSplittingAlpaka'),
0093     fmtErrorsSoASrc = cms.InputTag('siPixelClustersPreSplittingAlpaka'),
0094     UsePhase1 = cms.bool(True)
0095 )
0096 
0097 siPixelDigiErrorsAlpakaSerial = siPixelDigiErrorsAlpaka.clone(
0098     digiErrorSoASrc = cms.InputTag('siPixelClustersPreSplittingAlpakaSerial'),
0099     fmtErrorsSoASrc = cms.InputTag('siPixelClustersPreSplittingAlpakaSerial')
0100 )
0101 
0102 # Run 3
0103 alpaka.toReplaceWith(siPixelClustersPreSplittingTask, cms.Task(
0104     # reconstruct the pixel clusters with alpaka
0105     siPixelClustersPreSplittingAlpaka,
0106     # reconstruct the pixel clusters with alpaka on the cpu (if requested by the validation)
0107     siPixelClustersPreSplittingAlpakaSerial,
0108     # reconstruct pixel digis errors legacy with alpaka on serial and device
0109     siPixelDigiErrorsAlpaka,
0110     siPixelDigiErrorsAlpakaSerial,
0111     # convert from host SoA to legacy formats (digis and clusters)
0112     siPixelClustersPreSplitting
0113 ))
0114 
0115 # Phase 2
0116 (alpaka & phase2_tracker).toReplaceWith(siPixelClustersPreSplittingTask, cms.Task(
0117     # reconstruct the pixel clusters with alpaka from copied digis
0118     siPixelClustersPreSplittingAlpaka,
0119     # reconstruct the pixel clusters with alpaka from copied digis on the cpu (if requested by the validation)
0120     siPixelClustersPreSplittingAlpakaSerial,
0121     # reconstruct pixel digis errors legacy with alpaka on serial and device
0122     siPixelDigiErrorsAlpaka,
0123     siPixelDigiErrorsAlpakaSerial,
0124     # convert the pixel digis (except errors) and clusters to the legacy format
0125     siPixelClustersPreSplitting
0126 ))