Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
import importlib
from FWCore.ParameterSet.ModulesProxy import _ModuleProxy
from FWCore.ParameterSet.Types import _ProxyParameter, _RequiredParameter, _OptionalParameter
import FWCore.ParameterSet.Config as cms

#setup defaults for each type
cms.int32.dummyDefault = 999
cms.uint32.dummyDefault = 999
cms.int64.dummyDefault = 999
cms.uint64.dummyDefault = 999
cms.string.dummyDefault="__default__"
cms.double.dummyDefault = 9999
cms.vdouble.dummyDefault = []
cms.vint32.dummyDefault = []
cms.vuint32.dummyDefault = []
cms.vint64.dummyDefault = []
cms.vuint64.dummyDefault=[]
cms.vstring.dummyDefault=[]
cms.bool.dummyDefault = False
cms.PSet.dummyDefault = cms.PSet()
cms.VPSet.dummyDefault = cms.VPSet()
cms.InputTag.dummyDefault = "__dummy__"
cms.VInputTag.dummyDefault = []
cms.ESInputTag.dummyDefault=":__dummy__"
cms.VESInputTag.dummyValue = []
cms.EventID.dummyDefault="0:0:0"
cms.VEventID.dummyDefault =[]
cms.LuminosityBlockID.dummyDefault = "0:0"
cms.VLuminosityBlockID.dummyDefault=[]
cms.EventRange.dummyDefault="0:0"
cms.VEventRange.dummyDefault=[]
cms.LuminosityBlockRange.dummyDefault="0:0"
cms.VLuminosityBlockID.dummyDefault=[]
cms.FileInPath.dummyDefault="__dummy__"



def create_cfis(modName: str, writeRequired, writeOptional):
    modules = importlib.import_module(modName+".modules")
    for (n,m) in (x for x in modules.__dict__.items() if isinstance(x[1], _ModuleProxy)):
        print(modName +'.'+n)
        write_cfi(modName+'.'+n, writeRequired, writeOptional)

def write_cfi(pythonModuleName, writeRequired, writeOptional):
    parts = pythonModuleName.split('.')
    filename = parts[-1][0].lower()+parts[-1][1:]
    f = open(filename+"_cfi.py",'x')
    f.writelines(["import FWCore.ParameterSet.DummyCfis as dc\n",
                  "import sys\n",
                  "dc.create_module('{}', sys.modules[__name__], {}, {})\n".format(pythonModuleName, writeRequired, writeOptional)])
    f.close()
    
def setDefaultInPSet(pset: cms.PSet, writeRequired, writeOptional):
    for n in pset.parameterNames_():
        setADefault(pset, n, writeRequired, writeOptional)

def setADefault(obj, paramName, writeRequired, writeOptional):
    p = getattr(obj, paramName)
    #print(p)
    if (isinstance(p, _RequiredParameter) and writeRequired) or (isinstance(p, _OptionalParameter) and writeOptional):
        p.setValue(p._ProxyParameter__type.dummyDefault)
    if isinstance(p, cms.PSet):
        setDefaultInPSet(p, writeRequired, writeOptional)
    if isinstance(p, cms.VPSet):
        for pset in p:
            setDefaultInPSet(pset, writeRequired, writeOptional)

def setDefaultsInModule(mod, writeRequired, writeOptional):
    for n in mod.parameterNames_():
        setADefault(mod, n, writeRequired, writeOptional)
    return mod
    
def create_module(pythonModuleName: str, localPythonModule, writeRequired, writeOptional ):
    parts = pythonModuleName.split('.')
    pmod = importlib.import_module(pythonModuleName)
    setattr(localPythonModule, parts[-1][0].lower()+parts[-1][1:], setDefaultsInModule(getattr(pmod, parts[-1])(), writeRequired, writeOptional ) )
    
    
#create_cfis("FWCore.Integration")

if __name__ == '__main__':
    import FWCore.ParameterSet.Config as cms
    test = cms.EDAnalyzer("Foo",
                          a = cms.optional.int32,
                          b = cms.optional.string,
                          c = cms.optional.PSet,
                          d = cms.untracked.PSet(a=cms.int32(1), b= cms.optional.untracked.PSet),
                          e = cms.required.EventID,
                          f = cms.optional.LuminosityBlockID,
                          g = cms.optional.EventRange,
                          h = cms.optional.LuminosityBlockRange,
                          j = cms.optional.InputTag,
                          k = cms.optional.ESInputTag,
                          l = cms.optional.FileInPath
    )
    print(test.dumpPython())
    setDefaultsInModule(test, True, False)
    print(test.dumpPython())