ATLAS Offline Software
Loading...
Searching...
No Matches
python.ConfigFactory.ConfigFactory Class Reference
Collaboration diagram for python.ConfigFactory.ConfigFactory:

Public Member Functions

 __init__ (self, addDefaultBlocks=True)
 addAlgConfigBlock (self, algName, alg, defaults=None, pos=None, superBlocks=None)
 printAlgs (self, printOpts=True)
 makeConfig (self, name, **kwargs)
 addDefaultAlgs (self)

Public Attributes

str ROOTNAME = 'root'

Protected Attributes

dict _algs = {}
dict _order = {self.ROOTNAME: []}

Detailed Description

This class provides a configuration manager that is intended to allow the user to:
    - define and configure functions that return an algSequence(?) object

Definition at line 110 of file ConfigFactory.py.

Constructor & Destructor Documentation

◆ __init__()

python.ConfigFactory.ConfigFactory.__init__ ( self,
addDefaultBlocks = True )

Definition at line 114 of file ConfigFactory.py.

114 def __init__(self, addDefaultBlocks=True):
115 self.ROOTNAME = 'root' # constant
116 self._algs = {}
117 self._order = {self.ROOTNAME: []}
118 if addDefaultBlocks:
119 self.addDefaultAlgs()
120
121

Member Function Documentation

◆ addAlgConfigBlock()

python.ConfigFactory.ConfigFactory.addAlgConfigBlock ( self,
algName,
alg,
defaults = None,
pos = None,
superBlocks = None )
Add class to list of available algorithms

Definition at line 122 of file ConfigFactory.py.

122 def addAlgConfigBlock(self, algName, alg, defaults=None, pos=None, superBlocks=None):
123 """Add class to list of available algorithms"""
124 if not callable(alg):
125 raise ValueError(f"{algName} is not a callable.")
126 opts = getFuncArgs(alg)
127
128 if superBlocks is None:
129 superBlocks = [self.ROOTNAME]
130 elif not isinstance(superBlocks, list):
131 superBlocks = [superBlocks]
132
133 # add new alg block to subAlgs dict of super block
134 for block in superBlocks:
135 if block not in self._order:
136 self._order[block] = []
137 order = self._order[block]
138
139 if block == self.ROOTNAME:
140 algs = self._algs
141 else:
142 if block not in self._algs:
143 raise ValueError(f"{block} not added")
144 algs = self._algs[block].subAlgs
145
146 if algName in algs:
147 raise ValueError(f"{algName} has already been added.")
148
149 if block != self.ROOTNAME:
150 factoryName = f"{block}.{algName}"
151 else:
152 factoryName = algName
153
154 # create FactoryBlock with alg information
155 algs[algName] = FactoryBlock(
156 alg=alg,
157 factoryName=factoryName,
158 algName=algName,
159 options=opts,
160 defaults=defaults,
161 subAlgs={}
162 )
163 # insert into order (list)
164 if pos is None:
165 order.append(algName)
166 elif pos in order:
167 order.insert(order.index(pos), algName)
168 else:
169 raise ValueError(f"{pos} does not exit in already added config blocks")
170 return
171
172

◆ addDefaultAlgs()

python.ConfigFactory.ConfigFactory.addDefaultAlgs ( self)
add algorithms and options

Definition at line 230 of file ConfigFactory.py.

