CMS 3D CMS Logo

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
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 {
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  auto const prescales = hltPrescaleProvider_.prescaleValues<double>(iEvent, iSetup, triggerName);
155  LogVerbatim("HLTEventAnalyzerAOD") << "HLTEventAnalyzerAOD::analyzeTrigger: path " << triggerName << " ["
156  << triggerIndex << "] "
157  << "prescales L1T,HLT: " << prescales.first << "," << prescales.second << endl;
158  auto const prescalesInDetail = hltPrescaleProvider_.prescaleValuesInDetail<double>(iEvent, iSetup, triggerName);
159  std::ostringstream message;
160  for (unsigned int i = 0; i < prescalesInDetail.first.size(); ++i) {
161  message << " " << i << ":" << prescalesInDetail.first[i].first << "/" << prescalesInDetail.first[i].second;
162  }
163  LogVerbatim("HLTEventAnalyzerAOD") << "HLTEventAnalyzerAOD::analyzeTrigger: path " << triggerName << " ["
164  << triggerIndex << "] " << endl
165  << "prescales L1T: " << prescalesInDetail.first.size() << message.str() << endl
166  << " prescale HLT: " << prescalesInDetail.second << endl;
167 
168  // modules on this trigger path
169  const unsigned int m(hltConfig.size(triggerIndex));
170  const vector<string>& moduleLabels(hltConfig.moduleLabels(triggerIndex));
171 
172  // Results from TriggerResults product
173  LogVerbatim("HLTEventAnalyzerAOD") << " Trigger path status:"
174  << " WasRun=" << triggerResultsHandle_->wasrun(triggerIndex)
175  << " Accept=" << triggerResultsHandle_->accept(triggerIndex)
176  << " Error =" << triggerResultsHandle_->error(triggerIndex) << endl;
177  const unsigned int moduleIndex(triggerResultsHandle_->index(triggerIndex));
178  LogVerbatim("HLTEventAnalyzerAOD") << " Last active module - label/type: " << moduleLabels[moduleIndex] << "/"
179  << hltConfig.moduleType(moduleLabels[moduleIndex]) << " [" << moduleIndex
180  << " out of 0-" << (m - 1) << " on this path]" << endl;
181  assert(moduleIndex < m);
182 
183  // Results from TriggerEvent product - Attention: must look only for
184  // modules actually run in this path for this event!
185  for (unsigned int j = 0; j <= moduleIndex; ++j) {
186  const string& moduleLabel(moduleLabels[j]);
187  const string moduleType(hltConfig.moduleType(moduleLabel));
188  // check whether the module is packed up in TriggerEvent product
189  const unsigned int filterIndex(triggerEventHandle_->filterIndex(InputTag(moduleLabel, "", processName_)));
190  if (filterIndex < triggerEventHandle_->sizeFilters()) {
191  LogVerbatim("HLTEventAnalyzerAOD") << " 'L3' filter in slot " << j << " - label/type " << moduleLabel << "/"
192  << moduleType << endl;
193  const Vids& VIDS(triggerEventHandle_->filterIds(filterIndex));
194  const Keys& KEYS(triggerEventHandle_->filterKeys(filterIndex));
195  const size_type nI(VIDS.size());
196  const size_type nK(KEYS.size());
197  assert(nI == nK);
198  const size_type n(max(nI, nK));
199  LogVerbatim("HLTEventAnalyzerAOD") << " " << n << " accepted 'L3' objects found: " << endl;
201  for (size_type i = 0; i != n; ++i) {
202  const TriggerObject& TO(TOC[KEYS[i]]);
203  LogVerbatim("HLTEventAnalyzerAOD") << " " << i << " " << VIDS[i] << "/" << KEYS[i] << ": " << TO.id() << " "
204  << TO.pt() << " " << TO.eta() << " " << TO.phi() << " " << TO.mass() << endl;
205  }
206  }
207  }
208 
209  return;
210 }
unsigned int index(const unsigned int i) const
Get index (slot position) of module giving the decision of the ith path.
bool accept() const
Has at least one path accepted the event?
Log< level::Info, true > LogVerbatim
const Keys & filterKeys(trigger::size_type index) const
Definition: TriggerEvent.h:118
virtual void analyzeTrigger(const edm::Event &, const edm::EventSetup &, const std::string &triggerName)
bool error() const
Has any path encountered an error (exception)
std::string encode() const
Definition: InputTag.cc:159
const edm::InputTag triggerResultsTag_
const edm::EDGetTokenT< edm::TriggerResults > triggerResultsToken_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const std::string triggerName_
std::pair< std::vector< std::pair< std::string, TL1 > >, THLT > prescaleValuesInDetail(const edm::Event &iEvent, const edm::EventSetup &iSetup, const std::string &trigger)
HLTConfigProvider const & hltConfigProvider() const
edm::Handle< trigger::TriggerEvent > triggerEventHandle_
const std::string processName_
module config parameters
assert(be >=bs)
uint16_t size_type
HLTPrescaleProvider hltPrescaleProvider_
bool wasrun() const
Was at least one path run?
unsigned int size() const
Get number of paths stored.
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
const TriggerObjectCollection & getObjects() const
Definition: TriggerEvent.h:101
int id() const
getters
Definition: TriggerObject.h:51
void analyze(const edm::Event &, const edm::EventSetup &) override
const edm::EDGetTokenT< trigger::TriggerEvent > triggerEventToken_
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
const Vids & filterIds(trigger::size_type index) const
Definition: TriggerEvent.h:117
trigger::size_type filterIndex(const edm::InputTag &filterTag) const
find index of filter in data-member vector from filter tag
Definition: TriggerEvent.h:132
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)
bool isValid() const
Definition: HandleBase.h:70
fixed size matrix
HLT enums.
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
std::vector< int > Vids
Definition: Run.h:45