Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-01 23:40:08

0001 #!/usr/bin/env python
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         #print "+ python parseable"
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())