diff --git a/DQM/HLTEvF/python/ScoutingJetMonitoring_cff.py b/DQM/HLTEvF/python/ScoutingJetMonitoring_cff.py new file mode 100644 index 0000000000000..8ac5b21d50779 --- /dev/null +++ b/DQM/HLTEvF/python/ScoutingJetMonitoring_cff.py @@ -0,0 +1,28 @@ +import FWCore.ParameterSet.Config as cms + +## See DQMOffline/HLTScouting/python/HLTScoutingDqmOffline_cff.py + +from DQMOffline.JetMET.jetMETDQMOfflineSource_cff import * + +jetDQMOnlineAnalyzerAk4ScoutingCleaned = jetDQMAnalyzerAk4ScoutingCleaned.clone( + JetType='scoutingOnline', + DCSFilterForJetMonitoring=dict(DetectorTypes = "ecal:hbhe:hf:pixel:sistrip:es:muon", + onlineMetaDataDigisSrc = cms.untracked.InputTag("hltOnlineMetaDataDigis"), + DebugOn = cms.untracked.bool(False), + alwaysPass = False) +) + +jetDQMOnlineAnalyzerAk4ScoutingUncleaned = jetDQMAnalyzerAk4ScoutingUncleaned.clone( + JetType='scoutingOnline', + DCSFilterForJetMonitoring=dict(DetectorTypes = "ecal:hbhe:hf:pixel:sistrip:es:muon", + onlineMetaDataDigisSrc = cms.untracked.InputTag("hltOnlineMetaDataDigis"), + DebugOn = cms.untracked.bool(False), + alwaysPass = False) +) + +jetDQMOnlineAnalyzerSequenceScouting = cms.Sequence(jetDQMOnlineAnalyzerAk4ScoutingUncleaned* + jetDQMOnlineAnalyzerAk4ScoutingCleaned) + +ScoutingJetMonitoring = cms.Sequence(jetPreDQMSeqScouting* + dqmAk4PFScoutingL1FastL2L3ResidualCorrectorChain* + jetDQMOnlineAnalyzerSequenceScouting) diff --git a/DQM/HLTEvF/python/ScoutingMuonMonitoring_cff.py b/DQM/HLTEvF/python/ScoutingMuonMonitoring_cff.py new file mode 100644 index 0000000000000..5a1fb18cc163c --- /dev/null +++ b/DQM/HLTEvF/python/ScoutingMuonMonitoring_cff.py @@ -0,0 +1,13 @@ +import FWCore.ParameterSet.Config as cms + +## See DQMOffline/HLTScouting/python/HLTScoutingDqmOffline_cff.py + +from HLTriggerOffline.Scouting.ScoutingMuonTriggerAnalyzer_cfi import ScoutingMuonTriggerAnalysis_DoubleMu, ScoutingMuonTriggerAnalysis_SingleMu +from HLTriggerOffline.Scouting.ScoutingMuonTagProbeAnalyzer_cfi import ScoutingMuonTagProbeAnalysisNoVtx, ScoutingMuonTagProbeAnalysisVtx + +ScoutingMuonTagProbeAnalysisNoVtxOnline = ScoutingMuonTagProbeAnalysisNoVtx.clone(OutputInternalPath = "/HLT/ScoutingOnline/Muons/NoVtx") +ScoutingMuonTagProbeAnalysisVtxOnline = ScoutingMuonTagProbeAnalysisVtx.clone(OutputInternalPath = "/HLT/ScoutingOnline/Muons/Vtx") +ScoutingMuonTriggerAnalysis_DoubleMu = ScoutingMuonTriggerAnalysis_DoubleMu.clone(OutputInternalPath = "/HLT/ScoutingOnline/Muons/L1Efficiency/DoubleMu") +ScoutingMuonTriggerAnalysis_SingleMu = ScoutingMuonTriggerAnalysis_SingleMu.clone(OutputInternalPath = "/HLT/ScoutingOnline/Muons/L1Efficiency/SingleMu") + +ScoutingMuonMonitoring = cms.Sequence( ScoutingMuonTagProbeAnalysisNoVtxOnline + ScoutingMuonTagProbeAnalysisVtxOnline + ScoutingMuonTriggerAnalysis_DoubleMu + ScoutingMuonTriggerAnalysis_SingleMu ) diff --git a/DQM/Integration/python/clients/scouting_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/scouting_dqm_sourceclient-live_cfg.py new file mode 100644 index 0000000000000..59207537fc119 --- /dev/null +++ b/DQM/Integration/python/clients/scouting_dqm_sourceclient-live_cfg.py @@ -0,0 +1,69 @@ +import FWCore.ParameterSet.Config as cms + +import sys +if 'runkey=hi_run' in sys.argv: + from Configuration.Eras.Era_Run3_pp_on_PbPb_approxSiStripClusters_cff import Run3_pp_on_PbPb_approxSiStripClusters + process = cms.Process("DQM", Run3_pp_on_PbPb_approxSiStripClusters) +else: + from Configuration.Eras.Era_Run3_2025_cff import Run3_2025 + process = cms.Process("DQM", Run3_2025) + +unitTest = False +if 'unitTest=True' in sys.argv: + unitTest=True + +if unitTest: + process.load("DQM.Integration.config.unitteststreamerinputsource_cfi") + from DQM.Integration.config.unitteststreamerinputsource_cfi import options + process.source.streamLabel = 'streamDQMOnlineScouting' +else: + process.load("DQM.Integration.config.inputsource_cfi") + from DQM.Integration.config.inputsource_cfi import options + + if not options.inputFiles: + process.source.streamLabel = "streamDQMOnlineScouting" + +process.load("DQM.Integration.config.environment_cfi") + +process.dqmEnv.subSystemFolder = 'ScoutingDQM' +process.dqmSaver.tag = 'ScoutingDQM' +process.dqmSaver.runNumber = options.runNumber +# process.dqmSaverPB.tag = 'ScoutingDQM' +# process.dqmSaverPB.runNumber = options.runNumber + +process.load("Configuration.StandardSequences.GeometryRecoDB_cff") +process.load("Configuration.StandardSequences.MagneticField_cff") + +#---- for P5 (online) DB access +process.load("DQM.Integration.config.FrontierCondition_GT_cfi") +# Condition for lxplus: change and possibly customise the GT +#from Configuration.AlCa.GlobalTag import GlobalTag as gtCustomise +#process.GlobalTag = gtCustomise(process.GlobalTag, 'auto:run3_data', '') + + +### for pp collisions +process.load("DQM.HLTEvF.ScoutingCollectionMonitor_cfi") +process.scoutingCollectionMonitor.topfoldername = "HLT/ScoutingOnline/Miscellaneous" +process.scoutingCollectionMonitor.onlyScouting = True +process.scoutingCollectionMonitor.rho = ["hltScoutingPFPacker", "rho"] +process.dqmcommon = cms.Sequence(process.dqmEnv + * process.dqmSaver)#*process.dqmSaverPB) + +process.load("DQM.HLTEvF.ScoutingMuonMonitoring_cff") +process.load("DQM.HLTEvF.ScoutingJetMonitoring_cff") + +## Run-1 L1TGT required by ScoutingJetMonitoring https://github.com/cms-sw/cmssw/blob/master/DQMOffline/JetMET/src/JetAnalyzer.cc#L2603-L2611 +process.GlobalTag.toGet.append( + cms.PSet( + record = cms.string("L1GtTriggerMenuRcd"), + tag = cms.string('L1GtTriggerMenu_CRAFT09_hlt'), + ) +) + +process.p = cms.Path(process.dqmcommon * process.scoutingCollectionMonitor * process.ScoutingMuonMonitoring * process.ScoutingJetMonitoring) + +### process customizations included here +from DQM.Integration.config.online_customizations_cfi import * +process = customise(process) +print("Global Tag used:", process.GlobalTag.globaltag.value()) +print("Final Source settings:", process.source) diff --git a/DQM/Integration/python/config/unittestinputsource_cfi.py b/DQM/Integration/python/config/unittestinputsource_cfi.py index b5b4183a68b8f..3c14b27d35b35 100644 --- a/DQM/Integration/python/config/unittestinputsource_cfi.py +++ b/DQM/Integration/python/config/unittestinputsource_cfi.py @@ -122,6 +122,8 @@ 'drop *', 'keep FEDRawDataCollection_rawDataCollector_*_*', 'keep GlobalObjectMapRecord_hltGtStage2ObjectMap_*_*', + 'keep Run3Scouting*_*_*_*', + 'keep double_hltScoutingPFPacker_*_*', 'keep edmTriggerResults_TriggerResults_*_*' ), dropDescendantsOfDroppedBranches = cms.untracked.bool(True) diff --git a/DQM/Integration/test/BuildFile.xml b/DQM/Integration/test/BuildFile.xml index 1aff27d75ca61..c5f5763d8d275 100644 --- a/DQM/Integration/test/BuildFile.xml +++ b/DQM/Integration/test/BuildFile.xml @@ -14,6 +14,7 @@ + diff --git a/DQMOffline/JetMET/interface/JetAnalyzer.h b/DQMOffline/JetMET/interface/JetAnalyzer.h index d6cd220cc532d..a8de3922ce48c 100644 --- a/DQMOffline/JetMET/interface/JetAnalyzer.h +++ b/DQMOffline/JetMET/interface/JetAnalyzer.h @@ -937,6 +937,8 @@ class JetAnalyzer : public DQMEDAnalyzer { bool isPUPPIJet_; bool isScoutingJet_; + bool isOnlineDQM_; + bool fill_jet_high_level_histo; bool fill_CHS_histos; diff --git a/DQMOffline/JetMET/interface/JetMETDQMDCSFilter.h b/DQMOffline/JetMET/interface/JetMETDQMDCSFilter.h index dde808e0a2af6..3b831fd684195 100644 --- a/DQMOffline/JetMET/interface/JetMETDQMDCSFilter.h +++ b/DQMOffline/JetMET/interface/JetMETDQMDCSFilter.h @@ -18,7 +18,8 @@ class JetMETDQMDCSFilter { public: JetMETDQMDCSFilter(const edm::ParameterSet&, edm::ConsumesCollector&); - JetMETDQMDCSFilter(const std::string& detectorTypes, + JetMETDQMDCSFilter(const edm::ParameterSet&, + const std::string& detectorTypes, edm::ConsumesCollector&, const bool verbose = false, const bool alwaysPass = false); @@ -35,6 +36,8 @@ class JetMETDQMDCSFilter { bool verbose_; bool filter_; bool detectorOn_; + edm::InputTag scalersSrc_; + edm::InputTag onlineMetaDataDigiSrc_; std::string detectorTypes_; std::map> associationMap_; std::map passPerDet_; diff --git a/DQMOffline/JetMET/src/JetAnalyzer.cc b/DQMOffline/JetMET/src/JetAnalyzer.cc index fb42cce20dd2c..bba3365ed7c63 100644 --- a/DQMOffline/JetMET/src/JetAnalyzer.cc +++ b/DQMOffline/JetMET/src/JetAnalyzer.cc @@ -82,10 +82,12 @@ JetAnalyzer::JetAnalyzer(const edm::ParameterSet& pSet) //isJPTJet_ = (std::string("jpt") ==jetType_); isPFJet_ = (std::string("pf") == jetType_); isPUPPIJet_ = (std::string("puppi") == jetType_); - isScoutingJet_ = (std::string("scouting") == jetType_); + isScoutingJet_ = (jetType_.find("scouting") != std::string::npos); isMiniAODJet_ = (std::string("miniaod") == jetType_); jetCorrectorTag_ = pSet.getParameter("JetCorrections"); + isOnlineDQM_ = (jetType_.find("Online") != std::string::npos); + if (!isMiniAODJet_) { //in MiniAOD jet is already corrected jetCorrectorToken_ = consumes(jetCorrectorTag_); } @@ -238,7 +240,8 @@ JetAnalyzer::JetAnalyzer(const edm::ParameterSet& pSet) // ========================================================== edm::ConsumesCollector iC = consumesCollector(); DCSFilterForJetMonitoring_ = new JetMETDQMDCSFilter(pSet.getParameter("DCSFilterForJetMonitoring"), iC); - DCSFilterForDCSMonitoring_ = new JetMETDQMDCSFilter("ecal:hbhe:hf:ho:pixel:sistrip:es:muon", iC); + DCSFilterForDCSMonitoring_ = new JetMETDQMDCSFilter( + pSet.getParameter("DCSFilterForJetMonitoring"), "ecal:hbhe:hf:ho:pixel:sistrip:es:muon", iC); //Trigger selectoin edm::ParameterSet highptjetparms = pSet.getParameter("highPtJetTrigger"); @@ -312,12 +315,14 @@ JetAnalyzer::~JetAnalyzer() { // *********************************************************** void JetAnalyzer::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun, edm::EventSetup const&) { if (isScoutingJet_) { + std::string baseDir = isOnlineDQM_ ? "HLT/ScoutingOnline/Jet/" : "HLT/ScoutingOffline/Jet/"; + if (jetCleaningFlag_) { - ibooker.setCurrentFolder("HLT/ScoutingOffline/Jet/Cleaned" + mInputCollection_.label()); - DirName = "HLT/ScoutingOffline/Jet/Cleaned" + mInputCollection_.label(); + ibooker.setCurrentFolder(baseDir + "Cleaned" + mInputCollection_.label()); + DirName = baseDir + "Cleaned" + mInputCollection_.label(); } else { - ibooker.setCurrentFolder("HLT/ScoutingOffline/Jet/Uncleaned" + mInputCollection_.label()); - DirName = "HLT/ScoutingOffline/Jet/Uncleaned" + mInputCollection_.label(); + ibooker.setCurrentFolder(baseDir + "Uncleaned" + mInputCollection_.label()); + DirName = baseDir + "Uncleaned" + mInputCollection_.label(); } } else { if (jetCleaningFlag_) { @@ -2614,10 +2619,12 @@ void JetAnalyzer::dqmBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetu void JetAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { //set general folders first --> change later on for different folders if (isScoutingJet_) { + std::string baseDir = isOnlineDQM_ ? "HLT/ScoutingOnline/Jet/" : "HLT/ScoutingOffline/Jet/"; + if (jetCleaningFlag_) { - DirName = "HLT/ScoutingOffline/Jet/Cleaned" + mInputCollection_.label(); + DirName = baseDir + "Cleaned" + mInputCollection_.label(); } else { - DirName = "HLT/ScoutingOffline/Jet/Uncleaned" + mInputCollection_.label(); + DirName = baseDir + "Uncleaned" + mInputCollection_.label(); } } else { if (jetCleaningFlag_) { diff --git a/DQMOffline/JetMET/src/JetMETDQMDCSFilter.cc b/DQMOffline/JetMET/src/JetMETDQMDCSFilter.cc index 7f9e2198f2a95..a81ec94bdbd31 100644 --- a/DQMOffline/JetMET/src/JetMETDQMDCSFilter.cc +++ b/DQMOffline/JetMET/src/JetMETDQMDCSFilter.cc @@ -15,30 +15,41 @@ JetMETDQMDCSFilter::JetMETDQMDCSFilter(const edm::ParameterSet& pset, edm::Consu verbose_ = pset.getUntrackedParameter("DebugOn", false); detectorTypes_ = pset.getUntrackedParameter("DetectorTypes", "ecal:hcal"); filter_ = !pset.getUntrackedParameter("alwaysPass", false); - scalarsToken_ = iC.consumes(std::string("scalersRawToDigi")); - dcsRecordToken_ = iC.consumes(std::string("onlineMetaDataDigis")); + scalersSrc_ = pset.getUntrackedParameter("scalerSrc", edm::InputTag("scalersRawToDigi")); + onlineMetaDataDigiSrc_ = + pset.getUntrackedParameter("onlineMetaDataDigisSrc", edm::InputTag("onlineMetaDataDigis")); + scalarsToken_ = iC.consumes(scalersSrc_); + dcsRecordToken_ = iC.consumes(onlineMetaDataDigiSrc_); detectorOn_ = false; if (verbose_) - edm::LogPrint("JetMETDQMDCSFilter") << " constructor: " << detectorTypes_ << std::endl; + edm::LogPrint("JetMETDQMDCSFilter") << " constructor: " << detectorTypes_ + << " onlineMetaDataSource: " << onlineMetaDataDigiSrc_.encode() << std::endl; // initialize variables initializeVars(); } -JetMETDQMDCSFilter::JetMETDQMDCSFilter(const std::string& detectorTypes, +JetMETDQMDCSFilter::JetMETDQMDCSFilter(const edm::ParameterSet& pset, + const std::string& detectorTypes, edm::ConsumesCollector& iC, const bool verbose, const bool alwaysPass) { verbose_ = verbose; detectorTypes_ = detectorTypes; filter_ = !alwaysPass; - scalarsToken_ = iC.consumes(std::string("scalersRawToDigi")); - dcsRecordToken_ = iC.consumes(std::string("onlineMetaDataDigis")); + + scalersSrc_ = pset.getUntrackedParameter("scalerSrc", edm::InputTag("scalersRawToDigi")); + onlineMetaDataDigiSrc_ = + pset.getUntrackedParameter("onlineMetaDataDigisSrc", edm::InputTag("onlineMetaDataDigis")); + + scalarsToken_ = iC.consumes(scalersSrc_); + dcsRecordToken_ = iC.consumes(onlineMetaDataDigiSrc_); detectorOn_ = false; if (verbose_) - edm::LogPrint("JetMETDQMDCSFilter") << " constructor: " << detectorTypes_ << std::endl; + edm::LogPrint("JetMETDQMDCSFilter") << " constructor with no pset: " << detectorTypes_ + << " onlineMetaDataSource: " << onlineMetaDataDigiSrc_.encode() << std::endl; // initialize variables initializeVars();