230 def addDefaultAlgs(self):
231 """add algorithms and options"""
232
233 # CommonServices
234 from AsgAnalysisAlgorithms.AsgAnalysisConfig import CommonServices
235 self.addAlgConfigBlock(algName="CommonServices", alg=CommonServices)
236
237 # pileup reweighting
238 from AsgAnalysisAlgorithms.AsgAnalysisConfig import PileupReweightingBlock
239 self.addAlgConfigBlock(algName="PileupReweighting", alg=PileupReweightingBlock)
240
241 # event cleaning
242 from AsgAnalysisAlgorithms.EventCleaningConfig import EventCleaningBlock
243 self.addAlgConfigBlock(algName="EventCleaning", alg=EventCleaningBlock)
244
245 # trigger
246 from TriggerAnalysisAlgorithms.TriggerAnalysisConfig import Trigger
247 self.addAlgConfigBlock(algName="Trigger", alg=Trigger)
248 from TriggerAnalysisAlgorithms.TriggerAnalysisSFConfig import TriggerAnalysisSFBlock
249 self.addAlgConfigBlock(algName="TriggerMatching", alg=TriggerAnalysisSFBlock)
250
251 # HSTP filter for dijet MC
252 from AsgAnalysisAlgorithms.HSTPFilterConfig import HSTPFilterBlock
253 self.addAlgConfigBlock(algName="HSTPFilter", alg=HSTPFilterBlock)
254
255 # jets
256 from JetAnalysisAlgorithms.JetAnalysisConfig import Jets
257 self.addAlgConfigBlock(algName="Jets", alg=Jets)
258 from JetAnalysisAlgorithms.JetAnalysisConfig import JvtWorkingPoint
259 self.addAlgConfigBlock(algName="JVTWorkingPoint", alg=JvtWorkingPoint,
260 superBlocks="Jets")
261 from JetAnalysisAlgorithms.JetAnalysisConfig import FJvtWorkingPoint
262 self.addAlgConfigBlock(algName="FJVTWorkingPoint", alg=FJvtWorkingPoint,
263 superBlocks="Jets")
264 from JetAnalysisAlgorithms.JetJvtAnalysisConfig import JetJvtAnalysisConfig
265 self.addAlgConfigBlock(algName="JVT", alg=JetJvtAnalysisConfig,
266 superBlocks="Jets")
267 from JetAnalysisAlgorithms.BJetCalibAnalysisConfig import BJetCalibAnalysisConfig
268 self.addAlgConfigBlock(algName="BJetCalib", alg=BJetCalibAnalysisConfig,
269 superBlocks="Jets")
270 from JetAnalysisAlgorithms.JetTriggerAnalysisConfig import JetTriggerMatchingBlock
271 self.addAlgConfigBlock(algName="TriggerMatching", alg=JetTriggerMatchingBlock,
272 superBlocks="Jets")
273 from FTagAnalysisAlgorithms.FTagTrigMatchAnalysisConfig import FTagJetTrigMatchingBlock
274 self.addAlgConfigBlock(algName="FTagTriggerMatching", alg=FTagJetTrigMatchingBlock,
275 superBlocks="Jets")
276 from JetAnalysisAlgorithms.L1jFexJetThresholdsDecoratorConfig import L1jFexJetThresholdsDecoratorBlock
277 self.addAlgConfigBlock(algName="L1jFexJetThresholdsDecorator",
278 alg=L1jFexJetThresholdsDecoratorBlock,
279 superBlocks="Jets")
280 from FTagAnalysisAlgorithms.FTagAnalysisConfig import FTagConfig
281 self.addAlgConfigBlock(algName="FlavourTagging", alg=FTagConfig,
282 defaults={'selectionName': ''},
283 superBlocks="Jets")
284 from FTagAnalysisAlgorithms.XbbAnalysisConfig import XbbConfig
285 self.addAlgConfigBlock(algName="XbbTagging", alg=XbbConfig,
286 superBlocks="Jets")
287 from FTagAnalysisAlgorithms.FTagSFAnalysisConfig import FlavourTaggingEventSF
288 self.addAlgConfigBlock(algName="FlavourTaggingEventSF",
289 alg=FlavourTaggingEventSF,
290 defaults={'selectionName': ''},
291 superBlocks="Jets")
292
293 # muons
294 from MuonAnalysisAlgorithms.MuonAnalysisConfig import MuonCalibration
295 self.addAlgConfigBlock(algName="Muons", alg=MuonCalibration)
296 from MuonAnalysisAlgorithms.MuonAnalysisConfig import MuonWorkingPoint
297 self.addAlgConfigBlock(algName="WorkingPoint", alg=MuonWorkingPoint,
298 superBlocks="Muons")
299 from MuonAnalysisAlgorithms.MuonAnalysisConfig import MuonTriggerAnalysisSFBlock
300 self.addAlgConfigBlock(algName="TriggerSF", alg=MuonTriggerAnalysisSFBlock,
301 superBlocks="Muons")
302 from MuonAnalysisAlgorithms.MuonAnalysisConfig import MuonLRTMergedConfig
303 self.addAlgConfigBlock(algName="LRTMerging", alg=MuonLRTMergedConfig,
304 superBlocks="Muons")
305 from MuonAnalysisAlgorithms.MuonAnalysisConfig import MuonContainerMergingConfig
306 self.addAlgConfigBlock(algName="ContainerMerging", alg=MuonContainerMergingConfig,
307 superBlocks="Muons")
308
309 # electrons
310 from EgammaAnalysisAlgorithms.ElectronAnalysisConfig import ElectronCalibration
311 self.addAlgConfigBlock(algName="Electrons", alg=ElectronCalibration)
312 from EgammaAnalysisAlgorithms.ElectronAnalysisConfig import ElectronWorkingPoint
313 self.addAlgConfigBlock(algName="WorkingPoint", alg=ElectronWorkingPoint,
314 superBlocks="Electrons")
315 from EgammaAnalysisAlgorithms.ElectronAnalysisConfig import ElectronLRTMergedConfig
316 self.addAlgConfigBlock(algName="LRTMerging", alg=ElectronLRTMergedConfig,
317 superBlocks="Electrons")
318 from EgammaAnalysisAlgorithms.ElectronAnalysisConfig import ElectronTriggerAnalysisSFBlock
319 self.addAlgConfigBlock(algName="TriggerSF", alg=ElectronTriggerAnalysisSFBlock,
320 superBlocks="Electrons")
321
322 # photons
323 from EgammaAnalysisAlgorithms.PhotonAnalysisConfig import PhotonCalibrationConfig
324 self.addAlgConfigBlock(algName="Photons", alg=PhotonCalibrationConfig)
325 from EgammaAnalysisAlgorithms.PhotonAnalysisConfig import PhotonWorkingPoint
326 self.addAlgConfigBlock(algName="WorkingPoint", alg=PhotonWorkingPoint,
327 superBlocks="Photons")
328 from EgammaAnalysisAlgorithms.PhotonExtraVariablesConfig import PhotonExtraVariablesBlock
329 self.addAlgConfigBlock(algName="ExtraVariables", alg=PhotonExtraVariablesBlock,
330 superBlocks="Photons")
331
332 # tauJets
333 from TauAnalysisAlgorithms.TauAnalysisConfig import TauCalibrationConfig
334 self.addAlgConfigBlock(algName="TauJets", alg=TauCalibrationConfig)
335 from TauAnalysisAlgorithms.TauAnalysisConfig import TauWorkingPoint
336 self.addAlgConfigBlock(algName="WorkingPoint", alg=TauWorkingPoint,
337 superBlocks="TauJets")
338 from TauAnalysisAlgorithms.TauAnalysisConfig import TauTriggerAnalysisSFBlock
339 self.addAlgConfigBlock(algName="TriggerSF", alg=TauTriggerAnalysisSFBlock,
340 superBlocks="TauJets")
341
342 # diTauJets
343 from TauAnalysisAlgorithms.DiTauAnalysisConfig import DiTauCalibrationConfig
344 self.addAlgConfigBlock(algName="DiTauJets", alg=DiTauCalibrationConfig)
345 from TauAnalysisAlgorithms.DiTauAnalysisConfig import DiTauWorkingPoint
346 self.addAlgConfigBlock(algName="WorkingPoint", alg=DiTauWorkingPoint,
347 superBlocks="DiTauJets")
348
349 # tracks
350 from TrackingAnalysisAlgorithms.TrackingAnalysisConfig import InDetTrackCalibrationConfig
351 self.addAlgConfigBlock(algName="InDetTracks", alg=InDetTrackCalibrationConfig)
352 from TrackingAnalysisAlgorithms.TrackingAnalysisConfig import InDetTrackWorkingPointConfig
353 self.addAlgConfigBlock(algName="WorkingPoint", alg=InDetTrackWorkingPointConfig,
354 superBlocks="InDetTracks")
355
356 # SystObjectLink
357 from AsgAnalysisAlgorithms.SystObjectLinkConfig import SystObjectLinkBlock
358 self.addAlgConfigBlock(algName="SystObjectLink", alg=SystObjectLinkBlock,
359 superBlocks=[self.ROOTNAME, "Jets", "Electrons", "Photons", "Muons", "TauJets"])
360
361 # Particle-level truth algorithms
362 from TruthParticleLevelAnalysisAlgorithms.ParticleLevelElectronsConfig import ParticleLevelElectronsBlock
363 self.addAlgConfigBlock(algName="PL_Electrons", alg=ParticleLevelElectronsBlock)
364 from TruthParticleLevelAnalysisAlgorithms.ParticleLevelMuonsConfig import ParticleLevelMuonsBlock
365 self.addAlgConfigBlock(algName="PL_Muons", alg=ParticleLevelMuonsBlock)
366 from TruthParticleLevelAnalysisAlgorithms.ParticleLevelNeutrinosConfig import ParticleLevelNeutrinosBlock
367 self.addAlgConfigBlock(algName="PL_Neutrinos", alg=ParticleLevelNeutrinosBlock)
368 from TruthParticleLevelAnalysisAlgorithms.ParticleLevelJetsConfig import ParticleLevelJetsBlock
369 self.addAlgConfigBlock(algName="PL_Jets", alg=ParticleLevelJetsBlock)
370 from TruthParticleLevelAnalysisAlgorithms.ParticleLevelTausConfig import ParticleLevelTausBlock
371 self.addAlgConfigBlock(algName="PL_Taus", alg=ParticleLevelTausBlock)
372 from TruthParticleLevelAnalysisAlgorithms.ParticleLevelPhotonsConfig import ParticleLevelPhotonsBlock
373 self.addAlgConfigBlock(algName="PL_Photons", alg=ParticleLevelPhotonsBlock)
374 from TruthParticleLevelAnalysisAlgorithms.ParticleLevelResonancesConfig import ParticleLevelResonancesBlock
375 self.addAlgConfigBlock(algName="PL_Resonances", alg=ParticleLevelResonancesBlock)
376 from TruthParticleLevelAnalysisAlgorithms.ParticleLevelMissingETConfig import ParticleLevelMissingETBlock
377 self.addAlgConfigBlock(algName="PL_MissingET", alg=ParticleLevelMissingETBlock)
378 from TruthParticleLevelAnalysisAlgorithms.ParticleLevelOverlapRemovalConfig import ParticleLevelOverlapRemovalBlock
379 self.addAlgConfigBlock(algName="PL_OverlapRemoval", alg=ParticleLevelOverlapRemovalBlock)
380
381 # Parton-level truth algorithms
382 from TruthPartonLevelAnalysisAlgorithms.PartonHistoryConfig import PartonHistoryBlock
383 self.addAlgConfigBlock(algName="PartonHistory", alg=PartonHistoryBlock)
384
385 # IFF truth classification
386 from AsgAnalysisAlgorithms.AsgAnalysisConfig import IFFLeptonDecorationBlock
387 self.addAlgConfigBlock(algName="IFFClassification", alg=IFFLeptonDecorationBlock,
388 superBlocks=["Electrons", "Muons",
389 "PL_Electrons", "PL_Muons"])
390 # MCTC truth classification
391 from AsgAnalysisAlgorithms.AsgAnalysisConfig import MCTCLeptonDecorationBlock
392 self.addAlgConfigBlock(algName="MCTCClassification", alg=MCTCLeptonDecorationBlock,
393 superBlocks=["Electrons", "Muons", "TauJets",
394 "PL_Electrons", "PL_Muons", "PL_Taus"])
395
396 # pT/Eta Selection
397 from AsgAnalysisAlgorithms.AsgAnalysisConfig import PtEtaSelectionBlock
398 self.addAlgConfigBlock(algName="PtEtaSelection", alg=PtEtaSelectionBlock,
399 defaults={'selectionName': ''},
400 superBlocks=[self.ROOTNAME,
401 "Jets", "Electrons", "Photons", "Muons", "TauJets", "DiTauJets",
402 "PL_Jets", "PL_Electrons", "PL_Photons", "PL_Muons", "PL_Taus", "PL_Neutrinos", "PL_Resonances"])
403
404 # met
405 from MetAnalysisAlgorithms.MetAnalysisConfig import MetAnalysisConfig
406 self.addAlgConfigBlock(algName="MissingET", alg=MetAnalysisConfig)
407
408 # overlap removal
409 from AsgAnalysisAlgorithms.OverlapAnalysisConfig import OverlapAnalysisConfig
410 self.addAlgConfigBlock(algName="OverlapRemoval", alg=OverlapAnalysisConfig,
411 defaults={'configName': 'OverlapRemoval'})
412
413 # object-based cutflow
414 from AsgAnalysisAlgorithms.AsgAnalysisConfig import ObjectCutFlowBlock
415 self.addAlgConfigBlock(algName='ObjectCutFlow', alg=ObjectCutFlowBlock)
416
417 # jet reclustering
418 from JetAnalysisAlgorithms.JetReclusteringConfig import JetReclusteringBlock
419 self.addAlgConfigBlock(algName="JetReclustering", alg=JetReclusteringBlock)
420
421 # jet reclustering calibration
422 from JetAnalysisAlgorithms.ReclusteredJetCalibrationConfig import ReclusteredJetCalibrationBlock
423 self.addAlgConfigBlock(algName="ReclusteredJetCalibration", alg=ReclusteredJetCalibrationBlock)
424
425 # event selection
426 from EventSelectionAlgorithms.EventSelectionConfig import EventSelection
427 self.addAlgConfigBlock(algName='EventSelection', alg=EventSelection)
428
429 # event-based cutflow
430 from AsgAnalysisAlgorithms.AsgAnalysisConfig import EventCutFlowBlock
431 self.addAlgConfigBlock(algName='EventCutFlow', alg=EventCutFlowBlock)
432
433 # generator level analysis
434 from AsgAnalysisAlgorithms.AsgAnalysisConfig import GeneratorAnalysisBlock
435 self.addAlgConfigBlock(algName="GeneratorLevelAnalysis", alg=GeneratorAnalysisBlock)
436
437 # bootstraps
438 from AsgAnalysisAlgorithms.BootstrapGeneratorConfig import BootstrapGeneratorConfig
439 self.addAlgConfigBlock(algName='Bootstraps', alg=BootstrapGeneratorConfig)
440
441 # per-event scale factor calculation
442 from AsgAnalysisAlgorithms.AsgAnalysisConfig import PerEventSFBlock
443 self.addAlgConfigBlock(algName='PerEventSF', alg=PerEventSFBlock)
444
445 # per-event unified lepton scale factor calculation
446 from AsgAnalysisAlgorithms.LeptonSFCalculatorConfig import LeptonSFCalculatorBlock
447 self.addAlgConfigBlock(algName='LeptonSF', alg=LeptonSFCalculatorBlock)
448
449 # thinning
450 from AsgAnalysisAlgorithms.AsgAnalysisConfig import OutputThinningBlock
451 self.addAlgConfigBlock(algName="Thinning", alg=OutputThinningBlock,
452 defaults={'configName': 'Thinning'})
453
454 # selection decorations
455 from AsgAnalysisAlgorithms.AsgAnalysisConfig import SelectionDecorationBlock
456 self.addAlgConfigBlock(algName='SelectionDecoration',
457 alg=SelectionDecorationBlock)
458
459 # di-tau mass calculator
460 from TauAnalysisAlgorithms.DiTauMassConfig import DiTauMassBlock
461 self.addAlgConfigBlock(algName="DiTauMMC", alg=DiTauMassBlock)
462
463 # IFF fake background estimator
464 from AsgAnalysisAlgorithms.FakeBkgConfig import FakeBkgBlock
465 self.addAlgConfigBlock(algName='FakeBkgCalculator', alg=FakeBkgBlock)
466
467 # VGamma overlap removal
468 from AsgAnalysisAlgorithms.VGammaORConfig import VGammaORBlock
469 self.addAlgConfigBlock(algName='VGammaOR', alg=VGammaORBlock)
470
471 # Event shape density
472 from AsgAnalysisAlgorithms.EventShapeDensityDumperConfig import EventShapeDensityDumperBlock
473 self.addAlgConfigBlock(algName='EventShape', alg=EventShapeDensityDumperBlock)
474
475 # output
476 from AsgAnalysisAlgorithms.OutputAnalysisConfig import OutputAnalysisConfig
477 self.addAlgConfigBlock(algName="Output", alg=OutputAnalysisConfig,
478 defaults={'configName': 'Output'})
479
480 # IOStats printouts
481 from AsgAnalysisAlgorithms.AsgAnalysisConfig import IOStatsBlock
482 self.addAlgConfigBlock(algName="IOStats", alg=IOStatsBlock)
483
484 # configuration printer
485 from AsgAnalysisAlgorithms.PrintToolConfigAlgConfig import PrintToolConfigAlgBlock
486 self.addAlgConfigBlock(algName="PrintConfiguration", alg=PrintToolConfigAlgBlock)
487
488 return

