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