Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-05-20 22:39:50

0001 import importlib
0002 from FWCore.ParameterSet.ModulesProxy import _ModuleProxy
0003 from FWCore.ParameterSet.Types import _ProxyParameter, _RequiredParameter, _OptionalParameter
0004 import FWCore.ParameterSet.Config as cms
0005 
0006 #setup defaults for each type
0007 cms.int32.dummyDefault = 999
0008 cms.uint32.dummyDefault = 999
0009 cms.int64.dummyDefault = 999
0010 cms.uint64.dummyDefault = 999
0011 cms.string.dummyDefault="__default__"
0012 cms.double.dummyDefault = 9999
0013 cms.vdouble.dummyDefault = []
0014 cms.vint32.dummyDefault = []
0015 cms.vuint32.dummyDefault = []
0016 cms.vint64.dummyDefault = []
0017 cms.vuint64.dummyDefault=[]
0018 cms.vstring.dummyDefault=[]
0019 cms.bool.dummyDefault = False
0020 cms.PSet.dummyDefault = cms.PSet()
0021 cms.VPSet.dummyDefault = cms.VPSet()
0022 cms.InputTag.dummyDefault = "__dummy__"
0023 cms.VInputTag.dummyDefault = []
0024 cms.ESInputTag.dummyDefault=":__dummy__"
0025 cms.VESInputTag.dummyValue = []
0026 cms.EventID.dummyDefault="0:0:0"
0027 cms.VEventID.dummyDefault =[]
0028 cms.LuminosityBlockID.dummyDefault = "0:0"
0029 cms.VLuminosityBlockID.dummyDefault=[]
0030 cms.EventRange.dummyDefault="0:0"
0031 cms.VEventRange.dummyDefault=[]
0032 cms.LuminosityBlockRange.dummyDefault="0:0"
0033 cms.VLuminosityBlockID.dummyDefault=[]
0034 cms.FileInPath.dummyDefault="__dummy__"
0035 
0036 
0037 
0038 def create_cfis(modName: str, writeRequired, writeOptional):
0039     modules = importlib.import_module(modName+".modules")
0040     for (n,m) in (x for x in modules.__dict__.items() if isinstance(x[1], _ModuleProxy)):
0041         print(modName +'.'+n)
0042         write_cfi(modName+'.'+n, writeRequired, writeOptional)
0043 
0044 def write_cfi(pythonModuleName, writeRequired, writeOptional):
0045     parts = pythonModuleName.split('.')
0046     filename = parts[-1][0].lower()+parts[-1][1:]
0047     f = open(filename+"_cfi.py",'x')
0048     f.writelines(["import FWCore.ParameterSet.DummyCfis as dc\n",
0049                   "import sys\n",
0050                   "dc.create_module('{}', sys.modules[__name__], {}, {})\n".format(pythonModuleName, writeRequired, writeOptional)])
0051     f.close()
0052     
0053 def setDefaultInPSet(pset: cms.PSet, writeRequired, writeOptional):
0054     for n in pset.parameterNames_():
0055         setADefault(pset, n, writeRequired, writeOptional)
0056 
0057 def setADefault(obj, paramName, writeRequired, writeOptional):
0058     p = getattr(obj, paramName)
0059     #print(p)
0060     if (isinstance(p, _RequiredParameter) and writeRequired) or (isinstance(p, _OptionalParameter) and writeOptional):
0061         p.setValue(p._ProxyParameter__type.dummyDefault)
0062     if isinstance(p, cms.PSet):
0063         setDefaultInPSet(p, writeRequired, writeOptional)
0064     if isinstance(p, cms.VPSet):
0065         for pset in p:
0066             setDefaultInPSet(pset, writeRequired, writeOptional)
0067 
0068 def setDefaultsInModule(mod, writeRequired, writeOptional):
0069     for n in mod.parameterNames_():
0070         setADefault(mod, n, writeRequired, writeOptional)
0071     return mod
0072     
0073 def create_module(pythonModuleName: str, localPythonModule, writeRequired, writeOptional ):
0074     parts = pythonModuleName.split('.')
0075     pmod = importlib.import_module(pythonModuleName)
0076     setattr(localPythonModule, parts[-1][0].lower()+parts[-1][1:], setDefaultsInModule(getattr(pmod, parts[-1])(), writeRequired, writeOptional ) )
0077     
0078     
0079 #create_cfis("FWCore.Integration")
0080 
0081 if __name__ == '__main__':
0082     import FWCore.ParameterSet.Config as cms
0083     test = cms.EDAnalyzer("Foo",
0084                           a = cms.optional.int32,
0085                           b = cms.optional.string,
0086                           c = cms.optional.PSet,
0087                           d = cms.untracked.PSet(a=cms.int32(1), b= cms.optional.untracked.PSet),
0088                           e = cms.required.EventID,
0089                           f = cms.optional.LuminosityBlockID,
0090                           g = cms.optional.EventRange,
0091                           h = cms.optional.LuminosityBlockRange,
0092                           j = cms.optional.InputTag,
0093                           k = cms.optional.ESInputTag,
0094                           l = cms.optional.FileInPath
0095     )
0096     print(test.dumpPython())
0097     setDefaultsInModule(test, True, False)
0098     print(test.dumpPython())
0099