Skip to content

Commit c62b73b

Browse files
authored
Merge pull request #47992 from JavierGarciadeCastro/from-CMSSW_15_0_X_2025-04-27-0000
[15_0_X] Run SingleMu and DoubleMu triggers separately and adapt to general workflow
2 parents 34edad0 + fa80ed8 commit c62b73b

File tree

7 files changed

+195
-79
lines changed

7 files changed

+195
-79
lines changed

DQMOffline/HLTScouting/python/HLTScoutingDqmOffline_cff.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919

2020
hltScoutingMuonDqmOffline = cms.Sequence(scoutingMonitoringTagProbeMuonNoVtx
2121
* scoutingMonitoringTagProbeMuonVtx
22-
* scoutingMonitoringTriggerMuon
22+
* scoutingMonitoringTriggerMuon_DoubleMu
23+
* scoutingMonitoringTriggerMuon_SingleMu
2324
)
2425

2526
hltScoutingJetDqmOffline = cms.Sequence(jetMETDQMOfflineSourceScouting)

DQMOffline/HLTScouting/python/HLTScoutingPostProcessing_cff.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313

1414
hltScoutingMuonPostProcessing = cms.Sequence(muonEfficiencyNoVtx
1515
* muonEfficiencyVtx
16-
* muonTriggerEfficiency
16+
* muonTriggerEfficiency_DoubleMu
17+
* muonTriggerEfficiency_SingleMu
1718
)
1819

1920
hltScoutingPostProcessing = cms.Sequence(hltScoutingMuonPostProcessing + hltScoutingEGammaPostProcessing)

