ATLAS Offline Software
Trigger.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // contact: jmaurer@cern.ch
6 
7 #ifndef TRIGGLOBALEFFICIENCYCORRECTION_TRIGGER_H
8 #define TRIGGLOBALEFFICIENCYCORRECTION_TRIGGER_H 1
9 
11 #include "xAODBase/ObjectType.h"
12 
13 #include <array>
14 #include <algorithm>
15 #include <type_traits>
16 #include <boost/container/flat_set.hpp>
17 template<typename Key> using flat_set = boost::container::flat_set<Key>;
18 
19 namespace TrigGlobEffCorr
20 {
21 
22 class UnusedArg { public: static constexpr xAOD::Type::ObjectType object() { return xAOD::Type::Other; } };
23 
25 {
26 public:
27  explicit constexpr TriggerProperties(TriggerType tt) : m_type(tt), m_legs{} {}
28  explicit TriggerProperties(const ImportData::TrigDef& def) : m_type(def.type) { loadLegs(def, m_legs); }
29  constexpr TriggerType type() const { return m_type; }
30  constexpr bool valid() const
31  {
33  }
34  constexpr bool mixed() const
35  {
36  auto x = m_type&TT_MASK_FLAVOUR;
37  return (x!=TT_ELECTRON_FLAG) && (x!=TT_MUON_FLAG) && (x!=TT_PHOTON_FLAG);
38  }
39  constexpr unsigned nDistinctLegs() const
40  {
41  auto x = m_type&TT_MASK_SYMMETRY;
42  if(m_type&TT_SINGLELEPTON_FLAG) return 1;
43  else if(m_type&TT_DILEPTON_FLAG) return 2 - 1*(x==TT_SYM);
44  else if(m_type&TT_TRILEPTON_FLAG) return (x==TT_ASYM)? 3 : 1 + 1*(mixed()||(x!=TT_SYM));
45  else if((m_type&TT_TETRALEPTON_FLAG) && x==TT_SYM) return 1;
46  return 0;
47  }
48  constexpr unsigned nDistinctLegs(xAOD::Type::ObjectType obj) const
49  {
50  bool firstPos = true;
51  switch(obj)
52  {
54  if(!(m_type&TT_ELECTRON_FLAG)) return 0;
55  break;
56  case xAOD::Type::Muon:
57  if(!(m_type&TT_MUON_FLAG)) return 0;
58  firstPos = (m_type&TT_PHOTON_FLAG);
59  break;
60  case xAOD::Type::Photon:
61  if(!(m_type&TT_PHOTON_FLAG)) return 0;
62  firstPos = false;
63  break;
64  default: return 0;
65  }
66  if(!mixed()) return nDistinctLegs();
67  return (firstPos == (m_type&TT_X2Y_FLAG))? 1 : nDistinctLegs()-1;
68  }
69  template<typename Array>
70  void loadLegs(const ImportData::TrigDef& src, Array& dest)
71  {
72  if(src.type != m_type) throw std::runtime_error ("Calculator bug");
73  std::fill(dest.begin(), dest.end(), 0);
75  {
76  dest[0] = src.leg[0];
77  dest[1] = src.leg[2];
78  }
79  else
80  {
81  std::copy_n(src.leg.cbegin(), nDistinctLegs(), dest.begin());
82  }
83  }
84 
86  {
89  }
90 
91  constexpr auto cbegin(xAOD::Type::ObjectType obj) const
92  {
93  return m_legs.cbegin() + cbegin_offset(obj);
94  }
95 
96  constexpr int cend_offset(xAOD::Type::ObjectType obj) const
97  {
100  }
101 
102  constexpr auto cend(xAOD::Type::ObjectType obj) const
103  {
104  return m_legs.cbegin() + nDistinctLegs() + cend_offset(obj);
105  }
106 
107 protected:
109  std::array<std::size_t, 4> m_legs;
110 };
111 
112 template<TriggerType tt, typename CastType1 = UnusedArg, typename CastType2 = UnusedArg>
113 class Trigger
114 {
115  static_assert(TriggerProperties(tt).valid(), "trigger type not supported");
116 private:
117  static constexpr bool extraCheck(xAOD::Type::ObjectType obj) { return (object()==obj || obj==xAOD::Type::Other); }
118  template<typename T> struct Optional {};
119 public:
120 
121  static constexpr TriggerType type() { return tt; }
122 
123  static constexpr bool mixed()
124  {
125  return TriggerProperties(tt).mixed();
126  }
127 
128  static constexpr unsigned nDistinctLegs() { return TriggerProperties(tt).nDistinctLegs(); }
129 
131 
132  static constexpr xAOD::Type::ObjectType object1()
133  {
134  if(!is3Lmix())
135  {
137  if(tt&TT_MUON_FLAG) return xAOD::Type::Muon;
139  return xAOD::Type::Other;
140  }
143  return (tt&TT_MUON_FLAG)? xAOD::Type::Muon : xAOD::Type::Other;
144  }
145 
146  static constexpr xAOD::Type::ObjectType object2()
147  {
148  if(is2Lmix())
149  {
152  return xAOD::Type::Other;
153  }
154  else if(!is3Lmix()) return xAOD::Type::Other;
157  return (tt&TT_MUON_FLAG)? xAOD::Type::Muon : xAOD::Type::Other;
158  }
159 
160  static constexpr xAOD::Type::ObjectType object()
161  {
162  if(mixed()) return xAOD::Type::Other;
163  return object1();
164  }
165 
166  static bool relevantFor(const Lepton& lepton) { return lepton.type()==object(); }
167  static bool irrelevantFor(const Lepton& lepton) { return !relevantFor(lepton); }
168 
169  static constexpr bool is1L() { return (tt&TT_SINGLELEPTON_FLAG); }
170  static constexpr bool is2Lnomix() { return (tt&TT_DILEPTON_FLAG) && !mixed(); }
171  static constexpr bool is2Lasym() { return ((tt&TT_MASK_TYPE)==TT_DILEPTON_ASYM); }
172  static constexpr bool is2Lsym() { return ((tt&TT_MASK_TYPE)==TT_DILEPTON_SYM); }
173  static constexpr bool is3Lsym() { return ((tt&TT_MASK_TYPE)==TT_TRILEPTON_SYM) && !mixed(); }
174  static constexpr bool is3Lhalfsym() { return ((tt&TT_MASK_TYPE)==TT_TRILEPTON_HALFSYM) && !mixed(); }
175  static constexpr bool is2Lmix() { return (tt&TT_DILEPTON_FLAG) && mixed(); }
176  static constexpr bool is3Lmix() { return (tt&TT_TRILEPTON_FLAG) && mixed(); }
177  static constexpr bool is4Lsym() { return ((tt&TT_MASK_TYPE) == TT_TETRALEPTON_SYM); }
178 
179 
180  std::array<std::size_t, nDistinctLegs()> legs;
181 
182  explicit Trigger()
183  {
184  std::fill(legs.begin(), legs.end(), 0);
185  }
186 
188  {
190  }
191 
192  template<bool=true> std::size_t operator()(void) const
193  {
194  static_assert(nDistinctLegs()==1, "this function is not meaningful for this type of trigger, hence should not be used.");
195  return legs[0];
196  }
197 
198  std::size_t operator()(unsigned index) const
199  {
200  return legs[index];
201  }
202 
203  template<bool=true> std::size_t operator<(const Trigger& rhs) const
204  {
205  static_assert(is1L(), "this function is not meaningful for this type of trigger, hence should not be used.");
206  return legs[0] < rhs.legs[0];
207  }
208 
209  explicit operator bool() const
210  {
211  return std::all_of(legs.cbegin(), legs.cend(), [](std::size_t x)->bool{ return x; });
212  }
213 
214  bool operator==(const Trigger& rhs) const
215  {
216  return legs == rhs.legs;
217  }
218 
219  template<xAOD::Type::ObjectType obj = object()> constexpr auto cbegin() const
220  {
221  return legs.cbegin() + TriggerProperties(tt).cbegin_offset(obj);
222  }
223 
224  template<xAOD::Type::ObjectType obj = object()> constexpr auto cend() const
225  {
226  return legs.cend() + TriggerProperties(tt).cend_offset(obj);
227  }
228 
229  template<typename Trig1L> auto hiddenBy(const Trig1L trig) const
230  -> typename std::enable_if<Trig1L::is1L(), bool>::type
231  {
232  static_assert(Trig1L::is1L(), "this function is not meaningful for this type of trigger, hence should not be used.");
233  constexpr auto obj = Trig1L::object();
234  return std::find(cbegin<obj>(), cend<obj>(), trig()) != cend<obj>();
235  }
236 
237  template<typename Trig1L> auto hiddenBy(const flat_set<Trig1L>& trigs) const
238  -> typename std::enable_if<Trig1L::is1L(), bool>::type
239  {
240  static_assert(Trig1L::is1L(), "this function is not meaningful for this type of trigger, hence should not be used.");
241  return std::any_of(trigs.cbegin(), trigs.cend(), [&](Trig1L t)->bool{ return hiddenBy(t); });
242  }
243 
246  template<xAOD::Type::ObjectType obj, bool anti=false> auto side() const
247  -> std::conditional_t<anti ^ (CastType1::object()==obj), CastType1, CastType2>
248  {
249  static_assert(mixed(), "this function is not meaningful for this type of trigger, hence should not be used.");
250  static_assert(obj != xAOD::Type::Other, "implementation incomplete");
251  using CastType = decltype(side<obj, anti>());
252  CastType trig;
253  std::copy_n(this->cbegin<CastType::object()>(), nDistinctLegs(CastType::object()), trig.legs.begin());
254  return trig;
255  }
257  template<typename TrigX> auto side() const -> decltype(side<TrigX::object()>()) { return side<TrigX::object()>(); }
259  template<typename TrigX> auto antiside() const -> decltype(side<TrigX::object(),true>()) { return side<TrigX::object(),true>(); }
261  CastType1 side1() const { return side<CastType1::object()>(); }
262  CastType2 side2() const { return side<CastType2::object()>(); }
263 
264  template<typename Trig1L> auto addTo(const flat_set<Trig1L>& trigs1L) const
265  -> std::enable_if_t<Trig1L::is1L() && nDistinctLegs(Trig1L::object())==1, flat_set<Trig1L>>
266  {
267  static_assert(mixed(), "this function is not meaningful for this type of trigger, hence should not be used.");
268  flat_set<Trig1L> trigs(trigs1L);
269  trigs.insert(side<Trig1L>());
270  return trigs;
271  }
272 
273  template<typename Trig1L> static auto anonymize(const flat_set<Trig1L>& triggers)
274  -> std::enable_if_t<is1L() && tt==Trig1L::type(), const flat_set<std::size_t>&>
275  {
276  static_assert(sizeof(Trig1L)==sizeof(std::size_t), "invalid cast if the key sizes differ");
277  return reinterpret_cast<const flat_set<std::size_t>&>(triggers);
278  }
279 
280  template<bool=true> bool symmetric() const
281  {
282  static_assert(!std::is_same<CastType1, UnusedArg>::value, "this function is not meaningful for this type of trigger, hence should not be used.");
283  return std::all_of(legs.cbegin()+1, legs.cend(), [&](std::size_t l)->bool{ return l==legs[0]; });
284  }
285 
286  template<bool=true> CastType1 to_symmetric() const
287  {
288  static_assert(!std::is_same<CastType1, UnusedArg>::value, "this function is not meaningful for this type of trigger, hence should not be used.");
289  CastType1 trig;
290  trig.legs[0] = this->legs[0];
291  return trig;
292  }
293 
294  template<bool=true> std::size_t asymLeg() const
295  {
296  static_assert((tt&TT_MASK_SYMMETRY)==TT_HALFSYM, "this function is not meaningful for this type of trigger, hence should not be used.");
297  return legs[0];
298  }
299 
300  template<bool=true> std::size_t symLeg() const
301  {
302  static_assert((tt&TT_MASK_SYMMETRY)==TT_HALFSYM, "this function is not meaningful for this type of trigger, hence should not be used.");
303  return legs[1];
304  }
305 };
306 
307 template<TriggerType, TriggerType=TT_UNKNOWN> struct TriggerClass;
308 
309 template<TriggerType object_flag>
310 struct TriggerClass<object_flag, TT_UNKNOWN>
311 {
312  static constexpr auto addObjFlag(int tt) { return static_cast<TriggerType>(tt|object_flag); }
313 
315  struct T_1 : public Trigger<addObjFlag(TT_SINGLELEPTON_FLAG)> {};
317  struct T_2sym : public Trigger<addObjFlag(TT_DILEPTON_SYM)> {};
319  struct T_2asym : public Trigger<addObjFlag(TT_DILEPTON_ASYM), T_2sym> {};
321  struct T_3sym : public Trigger<addObjFlag(TT_TRILEPTON_SYM)> {};
323  struct T_3halfsym : public Trigger<addObjFlag(TT_TRILEPTON_HALFSYM), T_3sym> {};
325  struct T_4sym : public Trigger<addObjFlag(TT_TETRALEPTON_SYM)> {};
326 };
327 
328 template<TriggerType object1_flag, TriggerType object2_flag>
329 struct TriggerClass
330 {
333  static constexpr auto addObjFlags(int tt) { return static_cast<TriggerType>(tt|object1_flag|object2_flag); }
334 
336  struct T_1_1 : public Trigger<addObjFlags(TT_DILEPTON_FLAG), typename A::T_1, typename B::T_1> {};
338  struct T_2sym_1 : public Trigger<addObjFlags(TT_TRILEPTON_SYM), typename A::T_2sym, typename B::T_1> {};
340  struct T_2asym_1: public Trigger<addObjFlags(TT_TRILEPTON_ASYM), typename A::T_2asym, typename B::T_1> {};
342  struct T_1_2sym: public Trigger<addObjFlags(TT_TRILEPTON_SYM|TT_X2Y_FLAG), typename A::T_1, typename B::T_2sym> {};
344  struct T_1_2asym: public Trigger<addObjFlags(TT_TRILEPTON_SYM|TT_X2Y_FLAG), typename A::T_1, typename B::T_2asym> {};
345 };
346 
347 }
348 
349 
350 #endif
TrigGlobEffCorr::TriggerProperties::cend_offset
constexpr int cend_offset(xAOD::Type::ObjectType obj) const
Definition: Trigger.h:96
TrigGlobEffCorr::Trigger::addTo
auto addTo(const flat_set< Trig1L > &trigs1L) const -> std::enable_if_t< Trig1L::is1L() &&nDistinctLegs(Trig1L::object())==1, flat_set< Trig1L >>
Definition: Trigger.h:264
TrigGlobEffCorr::Trigger::cend
constexpr auto cend() const
Definition: Trigger.h:224
TrigGlobEffCorr::Trigger::Trigger
Trigger()
Definition: Trigger.h:182
TrigGlobEffCorr::TT_HALFSYM
@ TT_HALFSYM
Definition: ImportData.h:31
TrigGlobEffCorr::TT_2E_MU_SYM
@ TT_2E_MU_SYM
Definition: ImportData.h:64
TrigGlobEffCorr::TriggerProperties::m_legs
std::array< std::size_t, 4 > m_legs
Definition: Trigger.h:109
TrigGlobEffCorr::Trigger::type
static constexpr TriggerType type()
Definition: Trigger.h:121
TrigGlobEffCorr::UnusedArg::object
static constexpr xAOD::Type::ObjectType object()
Definition: Trigger.h:22
TrigGlobEffCorr::TriggerProperties::mixed
constexpr bool mixed() const
Definition: Trigger.h:34
xAOD::Electron
Electron_v1 Electron
Definition of the current "egamma version".
Definition: Event/xAOD/xAODEgamma/xAODEgamma/Electron.h:17
TrigGlobEffCorr::Trigger::hiddenBy
auto hiddenBy(const Trig1L trig) const -> typename std::enable_if< Trig1L::is1L(), bool >::type
Definition: Trigger.h:229
TrigGlobEffCorr::Trigger::to_symmetric
CastType1 to_symmetric() const
Definition: Trigger.h:286
TrigGlobEffCorr::Trigger::is2Lasym
static constexpr bool is2Lasym()
Definition: Trigger.h:171
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
TrigGlobEffCorr::TriggerProperties::nDistinctLegs
constexpr unsigned nDistinctLegs(xAOD::Type::ObjectType obj) const
Definition: Trigger.h:48
TrigGlobEffCorr::TT_ASYM
@ TT_ASYM
Definition: ImportData.h:32
ObjectType
ObjectType
Definition: BaseObject.h:11
WriteCellNoiseToCool.src
src
Definition: WriteCellNoiseToCool.py:513
index
Definition: index.py:1
TrigGlobEffCorr
the template specializations below must be enclosed in this namespace
Definition: Calculator.cxx:1240
TrigGlobEffCorr::Trigger::nDistinctLegs
static constexpr unsigned nDistinctLegs()
Definition: Trigger.h:128
TrigGlobEffCorr::Trigger::object2
static constexpr xAOD::Type::ObjectType object2()
Definition: Trigger.h:146
TrigGlobEffCorr::TT_DILEPTON_ASYM
@ TT_DILEPTON_ASYM
Definition: ImportData.h:43
TrigGlobEffCorr::Trigger::symLeg
std::size_t symLeg() const
Definition: Trigger.h:300
TrigGlobEffCorr::Trigger::side2
CastType2 side2() const
Definition: Trigger.h:262
TrigGlobEffCorr::TriggerProperties::nDistinctLegs
constexpr unsigned nDistinctLegs() const
Definition: Trigger.h:39
TrigGlobEffCorr::Trigger::is2Lmix
static constexpr bool is2Lmix()
Definition: Trigger.h:175
TrigGlobEffCorr::TT_SINGLELEPTON_FLAG
@ TT_SINGLELEPTON_FLAG
Definition: ImportData.h:36
athena.value
value
Definition: athena.py:122
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:158
perfmonmt-printer.dest
dest
Definition: perfmonmt-printer.py:189
TrigGlobEffCorr::Trigger::operator()
std::size_t operator()(void) const
Definition: Trigger.h:192
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
python.TrigTLAMonitorAlgorithm.triggers
triggers
Definition: TrigTLAMonitorAlgorithm.py:196
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:562
TrigGlobEffCorr::Trigger::is1L
static constexpr bool is1L()
Definition: Trigger.h:169
TrigGlobEffCorr::TT_TETRALEPTON_SYM
@ TT_TETRALEPTON_SYM
Definition: ImportData.h:81
TrigGlobEffCorr::Trigger::anonymize
static auto anonymize(const flat_set< Trig1L > &triggers) -> std::enable_if_t< is1L() &&tt==Trig1L::type(), const flat_set< std::size_t > & >
Definition: Trigger.h:273
TrigGlobEffCorr::TriggerProperties::loadLegs
void loadLegs(const ImportData::TrigDef &src, Array &dest)
Definition: Trigger.h:70
TrigGlobEffCorr::Trigger::object
static constexpr xAOD::Type::ObjectType object()
Definition: Trigger.h:160
x
#define x
TrigGlobEffCorr::TT_MUON_FLAG
@ TT_MUON_FLAG
Definition: ImportData.h:27
flat_set
boost::container::flat_set< Key > flat_set
Definition: CheckConfig.cxx:11
TrigGlobEffCorr::TriggerProperties::m_type
TriggerType m_type
Definition: Trigger.h:108
TrigGlobEffCorr::TT_SYM
@ TT_SYM
Definition: ImportData.h:30
TrigGlobEffCorr::Trigger::operator()
std::size_t operator()(unsigned index) const
Definition: Trigger.h:198
TrigGlobEffCorr::Trigger::side1
CastType1 side1() const
Returns a pseudo trigger of type CastType1/2.
Definition: Trigger.h:261
TrigGlobEffCorr::TT_ELECTRON_FLAG
@ TT_ELECTRON_FLAG
Definition: ImportData.h:26
TrigGlobEffCorr::Trigger::is4Lsym
static constexpr bool is4Lsym()
Definition: Trigger.h:177
ImportData.h
TrigGlobEffCorr::TT_2MU_G_SYM
@ TT_2MU_G_SYM
Definition: ImportData.h:75
TrigGlobEffCorr::Trigger::irrelevantFor
static bool irrelevantFor(const Lepton &lepton)
Definition: Trigger.h:167
TrigGlobEffCorr::Trigger::is3Lsym
static constexpr bool is3Lsym()
Definition: Trigger.h:173
TrigGlobEffCorr::Trigger::relevantFor
static bool relevantFor(const Lepton &lepton)
Definition: Trigger.h:166
calibdata.valid
list valid
Definition: calibdata.py:45
TrigGlobEffCorr::Trigger::asymLeg
std::size_t asymLeg() const
Definition: Trigger.h:294
TrigGlobEffCorr::TT_X2Y_FLAG
@ TT_X2Y_FLAG
Definition: ImportData.h:25
ObjectType.h
TrigGlobEffCorr::TT_PHOTON_FLAG
@ TT_PHOTON_FLAG
Definition: ImportData.h:28
TrigGlobEffCorr::Trigger::is3Lmix
static constexpr bool is3Lmix()
Definition: Trigger.h:176
TrigGlobEffCorr::Trigger::extraCheck
static constexpr bool extraCheck(xAOD::Type::ObjectType obj)
Definition: Trigger.h:117
TrigGlobEffCorr::Trigger::antiside
auto antiside() const -> decltype(side< TrigX::object(), true >())
Complement to the previous function.
Definition: Trigger.h:259
TrigGlobEffCorr::Trigger::symmetric
bool symmetric() const
Definition: Trigger.h:280
TrigGlobEffCorr::TT_TRILEPTON_HALFSYM
@ TT_TRILEPTON_HALFSYM
Definition: ImportData.h:56
TrigGlobEffCorr::Trigger::is3Lhalfsym
static constexpr bool is3Lhalfsym()
Definition: Trigger.h:174
TrigGlobEffCorr::TT_DILEPTON_SYM
@ TT_DILEPTON_SYM
Definition: ImportData.h:42
TrigGlobEffCorr::TriggerProperties::TriggerProperties
constexpr TriggerProperties(TriggerType tt)
Definition: Trigger.h:27
TrigGlobEffCorr::TT_TETRALEPTON_FLAG
@ TT_TETRALEPTON_FLAG
Definition: ImportData.h:80
TrigGlobEffCorr::TriggerProperties::type
constexpr TriggerType type() const
Definition: Trigger.h:29
TrigGlobEffCorr::TriggerProperties::TriggerProperties
TriggerProperties(const ImportData::TrigDef &def)
Definition: Trigger.h:28
TrigGlobEffCorr::Trigger::operator<
std::size_t operator<(const Trigger &rhs) const
Definition: Trigger.h:203
TrigGlobEffCorr::TriggerClass::T_1_2asym
mixed-flavour trilepton trigger type x_y_y
Definition: Trigger.h:344
TrigGlobEffCorr::Trigger::is2Lsym
static constexpr bool is2Lsym()
Definition: Trigger.h:172
TrigGlobEffCorr::TT_MASK_TYPE
@ TT_MASK_TYPE
Definition: ImportData.h:34
TrigGlobEffCorr::TriggerClass::addObjFlags
static constexpr auto addObjFlags(int tt)
Definition: Trigger.h:333
TrigGlobEffCorr::Trigger::setDefinition
void setDefinition(const ImportData::TrigDef &def)
Definition: Trigger.h:187
TrigGlobEffCorr::TT_TRILEPTON_FLAG
@ TT_TRILEPTON_FLAG
Definition: ImportData.h:54
TrigGlobEffCorr::Trigger::operator==
bool operator==(const Trigger &rhs) const
Definition: Trigger.h:214
lumiFormat.array
array
Definition: lumiFormat.py:98
TrigGlobEffCorr::TriggerClass::T_2asym_1
mixed-flavour trilepton trigger type x_x_y
Definition: Trigger.h:340
TrigGlobEffCorr::TriggerClass< object_flag, TT_UNKNOWN >::addObjFlag
static constexpr auto addObjFlag(int tt)
Definition: Trigger.h:312
TrigGlobEffCorr::TriggerClass::T_2sym_1
mixed-flavour trilepton trigger type 2x_y (2e12_lhloose_mu10, ...)
Definition: Trigger.h:338
TrigGlobEffCorr::Trigger::side
auto side() const -> std::conditional_t< anti ^(CastType1::object()==obj), CastType1, CastType2 >
Returns a pseudo trigger built only from the legs of flavour 'obj' If anti==true, uses instead only l...
Definition: Trigger.h:246
TrigGlobEffCorr::Trigger::Optional
Definition: Trigger.h:118
TrigGlobEffCorr::TriggerProperties::cend
constexpr auto cend(xAOD::Type::ObjectType obj) const
Definition: Trigger.h:102
TrigGlobEffCorr::TriggerType
TriggerType
Definition: ImportData.h:23
TrigGlobEffCorr::Lepton
Definition: Lepton.h:18
TrigGlobEffCorr::Trigger::cbegin
constexpr auto cbegin() const
Definition: Trigger.h:219
TrigGlobEffCorr::UnusedArg
Definition: Trigger.h:22
TrigGlobEffCorr::TT_MASK_SYMMETRY
@ TT_MASK_SYMMETRY
Definition: ImportData.h:33
TrigGlobEffCorr::Lepton::type
xAOD::Type::ObjectType type() const
Definition: Lepton.h:28
TrigGlobEffCorr::ImportData::TrigDef
Definition: ImportData.h:93
xAOD::Photon
Photon_v1 Photon
Definition of the current "egamma version".
Definition: Event/xAOD/xAODEgamma/xAODEgamma/Photon.h:17
Muon
struct TBPatternUnitContext Muon
TrigGlobEffCorr::TriggerClass::T_1_2sym
mixed-flavour trilepton trigger type x_2y (e12_lhloose_2mu10, ...)
Definition: Trigger.h:342
DeMoScan.index
string index
Definition: DeMoScan.py:362
TrigGlobEffCorr::TT_MASK_FLAVOUR
@ TT_MASK_FLAVOUR
Definition: ImportData.h:29
TrigGlobEffCorr::Trigger::legs
std::array< std::size_t, nDistinctLegs()> legs
Definition: Trigger.h:180
lumiFormat.fill
fill
Definition: lumiFormat.py:111
TrigGlobEffCorr::TT_UNKNOWN
@ TT_UNKNOWN
Definition: ImportData.h:24
TrigGlobEffCorr::TriggerProperties::valid
constexpr bool valid() const
Definition: Trigger.h:30
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TrigGlobEffCorr::TriggerProperties::cbegin_offset
constexpr int cbegin_offset(xAOD::Type::ObjectType obj) const
Definition: Trigger.h:85
TrigGlobEffCorr::TT_DILEPTON_FLAG
@ TT_DILEPTON_FLAG
Definition: ImportData.h:41
TrigGlobEffCorr::TriggerProperties
Definition: Trigger.h:25
TrigGlobEffCorr::Trigger::mixed
static constexpr bool mixed()
Definition: Trigger.h:123
TrigGlobEffCorr::Trigger::hiddenBy
auto hiddenBy(const flat_set< Trig1L > &trigs) const -> typename std::enable_if< Trig1L::is1L(), bool >::type
Definition: Trigger.h:237
pickleTool.object
object
Definition: pickleTool.py:30
TrigGlobEffCorr::Trigger::object1
static constexpr xAOD::Type::ObjectType object1()
Definition: Trigger.h:132
TrigGlobEffCorr::TriggerClass::T_1_1
mixed-flavour dilepton trigger (e17_lhloose_nod0_mu14, e7_lhmedium_mu24, ...):
Definition: Trigger.h:336
TrigGlobEffCorr::Trigger::side
auto side() const -> decltype(side< TrigX::object()>())
Returns a pseudo trigger built only from the legs of the same flavour as the trigger 'TrigX'.
Definition: Trigger.h:257
TrigGlobEffCorr::TT_2E_G_SYM
@ TT_2E_G_SYM
Definition: ImportData.h:71
python.PyAthena.obj
obj
Definition: PyAthena.py:135
TrigGlobEffCorr::TriggerClass
Definition: Trigger.h:307
xAOD::bool
setBGCode setTAP setLVL2ErrorBits bool
Definition: TrigDecision_v1.cxx:60
TrigGlobEffCorr::TriggerProperties::cbegin
constexpr auto cbegin(xAOD::Type::ObjectType obj) const
Definition: Trigger.h:91
TileDCSDataPlotter.tt
tt
Definition: TileDCSDataPlotter.py:874
TrigGlobEffCorr::Trigger::nDistinctLegs
static constexpr unsigned nDistinctLegs(xAOD::Type::ObjectType obj)
Definition: Trigger.h:130
TrigGlobEffCorr::Trigger::is2Lnomix
static constexpr bool is2Lnomix()
Definition: Trigger.h:170
TrigGlobEffCorr::TT_TRILEPTON_SYM
@ TT_TRILEPTON_SYM
Definition: ImportData.h:55
TrigGlobEffCorr::Trigger
Definition: Trigger.h:114