78 toolName =
"TrigDecisionTool"
79 if toolName
in config._algorithms:
80 return config._algorithms[toolName]
83 xAODConfTool = config.createPublicTool(
"TrigConf::xAODConfigTool",
"xAODConfigTool")
84 decisionTool = config.createPublicTool(
"Trig::TrigDecisionTool", toolName)
85 decisionTool.ConfigTool = f
"{xAODConfTool.getType()}/{xAODConfTool.getName()}"
86 decisionTool.HLTSummary = config.hltSummary()
87 if config.geometry()
is LHCPeriod.Run3:
91 decisionTool.NavigationFormat =
"TrigComposite"
98 toolName =
"TrigMatchingTool"
99 if toolName
in config._algorithms:
100 return config._algorithms[toolName]
103 if config.geometry()
is LHCPeriod.Run3:
104 drScoringTool = config.createPublicTool(
"Trig::DRScoringTool",
"DRScoringTool")
105 matchingTool = config.createPublicTool(
"Trig::R3MatchingTool", toolName)
106 matchingTool.ScoringTool = f
"{drScoringTool.getType()}/{drScoringTool.getName()}"
107 matchingTool.TrigDecisionTool = f
"{decisionTool.getType()}/{decisionTool.getName()}"
109 matchingTool = config.createPublicTool(
"Trig::MatchFromCompositeTool", toolName)
110 if config.isPhyslite():
111 matchingTool.InputPrefix =
"AnalysisTrigMatch_"
121 alg = config.createAlgorithm(
'CP::TrigEventSelectionAlg',
'TrigEventSelectionAlg' )
122 alg.tool =
'%s/%s' % \
123 ( decisionTool.getType(), decisionTool.getName() )
125 alg.selectionDecoration =
'trigPassed'
126 alg.noFilter = self.noFilter
130 t = t.replace(
".",
"p").
replace(
"-",
"_")
131 config.addOutputVar (
'EventInfo',
'trigPassed_' + t,
'trigPassed_' + t, noSys=
True)
135 if triggerChainsForDeco :
136 alg = config.createAlgorithm(
'CP::TrigEventSelectionAlg',
'TrigEventSelectionAlgDeco' )
137 alg.tool =
'%s/%s' % \
138 ( decisionTool.getType(), decisionTool.getName() )
139 alg.triggers = triggerChainsForDeco
140 alg.selectionDecoration =
'trigPassed'
144 for t
in triggerChainsForDeco :
145 t = t.replace(
".",
"p").
replace(
"-",
"_")
146 config.addOutputVar (
'EventInfo',
'trigPassed_' + t,
'trigPassed_' + t, noSys=
True)
150 self.unprescaleData
if config.dataType()
is DataType.Data
else self.prescaleMC
157 from TriggerAnalysisAlgorithms.TriggerAnalysisSFConfig
import get_input_years, get_year_data
159 years = get_input_years(config)
167 prescale_triggers_output =
set(prescale_triggers)
169 all_lumicalc_files = [
172 for lumicalc
in lumicalc_values
176 prescale_triggersAll = list(prescale_triggers_output)
178 if not self.prescaleTriggersFormula
and not prescale_triggersAll:
181 alg = config.createAlgorithm(
'CP::TrigPrescalesAlg',
'TrigPrescalesAlg' )
182 config.addPrivateTool(
'pileupReweightingTool',
'CP::PileupReweightingTool' )
183 alg.pileupReweightingTool.LumiCalcFiles = lumicalc_files
184 alg.selectionDecoration =
'trigPassed'
185 alg.prescaleMC = config.dataType()
is not DataType.Data
186 alg.prescaleDecoration = self.prescaleDecoration
187 if self.prescaleTriggersFormula !=
'':
188 alg.prescaleTriggersFormula = self.prescaleTriggersFormula
189 config.addOutputVar(
"EventInfo", alg.prescaleDecoration, alg.prescaleDecoration, noSys=
True)
191 alg.triggers = prescale_triggers
192 alg.triggersAll = prescale_triggersAll
195 for trigger
in prescale_triggers_output:
196 trigger = trigger.replace(
"-",
"_")
199 alg.prescaleDecoration +
"_" + trigger,
200 alg.prescaleDecoration +
"_" + trigger,
211 raise Exception(
'multiTriggerChainsPerYear and triggerChainsPerYear cannot be configured at the same time!')
214 raise Exception(
'prescaleLumiCalcFiles and prescaleLumiCalcFilesPerYear cannot be configured at the same time!')
217 raise Exception(
'prescaleIncludeAllYearsPerRun requires prescaleLumiCalcFilesPerYear to be configured!')
220 self.unprescaleData
or self.prescaleMC
222 raise Exception(
'Lumicalc files are provided but no trigger prescale output is configured! Specify output with "unprescaleData" and/or "prescaleMC".')
229 triggers_for_selection =
set()
230 triggers_for_decoration =
set()
231 from TriggerAnalysisAlgorithms.TriggerAnalysisSFConfig
import get_input_years
232 years = get_input_years(config)
234 for year, chain_list
in trigger_chains.items():
237 target_triggers = triggers_for_selection
if int(year)
in years
else triggers_for_decoration
238 for chain
in chain_list:
240 chains = chain.split(
'||')
241 target_triggers.update(
map(str.strip, chains))
243 target_triggers.add(chain.strip())
245 self.triggerChainsForDecoration += list(triggers_for_decoration)