Você está na página 1de 8

I Semana de Biotecnologia Universidade do Estado do Amazonas

Minicurso: Programando em Bioinformtica - Usando Bioruby e suas principais classes.

BioRuby

Copyright (C) 2001-2003 KATAYAMA Toshiaki <k .at. bioruby.org>


Copyright (C) 2005-2011 Pjotr Prins, Naohisa Goto and others

Introduo
Este um tutorial para usar Bioruby. (Requisitos: Ruby e o pacote Bioruby instalados).
Para verificar se o Ruby est instalado em seu computador e a verso instalada, digite
no prompt de comando:
ruby -v
Voc ir ver algo como:
ruby 1.8.7(2011-06-30 patchlevel 352) [i386-mingw32]
Caso no esteja instalado, use o gerenciador de instalao do Ruby, que voc pode
baixar no website http://rubyinstaller.org/downloads/
Para instalar o Bioruby via RubyGems, basta inserir a linha abaixo no prompt de
comando (Conexo de Internet fundamental):
gem install bio
Caso no seja possvel a instalao devido falta de internet, mas conseguiu baixar
o pacote bioruby (em outro momento) atravs do site http://rubygems.org/gems/bio. Direcione
o prompt de comando at o diretrio do pacote baixado e execute a seguinte linha:

gem install nome_exato_do_arquivo (Ex.: bio-1.4.3.0001)

Testando Bioruby
Exemplo 01
require 'rubygems' #Chamada de biblioteca de pacotes
require 'bio' #Chamada do arquivo contendo as classes bioruby
seq = Bio::Sequence::NA.new("atgcatgcaaaa") #Objeto seq da classe Bio::Sequence::NA
sendo criado com parmetro
puts seq.complement #imprime o complemento do objeto seq
#> "ttttgcatgcat"
puts seq.complement.reverse
#> " tacgtacgtttt"

Trabalhando com sequncias de aminocidos e cidos nucleicos (Classe


Bio::Sequence)
Anote os resultados impressos
O puts imprime o contedo e pula uma linha, o print imprime, mas no pula linha,
j o p chama o mtodo inspect do elemento.

Paulo Adrian Assuno ftpauloadrian@gmail.com / Marta Rodrigues - martabiotec@yahoo.com.br

I Semana de Biotecnologia Universidade do Estado do Amazonas


Minicurso: Programando em Bioinformtica - Usando Bioruby e suas principais classes.

O mtodo inspect muito parecido com o to_s, exceto pelo fato de que a string
retornada tenta mostrar para voc o cdigo em ruby que est construindo o objeto que voc
passou.
/continuao do exemplo 01
seq = Bio::Sequence::NA.new("atgcatgcaaaa") #novo objeto da Classe Bio::Sequence
p seq.complement # imprime a cadeia complementar
p seq.subseq(3,8) # pega subsequncia da posio 3 at 8
p seq.gc_percent #percentual de bases G e C
p seq.composition # Composio da sequncia, nmero de cada base nitrogenada
p seq.translate #Traduo em aa. (Imprime a primeira letra)
p seq.translate(2) # Traduo a partir da 2 base, usando a tabela padro 1.
p seq.translate(1,11) # Traduo a partir da 1 base, usando a tabela 11.
p seq.translate.codes # Traduo em aa (Imprime as trs primeiras letras)
p seq.translate.names #Traduo em aa (Imprime os nomes completos)
p seq.translate.composition #Quantitativo de aa traduzidos
p seq.translate.molecular_weight #Massa molecular unidade u (igual a 1/12 da massa
do istopo carbono-12)
p seq.complement.translate #Traduo do complemento
p seq.codon_usage #Quantidade de cdons traduzidos

