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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
#ifndef HLTrigger_HLTcore_HLTEventAnalyzerRAW_h
#define HLTrigger_HLTcore_HLTEventAnalyzerRAW_h
/** \class HLTEventAnalyzerRAW
*
*
* This class is an EDAnalyzer analyzing the combined HLT information for RAW
*
*
* \author Martin Grunewald
*
*/
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/stream/EDAnalyzer.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
#include "DataFormats/Common/interface/TriggerResults.h"
#include "DataFormats/HLTReco/interface/TriggerEventWithRefs.h"
namespace edm {
class ConfigurationDescriptions;
}
//
// class declaration
//
class HLTEventAnalyzerRAW : public edm::stream::EDAnalyzer<> {
public:
explicit HLTEventAnalyzerRAW(const edm::ParameterSet&);
~HLTEventAnalyzerRAW() override = default;
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
void beginRun(edm::Run const&, edm::EventSetup const&) override;
void endRun(edm::Run const&, edm::EventSetup const&) override {}
void analyze(const edm::Event&, const edm::EventSetup&) override;
virtual void analyzeTrigger(const edm::Event&, const edm::EventSetup&, const std::string& triggerName);
private:
using LOG = edm::LogVerbatim;
static constexpr const char* logMsgType_ = "HLTEventAnalyzerRAW";
template <class TVID, class TVREF>
void showObjects(TVID const& vids, TVREF const& vrefs, std::string const& name) const;
template <class TREF>
void showObject(LOG& log, TREF const& ref) const;
/// module config parameters
const std::string processName_;
const std::string triggerName_;
const edm::InputTag triggerResultsTag_;
const edm::EDGetTokenT<edm::TriggerResults> triggerResultsToken_;
const edm::InputTag triggerEventWithRefsTag_;
const edm::EDGetTokenT<trigger::TriggerEventWithRefs> triggerEventWithRefsToken_;
/// additional class data members
bool const verbose_;
bool const permissive_;
edm::Handle<edm::TriggerResults> triggerResultsHandle_;
edm::Handle<trigger::TriggerEventWithRefs> triggerEventWithRefsHandle_;
HLTConfigProvider hltConfig_;
/// payload extracted from TriggerEventWithRefs
trigger::Vids photonIds_;
trigger::VRphoton photonRefs_;
trigger::Vids electronIds_;
trigger::VRelectron electronRefs_;
trigger::Vids muonIds_;
trigger::VRmuon muonRefs_;
trigger::Vids jetIds_;
trigger::VRjet jetRefs_;
trigger::Vids compositeIds_;
trigger::VRcomposite compositeRefs_;
trigger::Vids basemetIds_;
trigger::VRbasemet basemetRefs_;
trigger::Vids calometIds_;
trigger::VRcalomet calometRefs_;
trigger::Vids pixtrackIds_;
trigger::VRpixtrack pixtrackRefs_;
trigger::Vids l1emIds_;
trigger::VRl1em l1emRefs_;
trigger::Vids l1muonIds_;
trigger::VRl1muon l1muonRefs_;
trigger::Vids l1jetIds_;
trigger::VRl1jet l1jetRefs_;
trigger::Vids l1etmissIds_;
trigger::VRl1etmiss l1etmissRefs_;
trigger::Vids l1hfringsIds_;
trigger::VRl1hfrings l1hfringsRefs_;
trigger::Vids l1tmuonIds_;
trigger::VRl1tmuon l1tmuonRefs_;
trigger::Vids l1tmuonShowerIds_;
trigger::VRl1tmuonShower l1tmuonShowerRefs_;
trigger::Vids l1tegammaIds_;
trigger::VRl1tegamma l1tegammaRefs_;
trigger::Vids l1tjetIds_;
trigger::VRl1tjet l1tjetRefs_;
trigger::Vids l1ttauIds_;
trigger::VRl1ttau l1ttauRefs_;
trigger::Vids l1tetsumIds_;
trigger::VRl1tetsum l1tetsumRefs_;
/// Phase 2
trigger::Vids l1ttkmuIds_;
trigger::VRl1ttkmuon l1ttkmuRefs_;
trigger::Vids l1ttkeleIds_;
trigger::VRl1ttkele l1ttkeleRefs_;
trigger::Vids l1ttkemIds_;
trigger::VRl1ttkem l1ttkemRefs_;
trigger::Vids l1tpfjetIds_;
trigger::VRl1tpfjet l1tpfjetRefs_;
trigger::Vids l1tpftauIds_;
trigger::VRl1tpftau l1tpftauRefs_;
trigger::Vids l1thpspftauIds_;
trigger::VRl1thpspftau l1thpspftauRefs_;
trigger::Vids l1tpftrackIds_;
trigger::VRl1tpftrack l1tpftrackRefs_;
trigger::Vids pfjetIds_;
trigger::VRpfjet pfjetRefs_;
trigger::Vids pftauIds_;
trigger::VRpftau pftauRefs_;
trigger::Vids pfmetIds_;
trigger::VRpfmet pfmetRefs_;
trigger::Vids l1tp2gtcandIds_;
trigger::VRl1tp2gtcand l1tp2gtcandRefs_;
};
template <class TVID, class TVREF>
void HLTEventAnalyzerRAW::showObjects(TVID const& vids, TVREF const& vrefs, std::string const& name) const {
size_t const size = vids.size();
assert(size == vrefs.size());
if (size == 0) {
return;
}
LOG(logMsgType_) << " " << name << ": size=" << size;
for (size_t idx = 0; idx < size; ++idx) {
LOG log(logMsgType_);
log << " [" << idx << "] id=" << vids[idx] << " ";
auto const& ref = vrefs[idx];
if (permissive_ and not ref.isAvailable()) {
log << "(Ref with id=" << ref.id() << " not available)";
} else {
showObject(log, ref);
}
}
}
template <class TREF>
void HLTEventAnalyzerRAW::showObject(LOG& log, TREF const& ref) const {
log << "pt=" << ref->pt() << " eta=" << ref->eta() << " phi=" << ref->phi() << " mass=" << ref->mass();
}
template <>
void HLTEventAnalyzerRAW::showObject(LOG& log, trigger::VRl1hfrings::value_type const& ref) const;
#endif // HLTrigger_HLTcore_HLTEventAnalyzerRAW_h
|