◆ makeConfig()

python.ConfigFactory.ConfigFactory.makeConfig ( self,
name,
** kwargs )
Returns:
    configSeq: configSequence object

Definition at line 203 of file ConfigFactory.py.

203 def makeConfig(self, name, **kwargs):
204 """
205 Returns:
206 configSeq: configSequence object
207 """
208 try:
209 if '.' in name:
210 algContext, algName = name.split('.')
211 block = self._algs[algContext].subAlgs[algName]
212 else:
213 block = self._algs[name]
214 except KeyError:
215 raise ValueError(f"{name} config block not found. Make sure context is correct.")
216 # Optional **kwargs are in the process of being retired. While the process is not fully complete
217 # we still need to allow them to be passed. However, for blocks where they have already been retired
218 # we want to raise an error so users don't experience undesirable behaviour where their extra options
219 # are being ignored, or run into related cryptic crashes.
220 already_fixed_blocks = {
221 'Electrons','Photons','Muons','TauJets','DiTauJets','MissingET','FlavourTagging','FlavourTaggingEventSF','XbbTagging',
222 'InDetTracks','KLFitter','PtEtaSelection','ObjectCutFlow','EventCutFlow','Thinning',
223 'IFFClassification','MCTCClassification','PerEventSF','SelectionDecoration','SystObjectLink'}
224 if kwargs and name.split('.')[-1] in already_fixed_blocks:
225 raise ValueError(f"Config block '{name}' no longer accepts **kwargs. Use config.setOptionValue('option', value) instead!")
226 configSeq, _ = block.makeConfig(kwargs)
227 return configSeq
228
229

