Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
TrigGlobEffCorr::ImportData Class Reference

#include <ImportData.h>

Inheritance diagram for TrigGlobEffCorr::ImportData:
Collaboration diagram for TrigGlobEffCorr::ImportData:

Classes

struct  TrigDef
 

Public Member Functions

 ImportData ()
 
 ImportData (TrigGlobalEfficiencyCorrectionTool &parent)
 
 ~ImportData ()
 
bool importHierarchies ()
 
bool importTriggers ()
 
bool importThresholds (const std::map< std::string, std::string > &overridenThresholds={})
 
bool importPeriods ()
 
bool importMapKeys (const std::string &tag, std::map< std::size_t, std::map< std::size_t, int > > &keysPerLeg)
 
bool importAll (const std::map< std::string, std::string > &overridenThresholds={})
 
bool getPeriodBoundaries (const std::string &period, std::pair< unsigned, unsigned > &boundaries)
 
bool suggestEgammaMapKeys (const std::map< std::string, std::string > &triggerCombination, const std::string &version, std::map< std::string, std::string > &legsPerKey, xAOD::Type::ObjectType type)
 
const std::map< std::size_t, TrigDef > & getTriggerDefs () const
 
const std::map< std::size_t, float > & getTriggerThresholds () const
 
const std::map< std::string, std::pair< unsigned, unsigned > > & getDataPeriods () const
 
const std::vector< Hierarchy > & getHierarchyMeta () const
 
const std::vector< std::size_t > & getHierarchyData () const
 
const std::map< std::size_t, std::string > & getDictionary () const
 
xAOD::Type::ObjectType associatedLeptonFlavour (std::size_t leg, bool &success)
 
std::vector< TrigDefparseTriggerString (const std::string &triggerString, bool &success)
 
TrigGlobalEfficiencyCorrectionToolgetParent ()
 
bool adaptTriggerListForTriggerMatching (std::vector< ImportData::TrigDef > &triggers)
 
void setLevel (MSG::Level lvl)
 Change the current logging level. More...
 

Static Public Member Functions

static xAOD::Type::ObjectType associatedLeptonFlavour (const std::string &leg, bool &success)
 

Protected Member Functions

bool readDataFile (const char *filename, std::vector< std::string > &contents)
 
void setNonMixed3LType (TrigDef &def, TriggerType flavourFlag)
 

Protected Attributes

TrigGlobalEfficiencyCorrectionToolm_parent
 
std::map< std::size_t, std::string > & m_dictionary
 
std::hash< std::string > & m_hasher
 
std::map< std::size_t, TrigDefm_triggerDefs
 
std::map< std::size_t, float > m_triggerThresholds
 
std::map< std::string, std::pair< unsigned, unsigned > > m_dataPeriods
 
std::vector< Hierarchym_hierarchyMeta
 
std::vector< std::size_t > m_hierarchyData
 

Private Types

using Hierarchy = TrigGlobalEfficiencyCorrectionTool::Hierarchy
 

Private Member Functions

void initMessaging () const
 Initialize our message level and MessageSvc. More...
 

Private Attributes

std::string m_nm
 Message source name. More...
 
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels) More...
 
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer. More...
 
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level. More...
 
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging) More...
 

Detailed Description

Definition at line 87 of file ImportData.h.

Member Typedef Documentation

◆ Hierarchy

Definition at line 89 of file ImportData.h.

Constructor & Destructor Documentation

◆ ImportData() [1/2]

ImportData::ImportData ( )

Definition at line 17 of file ImportData.cxx.

17  :
19  asg::AsgMessaging("TrigGlobalEfficiencyCorrectionTool"),
20  m_parent(nullptr),
21  m_dictionary(*new std::map<std::size_t,std::string>),
22  m_hasher(*new std::hash<std::string>)
23 {
24 }

◆ ImportData() [2/2]

ImportData::ImportData ( TrigGlobalEfficiencyCorrectionTool parent)

Definition at line 26 of file ImportData.cxx.

26  :
28  m_parent(&parent),
29  m_dictionary(parent.m_dictionary),
30  m_hasher(parent.m_hasher)
31 {
32  msg().setLevel(parent.msg().level());
33 }

◆ ~ImportData()

ImportData::~ImportData ( )

Definition at line 35 of file ImportData.cxx.

36 {
37  if(!m_parent)
38  {
39  delete &m_dictionary;
40  delete &m_hasher;
41  }
42 }

Member Function Documentation

◆ adaptTriggerListForTriggerMatching()

bool ImportData::adaptTriggerListForTriggerMatching ( std::vector< ImportData::TrigDef > &  triggers)

This essentially splits OR single lepton triggers into independent items

to prevent duplicates

Definition at line 737 of file ImportData.cxx.

738 {
740  std::set<std::size_t> extraItems;
741  std::vector<ImportData::TrigDef> updatedTriggers;
742  for(auto& trig : triggers)
743  {
744  auto& name = m_dictionary.at(trig.name);
745  std::size_t pos = 0, len = name.find("_OR_");
746  if(len == std::string::npos)
747  {
748  updatedTriggers.emplace_back(trig);
749  continue;
750  }
751  while(true)
752  {
753  std::string item = name.substr(pos, len);
754  auto h = m_hasher(item);
755  auto def = m_triggerDefs.find(h);
756  if(def == m_triggerDefs.end())
757  {
758  ATH_MSG_ERROR("while listing triggers for trigger matching; trigger \"" << item << "\" extracted from \"" << name << "\" is not recognized");
759  return false;
760  }
761  if(extraItems.emplace(h).second) updatedTriggers.emplace_back(def->second);
762  if(len == std::string::npos) break;
763  pos += len + 4;
764  len = name.find("_OR_", pos);
765  if(len != std::string::npos) len -= pos;
766  }
767  }
768  triggers.swap(updatedTriggers);
769  return true;
770 }

◆ associatedLeptonFlavour() [1/2]

xAOD::Type::ObjectType ImportData::associatedLeptonFlavour ( const std::string &  leg,
bool &  success 
)
static

Definition at line 523 of file ImportData.cxx.

