32 unsigned nPeriodsToReserve);
34 const std::pair<unsigned, unsigned>& boundaries,
35 const std::string& combination,
bool useToys,
36 std::size_t& uniqueElectronLeg, std::size_t& uniquePhotonLeg);
45 std::unordered_map<std::string, bool>* matched_per_trigger,
46 const LeptonList& leptons,
unsigned runNumber);
48 std::vector<std::string>& triggers,
68 std::map<std::pair<const Lepton*, std::size_t>,
Efficiencies>
73 return m_parent->aboveThreshold(p, leg);
75 template <
typename Trig1L>
77 const std::flat_set<Trig1L>& trigs,
bool& success)
78 -> std::enable_if_t<Trig1L::is1L(), std::size_t> {
79 return m_parent->getLoosestLegAboveThreshold(
80 lepton, Trig1L::anonymize(trigs), success);
84 std::size_t leg,
bool& success);
86 const std::vector<TrigDef>& triggers,
87 std::flat_set<std::size_t>& validLegs)
const;
90 const std::vector<std::flat_set<std::size_t> >& firedLegs)
const;
91 const Period*
getPeriod(
unsigned runNumber)
const;
93 const std::vector<TrigDef>& defs);
96 template <
typename Trig1L>
99 -> std::enable_if_t<Trig1L::is1L(),
bool>;
101 template <
typename Trig1L_obj1,
typename Trig1L_obj2>
104 -> std::enable_if_t<Trig1L_obj1::is1L() && Trig1L_obj2::is1L() &&
105 Trig1L_obj1::object() != Trig1L_obj2::object(),
108 template <
typename Trig1L>
111 -> std::enable_if_t<Trig1L::is1L(),
bool>;
113 template <
typename Trig1L_obj1,
typename Trig1L_obj2>
115 const std::flat_set<Trig1L_obj1>& trigs1,
116 const std::flat_set<Trig1L_obj2>& trigs2,
Efficiencies&)
117 -> std::enable_if_t<Trig1L_obj1::is1L() && Trig1L_obj2::is1L() &&
118 Trig1L_obj1::object() != Trig1L_obj2::object(),
121 template <
typename Trig2Lmix>
124 -> std::enable_if_t<Trig2Lmix::is2Lmix(),
bool>;
126 template <
typename Trig2Lsym>
129 -> std::enable_if_t<Trig2Lsym::is2Lsym(),
bool>;
131 template <
typename Trig2Lasym>
134 -> std::enable_if_t<Trig2Lasym::is2Lasym(),
bool>;
136 template <
typename Trig2Lmix,
typename Trig1L_obj1,
typename Trig1L_obj2>
138 const std::flat_set<Trig1L_obj1>&,
140 -> std::enable_if_t<Trig2Lmix::is2Lmix() && Trig1L_obj1::is1L() &&
141 Trig2Lmix::object1() == Trig1L_obj1::object() &&
142 Trig1L_obj2::is1L() &&
143 Trig2Lmix::object2() == Trig1L_obj2::object(),
146 template <
typename Trig2L,
typename Trig1L>
149 -> std::enable_if_t<Trig2L::is2Lnomix() && Trig1L::is1L() &&
150 Trig2L::object() == Trig1L::object(),
153 template <
typename Trig2Lsym,
typename Trig1L>
156 -> std::enable_if_t<Trig2Lsym::is2Lsym() && Trig1L::is1L() &&
157 Trig1L::object() == Trig2Lsym::object(),
160 template <
typename Trig2Lasym,
typename Trig1L>
163 -> std::enable_if_t<Trig2Lasym::is2Lasym() && Trig1L::is1L() &&
164 Trig1L::object() == Trig2Lasym::object(),
167 template <
typename Trig2Lsym,
typename Trig1L>
169 const Trig2Lsym,
const std::flat_set<Trig1L>&,
Efficiencies&)
170 -> std::enable_if_t<Trig2Lsym::is2Lsym() && Trig1L::is1L() &&
171 Trig1L::object() == Trig2Lsym::object(),
175 template <
typename Trig2Lasym,
typename Trig2Lsym,
typename Trig1L>
177 const Trig2Lsym,
const std::flat_set<Trig1L>&,
Efficiencies&)
178 -> std::enable_if_t<Trig2Lasym::is2Lasym() && Trig2Lsym::is2Lsym() &&
179 Trig2Lsym::object() == Trig2Lasym::object() &&
181 Trig1L::object() == Trig2Lasym::object(),
184 template <
typename Trig3Lsym>
187 -> std::enable_if_t<Trig3Lsym::is3Lsym(),
bool>;
189 template <
typename Trig3Lhalfsym>
192 -> std::enable_if_t<Trig3Lhalfsym::is3Lhalfsym(),
bool>;
194 template <
typename Trig2L,
typename Trig2Lmix>
197 -> std::enable_if_t<Trig2L::is2Lnomix() && Trig2Lmix::is2Lmix() &&
198 (Trig2Lmix::object1() == Trig2L::object() ||
199 Trig2Lmix::object2() == Trig2L::object()),
203 template <
typename Trig2L_obj1,
typename Trig2L_obj2,
typename Trig2Lmix>
206 -> std::enable_if_t<Trig2Lmix::is2Lmix() && Trig2L_obj1::is2Lnomix() &&
207 Trig2L_obj1::object() == Trig2Lmix::object1() &&
208 Trig2L_obj2::is2Lnomix() &&
209 Trig2L_obj2::object() == Trig2Lmix::object2(),
213 template <
typename Trig2L_obj1,
typename Trig2L_obj2,
typename Trig2Lmix,
214 typename Trig1L_obj1,
typename Trig1L_obj2>
216 const Trig2L_obj2,
const Trig2Lmix,
217 const std::flat_set<Trig1L_obj1>&,
219 -> std::enable_if_t<Trig2Lmix::is2Lmix() && Trig2L_obj1::is2Lnomix() &&
220 Trig2L_obj1::object() == Trig2Lmix::object1() &&
221 Trig2L_obj2::is2Lnomix() &&
222 Trig2L_obj2::object() == Trig2Lmix::object2() &&
223 Trig1L_obj1::is1L() &&
224 Trig1L_obj1::object() == Trig2Lmix::object1() &&
225 Trig1L_obj2::is1L() &&
226 Trig1L_obj2::object() == Trig2Lmix::object2(),
231 template <
typename Trig2L_obj1,
typename Trig2Lsym_obj1,
typename Trig2L_obj2,
232 typename Trig2Lsym_obj2,
typename Trig2Lmix,
typename Trig1L_obj1,
233 typename Trig1L_obj2>
235 const Trig2Lsym_obj1,
const Trig2L_obj2,
236 const Trig2Lsym_obj2,
const Trig2Lmix,
const Trig2Lmix,
237 const std::flat_set<Trig1L_obj1>&,
240 Trig2Lmix::is2Lmix() && Trig2L_obj1::is2Lnomix() &&
241 Trig2L_obj1::object() == Trig2Lmix::object1() &&
242 Trig2L_obj2::is2Lnomix() &&
243 Trig2L_obj2::object() == Trig2Lmix::object2() &&
244 Trig2Lsym_obj1::is2Lsym() &&
245 Trig2Lsym_obj1::object() == Trig2Lmix::object1() &&
246 Trig2Lsym_obj2::is2Lsym() &&
247 Trig2Lsym_obj2::object() == Trig2Lmix::object2() &&
248 Trig1L_obj1::is1L() &&
249 Trig1L_obj1::object() == Trig2Lmix::object1() &&
250 Trig1L_obj2::is1L() &&
251 Trig1L_obj2::object() == Trig2Lmix::object2(),
254 template <
typename Trig3Lmix>
257 -> std::enable_if_t<Trig3Lmix::is3Lmix(),
bool>;
259 template <
typename Trig3Lmix1,
typename Trig3Lmix2>
262 -> std::enable_if_t<Trig3Lmix1::is3Lmix() && Trig3Lmix2::is3Lmix() &&
263 Trig3Lmix1::object1() == Trig3Lmix2::object2() &&
264 Trig3Lmix1::object2() == Trig3Lmix2::object1(),
267 template <
typename Trig4Lsym>
270 -> std::enable_if_t<Trig4Lsym::is4Lsym(),
bool>;
282 const std::vector<TrigDef>& triggers,
288 Helper(
const std::vector<TrigDef>& defs);
301 template <TriggerType
object_flag>
303 template <TriggerType
object1_flag, TriggerType
object2_flag>
305 template <
typename... Trigs>
308 template <
typename Param>
311 template <
typename T>
314 template <
typename T>