diff --git a/Configuration/ProcessModifiers/python/alpakaValidationHLT_cff.py b/Configuration/ProcessModifiers/python/alpakaValidationHLT_cff.py new file mode 100644 index 0000000000000..016b99bc1fe05 --- /dev/null +++ b/Configuration/ProcessModifiers/python/alpakaValidationHLT_cff.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +# This modifier performs the host/device validation for the Phase 2 HLT +alpakaValidationHLT = cms.Modifier() diff --git a/Configuration/PyReleaseValidation/README.md b/Configuration/PyReleaseValidation/README.md index aac59c4fc1c1f..04f5abe43f6ba 100644 --- a/Configuration/PyReleaseValidation/README.md +++ b/Configuration/PyReleaseValidation/README.md @@ -57,6 +57,7 @@ The offsets currently in use are: * 0.75: HLT phase-2 timing menu * 0.7501: HLT phase-2 tracking-only menu * 0.7502: HLT phase-2 menu, with tracking ntuple +* 0.7503: HLT phase-2 menu, CPU vs. GPU validation * 0.751: HLT phase-2 timing menu Alpaka variant * 0.752: HLT phase-2 timing menu ticl_v5 variant * 0.7521: HLT phase-2 timing menu ticl_v5, ticlv5TrackLinkingGNN variant diff --git a/Configuration/PyReleaseValidation/python/relval_Run4.py b/Configuration/PyReleaseValidation/python/relval_Run4.py index 437759fb343e2..abc6f786fcec7 100644 --- a/Configuration/PyReleaseValidation/python/relval_Run4.py +++ b/Configuration/PyReleaseValidation/python/relval_Run4.py @@ -56,6 +56,7 @@ # Phase-2 HLT tests numWFIB.extend([prefixDet+34.7501]) # HLTTrackingOnly75e33 numWFIB.extend([prefixDet+34.7502]) # HLTTrackingNtuple75e33 +numWFIB.extend([prefixDet+34.7503]) # HLTHeterogeneousValid numWFIB.extend([prefixDet+34.751]) # HLTTiming75e33, alpaka numWFIB.extend([prefixDet+34.752]) # HLTTiming75e33, ticl_v5 numWFIB.extend([prefixDet+34.7521]) # HLTTiming75e33, ticl_v5, ticlv5TrackLinkingGNN diff --git a/Configuration/PyReleaseValidation/python/relval_gpu.py b/Configuration/PyReleaseValidation/python/relval_gpu.py index 9c50b71c9da3e..8b8d52d72441e 100644 --- a/Configuration/PyReleaseValidation/python/relval_gpu.py +++ b/Configuration/PyReleaseValidation/python/relval_gpu.py @@ -83,12 +83,14 @@ prefixDet+34.612, prefixDet+61.402, prefixDet+34.712, prefixDet+34.713, + prefixDet+34.7503, prefixDet+34.751, prefixDet+61.751, # Run4, Alpaka-based PU prefixDet+234.402, prefixDet+234.4021, prefixDet+234.403, prefixDet+234.404, prefixDet+234.712, prefixDet+234.713, + prefixDet+234.7503, prefixDet+234.751, ] diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py index 3cee99c825d7a..97b6ea7ced3fe 100644 --- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py +++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py @@ -1998,6 +1998,18 @@ def condition(self, fragment, stepList, key, hasHarvest): '--customise' : 'Validation/RecoTrack/customiseTrackingNtuple.customiseTrackingNtupleHLT,Validation/RecoTrack/customiseTrackingNtuple.extendedContent' } +upgradeWFs['HLTHeterogeneousValid'] = deepcopy(upgradeWFs['HLTTiming75e33']) +upgradeWFs['HLTHeterogeneousValid'].suffix = '_HLTHeterogeneousValid' +upgradeWFs['HLTHeterogeneousValid'].offset = 0.7503 +upgradeWFs['HLTHeterogeneousValid'].step2['-s'] = upgradeWFs['HLTHeterogeneousValid'].step2['-s'].replace( + 'HLT:75e33_timing', 'HLT:75e33' +) +upgradeWFs['HLTHeterogeneousValid'].step2['--procModifiers'] = 'alpakaValidationHLT' +upgradeWFs['HLTHeterogeneousValid'].step3['-s'] = upgradeWFs['HLTHeterogeneousValid'].step3['-s'].replace( + 'HARVESTING:@hltValidation', 'HARVESTING:@hltValidation+HLTHeterogeneousMonitoringHarvesting' +) +upgradeWFs['HLTHeterogeneousValid'].step3['--procModifiers'] = 'alpakaValidationHLT' + upgradeWFs['HLTTiming75e33Alpaka'] = deepcopy(upgradeWFs['HLTTiming75e33']) upgradeWFs['HLTTiming75e33Alpaka'].suffix = '_HLT75e33TimingAlpaka' upgradeWFs['HLTTiming75e33Alpaka'].offset = 0.751 diff --git a/DQM/TrackingMonitorSource/plugins/TrackToTrackComparisonHists.cc b/DQM/TrackingMonitorSource/plugins/TrackToTrackComparisonHists.cc index ff365bd9505a0..52a44e0c52689 100644 --- a/DQM/TrackingMonitorSource/plugins/TrackToTrackComparisonHists.cc +++ b/DQM/TrackingMonitorSource/plugins/TrackToTrackComparisonHists.cc @@ -106,6 +106,7 @@ class TrackToTrackComparisonHists : public DQMEDAnalyzer { const double dxyCutForPlateau_; const double dzWRTPvCut_; const bool requireValidHLTPaths_; + bool ignoreLumiPUPlots_; bool hltPathsAreValid_ = false; std::unique_ptr genTriggerEventFlag_; @@ -174,6 +175,7 @@ TrackToTrackComparisonHists::TrackToTrackComparisonHists(const edm::ParameterSet dxyCutForPlateau_(iConfig.getParameter("dxyCutForPlateau")), dzWRTPvCut_(iConfig.getParameter("dzWRTPvCut")), requireValidHLTPaths_(iConfig.getParameter("requireValidHLTPaths")), + ignoreLumiPUPlots_(iConfig.getParameter("ignoreLumiPUPlots")), genTriggerEventFlag_(new GenericTriggerEventFlag( iConfig.getParameter("genericTriggerEventPSet"), consumesCollector(), *this)) @@ -234,8 +236,13 @@ void TrackToTrackComparisonHists::analyze(const edm::Event& iEvent, const edm::E onlinelumi = scalit->instantLumi(); PU = scalit->pileup(); } else { - edm::LogError("TrackToTrackComparisonHists") << "lumiScalersHandle not found or empty, skipping event"; - return; + // When ignoring lumi and PU plots, keep their initial values to -1 and continue. + if (ignoreLumiPUPlots_) { + edm::LogInfo("TrackToTrackComparisonHists") << "ignoring lumi and PU plots"; + } else { + edm::LogError("TrackToTrackComparisonHists") << "lumiScalersHandle not found or empty, skipping event"; + return; + } } // lambda function to get the event data products @@ -434,6 +441,7 @@ void TrackToTrackComparisonHists::fillDescriptions(edm::ConfigurationDescription edm::ParameterSetDescription desc; desc.add("requireValidHLTPaths", true); + desc.add("ignoreLumiPUPlots", false); desc.add("isCosmics", false); desc.add("monitoredTrack", edm::InputTag("hltMergedTracks")); @@ -547,13 +555,15 @@ void TrackToTrackComparisonHists::book_generic_tracks_histos(DQMStore::IBooker& // counts of tracks vs lumi // for this moment, xmin,xmax and binning are hardcoded, maybe in future in a config file! // have to add (declare) this in the .h file as well - (mes.h_onlinelumi) = ibooker.book1D(label + "_onlinelumi", - "number of tracks vs onlinelumi", - onlinelumi_nbin, - onlinelumi_rangeMin, - onlinelumi_rangeMax); - (mes.h_ls) = ibooker.book1D(label + "_ls", "number of tracks vs ls", ls_nbin, ls_rangeMin, ls_rangeMax); - (mes.h_PU) = ibooker.book1D(label + "_PU", "number of tracks vs PU", PU_nbin, PU_rangeMin, PU_rangeMax); + if (!ignoreLumiPUPlots_) { + (mes.h_onlinelumi) = ibooker.book1D(label + "_onlinelumi", + "number of tracks vs onlinelumi", + onlinelumi_nbin, + onlinelumi_rangeMin, + onlinelumi_rangeMax); + (mes.h_ls) = ibooker.book1D(label + "_ls", "number of tracks vs ls", ls_nbin, ls_rangeMin, ls_rangeMax); + (mes.h_PU) = ibooker.book1D(label + "_PU", "number of tracks vs PU", PU_nbin, PU_rangeMin, PU_rangeMax); + } } void TrackToTrackComparisonHists::book_matching_tracks_histos(DQMStore::IBooker& ibooker, @@ -643,9 +653,11 @@ void TrackToTrackComparisonHists::fill_generic_tracks_histos(generalME& mes, (mes.h_dzWRTpv)->Fill(dzWRTpv); (mes.h_charge)->Fill(charge); (mes.h_hits)->Fill(nhits); - (mes.h_onlinelumi)->Fill(onlinelumi); - (mes.h_ls)->Fill(ls); - (mes.h_PU)->Fill(PU); + if (!ignoreLumiPUPlots_) { + (mes.h_onlinelumi)->Fill(onlinelumi); + (mes.h_ls)->Fill(ls); + (mes.h_PU)->Fill(PU); + } } if (pTOnPlateau || !requirePlateau) { diff --git a/DQMOffline/Trigger/python/HeterogeneousMonitoringClient_cff.py b/DQMOffline/Trigger/python/HeterogeneousMonitoringClient_cff.py index 742c5e45ab566..0c0c264c27342 100644 --- a/DQMOffline/Trigger/python/HeterogeneousMonitoringClient_cff.py +++ b/DQMOffline/Trigger/python/HeterogeneousMonitoringClient_cff.py @@ -4,6 +4,46 @@ from DQM.SiPixelHeterogeneous.siPixelTrackComparisonHarvester_cfi import * hltSiPixelTrackComparisonHarvester = siPixelTrackComparisonHarvester.clone(topFolderName = 'HLT/HeterogeneousComparisons/PixelTracks') +from Configuration.ProcessModifiers.alpakaValidationHLT_cff import alpakaValidationHLT +alpakaValidationHLT.toModify(hltSiPixelTrackComparisonHarvester, + topFolderName = 'HLT/HeterogeneousComparisons/pixelTracksSoA' +) + +from DQMServices.Core.DQMEDHarvester import DQMEDHarvester +hltTrackToTrackEfficiencies = DQMEDHarvester("DQMGenericClient", + subDirs = cms.untracked.vstring( + "HLT/HeterogeneousComparisons/pixelTracks", + "HLT/HeterogeneousComparisons/initialStepSeedTracks", + ), + verbose = cms.untracked.uint32(0), + resolution = cms.vstring(), + efficiency = cms.vstring( + "Eff_pt 'Relative Efficiency vs Pt;#P_T;relative efficiency' ref_matched_pt ref_pt eff", + "Eff_eta 'Relative Efficiency vs Eta;#eta;relative efficiency' ref_matched_eta ref_eta eff", + "Eff_phi 'Relative Efficiency vs Phi;#phi;relative efficiency' ref_matched_phi ref_phi eff", + "Eff_dxy 'Relative Efficiency vs dxy;d_{xy};relative efficiency' ref_matched_dxy ref_dxy eff", + "Eff_dz 'Relative Efficiency vs dz;d_{z};relative efficiency' ref_matched_dz ref_dz eff", + "Eff_dxyWRTpv 'Relative Efficiency vs dxyWRTpv;d_{xy};relative efficiency' ref_matched_dxyWRTpv ref_dxyWRTpv eff", + "Eff_dzWRTpv 'Relative Efficiency vs dzWRTpv;d_{z};relative efficiency' ref_matched_dzWRTpv ref_dzWRTpv eff", + "Eff_charge 'Relative Efficiency vs charge;charge;relative efficiency' ref_matched_charge ref_charge eff", + "Eff_hits 'Relative Efficiency vs hits;number of hits;relative efficiency' ref_matched_hits ref_hits eff", + + "FakeRate_pt 'Relative Fake Rate vs Pt;#P_T;relative fake rate' mon_unMatched_pt mon_pt eff", + "FakeRate_eta 'Relative Fake Rate vs Eta;#eta;relative fake rate' mon_unMatched_eta mon_eta eff", + "FakeRate_phi 'Relative Fake Rate vs Phi;#phi;relative fake rate' mon_unMatched_phi mon_phi eff", + "FakeRate_dxy 'Relative Fake Rate vs dxy;d_{xy};relative fake rate' mon_unMatched_dxy mon_dxy eff", + "FakeRate_dz 'Relative Fake Rate vs dz;d_{z};relative fake rate' mon_unMatched_dz mon_dz eff", + "FakeRate_dxyWRTpv 'Relative Fake Rate vs dxyWRTpv;d_{xy};relative fake rate' mon_unMatched_dxyWRTpv mon_dxyWRTpv eff", + "FakeRate_dzWRTpv 'Relative Fake Rate vs dzWRTpv;d_{z};relative fake rate' mon_unMatched_dzWRTpv mon_dzWRTpv eff", + "FakeRate_charge 'Relative Fake Rate vs charge;charge;relative fake rate' mon_unMatched_charge mon_charge eff", + "FakeRate_hits 'Relative Fake Rate vs hits;number of hits;relative fake rate' mon_unMatched_hits mon_hits eff", + ), +) + HLTHeterogeneousMonitoringHarvesting = cms.Sequence( hltSiPixelTrackComparisonHarvester ) + +_HLTHeterogeneousMonitoringHarvesting = HLTHeterogeneousMonitoringHarvesting.copy() +_HLTHeterogeneousMonitoringHarvesting += hltTrackToTrackEfficiencies +alpakaValidationHLT.toReplaceWith(HLTHeterogeneousMonitoringHarvesting, _HLTHeterogeneousMonitoringHarvesting) diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepSeedsTrackToTrackSerialSync_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepSeedsTrackToTrackSerialSync_cfi.py new file mode 100644 index 0000000000000..2416e24385a86 --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepSeedsTrackToTrackSerialSync_cfi.py @@ -0,0 +1,85 @@ +import FWCore.ParameterSet.Config as cms + +hltInitialStepSeedsTrackToTrackSerialSync = cms.EDProducer("TrackToTrackComparisonHists", + dRmin = cms.double(0.002), + dxyCutForPlateau = cms.double(2.5), + dzWRTPvCut = cms.double(1000000), + genericTriggerEventPSet = cms.PSet( + ReadPrescalesFromFile = cms.bool(False), + andOr = cms.bool(False), + andOrDcs = cms.bool(False), + andOrHlt = cms.bool(False), + andOrL1 = cms.bool(False), + dbLabel = cms.string(''), + dcsInputTag = cms.InputTag("scalersRawToDigi"), + dcsPartitions = cms.vint32(), + dcsRecordInputTag = cms.InputTag("onlineMetaDataDigis"), + errorReplyDcs = cms.bool(False), + errorReplyHlt = cms.bool(False), + errorReplyL1 = cms.bool(False), + hltDBKey = cms.string(''), + hltInputTag = cms.InputTag(""), + hltPaths = cms.vstring(), + l1Algorithms = cms.vstring(), + l1BeforeMask = cms.bool(False), + l1tAlgBlkInputTag = cms.InputTag("gtStage2Digis"), + l1tExtBlkInputTag = cms.InputTag("gtStage2Digis"), + stage2 = cms.bool(True), + verbosityLevel = cms.uint32(0) + ), + histoPSet = cms.PSet( + Dxy_nbin = cms.uint32(300), + Dxy_rangeMax = cms.double(1), + Dxy_rangeMin = cms.double(-1), + Dz_nbin = cms.uint32(60), + Dz_rangeMax = cms.double(30), + Dz_rangeMin = cms.double(-30), + Eta_nbin = cms.uint32(50), + Eta_rangeMax = cms.double(4.0), + Eta_rangeMin = cms.double(-4.0), + PU_nbin = cms.uint32(200), + PU_rangeMax = cms.double(200.0), + PU_rangeMin = cms.double(0), + Phi_nbin = cms.uint32(36), + Phi_rangeMax = cms.double(3.1416), + Phi_rangeMin = cms.double(-3.1416), + Pt_nbin = cms.uint32(1000), + Pt_rangeMax = cms.double(100), + Pt_rangeMin = cms.double(0.1), + dxyRes_nbin = cms.uint32(500), + dxyRes_rangeMax = cms.double(0.05), + dxyRes_rangeMin = cms.double(-0.05), + dzRes_nbin = cms.uint32(150), + dzRes_rangeMax = cms.double(0.05), + dzRes_rangeMin = cms.double(-0.05), + etaRes_nbin = cms.uint32(300), + etaRes_rangeMax = cms.double(0.01), + etaRes_rangeMin = cms.double(-0.01), + ls_nbin = cms.uint32(300), + ls_rangeMax = cms.uint32(3000), + ls_rangeMin = cms.uint32(0), + onlinelumi_nbin = cms.uint32(375), + onlinelumi_rangeMax = cms.double(25000.0), + onlinelumi_rangeMin = cms.double(200.0), + phiRes_nbin = cms.uint32(300), + phiRes_rangeMax = cms.double(0.01), + phiRes_rangeMin = cms.double(-0.01), + ptRes_nbin = cms.uint32(100), + ptRes_rangeMax = cms.double(0.1), + ptRes_rangeMin = cms.double(-0.1) + ), + ignoreLumiPUPlots = cms.bool(True), + isCosmics = cms.bool(False), + mightGet = cms.optional.untracked.vstring, + monitoredBeamSpot = cms.InputTag("hltOnlineBeamSpot"), + monitoredPrimaryVertices = cms.InputTag("hltPhase2PixelVertices"), + monitoredTrack = cms.InputTag("hltInitialStepTrajectorySeedsLSTTracks"), + onlineMetaDataDigis = cms.InputTag("onlineMetaDataDigis"), + pTCutForPlateau = cms.double(0.9), + referenceBeamSpot = cms.InputTag("hltOnlineBeamSpot"), + referencePrimaryVertices = cms.InputTag("hltPhase2PixelVerticesSerialSync"), + referenceTrack = cms.InputTag("hltInitialStepTrajectorySeedsLSTTracksSerialSync"), + requireValidHLTPaths = cms.bool(False), + scalers = cms.InputTag("scalersRawToDigi"), + topDirName = cms.string('HLT/HeterogeneousComparisons/initialStepSeedTracks') +) diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepTrajectorySeedsLSTTracks_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepTrajectorySeedsLSTTracks_cfi.py new file mode 100644 index 0000000000000..58d4ed82d3138 --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltInitialStepTrajectorySeedsLSTTracks_cfi.py @@ -0,0 +1,9 @@ +import FWCore.ParameterSet.Config as cms +from HeterogeneousCore.AlpakaCore.functions import makeSerialClone + +hltInitialStepTrajectorySeedsLSTTracks = cms.EDProducer( + "TrackFromSeedProducer", + src = cms.InputTag("hltInitialStepTrajectorySeedsLST"), + beamSpot = cms.InputTag("hltOnlineBeamSpot"), + TTRHBuilder = cms.string("hltESPTTRHBuilderWithoutRefit") +) diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltPixelTrackToTrackSerialSync_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltPixelTrackToTrackSerialSync_cfi.py new file mode 100644 index 0000000000000..40f32a308c401 --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltPixelTrackToTrackSerialSync_cfi.py @@ -0,0 +1,85 @@ +import FWCore.ParameterSet.Config as cms + +hltPixelTrackToTrackSerialSync = cms.EDProducer("TrackToTrackComparisonHists", + dRmin = cms.double(0.002), + dxyCutForPlateau = cms.double(2.5), + dzWRTPvCut = cms.double(1000000), + genericTriggerEventPSet = cms.PSet( + ReadPrescalesFromFile = cms.bool(False), + andOr = cms.bool(False), + andOrDcs = cms.bool(False), + andOrHlt = cms.bool(False), + andOrL1 = cms.bool(False), + dbLabel = cms.string(''), + dcsInputTag = cms.InputTag("scalersRawToDigi"), + dcsPartitions = cms.vint32(), + dcsRecordInputTag = cms.InputTag("onlineMetaDataDigis"), + errorReplyDcs = cms.bool(False), + errorReplyHlt = cms.bool(False), + errorReplyL1 = cms.bool(False), + hltDBKey = cms.string(''), + hltInputTag = cms.InputTag(""), + hltPaths = cms.vstring(), + l1Algorithms = cms.vstring(), + l1BeforeMask = cms.bool(False), + l1tAlgBlkInputTag = cms.InputTag("gtStage2Digis"), + l1tExtBlkInputTag = cms.InputTag("gtStage2Digis"), + stage2 = cms.bool(True), + verbosityLevel = cms.uint32(0) + ), + histoPSet = cms.PSet( + Dxy_nbin = cms.uint32(300), + Dxy_rangeMax = cms.double(1), + Dxy_rangeMin = cms.double(-1), + Dz_nbin = cms.uint32(60), + Dz_rangeMax = cms.double(30), + Dz_rangeMin = cms.double(-30), + Eta_nbin = cms.uint32(50), + Eta_rangeMax = cms.double(4.0), + Eta_rangeMin = cms.double(-4.0), + PU_nbin = cms.uint32(200), + PU_rangeMax = cms.double(200.0), + PU_rangeMin = cms.double(0), + Phi_nbin = cms.uint32(36), + Phi_rangeMax = cms.double(3.1416), + Phi_rangeMin = cms.double(-3.1416), + Pt_nbin = cms.uint32(1000), + Pt_rangeMax = cms.double(100), + Pt_rangeMin = cms.double(0.1), + dxyRes_nbin = cms.uint32(500), + dxyRes_rangeMax = cms.double(0.05), + dxyRes_rangeMin = cms.double(-0.05), + dzRes_nbin = cms.uint32(150), + dzRes_rangeMax = cms.double(0.05), + dzRes_rangeMin = cms.double(-0.05), + etaRes_nbin = cms.uint32(300), + etaRes_rangeMax = cms.double(0.01), + etaRes_rangeMin = cms.double(-0.01), + ls_nbin = cms.uint32(300), + ls_rangeMax = cms.uint32(3000), + ls_rangeMin = cms.uint32(0), + onlinelumi_nbin = cms.uint32(375), + onlinelumi_rangeMax = cms.double(25000.0), + onlinelumi_rangeMin = cms.double(200.0), + phiRes_nbin = cms.uint32(300), + phiRes_rangeMax = cms.double(0.01), + phiRes_rangeMin = cms.double(-0.01), + ptRes_nbin = cms.uint32(100), + ptRes_rangeMax = cms.double(0.1), + ptRes_rangeMin = cms.double(-0.1) + ), + ignoreLumiPUPlots = cms.bool(True), + isCosmics = cms.bool(False), + mightGet = cms.optional.untracked.vstring, + monitoredBeamSpot = cms.InputTag("hltOnlineBeamSpot"), + monitoredPrimaryVertices = cms.InputTag("hltPhase2PixelVertices"), + monitoredTrack = cms.InputTag("hltPhase2PixelTracks"), + onlineMetaDataDigis = cms.InputTag("onlineMetaDataDigis"), + pTCutForPlateau = cms.double(0.9), + referenceBeamSpot = cms.InputTag("hltOnlineBeamSpot"), + referencePrimaryVertices = cms.InputTag("hltPhase2PixelVerticesSerialSync"), + referenceTrack = cms.InputTag("hltPhase2PixelTracksSerialSync"), + requireValidHLTPaths = cms.bool(False), + scalers = cms.InputTag("scalersRawToDigi"), + topDirName = cms.string('HLT/HeterogeneousComparisons/pixelTracks') +) diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltPixelTracksSoACompareGPUvsCPU_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltPixelTracksSoACompareGPUvsCPU_cfi.py new file mode 100644 index 0000000000000..95a4114500d2e --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltPixelTracksSoACompareGPUvsCPU_cfi.py @@ -0,0 +1,10 @@ +import FWCore.ParameterSet.Config as cms + +hltPixelTracksSoACompareGPUvsCPU = cms.EDProducer('SiPixelCompareTracksSoA', + pixelTrackReferenceSoA = cms.InputTag('hltPhase2PixelTracksSoASerialSync'), + pixelTrackTargetSoA = cms.InputTag('hltPhase2PixelTracksSoA'), + topFolderName = cms.string('HLT/HeterogeneousComparisons/pixelTracksSoA'), + useQualityCut = cms.bool(True), + minQuality = cms.string('loose'), + deltaR2cut = cms.double(0.0004), + ) diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltPixelTracksSoAMonitorCPU_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltPixelTracksSoAMonitorCPU_cfi.py new file mode 100644 index 0000000000000..12efc51be9130 --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltPixelTracksSoAMonitorCPU_cfi.py @@ -0,0 +1,9 @@ +import FWCore.ParameterSet.Config as cms + +hltPixelTracksSoAMonitorCPU = cms.EDProducer('SiPixelMonitorTrackSoA', + pixelTrackSrc = cms.InputTag('hltPhase2PixelTracksSoASerialSync'), + topFolderName = cms.string('HLT/HeterogeneousMonitoring/PixelTracksCPU'), + qualityDefinitions = cms.vstring( + 'loose', + 'highPurity' + )) diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/hltPixelTracksSoAMonitorGPU_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/hltPixelTracksSoAMonitorGPU_cfi.py new file mode 100644 index 0000000000000..b5401b344e7d1 --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/hltPixelTracksSoAMonitorGPU_cfi.py @@ -0,0 +1,9 @@ +import FWCore.ParameterSet.Config as cms + +hltPixelTracksSoAMonitorGPU = cms.EDProducer('SiPixelMonitorTrackSoA', + pixelTrackSrc = cms.InputTag('hltPhase2PixelTracksSoA'), + topFolderName = cms.string('HLT/HeterogeneousMonitoring/PixelTracksGPU'), + qualityDefinitions = cms.vstring( + 'loose', + 'highPurity' + )) diff --git a/HLTrigger/Configuration/python/HLT_75e33/paths/DQM_TRKHeterogeneousValidation_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/paths/DQM_TRKHeterogeneousValidation_cfi.py new file mode 100644 index 0000000000000..7a23555fc3aba --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/paths/DQM_TRKHeterogeneousValidation_cfi.py @@ -0,0 +1,22 @@ +import FWCore.ParameterSet.Config as cms + +from ..sequences.HLTBeginSequence_cfi import * +from ..sequences.HLTTrackingSequence_cfi import * +from ..sequences.HLTDQMTrackReconstruction_cfi import * + +hltBackend = cms.EDProducer( "AlpakaBackendProducer@alpaka" +) + +hltStatusOnGPUFilter = cms.EDFilter( "AlpakaBackendFilter", + producer = cms.InputTag( 'hltBackend','backend' ), + backends = cms.vstring( 'CudaAsync','ROCmAsync' ) +) + +DQM_TRKHeterogeneousValidation = cms.Path( + HLTBeginSequence + + hltBackend + + hltStatusOnGPUFilter + + HLTTrackingSequence + + HLTTrackingSequenceSerialSync + + HLTDQMTrackReconstruction +) diff --git a/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTDQMTrackReconstruction_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTDQMTrackReconstruction_cfi.py new file mode 100644 index 0000000000000..06ede3fa516d2 --- /dev/null +++ b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTDQMTrackReconstruction_cfi.py @@ -0,0 +1,21 @@ +import FWCore.ParameterSet.Config as cms + +from ..modules.hltPixelTracksSoAMonitorCPU_cfi import * +from ..modules.hltPixelTracksSoAMonitorGPU_cfi import * +from ..modules.hltPixelTracksSoACompareGPUvsCPU_cfi import * +from ..modules.hltPixelTrackToTrackSerialSync_cfi import * +from ..modules.hltInitialStepSeedsTrackToTrackSerialSync_cfi import * + +# Empty sequence as a placeholder to be filled when alpakaValidationHLT is active +HLTDQMTrackReconstruction = cms.Sequence() + +from Configuration.ProcessModifiers.alpakaValidationHLT_cff import alpakaValidationHLT +alpakaValidationHLT.toReplaceWith(HLTDQMTrackReconstruction, + cms.Sequence( + hltPixelTracksSoAMonitorCPU + + hltPixelTracksSoAMonitorGPU + + hltPixelTracksSoACompareGPUvsCPU + + hltPixelTrackToTrackSerialSync + + hltInitialStepSeedsTrackToTrackSerialSync + ) +) diff --git a/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTInitialStepSequence_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTInitialStepSequence_cfi.py index 3c9924121e4b4..3796ff867fb39 100644 --- a/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTInitialStepSequence_cfi.py +++ b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTInitialStepSequence_cfi.py @@ -1,4 +1,5 @@ import FWCore.ParameterSet.Config as cms +from HeterogeneousCore.AlpakaCore.functions import makeSerialClone from ..modules.hltInputLST_cfi import * from ..modules.hltInitialStepMkFitSeeds_cfi import * @@ -10,6 +11,7 @@ from ..modules.hltInitialStepTrackSelectionHighPurity_cfi import * from ..modules.hltInitialStepTracks_cfi import * from ..modules.hltInitialStepTrajectorySeedsLST_cfi import * +from ..modules.hltInitialStepTrajectorySeedsLSTTracks_cfi import * from ..modules.hltLST_cfi import * from ..modules.hltSiPhase2RecHits_cfi import * from ..sequences.HLTMkFitInputSequence_cfi import * @@ -31,6 +33,47 @@ ) +# Empty sequence as a placeholder to be filled when alpakaValidationHLT is active +HLTInitialStepSequenceSerialSync = cms.Sequence() + +hltInitialStepSeedsSerialSync = hltInitialStepSeeds.clone( + InputCollection = "hltPhase2PixelTracksSerialSync" +) +hltInitialStepSeedTracksLSTSerialSync = hltInitialStepSeedTracksLST.clone( + src = "hltInitialStepSeedsSerialSync" +) +hltInputLSTSerialSync = makeSerialClone(hltInputLST) +hltLSTSerialSync = makeSerialClone(hltLST, + lstInput = "hltInputLSTSerialSync" +) +hltInitialStepTrajectorySeedsLSTSerialSync = hltInitialStepTrajectorySeedsLST.clone( + lstOutput = "hltLSTSerialSync", + lstInput = "hltInputLSTSerialSync", + lstPixelSeeds = "hltInputLSTSerialSync" +) +hltInitialStepTrajectorySeedsLSTTracksSerialSync = hltInitialStepTrajectorySeedsLSTTracks.clone( + src = "hltInitialStepTrajectorySeedsLSTSerialSync" +) +# Sequence for CPU vs. GPU validation, to be kept in sync with nominal one: +# A copy of the nominal sequence, dropping modules not used +# and adding a module needed for CPU vs. GPU comparisons +from Configuration.ProcessModifiers.alpakaValidationHLT_cff import alpakaValidationHLT +alpakaValidationHLT.toReplaceWith(HLTInitialStepSequenceSerialSync, cms.Sequence( + hltInitialStepSeedsSerialSync + +hltInitialStepSeedTracksLSTSerialSync + +hltSiPhase2RecHits + +hltInputLSTSerialSync + +hltLSTSerialSync + +hltInitialStepTrajectorySeedsLSTSerialSync + +hltInitialStepTrajectorySeedsLSTTracksSerialSync +)) + +# A copy the nominal sequence, adding a module needed for CPU vs. GPU comparisons +_HLTHeterogeneousInitialStepSequence = HLTInitialStepSequence.copy() +_HLTHeterogeneousInitialStepSequence += hltInitialStepTrajectorySeedsLSTTracks +alpakaValidationHLT.toReplaceWith(HLTInitialStepSequence, _HLTHeterogeneousInitialStepSequence) + + from Configuration.ProcessModifiers.hltPhase2LegacyTracking_cff import hltPhase2LegacyTracking hltPhase2LegacyTracking.toReplaceWith(HLTInitialStepSequence, HLTInitialStepSequence.copyAndExclude([ diff --git a/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTPhase2PixelTracksAndVerticesSequence_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTPhase2PixelTracksAndVerticesSequence_cfi.py index dea5251365170..6c695d127a8bf 100644 --- a/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTPhase2PixelTracksAndVerticesSequence_cfi.py +++ b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTPhase2PixelTracksAndVerticesSequence_cfi.py @@ -1,4 +1,5 @@ import FWCore.ParameterSet.Config as cms +from HeterogeneousCore.AlpakaCore.functions import makeSerialClone from ..modules.hltPhase2OtRecHitsSoA_cfi import hltPhase2OtRecHitsSoA from ..modules.hltPhase2PixelFitterByHelixProjections_cfi import hltPhase2PixelFitterByHelixProjections @@ -13,7 +14,7 @@ from ..modules.hltPhase2PixelTracksSeedLayers_cfi import hltPhase2PixelTracksSeedLayers from ..modules.hltPhase2PixelTracksSoA_cfi import hltPhase2PixelTracksSoA from ..modules.hltPhase2PixelVertices_cfi import * -from ..sequences.HLTPhase2PixelVertexingSequence_cfi import HLTPhase2PixelVertexingSequence +from ..sequences.HLTPhase2PixelVertexingSequence_cfi import * from ..sequences.HLTBeamSpotSequence_cfi import HLTBeamSpotSequence HLTPhase2PixelTracksAndVerticesSequence = cms.Sequence( @@ -30,6 +31,42 @@ +hltPhase2PixelTracks ) + +# Empty sequence as a placeholder to be filled when alpakaValidationHLT is active +HLTPhase2PixelTracksAndVerticesSequenceSerialSync = cms.Sequence() + +hltPhase2PixelTracksSoASerialSync = makeSerialClone(hltPhase2PixelTracksSoA) +hltPhase2PixelTracksCAExtensionSerialSync = hltPhase2PixelTracksCAExtension.clone( + trackSrc = "hltPhase2PixelTracksSoASerialSync" +) +hltPhase2PixelTracksCutClassifierSerialSync = hltPhase2PixelTracksCutClassifier.clone( + src = "hltPhase2PixelTracksCAExtensionSerialSync", + vertices = "hltPhase2PixelVerticesSerialSync" +) +hltPhase2PixelTracksSerialSync = hltPhase2PixelTracks.clone( + originalMVAVals = cms.InputTag("hltPhase2PixelTracksCutClassifierSerialSync","MVAValues"), + originalQualVals = cms.InputTag("hltPhase2PixelTracksCutClassifierSerialSync","QualityMasks"), + originalSource = cms.InputTag("hltPhase2PixelTracksCAExtensionSerialSync") +) +# Sequence for CPU vs. GPU validation, to be kept in sync with default sequence +from Configuration.ProcessModifiers.alpakaValidationHLT_cff import alpakaValidationHLT +alpakaValidationHLT.toReplaceWith(HLTPhase2PixelTracksAndVerticesSequenceSerialSync, + cms.Sequence( + HLTBeamSpotSequence + +hltPhase2PixelTracksAndHighPtStepTrackingRegions # needed by highPtTripletStep iteration + +hltPhase2PixelFitterByHelixProjections # needed by tracker muons + +hltPhase2PixelTrackFilterByKinematics # needed by tracker muons + +hltPhase2OtRecHitsSoA + +hltPhase2PixelRecHitsExtendedSoA + +hltPhase2PixelTracksSoASerialSync + +hltPhase2PixelTracksCAExtensionSerialSync + +HLTPhase2PixelVertexingSequenceSerialSync + +hltPhase2PixelTracksCutClassifierSerialSync + +hltPhase2PixelTracksSerialSync + ) +) + + from ..modules.hltPhase2TrimmedPixelVertices_cfi import hltPhase2TrimmedPixelVertices _HLTPhase2PixelTracksAndVerticesSequenceTrimming = cms.Sequence( HLTBeamSpotSequence diff --git a/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTPhase2PixelVertexingSequence_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTPhase2PixelVertexingSequence_cfi.py index 72eefd7e5b1a5..b1cbaaa31fc3f 100644 --- a/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTPhase2PixelVertexingSequence_cfi.py +++ b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTPhase2PixelVertexingSequence_cfi.py @@ -1,7 +1,20 @@ import FWCore.ParameterSet.Config as cms +from HeterogeneousCore.AlpakaCore.functions import makeSerialClone from ..modules.hltPhase2PixelVertices_cfi import * HLTPhase2PixelVertexingSequence = cms.Sequence( hltPhase2PixelVertices ) + +# Empty sequence as a placeholder to be filled when alpakaValidationHLT is active +HLTPhase2PixelVertexingSequenceSerialSync = cms.Sequence() + +hltPhase2PixelVerticesSerialSync = hltPhase2PixelVertices.clone( + TrackCollection = "hltPhase2PixelTracksCAExtensionSerialSync" +) +# Serial sequence for CPU vs. GPU validation, to be kept in sync with default sequence +from Configuration.ProcessModifiers.alpakaValidationHLT_cff import alpakaValidationHLT +alpakaValidationHLT.toReplaceWith(HLTPhase2PixelVertexingSequenceSerialSync, + cms.Sequence(hltPhase2PixelVerticesSerialSync) +) diff --git a/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTTrackingSequence_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTTrackingSequence_cfi.py index b6f2f311f72a4..2f38100f173ea 100644 --- a/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTTrackingSequence_cfi.py +++ b/HLTrigger/Configuration/python/HLT_75e33/sequences/HLTTrackingSequence_cfi.py @@ -3,10 +3,10 @@ from ..modules.hltGeneralTracks_cfi import * from ..modules.hltTrackerClusterCheck_cfi import * from ..sequences.HLTHighPtTripletStepSequence_cfi import * -from ..sequences.HLTPhase2PixelTracksAndVerticesSequence_cfi import * from ..sequences.HLTInitialStepSequence_cfi import * from ..sequences.HLTItLocalRecoSequence_cfi import * from ..sequences.HLTOtLocalRecoSequence_cfi import * +from ..sequences.HLTPhase2PixelTracksAndVerticesSequence_cfi import * _HLTTrackingSequenceLegacy = cms.Sequence( HLTItLocalRecoSequence @@ -20,6 +20,25 @@ HLTTrackingSequence = _HLTTrackingSequenceLegacy.copyAndExclude([HLTHighPtTripletStepSequence]) + +# Empty sequence as a placeholder to be filled when alpakaValidationHLT is active +HLTTrackingSequenceSerialSync = cms.Sequence() + +# Sequence for CPU vs. GPU validation, to be kept in sync with default sequence: +# A copy of the nominal sequence, dropping modules not used +# for CPU vs. GPU validation, i.e. hltGeneralTracks. +from Configuration.ProcessModifiers.alpakaValidationHLT_cff import alpakaValidationHLT +alpakaValidationHLT.toReplaceWith(HLTTrackingSequenceSerialSync, + cms.Sequence( + HLTItLocalRecoSequence + +HLTOtLocalRecoSequence + +hltTrackerClusterCheck + +HLTPhase2PixelTracksAndVerticesSequenceSerialSync + +HLTInitialStepSequenceSerialSync + ) +) + + from Configuration.ProcessModifiers.ngtScouting_cff import ngtScouting from Configuration.ProcessModifiers.trackingLST_cff import trackingLST (ngtScouting & ~trackingLST).toReplaceWith(HLTTrackingSequence, HLTTrackingSequence.copyAndExclude([HLTInitialStepSequence])) diff --git a/HLTrigger/Configuration/python/HLT_75e33_cff.py b/HLTrigger/Configuration/python/HLT_75e33_cff.py index 5db4fc688cdf8..0abb71a072bc8 100644 --- a/HLTrigger/Configuration/python/HLT_75e33_cff.py +++ b/HLTrigger/Configuration/python/HLT_75e33_cff.py @@ -136,6 +136,8 @@ fragment.load("HLTrigger/Configuration/HLT_75e33/paths/MC_JME_cfi") fragment.load("HLTrigger/Configuration/HLT_75e33/paths/MC_TRK_cfi") +fragment.load("HLTrigger/Configuration/HLT_75e33/paths/DQM_TRKHeterogeneousValidation_cfi") + fragment.load("HLTrigger/Configuration/HLT_75e33/psets/ClusterShapeTrajectoryFilter_cfi") fragment.load("HLTrigger/Configuration/HLT_75e33/psets/HGCAL_chargeCollectionEfficiencies_cfi") fragment.load("HLTrigger/Configuration/HLT_75e33/psets/HGCAL_noise_fC_cfi") @@ -289,7 +291,6 @@ fragment.HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_FromL1TkMuon, fragment.HLT_TriMu_10_5_5_DZ_FromL1TkMuon, - fragment.HLT_Ele32_WPTight_Unseeded, fragment.HLT_Ele26_WP70_Unseeded, fragment.HLT_Photon108EB_TightID_TightIso_Unseeded, @@ -318,6 +319,9 @@ fragment.MC_TRK, fragment.MC_Ele5_Open_Unseeded, fragment.MC_Ele5_Open_L1Seeded, + + # Paths for CPU vs. GPU validation + fragment.DQM_TRKHeterogeneousValidation, fragment.HLTriggerFinalPath, fragment.HLTAnalyzerEndpath, diff --git a/HLTriggerOffline/Common/python/HLTValidation_cff.py b/HLTriggerOffline/Common/python/HLTValidation_cff.py index b693c6fe4015b..9a2eecd1e6e49 100644 --- a/HLTriggerOffline/Common/python/HLTValidation_cff.py +++ b/HLTriggerOffline/Common/python/HLTValidation_cff.py @@ -163,5 +163,3 @@ hltvalidation +trigdqm_forValidation ) - - diff --git a/Validation/Configuration/python/autoValidation.py b/Validation/Configuration/python/autoValidation.py index 4922171c10ced..bf8552ea90513 100644 --- a/Validation/Configuration/python/autoValidation.py +++ b/Validation/Configuration/python/autoValidation.py @@ -20,7 +20,7 @@ 'standardValidationNoHLTHiMix' : ['prevalidationNoHLT','validationNoHLTHiMix','validationHarvestingNoHLT'], 'HGCalValidation' : ['globalPrevalidationHGCal', 'globalValidationHGCal', 'hgcalValidatorPostProcessor'], 'BarrelValidation' : ['globalPrevalidationBarrel', 'globalValidationBarrel', 'barrelValidatorPostProcessor'], - 'MTDValidation' : ['', 'globalValidationMTD', 'mtdValidationPostProcessor'], + 'MTDValidation' : ['', 'globalValidationMTD', 'mtdValidationPostProcessor'], 'ecalValidation_phase2' : ['', 'validationECALPhase2', ''], 'TrackerPhase2Validation' : ['', 'trackerphase2ValidationSource', 'trackerphase2ValidationHarvesting'], }