524 {
525  // note: 'success' is not set to 'true', only downgraded to 'false' if needed
526  if(leg.length()>=2 && leg[0]=='e' && leg[1]>='1' && leg[1]<='9') return xAOD::Type::Electron;
527  else if(leg.length()>=3 && leg[0]=='m' && leg[1]=='u' && leg[2]>='1' && leg[2]<='9') return xAOD::Type::Muon;
528  else if(leg.length()>=3 && leg[0]=='g' && leg[1]>='1' && leg[1]<='9') return xAOD::Type::Photon;
529  else if(leg.length()>=4 && leg[0]=='t' && leg[1]=='a' && leg[2]=='u' && leg[3]>='1' && leg[3]<='9') return xAOD::Type::Tau;
530  success = false;
531  return xAOD::Type::Other;
532 }

◆ associatedLeptonFlavour() [2/2]

xAOD::Type::ObjectType ImportData::associatedLeptonFlavour ( std::size_t  leg,
bool &  success 
)

Definition at line 534 of file ImportData.cxx.

535 {
536  // note: 'success' is not set to 'true', only downgraded to 'false' if needed
537  auto itr = m_dictionary.find(leg);
538  if(itr != m_dictionary.end())
539  {
540  return associatedLeptonFlavour(itr->second,success);
541  }
542  success = false;
543  return xAOD::Type::Other;
544 }

◆ getDataPeriods()

const std::map<std::string, std::pair<unsigned,unsigned> >& TrigGlobEffCorr::ImportData::getDataPeriods ( ) const
inline

Definition at line 127 of file ImportData.h.

127 { return m_dataPeriods; }

◆ getDictionary()

const std::map<std::size_t,std::string>& TrigGlobEffCorr::ImportData::getDictionary ( ) const
inline

Definition at line 130 of file ImportData.h.

130 { return m_dictionary; }

◆ getHierarchyData()

const std::vector<std::size_t>& TrigGlobEffCorr::ImportData::getHierarchyData ( ) const
inline

Definition at line 129 of file ImportData.h.

129 { return m_hierarchyData; }

◆ getHierarchyMeta()

const std::vector<Hierarchy>& TrigGlobEffCorr::ImportData::getHierarchyMeta ( ) const
inline

Definition at line 128 of file ImportData.h.

128 { return m_hierarchyMeta; }

◆ getParent()

TrigGlobalEfficiencyCorrectionTool* TrigGlobEffCorr::ImportData::getParent ( )
inline

Definition at line 134 of file ImportData.h.

134 { return m_parent; }

◆ getPeriodBoundaries()

bool ImportData::getPeriodBoundaries ( const std::string &  period,
std::pair< unsigned, unsigned > &  boundaries 
)

Definition at line 488 of file ImportData.cxx.

489 {
490  // First possibility: a defined period keyword
491  auto itr = m_dataPeriods.find(period);
492  if(itr!=m_dataPeriods.end())
493  {
494  boundaries = itr->second;
495  return true;
496  }
497  // Otherwise it's a '-'-separated range
498  auto sep = period.find_first_of('-');
499  if(sep!=std::string::npos)
500  {
501  std::string kwMin = period.substr(0,sep);
502  std::string kwMax = period.substr(sep+1);
503  // Second possibility: a range of defined period keywords
504  auto itrMin = m_dataPeriods.find(kwMin);
505  auto itrMax = m_dataPeriods.find(kwMax);
506  if(itrMin!=m_dataPeriods.end() && itrMax!=m_dataPeriods.end())
507  {
508  boundaries = std::minmax({itrMin->second.first, itrMax->second.first, itrMin->second.second, itrMax->second.second});
509  return true;
510  }
511  // Third possibility: a range of run numbers
512  try
513  {
514  boundaries = std::minmax(std::stoi(kwMin), std::stoi(kwMax));
515  return true;
516  }
517  catch(...) {}
518  }
519  ATH_MSG_ERROR("Unable to understand the period/range " << period);
520  return false;
521 }

◆ getTriggerDefs()

const std::map<std::size_t,TrigDef>& TrigGlobEffCorr::ImportData::getTriggerDefs ( ) const
inline

Definition at line 125 of file ImportData.h.

125 { return m_triggerDefs; }

◆ getTriggerThresholds()

const std::map<std::size_t,float>& TrigGlobEffCorr::ImportData::getTriggerThresholds ( ) const
inline

Definition at line 126 of file ImportData.h.

126 { return m_triggerThresholds; }

◆ importAll()

bool ImportData::importAll ( const std::map< std::string, std::string > &  overridenThresholds = {})

Definition at line 44 of file ImportData.cxx.

45 {
46  return importPeriods()
47  && importThresholds(overridenThresholds)
48  && importTriggers()
49  && importHierarchies();
50 }

◆ importHierarchies()

bool ImportData::importHierarchies ( )

Definition at line 348 of file ImportData.cxx.

