1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
/** \file DQMOffline/Trigger/HLTMuonMatchAndPlotContainer.cc
*
*/
#include <utility>
#include "DQMOffline/Trigger/interface/HLTMuonMatchAndPlotContainer.h"
//////////////////////////////////////////////////////////////////////////////
//////// Namespaces and Typedefs /////////////////////////////////////////////
using namespace std;
using namespace edm;
using namespace reco;
using namespace trigger;
//////////////////////////////////////////////////////////////////////////////
///Container Class Members (this is what is used by the DQM module) //////////
/// Constructor
HLTMuonMatchAndPlotContainer::HLTMuonMatchAndPlotContainer(ConsumesCollector&& iC, const ParameterSet& pset) {
plotters_.clear();
string hltProcessName = pset.getParameter<string>("hltProcessName");
ParameterSet inputTags = pset.getParameter<ParameterSet>("inputTags");
InputTag resTag = inputTags.getParameter<InputTag>("triggerResults");
InputTag sumTag = inputTags.getParameter<InputTag>("triggerSummary");
resTag = InputTag(resTag.label(), resTag.instance(), hltProcessName);
sumTag = InputTag(sumTag.label(), sumTag.instance(), hltProcessName);
trigSummaryToken_ = iC.consumes<TriggerEvent>(sumTag);
trigResultsToken_ = iC.consumes<TriggerResults>(resTag);
bsToken_ = iC.consumes<BeamSpot>(inputTags.getParameter<InputTag>("beamSpot"));
muonToken_ = iC.consumes<MuonCollection>(inputTags.getParameter<InputTag>("recoMuon"));
pvToken_ = iC.consumes<VertexCollection>(inputTags.getParameter<InputTag>("offlinePVs"));
}
/// Add a HLTMuonMatchAndPlot for a given path
void HLTMuonMatchAndPlotContainer::addPlotter(const edm::ParameterSet& pset,
std::string path,
std::string label,
bool islastfilter) {
plotters_.emplace_back(pset, std::move(path), std::move(label), islastfilter);
}
void HLTMuonMatchAndPlotContainer::beginRun(DQMStore::IBooker& iBooker,
const edm::Run& iRun,
const edm::EventSetup& iSetup) {
auto iter = plotters_.begin();
auto end = plotters_.end();
for (; iter != end; ++iter) {
iter->beginRun(iBooker, iRun, iSetup);
}
}
void HLTMuonMatchAndPlotContainer::endRun(const edm::Run& iRun, const edm::EventSetup& iSetup) {
auto iter = plotters_.begin();
auto end = plotters_.end();
for (; iter != end; ++iter) {
iter->endRun(iRun, iSetup);
}
}
void HLTMuonMatchAndPlotContainer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
// Get objects from the event.
Handle<TriggerEvent> triggerSummary;
iEvent.getByToken(trigSummaryToken_, triggerSummary);
if (!triggerSummary.isValid()) {
LogError("HLTMuonMatchAndPlot") << "Missing triggerSummary collection" << endl;
return;
}
Handle<TriggerResults> triggerResults;
iEvent.getByToken(trigResultsToken_, triggerResults);
const edm::TriggerNames& trigNames = iEvent.triggerNames(*triggerResults);
if (!triggerResults.isValid()) {
LogError("HLTMuonMatchAndPlot") << "Missing triggerResults collection" << endl;
return;
}
Handle<MuonCollection> allMuons;
iEvent.getByToken(muonToken_, allMuons);
if (!allMuons.isValid()) {
LogError("HLTMuonMatchAndPlot") << "Missing muon collection " << endl;
return;
}
Handle<BeamSpot> beamSpot;
iEvent.getByToken(bsToken_, beamSpot);
if (!beamSpot.isValid()) {
LogError("HLTMuonMatchAndPlot") << "Missing beam spot collection " << endl;
return;
}
Handle<VertexCollection> vertices;
iEvent.getByToken(pvToken_, vertices);
if (!vertices.isValid()) {
LogError("HLTMuonMatchAndPlot") << "Missing vertices collection " << endl;
return;
}
auto iter = plotters_.begin();
auto end = plotters_.end();
for (; iter != end; ++iter) {
iter->analyze(allMuons, beamSpot, vertices, triggerSummary, triggerResults, trigNames);
}
}
|