Table of Contents

Bio-Tools-CodonOptTable

A codon quality check tool, it produces a Codon Optimization table to see the quality of each codon.

The simplest way of depiction is to plot the codon usage frequency that can be found in common codon usage tables. A more elaborate way to depict the codon quality is to convert the codon usage frequency into relative adaptiveness values. In contrast to the codon usage frequency the relative adaptiveness takes into account the number of codons which code for the respective amino acid.

http://kobesearch.cpan.org/htdocs/Bio-Tools-CodonOptTable/README.html

Installation from cpan

cpan>install  Bio::Tools::CodonOptTable

depends on GD::Graph and Bio::Perl

http://search.cpan.org/~shardiwal/Bio-Tools-CodonOptTable-0.07/lib/Bio/Tools/CodonOptTable.pm

USES or Examples

You can use this module in the following ways

use Bio::Tools::CodonOptTable;

my $seqobj = Bio::Tools::CodonOptTable->new ( -seq => 'ATGGGGTGGGCACCATGCTGCTGTCGTGAATTTGGGCACGATGGTGTACGTGCTCGTAGCTAGGGTGGGTGGTTTG',

                                                -id  => 'GeneFragment-12',
                                                -accession_number => 'Myseq1',
                                                -alphabet => 'dna',
                                                -is_circular => 1,
                                                -genetic_code => 1,
                                   );

B<#If you wanna read from file>

my $seqobj = Bio::Tools::CodonOptTable->new(-file => "contig.fasta",

                                             -format => 'Fasta',
                                             -genetic_code => 1,
                                             );

B<#If you have Accession number and want to get file from NCBI>

my $seqobj = Bio::Tools::CodonOptTable->new(-ncbi_id => "J00522",

-genetic_code => 1,);

my $myCodons = $seqobj->rscu_rac_table();

if($myCodons)

        {
            for my $each_aa (@$myCodons)
        {
        print "Codon      : ",$each_aa->{'codon'},"\t";
        print "Frequency  : ",$each_aa->{'frequency'},"\t";
        print "AminoAcid  : ",$each_aa->{'aa_name'},"\t";
        print "RSCU Value : ",$each_aa->{'rscu'},"\t"; #Relative Synonymous Codons Uses
        print "RAC Value  : ",$each_aa->{'rac'},"\t"; #Relative Adaptiveness of a Codon
        print "\n";
        }
        }

B<# To get the prefered codon list based on RSCU & RAC Values >

 my $prefered_codons = $seqobj->prefered_codon($myCodons);

while ( my ($amino_acid, $codon) = each(%$prefered_codons) ) {

print "AminoAcid : $amino_acid \t Codon : $codon\n"; }

B<# To produce a graph between RSCU & RAC> # Graph output file extension should be GIF, we support GIF only

$seqobj->generate_graph($myCodons,"myoutput.gif");

Creating a gui for CodonOptTable

Here is a python script that provides a Graphical User Interface: You need to have wxpython installed on your system.

#!/usr/bin/python
import wx
import os
import random
import re
class testgui(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(683,360))
        # Menu stuff
        menubar =wx.MenuBar()
        menufile =wx.Menu()
        menuhelp =wx.Menu()
        self.SetMenuBar(menubar)
        menubar.Append(menufile, '&File')
        menubar.Append(menuhelp, '&Help')
        exitmenu =menufile.Append(-1, 'Quit', 'Exit Application')
        about =menuhelp.Append(-1, 'About', 'About us')
        #panel creation and sizer
        panel =wx.Panel(self, -1)
        hbsizer =wx.BoxSizer(wx.VERTICAL)
        self.orig_text =wx.TextCtrl(panel,-1,size=(679,275),style=wx.TE_MULTILINE)
       # self.orig_text =wx.TextCtrl(panel,-1)
       #Objects
        self.orig_label =wx.StaticText(panel,-1, 'Paste Your Sequence here:')
        ok_button =wx.Button(panel,-1,'Run CodonOptTable')
        cancel_button =wx.Button(panel,-1,'Clear')
        format_seq =wx.Button(panel,-1,'Format Seq')
        rhead =wx.Button(panel,-1,'Remove Header')
        exit_button=wx.Button(panel,-1,'Exit')
        disp =wx.StaticText(panel,-1,'')
     	vsizer1 =wx.BoxSizer(wx.HORIZONTAL)
     	vsizer4 =wx.BoxSizer(wx.HORIZONTAL)
     	vsizer5 =wx.BoxSizer(wx.HORIZONTAL)
     	vsizer6 =wx.BoxSizer(wx.HORIZONTAL)
     	vsizer2 =wx.BoxSizer(wx.HORIZONTAL)
 
     	vsizer1.Add(self.orig_label,1,wx.CENTRE,10)
     	vsizer2.Add(self.orig_text,1,wx.CENTRE,10)
 
     	vsizer5.Add(rhead,1,wx.RIGHT,1)
     	vsizer5.Add(format_seq,1,wx.RIGHT,1)
     	vsizer5.Add(ok_button,1,wx.RIGHT,1)
     	vsizer5.Add(cancel_button,1,wx.RIGHT,1)
     	vsizer5.Add(exit_button,1,wx.RIGHT,1)
 
     	vsizer6.Add(disp,1,wx.CENTER,1)
 
     	hbsizer.Add(vsizer1,0,wx.CENTER|wx.ALL,1)
