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 | Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
MenuPrescaleSet.AutoPrescaleSetGen Class Reference
Collaboration diagram for MenuPrescaleSet.AutoPrescaleSetGen:

Public Member Functions

def __post_init__ (self)
 
AutoPrescaleSet generate (self, flags, bool store=False)
 

Static Public Member Functions

AutoPrescaleSet disable_unused_l1 (AutoPrescaleSet ps_set, dict[str, dict[str, Any]] chain_dicts)
 
def store_json_files (flags, AutoPrescaleSet ps_set)
 

Public Attributes

 enable_chains
 
 disable_chains
 
 enable_groups
 
 disable_groups
 
 enable_l1_triggers
 
 disable_l1_triggers
 

Static Public Attributes

 default_factory
 
 bool
 

Detailed Description

This is an extremely basic prescale set generator. No "smart" optimizations (e.g. prescaling 
all HLT chains for an L1 trigger -> prescale L1 trigger by lowest prescale) are applied.

The prescales are set based on the following priority: disable_* >> *_prescales >> enable_*.
Also, HLT chain >> group (i.e. a group can be disabled while a single chain in that group is enables).
If the enable_chains/groups/l1_triggers list is not set, all triggers in that category will be enabled by default.

This is NOT meant to be used in data-taking, only for development tests and standard reprocessings/MC productions.

For any more complex prescale sets, refer to the `TrigMenuRulebook` (used to create PS sets
for data-taking), located at: https://gitlab.cern.ch/atlas-trigger-menu/TrigMenuRulebook/

Definition at line 17 of file MenuPrescaleSet.py.

Member Function Documentation

◆ __post_init__()

def MenuPrescaleSet.AutoPrescaleSetGen.__post_init__ (   self)

Definition at line 47 of file MenuPrescaleSet.py.

47  def __post_init__(self):
48  if self.enable_chains is not None: self.enable_chains = set(self.enable_chains)
49  self.disable_chains = set(self.disable_chains)
50 
51  if self.enable_groups is not None: self.enable_groups = set(self.enable_groups)
52  self.disable_groups = set(self.disable_groups)
53 
54  if self.enable_l1_triggers is not None: self.enable_l1_triggers = set(self.enable_l1_triggers)
55  self.disable_l1_triggers = set(self.disable_l1_triggers)
56 
57 

◆ disable_unused_l1()

AutoPrescaleSet MenuPrescaleSet.AutoPrescaleSetGen.disable_unused_l1 ( AutoPrescaleSet  ps_set,
dict[str, dict[str, Any]]  chain_dicts 
)
static
Disable unused L1 triggers

Definition at line 59 of file MenuPrescaleSet.py.

59  def disable_unused_l1(ps_set: AutoPrescaleSet, chain_dicts: dict[str, dict[str, Any]]) -> AutoPrescaleSet:
60  '''Disable unused L1 triggers'''
61  enabled_l1_triggers = set()
62 
63  for chain in ps_set.hlt_prescales:
64  l1 = chain_dicts[chain]['L1item']
65  if ps_set.hlt_prescales[chain] > 0 and l1: # Skip L1_All
66  enabled_l1_triggers |= {l1} if isinstance(l1, str) else set(l1)
67 
68  for l1_trigger in ps_set.l1_prescales:
69  if l1_trigger not in enabled_l1_triggers:
70  ps_set.l1_prescales[l1_trigger] = -1
71 
72  return ps_set
73 
74 

◆ generate()

AutoPrescaleSet MenuPrescaleSet.AutoPrescaleSetGen.generate (   self,
  flags,
bool   store = False 
)

Definition at line 86 of file MenuPrescaleSet.py.

