Package Bio :: Module utils
[hide private]
[frames] | no frames]

Source Code for Module Bio.utils

  1  import string 
  2  import Seq 
  3  import Alphabet 
  4   
  5  from PropertyManager import default_manager 
  6   
7 -def translate(seq, id = None):
8 if id is None: 9 s = "translator" 10 else: 11 s = "translator.id.%d" % id 12 translator = default_manager.resolve(seq.alphabet, s) 13 return translator.translate(seq)
14
15 -def translate_to_stop(seq, id = None):
16 if id is None: 17 s = "translator" 18 else: 19 s = "translator.id.%d" % id 20 translator = default_manager.resolve(seq.alphabet, s) 21 return translator.translate_to_stop(seq)
22
23 -def back_translate(seq, id = None):
24 if id is None: 25 s = "translator" 26 else: 27 s = "translator.id.%d" % id 28 translator = default_manager.resolve(seq.alphabet, s) 29 return translator.back_translate(seq)
30 31
32 -def transcribe(seq):
33 transcriber = default_manager.resolve(seq.alphabet, "transcriber") 34 return transcriber.transcribe(seq)
35
36 -def back_transcribe(seq):
37 transcriber = default_manager.resolve(seq.alphabet, "transcriber") 38 return transcriber.back_transcribe(seq)
39
40 -def ungap(seq):
41 """given a sequence with gap encoding, return the ungapped sequence""" 42 gap = seq.gap_char 43 letters = [] 44 for c in seq.data: 45 if c != gap: 46 letters.append(c) 47 return Seq.Seq(string.join(letters, ""), seq.alphabet.alphabet)
48
49 -def verify_alphabet(seq):
50 letters = {} 51 for c in seq.alphabet.letters: 52 letters[c] = 1 53 try: 54 for c in seq.data: 55 letters[c] 56 except KeyError: 57 return 0 58 return 1
59
60 -def count_monomers(seq):
61 dict = {} 62 # bugfix: string.count(s,c) raises an AttributeError. Iddo Friedberg 16 Mar. 04 63 # s = buffer(seq.data) # works for strings and array.arrays 64 for c in seq.alphabet.letters: 65 dict[c] = string.count(seq.data, c) 66 return dict
67
68 -def percent_monomers(seq):
69 dict2 = {} 70 seq_len = len(seq) 71 dict = count_monomers(seq) 72 for m in dict: 73 dict2[m] = dict[m] * 100. / seq_len 74 return dict2
75
76 -def sum(seq, table, zero = 0.0):
77 total = zero 78 for c in getattr(seq, "data", seq): 79 total = total + table[c] 80 return total
81 82 # For ranged addition
83 -def sum_2ple(seq, table, zero = (0.0, 0.0)):
84 x, y = zero 85 data = getattr(seq, "data", seq) 86 for c in data: 87 x2, y2 = table[c] 88 x = x + x2 89 y = y + y2 90 return (x, y)
91
92 -def total_weight(seq, weight_table = None):
93 if weight_table is None: 94 weight_table = default_manager.resolve(seq.alphabet, "weight_table") 95 return sum(seq, weight_table)
96
97 -def total_weight_range(seq, weight_table = None):
98 if weight_table is None: 99 weight_table = default_manager.resolve(seq.alphabet, "weight_range_table") 100 return sum_2ple(seq, weight_table)
101
102 -def reduce_sequence(seq, reduction_table,new_alphabet=None):
103 """ given an amino-acid sequence, return it in reduced alphabet form based 104 on the letter-translation table passed. Some "standard" tables are in 105 Alphabet.Reduced. 106 seq: a Seq.Seq type sequence 107 reduction_table: a dictionary whose keys are the "from" alphabet, and values 108 are the "to" alphabet""" 109 if new_alphabet is None: 110 new_alphabet = Alphabet.single_letter_alphabet 111 new_alphabet.letters = '' 112 for letter in reduction_table: 113 new_alphabet.letters += letter 114 new_alphabet.size = len(new_alphabet.letters) 115 new_seq = Seq.Seq('',new_alphabet) 116 for letter in seq: 117 new_seq += reduction_table[letter] 118 return new_seq
119