File indexing completed on 2024-04-06 12:18:24
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "FWCore/Common/interface/TriggerNames.h"
0011 #include "FWCore/Common/interface/TriggerResultsByName.h"
0012 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0013 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
0014 #include "HLTrigger/HLTcore/interface/HLTEventAnalyzerAOD.h"
0015
0016 #include <cassert>
0017
0018
0019
0020
0021 HLTEventAnalyzerAOD::HLTEventAnalyzerAOD(const edm::ParameterSet& ps)
0022 : processName_(ps.getParameter<std::string>("processName")),
0023 triggerName_(ps.getParameter<std::string>("triggerName")),
0024 triggerResultsTag_(ps.getParameter<edm::InputTag>("triggerResults")),
0025 triggerResultsToken_(consumes<edm::TriggerResults>(triggerResultsTag_)),
0026 triggerEventTag_(ps.getParameter<edm::InputTag>("triggerEvent")),
0027 triggerEventToken_(consumes<trigger::TriggerEvent>(triggerEventTag_)),
0028 verbose_(ps.getParameter<bool>("verbose")),
0029 hltPrescaleProvider_(ps, consumesCollector(), *this) {
0030 LOG(logMsgType_) << logMsgType_ << " configuration:\n"
0031 << " ProcessName = " << processName_ << "\n"
0032 << " TriggerName = " << triggerName_ << "\n"
0033 << " TriggerResultsTag = " << triggerResultsTag_.encode() << "\n"
0034 << " TriggerEventTag = " << triggerEventTag_.encode();
0035 }
0036
0037
0038
0039
0040 void HLTEventAnalyzerAOD::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0041 edm::ParameterSetDescription desc;
0042 desc.add<std::string>("processName", "HLT");
0043 desc.add<std::string>("triggerName", "@")
0044 ->setComment("name of trigger Path to consider (use \"@\" to consider all Paths)");
0045 desc.add<edm::InputTag>("triggerResults", edm::InputTag("TriggerResults", "", "HLT"));
0046 desc.add<edm::InputTag>("triggerEvent", edm::InputTag("hltTriggerSummaryAOD", "", "HLT"));
0047 desc.add<unsigned int>("stageL1Trigger", 1);
0048 desc.add<bool>("verbose", true)->setComment("enable verbose mode");
0049 descriptions.add("hltEventAnalyzerAODDefault", desc);
0050 }
0051
0052 void HLTEventAnalyzerAOD::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {
0053 bool changed(true);
0054 if (hltPrescaleProvider_.init(iRun, iSetup, processName_, changed)) {
0055 HLTConfigProvider const& hltConfig = hltPrescaleProvider_.hltConfigProvider();
0056
0057 if (changed) {
0058
0059 if (triggerName_ != "@") {
0060 const unsigned int n(hltConfig.size());
0061 const unsigned int triggerIndex(hltConfig.triggerIndex(triggerName_));
0062 if (triggerIndex >= n) {
0063 LOG(logMsgType_) << logMsgType_ << "::beginRun: TriggerName " << triggerName_
0064 << " not available in (new) config!";
0065 LOG(logMsgType_) << "Available TriggerNames are:";
0066 hltConfig.dump("Triggers");
0067 }
0068 }
0069
0070 if (verbose_) {
0071 hltConfig.dump("ProcessName");
0072 hltConfig.dump("GlobalTag");
0073 hltConfig.dump("TableName");
0074 hltConfig.dump("Streams");
0075 hltConfig.dump("Datasets");
0076 hltConfig.dump("PrescaleTable");
0077 hltConfig.dump("ProcessPSet");
0078 }
0079 }
0080 } else {
0081 LOG(logMsgType_) << logMsgType_ << "::beginRun: config extraction failure with process name " << processName_;
0082 }
0083 }
0084
0085 void HLTEventAnalyzerAOD::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0086
0087 iEvent.getByToken(triggerResultsToken_, triggerResultsHandle_);
0088 if (!triggerResultsHandle_.isValid()) {
0089 LOG(logMsgType_) << logMsgType_ << "::analyze: Error in getting TriggerResults product from Event!";
0090 return;
0091 }
0092 iEvent.getByToken(triggerEventToken_, triggerEventHandle_);
0093 if (!triggerEventHandle_.isValid()) {
0094 LOG(logMsgType_) << logMsgType_ << "::analyze: Error in getting TriggerEvent product from Event!";
0095 return;
0096 }
0097
0098 HLTConfigProvider const& hltConfig = hltPrescaleProvider_.hltConfigProvider();
0099
0100
0101 assert(triggerResultsHandle_->size() == hltConfig.size());
0102
0103
0104 if (triggerName_ == "@") {
0105 const unsigned int n(hltConfig.size());
0106 for (unsigned int i = 0; i != n; ++i) {
0107 analyzeTrigger(iEvent, iSetup, hltConfig.triggerName(i));
0108 }
0109 } else {
0110 analyzeTrigger(iEvent, iSetup, triggerName_);
0111 }
0112
0113 return;
0114 }
0115
0116 void HLTEventAnalyzerAOD::analyzeTrigger(const edm::Event& iEvent,
0117 const edm::EventSetup& iSetup,
0118 const std::string& triggerName) {
0119 HLTConfigProvider const& hltConfig = hltPrescaleProvider_.hltConfigProvider();
0120
0121 const unsigned int n(hltConfig.size());
0122 const unsigned int triggerIndex(hltConfig.triggerIndex(triggerName));
0123 assert(triggerIndex == iEvent.triggerNames(*triggerResultsHandle_).triggerIndex(triggerName));
0124
0125
0126 if (triggerIndex >= n) {
0127 LOG(logMsgType_) << logMsgType_ << "::analyzeTrigger: path " << triggerName << " - not found!";
0128 return;
0129 }
0130
0131 auto const prescales = hltPrescaleProvider_.prescaleValues<double>(iEvent, iSetup, triggerName);
0132
0133 LOG(logMsgType_) << logMsgType_ << "::analyzeTrigger: path " << triggerName << " [" << triggerIndex
0134 << "] prescales L1T,HLT: " << prescales.first << "," << prescales.second;
0135
0136 auto const prescalesInDetail = hltPrescaleProvider_.prescaleValuesInDetail<double>(iEvent, iSetup, triggerName);
0137 {
0138 LOG logtmp(logMsgType_);
0139 logtmp << logMsgType_ << "::analyzeTrigger: path " << triggerName << " [" << triggerIndex
0140 << "]\n prescales L1T: " << prescalesInDetail.first.size();
0141 for (size_t idx = 0; idx < prescalesInDetail.first.size(); ++idx) {
0142 logtmp << " " << idx << ":" << prescalesInDetail.first[idx].first << "/" << prescalesInDetail.first[idx].second;
0143 }
0144 logtmp << "\n prescale HLT: " << prescalesInDetail.second;
0145 }
0146
0147
0148 LOG(logMsgType_) << " Trigger path status:"
0149 << " WasRun=" << triggerResultsHandle_->wasrun(triggerIndex)
0150 << " Accept=" << triggerResultsHandle_->accept(triggerIndex)
0151 << " Error=" << triggerResultsHandle_->error(triggerIndex);
0152
0153
0154 const unsigned int m(hltConfig.size(triggerIndex));
0155 const std::vector<std::string>& moduleLabels(hltConfig.moduleLabels(triggerIndex));
0156 assert(m == moduleLabels.size());
0157
0158
0159 if (m == 0) {
0160 LOG(logMsgType_) << logMsgType_ << "::analyzeTrigger: path " << triggerName << " [" << triggerIndex
0161 << "] is empty!";
0162 return;
0163 }
0164
0165
0166 const unsigned int moduleIndex(triggerResultsHandle_->index(triggerIndex));
0167 assert(moduleIndex < m);
0168
0169 LOG(logMsgType_) << " Last active module - label/type: " << moduleLabels[moduleIndex] << "/"
0170 << hltConfig.moduleType(moduleLabels[moduleIndex]) << " [" << moduleIndex << " out of 0-" << (m - 1)
0171 << " on this path]";
0172
0173
0174
0175 for (unsigned int j = 0; j <= moduleIndex; ++j) {
0176 const std::string& moduleLabel(moduleLabels[j]);
0177 const std::string moduleType(hltConfig.moduleType(moduleLabel));
0178
0179
0180 const unsigned int filterIndex(triggerEventHandle_->filterIndex(edm::InputTag(moduleLabel, "", processName_)));
0181 if (filterIndex < triggerEventHandle_->sizeFilters()) {
0182 LOG(logMsgType_) << " 'L3' filter in slot " << j << " - label/type " << moduleLabel << "/" << moduleType;
0183
0184 const trigger::Vids& VIDS(triggerEventHandle_->filterIds(filterIndex));
0185 const trigger::Keys& KEYS(triggerEventHandle_->filterKeys(filterIndex));
0186 const trigger::size_type nI(VIDS.size());
0187 const trigger::size_type nK(KEYS.size());
0188 assert(nI == nK);
0189
0190 LOG(logMsgType_) << " " << nI << " accepted 'L3' objects found: ";
0191 const trigger::TriggerObjectCollection& TOC(triggerEventHandle_->getObjects());
0192 for (trigger::size_type idx = 0; idx < nI; ++idx) {
0193 const trigger::TriggerObject& TO(TOC[KEYS[idx]]);
0194 LOG(logMsgType_) << " " << idx << " " << VIDS[idx] << "/" << KEYS[idx] << ": " << TO.id() << " " << TO.pt()
0195 << " " << TO.eta() << " " << TO.phi() << " " << TO.mass();
0196 }
0197 }
0198 }
0199
0200 return;
0201 }