19 from AnalysisAlgorithmsConfig.ConfigSequence
import ConfigSequence
21 from AnaAlgorithm.Logging
import logging
22 logCPAlgCfgFactory = logging.getLogger(
'CPAlgCfgFactory')
26 """return dict(par, val) with all func parameters with defualt values"""
27 signature = inspect.signature(func)
30 for k, v
in signature.parameters.items()
31 if v.default
is not inspect.Parameter.empty
36 """return list of input parameters"""
37 if inspect.isclass(func):
38 args =
list(inspect.signature(func.__init__).parameters.keys())
41 args =
list(inspect.signature(func).parameters.keys())
49 def __init__(self, alg, algName, options, defaults, subAlgs=None):
65 name associated with the algorithm. This name must have been added to the
66 list of available algorithms
68 dictionary containing options for the algorithm read from the YAML file
74 configSeq = ConfigSequence()
85 if arg
in funcOptions:
86 args[arg] = funcOptions[arg]
88 elif arg
in funcDefaults:
89 args[arg] = funcDefaults[arg]
91 elif defaults
is not None and arg
in defaults:
92 args[arg] = defaults[arg]
100 raise ValueError(f
"{arg} is required for {funcName}")
101 if inspect.isclass(func):
102 configSeq.append(func(**args))
105 return configSeq, args.keys()
109 """This class provides a configuration manager that is intended to allow the user to:
110 - define and configure functions that return an algSequence(?) object
121 """Add class to list of available algorithms"""
122 if not callable(alg):
123 raise ValueError(f
"{algName} is not a callable.")
126 if superBlocks
is None:
128 elif not isinstance(superBlocks, list):
129 superBlocks = [superBlocks]
132 for block
in superBlocks:
133 if block
not in self.
_order:
135 order = self.
_order[block]
140 if block
not in self.
_algs:
141 raise ValueError(f
"{block} not added")
142 algs = self.
_algs[block].subAlgs
145 raise ValueError(f
"{algName} has already been added.")
157 order.append(algName)
159 order.insert(order.index(pos), algName)
161 raise ValueError(f
"{pos} does not exit in already added config blocks")
166 """Prints algorithms exposed to configuration"""
169 for alg, algInfo
in algs.items():
170 algName = algInfo.alg.__name__
171 algOptions = algInfo.options
172 if algName
not in printed:
173 printed.append(algName)
174 logCPAlgCfgFactory.info(f
"\033[4m{alg}\033[0m -> \033[4m{algName}\033[0m")
177 if inspect.isclass(algInfo.alg):
179 algInfo.alg().printOptions(verbose=printOpts)
182 seq = ConfigSequence()
184 seq.printOptions(verbose=printOpts)
188 for opt
in algOptions:
189 logCPAlgCfgFactory.info(f
" {opt}")
190 printAlg(algInfo.subAlgs)
198 configSeq: configSequence object
202 algContext, algName = name.split(
'.')
203 block = self.
_algs[algContext].subAlgs[algName]
205 block = self.
_algs[name]
207 raise ValueError(f
"{name} config block not found. Make sure context is correct.")
208 configSeq, _ = block.makeConfig(kwargs)
213 """add algorithms and options"""
216 from AsgAnalysisAlgorithms.AsgAnalysisConfig
import CommonServicesConfig
220 from AsgAnalysisAlgorithms.AsgAnalysisConfig
import PileupReweightingBlock
224 from AsgAnalysisAlgorithms.EventCleaningConfig
import EventCleaningBlock
228 from TriggerAnalysisAlgorithms.TriggerAnalysisConfig
import Trigger
232 from JetAnalysisAlgorithms.JetAnalysisConfig
import makeJetAnalysisConfig
234 from JetAnalysisAlgorithms.JetJvtAnalysisConfig
import JetJvtAnalysisConfig
237 from FTagAnalysisAlgorithms.FTagAnalysisConfig
import FTagConfig
239 defaults={
'selectionName':
''},
241 from FTagAnalysisAlgorithms.FTagEventSFAnalysisConfig
import FTagEventSFConfig
243 alg=FTagEventSFConfig,
244 defaults={
'selectionName':
''},
248 from EgammaAnalysisAlgorithms.ElectronAnalysisConfig
import ElectronCalibrationConfig
250 from EgammaAnalysisAlgorithms.ElectronAnalysisConfig
import ElectronWorkingPointConfig
252 superBlocks=
"Electrons")
253 from EgammaAnalysisAlgorithms.ElectronAnalysisConfig
import ElectronTriggerAnalysisSFBlock
255 superBlocks=
"Electrons")
258 from EgammaAnalysisAlgorithms.PhotonAnalysisConfig
import PhotonCalibrationConfig
260 from EgammaAnalysisAlgorithms.PhotonAnalysisConfig
import PhotonWorkingPointConfig
262 superBlocks=
"Photons")
263 from EgammaAnalysisAlgorithms.PhotonExtraVariablesConfig
import PhotonExtraVariablesBlock
265 superBlocks=
"Photons")
268 from MuonAnalysisAlgorithms.MuonAnalysisConfig
import MuonCalibrationConfig
270 from MuonAnalysisAlgorithms.MuonAnalysisConfig
import MuonWorkingPointConfig
273 from MuonAnalysisAlgorithms.MuonAnalysisConfig
import MuonTriggerAnalysisSFBlock
278 from TauAnalysisAlgorithms.TauAnalysisConfig
import TauCalibrationConfig
280 from TauAnalysisAlgorithms.TauAnalysisConfig
import TauWorkingPointConfig
282 superBlocks=
"TauJets")
283 from TauAnalysisAlgorithms.TauAnalysisConfig
import TauTriggerAnalysisSFBlock
285 superBlocks=
"TauJets")
288 from AsgAnalysisAlgorithms.SystObjectLinkConfig
import SystObjectLinkBlock
290 superBlocks=[self.
ROOTNAME,
"Jets",
"Electrons",
"Photons",
"Muons",
"TauJets"])
293 from AsgAnalysisAlgorithms.AsgAnalysisConfig
import IFFLeptonDecorationBlock
294 self.
addAlgConfigBlock(algName=
"IFFClassification", alg=IFFLeptonDecorationBlock,
295 superBlocks=[
"Electrons",
"Muons"])
298 from AsgAnalysisAlgorithms.AsgAnalysisConfig
import GeneratorAnalysisBlock
299 self.
addAlgConfigBlock(algName=
"GeneratorLevelAnalysis", alg=GeneratorAnalysisBlock)
302 from AsgAnalysisAlgorithms.AsgAnalysisConfig
import PtEtaSelectionBlock
304 defaults={
'selectionName':
''},
305 superBlocks=[self.
ROOTNAME,
"Jets",
"Electrons",
"Photons",
"Muons",
"TauJets"])
308 from MetAnalysisAlgorithms.MetAnalysisConfig
import MetAnalysisConfig
312 from AsgAnalysisAlgorithms.OverlapAnalysisConfig
import OverlapAnalysisConfig
314 defaults={
'configName':
'OverlapRemoval'})
317 from AsgAnalysisAlgorithms.AsgAnalysisConfig
import ObjectCutFlowBlock
321 from EventSelectionAlgorithms.EventSelectionConfig
import makeMultipleEventSelectionConfigs
322 self.
addAlgConfigBlock(algName=
'EventSelection', alg=makeMultipleEventSelectionConfigs)
325 from AsgAnalysisAlgorithms.AsgAnalysisConfig
import EventCutFlowBlock
327 defaults={
'containerName':
'EventInfo',
'selectionName':
''})
330 from AsgAnalysisAlgorithms.BootstrapGeneratorConfig
import BootstrapGeneratorConfig
334 from AsgAnalysisAlgorithms.AsgAnalysisConfig
import PerEventSFBlock
338 from AsgAnalysisAlgorithms.AsgAnalysisConfig
import OutputThinningBlock
340 defaults={
'configName':
'Thinning'})
343 from AsgAnalysisAlgorithms.AsgAnalysisConfig
import SelectionDecorationBlock
345 alg=SelectionDecorationBlock)
348 from TauAnalysisAlgorithms.DiTauMassConfig
import DiTauMassBlock
352 from AsgAnalysisAlgorithms.OutputAnalysisConfig
import OutputAnalysisConfig
354 defaults={
'configName':
'Output'})
357 from AsgAnalysisAlgorithms.AsgAnalysisConfig
import IOStatsBlock