34 unsigned nPeriodsToReserve);
36 const std::pair<unsigned, unsigned>& boundaries,
37 const std::string& combination,
bool useToys,
38 std::size_t& uniqueElectronLeg, std::size_t& uniquePhotonLeg);
47 std::unordered_map<std::string, bool>* matched_per_trigger,
48 const LeptonList& leptons,
unsigned runNumber);
50 std::vector<std::string>& triggers,
70 std::map<std::pair<const Lepton*, std::size_t>,
Efficiencies>
75 return m_parent->aboveThreshold(p, leg);
77 template <
typename Trig1L>
80 -> std::enable_if_t<Trig1L::is1L(), std::size_t> {
81 return m_parent->getLoosestLegAboveThreshold(
82 lepton, Trig1L::anonymize(trigs), success);
86 std::size_t leg,
bool& success);
88 const std::vector<TrigDef>& triggers,
93 const Period*
getPeriod(
unsigned runNumber)
const;
95 const std::vector<TrigDef>& defs);
98 template <
typename Trig1L>
101 -> std::enable_if_t<Trig1L::is1L(),
bool>;
103 template <
typename Trig1L_obj1,
typename Trig1L_obj2>
106 -> std::enable_if_t<Trig1L_obj1::is1L() && Trig1L_obj2::is1L() &&
107 Trig1L_obj1::object() != Trig1L_obj2::object(),
110 template <
typename Trig1L>
113 -> std::enable_if_t<Trig1L::is1L(),
bool>;
115 template <
typename Trig1L_obj1,
typename Trig1L_obj2>
119 -> std::enable_if_t<Trig1L_obj1::is1L() && Trig1L_obj2::is1L() &&
120 Trig1L_obj1::object() != Trig1L_obj2::object(),
123 template <
typename Trig2Lmix>
126 -> std::enable_if_t<Trig2Lmix::is2Lmix(),
bool>;
128 template <
typename Trig2Lsym>
131 -> std::enable_if_t<Trig2Lsym::is2Lsym(),
bool>;
133 template <
typename Trig2Lasym>
136 -> std::enable_if_t<Trig2Lasym::is2Lasym(),
bool>;
138 template <
typename Trig2Lmix,
typename Trig1L_obj1,
typename Trig1L_obj2>
142 -> std::enable_if_t<Trig2Lmix::is2Lmix() && Trig1L_obj1::is1L() &&
143 Trig2Lmix::object1() == Trig1L_obj1::object() &&
144 Trig1L_obj2::is1L() &&
145 Trig2Lmix::object2() == Trig1L_obj2::object(),
148 template <
typename Trig2L,
typename Trig1L>
151 -> std::enable_if_t<Trig2L::is2Lnomix() && Trig1L::is1L() &&
152 Trig2L::object() == Trig1L::object(),
155 template <
typename Trig2Lsym,
typename Trig1L>
158 -> std::enable_if_t<Trig2Lsym::is2Lsym() && Trig1L::is1L() &&
159 Trig1L::object() == Trig2Lsym::object(),
162 template <
typename Trig2Lasym,
typename Trig1L>
165 -> std::enable_if_t<Trig2Lasym::is2Lasym() && Trig1L::is1L() &&
166 Trig1L::object() == Trig2Lasym::object(),
169 template <
typename Trig2Lsym,
typename Trig1L>
172 -> std::enable_if_t<Trig2Lsym::is2Lsym() && Trig1L::is1L() &&
173 Trig1L::object() == Trig2Lsym::object(),
177 template <
typename Trig2Lasym,
typename Trig2Lsym,
typename Trig1L>
180 -> std::enable_if_t<Trig2Lasym::is2Lasym() && Trig2Lsym::is2Lsym() &&
181 Trig2Lsym::object() == Trig2Lasym::object() &&
183 Trig1L::object() == Trig2Lasym::object(),
186 template <
typename Trig3Lsym>
189 -> std::enable_if_t<Trig3Lsym::is3Lsym(),
bool>;
191 template <
typename Trig3Lhalfsym>
194 -> std::enable_if_t<Trig3Lhalfsym::is3Lhalfsym(),
bool>;
196 template <
typename Trig2L,
typename Trig2Lmix>
199 -> std::enable_if_t<Trig2L::is2Lnomix() && Trig2Lmix::is2Lmix() &&
200 (Trig2Lmix::object1() == Trig2L::object() ||
201 Trig2Lmix::object2() == Trig2L::object()),
205 template <
typename Trig2L_obj1,
typename Trig2L_obj2,
typename Trig2Lmix>
208 -> std::enable_if_t<Trig2Lmix::is2Lmix() && Trig2L_obj1::is2Lnomix() &&
209 Trig2L_obj1::object() == Trig2Lmix::object1() &&
210 Trig2L_obj2::is2Lnomix() &&
211 Trig2L_obj2::object() == Trig2Lmix::object2(),
215 template <
typename Trig2L_obj1,
typename Trig2L_obj2,
typename Trig2Lmix,
216 typename Trig1L_obj1,
typename Trig1L_obj2>
218 const Trig2L_obj2,
const Trig2Lmix,
221 -> std::enable_if_t<Trig2Lmix::is2Lmix() && Trig2L_obj1::is2Lnomix() &&
222 Trig2L_obj1::object() == Trig2Lmix::object1() &&
223 Trig2L_obj2::is2Lnomix() &&
224 Trig2L_obj2::object() == Trig2Lmix::object2() &&
225 Trig1L_obj1::is1L() &&
226 Trig1L_obj1::object() == Trig2Lmix::object1() &&
227 Trig1L_obj2::is1L() &&
228 Trig1L_obj2::object() == Trig2Lmix::object2(),
233 template <
typename Trig2L_obj1,
typename Trig2Lsym_obj1,
typename Trig2L_obj2,
234 typename Trig2Lsym_obj2,
typename Trig2Lmix,
typename Trig1L_obj1,
235 typename Trig1L_obj2>
237 const Trig2Lsym_obj1,
const Trig2L_obj2,
238 const Trig2Lsym_obj2,
const Trig2Lmix,
const Trig2Lmix,
242 Trig2Lmix::is2Lmix() && Trig2L_obj1::is2Lnomix() &&
243 Trig2L_obj1::object() == Trig2Lmix::object1() &&
244 Trig2L_obj2::is2Lnomix() &&
245 Trig2L_obj2::object() == Trig2Lmix::object2() &&
246 Trig2Lsym_obj1::is2Lsym() &&
247 Trig2Lsym_obj1::object() == Trig2Lmix::object1() &&
248 Trig2Lsym_obj2::is2Lsym() &&
249 Trig2Lsym_obj2::object() == Trig2Lmix::object2() &&
250 Trig1L_obj1::is1L() &&
251 Trig1L_obj1::object() == Trig2Lmix::object1() &&
252 Trig1L_obj2::is1L() &&
253 Trig1L_obj2::object() == Trig2Lmix::object2(),
256 template <
typename Trig3Lmix>
259 -> std::enable_if_t<Trig3Lmix::is3Lmix(),
bool>;
261 template <
typename Trig3Lmix1,
typename Trig3Lmix2>
264 -> std::enable_if_t<Trig3Lmix1::is3Lmix() && Trig3Lmix2::is3Lmix() &&
265 Trig3Lmix1::object1() == Trig3Lmix2::object2() &&
266 Trig3Lmix1::object2() == Trig3Lmix2::object1(),
269 template <
typename Trig4Lsym>
272 -> std::enable_if_t<Trig4Lsym::is4Lsym(),
bool>;
284 const std::vector<TrigDef>& triggers,
290 Helper(
const std::vector<TrigDef>& defs);
303 template <TriggerType
object_flag>
305 template <TriggerType
object1_flag, TriggerType
object2_flag>
307 template <
typename... Trigs>
310 template <
typename Param>
313 template <
typename T>
316 template <
typename T>