Skip to content

Commit ee14ba7

Browse files
authored
Merge pull request #48786 from cms-ngt-hlt/jet_validation_step2
[NGT] Jet Validation for Phase-2 HLT: Part 2
2 parents 78cc7ca + eefe9b1 commit ee14ba7

File tree

4 files changed

+426
-146
lines changed

4 files changed

+426
-146
lines changed

DQMServices/Components/plugins/DQMGenericClient.cc

Lines changed: 56 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -387,113 +387,71 @@ DQMGenericClient::DQMGenericClient(const ParameterSet& pset)
387387
}
388388

389389
// Parse resolution commands
390-
vstring resCmds = pset.getParameter<vstring>("resolution");
391-
for (vstring::const_iterator resCmd = resCmds.begin(); resCmd != resCmds.end(); ++resCmd) {
392-
if (resCmd->empty())
393-
continue;
394-
boost::tokenizer<elsc> tokens(*resCmd, commonEscapes);
395-
396-
vector<string> args;
397-
for (boost::tokenizer<elsc>::const_iterator iToken = tokens.begin(); iToken != tokens.end(); ++iToken) {
398-
if (iToken->empty())
399-
continue;
400-
args.push_back(*iToken);
401-
}
402-
403-
if (args.size() < 3) {
404-
LogInfo("DQMGenericClient") << "Wrong input to resCmds\n";
405-
continue;
406-
}
407-
408-
ResolOption opt;
409-
opt.namePrefix = args[0];
410-
opt.titlePrefix = args[1];
411-
opt.srcName = args[2];
412-
413-
const string typeName = args.size() == 3 ? "fit" : args[3];
414-
if (typeName == "fit")
415-
opt.type = ResType::fit;
416-
else if (typeName == "rms")
417-
opt.type = ResType::rms;
418-
else
419-
opt.type = ResType::none;
420-
opt.isProfile = false;
421-
422-
resolOptions_.push_back(opt);
423-
}
424-
425-
VPSet resolSets = pset.getUntrackedParameter<VPSet>("resolutionSets", VPSet());
426-
for (VPSet::const_iterator resolSet = resolSets.begin(); resolSet != resolSets.end(); ++resolSet) {
427-
ResolOption opt;
428-
opt.namePrefix = resolSet->getUntrackedParameter<string>("namePrefix");
429-
opt.titlePrefix = resolSet->getUntrackedParameter<string>("titlePrefix");
430-
opt.srcName = resolSet->getUntrackedParameter<string>("srcName");
431-
const string typeName = resolSet->getUntrackedParameter<string>("typeName", "fit");
432-
if (typeName == "fit")
433-
opt.type = ResType::fit;
434-
else if (typeName == "rms")
435-
opt.type = ResType::rms;
390+
std::array<std::string, 2> optionNames = {{"resolution", "resolutionProfile"}};
391+
for (auto& optName : optionNames) {
392+
vstring resCmds;
393+
if (optName.find("Profile") != std::string::npos)
394+
resCmds = pset.getUntrackedParameter<vstring>(optName, vstring());
436395
else
437-
opt.type = ResType::none;
438-
opt.isProfile = false;
439-
440-
resolOptions_.push_back(opt);
441-
}
396+
resCmds = pset.getParameter<vstring>(optName);
442397

443-
// Parse resolution profiles
444-
vstring resolProfileCmds = pset.getUntrackedParameter<vstring>("resolutionProfile", vstring());
445-
for (vstring::const_iterator resolProfileCmd = resolProfileCmds.begin(); resolProfileCmd != resolProfileCmds.end();
446-
++resolProfileCmd) {
447-
if (resolProfileCmd->empty())
448-
continue;
398+
for (vstring::const_iterator resCmd = resCmds.begin(); resCmd != resCmds.end(); ++resCmd) {
399+
if (resCmd->empty())
400+
continue;
401+
boost::tokenizer<elsc> tokens(*resCmd, commonEscapes);
449402

450-
boost::tokenizer<elsc> tokens(*resolProfileCmd, commonEscapes);
403+
vector<string> args;
404+
for (boost::tokenizer<elsc>::const_iterator iToken = tokens.begin(); iToken != tokens.end(); ++iToken) {
405+
if (iToken->empty())
406+
continue;
407+
args.push_back(*iToken);
408+
}
451409

452-
vector<string> args;
453-
for (boost::tokenizer<elsc>::const_iterator iToken = tokens.begin(); iToken != tokens.end(); ++iToken) {
454-
if (iToken->empty())
410+
if (args.size() < 3) {
411+
LogInfo("DQMGenericClient") << "Wrong input to resCmds\n";
455412
continue;
456-
args.push_back(*iToken);
457-
}
413+
}
458414

459-
if (args.size() < 4) {
460-
LogInfo("DQMGenericClient") << "Wrong input to resolProfileCmds\n";
461-
continue;
415+
ResolOption opt;
416+
opt.namePrefix = args[0];
417+
opt.titlePrefix = args[1];
418+
opt.srcName = args[2];
419+
opt.isProfile = (optName.find("Profile") != std::string::npos) ? true : false;
420+
421+
std::string typeDefault = (optName.find("Profile") != std::string::npos) ? "rms" : "fit";
422+
const string typeName = args.size() == 3 ? typeDefault : args[3];
423+
if (typeName == "fit")
424+
opt.type = ResType::fit;
425+
else if (typeName == "rms")
426+
opt.type = ResType::rms;
427+
else
428+
opt.type = ResType::none;
429+
430+
resolOptions_.push_back(opt);
462431
}
463-
ResolOption opt;
464-
opt.namePrefix = args[0];
465-
opt.titlePrefix = args[1];
466-
opt.srcName = args[2];
467-
opt.isProfile = true;
468-
469-
const string typeName = args.size() == 3 ? "rms" : args[3];
470-
if (typeName == "fit")
471-
opt.type = ResType::fit;
472-
else if (typeName == "rms")
473-
opt.type = ResType::rms;
474-
else
475-
opt.type = ResType::none;
476-
477-
resolOptions_.push_back(opt);
478432
}
479433

480-
VPSet resolProfileSets = pset.getUntrackedParameter<VPSet>("resolutionProfileSets", VPSet());
481-
for (VPSet::const_iterator resolProfileSet = resolProfileSets.begin(); resolProfileSet != resolProfileSets.end();
482-
++resolProfileSet) {
483-
ResolOption opt;
484-
opt.namePrefix = resolProfileSet->getUntrackedParameter<string>("namePrefix");
485-
opt.titlePrefix = resolProfileSet->getUntrackedParameter<string>("titlePrefix");
486-
opt.srcName = resolProfileSet->getUntrackedParameter<string>("srcName");
487-
const string typeName = resolProfileSet->getUntrackedParameter<string>("typeName", "rms");
488-
if (typeName == "fit")
489-
opt.type = ResType::fit;
490-
else if (typeName == "rms")
491-
opt.type = ResType::rms;
492-
else
493-
opt.type = ResType::none;
494-
opt.isProfile = true;
495-
496-
resolOptions_.push_back(opt);
434+
std::array<std::string, 2> optionSetNames = {{"resolutionProfileSets", "resolutionSets"}};
435+
for (auto& optName : optionSetNames) {
436+
VPSet resSets = pset.getUntrackedParameter<VPSet>(optName, VPSet());
437+
for (VPSet::const_iterator resSet = resSets.begin(); resSet != resSets.end(); ++resSet) {
438+
ResolOption opt;
439+
opt.namePrefix = resSet->getUntrackedParameter<string>("namePrefix");
440+
opt.titlePrefix = resSet->getUntrackedParameter<string>("titlePrefix");
441+
opt.srcName = resSet->getUntrackedParameter<string>("srcName");
442+
443+
std::string typeDefault = (optName.find("Profile") != std::string::npos) ? "rms" : "fit";
444+
const string typeName = resSet->getUntrackedParameter<string>("typeName", typeDefault);
445+
if (typeName == "fit")
446+
opt.type = ResType::fit;
447+
else if (typeName == "rms")
448+
opt.type = ResType::rms;
449+
else
450+
opt.type = ResType::none;
451+
opt.isProfile = (optName.find("Profile") != std::string::npos) ? true : false;
452+
453+
resolOptions_.push_back(opt);
454+
}
497455
}
498456

499457
// Parse profiles

Validation/RecoJets/plugins/JetTester.cc

Lines changed: 64 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,8 @@ void JetTester::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun,
239239
std::vector<double> PhiRange = {-3.5, 3.5};
240240
int n_PtBins = 50;
241241
std::vector<double> PtRange = {0, 1000};
242-
int n_RespBins = 60;
243-
std::vector<double> RespRange = {0, 3};
242+
int n_RespBins = 70;
243+
std::vector<double> RespRange = {0, 3.5};
244244

245245
// Event variables
246246
mNvtx = ibooker.book1D("Nvtx", "number of vertices", 60, 0, 60);
@@ -343,11 +343,11 @@ void JetTester::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun,
343343

344344
// DeltaR distance jet
345345
h2d_DeltaR_vs_Eta = ibooker.book2D(
346-
"h2d_DeltaR_Eta", "#Delta R Jets;#eta^{{reco}};#Delta R", n_EtaBins, EtaRange[0], EtaRange[1], 50, 0.0, 0.5);
346+
"h2d_DeltaR_Eta", "#Delta R Jets;#eta^{reco};#Delta R", n_EtaBins, EtaRange[0], EtaRange[1], 50, 0.0, 0.5);
347347
h2d_DeltaR_vs_Phi = ibooker.book2D(
348-
"h2d_DeltaR_Phi", "#Delta R Jets;#phi^{{reco}};#Delta R", n_PhiBins, PhiRange[0], PhiRange[1], 50, 0.0, 0.5);
348+
"h2d_DeltaR_Phi", "#Delta R Jets;#phi^{reco};#Delta R", n_PhiBins, PhiRange[0], PhiRange[1], 50, 0.0, 0.5);
349349
h2d_DeltaR_vs_Pt = ibooker.book2D(
350-
"h2d_DeltaR_Pt", "#Delta R Jets;p_{T}^{{reco}};#Delta R", n_PtBins, PtRange[0], PtRange[1], 50, 0.0, 0.5);
350+
"h2d_DeltaR_Pt", "#Delta R Jets;p_{T}^{reco};#Delta R", n_PtBins, PtRange[0], PtRange[1], 50, 0.0, 0.5);
351351

