Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | List of all members
python.MuonAnalysisConfig.MuonTriggerAnalysisSFBlock Class Reference
Inheritance diagram for python.MuonAnalysisConfig.MuonTriggerAnalysisSFBlock:
Collaboration diagram for python.MuonAnalysisConfig.MuonTriggerAnalysisSFBlock:

Public Member Functions

def __init__ (self, configName='')
 
def makeAlgs (self, config)
 

Detailed Description

Definition at line 366 of file MuonAnalysisConfig.py.

Constructor & Destructor Documentation

◆ __init__()

def python.MuonAnalysisConfig.MuonTriggerAnalysisSFBlock.__init__ (   self,
  configName = '' 
)

Definition at line 368 of file MuonAnalysisConfig.py.

368  def __init__ (self, configName='') :
369  super (MuonTriggerAnalysisSFBlock, self).__init__ ()
370 
371  self.addOption ('triggerChainsPerYear', {}, type=None,
372  info="a dictionary with key (string) the year and value (list of "
373  "strings) the trigger chains. The default is {} (empty dictionary).")
374  self.addOption ('muonID', '', type=str,
375  info="the muon quality WP (string) to use.")
376  self.addOption ('saveSF', True, type=bool,
377  info="define whether we decorate the trigger scale factor "
378  "The default is True.")
379  self.addOption ('saveEff', False, type=bool,
380  info="define whether we decorate the trigger MC efficiencies "
381  "The default is False.")
382  self.addOption ('saveEffData', False, type=bool,
383  info="define whether we decorate the trigger data efficiencies "
384  "The default is False.")
385  self.addOption ('prefixSF', 'trigEffSF', type=str,
386  info="the decoration prefix for trigger scale factors, "
387  "the default is 'trigEffSF'")
388  self.addOption ('prefixEff', 'trigEff', type=str,
389  info="the decoration prefix for MC trigger efficiencies, "
390  "the default is 'trigEff'")
391  self.addOption ('prefixEffData', 'trigEffData', type=str,
392  info="the decoration prefix for data trigger efficiencies, "
393  "the default is 'trigEffData'")
394  self.addOption ('includeAllYears', False, type=bool,
395  info="if True, all configured years will be included in all jobs. "
396  "The default is False.")
397  self.addOption ('removeHLTPrefix', True, type=bool,
398  info="remove the HLT prefix from trigger chain names, "
399  "The default is True.")
400  self.addOption ('containerName', '', type=str,
401  info="the input muon container, with a possible selection, in "
402  "the format container or container.selection.")
403 

Member Function Documentation

◆ makeAlgs()

def python.MuonAnalysisConfig.MuonTriggerAnalysisSFBlock.makeAlgs (   self,
  config 
)

Definition at line 404 of file MuonAnalysisConfig.py.

