# Copyright 2000 by Andrew Dalke. # All rights reserved. # This code is part of the Biopython distribution and governed by its # license. Please see the LICENSE file that should have been included # as part of this package. """Miscellaneous functions for dealing with sequences (obsolete?).""" import Seq import Alphabet from PropertyManager import default_manager def translate(seq, id = None): """Translate a sequence (DEPRECATED).""" import warnings warnings.warn("Bio.utils.translate() has been deprecated, and we" \ +" intend to remove it in a future release of Biopython."\ +" Please use the translate method or function in Bio.Seq"\ +" instead, as described in the Tutorial.", DeprecationWarning) if id is None: s = "translator" else: s = "translator.id.%d" % id translator = default_manager.resolve(seq.alphabet, s) return translator.translate(seq) def translate_to_stop(seq, id = None): """Translate a sequence up to the first in frame stop codon (DEPRECATED).""" import warnings warnings.warn("Bio.utils.translate_to_stop() has been deprecated, and we" \ +" intend to remove it in a future release of Biopython."\ +" Please use the translate method or function in Bio.Seq"\ +" instead, as described in the Tutorial.", DeprecationWarning) if id is None: s = "translator" else: s = "translator.id.%d" % id translator = default_manager.resolve(seq.alphabet, s) return translator.translate_to_stop(seq) def back_translate(seq, id = None): """Back-translate a sequence (DEPRECATED).""" import warnings warnings.warn("Bio.utils.back_translate() has been deprecated, and we" \ +" intend to remove it in a future release of Biopython."\ +" If you use it, please tell us on the mailing list.", DeprecationWarning) if id is None: s = "translator" else: s = "translator.id.%d" % id translator = default_manager.resolve(seq.alphabet, s) return translator.back_translate(seq) def transcribe(seq): """Transcribe a sequence (DEPRECATED).""" import warnings warnings.warn("Bio.utils.transcribe() has been deprecated, and we" \ +" intend to remove it in a future release of Biopython."\ +" Please use the transcribe method or function in"\ +" Bio.Seq instead, as described in the Tutorial.", DeprecationWarning) transcriber = default_manager.resolve(seq.alphabet, "transcriber") return transcriber.transcribe(seq) def back_transcribe(seq): """Back-transcribe a sequence (DEPRECATED).""" import warnings warnings.warn("Bio.utils.back_transcribe() has been deprecated, and we" \ +" intend to remove it in a future release of Biopython."\ +" Please use the back_transcribe method or function in"\ +" Bio.Seq instead, as described in the Tutorial.", DeprecationWarning) transcriber = default_manager.resolve(seq.alphabet, "transcriber") return transcriber.back_transcribe(seq) def ungap(seq): """given a sequence with gap encoding, return the ungapped sequence""" #TODO - Fix this? It currently assumes the outmost AlphabetEncoder #is for the gap. Consider HasStopCodon(Gapped(Protein())) as a test case. gap = seq.gap_char letters = [] for c in seq.data: if c != gap: letters.append(c) return Seq.Seq("".join(letters), seq.alphabet.alphabet) def verify_alphabet(seq): letters = {} for c in seq.alphabet.letters: letters[c] = 1 try: for c in seq.data: letters[c] except KeyError: return 0 return 1 def count_monomers(seq): dict = {} # bugfix: string.count(s,c) raises an AttributeError. Iddo Friedberg 16 Mar. 04 # s = buffer(seq.data) # works for strings and array.arrays for c in seq.alphabet.letters: dict[c] = seq.data.count(c) return dict def percent_monomers(seq): dict2 = {} seq_len = len(seq) dict = count_monomers(seq) for m in dict: dict2[m] = dict[m] * 100. / seq_len return dict2 def sum(seq, table, zero = 0.0): total = zero for c in getattr(seq, "data", seq): total = total + table[c] return total # For ranged addition def sum_2ple(seq, table, zero = (0.0, 0.0)): x, y = zero data = getattr(seq, "data", seq) for c in data: x2, y2 = table[c] x = x + x2 y = y + y2 return (x, y) def total_weight(seq, weight_table = None): if weight_table is None: weight_table = default_manager.resolve(seq.alphabet, "weight_table") return sum(seq, weight_table) def total_weight_range(seq, weight_table = None): if weight_table is None: weight_table = default_manager.resolve(seq.alphabet, "weight_range_table") return sum_2ple(seq, weight_table) def reduce_sequence(seq, reduction_table,new_alphabet=None): """ given an amino-acid sequence, return it in reduced alphabet form based on the letter-translation table passed. Some "standard" tables are in Alphabet.Reduced. seq: a Seq.Seq type sequence reduction_table: a dictionary whose keys are the "from" alphabet, and values are the "to" alphabet""" if new_alphabet is None: new_alphabet = Alphabet.single_letter_alphabet new_alphabet.letters = '' for letter in reduction_table: new_alphabet.letters += letter new_alphabet.size = len(new_alphabet.letters) new_seq = Seq.Seq('',new_alphabet) for letter in seq: new_seq += reduction_table[letter] return new_seq