7 #ifndef TRIGGLOBALEFFICIENCYCORRECTION_CALCULATOR_H
8 #define TRIGGLOBALEFFICIENCYCORRECTION_CALCULATOR_H 1
11 #include <boost/container/flat_set.hpp>
19 template <
typename Key>
20 using flat_set = boost::container::flat_set<Key>;
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,
70 std::map<std::pair<const Lepton*, std::size_t>,
Efficiencies>
77 template <
typename Trig1L>
80 -> std::enable_if_t<Trig1L::is1L(), std::size_t> {
82 lepton, Trig1L::anonymize(trigs), success);
86 std::size_t
leg,
bool& success);
88 const std::vector<TrigDef>&
triggers,
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() &&
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() &&
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() &&
144 Trig1L_obj2::is1L() &&
148 template <
typename Trig2L,
typename Trig1L>
151 -> std::enable_if_t<Trig2L::is2Lnomix() && Trig1L::is1L() &&
155 template <
typename Trig2Lsym,
typename Trig1L>
158 -> std::enable_if_t<Trig2Lsym::is2Lsym() && Trig1L::is1L() &&
162 template <
typename Trig2Lasym,
typename Trig1L>
165 -> std::enable_if_t<Trig2Lasym::is2Lasym() && Trig1L::is1L() &&
169 template <
typename Trig2Lsym,
typename Trig1L>
172 -> std::enable_if_t<Trig2Lsym::is2Lsym() && Trig1L::is1L() &&
177 template <
typename Trig2Lasym,
typename Trig2Lsym,
typename Trig1L>
180 -> std::enable_if_t<Trig2Lasym::is2Lasym() && Trig2Lsym::is2Lsym() &&
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() &&
205 template <
typename Trig2L_obj1,
typename Trig2L_obj2,
typename Trig2Lmix>
208 -> std::enable_if_t<Trig2Lmix::is2Lmix() && Trig2L_obj1::is2Lnomix() &&
210 Trig2L_obj2::is2Lnomix() &&
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() &&
223 Trig2L_obj2::is2Lnomix() &&
225 Trig1L_obj1::is1L() &&
227 Trig1L_obj2::is1L() &&
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() &&
244 Trig2L_obj2::is2Lnomix() &&
246 Trig2Lsym_obj1::is2Lsym() &&
248 Trig2Lsym_obj2::is2Lsym() &&
250 Trig1L_obj1::is1L() &&
252 Trig1L_obj2::is1L() &&
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>