DEFINITIONS* = {
1
2
3
4
5
6
9
10
11
12
13
14

=> "Standard (Eukaryote)",


=> "Vertebrate Mitochondrial",
=> "Yeast Mitochondorial",
=> "Mold, Protozoan, Coelenterate Mitochondrial and Mycoplasma/Spiroplasma",
=> "Invertebrate Mitochondrial",
=> "Ciliate Macronuclear and Dasycladacean",
=> "Echinoderm Mitochondrial",
=> "Euplotid Nuclear",
=> "Bacteria",
=> "Alternative Yeast Nuclear",
=> "Ascidian Mitochondrial",
=> "Flatworm Mitochondrial",

Paulo Adrian Assuno ftpauloadrian@gmail.com / Marta Rodrigues - martabiotec@yahoo.com.br

I Semana de Biotecnologia Universidade do Estado do Amazonas


Minicurso: Programando em Bioinformtica - Usando Bioruby e suas principais classes.

15
16
21
22
23

=> "Blepharisma Macronuclear",


=> "Chlorophycean Mitochondrial",
=> "Trematode Mitochondrial",
=> "Scenedesmus obliquus mitochondrial",
=> "Thraustochytrium Mitochondrial",

}
*Definies das tabelas de cdons distintas contidas no arquivo codontable.rb

Smbolos ambguos
Em uma sequncia, a representao Y indica C ou T, R indica A ou G, W indica A ou T, S indica G ou
C, K indica T ou G, M indica A ou C, N indica qualquer base. Neste caso, deve-se converter em
expresso regular.
Exemplo 02:

require 'rubygems'
require 'bio'
#Criao de um objeto da classe Bio::Sequence::NA contendo smbolos ambguos
ambiguous_seq = Bio::Sequence::NA.new("atgcyrwskmbdhvn")
p ambiguous_seq
#Converter a sequncia para um objeto Regexp
p ambiguous_seq.to_re
#Anote o resultado desta linha de comando

Exemplo 03:

require 'rubygems'
require 'bio'
#Exemplo de correspondncia de uma sequncia simples em uma sequncia ambgua
#Criao de um novo objeto da classe Bio::Sequence::NA com parmetro ATY, convertido
em expresso regular
att_or_atc = Bio::Sequence::NA.new("aty").to_re
# A seguir, trs modos de verificao de correspondncia
# Criao de objeto da classe Bio::Sequence:NA com parmetro ATT
teste = Bio::Sequence::NA.new(att)
#Imprime Corresponde se att_or_atc combina com teste
puts "Corresponde" if att_or_atc.match(teste)
#Imprime Corresponde, tambm se teste combina com att_or_atc
puts "Corresponde, tambm" if teste.match(att_or_atc)
#Estrutura de condio: Se teste combina com att_or_atc ento imprime Tambm,
corresponde
if teste =~ att_or_atc
Paulo Adrian Assuno ftpauloadrian@gmail.com / Marta Rodrigues - martabiotec@yahoo.com.br

I Semana de Biotecnologia Universidade do Estado do Amazonas


Minicurso: Programando em Bioinformtica - Usando Bioruby e suas principais classes.

puts "Tambm corresponde"


end

Basic Sequence Manipulation


String para Bio::Sequence object
Exemplo 04:

require 'rubygems'
require 'bio'
# Criao de um objeto da classe Bio::Sequence::NA com parmetro do tipo string
dna = Bio::Sequence::NA.new("satcggtcggctta")
# Criao de um objeto da classe Bio::Sequence::AA com parmetro do tipo string
aa = Bio::Sequence::AA.new("AGFAVENDSA")
# Checar se a sequncia contm caracteres ilegais (diferente de ATCGU)
p dna.illegal_bases # Anote o resultado
# Traduo e Concatenao da sequncia de DNA sequncia de Aminocidos
nova_sequencia = aa + dna.translate
p newseq #Anote o resultado

Bio::Sequence para String


Exemplo 05