#    	   hbsizer.Add(self.orig_text,0, wx.CENTER|wx.ALL,1)
     	hbsizer.Add(vsizer2,0, wx.CENTER|wx.ALL,1)
     	hbsizer.Add(vsizer4,0, wx.CENTER|wx.ALL,1)
     	hbsizer.Add(vsizer5,0,wx.ALIGN_RIGHT|wx.RIGHT,1)
     	hbsizer.Add(vsizer6,0,wx.CENTER,1)
 
	#events
     	self.Bind(wx.EVT_BUTTON,self.executa,ok_button)
     	self.Bind(wx.EVT_BUTTON,self.rheader,rhead)
     	self.Bind(wx.EVT_BUTTON,self.format_seq,format_seq)
     	self.Bind(wx.EVT_MENU, self.soja, exitmenu)
     	self.Bind(wx.EVT_BUTTON,self.clear,cancel_button)
     	self.Bind(wx.EVT_BUTTON,self.soja,exit_button)
#pane	l.CreateStatusBar()
     	panel.SetSizer(hbsizer) 
     	self.Centre()
     	self.Show(True)
    def clear(self,event=None):
	self.orig_text.SetValue('')
    def format_seq(self,event=None):
	originator=self.orig_text.GetValue()
	comm=re.sub('[ \t\r\n]','',originator)
        self.orig_text.SetValue(comm)
    def rheader(self,event=None):
	originator=self.orig_text.GetValue()
	comm=re.sub('>.*','>',originator)
        self.orig_text.SetValue(comm)
    def soja(self, event=None):
    	self.Close(True)
    def executa(self,event=None):
	recordid=random.randint(20,10055)
	originator=self.orig_text.GetValue()
	os.system('perl /home/obiero/codonopt/codonOpt-test.pl %s' %originator)
	wx.MessageBox('DONE! check the output in you folder', 'CodonOptTable Info')    
app =wx.App()
testgui(None, -1, 'CodonOptTable GUI')
app.MainLoop()

This is used together with the perl script:

#!/bin/perl
use Bio::Tools::CodonOptTable;
$sequence = $ARGV[0];
sub codon {
my ($mysequence)=@_;
print $mysequence;
my $seqobj = Bio::Tools::CodonOptTable->new ( -seq => $mysequence,
                                                -id  => 'GeneFragment-12',
                                                -accession_number => 'Myseq1',
                                                -alphabet => 'dna',
                                                -is_circular => 1,
                                                -genetic_code => 1,
                                   );
#my $seqobj = Bio::Tools::CodonOptTable->new(-file => $mysequence,
#
#                                             -format => 'Fasta',
#                                             -genetic_code => 1,
#                                             );
my $myCodons = $seqobj->rscu_rac_table();
 
if($myCodons)
 
        {   
            for my $each_aa (@$myCodons)
        {
        print "Codon      : ",$each_aa->{'codon'},"\t";
        print "Frequency  : ",$each_aa->{'frequency'},"\t";
        print "AminoAcid  : ",$each_aa->{'aa_name'},"\t";
        print "RSCU Value : ",$each_aa->{'rscu'},"\t"; #Relative Synonymous Codons Uses
        print "RAC Value  : ",$each_aa->{'rac'},"\t"; #Relative Adaptiveness of a Codon
        print "\n";
        }
        }
 
 while ( my ($amino_acid, $codon) = each(%$prefered_codons) ) {
 
print "AminoAcid : $amino_acid \t Codon : $codon\n"; }
$seqobj->generate_graph($myCodons,"/home/obiero/codonopt/myoutput.gif");
}
codon($sequence); 
Note: You have to edit the paths to suite your setup.

Usefull ReGex


Merge sequence lines using sed:

$ grep -v Tp sequence | tr -d "\n" > new_sequence_file
$ grep -o <pattern> 

This will grep only the part of matching line that matching the pattern eg How many occurence of "ATCG" in a sequence?