Example #1
0
def changeCut(process, name, value, attribute = "cut"):

    cutNames = []
    cutNames.append(name)
    cutNames.append(composeModuleName([ name, "Cumulative" ]))
    cutNames.append(composeModuleName([ name, "Individual" ]))

    oldValue = None
    oldValue_initialized = False

    numCutsChanged = 0

    for cutName in cutNames:
        if hasattr(process, cutName):
             cut = getattr(process, cutName)

             # Note: "cumulative" and "individual" cuts both point to the same cut value object;
             #       as a consequence, the cut value actually changes for both
             #       the "cumulative" and "individual" cuts upon the first setattr call
             #      --> need to initialize oldValue variable before first setattr call
             if not oldValue_initialized:
                 oldValue = recursiveGetAttr(cut, attribute).value()
             oldValue_initialized = True

             recursiveSetAttr(cut, attribute, value)

             numCutsChanged += 1

    if numCutsChanged > 0:
        print("Replaced " + cutName + "." + attribute + ": '" + str(oldValue) + "' => '" + str(value) + "'")
    else:
        raise ValueError("No cut = " + cutName + " attached to process object !!")
    def _addModule(self, objProdItem, sysName, sysAttributes, pyNameSpace = None, process = None):
        # create module
        moduleType = objProdItem.type_()
        module = cms.EDProducer(moduleType)

        # set module attributes
        # to default values
        for objProdAttrName in dir(objProdItem):
            objProdAttr = getattr(objProdItem, objProdAttrName)
            if isinstance(objProdAttr, cms._ParameterTypeBase) and not objProdAttrName in [ "pluginName", "pluginType" ]:
                if isinstance(objProdAttr, cms.PSet):
                    # CV: need to clone configuration parameters of type cms.PSet,...
                    #     in order to avoid that recursiveSetAttr function
                    #     overwrites objProd "template" object passed to objProdConfigurator constructor !!
                    setattr(module, objProdAttrName, objProdAttr.clone())
                else:
                    setattr(module, objProdAttrName, objProdAttr)

        # set names of source collections
        # to objects shifted in energy/transverse momentum, theta, phi...
        for sysAttrName, sysAttrValue in sysAttributes.items():
            recursiveSetAttr(module, sysAttrName, sysAttrValue)
                
        moduleName = composeModuleName([ getInstanceName(objProdItem, pyNameSpace, process), sysName ])
        module.setLabel(moduleName)

        # if process object exists, attach module to process object;
        # else register module in global python name-space
        if process is not None:
            setattr(process, moduleName, module)
        else:
            pyModule = sys.modules[self.pyModuleName[0]]
            if pyModule is None:
                raise ValueError("'pyModuleName' Parameter invalid !!")
            setattr(pyModule, moduleName, module)

        # add module to sequence
        if self.sequence == None:
            self.sequence = module
        else:
            self.sequence *= module
    def _addModule(self, objProdItem, sysName, sysAttributes, pyNameSpace = None, process = None):
        # create module
        moduleType = objProdItem.type_()
        module = cms.EDProducer(moduleType)

        # set module attributes
        # to default values
        for objProdAttrName in dir(objProdItem):
            objProdAttr = getattr(objProdItem, objProdAttrName)
            if isinstance(objProdAttr, cms._ParameterTypeBase) and not objProdAttrName in [ "pluginName", "pluginType" ]:
                if isinstance(objProdAttr, cms.PSet):
                    # CV: need to clone configuration parameters of type cms.PSet,...
                    #     in order to avoid that recursiveSetAttr function
                    #     overwrites objProd "template" object passed to objProdConfigurator constructor !!
                    setattr(module, objProdAttrName, objProdAttr.clone())
                else:
                    setattr(module, objProdAttrName, objProdAttr)

        # set names of source collections
        # to objects shifted in energy/transverse momentum, theta, phi...
        for sysAttrName, sysAttrValue in sysAttributes.items():
            recursiveSetAttr(module, sysAttrName, sysAttrValue)
                
        moduleName = composeModuleName([ getInstanceName(objProdItem, pyNameSpace, process), sysName ])
        #print "moduleName = %s" % moduleName
        module.setLabel(moduleName)

        # if process object exists, attach module to process object;
        # else register module in global python name-space
        if process is not None:
            setattr(process, moduleName, module)
        else:
            pyModule = sys.modules[self.pyModuleName[0]]
            if pyModule is None:
                raise ValueError("'pyModuleName' Parameter invalid !!")
            setattr(pyModule, moduleName, module)

        # add module to sequence
        self.sequence += module