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
|
//
// See header file for description
//
#include "CommonTools/TriggerUtils/interface/PrescaleWeightProvider.h"
#include <sstream>
#include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtUtils.h"
#include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
#include "DataFormats/Common/interface/TriggerResults.h"
#include "DataFormats/L1GlobalTrigger/interface/L1GtTriggerMenuLite.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Utilities/interface/BranchType.h"
PrescaleWeightProvider::PrescaleWeightProvider(const edm::ParameterSet& config, edm::ConsumesCollector& iC)
// default values
: init_(false),
verbosity_(0),
triggerResultsTag_("TriggerResults::HLT"),
triggerResultsToken_(iC.mayConsume<edm::TriggerResults>(triggerResultsTag_)),
l1GtTriggerMenuLiteTag_("l1GtTriggerMenuLite"),
l1GtTriggerMenuLiteToken_(iC.mayConsume<L1GtTriggerMenuLite, edm::InRun>(l1GtTriggerMenuLiteTag_)) {
hltPaths_.clear();
if (config.exists("prescaleWeightVerbosityLevel"))
verbosity_ = config.getParameter<unsigned>("prescaleWeightVerbosityLevel");
if (config.exists("prescaleWeightTriggerResults"))
triggerResultsTag_ = config.getParameter<edm::InputTag>("prescaleWeightTriggerResults");
if (config.exists("prescaleWeightL1GtTriggerMenuLite"))
l1GtTriggerMenuLiteTag_ = config.getParameter<edm::InputTag>("prescaleWeightL1GtTriggerMenuLite");
if (config.exists("prescaleWeightHltPaths"))
hltPaths_ = config.getParameter<std::vector<std::string> >("prescaleWeightHltPaths");
configured_ = true;
if (triggerResultsTag_.process().empty()) {
configured_ = false;
if (verbosity_ > 0)
edm::LogWarning("PrescaleWeightProvider") << "Process name not configured via TriggerResults InputTag";
} else if (triggerResultsTag_.label().empty()) {
configured_ = false;
if (verbosity_ > 0)
edm::LogWarning("PrescaleWeightProvider") << "TriggerResults label not configured";
} else if (l1GtTriggerMenuLiteTag_.label().empty()) {
configured_ = false;
if (verbosity_ > 0)
edm::LogWarning("PrescaleWeightProvider") << "L1GtTriggerMenuLite label not configured";
} else if (hltPaths_.empty()) {
configured_ = false;
if (verbosity_ > 0)
edm::LogError("PrescaleWeightProvider") << "HLT paths of interest not configured";
}
if (configured_) {
triggerResultsToken_ = iC.mayConsume<edm::TriggerResults>(triggerResultsTag_);
l1GtTriggerMenuLiteToken_ = iC.mayConsume<L1GtTriggerMenuLite, edm::InRun>(l1GtTriggerMenuLiteTag_);
}
}
void PrescaleWeightProvider::initRun(const edm::Run& run, const edm::EventSetup& setup) {
init_ = true;
if (!configured_) {
init_ = false;
if (verbosity_ > 0)
edm::LogWarning("PrescaleWeightProvider") << "Run initialisation failed due to failing configuration";
return;
}
HLTConfigProvider const& hltConfig = hltPrescaleProvider_->hltConfigProvider();
bool hltChanged(false);
if (!hltPrescaleProvider_->init(run, setup, triggerResultsTag_.process(), hltChanged)) {
if (verbosity_ > 0)
edm::LogError("PrescaleWeightProvider")
<< "HLT config initialization error with process name \"" << triggerResultsTag_.process() << "\"";
init_ = false;
} else if (hltConfig.size() <= 0) {
if (verbosity_ > 0)
edm::LogError("PrescaleWeightProvider") << "HLT config size error";
init_ = false;
} else if (hltChanged) {
if (verbosity_ > 0)
edm::LogInfo("PrescaleWeightProvider") << "HLT configuration changed";
}
if (!init_)
return;
run.getByToken(l1GtTriggerMenuLiteToken_, triggerMenuLite_);
if (!triggerMenuLite_.isValid()) {
if (verbosity_ > 0)
edm::LogError("PrescaleWeightProvider")
<< "L1GtTriggerMenuLite with label \"" << l1GtTriggerMenuLiteTag_.label() << "\" not found";
init_ = false;
}
}
void PrescaleWeightProvider::parseL1Seeds(const std::string& l1Seeds) {
l1SeedPaths_.clear();
std::stringstream ss(l1Seeds);
std::string buf;
while (ss.good() && !ss.eof()) {
ss >> buf;
if (buf[0] == '(' || buf[buf.size() - 1] == ')' || buf == "AND" || buf == "NOT") {
l1SeedPaths_.clear();
if (verbosity_ > 0)
edm::LogWarning("PrescaleWeightProvider::parseL1Seeds") << "Only supported logical expression is OR";
return;
} else if (buf == "OR")
continue;
else
l1SeedPaths_.push_back(buf);
}
}
|