ATLAS Offline Software
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 729 of file ImportData.cxx.

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

◆ associatedLeptonFlavour() [1/2]

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

Definition at line 515 of file ImportData.cxx.

516 {
517  // note: 'success' is not set to 'true', only downgraded to 'false' if needed
518  if(leg.length()>=2 && leg[0]=='e' && leg[1]>='1' && leg[1]<='9') return xAOD::Type::Electron;
519  else if(leg.length()>=3 && leg[0]=='m' && leg[1]=='u' && leg[2]>='1' && leg[2]<='9') return xAOD::Type::Muon;
520  else if(leg.length()>=3 && leg[0]=='g' && leg[1]>='1' && leg[1]<='9') return xAOD::Type::Photon;
521  else if(leg.length()>=4 && leg[0]=='t' && leg[1]=='a' && leg[2]=='u' && leg[3]>='1' && leg[3]<='9') return xAOD::Type::Tau;
522  success = false;
523  return xAOD::Type::Other;
524 }

◆ associatedLeptonFlavour() [2/2]

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

Definition at line 526 of file ImportData.cxx.

527 {
528  // note: 'success' is not set to 'true', only downgraded to 'false' if needed
529  auto itr = m_dictionary.find(leg);
530  if(itr != m_dictionary.end())
531  {
532  return associatedLeptonFlavour(itr->second,success);
533  }
534  success = false;
535  return xAOD::Type::Other;
536 }

◆ 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 480 of file ImportData.cxx.

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

◆ 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 340 of file ImportData.cxx.

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

◆ importMapKeys()

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

Definition at line 430 of file ImportData.cxx.

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

◆ importPeriods()

bool ImportData::importPeriods ( )

Definition at line 317 of file ImportData.cxx.

318 {
319  m_dataPeriods.clear();
320  std::vector<std::string> config;
321  if(!readDataFile("TrigGlobalEfficiencyCorrection/DataPeriods.cfg", config)) return false;
322  std::stringstream ss;
323  std::string key;
324  std::pair<unsigned,unsigned> runs;
325  for(auto& line : config)
326  {
327  ss.clear();
328  ss.str(line);
329  ss >> key >> runs.first >> runs.second;
330  if(ss.fail())
331  {
332  m_dataPeriods.clear();
333  return false;
334  }
335  m_dataPeriods.emplace(key,runs);
336  }
337  return true;
338 }

◆ importThresholds()

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

Override thresholds if requested

Definition at line 244 of file ImportData.cxx.

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

◆ 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  bool found_tau_leg = false;
126  // Skip chains with a tau leg, not yet supported
127  while((ss >> token) && !found_tau_leg)
128  {
129  auto flavour = associatedLeptonFlavour(token, success);
130  if(flavour == xAOD::Type::Tau) found_tau_leg = true;
131  }
132  if(found_tau_leg) continue;
133 
134  ss.clear();
135  ss.str(line);
136  ss >> triggerName;
137  m_dictionary[h] = triggerName;
138  ATH_MSG_DEBUG(std::to_string(h) << " " << triggerName );
139  for(std::size_t& leg : def.leg)
140  {
141  if(!(ss >> token)) break;
142  h = m_hasher(token);
143  m_dictionary.emplace(h,token);
144  leg = h;
145  if(m_triggerThresholds.find(h) == m_triggerThresholds.end())
146  {
147  ATH_MSG_ERROR("Unknown trigger leg '" << token << "' found in Triggers.cfg");
148  success = false;
149  }
150  }
151  if(!def.leg[0])
152  {
153  def.leg[0] = h;
154  if(m_triggerThresholds.find(h) == m_triggerThresholds.end())
155  {
156  ATH_MSG_ERROR("Unknown trigger leg '" << triggerName << "' (inferred from trigger name) found in Triggers.cfg");
157  success = false;
158  }
159  }
160  if(!success) continue;
161 
163  def.type = TT_UNKNOWN;
164  auto flavour0 = associatedLeptonFlavour(def.leg[0], success);
165  int ne = (flavour0 == xAOD::Type::Electron)*1;
166  int nm = (flavour0 == xAOD::Type::Muon)*1;
167  if(def.leg[1])
168  {
169  auto flavour1 = associatedLeptonFlavour(def.leg[1], success);
170  if(flavour1 == xAOD::Type::Electron)
171  {
172  if(!ne) std::swap(def.leg[0],def.leg[1]);
173  ++ne;
174  }
175  else if(flavour1 == xAOD::Type::Muon)
176  {
177  if(!(ne+nm)) std::swap(def.leg[0],def.leg[1]);
178  ++nm;
179  }
180  else if(flavour1 != xAOD::Type::Photon) success = false;
181  if(def.leg[2])
182  {
183  auto flavour2 = associatedLeptonFlavour(def.leg[2], success);
184  if(flavour2 == xAOD::Type::Electron)
185  {
186  if(!ne) std::swap(def.leg[0], def.leg[2]);
187  else if(ne==1) std::swap(def.leg[1], def.leg[2]);
188  ++ne;
189  }
190  else if(flavour2 == xAOD::Type::Muon)
191  {
192  if(!(ne+nm)) std::swap(def.leg[0], def.leg[2]);
193  else if((ne+nm)==1) std::swap(def.leg[1], def.leg[2]);
194  ++nm;
195  }
196  else if(flavour2 != xAOD::Type::Photon) success = false;
197  if(def.leg[3])
198  {
200  if(std::count(def.leg.cbegin(),
201  def.leg.cend(),
202  def.leg[0]) == 4)
203  {
204  def.type = nm? TT_4MU_SYM : TT_4E_SYM;
205  }
206  else success = false;
207  }
208  else if(ne+nm==0 || ne==3 || nm==3)
209  {
211  }
212  else
213  {
214  bool sym = (def.leg[0]==def.leg[1] || def.leg[1]==def.leg[2]);
215  if(ne==2) def.type = nm? (sym? TT_2E_MU_SYM : TT_2E_MU_ASYM) : (sym? TT_2E_G_SYM : TT_2E_G_ASYM);
216  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);
217  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);
218  else success = false;
219  }
220  }
221  else
222  {
223  if(ne==2) def.type = (def.leg[0]==def.leg[1])? TT_2E_SYM : TT_2E_ASYM;
224  else if(nm==2) def.type = (def.leg[0]==def.leg[1])? TT_2MU_SYM : TT_2MU_ASYM;
225  else if(ne+nm==0) def.type = (def.leg[0]==def.leg[1])? TT_2G_SYM : TT_2G_ASYM;
226  else if(ne==1 && nm==1) def.type = TT_E_MU;
227  else if(ne==1) def.type = TT_E_G;
228  else if(nm==1) def.type = TT_MU_G;
229  }
230  }
231  else
232  {
233  def.type = ne? TT_SINGLE_E : nm? TT_SINGLE_MU : TT_SINGLE_G;
234  }
235  if(!success || def.type==TT_UNKNOWN)
236  {
237  success = false;
238  ATH_MSG_ERROR("Configuration issue for trigger " << triggerName);
239  }
240  }
241  return success;
242 }

◆ 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 538 of file ImportData.cxx.

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

◆ 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 586 of file ImportData.cxx.

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

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:430
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
checkFileSG.line
line
Definition: checkFileSG.py:75
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
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:340
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
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:538
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:244
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:526
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:317
hist_file_dump.f
f
Definition: hist_file_dump.py:135
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:228
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
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
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