119 std::vector<std::pair<const pat::TriggerObjectStandAlone *, const SelectedObject *>> selected;
120 for (
const auto &
obj : *src) {
122 if (
sel.match(
obj) && (
sel.skipObjectsNotPassingQualityBits ? (
int(
sel.qualityBits(
obj)) > 0) :
true)) {
123 selected.emplace_back(&
obj, &
sel);
130 std::map<const pat::TriggerObjectStandAlone *, int> selected_bits;
131 for (
unsigned int i = 0;
i < selected.size(); ++
i) {
132 const auto &
obj = *selected[
i].first;
133 const auto &
sel = *selected[
i].second;
136 for (
unsigned int j = 0; j <
i; ++j) {
137 const auto &obj2 = *selected[j].first;
138 const auto &sel2 = *selected[j].second;
140 selected_bits[&obj2] |= selected_bits[&
obj];
141 selected.erase(selected.begin() +
i);
158 std::vector<pair<pat::TriggerObjectStandAlone, int>> l1Objects;
164 l1Objects.emplace_back(l1obj, it->hwIso());
170 switch (it->getType()) {
173 l1obj.setCollection(
"L1ETM");
178 l1obj.setCollection(
"L1ETMHF");
183 l1obj.setCollection(
"L1ETT");
188 l1obj.setCollection(
"L1ETEm");
193 l1obj.setCollection(
"L1HTT");
198 l1obj.setCollection(
"L1HTTHF");
203 l1obj.setCollection(
"L1HTM");
208 l1obj.setCollection(
"L1HTMHF");
215 l1Objects.emplace_back(l1obj, it->hwIso());
222 l1Objects.emplace_back(l1obj, it->hwIso());
229 l1obj.setCharge(it->charge());
230 l1Objects.emplace_back(l1obj, it->hwIso());
237 l1Objects.emplace_back(l1obj, it->hwIso());
240 unsigned int nobj = selected.size();
241 std::vector<float>
pt(nobj, 0),
eta(nobj, 0),
phi(nobj, 0), l1pt(nobj, 0), l1pt_2(nobj, 0), l2pt(nobj, 0);
242 std::vector<int>
id(nobj, 0),
bits(nobj, 0), l1iso(nobj, 0), l1charge(nobj, 0);
243 for (
unsigned int i = 0; i < nobj; ++
i) {
244 const auto &
obj = *selected[
i].first;
245 const auto &
sel = *selected[
i].second;
252 float best =
sel.l1DR2;
253 for (
const auto &l1obj : l1Objects) {
254 const auto &
seed = l1obj.first;
256 if (dr2 < best &&
sel.l1cut(
seed)) {
258 l1iso[
i] = l1obj.second;
259 l1charge[
i] =
seed.charge();
263 if (
sel.l1DR2_2 > 0) {
264 float best =
sel.l1DR2_2;
265 for (
const auto &l1obj : l1Objects) {
266 const auto &
seed = l1obj.first;
268 if (dr2 < best &&
sel.l1cut_2(
seed)) {
269 l1pt_2[
i] =
seed.pt();
274 float best =
sel.l2DR2;
275 for (
const auto &
seed : *src) {
277 if (dr2 < best &&
sel.l2cut(
seed)) {
284 auto tab = std::make_unique<nanoaod::FlatTable>(nobj,
name_,
false,
false);
293 tab->addColumn<
float>(
const_iterator end(int bx) const
enum start value shifted to 81 so as to avoid clashes with PDG codes
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision bits
edm::EDGetTokenT< l1t::JetBxCollection > l1Jet_
edm::EDGetTokenT< std::vector< pat::TriggerObjectStandAlone > > src_
void setCollection(const std::string &collName)
Methods.
edm::EDGetTokenT< l1t::MuonBxCollection > l1Muon_
Abs< T >::type abs(const T &t)
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
edm::EDGetTokenT< l1t::TauBxCollection > l1Tau_
std::vector< SelectedObject > sels_
edm::EDGetTokenT< l1t::EGammaBxCollection > l1EG_
edm::EDGetTokenT< l1t::EtSumBxCollection > l1Sum_
const_iterator begin(int bx) const
std::vector< T >::const_iterator const_iterator
Analysis-level trigger object class (stand-alone)