349 {
350  if(!m_triggerThresholds.size() && !importThresholds()) return false;
351  m_hierarchyMeta.clear();
352  m_hierarchyData.clear();
353  std::vector<std::string> config;
354  if(!readDataFile("TrigGlobalEfficiencyCorrection/Hierarchies.cfg", config)) return false;
355  std::stringstream ss;
356  std::string token, unit;
357  std::map<std::size_t, std::vector<std::size_t> > aliases;
358  for(auto& line : config)
359  {
360  bool success = true;
361  ss.clear();
362  ss.str(line);
363  if(line[0]=='[')
364  {
365  auto& meta = *m_hierarchyMeta.emplace(m_hierarchyMeta.end(), Hierarchy{(short)m_hierarchyData.size(),0,0.f,std::numeric_limits<float>::max()});
366  if(line[1]=='-' && line[2]==']') ss.ignore(3);
367  else
368  {
369  char sep = '-';
370  if(line[1]=='>') ss.ignore(2) >> meta.minPt >> unit;
371  else if(line[1]=='<') ss.ignore(2) >> meta.maxPt >> unit;
372  else ss.ignore(1) >> meta.minPt >> sep >> meta.maxPt >> unit;
373  if(!ss || sep!='-' || (unit!="GeV]" && unit!="MeV]"))
374  {
375  ATH_MSG_ERROR("Unable to parse pT restrictions in Hierarchies.cfg");
376  success = false;
377  }
378  if(unit == "GeV]")
379  {
380  meta.minPt *= 1e3f;
381  if(meta.maxPt < std::numeric_limits<float>::max()) meta.maxPt *= 1e3f;
382  }
383  }
384  while(ss >> token)
385  {
386  std::size_t h = m_hasher(token);
387  auto itr = aliases.find(h);
388  if(itr == aliases.end())
389  {
390  if(m_triggerThresholds.find(h) == m_triggerThresholds.end())
391  {
392  ATH_MSG_ERROR("Unknown trigger leg '" << token << "' found in Hierarchies.cfg");
393  success = false;
394  }
395  m_dictionary.emplace(h,token);
396  m_hierarchyData.push_back(h);
397  }
398  else m_hierarchyData.insert(m_hierarchyData.end(),itr->second.begin(),itr->second.end());
399  if(ss >> token && token!=">") success = false;
400  }
401  meta.nLegs = m_hierarchyData.size() - meta.offset;
402  success = success && meta.nLegs;
403  }
404  else
405  {
406  ss >> token;
407  auto& legs = aliases[m_hasher(token)];
408  if(ss >> token && token==":=")
409  {
410  legs.clear();
411  while(ss >> token)
412  {
413  std::size_t h = m_hasher(token);
414  m_dictionary.emplace(h,token);
415  legs.push_back(h);
416  if(m_triggerThresholds.find(h) == m_triggerThresholds.end())
417  {
418  ATH_MSG_ERROR("Unknown trigger leg '" << token << "' found in Hierarchies.cfg");
419  success = false;
420  }
421  if(ss >> token && token!=">") success = false;
422  }
423  success = success && legs.size();
424  }
425  else success = false;
426  }
427  if(!success)
428  {
429  ATH_MSG_ERROR("Failed parsing line from Hierarchies.cfg:\n" << line);
430  m_hierarchyMeta.clear();
431  m_hierarchyData.clear();
432  return false;
433  }
434  }
435  return true;
436 }

◆ importMapKeys()

bool ImportData::importMapKeys ( const std::string &  tag,
std::map< std::size_t, std::map< std::size_t, int > > &  keysPerLeg 
)

Definition at line 438 of file ImportData.cxx.

439 {
440  keysPerLeg.clear();
441  std::vector<std::string> config;
442  if(!readDataFile("TrigGlobalEfficiencyCorrection/MapKeys.cfg", config)) return false;
443  std::stringstream ss;
444  std::string token;
445  bool reading = false;
446  for(auto& line : config)
447  {
448  std::size_t pos = line.find("[VERSION]");
449  if(pos != std::string::npos)
450  {
451  reading = false;
452  ss.clear();
454  while(std::getline(ss, token, ','))
455  {
456  if(token == version)
457  {
458  reading = true;
459  break;
460  }
461  }
462  continue;
463  }
464  if(!reading) continue;
465  ss.clear();
466  ss.str(line);
467  int year;
468  ss >> year >> token;
469  year = 1<<(year-2015);
470  std::size_t leg = m_hasher(token);
471  auto& keys = keysPerLeg[leg];
472  while(ss >> token)
473  {
474  std::size_t h = m_hasher(token);
475  auto insertion = keys.emplace(h, year);
476  if(insertion.second) m_dictionary.emplace(h, token);
477  else insertion.first->second |= year;
478  }
479  }
480  if(!keysPerLeg.size())
481  {
482  ATH_MSG_ERROR("Unable to import the available map keys for the version " << version);
483  return false;
484  }
485  return true;
486 }

◆ importPeriods()

bool ImportData::importPeriods ( )

Definition at line 325 of file ImportData.cxx.

326 {
327  m_dataPeriods.clear();
328  std::vector<std::string> config;
329  if(!readDataFile("TrigGlobalEfficiencyCorrection/DataPeriods.cfg", config)) return false;
330  std::stringstream ss;
331  std::string key;
332  std::pair<unsigned,unsigned> runs;
333  for(auto& line : config)
334  {
335  ss.clear();
336  ss.str(line);
337  ss >> key >> runs.first >> runs.second;
338  if(ss.fail())
339  {
340  m_dataPeriods.clear();
341  return false;
342  }
343  m_dataPeriods.emplace(key,runs);
344  }
345  return true;
346 }

◆ importThresholds()

bool ImportData::importThresholds ( const std::map< std::string, std::string > &  overridenThresholds = {})

Override thresholds if requested

Definition at line 252 of file ImportData.cxx.

253 {
254  m_triggerThresholds.clear();
255  std::vector<std::string> config;
256  if(!readDataFile("TrigGlobalEfficiencyCorrection/Thresholds.cfg", config)) return false;
257  std::stringstream ss;
258  std::string leg, unit;
259  float pt;
260  bool success = true;
261  for(auto& line : config)
262  {
263  ss.clear();
264  ss.str(line);
265  if(ss >> leg >> pt >> unit)
266  {
267  std::size_t h = m_hasher(leg);
268  m_dictionary.emplace(h,leg);
269  if(unit == "GeV") pt *= 1e3f;
270  else if(unit != "MeV")
271  {
272  ATH_MSG_ERROR("Unable to import pT threshold for leg \"" << leg << "\" (missing unit)");
273  success = false;
274  }
276  }
277  else
278  {
279  ATH_MSG_ERROR("Unable to import pT threshold for leg \"" << leg << '"');
280  success = false;
281  }
282  }
283  if(!success)
284  {
285  m_triggerThresholds.clear();
286  return false;
287  }
288 
290  bool belowRecommended = false;
291  for(auto& kv : overridenThresholds)
292  {
293  auto itr = m_triggerThresholds.find(m_hasher(kv.first));
294  if(itr != m_triggerThresholds.end())
295  {
296  float pt = 0.f;
297  try { pt = std::stof(kv.second); }
298  catch(...)
299  {
300  ATH_MSG_ERROR("Unable to convert threshold argument \""<<kv.second<<"\" to floating-point value");
301  success = false;
302  continue;
303  }
304  if(pt<1e3f)
305  {
306  ATH_MSG_WARNING("Suspiciously low threshold (" << pt << " MeV) set for trigger leg " << kv.first
307  << ", please make sure you provided the threshold in MeV and not in GeV!");
308  }
309  if(pt < itr->second) belowRecommended = true;
310  itr->second = pt;
311  }
312  else
313  {
314  ATH_MSG_ERROR("Can't override threshold for unknown trigger leg " << kv.first);
315  success = false;
316  }
317  }
318  if(belowRecommended)
319  {
320  ATH_MSG_WARNING("Tool configured to use trigger thresholds below those recommended!");
321  }
322  return success;
323 }

