Example #1
0
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
Example #2
0
 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