5 #include <unordered_map>
39 #include "TLorentzVector.h"
44 std::pair<MonitorElement*, bool>
nME;
45 std::pair<MonitorElement*, bool>
etaME;
46 std::pair<MonitorElement*, bool>
phiME;
47 std::pair<MonitorElement*, bool>
ptME;
48 std::pair<MonitorElement*, bool>
massME;
50 std::pair<MonitorElement*, bool>
csvME;
54 std::pair<MonitorElement*, bool>
mrME;
55 std::pair<MonitorElement*, bool>
rsqME;
56 std::pair<MonitorElement*, bool>
dxyME;
57 std::pair<MonitorElement*, bool>
dzME;
59 std::pair<MonitorElement*, bool>
dRME;
61 std::pair<MonitorElement*, bool>
q1q2ME;
95 using std::unordered_map;
192 return hltPlot{std::make_pair<MonitorElement*, bool>(
nullptr,
false),
193 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_eta")),
194 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_phi")),
195 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_pt")),
196 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_mass")),
197 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_energy")),
198 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_csv")),
199 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_etaVSphi")),
200 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_pt_HEP17")),
201 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_pt_HEM17")),
202 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_MR")),
203 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_RSQ")),
204 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_dxy")),
205 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_dz")),
206 std::make_pair<MonitorElement*, bool>(
nullptr,
pset.getParameter<
bool>(
"displayInPrimary_dimass")),
207 std::make_pair<MonitorElement*, bool>(
nullptr,
false),
208 std::make_pair<MonitorElement*, bool>(
nullptr,
false),
209 std::make_pair<MonitorElement*, bool>(
nullptr,
false),
215 pset.getParameter<std::vector<double>>(
"etaBINNING"),
216 pset.getParameter<std::vector<double>>(
"ptBINNING"),
217 pset.getParameter<std::vector<double>>(
"phiBINNING"),
218 pset.getParameter<std::vector<double>>(
"massBINNING"),
219 pset.getParameter<std::vector<double>>(
"dxyBINNING"),
220 pset.getParameter<std::vector<double>>(
"dzBINNING"),
221 pset.getParameter<std::vector<double>>(
"dimassBINNING"),
222 pset.getUntrackedParameter<
bool>(
"doPlot2D",
false),
223 pset.getUntrackedParameter<
bool>(
"doPlotETA",
true),
224 pset.getUntrackedParameter<
bool>(
"doPlotMASS",
false),
225 pset.getUntrackedParameter<
bool>(
"doPlotENERGY",
false),
226 pset.getUntrackedParameter<
bool>(
"doPlotHEP17",
true),
227 pset.getUntrackedParameter<
bool>(
"doPlotCSV",
false),
228 pset.getUntrackedParameter<
bool>(
"doCALO",
false),
229 pset.getUntrackedParameter<
bool>(
"doPF",
false),
230 pset.getUntrackedParameter<
bool>(
"doPlotRazor",
false),
231 pset.getUntrackedParameter<
bool>(
"doPlotDXY",
false),
232 pset.getUntrackedParameter<
bool>(
"doPlotDZ",
false),
233 pset.getUntrackedParameter<
bool>(
"doPlotDiMass",
false)};
257 : TopFolder_(iConfig.getParameter<
std::
string>(
"TopFolder")),
258 label_(iConfig.getParameter<
std::
string>(
"label")),
259 processName_(iConfig.getParameter<
std::
string>(
"processName")),
261 debug_(iConfig.getUntrackedParameter<
bool>(
"debug",
false)),
264 beamSpot_(iConfig.getParameter<
edm::
InputTag>(
"beamspot")),
268 muCandidates_(iConfig.getParameter<
edm::
InputTag>(
"muCandidates")),
269 muCandidatesToken_(consumes<
std::
vector<
reco::RecoChargedCandidate>>(muCandidates_)),
270 eleCandidates_(iConfig.getParameter<
edm::
InputTag>(
"eleCandidates")),
271 eleCandidatesToken_(consumes<
std::
vector<
reco::RecoChargedCandidate>>(eleCandidates_)) {
325 if (
plot.pathIDX <= 0)
331 if (not plottedPathIndices[
index]) {
332 plottedPathIndices[
index] =
true;
334 std::cout <<
plot.pathNAME <<
" --> bin: " << ibin << std::endl;
342 bool moduleFOUND =
false;
344 for (
const auto& module : moduleNames) {
345 if (module ==
plot.moduleNAME)
349 std::cout <<
plot.moduleNAME << (moduleFOUND ?
"" :
"NOT") <<
" found in the list of modules" << std::endl;
352 for (
const auto& module : moduleNames) {
355 if (idx < triggerEvent->sizeFilters())
364 std::cout <<
"moduleNAME: " <<
plot.moduleNAME <<
" --> " << moduleIDX << std::endl;
368 <<
plot.pathNAME <<
" " <<
plot.moduleNAME
369 <<
" is not available ! please, fix update DQM/HLTEvF/python/HLTObjectsMonitor_cfi.py";
389 std::cout <<
"object ID " <<
id <<
" mass: " <<
mass << std::endl;
392 plot.ptME.first->Fill(
pt);
397 if (
plot.doPlotCSV) {
400 plot.csvME.first->Fill(-10.);
405 std::cout <<
"[HLTObjectsMonitor::analyze] deltaR: " <<
dR <<
" matched ? "
406 << (
dR <= 0.4 ?
"YEAP" :
"NOPE") << std::endl;
407 plot.csvME.first->Fill(it->second);
411 }
else if (
plot.doPF) {
413 plot.csvME.first->Fill(-10.);
418 std::cout <<
"[HLTObjectsMonitor::analyze] deltaR: " <<
dR <<
" matched ? "
419 << (
dR <= 0.4 ?
"YEAP" :
"NOPE") << std::endl;
420 plot.csvME.first->Fill(it->second);
427 if (
plot.doPlotENERGY)
431 if (
plot.doPlotHEP17) {
433 plot.ptMEhep17.first->Fill(
pt);
435 plot.ptMEhem17.first->Fill(
pt);
443 if (
plot.doPlotDXY) {
452 if (
plot.doPlotRazor) {
453 plot.mrME.first->Fill(MR);
454 plot.rsqME.first->Fill(RSQ);
457 if (
keys.size() < 2) {
458 if (
plot.doPlotDiMass ||
plot.doPlotDZ)
459 LogDebug(
"HLTObjectsMonitor") <<
plot.pathNAME <<
" " <<
plot.moduleNAME <<
" # objects is (" <<
keys.size()
460 <<
") less than 2 ! you probably want to either change the moduleNAME or "
461 "switch off di-object system plots (doPlotDZ: "
462 <<
plot.doPlotDZ <<
" doPlotDiMass: " <<
plot.doPlotDiMass
463 <<
") in DQM/HLTEvF/python/HLTObjectsMonitor_cfi.py)";
471 unsigned int kCnt0 = 0;
479 unsigned int kCnt1 = 0;
480 for (
const auto& key1 :
keys) {
486 double phi2 =
objects[key1].phi();
490 plot.dRME.first->Fill(
dR);
493 int q1 = (
id == 0 ? 0 :
id /
abs(
id));
496 plot.q1q2ME.first->Fill(q1q2);
500 <<
plot.pathNAME <<
" " <<
plot.moduleNAME <<
" objects have different ID !?!" <<
abs(
id)
503 if ((
id +
id2) == 0) {
509 v2.SetPtEtaPhiM(
pt2,
eta2, phi2, 0);
511 if (
plot.doPlotDiMass) {
512 TLorentzVector
v = v1 + v2;
513 plot.dimassME.first->Fill(
v.M());
522 plot.dzME.first->Fill(
dz);
541 std::cout <<
"[HLTObjectsMonitor::dqmBeginRun] extracting HLTconfig" << std::endl;
558 if (
plot.pathNAME == pathName_noVersion) {
569 std::cout <<
"plot: " <<
plot.pathNAME <<
" --> pathIDX: " <<
plot.pathIDX << std::endl;
570 std::cout <<
"[HLTObjectsMonitor::dqmBeginRun] DONE" << std::endl;
578 std::cout <<
"[HLTObjectsMonitor::bookHistograms]" << std::endl;
587 std::unordered_map<std::string, int> uniqueNames;
602 std::cout <<
p.pathNAME <<
" --> bin: " <<
i << std::endl;
609 std::cout <<
"booking plots for " <<
plot.label << std::endl;
611 if (
plot.pathIDX <= 0) {
613 <<
" is not available in the HLT menu ! no plots are going to be booked for it "
614 "(update DQM/HLTEvF/python/HLTObjectsMonitor_cfi.py)";
618 std::cout <<
"booking histograms for " <<
plot.pathNAME << std::endl;
629 plot.nME.first->setAxisTitle(
plot.xTITLE +
" # objects");
632 if (
plot.ptME.second)
640 std::vector<float> fbinning((
plot.ptBINNING).begin(), (
plot.ptBINNING).
end());
641 float* arr = &fbinning[0];
643 plot.ptME.first->setAxisTitle(
plot.xTITLE +
" p_{T} [GeV]");
646 if (
plot.phiME.second)
654 std::vector<float> fbinning((
plot.phiBINNING).begin(), (
plot.phiBINNING).
end());
655 float* arr = &fbinning[0];
657 plot.phiME.first->setAxisTitle(
plot.xTITLE +
" #phi [rad]");
660 if (
plot.doPlotETA) {
661 if (
plot.etaME.second)
669 std::vector<float> fbinning((
plot.etaBINNING).begin(), (
plot.etaBINNING).
end());
670 float* arr = &fbinning[0];
673 plot.etaME.first->setAxisTitle(
plot.xTITLE +
" #eta");
676 if (
plot.doPlotMASS) {
677 if (
plot.massME.second)
685 std::vector<float> fbinning((
plot.massBINNING).begin(), (
plot.massBINNING).
end());
686 float* arr = &fbinning[0];
689 plot.massME.first->setAxisTitle(
plot.xTITLE +
" mass [GeV]");
692 if (
plot.doPlotENERGY) {
693 if (
plot.energyME.second)
701 std::vector<float> fbinning((
plot.ptBINNING).begin(), (
plot.ptBINNING).
end());
702 float* arr = &fbinning[0];
705 plot.energyME.first->setAxisTitle(
plot.xTITLE +
" energy [GeV]");
708 if (
plot.doPlotCSV) {
709 if (
plot.csvME.second)
718 plot.csvME.first->setAxisTitle(
plot.xTITLE +
" CSV discriminator");
722 if (
plot.etaVSphiME.second)
730 std::vector<float> fbinningX((
plot.etaBINNING).begin(), (
plot.etaBINNING).
end());
731 float* arrX = &fbinningX[0];
734 std::vector<float> fbinningY((
plot.phiBINNING).begin(), (
plot.phiBINNING).
end());
735 float* arrY = &fbinningY[0];
737 plot.etaVSphiME.first->setAxisTitle(
plot.xTITLE +
" #eta", 1);
738 plot.etaVSphiME.first->setAxisTitle(
plot.xTITLE +
" #phi", 2);
741 if (
plot.doPlotHEP17) {
742 if (
plot.ptMEhep17.second)
748 std::vector<float> fbinning((
plot.ptBINNING).begin(), (
plot.ptBINNING).
end());
749 float* arr = &fbinning[0];
754 plot.ptMEhep17.first->setAxisTitle(
plot.xTITLE +
" p_{T} [GeV]", 1);
756 if (
plot.ptMEhem17.second)
764 plot.ptMEhem17.first->setAxisTitle(
plot.xTITLE +
" p_{T} [GeV]", 1);
767 if (
plot.doPlotRazor) {
768 if (
plot.mrME.second)
776 plot.mrME.first->setAxisTitle(
plot.xTITLE +
" M_{R} [GeV]", 1);
778 if (
plot.rsqME.second)
786 plot.rsqME.first->setAxisTitle(
plot.xTITLE +
" RSQ [GeV]", 1);
789 if (
plot.doPlotDXY) {
790 if (
plot.dxyME.second)
798 std::vector<float> fbinning((
plot.dxyBINNING).begin(), (
plot.dxyBINNING).
end());
799 float* arr = &fbinning[0];
801 plot.dxyME.first->setAxisTitle(
plot.xTITLE +
" d_{xy} [cm]");
805 if (
plot.dzME.second)
813 std::vector<float> fbinning((
plot.dzBINNING).begin(), (
plot.dzBINNING).
end());
814 float* arr = &fbinning[0];
816 plot.dzME.first->setAxisTitle(
plot.xTITLE +
" d_{z} [cm]");
819 if (
plot.dRME.second)
827 plot.dRME.first->setAxisTitle(
plot.xTITLE +
" dR_{obj,obj}");
829 if (
plot.dRetaVSphiME.second)
835 title =
plot.pathNAME +
" di-object dR in the #eta-#phi plane (of 1st obj)";
837 plot.dRetaVSphiME.first->setAxisTitle(
plot.xTITLE +
" #eta", 1);
838 plot.dRetaVSphiME.first->setAxisTitle(
plot.xTITLE +
" #phi", 2);
839 plot.dRetaVSphiME.first->setAxisTitle(
plot.xTITLE +
" dR_{obj,obj}", 3);
841 if (
plot.q1q2ME.second)
847 title =
plot.pathNAME +
" di-object q1xq2";
849 plot.q1q2ME.first->setAxisTitle(
plot.xTITLE +
" q_{obj1} x q_{obj2}");
851 if (
plot.doPlotDiMass) {
852 if (
plot.dimassME.second)
858 title =
plot.pathNAME +
" di-object mass";
860 std::vector<float> fbinning((
plot.dimassBINNING).begin(), (
plot.dimassBINNING).
end());
861 float* arr = &fbinning[0];
863 plot.dimassME.first->setAxisTitle(
plot.xTITLE +
" m_{obj,obj} [GeV]");
868 std::cout <<
"[HLTObjectsMonitor::bookHistograms] DONE" << std::endl;
875 double dRcut = 0.1) {
879 <<
" is not valid ! please, update DQM/HLTEvF/python/HLTObjectsMonitor_cfi.py"
880 <<
" by switching OFF doPlotDXY or updating the InputTag collection";
885 <<
" is not valid ! please, update DQM/HLTEvF/python/HLTObjectsMonitor_cfi.py"
886 <<
" by switching OFF doPlotDXY or updating the InputTag collection";
891 for (reco::RecoChargedCandidateCollection::const_iterator candidate =
candidates->begin();
894 if (
deltaR(
eta,
phi, candidate->eta(), candidate->phi()) < dRcut) {
896 dxy = (-(candidate->vx() -
beamspot->x0()) * candidate->py() +
897 (candidate->vy() -
beamspot->y0()) * candidate->px()) /
903 edm::LogWarning(
"HLTObjectsMonitor") <<
"trigger object does not match ( dR > " << dRcut
904 <<
") to any of the candidates in either " <<
muCandidates_ <<
" or "
915 double dRcut = 0.1) {
919 <<
" is not valid ! please, update DQM/HLTEvF/python/HLTObjectsMonitor_cfi.py"
920 <<
" by switching OFF doPlotDZ or updating the InputTag collection";
926 bool matched1 =
false;
927 bool matched2 =
false;
928 for (reco::RecoChargedCandidateCollection::const_iterator candidate =
candidates->begin();
931 if (
deltaR(
eta1, phi1, candidate->eta(), candidate->phi()) < dRcut) {
935 std::cout <<
"cand1: " << cand1->
pt() <<
" " << cand1->
eta() <<
" " << cand1->
phi() << std::endl;
940 LogDebug(
"HLTObjectsMonitor") <<
"trigger object1 does not match ( dR > " << dRcut
941 <<
") to any of the candidates in either " <<
muCandidates_ <<
" or "
946 for (reco::RecoChargedCandidateCollection::const_iterator candidate =
candidates->begin();
950 std::cout <<
"candidate: " << candidate->pt() <<
" cand1: " << cand1->
pt() << std::endl;
951 std::cout <<
"candidate: " << candidate->eta() <<
" cand1: " << cand1->
eta() << std::endl;
952 std::cout <<
"candidate: " << candidate->phi() <<
" cand1: " << cand1->
phi() << std::endl;
954 if (&*candidate == cand1)
957 if (
deltaR(
eta2, phi2, candidate->eta(), candidate->phi()) < dRcut) {
961 std::cout <<
"cand2: " << cand2->
pt() <<
" " << cand2->
eta() <<
" " << cand2->
phi() << std::endl;
966 LogDebug(
"HLTObjectsMonitor") <<
"trigger object2 does not match ( dR > " << dRcut
967 <<
") to any of the candidates in either " <<
muCandidates_ <<
" or "
972 dz = cand1->
vz() - cand2->
vz();