Skip to content

New HLT Scouting DQM Online Client #48398

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Jul 1, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions DQM/HLTEvF/python/ScoutingJetMonitoring_cff.py
Original file line number Diff line number Diff line change
@@ -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)
13 changes: 13 additions & 0 deletions DQM/HLTEvF/python/ScoutingMuonMonitoring_cff.py
Original file line number Diff line number Diff line change
@@ -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 )
Original file line number Diff line number Diff line change
@@ -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)
2 changes: 2 additions & 0 deletions DQM/Integration/python/config/unittestinputsource_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,8 @@
'drop *',
'keep FEDRawDataCollection_rawDataCollector_*_*',
'keep GlobalObjectMapRecord_hltGtStage2ObjectMap_*_*',
'keep Run3Scouting*_*_*_*',
'keep double_hltScoutingPFPacker_*_*',
'keep edmTriggerResults_TriggerResults_*_*'
),
dropDescendantsOfDroppedBranches = cms.untracked.bool(True)
Expand Down
1 change: 1 addition & 0 deletions DQM/Integration/test/BuildFile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<test name="TestDQMOnlineClient-hlt_dqm_clientPB" command="runtest.sh hlt_dqm_clientPB-live_cfg.py"/>
<test name="TestDQMOnlineClient-hlt_dqm_sourceclient" command="runtest.sh hlt_dqm_sourceclient-live_cfg.py"/>
<test name="TestDQMOnlineClient-ngt_dqm_sourceclient" command="runtest.sh ngt_dqm_sourceclient-live_cfg.py"/>
<test name="TestDQMOnlineClient-scouting_dqm_sourceclient" command="runtest.sh scouting_dqm_sourceclient-live_cfg.py 392642"/>
<test name="TestDQMOnlineClient-info_dqm_sourceclient" command="runtest.sh info_dqm_sourceclient-live_cfg.py"/>
<test name="TestDQMOnlineClient-l1tstage2_dqm_sourceclient" command="runtest.sh l1tstage2_dqm_sourceclient-live_cfg.py"/>
<test name="TestDQMOnlineClient-l1tstage2emulator_dqm_sourceclient" command="runtest.sh l1tstage2emulator_dqm_sourceclient-live_cfg.py"/>
Expand Down
2 changes: 2 additions & 0 deletions DQMOffline/JetMET/interface/JetAnalyzer.h
Original file line number Diff line number Diff line change
Expand Up @@ -937,6 +937,8 @@ class JetAnalyzer : public DQMEDAnalyzer {
bool isPUPPIJet_;
bool isScoutingJet_;

bool isOnlineDQM_;

bool fill_jet_high_level_histo;

bool fill_CHS_histos;
Expand Down
5 changes: 4 additions & 1 deletion DQMOffline/JetMET/interface/JetMETDQMDCSFilter.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -35,6 +36,8 @@ class JetMETDQMDCSFilter {
bool verbose_;
bool filter_;
bool detectorOn_;
edm::InputTag scalersSrc_;
edm::InputTag onlineMetaDataDigiSrc_;
std::string detectorTypes_;
std::map<std::string, std::vector<int>> associationMap_;
std::map<std::string, bool> passPerDet_;
Expand Down
23 changes: 15 additions & 8 deletions DQMOffline/JetMET/src/JetAnalyzer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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<edm::InputTag>("JetCorrections");

isOnlineDQM_ = (jetType_.find("Online") != std::string::npos);

if (!isMiniAODJet_) { //in MiniAOD jet is already corrected
jetCorrectorToken_ = consumes<reco::JetCorrector>(jetCorrectorTag_);
}
Expand Down Expand Up @@ -238,7 +240,8 @@ JetAnalyzer::JetAnalyzer(const edm::ParameterSet& pSet)
// ==========================================================
edm::ConsumesCollector iC = consumesCollector();
DCSFilterForJetMonitoring_ = new JetMETDQMDCSFilter(pSet.getParameter<ParameterSet>("DCSFilterForJetMonitoring"), iC);
DCSFilterForDCSMonitoring_ = new JetMETDQMDCSFilter("ecal:hbhe:hf:ho:pixel:sistrip:es:muon", iC);
DCSFilterForDCSMonitoring_ = new JetMETDQMDCSFilter(
pSet.getParameter<ParameterSet>("DCSFilterForJetMonitoring"), "ecal:hbhe:hf:ho:pixel:sistrip:es:muon", iC);

//Trigger selectoin
edm::ParameterSet highptjetparms = pSet.getParameter<edm::ParameterSet>("highPtJetTrigger");
Expand Down Expand Up @@ -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_) {
Expand Down Expand Up @@ -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_) {
Expand Down
25 changes: 18 additions & 7 deletions DQMOffline/JetMET/src/JetMETDQMDCSFilter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -15,30 +15,41 @@ JetMETDQMDCSFilter::JetMETDQMDCSFilter(const edm::ParameterSet& pset, edm::Consu
verbose_ = pset.getUntrackedParameter<bool>("DebugOn", false);
detectorTypes_ = pset.getUntrackedParameter<std::string>("DetectorTypes", "ecal:hcal");
filter_ = !pset.getUntrackedParameter<bool>("alwaysPass", false);
scalarsToken_ = iC.consumes<DcsStatusCollection>(std::string("scalersRawToDigi"));
dcsRecordToken_ = iC.consumes<DCSRecord>(std::string("onlineMetaDataDigis"));
scalersSrc_ = pset.getUntrackedParameter<edm::InputTag>("scalerSrc", edm::InputTag("scalersRawToDigi"));
onlineMetaDataDigiSrc_ =
pset.getUntrackedParameter<edm::InputTag>("onlineMetaDataDigisSrc", edm::InputTag("onlineMetaDataDigis"));
scalarsToken_ = iC.consumes<DcsStatusCollection>(scalersSrc_);
dcsRecordToken_ = iC.consumes<DCSRecord>(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<DcsStatusCollection>(std::string("scalersRawToDigi"));
dcsRecordToken_ = iC.consumes<DCSRecord>(std::string("onlineMetaDataDigis"));

scalersSrc_ = pset.getUntrackedParameter<edm::InputTag>("scalerSrc", edm::InputTag("scalersRawToDigi"));
onlineMetaDataDigiSrc_ =
pset.getUntrackedParameter<edm::InputTag>("onlineMetaDataDigisSrc", edm::InputTag("onlineMetaDataDigis"));

scalarsToken_ = iC.consumes<DcsStatusCollection>(scalersSrc_);
dcsRecordToken_ = iC.consumes<DCSRecord>(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();
Expand Down