352352
// Duplicated jet
353353
mDuplicatesJetEta = ibooker.book1D(
@@ -399,11 +399,11 @@ void JetTester::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun,
399399

400400
// DeltaR distance gen jet
401401
h2d_DeltaR_vs_GenEta = ibooker.book2D(
402-
"h2d_DeltaR_GenEta", "#Delta R Gen Jets;#eta^{{gen}};#Delta R", n_EtaBins, EtaRange[0], EtaRange[1], 50, 0.0, 0.5);
402+
"h2d_DeltaR_GenEta", "#Delta R Gen Jets;#eta^{gen};#Delta R", n_EtaBins, EtaRange[0], EtaRange[1], 50, 0.0, 0.5);
403403
h2d_DeltaR_vs_GenPhi = ibooker.book2D(
404-
"h2d_DeltaR_GenPhi", "#Delta R Gen Jets;#phi^{{gen}};#Delta R", n_PhiBins, PhiRange[0], PhiRange[1], 50, 0.0, 0.5);
404+
"h2d_DeltaR_GenPhi", "#Delta R Gen Jets;#phi^{gen};#Delta R", n_PhiBins, PhiRange[0], PhiRange[1], 50, 0.0, 0.5);
405405
h2d_DeltaR_vs_GenPt = ibooker.book2D(
406-
"h2d_DeltaR_GenPt", "#Delta R Gen Jets;p_{T}^{{gen}};#Delta R", n_PtBins, PtRange[0], PtRange[1], 50, 0.0, 0.5);
406+
"h2d_DeltaR_GenPt", "#Delta R Gen Jets;p_{T}^{gen};#Delta R", n_PtBins, PtRange[0], PtRange[1], 50, 0.0, 0.5);
407407

