83 toolName =
"TrigDecisionTool"
84 if toolName
in config._algorithms:
85 return config._algorithms[toolName]
88 xAODConfTool = config.createPublicTool(
"TrigConf::xAODConfigTool",
"xAODConfigTool")
89 decisionTool = config.createPublicTool(
"Trig::TrigDecisionTool", toolName)
90 decisionTool.ConfigTool = f
"{xAODConfTool.getType()}/{xAODConfTool.getName()}"
91 decisionTool.HLTSummary = config.hltSummary()
92 if config.geometry()
is LHCPeriod.Run3:
96 decisionTool.NavigationFormat =
"TrigComposite"
103 toolName =
"TrigMatchingTool"
104 if toolName
in config._algorithms:
105 return config._algorithms[toolName]
108 if config.geometry()
is LHCPeriod.Run3:
109 drScoringTool = config.createPublicTool(
"Trig::DRScoringTool",
"DRScoringTool")
110 matchingTool = config.createPublicTool(
"Trig::R3MatchingTool", toolName)
111 matchingTool.ScoringTool = f
"{drScoringTool.getType()}/{drScoringTool.getName()}"
112 matchingTool.TrigDecisionTool = f
"{decisionTool.getType()}/{decisionTool.getName()}"
114 matchingTool = config.createPublicTool(
"Trig::MatchFromCompositeTool", toolName)
115 if config.isPhyslite():
116 matchingTool.InputPrefix =
"AnalysisTrigMatch_"
126 alg = config.createAlgorithm(
'CP::TrigEventSelectionAlg',
'TrigEventSelectionAlg' )
127 alg.tool =
'%s/%s' % \
128 ( decisionTool.getType(), decisionTool.getName() )
130 alg.selectionDecoration =
'trigPassed'
131 alg.noFilter = self.noFilter
135 t = t.replace(
".",
"p").
replace(
"-",
"_")
136 config.addOutputVar (
'EventInfo',
'trigPassed_' + t,
'trigPassed_' + t, noSys=
True)
140 if triggerChainsForDeco :
141 alg = config.createAlgorithm(
'CP::TrigEventSelectionAlg',
'TrigEventSelectionAlgDeco' )
142 alg.tool =
'%s/%s' % \
143 ( decisionTool.getType(), decisionTool.getName() )
144 alg.triggers = triggerChainsForDeco
145 alg.selectionDecoration =
'trigPassed'
149 for t
in triggerChainsForDeco :
150 t = t.replace(
".",
"p").
replace(
"-",
"_")
151 config.addOutputVar (
'EventInfo',
'trigPassed_' + t,
'trigPassed_' + t, noSys=
True)
155 self.unprescaleData
if config.dataType()
is DataType.Data
else self.prescaleMC
162 from TriggerAnalysisAlgorithms.TriggerAnalysisSFConfig
import get_input_years, get_year_data
164 years = get_input_years(config)
172 prescale_triggers_output =
set(prescale_triggers)
174 all_lumicalc_files = [
177 for lumicalc
in lumicalc_values
181 prescale_triggersAll = list(prescale_triggers_output)
183 if not self.prescaleTriggersFormula
and not prescale_triggersAll:
186 alg = config.createAlgorithm(
'CP::TrigPrescalesAlg',
'TrigPrescalesAlg' )
187 config.addPrivateTool(
'pileupReweightingTool',
'CP::PileupReweightingTool' )
188 alg.pileupReweightingTool.LumiCalcFiles = lumicalc_files
189 alg.selectionDecoration =
'trigPassed'
190 alg.prescaleMC = config.dataType()
is not DataType.Data
191 alg.prescaleDecoration = self.prescaleDecoration
192 if self.prescaleTriggersFormula !=
'':
193 alg.prescaleTriggersFormula = self.prescaleTriggersFormula
194 config.addOutputVar(
"EventInfo", alg.prescaleDecoration, alg.prescaleDecoration, noSys=
True)
196 alg.triggers = prescale_triggers
197 alg.triggersAll = prescale_triggersAll
200 for trigger
in prescale_triggers_output:
201 trigger = trigger.replace(
"-",
"_")
204 alg.prescaleDecoration +
"_" + trigger,
205 alg.prescaleDecoration +
"_" + trigger,
216 raise Exception(
'multiTriggerChainsPerYear and triggerChainsPerYear cannot be configured at the same time!')
219 raise Exception(
'prescaleLumiCalcFiles and prescaleLumiCalcFilesPerYear cannot be configured at the same time!')
222 raise Exception(
'prescaleIncludeAllYearsPerRun requires prescaleLumiCalcFilesPerYear to be configured!')
225 self.unprescaleData
or self.prescaleMC
227 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)