require 'rubygems'
require 'bio'
# Criao do objeto dna da classe Bio::Sequence::NA com parmetro ATGC
dna = Bio::Sequence::NA.new("atgc")
p dna
str = dna.to_s
puts str
#Anote o resultado

Transcrever uma sequncia de DNA em uma sequncia de RNA


Exemplo 06

require 'rubygems'
require 'bio'
# Criao de um objeto dna da classe Bio::Sequence::NA
dna = Bio::Sequence::NA.new("atgccgaatcgtaa")
Paulo Adrian Assuno ftpauloadrian@gmail.com / Marta Rodrigues - martabiotec@yahoo.com.br

I Semana de Biotecnologia Universidade do Estado do Amazonas


Minicurso: Programando em Bioinformtica - Usando Bioruby e suas principais classes.

# Converter sequncia de DNA para RNA


rna = dna.rna
p dna
p rna

# Imprime sequncia de DNA


#Imprime sequncia de RNA. Anote o resultado.

p rna.dna #Converte para DNA novamente e Imprime. Anote o resultado.

Editando caracteres e strings nas sequncias


Exemplo 07

require 'rubygems'
require 'bio'
# Criao de um objeto seq da classe Bio::Sequence::NA
seq = Bio::Sequence::NA.new("atggct")
# Adiciona "cc" ao final da sequncia
seq += Bio::Sequence::NA.new("cc")
p seq #Imprime a nova sequncia
# Adiciona tt no incio da sequncia
seq = Bio::Sequence::NA.new("tt") + seq
p seq # Imprime a nova sequncia
# Adiciona aca na posio 4
seq[3,0] = Bio::Sequence::NA.new("aca")
p seq # Imprime a nova sequncia
# Sobrescrever a partir da posio 2 at 4, com ggg
seq[1,3] = Bio::Sequence::NA.new("ggg")
p seq # Imprime a nova sequncia
# Deletar as 5 bases iniciais
seq[0,5] = ""
p seq # Imprime a nova sequncia
#Substituir nas posies 2 e 3 com aa e inserir tt
seq[1,2] = Bio::Sequence::NA.new("aa") + Bio::Sequence::NA.new("tt")
p seq # Imprime a nova sequncia

Escrever sequencias em format FASTA


Paulo Adrian Assuno ftpauloadrian@gmail.com / Marta Rodrigues - martabiotec@yahoo.com.br

I Semana de Biotecnologia Universidade do Estado do Amazonas


Minicurso: Programando em Bioinformtica - Usando Bioruby e suas principais classes.

Exemplo 08

require 'rubygems'
require 'bio'
# Criao do objeto seq1 da classe Bio::Sequence::NA com 100 bases.
seq1 = Bio::Sequence::NA.new("aatgacccgt" * 10)
# Nomeia esta sequncia como testseq e imprime em Formato FASTA
puts seq1.to_fasta("testseq", 60) # Limita a impresso de 60 bases por linha

Outro modo para escrever em format FASTA


A classe Bio:FastaFormat trata cada sequncia de um arquivo FASTA, assim:

>id e/ou comentrios


<== linha definio
atgcatgcatgcatgcatgcatgcatgcatgcatgc
<== linhas da sequncia
atgcatgcatgcatgcatgcatgcatgcatgcatgc

Exemplo 09
require 'rubygems'
require 'bio'
fasta_string = ">gi|398365175|ref|NP_009718.3| Cdc28p [Saccharomyces cerevisiae
S288c]
gagtttgatcctggctcaggacgaacgctggcggcgtgcttaacacatgcaagtcgagcggtaaggccct
#Criao de novo objeto f da classe Bio::FastaFormat com fasta_string como parmetro
f = Bio::FastaFormat.new(fasta_string)
puts f.entry #Imprime toda a sequncia incluindo a linha de definio
puts f.entry_id #Imprime somente o identificador
puts f.definition #Imprime somente a linha de definio
puts f.seq #Imprime somente a sequncia de bases
puts f.length #Imprime o tamanho da sequncia, quantidade total de bases
puts f.aaseq #Converte para classe Bio:Sequence::aa
puts f.aaseq.composition #O mtodo composition no est presente na classe
FastaFormat, por isso a converso para outra classe. Imprime a quantidade de cada base.