◆ importTriggers()

bool ImportData::importTriggers ( )

default: assume the leg's name is the same as the full trigger name

Classify trigger and re-arrange legs (if needed) so that all electron legs come before muon legs, and muon legs before photon legs

symmetric tetralepton triggers

single-flavour trilepton triggers

mixed-flavour trilepton triggers

dilepton triggers

single lepton triggers

Definition at line 106 of file ImportData.cxx.

107 {
108  if(!m_triggerThresholds.size() && !importThresholds()) return false;
109  m_triggerDefs.clear();
110  std::vector<std::string> config;
111  if(!readDataFile("TrigGlobalEfficiencyCorrection/Triggers.cfg", config)) return false;
112  std::stringstream ss;
113  std::string triggerName, token;
114  bool success = true;
115  for(auto& line : config)
116  {
118  ss.clear();
119  ss.str(line);
120  ss >> triggerName;
121  std::size_t h = m_hasher(triggerName);
122  auto& def = m_triggerDefs[h];
123  def.name = h;
124 
125  ss.clear();
126  ss.str(line);
127  ss >> triggerName;
128  m_dictionary[h] = triggerName;
129  ATH_MSG_DEBUG(std::to_string(h) << " " << triggerName );
130 
131  bool hasTauLeg{};
132  for(std::size_t& leg : def.leg)
133  {
134  if(!(ss >> token)) break;
135  auto flavour = associatedLeptonFlavour(token, success);
136  if (flavour == xAOD::Type::Tau)
137  {
138  // we don't support taus for now
139  leg = 0;
140  hasTauLeg = true;
141  }
142  else
143  {
144  h = m_hasher(token);
145  m_dictionary.emplace(h,token);
146  leg = h;
147  if(m_triggerThresholds.find(h) == m_triggerThresholds.end())
148  {
149  ATH_MSG_ERROR("Unknown trigger leg '" << token << "' found in Triggers.cfg");
150  success = false;
151  }
152  }
153  }
154  if(!def.leg[0])
155  {
156  def.leg[0] = h;
157  if(m_triggerThresholds.find(h) == m_triggerThresholds.end())
158  {
159  ATH_MSG_ERROR("Unknown trigger leg '" << triggerName << "' (inferred from trigger name) found in Triggers.cfg");
160  success = false;
161  }
162  }
163  if(!success) continue;
164 
166  def.type = TT_UNKNOWN;
167  // triggers with tau legs should stay unknown
168  if (hasTauLeg) {
169  continue;
170  }
171 
172  auto flavour0 = associatedLeptonFlavour(def.leg[0], success);
173  int ne = (flavour0 == xAOD::Type::Electron)*1;
174  int nm = (flavour0 == xAOD::Type::Muon)*1;
175  if(def.leg[1])
176  {
177  auto flavour1 = associatedLeptonFlavour(def.leg[1], success);
178  if(flavour1 == xAOD::Type::Electron)
179  {
180  if(!ne) std::swap(def.leg[0],def.leg[1]);
181  ++ne;
182  }
183  else if(flavour1 == xAOD::Type::Muon)
184  {
185  if(!(ne+nm)) std::swap(def.leg[0],def.leg[1]);
186  ++nm;
187  }
188  else if(flavour1 != xAOD::Type::Photon) success = false;
189  if(def.leg[2])
190  {
191  auto flavour2 = associatedLeptonFlavour(def.leg[2], success);
192  if(flavour2 == xAOD::Type::Electron)
193  {
194  if(!ne) std::swap(def.leg[0], def.leg[2]);
195  else if(ne==1) std::swap(def.leg[1], def.leg[2]);
196  ++ne;
197  }
198  else if(flavour2 == xAOD::Type::Muon)
199  {
200  if(!(ne+nm)) std::swap(def.leg[0], def.leg[2]);
201  else if((ne+nm)==1) std::swap(def.leg[1], def.leg[2]);
202  ++nm;
203  }
204  else if(flavour2 != xAOD::Type::Photon) success = false;
205  if(def.leg[3])
206  {
208  if(std::count(def.leg.cbegin(),
209  def.leg.cend(),
210  def.leg[0]) == 4)
211  {
212  def.type = nm? TT_4MU_SYM : TT_4E_SYM;
213  }
214  else success = false;
215  }
216  else if(ne+nm==0 || ne==3 || nm==3)
217  {
219  }
220  else
221  {
222  bool sym = (def.leg[0]==def.leg[1] || def.leg[1]==def.leg[2]);
223  if(ne==2) def.type = nm? (sym? TT_2E_MU_SYM : TT_2E_MU_ASYM) : (sym? TT_2E_G_SYM : TT_2E_G_ASYM);
224  else if(nm==2) def.type = ne? (sym? TT_E_2MU_SYM : TT_E_2MU_ASYM) : (sym? TT_2MU_G_SYM : TT_2MU_G_ASYM);
225  else if(ne+nm==1) def.type = ne? (sym? TT_E_2G_SYM : TT_E_2G_ASYM) : (sym? TT_MU_2G_SYM : TT_MU_2G_ASYM);
226  else success = false;
227  }
228  }
229  else
230  {
231  if(ne==2) def.type = (def.leg[0]==def.leg[1])? TT_2E_SYM : TT_2E_ASYM;
232  else if(nm==2) def.type = (def.leg[0]==def.leg[1])? TT_2MU_SYM : TT_2MU_ASYM;
233  else if(ne+nm==0) def.type = (def.leg[0]==def.leg[1])? TT_2G_SYM : TT_2G_ASYM;
234  else if(ne==1 && nm==1) def.type = TT_E_MU;
235  else if(ne==1) def.type = TT_E_G;
236  else if(nm==1) def.type = TT_MU_G;
237  }
238  }
239  else
240  {
241  def.type = ne? TT_SINGLE_E : nm? TT_SINGLE_MU : TT_SINGLE_G;
242  }
243  if(!success || def.type==TT_UNKNOWN)
244  {
245  success = false;
246  ATH_MSG_ERROR("Configuration issue for trigger " << triggerName);
247  }
248  }
249  return success;
250 }

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40 {
42  m_lvl = m_imsg ?
43  static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
44  MSG::INFO;
45 }

