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();