ATLAS Offline Software
PileupAnalysisSequence.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 # AnaAlgorithm import(s):
4 from AnaAlgorithm.AnaAlgSequence import AnaAlgSequence
5 from AnaAlgorithm.DualUseConfig import createAlgorithm, addPrivateTool
6 from AnalysisAlgorithmsConfig.ConfigAccumulator import DataType
7 from Campaigns.Utils import Campaign
8 
9 import logging
10 log = logging.getLogger('makePileupAnalysisSequence')
11 
12 def makePileupAnalysisSequence( dataType, campaign=None, files=None, useDefaultConfig=False, userLumicalcFiles=None, userPileupConfigs=None ):
13  """Create a PRW analysis algorithm sequence
14 
15  Keyword arguments:
16  dataType -- The data type enum
17  """
18 
19  if isinstance(dataType, str):
20  dataType = {
21  "data": DataType.Data,
22  "fullsim": DataType.FullSim,
23  "fastsim": DataType.FastSim,
24  "mc": DataType.FullSim,
25  "afii": DataType.FastSim,
26  }.get(dataType)
27 
28  if not dataType:
29  raise ValueError ("invalid data type")
30 
31  # Create the analysis algorithm sequence object:
32  seq = AnaAlgSequence( "PileupAnalysisSequence" )
33 
34  # TODO: support per-campaign config
35 
36  toolConfigFiles = []
37  toolLumicalcFiles = []
38  if files is not None and (campaign is None or campaign is Campaign.Unknown or userPileupConfigs is None):
39  if campaign is None or campaign is Campaign.Unknown:
40  from Campaigns.Utils import getMCCampaign
41  campaign = getMCCampaign(files)
42  if campaign:
43  log.info(f'Autoconfiguring PRW with campaign: {campaign}')
44  else:
45  log.info('Campaign could not be determined.')
46 
47  if campaign:
48  if userPileupConfigs is None:
49  if dataType is DataType.Data:
50  log.info('Data needs no configuration files')
51  else:
52  from PileupReweighting.AutoconfigurePRW import getConfigurationFiles
53  toolConfigFiles = getConfigurationFiles(campaign=campaign, files=files, useDefaultConfig=useDefaultConfig)
54  log.info('Setting PRW configuration based on input files')
55 
56  if toolConfigFiles:
57  log.info(f'Using PRW configuration: {", ".join(toolConfigFiles)}')
58  else:
59  log.info('Using user provided PRW configuration')
60 
61  if userPileupConfigs is not None:
62  toolConfigFiles = userPileupConfigs[:]
63 
64  if userLumicalcFiles is not None:
65  toolLumicalcFiles = userLumicalcFiles[:]
66  log.info(f'Using user-provided lumicalc files: {", ".join(toolLumicalcFiles)}')
67  else:
68  from PileupReweighting.AutoconfigurePRW import getLumicalcFiles
69  toolLumicalcFiles = getLumicalcFiles(campaign)
70  log.info(f'Using autoconfigured lumicalc files: {", ".join(toolLumicalcFiles)}')
71 
72  # Set up the only algorithm of the sequence:
73  alg = createAlgorithm( 'CP::PileupReweightingAlg', 'PileupReweightingAlg' )
74  addPrivateTool( alg, 'pileupReweightingTool', 'CP::PileupReweightingTool' )
75  alg.pileupReweightingTool.ConfigFiles = toolConfigFiles
76  if not toolConfigFiles and dataType is not DataType.Data:
77  log.info("No PRW config files provided. Disabling reweighting")
78  # Setting the weight decoration to the empty string disables the reweighting
79  alg.pileupWeightDecoration = ""
80  alg.pileupReweightingTool.LumiCalcFiles = toolLumicalcFiles
81 
82  seq.append( alg, inputPropName = {} )
83 
84  # Return the sequence:
85  return seq
python.DualUseConfig.addPrivateTool
def addPrivateTool(alg, toolName, typeName)
Definition: DualUseConfig.py:180
python.DualUseConfig.createAlgorithm
def createAlgorithm(typeName, instanceName)
Definition: DualUseConfig.py:56
python.AutoconfigurePRW.getConfigurationFiles
def getConfigurationFiles(campaign=None, dsid=None, data_type=None, files=None, useDefaultConfig=False)
Definition: AutoconfigurePRW.py:116
python.PileupAnalysisSequence.makePileupAnalysisSequence
def makePileupAnalysisSequence(dataType, campaign=None, files=None, useDefaultConfig=False, userLumicalcFiles=None, userPileupConfigs=None)
Definition: PileupAnalysisSequence.py:12
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
python.AutoconfigurePRW.getLumicalcFiles
def getLumicalcFiles(campaign)
Definition: AutoconfigurePRW.py:6
python.Utils.getMCCampaign
def getMCCampaign(files)
Definition: Tools/Campaigns/python/Utils.py:27