ATLAS Offline Software
Public Member Functions | Public Attributes | Private Attributes | List of all members
python.ConfigFactory.ConfigFactory Class Reference
Collaboration diagram for python.ConfigFactory.ConfigFactory:

Public Member Functions

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

Public Attributes

 ROOTNAME
 

Private Attributes

 _algs
 
 _order
 

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 108 of file ConfigFactory.py.

Constructor & Destructor Documentation

◆ __init__()

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

Definition at line 112 of file ConfigFactory.py.

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

Member Function Documentation

◆ addAlgConfigBlock()

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

Definition at line 120 of file ConfigFactory.py.

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

◆ addDefaultAlgs()

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

Definition at line 212 of file ConfigFactory.py.

212  def addDefaultAlgs(self):
213  """add algorithms and options"""
214 
215  # CommonServices
216  from AsgAnalysisAlgorithms.AsgAnalysisConfig import CommonServicesConfig
217  self.addAlgConfigBlock(algName="CommonServices", alg=CommonServicesConfig)
218 
219  # pileup reweighting
220  from AsgAnalysisAlgorithms.AsgAnalysisConfig import PileupReweightingBlock
221  self.addAlgConfigBlock(algName="PileupReweighting", alg=PileupReweightingBlock)
222 
223  # event cleaning
224  from AsgAnalysisAlgorithms.EventCleaningConfig import EventCleaningBlock
225  self.addAlgConfigBlock(algName="EventCleaning", alg=EventCleaningBlock)
226 
227  # trigger
228  from TriggerAnalysisAlgorithms.TriggerAnalysisConfig import Trigger
229  self.addAlgConfigBlock(algName="Trigger", alg=Trigger)
230 
231  # jets
232  from JetAnalysisAlgorithms.JetAnalysisConfig import makeJetAnalysisConfig
233  self.addAlgConfigBlock(algName="Jets", alg=makeJetAnalysisConfig)
234  from JetAnalysisAlgorithms.JetJvtAnalysisConfig import JetJvtAnalysisConfig
235  self.addAlgConfigBlock(algName="JVT", alg=JetJvtAnalysisConfig,
236  superBlocks="Jets")
237  from JetAnalysisAlgorithms.BJetCalibAnalysisConfig import BJetCalibAnalysisConfig
238  self.addAlgConfigBlock(algName="BJetCalib", alg=BJetCalibAnalysisConfig,
239  superBlocks="Jets")
240  from FTagAnalysisAlgorithms.FTagAnalysisConfig import FTagConfig
241  self.addAlgConfigBlock(algName="FlavourTagging", alg=FTagConfig,
242  defaults={'selectionName': ''},
243  superBlocks="Jets")
244  from FTagAnalysisAlgorithms.FTagEventSFAnalysisConfig import FTagEventSFConfig
245  self.addAlgConfigBlock(algName="FlavourTaggingEventSF",
246  alg=FTagEventSFConfig,
247  defaults={'selectionName': ''},
248  superBlocks="Jets")
249 
250  # electrons
251  from EgammaAnalysisAlgorithms.ElectronAnalysisConfig import ElectronCalibrationConfig
252  self.addAlgConfigBlock(algName="Electrons", alg=ElectronCalibrationConfig)
253  from EgammaAnalysisAlgorithms.ElectronAnalysisConfig import ElectronWorkingPointConfig
254  self.addAlgConfigBlock(algName="WorkingPoint", alg=ElectronWorkingPointConfig,
255  superBlocks="Electrons")
256  from EgammaAnalysisAlgorithms.ElectronAnalysisConfig import ElectronTriggerAnalysisSFBlock
257  self.addAlgConfigBlock(algName="TriggerSF", alg=ElectronTriggerAnalysisSFBlock,
258  superBlocks="Electrons")
259 
260  # photons
261  from EgammaAnalysisAlgorithms.PhotonAnalysisConfig import PhotonCalibrationConfig
262  self.addAlgConfigBlock(algName="Photons", alg=PhotonCalibrationConfig)
263  from EgammaAnalysisAlgorithms.PhotonAnalysisConfig import PhotonWorkingPointConfig
264  self.addAlgConfigBlock(algName="WorkingPoint", alg=PhotonWorkingPointConfig,
265  superBlocks="Photons")
266  from EgammaAnalysisAlgorithms.PhotonExtraVariablesConfig import PhotonExtraVariablesBlock
267  self.addAlgConfigBlock(algName="ExtraVariables", alg=PhotonExtraVariablesBlock,
268  superBlocks="Photons")
269 
270  # muons
271  from MuonAnalysisAlgorithms.MuonAnalysisConfig import MuonCalibrationConfig
272  self.addAlgConfigBlock(algName="Muons", alg=MuonCalibrationConfig)
273  from MuonAnalysisAlgorithms.MuonAnalysisConfig import MuonWorkingPointConfig
274  self.addAlgConfigBlock(algName="WorkingPoint", alg=MuonWorkingPointConfig,
275  superBlocks="Muons")
276  from MuonAnalysisAlgorithms.MuonAnalysisConfig import MuonTriggerAnalysisSFBlock
277  self.addAlgConfigBlock(algName="TriggerSF", alg=MuonTriggerAnalysisSFBlock,
278  superBlocks="Muons")
279 
280  # tauJets
281  from TauAnalysisAlgorithms.TauAnalysisConfig import TauCalibrationConfig
282  self.addAlgConfigBlock(algName="TauJets", alg=TauCalibrationConfig)
283  from TauAnalysisAlgorithms.TauAnalysisConfig import TauWorkingPointConfig
284  self.addAlgConfigBlock(algName="WorkingPoint", alg=TauWorkingPointConfig,
285  superBlocks="TauJets")
286  from TauAnalysisAlgorithms.TauAnalysisConfig import TauTriggerAnalysisSFBlock
287  self.addAlgConfigBlock(algName="TriggerSF", alg=TauTriggerAnalysisSFBlock,
288  superBlocks="TauJets")
289 
290  # SystObjectLink
291  from AsgAnalysisAlgorithms.SystObjectLinkConfig import SystObjectLinkBlock
292  self.addAlgConfigBlock(algName="SystObjectLink", alg=SystObjectLinkBlock,
293  superBlocks=[self.ROOTNAME, "Jets", "Electrons", "Photons", "Muons", "TauJets"])
294 
295  # IFF truth classification
296  from AsgAnalysisAlgorithms.AsgAnalysisConfig import IFFLeptonDecorationBlock
297  self.addAlgConfigBlock(algName="IFFClassification", alg=IFFLeptonDecorationBlock,
298  superBlocks=["Electrons","Muons"])
299 
300  # generator level analysis
301  from AsgAnalysisAlgorithms.AsgAnalysisConfig import GeneratorAnalysisBlock
302  self.addAlgConfigBlock(algName="GeneratorLevelAnalysis", alg=GeneratorAnalysisBlock)
303 
304  # pT/Eta Selection
305  from AsgAnalysisAlgorithms.AsgAnalysisConfig import PtEtaSelectionBlock
306  self.addAlgConfigBlock(algName="PtEtaSelection", alg=PtEtaSelectionBlock,
307  defaults={'selectionName': ''},
308  superBlocks=[self.ROOTNAME, "Jets", "Electrons", "Photons", "Muons", "TauJets"])
309 
310  # met
311  from MetAnalysisAlgorithms.MetAnalysisConfig import MetAnalysisConfig
312  self.addAlgConfigBlock(algName="MissingET", alg=MetAnalysisConfig)
313 
314  # overlap removal
315  from AsgAnalysisAlgorithms.OverlapAnalysisConfig import OverlapAnalysisConfig
316  self.addAlgConfigBlock(algName="OverlapRemoval", alg=OverlapAnalysisConfig,
317  defaults={'configName': 'OverlapRemoval'})
318 
319  # object-based cutflow
320  from AsgAnalysisAlgorithms.AsgAnalysisConfig import ObjectCutFlowBlock
321  self.addAlgConfigBlock(algName='ObjectCutFlow', alg=ObjectCutFlowBlock)
322 
323  # jet reclustering
324  from JetAnalysisAlgorithms.JetReclusteringConfig import JetReclusteringBlock
325  self.addAlgConfigBlock(algName="JetReclustering", alg=JetReclusteringBlock)
326 
327  # event selection
328  from EventSelectionAlgorithms.EventSelectionConfig import makeMultipleEventSelectionConfigs
329  self.addAlgConfigBlock(algName='EventSelection', alg=makeMultipleEventSelectionConfigs)
330 
331  # event-based cutflow
332  from AsgAnalysisAlgorithms.AsgAnalysisConfig import EventCutFlowBlock
333  self.addAlgConfigBlock(algName='EventCutFlow', alg=EventCutFlowBlock,
334  defaults={'containerName': 'EventInfo', 'selectionName': ''})
335 
336  # bootstraps
337  from AsgAnalysisAlgorithms.BootstrapGeneratorConfig import BootstrapGeneratorConfig
338  self.addAlgConfigBlock(algName='Bootstraps', alg=BootstrapGeneratorConfig)
339 
340  # per-event scale factor calculation
341  from AsgAnalysisAlgorithms.AsgAnalysisConfig import PerEventSFBlock
342  self.addAlgConfigBlock(algName='PerEventSF', alg=PerEventSFBlock)
343 
344  # per-event unified lepton scale factor calculation
345  from AsgAnalysisAlgorithms.LeptonSFCalculatorConfig import LeptonSFCalculatorBlock
346  self.addAlgConfigBlock(algName='LeptonSF', alg=LeptonSFCalculatorBlock)
347 
348  # thinning
349  from AsgAnalysisAlgorithms.AsgAnalysisConfig import OutputThinningBlock
350  self.addAlgConfigBlock(algName="Thinning", alg=OutputThinningBlock,
351  defaults={'configName': 'Thinning'})
352 
353  # selection decorations
354  from AsgAnalysisAlgorithms.AsgAnalysisConfig import SelectionDecorationBlock
355  self.addAlgConfigBlock(algName='SelectionDecoration',
356  alg=SelectionDecorationBlock)
357 
358  # di-tau mass calculator
359  from TauAnalysisAlgorithms.DiTauMassConfig import DiTauMassBlock
360  self.addAlgConfigBlock(algName="DiTauMMC", alg=DiTauMassBlock)
361 
362  # IFF fake background estimator
363  from AsgAnalysisAlgorithms.FakeBkgConfig import FakeBkgBlock
364  self.addAlgConfigBlock(algName='FakeBkgCalculator', alg=FakeBkgBlock)
365 
366  # VGamma overlap removal
367  from AsgAnalysisAlgorithms.VGammaORConfig import VGammaORBlock
368  self.addAlgConfigBlock(algName='VGammaOR', alg=VGammaORBlock)
369 
370  # output
371  from AsgAnalysisAlgorithms.OutputAnalysisConfig import OutputAnalysisConfig
372  self.addAlgConfigBlock(algName="Output", alg=OutputAnalysisConfig,
373  defaults={'configName': 'Output'})
374 
375  # IOStats printouts
376  from AsgAnalysisAlgorithms.AsgAnalysisConfig import IOStatsBlock
377  self.addAlgConfigBlock(algName="IOStats", alg=IOStatsBlock)
378 
379  return