◆ msg() [1/2]

MsgStream & asg::AsgMessaging::msg ( ) const
inherited

The standard message stream.

Returns
A reference to the default message stream of this object.

Definition at line 49 of file AsgMessaging.cxx.

49  {
50 #ifndef XAOD_STANDALONE
52 #else // not XAOD_STANDALONE
53  return m_msg;
54 #endif // not XAOD_STANDALONE
55  }

◆ msg() [2/2]

MsgStream & asg::AsgMessaging::msg ( const MSG::Level  lvl) const
inherited

The standard message stream.

Parameters
lvlThe message level to set the stream to
Returns
A reference to the default message stream, set to level "lvl"

Definition at line 57 of file AsgMessaging.cxx.

57  {
58 #ifndef XAOD_STANDALONE
60 #else // not XAOD_STANDALONE
61  m_msg << lvl;
62  return m_msg;
63 #endif // not XAOD_STANDALONE
64  }

◆ msgLvl()

bool asg::AsgMessaging::msgLvl ( const MSG::Level  lvl) const
inherited

Test the output level of the object.

Parameters
lvlThe message level to test against
Returns
boolean Indicting if messages at given level will be printed
true If messages at level "lvl" will be printed

Definition at line 41 of file AsgMessaging.cxx.

41  {
42 #ifndef XAOD_STANDALONE
43  return ::AthMessaging::msgLvl( lvl );
44 #else // not XAOD_STANDALONE
45  return m_msg.msgLevel( lvl );
46 #endif // not XAOD_STANDALONE
47  }

◆ parseTriggerString()

std::vector< ImportData::TrigDef > ImportData::parseTriggerString ( const std::string &  triggerString,
bool &  success 
)

Replace all || by |

Definition at line 546 of file ImportData.cxx.

547 {
548  std::string s = TrigGlobEffCorr::removeWhitespaces(triggerString);
549  if(s.find("|||") != std::string::npos)
550  {
551  ATH_MSG_ERROR("Invalid format for the trigger combination '" << triggerString <<"'");
552  success = false;
553  return {};
554  }
556  while(true)
557  {
558  auto i = s.find("||");
559  if(i == std::string::npos) break;
560  s.replace(i, 1, "");
561  }
562  if(s=="" || s=="|")
563  {
564  ATH_MSG_ERROR("Invalid format for the trigger combination '" << triggerString <<"'");
565  success = false;
566  return {};
567  }
568  std::vector<TrigDef> triggers;
569  std::set<std::size_t> hashes;
570  std::stringstream ss(s);
571  while(std::getline(ss,s,'|'))
572  {
573  std::size_t trig = m_hasher(s);
574  ATH_MSG_DEBUG(std::to_string(trig) << " --> " << s );
575  auto itr = m_triggerDefs.find(trig);
576  if(itr == m_triggerDefs.end())
577  {
578  ATH_MSG_ERROR("Unknown trigger '" << s << "' found while parsing trigger combination");
579  success = false;
580  return {};
581  }
582  if(!hashes.insert(trig).second)
583  {
584  ATH_MSG_ERROR("The trigger '" << s << "' is present more than once in the combination");
585  success = false;
586  return {};
587  }
588  triggers.push_back(itr->second);
589  }
590  success = success && triggers.size();
591  return triggers;
592 }

◆ readDataFile()

bool ImportData::readDataFile ( const char *  filename,
std::vector< std::string > &  contents 
)
protected

Definition at line 52 of file ImportData.cxx.

53 {
54  contents.clear();
55  bool success = true;
57  if(name.length())
58  {
59  std::ifstream f(name.c_str(),std::ios_base::in);
60  if(f.is_open())
61  {
62  std::string line;
63  while(f.good())
64  {
65  if(std::getline(f,line))
66  {
67  const std::string::size_type i = line.find('#');
68  if(i != std::string::npos) line.resize(i);
69  if(line.length() >= 3) contents.emplace_back(std::move(line));
70  }
71  }
72  if(!f.eof())
73  {
74  ATH_MSG_ERROR("Issue encountered while reading configuration file " << filename);
75  success = false;
76  }
77  f.close();
78  return true;
79  }
80  else
81  {
82  ATH_MSG_ERROR("Unable to open configuration file " << filename);
83  success = false;
84  }
85  }
86  else
87  {
88  ATH_MSG_ERROR("Unable to find configuration file " << filename);
89  success = false;
90  }
91  return success;
92 }

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level  lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29 {
30  m_lvl = lvl;
31 }

◆ setNonMixed3LType()

void ImportData::setNonMixed3LType ( TrigDef def,
TriggerType  flavourFlag 
)
protected

swap legs so that the last two are identical, for later convenience

Definition at line 94 of file ImportData.cxx.