86  def generate(self, flags, store: bool = False) -> AutoPrescaleSet:
87  # Get list of HLT chain dicts
88  from TriggerMenuMT.HLT.Config.Utility.HLTMenuConfig import HLTMenuConfig
89 
90  # Get list of L1 triggers
91  from TrigConfigSvc.TriggerConfigAccess import getL1MenuAccess
92  l1_triggers = getL1MenuAccess(flags).itemNames()
93 
94  group_prescales_set = set(self.group_prescales.keys())
95 
96  def match(s1: set, s2: set) -> bool: return not s1.isdisjoint(s2)
97 
98  # Return PS set
99  ps_set = AutoPrescaleSet()
100 
101  # Generate HLT prescales first
102  for chain, chain_dict in HLTMenuConfig.dicts().items():
103  ps = 1
104 
105  if chain in self.disable_chains: ps = -1
106  elif self.enable_chains is not None and chain not in self.enable_chains: ps = -1
107  elif chain in self.chain_prescales: ps = self.chain_prescales[chain]
108  elif match(self.disable_groups, chain_dict['groups']): ps = -1
109  elif self.enable_groups is not None and not match(self.enable_groups, chain_dict['groups']): ps = -1
110  elif match(group_prescales_set, chain_dict['groups']):
111  # Apply the PS of the last matched group
112  for group in reversed(chain_dict['groups']):
113  if group in self.group_prescales:
114  ps = self.group_prescales[group]
115  break
116  elif chain_dict['L1item']: # Skips the L1_All trigger (set to '')
117  l1s = {chain_dict['L1item']} if isinstance(chain_dict['L1item'], str) else set(chain_dict['L1item'])
118 
119  if l1s.issubset(self.disable_l1_triggers): ps = -1
120  elif self.enable_l1_triggers is not None and not l1s & self.enable_l1_triggers: ps = -1
121 
122  if ps <= 0: ps = -1
123 
124  ps_set.hlt_prescales[chain] = ps
125 
126  # Now generate L1 prescales
127  for l1_trigger in l1_triggers:
128  ps = 1
129  if l1_trigger in self.disable_l1_triggers: ps = -1
130  elif self.enable_l1_triggers is not None and l1_trigger not in self.enable_l1_triggers: ps = -1
131  elif l1_trigger in self.l1_trigger_prescales: ps = self.l1_trigger_prescales[l1_trigger]
132 
133  if ps <= 0: ps = -1
134 
135  ps_set.l1_prescales[l1_trigger] = ps
136 
137  if self.disable_unused_l1_triggers:
138  ps_set = self.disable_unused_l1(ps_set, HLTMenuConfig.dicts())
139 
140  # Apply any custom rules, if required
141  if self.custom_rules:
142  ps_set = self.custom_rules(ps_set, HLTMenuConfig.dicts())
143 
144 
145  # Apply HLT prescales to the HLTMenuConfig
146  for chain, ps in ps_set.hlt_prescales.items():
147  if ps != 1: log.info(f'Applying HLTPS to the chain {chain}: {ps}')
148  HLTMenuConfig.dicts()[chain]['prescale'] = ps
149 
150  # Store the prescale JSON files
151  if store: self.store_json_files(flags, ps_set)
152 
153  return ps_set
154 

◆ store_json_files()

def MenuPrescaleSet.AutoPrescaleSetGen.store_json_files (   flags,
AutoPrescaleSet  ps_set 
)
static

Definition at line 76 of file MenuPrescaleSet.py.

76  def store_json_files(flags, ps_set: AutoPrescaleSet):
77  # Store the L1/HLTPrescale json files
78  from TrigConfigSvc.TrigConfigSvcCfg import createL1PrescalesFileFromMenu
79  createL1PrescalesFileFromMenu(flags, ps_set.l1_prescales)
80 
81  from TriggerMenuMT.HLT.Config.Utility.HLTMenuConfig import HLTMenuConfig
82  from TriggerMenuMT.HLT.Config.JSON.HLTPrescaleJSON import generatePrescaleJSON
83  generatePrescaleJSON(flags, HLTMenuConfig.dictsList())
84 
85 

Member Data Documentation

◆ bool

MenuPrescaleSet.AutoPrescaleSetGen.bool
static

Definition at line 43 of file MenuPrescaleSet.py.

◆ default_factory

MenuPrescaleSet.AutoPrescaleSetGen.default_factory
static

Definition at line 33 of file MenuPrescaleSet.py.

◆ disable_chains

MenuPrescaleSet.AutoPrescaleSetGen.disable_chains

Definition at line 49 of file MenuPrescaleSet.py.

◆ disable_groups

MenuPrescaleSet.AutoPrescaleSetGen.disable_groups

Definition at line 52 of file MenuPrescaleSet.py.

◆ disable_l1_triggers

MenuPrescaleSet.AutoPrescaleSetGen.disable_l1_triggers

Definition at line 55 of file MenuPrescaleSet.py.

◆ enable_chains

MenuPrescaleSet.AutoPrescaleSetGen.enable_chains

Definition at line 48 of file MenuPrescaleSet.py.

◆ enable_groups

MenuPrescaleSet.AutoPrescaleSetGen.enable_groups

Definition at line 51 of file MenuPrescaleSet.py.

◆ enable_l1_triggers

MenuPrescaleSet.AutoPrescaleSetGen.enable_l1_triggers

Definition at line 54 of file MenuPrescaleSet.py.


The documentation for this class was generated from the following file:
python.TriggerConfigAccess.getL1MenuAccess
L1MenuAccess getL1MenuAccess(flags=None)
Definition: TriggerConfigAccess.py:129
python.MadGraphUtils.generate
def generate(process_dir='PROC_mssm_0', grid_pack=False, gridpack_compile=False, extlhapath=None, required_accuracy=0.01, runArgs=None, bias_module=None, requirePMGSettings=False)
Definition: MadGraphUtils.py:362
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
TrigJetMonitorAlgorithm.items
items
Definition: TrigJetMonitorAlgorithm.py:71
python.TrigConfigSvcCfg.createL1PrescalesFileFromMenu
def createL1PrescalesFileFromMenu(flags, Optional[dict[str, float]] prescales=None)
Definition: TrigConfigSvcCfg.py:165
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
HLTPrescaleJSON.generatePrescaleJSON
def generatePrescaleJSON(flags, chainDicts)
Definition: HLTPrescaleJSON.py:8
match
bool match(std::string s1, std::string s2)
match the individual directories of two strings
Definition: hcg.cxx:356