404  def makeAlgs (self, config) :
405 
406  if config.dataType() is not DataType.Data:
407 
408  # Dictionary from TrigGlobalEfficiencyCorrection/Triggers.cfg
409  # Key is trigger chain (w/o HLT prefix)
410  # Value is empty for single leg trigger or list of legs
411  triggerDict = TriggerDict()
412 
413  if self.includeAllYears:
414  years = [int(year) for year in self.triggerChainsPerYear.keys()]
415  elif config.campaign() is Campaign.MC20a:
416  years = [2015, 2016]
417  elif config.campaign() is Campaign.MC20d:
418  years = [2017]
419  elif config.campaign() is Campaign.MC20e:
420  years = [2018]
421  elif config.campaign() in [Campaign.MC21a, Campaign.MC23a]:
422  years = [2022]
423  elif config.campaign() in [Campaign.MC23c, Campaign.MC23d]:
424  years = [2023]
425 
426  triggerYearStartBoundaries = {
427  2015: 260000,
428  2016: 290000,
429  2017: 324000,
430  2018: 348000,
431  2022: 410000,
432  2023: 450000,
433  2024: 470000,
434  }
435 
436  triggerConfigs = {}
437  triggerConfigYears = {}
438  for year in years:
439  triggerChains = self.triggerChainsPerYear.get(int(year), self.triggerChainsPerYear.get(str(year), []))
440  for chain in triggerChains:
441  chain = chain.replace(" || ", "_OR_")
442  chain_noHLT = chain.replace("HLT_", "")
443  chain_out = chain_noHLT if self.removeHLTPrefix else chain
444  legs = triggerDict[chain_noHLT]
445  if not legs:
446  if chain_noHLT.startswith('mu') and chain_noHLT[2].isdigit:
447  # Need to support HLT_mu26_ivarmedium_OR_HLT_mu50
448  triggerConfigs[chain_out] = chain
449  if chain_out in triggerConfigYears.keys():
450  triggerConfigYears[chain_out].append(year)
451  else:
452  triggerConfigYears[chain_out] = [year]
453  else:
454  for leg in legs:
455  if leg.startswith('mu') and leg[2].isdigit:
456  # Need to support HLT_mu14_ivarloose
457  leg_out = leg if self.removeHLTPrefix else f"HLT_{leg}"
458  triggerConfigs[leg_out] = f"HLT_{leg}"
459  if leg_out in triggerConfigYears.keys():
460  triggerConfigYears[leg_out].append(year)
461  else:
462  triggerConfigYears[leg_out] = [year]
463 
464  for trig_short, trig in triggerConfigs.items():
465  alg = config.createAlgorithm('CP::MuonTriggerEfficiencyScaleFactorAlg',
466  'MuonTrigEfficiencyCorrectionsAlg_' + self.muonID + '_' + trig_short)
467  config.addPrivateTool( 'efficiencyScaleFactorTool',
468  'CP::MuonTriggerScaleFactors' )
469 
470  # Reproduce config from TrigGlobalEfficiencyAlg
471  alg.efficiencyScaleFactorTool.MuonQuality = self.muonID
472  alg.efficiencyScaleFactorTool.AllowZeroSF = True
473 
474  # Avoid warnings for missing triggers
475  if self.includeAllYears:
476  alg.minRunNumber = 0
477  alg.maxRunNumber = 999999
478 
479  if triggerConfigYears[trig_short][0] != years[0]:
480  alg.minRunNumber = triggerYearStartBoundaries.get(triggerConfigYears[trig_short][0], 999999)
481  if triggerConfigYears[trig_short][-1] != years[-1]:
482  alg.maxRunNumber = triggerYearStartBoundaries.get(triggerConfigYears[trig_short][-1] + 1, 999999)
483  elif config.campaign() is Campaign.MC20a: # to avoid potential corner-cases keep the default config unchanged
484  if triggerConfigYears[trig_short] == [2015]:
485  alg.maxRunNumber = 290000
486  elif triggerConfigYears[trig_short] == [2016]:
487  alg.minRunNumber = 290000
488 
489  alg.trigger = trig
490  if self.saveSF:
491  alg.scaleFactorDecoration = f"muon_{self.prefixSF}_{trig_short}_%SYS%"
492  if self.saveEff:
493  alg.mcEfficiencyDecoration = f"muon_{self.prefixEff}_{trig_short}_%SYS%"
494  if self.saveEffData:
495  alg.dataEfficiencyDecoration = f"muon_{self.prefixEffData}_{trig_short}_%SYS%"
496  alg.outOfValidity = 2 #silent
497  alg.outOfValidityDeco = f"bad_eff_muontrig_{trig_short}"
498  alg.muons = config.readName (self.containerName)
499  alg.preselection = config.getPreselection (self.containerName, '')
500  if self.saveSF:
501  config.addOutputVar (self.containerName, alg.scaleFactorDecoration, f"{self.prefixSF}_{trig_short}")
502  if self.saveEff:
503  config.addOutputVar (self.containerName, alg.mcEfficiencyDecoration, f"{self.prefixEff}_{trig_short}")
504  if self.saveEffData:
505  config.addOutputVar (self.containerName, alg.dataEfficiencyDecoration, f"{self.prefixEffData}_{trig_short}")
506 
507 

The documentation for this class was generated from the following file:
dumpHVPathFromNtuple.append
bool append
Definition: dumpHVPathFromNtuple.py:91
TriggerLeg_DictHelpers.TriggerDict
def TriggerDict()
Definition: TriggerLeg_DictHelpers.py:8
python.processes.powheg.ZZ.ZZ.__init__
def __init__(self, base_directory, **kwargs)
Constructor: all process options are set here.
Definition: ZZ.py:18
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
str
Definition: BTagTrackIpAccessor.cxx:11
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798