Ler arquivo FASTA


Exemplo 10

require 'rubygems'
require 'bio'
# A classe Bio::FlatFile utilizada para ler arquivo contendo dados biolgicos, detectando
automaticamente o formato de dados.
#Cada sequncia do arquivo FASTA ser tratada pelo objeto seq, a linha de comando a
seguir, com o bloco DO significa A cada sequncia do arquivo FAA
Paulo Adrian Assuno ftpauloadrian@gmail.com / Marta Rodrigues - martabiotec@yahoo.com.br

I Semana de Biotecnologia Universidade do Estado do Amazonas


Minicurso: Programando em Bioinformtica - Usando Bioruby e suas principais classes.

Bio::FlatFile.open(File.open(nome_arquivo.fasta)).each_entry do |seq|
#Voc pode imprimir cada mtodo da seq como no exemplo anterior. Ex:
puts seq.definition #Imprime somente a linha de definio
puts seq.seq #Imprime somente a sequncia de bases
puts ************ #Para separar uma sequncia da outra

end # necessrio, para finalizar o bloco DO

Distribuies das bases (sendo 100% = 1.0)


Exemplo 11

require 'rubygems'
require 'bio'
def distr(seq) #Define um mtodo distr com parmetro de entrada seq
x=seq.length.to_f # Varivel recebe o tamanho da seq convertido em FLOAT, ou seja,
fracionrio.
dist={} #Criao de um vetor (array) que pode armazenar diferentes valores
seq.composition.each do |base, total_cada_base| #A cada composio da sequncia
FAA, trabalhando nas variveis criadas numero_base e total_cada_base
dist[numero_base]=total_cada_base/x.to_f #Automaticamente, base se torna um
inteiro, recebendo o valor
end #Finaliza bloco DO
return dist # Retorna para o objeto com o valor do array
end #Finaliza o mtodo
#Criao de um objeto sequencia_teste da classe Bio::Sequence::NA com parmetro
sequencia_teste = Bio::Sequence::NA.new("atgcatgcaaaa")
p sequencia_teste #Imprime o valor do objeto criado
p sequencia_teste.composition # Imprime a quantidade de cada base existente na
sequencia
p distr(sequencia_teste) #Imprime o return dist do mtodo distr, que utilizar o valor de
sequencia_teste como parmetro

Paulo Adrian Assuno ftpauloadrian@gmail.com / Marta Rodrigues - martabiotec@yahoo.com.br

I Semana de Biotecnologia Universidade do Estado do Amazonas


Minicurso: Programando em Bioinformtica - Usando Bioruby e suas principais classes.

Desafio para SEXTA-FEIRA (29/11/2013)

Entre no site http://www.ncbi.nlm.nih.gov

Escolha Nucleotide e pesquise por BT006808.1, resultando em Homo


sapiens insulin mRNA, complete cds

Clique em FASTA, logo abaixo do ttulo.

Voc pode realizar o download em arquivo FASTA (Clicando em Send Choose


Destination File Create File), copie este arquivo para o mesmo diretrio do seu
arquivo.rb.

Faa um algoritmo que:

Leia este arquivo FASTA baixado.

Imprima o a linha de definio desta sequncia,


o a sequncia e traduo,
o a quantidade total de bases (tamanho),
o a quantidade de A, C, G, T,
o a massa molecular desta sequncia,
o a cadeia reverso complemento e traduo,
o quantitativo de aminocidos traduzidos
o uma mensagem com seu nome, sobrenome e e-mail.

Paulo Adrian Assuno ftpauloadrian@gmail.com / Marta Rodrigues - martabiotec@yahoo.com.br