ATLAS Offline Software
Loading...
Searching...
No Matches
MenuPrescaleSet.AutoPrescaleSetGen Class Reference
Collaboration diagram for MenuPrescaleSet.AutoPrescaleSetGen:

Public Member Functions

 __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)
 store_json_files (flags, AutoPrescaleSet ps_set)

Static Public Attributes

Optional enable_chains = None
list disable_chains = field(default_factory=list)
dict chain_prescales = field(default_factory=dict)
Optional enable_groups = None
list disable_groups = field(default_factory=list)
dict group_prescales = field(default_factory=dict)
Optional enable_l1_triggers = None
list disable_l1_triggers = field(default_factory=list)
dict l1_trigger_prescales = field(default_factory=dict)
bool disable_unused_l1_triggers = False
Optional custom_rules = None

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__()

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
STL class.

◆ 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
bool match(std::string s1, std::string s2)
match the individual directories of two strings
Definition hcg.cxx:357

◆ store_json_files()

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

◆ chain_prescales

dict MenuPrescaleSet.AutoPrescaleSetGen.chain_prescales = field(default_factory=dict)
static

Definition at line 34 of file MenuPrescaleSet.py.

◆ custom_rules

Optional MenuPrescaleSet.AutoPrescaleSetGen.custom_rules = None
static

Definition at line 45 of file MenuPrescaleSet.py.

◆ disable_chains

list MenuPrescaleSet.AutoPrescaleSetGen.disable_chains = field(default_factory=list)
static

Definition at line 33 of file MenuPrescaleSet.py.

◆ disable_groups

MenuPrescaleSet.AutoPrescaleSetGen.disable_groups = field(default_factory=list)
static

Definition at line 37 of file MenuPrescaleSet.py.

◆ disable_l1_triggers

MenuPrescaleSet.AutoPrescaleSetGen.disable_l1_triggers = field(default_factory=list)
static

Definition at line 41 of file MenuPrescaleSet.py.

◆ disable_unused_l1_triggers

bool MenuPrescaleSet.AutoPrescaleSetGen.disable_unused_l1_triggers = False
static

Definition at line 43 of file MenuPrescaleSet.py.

◆ enable_chains

Optional MenuPrescaleSet.AutoPrescaleSetGen.enable_chains = None
static

Definition at line 32 of file MenuPrescaleSet.py.

◆ enable_groups

MenuPrescaleSet.AutoPrescaleSetGen.enable_groups = None
static

Definition at line 36 of file MenuPrescaleSet.py.

◆ enable_l1_triggers

Optional MenuPrescaleSet.AutoPrescaleSetGen.enable_l1_triggers = None
static

Definition at line 40 of file MenuPrescaleSet.py.

◆ group_prescales

dict MenuPrescaleSet.AutoPrescaleSetGen.group_prescales = field(default_factory=dict)
static

Definition at line 38 of file MenuPrescaleSet.py.

◆ l1_trigger_prescales

dict MenuPrescaleSet.AutoPrescaleSetGen.l1_trigger_prescales = field(default_factory=dict)
static

Definition at line 42 of file MenuPrescaleSet.py.


The documentation for this class was generated from the following file: