From 93cdd1c3b5b94db85707fbffe84be90095cce1b4 Mon Sep 17 00:00:00 2001 From: martinahansen Date: Tue, 7 Aug 2012 17:50:02 +0000 Subject: [PATCH] last fix on prodigal upgrade git-svn-id: http://biopieces.googlecode.com/svn/trunk@1888 74ccb610-7750-0410-82ae-013aeee3265d --- code_ruby/lib/maasha/prodigal.rb | 2 +- code_ruby/lib/maasha/seq.rb | 81 ++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/code_ruby/lib/maasha/prodigal.rb b/code_ruby/lib/maasha/prodigal.rb index 5fc0354..74e5bde 100644 --- a/code_ruby/lib/maasha/prodigal.rb +++ b/code_ruby/lib/maasha/prodigal.rb @@ -60,7 +60,7 @@ class Prodigal fields = entry.seq_name.split(" # ") record[:REC_TYPE] = "GENE" - record[:SEQ_NAME] = fields[0] + record[:S_ID] = fields[0] record[:S_BEG] = fields[1].to_i - 1 record[:S_END] = fields[2].to_i - 1 record[:S_LEN] = record[:S_END] - record[:S_BEG] + 1 diff --git a/code_ruby/lib/maasha/seq.rb b/code_ruby/lib/maasha/seq.rb index 92d3398..b919a7f 100644 --- a/code_ruby/lib/maasha/seq.rb +++ b/code_ruby/lib/maasha/seq.rb @@ -36,6 +36,37 @@ RNA = %w[a u c g] PROTEIN = %w[f l s y c w p h q r i m t n k v a d e g] INDELS = %w[. - _ ~] +# Translation table 11 +# (http://www.ncbi.nlm.nih.gov/Taxonomy/taxonomyhome.html/index.cgi?chapter=cgencodes#SG11) +# AAs = FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG +# Starts = ---M---------------M------------MMMM---------------M------------ +# Base1 = TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG +# Base2 = TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG +# Base3 = TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG +TRANS_TAB11_START = { + "TTG" => "M", "CTG" => "M", "ATT" => "M", "ATC" => "M", + "ATA" => "M", "ATG" => "M", "GTG" => "M" +} + +TRANS_TAB11 = { + "TTT" => "F", "TCT" => "S", "TAT" => "Y", "TGT" => "C", + "TTC" => "F", "TCC" => "S", "TAC" => "Y", "TGC" => "C", + "TTA" => "L", "TCA" => "S", "TAA" => "*", "TGA" => "*", + "TTG" => "L", "TCG" => "S", "TAG" => "*", "TGG" => "W", + "CTT" => "L", "CCT" => "P", "CAT" => "H", "CGT" => "R", + "CTC" => "L", "CCC" => "P", "CAC" => "H", "CGC" => "R", + "CTA" => "L", "CCA" => "P", "CAA" => "Q", "CGA" => "R", + "CTG" => "L", "CCG" => "P", "CAG" => "Q", "CGG" => "R", + "ATT" => "I", "ACT" => "T", "AAT" => "N", "AGT" => "S", + "ATC" => "I", "ACC" => "T", "AAC" => "N", "AGC" => "S", + "ATA" => "I", "ACA" => "T", "AAA" => "K", "AGA" => "R", + "ATG" => "M", "ACG" => "T", "AAG" => "K", "AGG" => "R", + "GTT" => "V", "GCT" => "A", "GAT" => "D", "GGT" => "G", + "GTC" => "V", "GCC" => "A", "GAC" => "D", "GGC" => "G", + "GTA" => "V", "GCA" => "A", "GAA" => "E", "GGA" => "G", + "GTG" => "V", "GCG" => "A", "GAG" => "E", "GGG" => "G" +} + # Quality scores bases SCORE_BASE = 64 SCORE_MIN = 0 @@ -190,6 +221,56 @@ class Seq self.seq.tr!('Uu','Tt') end + # Method to translate a DNA sequence to protein. + def translate!(trans_tab = 11) + raise SeqError, "Sequence type must be 'dna' - not #{self.type}" unless self.type == 'dna' + raise SeqError, "Sequence length must be a multiplum of 3 - was: #{self.length}" unless (self.length % 3) == 0 + + case trans_tab + when 11 + codon_start_hash = TRANS_TAB11_START + codon_hash = TRANS_TAB11 + else + raise SeqError, "Unknown translation table: #{trans_tab}" + end + + codon = self.seq[0 ... 3].upcase + + aa = codon_start_hash[codon] + + raise SeqError, "Unknown start codon: #{codon}" if aa.nil? + + protein = aa + + i = 3 + + while i < self.length + codon = self.seq[i ... i + 3].upcase + + aa = codon_hash[codon] + + raise SeqError, "Unknown codon: #{codon}" if aa.nil? + + protein << aa + + i += 3 + end + + self.seq = protein + self.qual = nil + self.type = "protein" + + self + end + + alias :to_protein! :translate! + + def translate(trans_tab = 11) + self.dup.translate!(trans_tab) + end + + alias :to_protein :translate + # Method that given a Seq entry returns a Biopieces record (a hash). def to_bp raise SeqError, "Missing seq_name" if self.seq_name.nil? -- 2.39.5