84 toolName =
"TrigDecisionTool"
85 if toolName
in config._algorithms:
86 return config._algorithms[toolName]
89 xAODConfTool = config.createPublicTool(
"TrigConf::xAODConfigTool",
"xAODConfigTool")
90 decisionTool = config.createPublicTool(
"Trig::TrigDecisionTool", toolName)
91 decisionTool.ConfigTool = f
"{xAODConfTool.getType()}/{xAODConfTool.getName()}"
92 decisionTool.HLTSummary = config.hltSummary()
93 if config.geometry()
is LHCPeriod.Run3:
97 decisionTool.NavigationFormat =
"TrigComposite"
104 toolName =
"TrigMatchingTool"
105 if toolName
in config._algorithms:
106 return config._algorithms[toolName]
109 if config.geometry()
is LHCPeriod.Run3:
110 drScoringTool = config.createPublicTool(
"Trig::DRScoringTool",
"DRScoringTool")
111 matchingTool = config.createPublicTool(
"Trig::R3MatchingTool", toolName)
112 matchingTool.ScoringTool = f
"{drScoringTool.getType()}/{drScoringTool.getName()}"
113 matchingTool.TrigDecisionTool = f
"{decisionTool.getType()}/{decisionTool.getName()}"
115 matchingTool = config.createPublicTool(
"Trig::MatchFromCompositeTool", toolName)
116 if config.isPhyslite():
117 matchingTool.InputPrefix =
"AnalysisTrigMatch_"
127 alg = config.createAlgorithm(
'CP::TrigEventSelectionAlg',
'TrigEventSelectionAlg' )
128 alg.tool = f
'{decisionTool.getType()}/{decisionTool.getName()}'
130 alg.selectionDecoration =
'trigPassed'
131 alg.noFilter = self.noFilter
136 config.addOutputVar (
'EventInfo',
'trigPassed_' + t,
'trigPassed_' + t, noSys=
True)
140 if triggerChainsForDeco :
141 alg = config.createAlgorithm(
'CP::TrigEventSelectionAlg',
'TrigEventSelectionAlgDeco' )
142 alg.tool = f
'{decisionTool.getType()}/{decisionTool.getName()}'
143 alg.triggers = triggerChainsForDeco
144 alg.selectionDecoration =
'trigPassed'
148 for t
in triggerChainsForDeco :
150 config.addOutputVar (
'EventInfo',
'trigPassed_' + t,
'trigPassed_' + t, noSys=
True)
154 self.unprescaleData
if config.dataType()
is DataType.Data
else self.prescaleMC
161 from TriggerAnalysisAlgorithms.TriggerAnalysisSFConfig
import get_input_years, get_year_data
163 years = get_input_years(config)
171 prescale_triggers_output =
set(prescale_triggers)
173 all_lumicalc_files = [
176 for lumicalc
in lumicalc_values
180 prescale_triggersAll = list(prescale_triggers_output)
182 if not self.prescaleTriggersFormula
and not prescale_triggersAll:
185 alg = config.createAlgorithm(
'CP::TrigPrescalesAlg',
'TrigPrescalesAlg' )
186 config.addPrivateTool(
'pileupReweightingTool',
'CP::PileupReweightingTool' )
187 alg.pileupReweightingTool.LumiCalcFiles = lumicalc_files
188 alg.selectionDecoration =
'trigPassed'
189 alg.prescaleMC = config.dataType()
is not DataType.Data
190 alg.prescaleDecoration = self.prescaleDecoration
191 if self.prescaleTriggersFormula !=
'':
192 alg.triggersFormula = self.prescaleTriggersFormula
193 config.addOutputVar(
"EventInfo", alg.prescaleDecoration, alg.prescaleDecoration, noSys=
True)
195 alg.triggers = prescale_triggers
196 alg.triggersAll = prescale_triggersAll
199 for trigger
in prescale_triggers_output &
set(prescale_triggersAll):
203 alg.prescaleDecoration +
"_" + trigger,
204 alg.prescaleDecoration +
"_" + trigger,
215 raise Exception(
'multiTriggerChainsPerYear and triggerChainsPerYear cannot be configured at the same time!')
218 raise Exception(
'prescaleLumiCalcFiles and prescaleLumiCalcFilesPerYear cannot be configured at the same time!')
221 raise Exception(
'prescaleIncludeAllYearsPerRun requires prescaleLumiCalcFilesPerYear to be configured!')
224 self.unprescaleData
or self.prescaleMC
226 raise Exception(
'Lumicalc files are provided but no trigger prescale output is configured! Specify output with "unprescaleData" and/or "prescaleMC".')
234 triggers_for_selection =
set()
235 triggers_for_decoration =
set()
236 from TriggerAnalysisAlgorithms.TriggerAnalysisSFConfig
import get_input_years
237 years = get_input_years(config)
239 for year, chain_list
in trigger_chains.items():
242 target_triggers = triggers_for_selection
if int(year)
in years
else triggers_for_decoration
243 for chain
in chain_list:
245 chains = chain.split(
'||')
246 target_triggers.update(
map(str.strip, chains))
248 target_triggers.add(chain.strip())
250 self.triggerChainsForDecoration += list(triggers_for_decoration)