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);
66 std::map<std::pair<const Lepton*, std::size_t>,
Efficiencies>
73 template <
typename Trig1L>
76 -> std::enable_if_t<Trig1L::is1L(), std::size_t> {
78 lepton, Trig1L::anonymize(trigs), success);
82 std::size_t
leg,
bool& success);
84 const std::vector<TrigDef>&
triggers,
91 const std::vector<TrigDef>& defs);
94 template <
typename Trig1L>
97 -> std::enable_if_t<Trig1L::is1L(),
bool>;
99 template <
typename Trig1L_obj1,
typename Trig1L_obj2>
102 -> std::enable_if_t<Trig1L_obj1::is1L() && Trig1L_obj2::is1L() &&
106 template <
typename Trig1L>
109 -> std::enable_if_t<Trig1L::is1L(),
bool>;
111 template <
typename Trig1L_obj1,
typename Trig1L_obj2>
115 -> std::enable_if_t<Trig1L_obj1::is1L() && Trig1L_obj2::is1L() &&
119 template <
typename Trig2Lmix>
122 -> std::enable_if_t<Trig2Lmix::is2Lmix(),
bool>;
124 template <
typename Trig2Lsym>
127 -> std::enable_if_t<Trig2Lsym::is2Lsym(),
bool>;
129 template <
typename Trig2Lasym>
132 -> std::enable_if_t<Trig2Lasym::is2Lasym(),
bool>;
134 template <
typename Trig2Lmix,
typename Trig1L_obj1,
typename Trig1L_obj2>
138 -> std::enable_if_t<Trig2Lmix::is2Lmix() && Trig1L_obj1::is1L() &&
140 Trig1L_obj2::is1L() &&
144 template <
typename Trig2L,
typename Trig1L>
147 -> std::enable_if_t<Trig2L::is2Lnomix() && Trig1L::is1L() &&
151 template <
typename Trig2Lsym,
typename Trig1L>
154 -> std::enable_if_t<Trig2Lsym::is2Lsym() && Trig1L::is1L() &&
158 template <
typename Trig2Lasym,
typename Trig1L>
161 -> std::enable_if_t<Trig2Lasym::is2Lasym() && Trig1L::is1L() &&
165 template <
typename Trig2Lsym,
typename Trig1L>
168 -> std::enable_if_t<Trig2Lsym::is2Lsym() && Trig1L::is1L() &&
173 template <
typename Trig2Lasym,
typename Trig2Lsym,
typename Trig1L>
176 -> std::enable_if_t<Trig2Lasym::is2Lasym() && Trig2Lsym::is2Lsym() &&
182 template <
typename Trig3Lsym>
185 -> std::enable_if_t<Trig3Lsym::is3Lsym(),
bool>;
187 template <
typename Trig3Lhalfsym>
190 -> std::enable_if_t<Trig3Lhalfsym::is3Lhalfsym(),
bool>;
192 template <
typename Trig2L,
typename Trig2Lmix>
195 -> std::enable_if_t<Trig2L::is2Lnomix() && Trig2Lmix::is2Lmix() &&
201 template <
typename Trig2L_obj1,
typename Trig2L_obj2,
typename Trig2Lmix>
204 -> std::enable_if_t<Trig2Lmix::is2Lmix() && Trig2L_obj1::is2Lnomix() &&
206 Trig2L_obj2::is2Lnomix() &&
211 template <
typename Trig2L_obj1,
typename Trig2L_obj2,
typename Trig2Lmix,
212 typename Trig1L_obj1,
typename Trig1L_obj2>
214 const Trig2L_obj2,
const Trig2Lmix,
217 -> std::enable_if_t<Trig2Lmix::is2Lmix() && Trig2L_obj1::is2Lnomix() &&
219 Trig2L_obj2::is2Lnomix() &&
221 Trig1L_obj1::is1L() &&
223 Trig1L_obj2::is1L() &&
229 template <
typename Trig2L_obj1,
typename Trig2Lsym_obj1,
typename Trig2L_obj2,
230 typename Trig2Lsym_obj2,
typename Trig2Lmix,
typename Trig1L_obj1,
231 typename Trig1L_obj2>
233 const Trig2Lsym_obj1,
const Trig2L_obj2,
234 const Trig2Lsym_obj2,
const Trig2Lmix,
const Trig2Lmix,
238 Trig2Lmix::is2Lmix() && Trig2L_obj1::is2Lnomix() &&
240 Trig2L_obj2::is2Lnomix() &&
242 Trig2Lsym_obj1::is2Lsym() &&
244 Trig2Lsym_obj2::is2Lsym() &&
246 Trig1L_obj1::is1L() &&
248 Trig1L_obj2::is1L() &&
252 template <
typename Trig3Lmix>
255 -> std::enable_if_t<Trig3Lmix::is3Lmix(),
bool>;
257 template <
typename Trig3Lmix1,
typename Trig3Lmix2>
260 -> std::enable_if_t<Trig3Lmix1::is3Lmix() && Trig3Lmix2::is3Lmix() &&
261 Trig3Lmix1::object1() == Trig3Lmix2::object2() &&
262 Trig3Lmix1::object2() == Trig3Lmix2::object1(),
265 template <
typename Trig4Lsym>
268 -> std::enable_if_t<Trig4Lsym::is4Lsym(),
bool>;
280 const std::vector<TrigDef>&
triggers,
286 Helper(
const std::vector<TrigDef>& defs);
299 template <TriggerType
object_flag>
301 template <TriggerType
object1_flag, TriggerType
object2_flag>
303 template <
typename... Trigs>
306 template <
typename Param>
309 template <
typename T>
312 template <
typename T>