◆ makeConfig()

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

Definition at line 195 of file ConfigFactory.py.

195  def makeConfig(self, name, **kwargs):
196  """
197  Returns:
198  configSeq: configSequence object
199  """
200  try:
201  if '.' in name:
202  algContext, algName = name.split('.')
203  block = self._algs[algContext].subAlgs[algName]
204  else:
205  block = self._algs[name]
206  except KeyError:
207  raise ValueError(f"{name} config block not found. Make sure context is correct.")
208  configSeq, _ = block.makeConfig(kwargs)
209  return configSeq
210 
211 

◆ printAlgs()

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

Definition at line 165 of file ConfigFactory.py.

165  def printAlgs(self, printOpts=True):
166  """Prints algorithms exposed to configuration"""
167  printed = [] # some subblocks exist for multiple superblocks
168  def printAlg(algs):
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")
175  if printOpts:
176  try:
177  if inspect.isclass(algInfo.alg):
178  # block
179  algInfo.alg().printOptions(verbose=printOpts)
180  else:
181  # make function
182  seq = ConfigSequence()
183  algInfo.alg(seq=seq)
184  seq.printOptions(verbose=printOpts)
185  except Exception:
186  # either a TypeError or something else due to missing args
187  # try to print something for casses with required args
188  for opt in algOptions:
189  logCPAlgCfgFactory.info(f" {opt}")
190  printAlg(algInfo.subAlgs)
191  printAlg(self._algs)
192  return
193 
194 

Member Data Documentation

◆ _algs

python.ConfigFactory.ConfigFactory._algs
private

Definition at line 114 of file ConfigFactory.py.

◆ _order

python.ConfigFactory.ConfigFactory._order
private

Definition at line 115 of file ConfigFactory.py.

◆ ROOTNAME

python.ConfigFactory.ConfigFactory.ROOTNAME

Definition at line 113 of file ConfigFactory.py.


The documentation for this class was generated from the following file:
python.ConfigFactory.getFuncArgs
def getFuncArgs(func)
Definition: ConfigFactory.py:35
python.processes.powheg.ZZ.ZZ.__init__
def __init__(self, base_directory, **kwargs)
Constructor: all process options are set here.
Definition: ZZ.py:18