HLTriggerOffline/Scouting/plugins/ScoutingMuonTagProbeAnalyzer.cc

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ struct kProbeKinematicMuonHistos {
8484
struct kTagProbeMuonHistos {
8585
kProbeKinematicMuonHistos resonanceJ_numerator;
8686
kProbeKinematicMuonHistos resonanceJ_denominator;
87+
kProbeKinematicMuonHistos resonanceZ_numerator;
88+
kProbeKinematicMuonHistos resonanceZ_denominator;
8789
};
8890

8991
class ScoutingMuonTagProbeAnalyzer : public DQMGlobalEDAnalyzer<kTagProbeMuonHistos> {
@@ -207,6 +209,30 @@ void ScoutingMuonTagProbeAnalyzer::dqmAnalyze(edm::Event const& iEvent,
207209
}
208210
}
209211
}
212+
} else if ((75.0 < invMass && invMass < 107.0)) {
213+
//Boolean added because hltScoutingMuonPackerVtx collection doesn't have vertices for the moment
214+
if (runWithoutVtx_) {
215+
Run3ScoutingVertex vertex;
216+
//If probe passes tag ID, add it to the numerator
217+
if (scoutingMuonID(sct_mu_second)) {
218+
fillHistograms_resonance(histos.resonanceZ_numerator, sct_mu_second, vertex, invMass, -99.);
219+
}
220+
//Add all events to the denominator
221+
fillHistograms_resonance(histos.resonanceZ_denominator, sct_mu_second, vertex, invMass, -99.);
222+
} else {
223+
if (vtxIndx_tag.empty() || vtxIndx_probe.empty())
224+
continue;
225+
for (const auto& commonIdx : vtxIndx_tag) {
226+
if (std::find(vtxIndx_probe.begin(), vtxIndx_probe.end(), commonIdx) != vtxIndx_probe.end()) {
227+
const auto& vertex = (*sctVertex)[commonIdx];
228+
float lxy = sqrt(vertex.x() * vertex.x() + vertex.y() * vertex.y());
229+
if (scoutingMuonID(sct_mu_second)) {
230+
fillHistograms_resonance(histos.resonanceZ_numerator, sct_mu_second, vertex, invMass, lxy);
231+
}
232+
fillHistograms_resonance(histos.resonanceZ_denominator, sct_mu_second, vertex, invMass, lxy);
233+
}
234+
}
235+
}
210236
}
211237
}
212238
foundTag = true;
@@ -268,7 +294,6 @@ void ScoutingMuonTagProbeAnalyzer::fillHistograms_resonance(const kProbeKinemati
268294
histos.htrk_phiError->Fill(mu.trk_phiError());
269295
histos.htrk_dsz->Fill(mu.trk_dsz());
270296
histos.htrk_dszError->Fill(mu.trk_dszError());
271-
histos.htrk_dsz->Fill(mu.trk_dsz());
272297
histos.htrk_vx->Fill(mu.trk_vx());
273298
histos.htrk_vy->Fill(mu.trk_vy());
274299
histos.htrk_vz->Fill(mu.trk_vz());
@@ -297,6 +322,8 @@ void ScoutingMuonTagProbeAnalyzer::bookHistograms(DQMStore::IBooker& ibook,
297322
ibook.setCurrentFolder(outputInternalPath_);
298323
bookHistograms_resonance(ibook, run, iSetup, histos.resonanceJ_numerator, "resonanceJ_numerator");
299324
bookHistograms_resonance(ibook, run, iSetup, histos.resonanceJ_denominator, "resonanceJ_denominator");
325+
bookHistograms_resonance(ibook, run, iSetup, histos.resonanceZ_numerator, "resonanceZ_numerator");
326+
bookHistograms_resonance(ibook, run, iSetup, histos.resonanceZ_denominator, "resonanceZ_denominator");
300327
}
301328

302329
// Set axes labels and range
@@ -311,7 +338,7 @@ void ScoutingMuonTagProbeAnalyzer::bookHistograms_resonance(DQMStore::IBooker& i
311338
histos.hEta = ibook.book1D(name + "_Probe_sctMuon_Eta", name + "_Probe_sctMuon_Eta; Muon eta; Muons", 60, -5.0, 5.0);
312339
histos.hPhi = ibook.book1D(name + "_Probe_sctMuon_Phi", name + "_Probe_sctMuon_Phi; Muon phi; Muons", 60, -3.3, 3.3);
313340
histos.hInvMass = ibook.book1D(
314-
name + "_sctMuon_Invariant_Mass", name + "_sctMuon_Invariant_Mass;Muon Inv mass (GeV); Muons", 100, 0, 5);
341+
name + "_sctMuon_Invariant_Mass", name + "_sctMuon_Invariant_Mass;Muon Inv mass (GeV); Muons", 100, 0, 100);
315342
histos.hNormChisq = ibook.book1D(
316343
name + "_Probe_sctMuon_NormChisq", name + "_Probe_sctMuon_NormChisq; Muon normChi2; Muons", 60, 0, 5.0);
317344
histos.hTrk_dxy =

HLTriggerOffline/Scouting/plugins/ScoutingMuonTriggerAnalyzer.cc

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ scouting muon triggers (selected in python/ScoutingMuonTriggerAnalyzer_cfi.py)
4040
#include "HLTrigger/HLTcore/interface/TriggerExpressionEvaluator.h"
4141
#include "HLTrigger/HLTcore/interface/TriggerExpressionParser.h"
4242
#include "L1Trigger/L1TGlobal/interface/L1TGlobalUtil.h"
43+
#include "CommonTools/Utils/interface/StringCutObjectSelector.h"
4344

4445
// Classes to be declared
4546
class ScoutingMuonTriggerAnalyzer : public DQMEDAnalyzer {
@@ -66,6 +67,7 @@ class ScoutingMuonTriggerAnalyzer : public DQMEDAnalyzer {
6667
std::vector<std::string> l1Seeds_;
6768
TString l1Names[100] = {""};
6869
Bool_t l1Result[100] = {false};
70+
StringCutObjectSelector<Run3ScoutingMuon, false> muonsCut_;
6971

7072
// Histogram declaration
7173
// DENOMINATORS:
@@ -98,7 +100,8 @@ ScoutingMuonTriggerAnalyzer::ScoutingMuonTriggerAnalyzer(const edm::ParameterSet
98100
vtriggerSelection_{iConfig.getParameter<vector<string>>("triggerSelection")},
99101
scoutingMuonCollection_{
100102
consumes<std::vector<Run3ScoutingMuon>>(iConfig.getParameter<edm::InputTag>("ScoutingMuonCollection"))},
101-
algToken_{consumes<BXVector<GlobalAlgBlk>>(iConfig.getParameter<edm::InputTag>("AlgInputTag"))} {
103+
algToken_{consumes<BXVector<GlobalAlgBlk>>(iConfig.getParameter<edm::InputTag>("AlgInputTag"))},
104+
muonsCut_{iConfig.getParameter<std::string>("muonSelection")} {
102105
vtriggerSelector_.reserve(vtriggerSelection_.size());
103106
for (auto const& vt : vtriggerSelection_)
104107
vtriggerSelector_.push_back(triggerExpression::parse(vt));
@@ -118,6 +121,12 @@ void ScoutingMuonTriggerAnalyzer::analyze(edm::Event const& iEvent, edm::EventSe
118121
edm::LogWarning("ScoutingMonitoring") << "Run3ScoutingMuon collection not found.";
119122
return;
120123
}
124+
//Apply cuts specified in config file
125+
for (const auto& muon : *sctMuons) {
126+
if (!muonsCut_(muon)) {
127+
return;
128+
}
129+
}
121130

122131
// Check whether events pass any of the HLTriggers to add to the denominator
123132
bool passHLTDenominator = false;
@@ -248,6 +257,7 @@ void ScoutingMuonTriggerAnalyzer::fillDescriptions(edm::ConfigurationDescription
248257
desc.add<edm::InputTag>("l1tExtBlkInputTag", edm::InputTag("gtStage2Digis"));
249258
desc.add<bool>("ReadPrescalesFromFile", false);
250259
edm::ParameterSetDescription triggerConfig;
260+
desc.add<std::string>("muonSelection");
251261
triggerConfig.setAllowAnything();
252262
desc.add<edm::ParameterSetDescription>("triggerConfiguration", triggerConfig);
253263
descriptions.addWithDefaultLabel(desc);

0 commit comments

Comments
 (0)