[BioPython] Translation method for Seq object

Martin MOKREJŠ mmokrejs at ribosome.natur.cuni.cz
Sun Oct 19 11:52:29 EDT 2008


Hi,
  I have been away for 2 weeks but although late, let
me oppose that string.translate() is of use. Here is my
current code:

    # make sure no unallowed chars are present in the sequence
    if type == "DNA":
        if not _sequence.translate(string.maketrans('', ''),'GgAaTtCc'):
            if not _sequence.translate(string.maketrans('', ''),'GgAaTtCcBbDdSsWw'):
                if not _sequence.translate(string.maketrans('', ''),'GgAaTtCcRrYyWwSsMmKkHhBbVvDdNn'):
                    raise ValueError, "DNA sequence contains unallowed characters: " + str(_sequence.translate(string.maketrans('', ''),'GgAaTtCcRrYyWwSsMmKkHhBbVvDdNn'))
                else:
                    _warning = "DNA sequence contains IUPACAmbiguousDNA characters, which cannot be interpreted uniquely. Please try to find sequence of higher quality."
            else:
                _warning = "DNA sequence contains ExtendedIUPACDNA characters. " + str(_sequence.translate(string.maketrans('', ''),'GATC')) + " Please try to find sequence of higher quality."
    elif type == "RNA":
        if not _sequence.translate(string.maketrans('', ''),'GgAaUuCc'):
            if not _sequence.translate(string.maketrans('', ''),'GgAaUuCcRrYyWwSsMmKkHhBbVvDdNn'):
                raise ValueError, "RNA sequence contains unallowed characters: " + str(_sequence.translate(string.maketrans('', ''),'GgAaTtCcRrYyWwSsMmKkHhBbVvDdNn'))
            else:
                _warning = "RNA sequence contains ExtendedIUPACDNA characters. " + str(_sequence.translate(string.maketrans('', ''),'GgAaUuCc')) + " Please try to find sequence of higher quality."
        _sequence = _sequence.translate(string.maketrans('Uu', 'Tt'))
    return (_warning, _type, _description, _sequence)


I would have voted for b) or c).
Martin


Peter wrote:
> Dear Biopythoneers,
> 
> This is a request for feedback about proposed additions to the Seq
> object for the next release of Biopython.  I'd like people to pick (a)
> to (e) in the list below (with additional comments or counter
> suggestions welcome).
> 
> Enhancement bug 2381 is about adding transcription and translation
> methods to the Seq object, allowing an object orientated style of
> programming.
> 
> e.g. Current functional programming style:
> 
>>>> from Bio.Seq import Seq, transcribe
>>>> from Bio.Alphabet import generic_dna
>>>> my_seq = Seq("CAGTGACGTTAGTCCG", generic_dna)
>>>> my_seq
> Seq('CAGTGACGTTAGTCCG', DNAAlphabet())
>>>> transcribe(my_seq)
> Seq('CAGUGACGUUAGUCCG', RNAAlphabet())
> 
> With the latest Biopython in CVS, you can now invoke a Seq object
> method instead for transcription (or back transcription):
> 
>>>> my_seq.transcribe()
> Seq('CAGUGACGUUAGUCCG', RNAAlphabet())
> 
> For a comparison, compare the shift from python string functions to
> string methods.  This also makes the functionality more discoverable
> via dir(my_seq).
> 
> Adding Seq object methods "transcribe" and "back_transcribe" doesn't
> cause any confusion with the python string methods.  However, for
> translation, the python string has an existing "translate" method:
> 
>> S.translate(table [,deletechars]) -> string
>>
>> Return a copy of the string S, where all characters occurring
>> in the optional argument deletechars are removed, and the
>> remaining characters have been mapped through the given
>> translation table, which must be a string of length 256.
> 
> I don't think this functionality is really of direct use for sequences, and
> having a Seq object "translate" method do a biological translation into
> a protein sequence is much more intuitive. However, this could cause
> confusion if the Seq object is passed to non-Biopython code which
> expects a string like translate method.
> 
> To avoid this naming clash, a different method name would needed.
> 
> This is where some user feedback would be very welcome - I think
> the following cover all the alternatives of what to call a biological
> translation function (nucleotide to protein):
> 
> (a) Just use translate (ignore the existing string method)
> (b) Use translate_ (trailing underscore, see PEP8)
> (c) Use translation (a noun rather than verb; different style).
> (d) Use something else (e.g. bio_translate or ...)
> (e) Don't add a biological translation method at all because ...
> 
> Thanks,
> 
> Peter
> 
> See also http://bugzilla.open-bio.org/show_bug.cgi?id=2381


More information about the BioPython mailing list