95 {
96  if(def.leg[0]==def.leg[1] && def.leg[1]==def.leg[2]) def.type = static_cast<TriggerType>(TT_TRILEPTON_SYM | flavourFlag);
97  else if(def.leg[0]!=def.leg[1] && def.leg[1]!=def.leg[2] && def.leg[0]!=def.leg[2]) def.type = static_cast<TriggerType>(TT_TRILEPTON_ASYM | flavourFlag);
98  else
99  {
100  if(def.leg[1]!=def.leg[0] && def.leg[1]!=def.leg[2]) std::swap(def.leg[0],def.leg[1]);
101  else if(def.leg[2]!=def.leg[0] && def.leg[2]!=def.leg[1]) std::swap(def.leg[0],def.leg[2]);
102  def.type = static_cast<TriggerType>(TT_TRILEPTON_HALFSYM | flavourFlag);
103  }
104 }

◆ suggestEgammaMapKeys()

bool ImportData::suggestEgammaMapKeys ( const std::map< std::string, std::string > &  triggerCombination,
const std::string &  version,
std::map< std::string, std::string > &  legsPerKey,
xAOD::Type::ObjectType  type 
)

If no version is specified, the list of trigger legs is returned

Definition at line 594 of file ImportData.cxx.

598 {
599  legsPerKey.clear();
600  if(!importAll()) return false;
601 
602  bool success = true;
603  std::map<std::size_t,int> legs;
604 
605  for(auto& kv : triggerCombination)
606  {
607  auto itrPeriod = m_dataPeriods.find(kv.first);
608  if(itrPeriod == m_dataPeriods.end())
609  {
610  ATH_MSG_ERROR("Unknown period " << kv.first);
611  success = false;
612  continue;
613  }
614  int years = 0;
615  for(int k=0;k<32;++k)
616  {
617  auto itr = m_dataPeriods.find(std::to_string(2015+k));
618  if(itr != m_dataPeriods.end() && itrPeriod->second.first <= itr->second.second
619  && itrPeriod->second.second >= itr->second.first)
620  {
621  years |= (1<<k);
622  }
623  }
624  auto triggers = parseTriggerString(kv.second,success);
625  if(!success) continue;
626  for(auto& trig : triggers)
627  {
628  for(std::size_t leg : trig.leg)
629  {
630  if(leg && associatedLeptonFlavour(leg, success)==type)
631  {
632  auto insertion = legs.emplace(leg,years);
633  if(!insertion.second) insertion.first->second |= years;
634  }
635  }
636  }
637  }
638  if(!success) return false;
639 
640  if(version != "")
641  {
642  std::map<std::size_t,std::map<std::size_t,int> > allKeys;
643  if(!importMapKeys(version, allKeys)) return false;
644  std::map<std::size_t,std::vector<std::size_t> > allLegsPerKey;
645  std::set<std::size_t> legsWithMultipleKeys;
646  bool sameKeyForAllyears = true;
647  while(legs.size())
648  {
649  allLegsPerKey.clear();
650  for(auto& kvLegs : legs) // loop on remaining legs
651  {
652  std::size_t leg = kvLegs.first;
653  int years = kvLegs.second;
654  auto itrKeys = allKeys.find(leg); // list of keys for that leg
655  if(itrKeys != allKeys.end())
656  {
657  for(auto& kvKeys : itrKeys->second) // loop on those keys
658  {
659  auto y = (kvKeys.second & years);
660  if((y==years) || (!sameKeyForAllyears && y!=0)) // key must support all years needed for that leg -- until no longer possible
661  {
662  auto insertion = allLegsPerKey.emplace(kvKeys.first,std::vector<std::size_t>{leg});
663  if(!insertion.second) insertion.first->second.push_back(leg);
664  }
665  }
666  }
667  else
668  {
669  ATH_MSG_ERROR("Sorry, no idea what the map key should be for the trigger leg '"
670  << m_dictionary.at(leg) << "', manual configuration is needed");
671  success = false;
672  }
673  }
674  if(!success) break;
675 
676  if(!allLegsPerKey.size())
677  {
678  if(sameKeyForAllyears)
679  {
680  sameKeyForAllyears = false;
681  continue;
682  }
683  success = false;
684  break;
685  }
686 
687  using T = decltype(allLegsPerKey)::value_type;
688  auto itrKey = std::max_element(allLegsPerKey.begin(), allLegsPerKey.end(),
689  [](T& x,T& y){return x.second.size()<y.second.size();});
690  std::string& strLegs = legsPerKey[m_dictionary.at(itrKey->first)];
691  for(std::size_t leg : itrKey->second)
692  {
693  int& wantedYears = legs.at(leg);
694  int supportedYears = (allKeys.at(leg).at(itrKey->first)) & wantedYears;
695  if(supportedYears!=wantedYears || legsWithMultipleKeys.count(leg))
696  {
697  legsWithMultipleKeys.insert(leg);
698  for(int i=0;i<32;++i)
699  {
700  if(supportedYears & (1u<<i))
701  {
702  if(strLegs.length() && strLegs.back()!=',') strLegs += ',';
703  strLegs += m_dictionary.at(leg) + "[" + std::to_string(2015 + i) + "]";
704  }
705  }
706  }
707  else
708  {
709  if(strLegs.length() && strLegs.back()!=',') strLegs += ',';
710  strLegs += m_dictionary.at(leg);
711  }
712  if(supportedYears == wantedYears) legs.erase(leg);
713  else wantedYears &= ~supportedYears;
714  }
715  }
716  }
717  else
718  {
720  for(auto& kv : legs)
721  {
722  legsPerKey.emplace(std::to_string(legsPerKey.size()), m_dictionary.at(kv.first));
723  }
724  }
725  for (auto& [key, legs]: legsPerKey)
726  {
728  {
729  ATH_MSG_WARNING("Some of the requested triggers will result in "
730  "a default scale factor of 1 being returned");
731  }
732  }
733  if(!success) legsPerKey.clear();
734  return success;
735 }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging)

Definition at line 141 of file AthMessaging.h.

◆ m_dataPeriods

std::map<std::string, std::pair<unsigned,unsigned> > TrigGlobEffCorr::ImportData::m_dataPeriods
protected

Definition at line 147 of file ImportData.h.

◆ m_dictionary

std::map<std::size_t,std::string>& TrigGlobEffCorr::ImportData::m_dictionary
protected

