File indexing completed on 2024-12-01 23:40:08
0001
0002 import FWCore.ParameterSet.Config as cms
0003 import sys
0004 import FWCore.ParameterSet.SequenceTypes as sqt
0005 import FWCore.ParameterSet.Modules as mod
0006
0007
0008 def checkOutputModuleConfig(module):
0009 """Check if a PoolOutputModule is properly configured"""
0010 if hasattr(module,"dataset"):
0011 dataset = getattr(module,"dataset")
0012 try:
0013 dataTier = getattr(dataset,"dataTier")
0014 filterName = getattr(dataset,"filterName")
0015 except:
0016 print("Module", module, "has a malformed PSet dataset")
0017 else:
0018 print("Module", module, "has no PSet dataset defined")
0019
0020
0021 def getModulesFromSequence(sequence,list):
0022 item = sequence._seq
0023 if isinstance(item,mod._Module):
0024 list.append(item)
0025 elif isinstance(item,cms.Sequence):
0026 getModulesFromSequence(item,list)
0027 else:
0028 _getModulesFromOp(item,list)
0029
0030
0031 def _getModulesFromOp(op,list):
0032 for item in dir(op):
0033 o = getattr(op,item)
0034 if isinstance(o,mod._Module):
0035 list.append(o)
0036 elif isinstance(o, cms.Sequence):
0037 _getModulesFromOp(o,list)
0038 elif isinstance(o,sqt._Sequenceable):
0039 _getModulesFromOp(o,list)
0040
0041
0042 def extractUsedOutputs(process):
0043 allEndPathModules = []
0044 for name in process._Process__endpaths:
0045 endpath = getattr(process,name)
0046 list = []
0047 getModulesFromSequence(endpath,list)
0048 allEndPathModules.extend(list)
0049 allUsedOutputModules = []
0050 for module in allEndPathModules:
0051 if isinstance(module, cms.OutputModule):
0052 allUsedOutputModules.append(module)
0053 return allUsedOutputModules
0054
0055
0056
0057
0058 if __name__ == "__main__":
0059
0060 if len(sys.argv) < 2:
0061 print("usage: testSkimConfig <filenames>")
0062
0063 for scriptName in sys.argv[1:]:
0064 print("Checking skim config file", scriptName)
0065
0066 process = cms.include(scriptName)
0067
0068
0069 print("checking", len (process._Process__outputmodules), "output modules")
0070 for outputModuleName in process._Process__outputmodules:
0071 print(" ", outputModuleName)
0072 outputModule = getattr(process, outputModuleName)
0073 checkOutputModuleConfig(outputModule)
0074
0075 usedOutputs = extractUsedOutputs(process)
0076 print("Actually used: ", len(usedOutputs))
0077 for module in usedOutputs:
0078 print(" ", module.label())