◆ printAlgs()

python.ConfigFactory.ConfigFactory.printAlgs ( self,
printOpts = True )
Prints algorithms exposed to configuration

Definition at line 173 of file ConfigFactory.py.

173 def printAlgs(self, printOpts=True):
174 """Prints algorithms exposed to configuration"""
175 printed = [] # some subblocks exist for multiple superblocks
176 def printAlg(algs):
177 for alg, algInfo in algs.items():
178 algName = algInfo.alg.__name__
179 algOptions = algInfo.options
180 if algName not in printed:
181 printed.append(algName)
182 logCPAlgCfgFactory.info(f"\033[4m{alg}\033[0m -> \033[4m{algName}\033[0m")
183 if printOpts:
184 try:
185 if inspect.isclass(algInfo.alg):
186 # block
187 algInfo.alg().printOptions(verbose=printOpts)
188 else:
189 # make function
190 seq = ConfigSequence()
191 algInfo.alg(seq=seq)
192 seq.printOptions(verbose=printOpts)
193 except Exception:
194 # either a TypeError or something else due to missing args
195 # try to print something for casses with required args
196 for opt in algOptions:
197 logCPAlgCfgFactory.info(f" {opt}")
198 printAlg(algInfo.subAlgs)
199 printAlg(self._algs)
200 return
201
202

Member Data Documentation

◆ _algs

python.ConfigFactory.ConfigFactory._algs = {}
protected

Definition at line 116 of file ConfigFactory.py.

◆ _order

dict python.ConfigFactory.ConfigFactory._order = {self.ROOTNAME: []}
protected

Definition at line 117 of file ConfigFactory.py.

◆ ROOTNAME

str python.ConfigFactory.ConfigFactory.ROOTNAME = 'root'

Definition at line 115 of file ConfigFactory.py.


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