408408
// Duplicated gen jet
409409
mDuplicatesGenEta = ibooker.book1D(
@@ -431,23 +431,23 @@ void JetTester::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun,
431431

432432
// Response
433433
h2d_JetPtRecoOverGen_vs_GenEta = ibooker.book2D("h2d_PtRecoOverGen_GenEta",
434-
"Response Reco Jets;#eta^{{gen}};p_{{T}}^{{reco}}/p_{{T}}^{{gen}}",
434+
"Response Reco Jets;#eta^{gen};p_{T}^{reco}/p_{T}^{gen}",
435435
n_EtaBins,
436436
EtaRange[0],
437437
EtaRange[1],
438438
n_RespBins,
439439
RespRange[0],
440440
RespRange[1]);
441441
h2d_JetPtRecoOverGen_vs_GenPhi = ibooker.book2D("h2d_PtRecoOverGen_GenPhi",
442-
"Response Reco Jets;#phi^{{gen}};p_{{T}}^{{reco}}/p_{{T}}^{{gen}}",
442+
"Response Reco Jets;#phi^{gen};p_{T}^{reco}/p_{T}^{gen}",
443443
n_PhiBins,
444444
PhiRange[0],
445445
PhiRange[1],
446446
n_RespBins,
447447
RespRange[0],
448448
RespRange[1]);
449449
h2d_JetPtRecoOverGen_vs_GenPt = ibooker.book2D("h2d_PtRecoOverGen_GenPt",
450-
"Response Reco Jets;p_{T}^{{gen}};p_{{T}}^{{reco}}/p_{{T}}^{{gen}}",
450+
"Response Reco Jets;p_{T}^{gen};p_{T}^{reco}/p_{T}^{gen}",
451451
n_PtBins,
452452
PtRange[0],
453453
PtRange[1],
@@ -528,6 +528,52 @@ void JetTester::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun,
528528
RespRange[0],
529529
RespRange[1]);
530530

531+
h2d_chHadMult_vs_pt[j] = ibooker.book2D(
532+
fmt::format("h2d_chHadMult_pt_{}", etaRegion),
533+
fmt::format("Profiled charged HAD multiplicity - {};p_{{T}}^{{reco}};charged HAD multiplicity", etaLabel),
534+
n_PtBins,
535+
PtRange[0],
536+
PtRange[1],
537+
50,
538+
0,
539+
50);
540+
h2d_neHadMult_vs_pt[j] = ibooker.book2D(
541+
fmt::format("h2d_neHadMult_pt_{}", etaRegion),
542+
fmt::format("Profiled neutral HAD multiplicity - {};p_{{T}}^{{reco}};neutral HAD multiplicity", etaLabel),
543+
n_PtBins,
544+
PtRange[0],
545+
PtRange[1],
546+
50,
547+
0,
548+
50);
549+
h2d_chMult_vs_pt[j] = ibooker.book2D(
550+
fmt::format("h2d_chMult_pt_{}", etaRegion),
551+
fmt::format("Profiled charged multiplicity - {};p_{{T}}^{{reco}};charged multiplicity", etaLabel),
552+
n_PtBins,
553+
PtRange[0],
554+
PtRange[1],
555+
50,
556+
0,
557+
50);
558+
h2d_neMult_vs_pt[j] = ibooker.book2D(
559+
fmt::format("h2d_neMult_pt_{}", etaRegion),
560+
fmt::format("Profiled neutral multiplicity - {};p_{{T}}^{{reco}};neutral EM multiplicity", etaLabel),
561+
n_PtBins,
562+
PtRange[0],
563+
PtRange[1],
564+
50,
565+
0,
566+
50);
567+
h2d_phoMult_vs_pt[j] =
568+
ibooker.book2D(fmt::format("h2d_phoMult_pt_{}", etaRegion),
569+
fmt::format("Profiled photon multiplicity - {};p_{{T}}^{{reco}};photon multiplicity", etaLabel),
570+
n_PtBins,
571+
PtRange[0],
572+
PtRange[1],
573+
15,
574+
0,
575+
15);
576+
531577
h2d_chHad_vs_pt[j] = ibooker.book2D(
532578
fmt::format("h2d_chHad_pt_{}", etaRegion),
533579
fmt::format("Profiled charged HAD energy fraction - {};p_{{T}}^{{reco}};charged HAD energy fraction", etaLabel),
@@ -564,6 +610,7 @@ void JetTester::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun,
564610
40,
565611
0,
566612
1);
613+
567614
h2d_JetPtRecoOverGen_vs_chHad[j] = ibooker.book2D(
568615
fmt::format("h2d_PtRecoOverGen_chHad_{}", etaRegion),
569616
fmt::format("Response Reco Jets - {};charged HAD energy Fraction;p_{{T}}^{{reco}}/p_{{T}}^{{gen}}", etaLabel),
@@ -1189,6 +1236,12 @@ void JetTester::analyze(const edm::Event& mEvent, const edm::EventSetup& mSetup)
11891236
chargedHadronMultiplicity_EtaBins[j]->Fill((*pfJets)[ijet].chargedHadronMultiplicity());
11901237
chargedMultiplicity_EtaBins[j]->Fill((*pfJets)[ijet].chargedMultiplicity());
11911238

1239+
h2d_chHadMult_vs_pt[j]->Fill(recoJets[ijet].pt(), (*pfJets)[ijet].chargedHadronMultiplicity());
1240+
h2d_neHadMult_vs_pt[j]->Fill(recoJets[ijet].pt(), (*pfJets)[ijet].neutralHadronMultiplicity());
1241+
h2d_chMult_vs_pt[j]->Fill(recoJets[ijet].pt(), (*pfJets)[ijet].chargedMultiplicity());
1242+
h2d_neMult_vs_pt[j]->Fill(recoJets[ijet].pt(), (*pfJets)[ijet].neutralMultiplicity());
1243+
h2d_phoMult_vs_pt[j]->Fill(recoJets[ijet].pt(), (*pfJets)[ijet].photonMultiplicity());
1244+
11921245
h2d_chHad_vs_pt[j]->Fill(recoJets[ijet].pt(), (*pfJets)[ijet].chargedHadronEnergyFraction());
11931246
h2d_neHad_vs_pt[j]->Fill(recoJets[ijet].pt(), (*pfJets)[ijet].neutralHadronEnergyFraction());
11941247
h2d_chEm_vs_pt[j]->Fill(recoJets[ijet].pt(), (*pfJets)[ijet].chargedEmEnergyFraction());

Validation/RecoJets/plugins/JetTester.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,13 @@ class JetTester : public DQMEDAnalyzer {
198198
std::array<MonitorElement *, etaSize> h2d_JetPtCorrOverReco_vs_Phi_EtaBins;
199199
std::array<MonitorElement *, etaSize> h2d_JetPtCorrOverReco_vs_Pt_EtaBins;
200200

201+
// Jet charged/neutral multiplicities profiled in pt
202+
std::array<MonitorElement *, etaSize> h2d_chHadMult_vs_pt;
203+
std::array<MonitorElement *, etaSize> h2d_neHadMult_vs_pt;
204+
std::array<MonitorElement *, etaSize> h2d_chMult_vs_pt;
205+
std::array<MonitorElement *, etaSize> h2d_neMult_vs_pt;
206+
std::array<MonitorElement *, etaSize> h2d_phoMult_vs_pt;
207+
201208
// Jet em/had fractions profiled in pt
202209
std::array<MonitorElement *, etaSize> h2d_chHad_vs_pt;
203210
std::array<MonitorElement *, etaSize> h2d_neHad_vs_pt;

0 commit comments

Comments
 (0)