@staticmethod
def createSetsFromStrings(structureString='', valueString=None):
    '\n        Construct a list of GeneSet objects based on the given strings.\n          The first string, structureString, determines the number of GeneSets to create.\n          An empty string will return an empty list.\n          A string containing anything else will return one or more subsets.\n          The number of subsets is determined by the number of times the separator string " or " occurs in the\n        structureString.  For example, "(setA) or (setB) or (setC) or geneD or geneE or (setF)" will create\n        six subsets.  "(setA)", "(setC)", "geneD", etc are substrings that declare the contents of each set.\n          There are two accepted ways to format the substrings:\n        Method #1:\n            substrings example: "aName=[aLow:aBest:aHigh] and bName=[bLow:bBest:bHigh] and cName=value and dName"\n            valueString=None\n          In this example, four NamedRangedNumber objects will be created in total:\n        aName and bName specify rangedNumber values for NamedRangedNumber, cName specifies just one floating point\n        number that is converted to a rangedNumber, and dName crates a NamedRangedNumber with the value set to None.\n        valueString can be left out entirely.\n        Method #2:\n            substrings example: "aName and dName and cName and qName"\n            valueString example: "aName=[aLow:aBest:aHigh] bName=[bLow:bBest:bHigh] cName=value dName=value fName=value"\n          In this example, four NamedRangedNumber objects will be created, but only two of them will be assigned values\n        (the other two will have values of None).  This happens because the structureString declares what items are in\n        the set, while the valueString only assigns values.  If a value is given in the second string for a name that is\n        not listed in the first, that value is ignored.  No item is created for it.\n          While it is possible to supply a mixture of methods 1 and 2, it is not recommended practice.  Values assigned via\n        method 2 take precedence over values assigned via method 1, even if the value assigned is "=None".\n          Note that Gene objects are re-used from one set to the next.  That is, if the same name is mentioned in two\n        different substrings, only one Gene object will be created but it will be placed in two subsets.\n        '
    givenValues = {}
    if (valueString is not None):
        pairs = valueString.split()
        for pair in pairs:
            parts = pair.split('=')
            name = parts[0]
            if parts[1:2]:
                givenValues[name] = parts[1]
    subSets = []
    structureString = structureString.strip()
    if (structureString != ''):
        collectionStrings = re.split('\\s+or\\s+', structureString)
        for collectionStr in collectionStrings:
            items = []
            collectionStr = collectionStr.replace('(', ' ').replace(')', ' ').strip()
            itemStrings = re.split('\\s+and\\s+', collectionStr)
            for itemString in itemStrings:
                item = Gene.fromString(itemString)
                if (item.canonicalName in givenValues):
                    item.set(givenValues[item.canonicalName])
                items.append(item)
            if items:
                subSets.append(GeneSet(items))
    return subSets
Construct a list of GeneSet objects based on the given strings.
  The first string, structureString, determines the number of GeneSets to create.
  An empty string will return an empty list.
  A string containing anything else will return one or more subsets.
  The number of subsets is determined by the number of times the separator string " or " occurs in the
structureString.  For example, "(setA) or (setB) or (setC) or geneD or geneE or (setF)" will create
six subsets.  "(setA)", "(setC)", "geneD", etc are substrings that declare the contents of each set.
  There are two accepted ways to format the substrings:
Method #1:
    substrings example: "aName=[aLow:aBest:aHigh] and bName=[bLow:bBest:bHigh] and cName=value and dName"
    valueString=None
  In this example, four NamedRangedNumber objects will be created in total:
aName and bName specify rangedNumber values for NamedRangedNumber, cName specifies just one floating point
number that is converted to a rangedNumber, and dName crates a NamedRangedNumber with the value set to None.
valueString can be left out entirely.
Method #2:
    substrings example: "aName and dName and cName and qName"
    valueString example: "aName=[aLow:aBest:aHigh] bName=[bLow:bBest:bHigh] cName=value dName=value fName=value"
  In this example, four NamedRangedNumber objects will be created, but only two of them will be assigned values
(the other two will have values of None).  This happens because the structureString declares what items are in
the set, while the valueString only assigns values.  If a value is given in the second string for a name that is
not listed in the first, that value is ignored.  No item is created for it.
  While it is possible to supply a mixture of methods 1 and 2, it is not recommended practice.  Values assigned via
method 2 take precedence over values assigned via method 1, even if the value assigned is "=None".
  Note that Gene objects are re-used from one set to the next.  That is, if the same name is mentioned in two
different substrings, only one Gene object will be created but it will be placed in two subsets.
@staticmethod
def createSetsFromStrings(structureString=, valueString=None):
    '\n        Construct a list of GeneSet objects based on the given strings.\n          The first string, structureString, determines the number of GeneSets to create.\n          An empty string will return an empty list.\n          A string containing anything else will return one or more subsets.\n          The number of subsets is determined by the number of times the separator string " or " occurs in the\n        structureString.  For example, "(setA) or (setB) or (setC) or geneD or geneE or (setF)" will create\n        six subsets.  "(setA)", "(setC)", "geneD", etc are substrings that declare the contents of each set.\n          There are two accepted ways to format the substrings:\n        Method #1:\n            substrings example: "aName=[aLow:aBest:aHigh] and bName=[bLow:bBest:bHigh] and cName=value and dName"\n            valueString=None\n          In this example, four NamedRangedNumber objects will be created in total:\n        aName and bName specify rangedNumber values for NamedRangedNumber, cName specifies just one floating point\n        number that is converted to a rangedNumber, and dName crates a NamedRangedNumber with the value set to None.\n        valueString can be left out entirely.\n        Method #2:\n            substrings example: "aName and dName and cName and qName"\n            valueString example: "aName=[aLow:aBest:aHigh] bName=[bLow:bBest:bHigh] cName=value dName=value fName=value"\n          In this example, four NamedRangedNumber objects will be created, but only two of them will be assigned values\n        (the other two will have values of None).  This happens because the structureString declares what items are in\n        the set, while the valueString only assigns values.  If a value is given in the second string for a name that is\n        not listed in the first, that value is ignored.  No item is created for it.\n          While it is possible to supply a mixture of methods 1 and 2, it is not recommended practice.  Values assigned via\n        method 2 take precedence over values assigned via method 1, even if the value assigned is "=None".\n          Note that Gene objects are re-used from one set to the next.  That is, if the same name is mentioned in two\n        different substrings, only one Gene object will be created but it will be placed in two subsets.\n        '
    givenValues = {}
    if (valueString is not None):
        pairs = valueString.split()
        for pair in pairs:
            parts = pair.split('=')
            name = parts[0]
            if parts[1:2]:
                givenValues[name] = parts[1]
    subSets = []
    structureString = structureString.strip()
    if (structureString != ):
        collectionStrings = re.split('\\s+or\\s+', structureString)
        for collectionStr in collectionStrings:
            items = []
            collectionStr = collectionStr.replace('(', ' ').replace(')', ' ').strip()
            itemStrings = re.split('\\s+and\\s+', collectionStr)
            for itemString in itemStrings:
                item = Gene.fromString(itemString)
                if (item.canonicalName in givenValues):
                    item.set(givenValues[item.canonicalName])
                items.append(item)
            if items:
                subSets.append(GeneSet(items))
    return subSets