CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
HLTEventAnalyzerAOD.cc
Go to the documentation of this file.
1 
16 
17 #include <cassert>
18 
19 //
20 // constructors and destructor
21 //
23  : processName_(ps.getParameter<std::string>("processName")),
24  triggerName_(ps.getParameter<std::string>("triggerName")),
25  triggerResultsTag_(ps.getParameter<edm::InputTag>("triggerResults")),
26  triggerResultsToken_(consumes<edm::TriggerResults>(triggerResultsTag_)),
27  triggerEventTag_(ps.getParameter<edm::InputTag>("triggerEvent")),
28  triggerEventToken_(consumes<trigger::TriggerEvent>(triggerEventTag_)),
29  hltPrescaleProvider_(ps, consumesCollector(), *this) {
30  using namespace std;
31  using namespace edm;
32 
33  LogVerbatim("HLTEventAnalyzerAOD") << "HLTEventAnalyzerAOD configuration: " << endl
34  << " ProcessName = " << processName_ << endl
35  << " TriggerName = " << triggerName_ << endl
36  << " TriggerResultsTag = " << triggerResultsTag_.encode() << endl
37  << " TriggerEventTag = " << triggerEventTag_.encode() << endl;
38 }
39 
41 
42 //
43 // member functions
44 //
47  desc.add<std::string>("processName", "HLT");
48  desc.add<std::string>("triggerName", "@");
49  desc.add<edm::InputTag>("triggerResults", edm::InputTag("TriggerResults", "", "HLT"));
50  desc.add<edm::InputTag>("triggerEvent", edm::InputTag("hltTriggerSummaryAOD", "", "HLT"));
51  desc.add<unsigned int>("stageL1Trigger", 1);
52  descriptions.add("hltEventAnalyzerAODDefault", desc);
53 }
54 
55 void HLTEventAnalyzerAOD::endRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {}
56 
57 void HLTEventAnalyzerAOD::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {
58  using namespace std;
59  using namespace edm;
60 
61  bool changed(true);
62  if (hltPrescaleProvider_.init(iRun, iSetup, processName_, changed)) {
64 
65  if (changed) {
66  // check if trigger name in (new) config
67  if (triggerName_ != "@") { // "@" means: analyze all triggers in config
68  const unsigned int n(hltConfig.size());
69  const unsigned int triggerIndex(hltConfig.triggerIndex(triggerName_));
70  if (triggerIndex >= n) {
71  LogVerbatim("HLTEventAnalyzerAOD")
72  << "HLTEventAnalyzerAOD::analyze:"
73  << " TriggerName " << triggerName_ << " not available in (new) config!" << endl;
74  LogVerbatim("HLTEventAnalyzerAOD") << "Available TriggerNames are: " << endl;
75  hltConfig.dump("Triggers");
76  }
77  }
78  hltConfig.dump("ProcessName");
79  hltConfig.dump("GlobalTag");
80  hltConfig.dump("TableName");
81  hltConfig.dump("Streams");
82  hltConfig.dump("Datasets");
83  hltConfig.dump("PrescaleTable");
84  hltConfig.dump("ProcessPSet");
85  }
86  } else {
87  LogVerbatim("HLTEventAnalyzerAOD") << "HLTEventAnalyzerAOD::analyze:"
88  << " config extraction failure with process name " << processName_ << endl;
89  }
90 }
91 
92 // ------------ method called to produce the data ------------
94  using namespace std;
95  using namespace edm;
96 
97  LogVerbatim("HLTEventAnalyzerAOD") << endl;
98 
99  // get event products
102  LogVerbatim("HLTEventAnalyzerAOD")
103  << "HLTEventAnalyzerAOD::analyze: Error in getting TriggerResults product from Event!" << endl;
104  return;
105  }
107  if (!triggerEventHandle_.isValid()) {
108  LogVerbatim("HLTEventAnalyzerAOD")
109  << "HLTEventAnalyzerAOD::analyze: Error in getting TriggerEvent product from Event!" << endl;
110  return;
111  }
112 
114 
115  // sanity check
116  assert(triggerResultsHandle_->size() == hltConfig.size());
117 
118  // analyze this event for the triggers requested
119  if (triggerName_ == "@") {
120  const unsigned int n(hltConfig.size());
121  for (unsigned int i = 0; i != n; ++i) {
122  analyzeTrigger(iEvent, iSetup, hltConfig.triggerName(i));
123  }
124  } else {
125  analyzeTrigger(iEvent, iSetup, triggerName_);
126  }
127 
128  return;
129 }
130 
132  const edm::EventSetup& iSetup,
133  const std::string& triggerName) {
134  using namespace std;
135  using namespace edm;
136  using namespace reco;
137  using namespace trigger;
138 
139  LogVerbatim("HLTEventAnalyzerAOD") << endl;
140 
142 
143  const unsigned int n(hltConfig.size());
144  const unsigned int triggerIndex(hltConfig.triggerIndex(triggerName));
145  assert(triggerIndex == iEvent.triggerNames(*triggerResultsHandle_).triggerIndex(triggerName));
146 
147  // abort on invalid trigger name
148  if (triggerIndex >= n) {
149  LogVerbatim("HLTEventAnalyzerAOD") << "HLTEventAnalyzerAOD::analyzeTrigger: path " << triggerName << " - not found!"
150  << endl;
151  return;
152  }
153 
154  const std::pair<int, int> prescales(hltPrescaleProvider_.prescaleValues(iEvent, iSetup, triggerName));
155  LogVerbatim("HLTEventAnalyzerAOD") << "HLTEventAnalyzerAOD::analyzeTrigger: path " << triggerName << " ["
156  << triggerIndex << "] "
157  << "prescales L1T,HLT: " << prescales.first << "," << prescales.second << endl;
158  const std::pair<std::vector<std::pair<std::string, int> >, int> prescalesInDetail(
159  hltPrescaleProvider_.prescaleValuesInDetail(iEvent, iSetup, triggerName));
160  std::ostringstream message;
161  for (unsigned int i = 0; i < prescalesInDetail.first.size(); ++i) {
162  message << " " << i << ":" << prescalesInDetail.first[i].first << "/" << prescalesInDetail.first[i].second;
163  }
164  LogVerbatim("HLTEventAnalyzerAOD") << "HLTEventAnalyzerAOD::analyzeTrigger: path " << triggerName << " ["
165  << triggerIndex << "] " << endl
166  << "prescales L1T: " << prescalesInDetail.first.size() << message.str() << endl
167  << " prescale HLT: " << prescalesInDetail.second << endl;
168 
169  // modules on this trigger path
170  const unsigned int m(hltConfig.size(triggerIndex));
171  const vector<string>& moduleLabels(hltConfig.moduleLabels(triggerIndex));
172 
173  // Results from TriggerResults product
174  LogVerbatim("HLTEventAnalyzerAOD") << " Trigger path status:"
175  << " WasRun=" << triggerResultsHandle_->wasrun(triggerIndex)
176  << " Accept=" << triggerResultsHandle_->accept(triggerIndex)
177  << " Error =" << triggerResultsHandle_->error(triggerIndex) << endl;
178  const unsigned int moduleIndex(triggerResultsHandle_->index(triggerIndex));
179  LogVerbatim("HLTEventAnalyzerAOD") << " Last active module - label/type: " << moduleLabels[moduleIndex] << "/"
180  << hltConfig.moduleType(moduleLabels[moduleIndex]) << " [" << moduleIndex
181  << " out of 0-" << (m - 1) << " on this path]" << endl;
182  assert(moduleIndex < m);
183 
184  // Results from TriggerEvent product - Attention: must look only for
185  // modules actually run in this path for this event!
186  for (unsigned int j = 0; j <= moduleIndex; ++j) {
187  const string& moduleLabel(moduleLabels[j]);
188  const string moduleType(hltConfig.moduleType(moduleLabel));
189  // check whether the module is packed up in TriggerEvent product
190  const unsigned int filterIndex(triggerEventHandle_->filterIndex(InputTag(moduleLabel, "", processName_)));
191  if (filterIndex < triggerEventHandle_->sizeFilters()) {
192  LogVerbatim("HLTEventAnalyzerAOD") << " 'L3' filter in slot " << j << " - label/type " << moduleLabel << "/"
193  << moduleType << endl;
194  const Vids& VIDS(triggerEventHandle_->filterIds(filterIndex));
195  const Keys& KEYS(triggerEventHandle_->filterKeys(filterIndex));
196  const size_type nI(VIDS.size());
197  const size_type nK(KEYS.size());
198  assert(nI == nK);
199  const size_type n(max(nI, nK));
200  LogVerbatim("HLTEventAnalyzerAOD") << " " << n << " accepted 'L3' objects found: " << endl;
201  const TriggerObjectCollection& TOC(triggerEventHandle_->getObjects());
202  for (size_type i = 0; i != n; ++i) {
203  const TriggerObject& TO(TOC[KEYS[i]]);
204  LogVerbatim("HLTEventAnalyzerAOD") << " " << i << " " << VIDS[i] << "/" << KEYS[i] << ": " << TO.id() << " "
205  << TO.pt() << " " << TO.eta() << " " << TO.phi() << " " << TO.mass() << endl;
206  }
207  }
208  }
209 
210  return;
211 }
unsigned int size() const
number of trigger paths in trigger table
Log< level::Info, true > LogVerbatim
void dump(const std::string &what) const
Dumping config info to cout.
virtual void analyzeTrigger(const edm::Event &, const edm::EventSetup &, const std::string &triggerName)
int id() const
getters
Definition: TriggerObject.h:51
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
float phi() const
Definition: TriggerObject.h:54
const edm::InputTag triggerResultsTag_
const edm::EDGetTokenT< edm::TriggerResults > triggerResultsToken_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const std::string triggerName_
unsigned int triggerIndex(std::string_view name) const
Definition: TriggerNames.cc:52
std::pair< std::vector< std::pair< std::string, TL1 > >, THLT > prescaleValuesInDetail(const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
edm::Handle< trigger::TriggerEvent > triggerEventHandle_
float eta() const
Definition: TriggerObject.h:53
const std::string processName_
module config parameters
assert(be >=bs)
uint16_t size_type
std::string encode() const
Definition: InputTag.cc:159
HLTPrescaleProvider hltPrescaleProvider_
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
Definition: Event.cc:275
unsigned int triggerIndex(const std::string &triggerName) const
slot position of trigger path in trigger table (0 to size-1)
Single trigger physics object (e.g., an isolated muon)
Definition: TriggerObject.h:21
int iEvent
Definition: GenABIO.cc:224
const edm::InputTag triggerEventTag_
std::pair< TL1, THLT > prescaleValues(const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
Combined L1T (pair.first) and HLT (pair.second) prescales per HLT path.
void beginRun(edm::Run const &, edm::EventSetup const &) override
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void analyze(const edm::Event &, const edm::EventSetup &) override
const edm::EDGetTokenT< trigger::TriggerEvent > triggerEventToken_
bool isValid() const
Definition: HandleBase.h:70
edm::Handle< edm::TriggerResults > triggerResultsHandle_
additional class data memebers
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:75
~HLTEventAnalyzerAOD() override
void endRun(edm::Run const &, edm::EventSetup const &) override
std::vector< size_type > Keys
HLTEventAnalyzerAOD(const edm::ParameterSet &)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
HLTConfigProvider const & hltConfigProvider() const
float mass() const
Definition: TriggerObject.h:55
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
std::vector< int > Vids
Definition: Run.h:45