7 #ifndef TRIGGERANALYSISINTERFACES_ITRIGGLOBALEFFICIENCYCORRECTIONTOOL_H
8 #define TRIGGERANALYSISINTERFACES_ITRIGGLOBALEFFICIENCYCORRECTIONTOOL_H 1
17 #include <type_traits>
18 #include <string_view>
25 template<
typename Arg>
static constexpr
bool validArgs(
unsigned nTrailingDoubles);
26 template<
typename Arg1,
typename Arg2,
typename... OtherArgs>
static constexpr
bool validArgs(
unsigned nTrailingDoubles);
39 template<
typename...
Args>
41 template<
typename...
Args>
43 template<
typename BoolOrMap,
typename...
Args>
59 double*
handleArg(
double&
arg, std::vector<const xAOD::IParticle*>&) {
return &
arg; }
60 template<
typename P>
double*
handleArg(
const std::vector<P>&
arg, std::vector<const xAOD::IParticle*>&
particles)
67 template<
typename Arg>
71 using P = std::remove_cv_t<Arg>;
72 return std::is_same<P, std::vector<xAOD::Electron*>>
::value
73 || std::is_same<P, std::vector<const xAOD::Electron*>>
::value
74 || std::is_same<P, std::vector<xAOD::Muon*>>
::value
75 || std::is_same<P, std::vector<const xAOD::Muon*>>
::value
76 || std::is_same<P, std::vector<xAOD::Photon*>>
::value
77 || std::is_same<P, std::vector<const xAOD::Photon*>>
::value;
80 template<
typename Arg1,
typename Arg2,
typename... OtherArgs>
84 for(
bool x : xs)
if(!
x)
return validArgs<Arg1>(0) &&
validArgs<Arg2, OtherArgs...>(nTrailingDoubles);
85 unsigned nTD =
sizeof...(OtherArgs);
86 if(nTD == nTrailingDoubles)
return validArgs<Arg1>(0) && validArgs<Arg2>(0);
92 template<
typename...
Args>
96 std::vector<const xAOD::IParticle*>
particles;
101 template<
typename...
Args>
105 std::vector<const xAOD::IParticle*>
particles;
110 template<
typename BoolOrMap,
typename...
Args>
114 std::vector<const xAOD::IParticle*>
particles;
119 #endif //> !TRIGGERANALYSISINTERFACES_ITRIGGLOBALEFFICIENCYCORRECTIONTOOL_H