def invertcharge(oldcuts, target='SS', **kwargs): """Help function to find, invert and replace charge selections.""" verbosity = LOG.getverbosity(kwargs) oldcuts = getselstr(oldcuts) newcuts = oldcuts if oldcuts == "": newcuts = "q_1*q_2<0" if target == 'OS' else "q_1*q_2>0" if target == 'OS' else "" else: matchOS = re.findall(r"q_[12]\s*\*\s*q_[12]\s*<\s*0", oldcuts) matchSS = re.findall(r"q_[12]\s*\*\s*q_[12]\s*>\s*0", oldcuts) LOG.verbose("invertcharge: oldcuts=%r" % (oldcuts), verbosity, 2) LOG.verbose( "invertcharge: matchOS=%r, matchSS=%r" % (matchOS, matchSS), verbosity, 2) if (len(matchOS) + len(matchSS)) > 1: LOG.warning( 'invertcharge: more than one charge match (%d OS, %d SS) in %r' % (len(matchOS), len(matchSS), oldcuts)) if target == 'OS': for match in matchSS: newcuts = oldcuts.replace(match, "q_1*q_2<0") # invert SS to OS elif target == 'SS': for match in matchOS: newcuts = oldcuts.replace(match, "q_1*q_2>0") # invert OS to SS else: for match in matchOS: newcuts = oldcuts.replace(match, "") # REMOVE for match in matchSS: newcuts = oldcuts.replace(match, "") # REMOVE newcuts = cleanbool(newcuts) LOG.verbose(' %r\n>>> -> %r %s\n>>>' % (oldcuts, newcuts, target), verbosity, 2) return newcuts
def plotfor(self, *strings, **kwargs): """Check if given string is filtered (with 'only') or vetoed (with 'veto') for this variable.""" verbosity = LOG.getverbosity(self, kwargs) strings = list(strings) LOG.verbose('Variable.plotfor: strings=%s, veto=%s, only=%s' % (strings, self.veto, self.only), verbosity, level=2) for i, string in enumerate(strings): if string.__class__.__name__ == 'Selection': string = string.selection strings[i] = string for searchterm in self.veto: if re.search(searchterm, string): LOG.verbose( 'Variable.plotfor: Regex match of string "%s" to "%s"' % (string, searchterm), verbosity, level=2) return False if len(self.only) == 0: return True for i, string in enumerate(strings): for searchterm in self.only: if re.search(searchterm, string): LOG.verbose( 'Variable.plotfor: Regex match of string "%s" to "%s"' % (string, searchterm), verbosity, level=2) return True return False