def MaxASA(scale):
    """Returns the maximum accessible surface area for amino acids.

    This function returns the maximum accessible surface area (ASA)
    for the amino acids in units of square angstroms. These ASAs
    are necessary for calculating the relative solvent accessibility
    of a residue.

    There are a large variety of estimates for the exact ASA for each
    amino acid. The calling variable *scale* specifies which scale to
    use. Allowed values are the following strings:

        * 'Tien2013' : The values provided by Tien et al (Maximum
          allowed solvent accessibilities of residues in proteins),
          as defined in Table 1 in the column labeled "Theoretical"
          at http://www.plosone.org/article/info:doi/10.1371/journal.pone.0080635

    The returned variable is a dictionary *asa* keyed by each 
    upper-case one-letter amino-acid code, with the values
    being the ASA for that residue.

    Example:

    >>> asa = MaxASA('Tien2013')
    >>> len(asa) == 20
    True
    >>> asa == {'A':129.0, 'R':274.0, 'N':195.0, 'D':193.0, 'C':167.0, 'E':223.0, 'Q':225.0, 'G':104.0, 'H':224.0, 'I':197.0, 'L':201.0, 'K':236.0, 'M':224.0, 'F':240.0, 'P':159.0, 'S':155.0, 'T':172.0, 'W':285.0, 'Y':263.0, 'V':174.0}
    True

    """
    if scale == 'Tien2013':
        return {'A':129.0, 'R':274.0, 'N':195.0, 'D':193.0, 'C':167.0,
                'E':223.0, 'Q':225.0, 'G':104.0, 'H':224.0, 'I':197.0,
                'L':201.0, 'K':236.0, 'M':224.0, 'F':240.0, 'P':159.0,
                'S':155.0, 'T':172.0, 'W':285.0, 'Y':263.0, 'V':174.0,}
    else:
        raise ValueError("Invalid value for scale")