Go to the documentation of this file.00001 import FWCore.ParameterSet.SequenceTypes as sqt
00002 import FWCore.ParameterSet.Config as cms
00003 import FWCore.ParameterSet.Modules as mod
00004
00005
00006 def getModulesFromSequence(sequence,list):
00007 item = sequence._seq
00008 if isinstance(item,mod._Module):
00009 list.append(item)
00010 elif isinstance(item,cms.Sequence):
00011 getModulesFromSequence(item,list)
00012 else:
00013 _getModulesFromOp(item,list)
00014
00015
00016 def _getModulesFromOp(op,list):
00017 for item in dir(op):
00018 o = getattr(op,item)
00019 if isinstance(o,mod._Module):
00020 list.append(o)
00021 elif isinstance(o, cms.Sequence):
00022 _getModulesFromOp(o,list)
00023 elif isinstance(o,sqt._Sequenceable):
00024 _getModulesFromOp(o,list)
00025
00026
00027 def extractUsedOutputs(process):
00028 allEndPathModules = []
00029 for name in process._Process__endpaths:
00030 endpath = getattr(process,name)
00031 list = []
00032 getModulesFromSequence(endpath,list)
00033 allEndPathModules.extend(list)
00034 allUsedOutputModules = []
00035 for module in allEndPathModules:
00036 if isinstance(module, cms.OutputModule):
00037 allUsedOutputModules.append(module)
00038 return allUsedOutputModules
00039
00040 if __name__ == "__main__":
00041 import unittest
00042 class TestPrintPath(unittest.TestCase):
00043 def testGetModules(self):
00044 p=cms.Process("Test")
00045 p.foo = cms.EDProducer("Foo")
00046 p.p = cms.Path(p.foo)
00047 list = []
00048 getModulesFromSequence(p.p,list)
00049 print len(list)
00050
00051 p=cms.Process("Test")
00052 p.foo = cms.OutputModule("Foo")
00053 p.bar = cms.OutputModule("Bar")
00054 p.unused = cms.OutputModule("Unused")
00055 p.p = cms.EndPath(p.foo*p.bar)
00056 usedOutputs = extractUsedOutputs(p)
00057 print len(usedOutputs)
00058
00059 p=cms.Process("Test")
00060 p.foo = cms.EDProducer("Foo")
00061 p.bar = cms.EDProducer("Bar")
00062 p.s = cms.Sequence(p.foo*p.bar)
00063 p.fii = cms.EDProducer("Fii")
00064 p.p = cms.Path(p.s*p.fii)
00065 list = []
00066 getModulesFromSequence(p.p,list)
00067 print len(list)
00068
00069
00070 unittest.main()