Definition at line 142 of file ImportData.h.

◆ m_hasher

std::hash<std::string>& TrigGlobEffCorr::ImportData::m_hasher
protected

Definition at line 143 of file ImportData.h.

◆ m_hierarchyData

std::vector<std::size_t> TrigGlobEffCorr::ImportData::m_hierarchyData
protected

Definition at line 149 of file ImportData.h.

◆ m_hierarchyMeta

std::vector<Hierarchy> TrigGlobEffCorr::ImportData::m_hierarchyMeta
protected

Definition at line 148 of file ImportData.h.

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels)

Definition at line 132 of file AthMessaging.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_parent

TrigGlobalEfficiencyCorrectionTool* TrigGlobEffCorr::ImportData::m_parent
protected

Definition at line 141 of file ImportData.h.

◆ m_triggerDefs

std::map<std::size_t,TrigDef> TrigGlobEffCorr::ImportData::m_triggerDefs
protected

Definition at line 145 of file ImportData.h.

◆ m_triggerThresholds

std::map<std::size_t,float> TrigGlobEffCorr::ImportData::m_triggerThresholds
protected

Definition at line 146 of file ImportData.h.


The documentation for this class was generated from the following files:
python.root_lsr_rank.hashes
hashes
Definition: root_lsr_rank.py:34
AthMessaging::m_lvl
std::atomic< MSG::Level > m_lvl
Current logging level.
Definition: AthMessaging.h:138
TrigGlobEffCorr::TT_E_MU
@ TT_E_MU
Definition: ImportData.h:48
TrigGlobEffCorr::ImportData::importMapKeys
bool importMapKeys(const std::string &tag, std::map< std::size_t, std::map< std::size_t, int > > &keysPerLeg)
Definition: ImportData.cxx:438
python.AtlRunQueryAMI.period
period
Definition: AtlRunQueryAMI.py:225
TrigGlobEffCorr::TT_2MU_SYM
@ TT_2MU_SYM
Definition: ImportData.h:46
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
TrigGlobEffCorr::TT_2E_MU_SYM
@ TT_2E_MU_SYM
Definition: ImportData.h:64
TrigGlobEffCorr::TT_2G_ASYM
@ TT_2G_ASYM
Definition: ImportData.h:50
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
xAOD::Electron
Electron_v1 Electron
Definition of the current "egamma version".
Definition: Event/xAOD/xAODEgamma/xAODEgamma/Electron.h:17
TrigGlobEffCorr::TT_SINGLE_MU
@ TT_SINGLE_MU
Definition: ImportData.h:38
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
collListGuids.line
string line
Definition: collListGuids.py:77
TrigGlobEffCorr::ImportData::m_dataPeriods
std::map< std::string, std::pair< unsigned, unsigned > > m_dataPeriods
Definition: ImportData.h:147
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
python.base_data.config
config
Definition: base_data.py:21
find_tgc_unfilled_channelids.runs
int runs
Definition: find_tgc_unfilled_channelids.py:10
test_pyathena.pt
pt
Definition: test_pyathena.py:11
TrigGlobEffCorr::TT_2E_ASYM
@ TT_2E_ASYM
Definition: ImportData.h:45
TrigGlobEffCorr::ImportData::Hierarchy
TrigGlobalEfficiencyCorrectionTool::Hierarchy Hierarchy
Definition: ImportData.h:89
TrigGlobEffCorr::TT_E_2MU_SYM
@ TT_E_2MU_SYM
Definition: ImportData.h:65
TrigGlobEffCorr::TT_SINGLE_E
@ TT_SINGLE_E
Definition: ImportData.h:37
python.TrigTLAMonitorAlgorithm.triggers
triggers
Definition: TrigTLAMonitorAlgorithm.py:196
TrigGlobEffCorr::ImportData::importHierarchies
bool importHierarchies()
Definition: ImportData.cxx:348
python.AtlRunQueryAMI.year
year
Definition: AtlRunQueryAMI.py:226
AthMessaging::m_imsg
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
Definition: AthMessaging.h:135
x
#define x
TrigGlobEffCorr::TT_MUON_FLAG
@ TT_MUON_FLAG
Definition: ImportData.h:27
TrigGlobEffCorr::TT_E_2MU_ASYM
@ TT_E_2MU_ASYM
Definition: ImportData.h:67
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
TrigGlobEffCorr::TT_ELECTRON_FLAG
@ TT_ELECTRON_FLAG
Definition: ImportData.h:26
TrigGlobEffCorr::TT_2MU_G_SYM
@ TT_2MU_G_SYM
Definition: ImportData.h:75
TrigGlobEffCorr::ImportData::parseTriggerString
std::vector< TrigDef > parseTriggerString(const std::string &triggerString, bool &success)
Definition: ImportData.cxx:546
TrigGlobEffCorr::TT_2G_SYM
@ TT_2G_SYM
Definition: ImportData.h:49
TrigGlobEffCorr::ImportData::m_hierarchyData
std::vector< std::size_t > m_hierarchyData
Definition: ImportData.h:149
TrigGlobEffCorr::TT_2E_SYM
@ TT_2E_SYM
Definition: ImportData.h:44
TrigGlobEffCorr::TT_MU_2G_ASYM
@ TT_MU_2G_ASYM
Definition: ImportData.h:78
TrigGlobEffCorr::ImportData::importThresholds
bool importThresholds(const std::map< std::string, std::string > &overridenThresholds={})
Definition: ImportData.cxx:252
TrigGlobEffCorr::TT_2E_MU_ASYM
@ TT_2E_MU_ASYM
Definition: ImportData.h:66
TrigConf::MSGTC::Level
Level
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStream.h:21
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TrigGlobEffCorr::ImportData::m_hierarchyMeta
std::vector< Hierarchy > m_hierarchyMeta
Definition: ImportData.h:148
TrigGlobEffCorr::TT_PHOTON_FLAG
@ TT_PHOTON_FLAG
Definition: ImportData.h:28
lumiFormat.i
int i
Definition: lumiFormat.py:85
TrigGlobEffCorr::ImportData::associatedLeptonFlavour
xAOD::Type::ObjectType associatedLeptonFlavour(std::size_t leg, bool &success)
Definition: ImportData.cxx:534
TrigGlobEffCorr::TT_TRILEPTON_ASYM
@ TT_TRILEPTON_ASYM
Definition: ImportData.h:57
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
extractSporadic.h
list h
Definition: extractSporadic.py:97
TrigGlobEffCorr::TT_TRILEPTON_HALFSYM
@ TT_TRILEPTON_HALFSYM
Definition: ImportData.h:56
asg::AsgMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AsgMessaging.cxx:49
test_pyathena.parent
parent
Definition: test_pyathena.py:15
compute_lumi.leg
leg
Definition: compute_lumi.py:95
TrigGlobEffCorr::ImportData::importPeriods
bool importPeriods()
Definition: ImportData.cxx:325
hist_file_dump.f
f
Definition: hist_file_dump.py:141
TrigGlobEffCorr::TT_4E_SYM
@ TT_4E_SYM
Definition: ImportData.h:82
TrigGlobEffCorr::ImportData::m_hasher
std::hash< std::string > & m_hasher
Definition: ImportData.h:143
TrigGlobEffCorr::TT_E_2G_ASYM
@ TT_E_2G_ASYM
Definition: ImportData.h:74
WriteCalibToCool.swap
swap
Definition: WriteCalibToCool.py:94
contents
void contents(std::vector< std::string > &keys, TDirectory *td, const std::string &directory, const std::string &pattern, const std::string &path)
Definition: computils.cxx:320
TrigGlobEffCorr::ImportData::m_triggerThresholds
std::map< std::size_t, float > m_triggerThresholds
Definition: ImportData.h:146
plotting.yearwise_efficiency.years
list years
Definition: yearwise_efficiency.py:29
grepfile.sep
sep
Definition: grepfile.py:38
TrigGlobEffCorr::TT_2E_G_ASYM
@ TT_2E_G_ASYM
Definition: ImportData.h:73
TrigGlobEffCorr::TriggerType
TriggerType
Definition: ImportData.h:23
TrigGlobEffCorr::ImportData::m_triggerDefs
std::map< std::size_t, TrigDef > m_triggerDefs
Definition: ImportData.h:145
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
asg::AsgMessaging
Class mimicking the AthMessaging class from the offline software.
Definition: AsgMessaging.h:40
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
item
Definition: ItemListSvc.h:43
TrigGlobEffCorr::ImportData::readDataFile
bool readDataFile(const char *filename, std::vector< std::string > &contents)
Definition: ImportData.cxx:52
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
xAOD::Photon
Photon_v1 Photon
Definition of the current "egamma version".
Definition: Event/xAOD/xAODEgamma/xAODEgamma/Photon.h:17
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:431
Muon
struct TBPatternUnitContext Muon
get_generator_info.version
version
Definition: get_generator_info.py:33
CalibCoolCompareRT.nm
nm
Definition: CalibCoolCompareRT.py:110
y
#define y
h
TrigGlobEffCorr::TT_UNKNOWN
@ TT_UNKNOWN
Definition: ImportData.h:24
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TrigGlobEffCorr::TT_E_2G_SYM
@ TT_E_2G_SYM
Definition: ImportData.h:72
unit
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
Definition: AmgMatrixBasePlugin.h:21
AthMessaging::m_nm
std::string m_nm
Message source name.
Definition: AthMessaging.h:129
TrigGlobEffCorr::TT_2MU_G_ASYM
@ TT_2MU_G_ASYM
Definition: ImportData.h:77
CaloCellTimeCorrFiller.filename
filename
Definition: CaloCellTimeCorrFiller.py:24
TrigGlobEffCorr::ImportData::importAll
bool importAll(const std::map< std::string, std::string > &overridenThresholds={})
Definition: ImportData.cxx:44
ITrigGlobalEfficiencyCorrectionTool::toolnameForDefaultScaleFactor
static std::string toolnameForDefaultScaleFactor()
To be used with the ListOfLegsPerTool property:
Definition: ITrigGlobalEfficiencyCorrectionTool.h:56
xAODType::Tau
@ Tau
The object is a tau (jet)
Definition: ObjectType.h:49
TrigGlobEffCorr::TT_4MU_SYM
@ TT_4MU_SYM
Definition: ImportData.h:83
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
TrigGlobEffCorr::ImportData::importTriggers
bool importTriggers()
Definition: ImportData.cxx:106
TrigGlobEffCorr::TT_MU_2G_SYM
@ TT_MU_2G_SYM
Definition: ImportData.h:76
TrigGlobEffCorr::removeWhitespaces
std::string removeWhitespaces(const std::string &s)
Definition: ImportData.h:152
TrigGlobEffCorr::ImportData::m_dictionary
std::map< std::size_t, std::string > & m_dictionary
Definition: ImportData.h:142
TrigGlobEffCorr::TT_2E_G_SYM
@ TT_2E_G_SYM
Definition: ImportData.h:71
TrigGlobEffCorr::ImportData::setNonMixed3LType
void setNonMixed3LType(TrigDef &def, TriggerType flavourFlag)
Definition: ImportData.cxx:94
value_type
Definition: EDM_MasterSearch.h:11
TrigGlobEffCorr::ImportData::m_parent
TrigGlobalEfficiencyCorrectionTool * m_parent
Definition: ImportData.h:141
TrigGlobEffCorr::TT_MU_G
@ TT_MU_G
Definition: ImportData.h:52
TrigGlobEffCorr::TT_E_G
@ TT_E_G
Definition: ImportData.h:51
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
TrigGlobEffCorr::TT_TRILEPTON_SYM
@ TT_TRILEPTON_SYM
Definition: ImportData.h:55
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
fitman.k
k
Definition: fitman.py:528
TrigGlobEffCorr::TT_SINGLE_G
@ TT_SINGLE_G
Definition: ImportData.h:39
TrigGlobEffCorr::TT_2MU_ASYM
@ TT_2MU_ASYM
Definition: ImportData.h:47
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37