SlideShare uma empresa Scribd logo
1 de 118
VELVET ASSEMBLER
Marcos Castro
Grupo de Bioinformática - Unifesp
Velvet assembler
 Velvet é um assembler para short reads.
 Criador: Daniel Zerbino.
 http://www.ebi.ac.uk/~zerbino/velvet/
 Uma “short interview” com Zerbino:
 https://www.biostars.org/p/117134/
 Velvet foi feito em linguagem C e é gratuito (GPL).
 Há rumores que foi feito utilizando o editor Vim!
2
Motivação
 Apesar do sequenciamento do genoma humano, a
maioria das espécies ainda não foram sequenciadas!
 A montagem de shotgun reads é um desafio no
sequenciamento do genoma de novo.
 De novo: sem genoma de referência.
 Objetivo da montagem:
 Reunir os fragmentos extraídos (shotgun reads) para
formar um conjunto de sequências contíguas (contigs).
3
Tecnologias NGS
 Novos métodos de sequenciamento têm surgido.
 Exemplo: Illumina, SOLiD.
 Tecnologias NGS produzem reads bem menores do que o
tradicional método de Sanger.
 Sanger: em torno de 400-500 bp
 Illumina: 50 bp
4
Tecnologias NGS
 Geração de uma grande quantidade de dados.
 Fragmentos produzidos muito pequenos (short reads).
 Vantagens:
 Rapidez, custo.
 Requer menos amostra de DNA.
 Desvantagem:
 Short reads com altas taxas de erro.
5
Tecnologias NGS
6
Assembly
 Após a produção dos reads, é preciso montá-los.
 Existem várias ferramentas de montagem (assemblers).
 Várias dessas ferramentas utilizam a abordagem OLC
(overlap-layout-consensus).
7
Assembly
 Na OLC, alinham-se os fragmentos dois a dois para
encontrar quais pares de reads possuem uma
sobreposição (overlap) consistente.
 Analogia: procurar por peças de um quebra-cabeça que
se encaixam e que possuem cores correspondentes.
 Dificuldade: distinguir sobreposições inexatas.
 Erros de sequenciamento.
 Regiões de similaridade (highly conserved repeats).
8
Assembly
 O assembler detecta clusters de reads, formando os
contigs.
 Analogia: partes da imagem colocadas juntas em um
quebra-cabeça.
 Partes ambíguas:
9
Assembly
 O assembler tenta ordenar e orientar os contigs.
 A informação paired-end pode ser usada pelo assembler
para estimar a distância que separam os contigs.
 Conjuntos de contigs que podem ser colocados na
mesma região são chamados de supercontigs (scaffolds).
 Ao final da montagem, um conjunto de scaffolds estarão
disponíveis.
10
Assembly
 É desejável remover a maior quantidade de gaps
possível.
 Montagens de cromossomos inteiros.
 Pode ser muito custoso.
 Gaps podem ocorrer devido:
 Falta de cobertura.
 Complexidade da sequência.
11
Grafos De Bruijn
12
Grafos De Bruijn
 Em grafos De Bruijn, os reads são quebrados em
sequências menores (substrings) chamadas k-mers.
 Esse tipo de grafo foi proposto originalmente para
manipular melhor a montagem de regiões repetitivas.
13
Problema?
Grafos De Bruijn
 k-mer é uma substring de tamanho k.
 Exemplo de string: GGCGATTCATCG
 Se k = 4, temos os 4-mers: GGCG, GCGA, CGAT ...
 Se k = 3, temos os 3-mers: GGC, GCG, CGA ...
 Como gerar todos os k-mers em Python:
 [s[i:i+k] for i in range(len(s)) if len(s[i:i+k]) == k]
 “s” é a string e “k” é o tamanho da substring.
14
Grafos De Bruijn
15
Fácil, nenhum dos 7-mers
aparece mais de uma vez!!
Grafos De Bruijn
16
O grafo possui um nó a menos
do que o anterior. Por que?
Grafos De Bruijn
 Algoritmo para construção dos grafos De Bruijn:
 1) Quebra os reads em k-mers.
 2) Conecta os k-mers baseados na regra dos “k – 1”
nucleotídeos comuns (sufixo/prefixo).
17
Grafos De Bruijn
 Os exemplos anteriores não consideraram sequências de
ambas as fitas. Cadeia dupla deve ser considerada:
18
cadeia dupla
complemento
Grafos De Bruijn – Simplificação
 Exemplo:
19
Grafos De Bruijn – Simplificação
 Removendo as bolhas...
20
Grafos De Bruijn – Simplificação
 Removendo as pontas...
21
Grafos De Bruijn – Simplificação
 Grafo simplificado:
22
Tamanho do k-mer
 Um k-mer menor:
 Aumenta possibilidade de conectividade (sensibilidade).
 Mais regiões ambíguas (menor especificidade).
 Um k-mer maior:
 Aumenta a especificidade.
 Diminui a conectividade.
23
Tamanho do k-mer
 Prefere-se pegar valores de “k” ímpares.
 Exemplo para “k” par: ATATATATATAT
 Complementar reverso: ATATATATATAT
 Exemplo para “k” ímpar: ATATATATATA
 Complementar reverso: TATATATATAT
 Conclusão: com “k” par, alguns k-mers podem ser
complementos reversos de si mesmos! Problema?
24
palíndromos
Tamanho do k-mer
 K-mers sendo complemento reverso de si mesmos geram
ambiguidade no grafo tornando a sua resolução mais
difícil.
 Como evitar os k-mers palíndromos?
 Utilizando um “k” ímpar!
 Velvet requer um “k” ímpar.
 Caso você escolha um “k” par, o Velvet decrementa!
25
Tamanho do k-mer
 Com k-mers mais longos, fica mais fácil de converter o
grafo de Bruijn em uma única sequência.
 Porém, “k” maiores requerem mais memória para
armazenar e processar o grafo.
 Se possuir RAM “ilimitada”, o tamanho do k-mer pode
ser limitado ao tamanho do short read.
26
Grafos de Bruijn – Regiões repetitivas
 Como chegar, a partir do grafo, à sequência original?
 A repetição originou um loop no grafo.
 Genoma -> Grafo é único e Grafo -> Genoma ?
27
Grafos de Bruijn – Regiões repetitivas
 Reflexão:
 Se cada k-mer tiver vizinhos únicos, seremos capazes de
construir a sequência?
28
Grafos de Bruijn – Regiões repetitivas
29
Muito fácil!!
Grafos de Bruijn – Regiões repetitivas
 E agora?
30
4 caminhos!!
Reads compartilhando k-mers
 Considere os reads:
 R1: ACTGA
 R2: TCTGG
 R3: ACTGC
 Todos os 3-mers: {ACT, CTG, TGA, TCT, TGG, TGC}
31
Reads compartilhando k-mers
 Considere os reads:
 R1: ACTGA
 R2: TCTGG
 R3: ACTGC
32
CTG
TGA
TGG
ACT
TCT
TGC
6 caminhos e apenas 3 reads!
Quais caminhos são reais?
Reads compartilhando k-mers
 Considere os mesmos reads, mas com k = 4:
 R1: ACTGA
 R2: TCTGG
 R3: ACTGC
 Todos os 4-mers: {ACTG, CTGA, TCTG, CTGG, CTGC}
33
Reads compartilhando k-mers
 Considere os mesmos reads agora com k = 4:
 R1: ACTGA
 R2: TCTGG
 R3: ACTGC
34
ACTG
CTGG
CTGA
CTGC
TCTG
Aumentou-se o tamanho
do k, resolveu? Não!
Contigs mais curtos?
 Uma das características dos assemblers que utilizam
DBG (De Bruijn Graphs) é o aparecimento de contigs
mais curtos do que o comprimento do read.
 Por que isso ocorre?
35
Velvet – De Bruijn graphs
 Velvet utiliza a abordagem de grafos de Bruijn.
 O nó representa uma série de sobreposições k-mers.
36
k-mers adjacentes
nó
Velvet – De Bruijn graphs
 A sequência de um nó (ACCA) é formada pelos últimos
nucleotídeos (em vermelho) de cada k-mer.
 K-mers se sobrepõem em “k – 1” nucleotídeos.
37
Velvet – De Bruijn graphs
 Cada nó N possui o seu nó gêmeo Ñ.
 Um bloco é a união de um nó N com o seu gêmeo Ñ.
 Sobreposições entre reads de fitas opostas são levadas
em conta.
38
nó N
nó gêmeo Ñ
bloco
Velvet – De Bruijn graphs
 O nó gêmeo representa o reverso complementar.
39
nó N
nó gêmeo Ñ
bloco
CAGTC é o reverso complementar de GACTG
Velvet – De Bruijn graphs
 O último k-mer de um nó de origem de um arco
sobrepõem com o primeiro de seu nó de destino.
40
nó de origem
nó destino
se sobrepõem
Velvet – De Bruijn graphs
41
cada retângulo é um nó
cada nó representa uma série
de sobreposições k-mers
se um arco sai de A
e chega em N, então
existe um arco que sai
de Ñ e chega em Ã
bloco
Velvet – De Bruijn graphs
 Simplificação:
 Se o nó A tem somente um arco de saída para o nó B e se
o nó B tem somente um arco de entrada, faz-se o merge.
42
sem perda de informação
Velvet - Propriedades
 Duas sequências sobrepostas são representadas por dois
caminhos que se sobrepõem.
 Exemplo:
 Sequência S1: ACTG (formada pelo caminho C1)
 Sequência S2: CTGA (formada pelo caminho C2)
 C1 e C2 se sobrepõem.
 C1 ∩ C2 = sobreposição de S1 com S2 = CTG
43
Velvet - Propriedades
 Considere as strings:
 S2 = ACTG
 S1 = CTG
 Se S1 é substring de S2, então o caminho de S1 é um
sub-caminho de S2.
 Útil para procurar por reads que se sobrepõem através
de repetições.
44
Velvet - Propriedades
 O grafo de Bruijn de uma sequência pode ser
considerado como uma simplificação da affix tree dessa
sequência.
 Prefixo: é um afixo que se adiciona à esquerda.
 Exemplo: semicírculo
 Sufixo: é um afixo que se adiciona à direita.
 Exemplo: loteria
 Afixos: prefixos e sufixos.
45
Suffix Tree
 Construindo árvore de sufixo da sequência ACTGA.
 Adicionando o “A”:
46
String: A$
Suffix Tree
 Adicionando o “C” de ACTGA:
47
String: AC$
Suffix Tree
 Adicionando o “T” de ACTGA:
48String: ACT$
Suffix Tree
 Adicionando o “G” de ACTGA:
49
String: ACTG$
Suffix Tree
 Adicionando o “A”:
50
http://visualgo.net/suffixtree.html
String: ACTGA$
Suffix Tree
 Aplicação da Suffix Tree:
 Maior substring comum (longest common substring)
 Hey, cuidado, não é “longest common subsequence”.
 Maior substring comum: contígua.
 Maior subsequência comum: não contígua.
 Suffix Tree é muito utilizada para manipular uma
enorme quantidade de dados (problemas biológicos).
51
Suffix Tree
 Uma das formas eficientes de construir uma suffix tree
é utilizando o algoritmo de Ukkonen.
 Complexidade: O(n logn) em geral.
 Dificuldade: implementação.
 Implementação:
 http://www.geeksforgeeks.org/ukkonens-suffix-tree-
construction-part-6/
52
Suffix Tree – Links úteis
 http://www.geeksforgeeks.org/ukkonens-suffix-tree-
construction-part-1/ (possui parte 1, 2, 3 até 6)
 https://www.youtube.com/watch?v=aPRqocoBsFQ
 https://www.youtube.com/watch?v=UrmjCSM7wDw
53
Suffix Tree
 Para um conjunto de strings/palavras/reads:
 Generalized suffix tree.
 http://www.geeksforgeeks.org/generalized-suffix-tree-1/
54
Velvet - Implementação
 Código no GitHub:
 https://github.com/dzerbino/velvet
 Na pasta “src” encontram-se os arquivos de código.
55
Velvet - Implementação
 Estrutura do grafo: (arquivo graph.c)
56
Velvet - Implementação
 Estrutura do grafo:
57
contador de sequências
Velvet - Implementação
 Retorna o número de sequências utilizadas para
construir o grafo:
58
Velvet - Implementação
 Estrutura do grafo:
59
contador de nós
Velvet - Implementação
 Retorna o número de nós do grafo:
60
Velvet - Implementação
 Estrutura do grafo:
61
tamanho do k-mer
Velvet - Implementação
62
se quiser alterar, basta recompilar
com um tamanho maior
Velvet - Implementação
 Estrutura do grafo:
63
O grafo armazena ponteiros
para todos os nós.
Velvet - Implementação
 Exemplo para destruir um nó:
64
Velvet - Implementação
 Estrutura do grafo:
65
array de arrays de marcadores
short reads agrupados por nó
Velvet - Implementação
 Estrutura do grafo:
66
tamanhos dos nodeReads
Velvet - Implementação
 Estrutura do grafo:
67
ponteiros para gap markers
??
Velvet - Implementação
 Estrutura do nó:
68
identificação do nó
Velvet - Implementação
 Estrutura do nó:
69
cada nó tem um ponteiro
para o seu nó gêmeo, cujo ID
é o ID do nó multiplicado por -1
Velvet - Implementação
 Estrutura do nó:
70
corresponde ao nucleotídeos finais
dos k-mers representados por esse nó
se s(n) é a sequência do nó,
o tamanho do nó é length(s(n))
Velvet - Implementação
71
Velvet - Implementação
 Cada nó está ligado a uma lista duplamente encadeada
de arcos de saída.
 Por causa da simetria do grafo, todos os arcos de
entrada têm correspondência com um arco de saída do
nó gêmeo.
 Por isso, somente ponteiros para arcos de saída são
armazenados (economia de memória).
72
Velvet - Implementação
 Estrutura do nó:
73
número de arcos da lista
duplamente encadeada
Velvet - Implementação
 Reads estão associadas aos nós de duas formas:
 Long reads são representadas por objetos PassageMarker
em uma lista ligada cujo primeiro elemento é
armazenado dentro do nó.
 Short reads são representadas por shortReadMarker que
são armazenados em um array ligado ao grafo.
74
Velvet - Implementação
 Estrutura do nó:
75
representam long reads
Velvet - Implementação
 Estrutura do nó:
76
variáveis booleanas que permitem
acompanhar o progresso dos algoritmos
Velvet - Implementação
 Estrutura do arco:
77
arcos são mais simples,
pois bastante informação é
armazenada nos nós
Velvet - Implementação
 Estrutura do arco:
78
cada arco possui seu nó de
destino e sua multiplicidade
Velvet - Implementação
 Estrutura do arco:
79
quantidade de reads que
passam pelo arco ou pelo
seu reverso complementar
Velvet - Implementação
 Estrutura do arco:
80
nó de destino
Velvet - Implementação
 Estrutura do arco:
81
o arco gêmeo possui a
mesma multiplicidade
Velvet - Implementação
 Estrutura do arco:
82
ponteiros da doubly linked list de
arcos que saem do nó de origem
Velvet - Implementação
 Estrutura do arco:
83
arcos são armazenados em
linked lists que estão ligadas
às posições de uma hash table
Velvet - Implementação
 Estrutura do grafo sobreposto:
84
nó
as linhas tracejadas representam
os ponteiros conectando todos
os elementos (nós e arcos)
cada nó está conectado ao seu nó gêmeo e
à doubly linked list de arcos de saída
Velvet - Implementação
 Estrutura PassageMarker:
85
mapeamento de uma substring
da sequência identificada pelo
sequenceID para o nó
Velvet - Implementação
 Estrutura PassageMarker:
86
armazena a coordenada de início
do alinhamento dentro do read e
o término que separa o alinhamento
da extremidade 3’ do nó
Velvet - Implementação
 Estrutura PassageMarker:
87
dentro do nó, passage markers são
armazenados como uma doubly linked list
Velvet - Implementação
 Estrutura PassageMarker:
88
dentro da sequência, passage markers
são armazenados como uma linked list
Velvet - Implementação
 Estrutura PassageMarker:
89
cada passage marker está
ligado a uma estrutura twin
marker que corresponde ao
reverso complementar da
sequência, mapeado para o
nó gêmeo
visitou o passage marker?
Velvet - Implementação
 Passage markers e suas conexões no grafo:
90
passage markers
nós
linhas tracejadas
são ponteiros
Velvet - Implementação
 Estrutura do ShortReadMarker:
 Numerosos, portanto, estruturas “leves”, associado a
um nó.
91
Velvet - Implementação
 Estrutura do ShortReadMarker:
92
ID da sequência
Velvet - Implementação
 Estrutura do ShortReadMarker:
93
posição do marcador
no nó (varia bastante)
Velvet - Implementação
 Estrutura do ShortReadMarker:
94
deslocamento do marcador
desde o início do read,
normalmente é 0
essa estrutura não é duplicada no nó gêmeo
(economia de memória)
Indexação de Read
 O tamanho do k-mer e a quantidade de reads vêm
crescendo. Por isso, a implementação de hash table
através de arrays de slots (buckets) foi substitituída por
árvores binárias de busca.
95
Indexação de Read
 Utilização de splay trees.
 Splay: trazer um elemento X para a raiz da árvore
fazendo rotações.
 Objetivo: minimizar o número de acessos para achar a
chave requerida.
 Eficiência através da frequência com que cada nó é
acessado, mantendo estes nós na parte superior da
árvore.
96
Indexação de Read
 Rotações similares à AVL:
97
se não existe o elemento, então faz splay do sucessor
Indexação de Read
 Por que utilizar splay trees?
 Reduz a complexidade de implementação.
 Embora seja menos eficiente teoricamente, são mais
fáceis de implementar e é na prática tão eficiente quanto
outras formas de binary search trees.
 Embora tenha-se um maior custo de memória, é robusto
para um grande conjunto de dados.
98
Indexação de Read
 É feito o hash dos reads de acordo com um tamanho
pré-definido do k-mer.
 A variável “k” é limitada ao tamanho dos reads.
 K-mers menores aumentam a conectividade do grafo.
 Trade-off sensibilidade e especificidade.
99
Exemplo
 A contagem dos k-mers pode ser usada para estimar
quantos reads passam por um determinado caminho.
100
Velvet – Bolhas (bubbles)
101
 Dois caminhos são considerados redundantes se eles
iniciam e terminam no mesmo nó formando bolhas e
contém sequências similares.
 O que causam caminhos redundantes?
 Erros
 Variantes biológicas tais como SNPs
Algoritmo Tour Bus
102
 O Tour Bus algorithm detectar as bolhas.
 O critério para decidir sobre a simplificação pode ser
complexo.
 Um deles: cobertura.
Algoritmo Tour Bus
103
 O algoritmo é baseado no Dijkstra (busca em largura).
 O algoritmo inicia de um nó qualquer e percorre o grafo
visitando os nós em ordem crescente de distância do nó
inicial.
 Qual é essa distância?
Algoritmo Tour Bus
104
 Qual é essa distância?
 A distância entre nós consecutivos A e B é o tamanho de
s(B) dividido pelo número de reads conectando A à B.
Algoritmo Tour Bus
 Se o processo encontrar um nó que já foi visitado, é
realizado um backtrack para descobrir o antecessor
comum dos nós.
 A partir dos caminhos que foram refeitos, é feito um
merge dos dois caminhos.
 O nó que atingiu o nó final primeiro (faster path), é
usado como um consensus por causa da cobertura mais
elevada.
105
Algoritmo Tour Bus
106
 Considere o grafo:
 As setas azuis indicam as travessias no grafo.
Algoritmo Tour Bus
107
 O Tour Bus inicia de um nó com mais de uma aresta de
saída. O “A” é um nó que respeita esse critério.
Algoritmo Tour Bus
108
 O Tour Bus inicia de um nó com mais de uma aresta de
saída. O “A” é um nó que respeita esse critério.
vamos iniciar daqui
O objetivo é procurar as bolhas através de uma BFS
Algoritmo Tour Bus
109
 Através dos caminhos B’C’ e BC, o nó D é visitado mais
de uma vez.
nó visitado mais de 1x
Algoritmo Tour Bus
110
 O nó A é o antecessor comum:
antecessor comum
nó visitado mais de 1x
Algoritmo Tour Bus
111
 Os nucleotídeos do path B’C’ e BC são extraídos,
alinhados e comparados. Se os caminhos são similares,
faz-se um merge.
Algoritmo Tour Bus
112
 A busca continua, os paths C’’D’ e CD são comparados,
CD e C’’D’ são julgados similares e é feito um merge do
caminho mais longo com o menor.
Algoritmo Tour Bus
 Resumindo:
 Detecta caminhos redundantes. (Dijkstra-BFS)
 Pode-se comparar esses caminhos usando métodos de
programação dinâmica.
 Se forem similares, então faz-se um merge.
113
Algoritmo Tour Bus
 Bolhas podem está dentro de outras bolhas que estão
dentro de outras bolhas...
 Como seria o problema de buscar todas as bolhas para
dados reais?
 O problema pode torna-se intratável.
 Pode-se limitar a pesquisa a um limiar threshold.
114
Continua...
115
Dúvidas?
mcastrosouza@live.com
116
Referências
 Zerbino’s original paper:
 http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2336801/
 Velvet Manual:
 http://www.ebi.ac.uk/~zerbino/velvet/Manual.pdf
 De Bruijn Graphs Tutorial:
 http://www.homolog.us/Tutorials/index.php?p=1.1&s=1
117
Referências
 Suffix trees, Affix trees and some of their applications
 http://www.techfak.uni-
bielefeld.de/~stoye/dropbox/20060517birkenfeld.pdf
 Suffix trees, Affix trees and some of their applications
 http://www.techfak.uni-
bielefeld.de/~stoye/dropbox/20060517birkenfeld.pdf
118

Mais conteúdo relacionado

Mais procurados

01.13.09: Chronic Myeloid Leukemia and other Myeloproliferative Neoplasms (MPNs)
01.13.09: Chronic Myeloid Leukemia and other Myeloproliferative Neoplasms (MPNs)01.13.09: Chronic Myeloid Leukemia and other Myeloproliferative Neoplasms (MPNs)
01.13.09: Chronic Myeloid Leukemia and other Myeloproliferative Neoplasms (MPNs)Open.Michigan
 
CDHA benh ly gan lan toa
CDHA benh ly gan lan toaCDHA benh ly gan lan toa
CDHA benh ly gan lan toaseadawn02
 
Decision Tree and Bayesian Classification
Decision Tree and Bayesian ClassificationDecision Tree and Bayesian Classification
Decision Tree and Bayesian ClassificationKomal Kotak
 

Mais procurados (7)

Lenguajes ensambladores
Lenguajes ensambladoresLenguajes ensambladores
Lenguajes ensambladores
 
Gap pcr
Gap pcrGap pcr
Gap pcr
 
histology of digestive system (1)
histology of digestive system  (1)histology of digestive system  (1)
histology of digestive system (1)
 
01.13.09: Chronic Myeloid Leukemia and other Myeloproliferative Neoplasms (MPNs)
01.13.09: Chronic Myeloid Leukemia and other Myeloproliferative Neoplasms (MPNs)01.13.09: Chronic Myeloid Leukemia and other Myeloproliferative Neoplasms (MPNs)
01.13.09: Chronic Myeloid Leukemia and other Myeloproliferative Neoplasms (MPNs)
 
Nervous tissue i
Nervous tissue iNervous tissue i
Nervous tissue i
 
CDHA benh ly gan lan toa
CDHA benh ly gan lan toaCDHA benh ly gan lan toa
CDHA benh ly gan lan toa
 
Decision Tree and Bayesian Classification
Decision Tree and Bayesian ClassificationDecision Tree and Bayesian Classification
Decision Tree and Bayesian Classification
 

Destaque

Computação com DNA - Modelo baseado em Stickers
Computação com DNA - Modelo baseado em StickersComputação com DNA - Modelo baseado em Stickers
Computação com DNA - Modelo baseado em StickersMarcos Castro
 
Apresentação Python e Games - Python Brasil 11 - 2015
Apresentação Python e Games - Python Brasil 11 - 2015Apresentação Python e Games - Python Brasil 11 - 2015
Apresentação Python e Games - Python Brasil 11 - 2015Julio Cesar Eiras Melanda
 
Grafos De Bruijn para identificação de variações genéticas usando GBS
Grafos De Bruijn para identificação de variações genéticas usando GBSGrafos De Bruijn para identificação de variações genéticas usando GBS
Grafos De Bruijn para identificação de variações genéticas usando GBSMarcos Castro
 
Bioinformática com Rosalind utilizando Python
Bioinformática com Rosalind utilizando PythonBioinformática com Rosalind utilizando Python
Bioinformática com Rosalind utilizando PythonMarcos Castro
 
qt-project.org and Qt 5
qt-project.org and Qt 5qt-project.org and Qt 5
qt-project.org and Qt 5thiagomacieira
 
Aprendizagem Supervisionada I
Aprendizagem Supervisionada IAprendizagem Supervisionada I
Aprendizagem Supervisionada ILuís Nunes
 
Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)Marcos Castro
 
Algoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMPAlgoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMPMarcos Castro
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de ProgramaçãoMarcos Castro
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Marcos Castro
 
Árvores de Decisão
Árvores de DecisãoÁrvores de Decisão
Árvores de DecisãoMarcos Castro
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais ArtificiaisMarcos Castro
 
Caminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de DijkstraCaminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de DijkstraMarcos Castro
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STLMarcos Castro
 
Desenvolvendo Aplicações Android com Qt
Desenvolvendo Aplicações Android com QtDesenvolvendo Aplicações Android com Qt
Desenvolvendo Aplicações Android com QtSandro Andrade
 
Introdução à Programação C++ com Qt 4
Introdução à Programação C++ com Qt 4Introdução à Programação C++ com Qt 4
Introdução à Programação C++ com Qt 4Antonio Menezes
 
Introdução à Biologia Molecular
Introdução à Biologia MolecularIntrodução à Biologia Molecular
Introdução à Biologia MolecularMarcos Castro
 

Destaque (20)

Computação com DNA - Modelo baseado em Stickers
Computação com DNA - Modelo baseado em StickersComputação com DNA - Modelo baseado em Stickers
Computação com DNA - Modelo baseado em Stickers
 
Apresentação Python e Games - Python Brasil 11 - 2015
Apresentação Python e Games - Python Brasil 11 - 2015Apresentação Python e Games - Python Brasil 11 - 2015
Apresentação Python e Games - Python Brasil 11 - 2015
 
Grafos De Bruijn para identificação de variações genéticas usando GBS
Grafos De Bruijn para identificação de variações genéticas usando GBSGrafos De Bruijn para identificação de variações genéticas usando GBS
Grafos De Bruijn para identificação de variações genéticas usando GBS
 
Bioinformática com Rosalind utilizando Python
Bioinformática com Rosalind utilizando PythonBioinformática com Rosalind utilizando Python
Bioinformática com Rosalind utilizando Python
 
qt-project.org and Qt 5
qt-project.org and Qt 5qt-project.org and Qt 5
qt-project.org and Qt 5
 
Aprendizagem Supervisionada I
Aprendizagem Supervisionada IAprendizagem Supervisionada I
Aprendizagem Supervisionada I
 
Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)
 
Algoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMPAlgoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMP
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de Programação
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)
 
IDE Falcon C++
IDE Falcon C++IDE Falcon C++
IDE Falcon C++
 
Árvores de Decisão
Árvores de DecisãoÁrvores de Decisão
Árvores de Decisão
 
Qt Apresentação
Qt ApresentaçãoQt Apresentação
Qt Apresentação
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais Artificiais
 
Caminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de DijkstraCaminhos Mínimos - Algoritmo de Dijkstra
Caminhos Mínimos - Algoritmo de Dijkstra
 
Apostila ferramentas QT
Apostila ferramentas QTApostila ferramentas QT
Apostila ferramentas QT
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
 
Desenvolvendo Aplicações Android com Qt
Desenvolvendo Aplicações Android com QtDesenvolvendo Aplicações Android com Qt
Desenvolvendo Aplicações Android com Qt
 
Introdução à Programação C++ com Qt 4
Introdução à Programação C++ com Qt 4Introdução à Programação C++ com Qt 4
Introdução à Programação C++ com Qt 4
 
Introdução à Biologia Molecular
Introdução à Biologia MolecularIntrodução à Biologia Molecular
Introdução à Biologia Molecular
 

Semelhante a Velvet assembler

Teoria de Grafos.ppt.pptx para estudar MACS
Teoria de Grafos.ppt.pptx para estudar MACSTeoria de Grafos.ppt.pptx para estudar MACS
Teoria de Grafos.ppt.pptx para estudar MACSsandra soares
 
Aula 3 mapa de veitch-karnaugh.
Aula 3  mapa de veitch-karnaugh.Aula 3  mapa de veitch-karnaugh.
Aula 3 mapa de veitch-karnaugh.Rone Sousa
 
Aula 3. Electr. Digit..pptx para aprender como funciona os códigos
Aula 3. Electr. Digit..pptx para aprender  como funciona os códigosAula 3. Electr. Digit..pptx para aprender  como funciona os códigos
Aula 3. Electr. Digit..pptx para aprender como funciona os códigosDrickHlio
 
Manual solucoes redes_tanenbaum
Manual solucoes redes_tanenbaumManual solucoes redes_tanenbaum
Manual solucoes redes_tanenbaumredesinforma
 
Aplicacao da Formula Luderiana Racional para Raiz Cubica
Aplicacao da Formula Luderiana Racional para Raiz CubicaAplicacao da Formula Luderiana Racional para Raiz Cubica
Aplicacao da Formula Luderiana Racional para Raiz Cubicaludenir
 
Análise de Algoritmos - Mais problemas NP-Completos
Análise de Algoritmos - Mais problemas NP-CompletosAnálise de Algoritmos - Mais problemas NP-Completos
Análise de Algoritmos - Mais problemas NP-CompletosDelacyr Ferreira
 
Intro tecelagem pg
Intro tecelagem pgIntro tecelagem pg
Intro tecelagem pgfelins
 
Análise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPAnálise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPDelacyr Ferreira
 
Aula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvidoAula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvidoEduardo de Lucena Falcão
 
Formula luderiana racional para raiz cubica
Formula luderiana racional para raiz cubicaFormula luderiana racional para raiz cubica
Formula luderiana racional para raiz cubicaludenir
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoDelacyr Ferreira
 
Curso de Shell Script 09/11
Curso de Shell Script 09/11Curso de Shell Script 09/11
Curso de Shell Script 09/11Rodrigo Silva
 
Com red2011q1mirisola grafosaleatoriossmallworld
Com red2011q1mirisola grafosaleatoriossmallworldCom red2011q1mirisola grafosaleatoriossmallworld
Com red2011q1mirisola grafosaleatoriossmallworldGabriel Teodoro
 
Formula luderiana racional para extracao de raiz quadrada (completo)
Formula luderiana racional para extracao de raiz quadrada (completo)Formula luderiana racional para extracao de raiz quadrada (completo)
Formula luderiana racional para extracao de raiz quadrada (completo)ludenir
 

Semelhante a Velvet assembler (20)

Grafos
GrafosGrafos
Grafos
 
Fluxo a Custo Mínimo
Fluxo a Custo MínimoFluxo a Custo Mínimo
Fluxo a Custo Mínimo
 
Teoria de Grafos.ppt.pptx para estudar MACS
Teoria de Grafos.ppt.pptx para estudar MACSTeoria de Grafos.ppt.pptx para estudar MACS
Teoria de Grafos.ppt.pptx para estudar MACS
 
Aula 3 mapa de veitch-karnaugh.
Aula 3  mapa de veitch-karnaugh.Aula 3  mapa de veitch-karnaugh.
Aula 3 mapa de veitch-karnaugh.
 
Aula 3. Electr. Digit..pptx para aprender como funciona os códigos
Aula 3. Electr. Digit..pptx para aprender  como funciona os códigosAula 3. Electr. Digit..pptx para aprender  como funciona os códigos
Aula 3. Electr. Digit..pptx para aprender como funciona os códigos
 
Grafos
GrafosGrafos
Grafos
 
slidesWtisc(1).pptx
slidesWtisc(1).pptxslidesWtisc(1).pptx
slidesWtisc(1).pptx
 
Manual solucoes redes_tanenbaum
Manual solucoes redes_tanenbaumManual solucoes redes_tanenbaum
Manual solucoes redes_tanenbaum
 
Aplicacao da Formula Luderiana Racional para Raiz Cubica
Aplicacao da Formula Luderiana Racional para Raiz CubicaAplicacao da Formula Luderiana Racional para Raiz Cubica
Aplicacao da Formula Luderiana Racional para Raiz Cubica
 
Análise de Algoritmos - Mais problemas NP-Completos
Análise de Algoritmos - Mais problemas NP-CompletosAnálise de Algoritmos - Mais problemas NP-Completos
Análise de Algoritmos - Mais problemas NP-Completos
 
Intro tecelagem pg
Intro tecelagem pgIntro tecelagem pg
Intro tecelagem pg
 
Análise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPAnálise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NP
 
Aula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvidoAula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvido
 
Formula luderiana racional para raiz cubica
Formula luderiana racional para raiz cubicaFormula luderiana racional para raiz cubica
Formula luderiana racional para raiz cubica
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
 
Apostila clic2
Apostila clic2Apostila clic2
Apostila clic2
 
euclides primos
euclides primoseuclides primos
euclides primos
 
Curso de Shell Script 09/11
Curso de Shell Script 09/11Curso de Shell Script 09/11
Curso de Shell Script 09/11
 
Com red2011q1mirisola grafosaleatoriossmallworld
Com red2011q1mirisola grafosaleatoriossmallworldCom red2011q1mirisola grafosaleatoriossmallworld
Com red2011q1mirisola grafosaleatoriossmallworld
 
Formula luderiana racional para extracao de raiz quadrada (completo)
Formula luderiana racional para extracao de raiz quadrada (completo)Formula luderiana racional para extracao de raiz quadrada (completo)
Formula luderiana racional para extracao de raiz quadrada (completo)
 

Mais de Marcos Castro

Colored de Bruijn Graphs
Colored de Bruijn GraphsColored de Bruijn Graphs
Colored de Bruijn GraphsMarcos Castro
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de ProgramaçãoMarcos Castro
 
Ferramentas para Bioinformática
Ferramentas para BioinformáticaFerramentas para Bioinformática
Ferramentas para BioinformáticaMarcos Castro
 
A importância da Bioinformática
A importância da BioinformáticaA importância da Bioinformática
A importância da BioinformáticaMarcos Castro
 
Problema do Caixeiro Viajante
Problema do Caixeiro ViajanteProblema do Caixeiro Viajante
Problema do Caixeiro ViajanteMarcos Castro
 
Metaheurística Simulated Annealing
Metaheurística Simulated AnnealingMetaheurística Simulated Annealing
Metaheurística Simulated AnnealingMarcos Castro
 
Expressões Regulares com Python 3
Expressões Regulares com Python 3Expressões Regulares com Python 3
Expressões Regulares com Python 3Marcos Castro
 
Programação dinâmica
Programação dinâmicaProgramação dinâmica
Programação dinâmicaMarcos Castro
 
Busca em largura - BFS
Busca em largura - BFSBusca em largura - BFS
Busca em largura - BFSMarcos Castro
 
Análise Assintótica
Análise AssintóticaAnálise Assintótica
Análise AssintóticaMarcos Castro
 
Listas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionáriosListas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionáriosMarcos Castro
 
Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - DicionáriosMarcos Castro
 

Mais de Marcos Castro (20)

Colored de Bruijn Graphs
Colored de Bruijn GraphsColored de Bruijn Graphs
Colored de Bruijn Graphs
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de Programação
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
 
Arquivos FASTQ
Arquivos FASTQArquivos FASTQ
Arquivos FASTQ
 
Ferramentas para Bioinformática
Ferramentas para BioinformáticaFerramentas para Bioinformática
Ferramentas para Bioinformática
 
A importância da Bioinformática
A importância da BioinformáticaA importância da Bioinformática
A importância da Bioinformática
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
 
Problema do Caixeiro Viajante
Problema do Caixeiro ViajanteProblema do Caixeiro Viajante
Problema do Caixeiro Viajante
 
Metaheurística Simulated Annealing
Metaheurística Simulated AnnealingMetaheurística Simulated Annealing
Metaheurística Simulated Annealing
 
Expressões Regulares com Python 3
Expressões Regulares com Python 3Expressões Regulares com Python 3
Expressões Regulares com Python 3
 
Algoritmos gulosos
Algoritmos gulososAlgoritmos gulosos
Algoritmos gulosos
 
Programação dinâmica
Programação dinâmicaProgramação dinâmica
Programação dinâmica
 
Busca em largura - BFS
Busca em largura - BFSBusca em largura - BFS
Busca em largura - BFS
 
Análise Assintótica
Análise AssintóticaAnálise Assintótica
Análise Assintótica
 
Listas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionáriosListas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionários
 
Python - Set
Python - SetPython - Set
Python - Set
 
Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - Dicionários
 
Tabela Hash
Tabela HashTabela Hash
Tabela Hash
 
Binary heap
Binary heapBinary heap
Binary heap
 
Fila de prioridades
Fila de prioridadesFila de prioridades
Fila de prioridades
 

Velvet assembler

  • 1. VELVET ASSEMBLER Marcos Castro Grupo de Bioinformática - Unifesp
  • 2. Velvet assembler  Velvet é um assembler para short reads.  Criador: Daniel Zerbino.  http://www.ebi.ac.uk/~zerbino/velvet/  Uma “short interview” com Zerbino:  https://www.biostars.org/p/117134/  Velvet foi feito em linguagem C e é gratuito (GPL).  Há rumores que foi feito utilizando o editor Vim! 2
  • 3. Motivação  Apesar do sequenciamento do genoma humano, a maioria das espécies ainda não foram sequenciadas!  A montagem de shotgun reads é um desafio no sequenciamento do genoma de novo.  De novo: sem genoma de referência.  Objetivo da montagem:  Reunir os fragmentos extraídos (shotgun reads) para formar um conjunto de sequências contíguas (contigs). 3
  • 4. Tecnologias NGS  Novos métodos de sequenciamento têm surgido.  Exemplo: Illumina, SOLiD.  Tecnologias NGS produzem reads bem menores do que o tradicional método de Sanger.  Sanger: em torno de 400-500 bp  Illumina: 50 bp 4
  • 5. Tecnologias NGS  Geração de uma grande quantidade de dados.  Fragmentos produzidos muito pequenos (short reads).  Vantagens:  Rapidez, custo.  Requer menos amostra de DNA.  Desvantagem:  Short reads com altas taxas de erro. 5
  • 7. Assembly  Após a produção dos reads, é preciso montá-los.  Existem várias ferramentas de montagem (assemblers).  Várias dessas ferramentas utilizam a abordagem OLC (overlap-layout-consensus). 7
  • 8. Assembly  Na OLC, alinham-se os fragmentos dois a dois para encontrar quais pares de reads possuem uma sobreposição (overlap) consistente.  Analogia: procurar por peças de um quebra-cabeça que se encaixam e que possuem cores correspondentes.  Dificuldade: distinguir sobreposições inexatas.  Erros de sequenciamento.  Regiões de similaridade (highly conserved repeats). 8
  • 9. Assembly  O assembler detecta clusters de reads, formando os contigs.  Analogia: partes da imagem colocadas juntas em um quebra-cabeça.  Partes ambíguas: 9
  • 10. Assembly  O assembler tenta ordenar e orientar os contigs.  A informação paired-end pode ser usada pelo assembler para estimar a distância que separam os contigs.  Conjuntos de contigs que podem ser colocados na mesma região são chamados de supercontigs (scaffolds).  Ao final da montagem, um conjunto de scaffolds estarão disponíveis. 10
  • 11. Assembly  É desejável remover a maior quantidade de gaps possível.  Montagens de cromossomos inteiros.  Pode ser muito custoso.  Gaps podem ocorrer devido:  Falta de cobertura.  Complexidade da sequência. 11
  • 13. Grafos De Bruijn  Em grafos De Bruijn, os reads são quebrados em sequências menores (substrings) chamadas k-mers.  Esse tipo de grafo foi proposto originalmente para manipular melhor a montagem de regiões repetitivas. 13 Problema?
  • 14. Grafos De Bruijn  k-mer é uma substring de tamanho k.  Exemplo de string: GGCGATTCATCG  Se k = 4, temos os 4-mers: GGCG, GCGA, CGAT ...  Se k = 3, temos os 3-mers: GGC, GCG, CGA ...  Como gerar todos os k-mers em Python:  [s[i:i+k] for i in range(len(s)) if len(s[i:i+k]) == k]  “s” é a string e “k” é o tamanho da substring. 14
  • 15. Grafos De Bruijn 15 Fácil, nenhum dos 7-mers aparece mais de uma vez!!
  • 16. Grafos De Bruijn 16 O grafo possui um nó a menos do que o anterior. Por que?
  • 17. Grafos De Bruijn  Algoritmo para construção dos grafos De Bruijn:  1) Quebra os reads em k-mers.  2) Conecta os k-mers baseados na regra dos “k – 1” nucleotídeos comuns (sufixo/prefixo). 17
  • 18. Grafos De Bruijn  Os exemplos anteriores não consideraram sequências de ambas as fitas. Cadeia dupla deve ser considerada: 18 cadeia dupla complemento
  • 19. Grafos De Bruijn – Simplificação  Exemplo: 19
  • 20. Grafos De Bruijn – Simplificação  Removendo as bolhas... 20
  • 21. Grafos De Bruijn – Simplificação  Removendo as pontas... 21
  • 22. Grafos De Bruijn – Simplificação  Grafo simplificado: 22
  • 23. Tamanho do k-mer  Um k-mer menor:  Aumenta possibilidade de conectividade (sensibilidade).  Mais regiões ambíguas (menor especificidade).  Um k-mer maior:  Aumenta a especificidade.  Diminui a conectividade. 23
  • 24. Tamanho do k-mer  Prefere-se pegar valores de “k” ímpares.  Exemplo para “k” par: ATATATATATAT  Complementar reverso: ATATATATATAT  Exemplo para “k” ímpar: ATATATATATA  Complementar reverso: TATATATATAT  Conclusão: com “k” par, alguns k-mers podem ser complementos reversos de si mesmos! Problema? 24 palíndromos
  • 25. Tamanho do k-mer  K-mers sendo complemento reverso de si mesmos geram ambiguidade no grafo tornando a sua resolução mais difícil.  Como evitar os k-mers palíndromos?  Utilizando um “k” ímpar!  Velvet requer um “k” ímpar.  Caso você escolha um “k” par, o Velvet decrementa! 25
  • 26. Tamanho do k-mer  Com k-mers mais longos, fica mais fácil de converter o grafo de Bruijn em uma única sequência.  Porém, “k” maiores requerem mais memória para armazenar e processar o grafo.  Se possuir RAM “ilimitada”, o tamanho do k-mer pode ser limitado ao tamanho do short read. 26
  • 27. Grafos de Bruijn – Regiões repetitivas  Como chegar, a partir do grafo, à sequência original?  A repetição originou um loop no grafo.  Genoma -> Grafo é único e Grafo -> Genoma ? 27
  • 28. Grafos de Bruijn – Regiões repetitivas  Reflexão:  Se cada k-mer tiver vizinhos únicos, seremos capazes de construir a sequência? 28
  • 29. Grafos de Bruijn – Regiões repetitivas 29 Muito fácil!!
  • 30. Grafos de Bruijn – Regiões repetitivas  E agora? 30 4 caminhos!!
  • 31. Reads compartilhando k-mers  Considere os reads:  R1: ACTGA  R2: TCTGG  R3: ACTGC  Todos os 3-mers: {ACT, CTG, TGA, TCT, TGG, TGC} 31
  • 32. Reads compartilhando k-mers  Considere os reads:  R1: ACTGA  R2: TCTGG  R3: ACTGC 32 CTG TGA TGG ACT TCT TGC 6 caminhos e apenas 3 reads! Quais caminhos são reais?
  • 33. Reads compartilhando k-mers  Considere os mesmos reads, mas com k = 4:  R1: ACTGA  R2: TCTGG  R3: ACTGC  Todos os 4-mers: {ACTG, CTGA, TCTG, CTGG, CTGC} 33
  • 34. Reads compartilhando k-mers  Considere os mesmos reads agora com k = 4:  R1: ACTGA  R2: TCTGG  R3: ACTGC 34 ACTG CTGG CTGA CTGC TCTG Aumentou-se o tamanho do k, resolveu? Não!
  • 35. Contigs mais curtos?  Uma das características dos assemblers que utilizam DBG (De Bruijn Graphs) é o aparecimento de contigs mais curtos do que o comprimento do read.  Por que isso ocorre? 35
  • 36. Velvet – De Bruijn graphs  Velvet utiliza a abordagem de grafos de Bruijn.  O nó representa uma série de sobreposições k-mers. 36 k-mers adjacentes nó
  • 37. Velvet – De Bruijn graphs  A sequência de um nó (ACCA) é formada pelos últimos nucleotídeos (em vermelho) de cada k-mer.  K-mers se sobrepõem em “k – 1” nucleotídeos. 37
  • 38. Velvet – De Bruijn graphs  Cada nó N possui o seu nó gêmeo Ñ.  Um bloco é a união de um nó N com o seu gêmeo Ñ.  Sobreposições entre reads de fitas opostas são levadas em conta. 38 nó N nó gêmeo Ñ bloco
  • 39. Velvet – De Bruijn graphs  O nó gêmeo representa o reverso complementar. 39 nó N nó gêmeo Ñ bloco CAGTC é o reverso complementar de GACTG
  • 40. Velvet – De Bruijn graphs  O último k-mer de um nó de origem de um arco sobrepõem com o primeiro de seu nó de destino. 40 nó de origem nó destino se sobrepõem
  • 41. Velvet – De Bruijn graphs 41 cada retângulo é um nó cada nó representa uma série de sobreposições k-mers se um arco sai de A e chega em N, então existe um arco que sai de Ñ e chega em à bloco
  • 42. Velvet – De Bruijn graphs  Simplificação:  Se o nó A tem somente um arco de saída para o nó B e se o nó B tem somente um arco de entrada, faz-se o merge. 42 sem perda de informação
  • 43. Velvet - Propriedades  Duas sequências sobrepostas são representadas por dois caminhos que se sobrepõem.  Exemplo:  Sequência S1: ACTG (formada pelo caminho C1)  Sequência S2: CTGA (formada pelo caminho C2)  C1 e C2 se sobrepõem.  C1 ∩ C2 = sobreposição de S1 com S2 = CTG 43
  • 44. Velvet - Propriedades  Considere as strings:  S2 = ACTG  S1 = CTG  Se S1 é substring de S2, então o caminho de S1 é um sub-caminho de S2.  Útil para procurar por reads que se sobrepõem através de repetições. 44
  • 45. Velvet - Propriedades  O grafo de Bruijn de uma sequência pode ser considerado como uma simplificação da affix tree dessa sequência.  Prefixo: é um afixo que se adiciona à esquerda.  Exemplo: semicírculo  Sufixo: é um afixo que se adiciona à direita.  Exemplo: loteria  Afixos: prefixos e sufixos. 45
  • 46. Suffix Tree  Construindo árvore de sufixo da sequência ACTGA.  Adicionando o “A”: 46 String: A$
  • 47. Suffix Tree  Adicionando o “C” de ACTGA: 47 String: AC$
  • 48. Suffix Tree  Adicionando o “T” de ACTGA: 48String: ACT$
  • 49. Suffix Tree  Adicionando o “G” de ACTGA: 49 String: ACTG$
  • 50. Suffix Tree  Adicionando o “A”: 50 http://visualgo.net/suffixtree.html String: ACTGA$
  • 51. Suffix Tree  Aplicação da Suffix Tree:  Maior substring comum (longest common substring)  Hey, cuidado, não é “longest common subsequence”.  Maior substring comum: contígua.  Maior subsequência comum: não contígua.  Suffix Tree é muito utilizada para manipular uma enorme quantidade de dados (problemas biológicos). 51
  • 52. Suffix Tree  Uma das formas eficientes de construir uma suffix tree é utilizando o algoritmo de Ukkonen.  Complexidade: O(n logn) em geral.  Dificuldade: implementação.  Implementação:  http://www.geeksforgeeks.org/ukkonens-suffix-tree- construction-part-6/ 52
  • 53. Suffix Tree – Links úteis  http://www.geeksforgeeks.org/ukkonens-suffix-tree- construction-part-1/ (possui parte 1, 2, 3 até 6)  https://www.youtube.com/watch?v=aPRqocoBsFQ  https://www.youtube.com/watch?v=UrmjCSM7wDw 53
  • 54. Suffix Tree  Para um conjunto de strings/palavras/reads:  Generalized suffix tree.  http://www.geeksforgeeks.org/generalized-suffix-tree-1/ 54
  • 55. Velvet - Implementação  Código no GitHub:  https://github.com/dzerbino/velvet  Na pasta “src” encontram-se os arquivos de código. 55
  • 56. Velvet - Implementação  Estrutura do grafo: (arquivo graph.c) 56
  • 57. Velvet - Implementação  Estrutura do grafo: 57 contador de sequências
  • 58. Velvet - Implementação  Retorna o número de sequências utilizadas para construir o grafo: 58
  • 59. Velvet - Implementação  Estrutura do grafo: 59 contador de nós
  • 60. Velvet - Implementação  Retorna o número de nós do grafo: 60
  • 61. Velvet - Implementação  Estrutura do grafo: 61 tamanho do k-mer
  • 62. Velvet - Implementação 62 se quiser alterar, basta recompilar com um tamanho maior
  • 63. Velvet - Implementação  Estrutura do grafo: 63 O grafo armazena ponteiros para todos os nós.
  • 64. Velvet - Implementação  Exemplo para destruir um nó: 64
  • 65. Velvet - Implementação  Estrutura do grafo: 65 array de arrays de marcadores short reads agrupados por nó
  • 66. Velvet - Implementação  Estrutura do grafo: 66 tamanhos dos nodeReads
  • 67. Velvet - Implementação  Estrutura do grafo: 67 ponteiros para gap markers ??
  • 68. Velvet - Implementação  Estrutura do nó: 68 identificação do nó
  • 69. Velvet - Implementação  Estrutura do nó: 69 cada nó tem um ponteiro para o seu nó gêmeo, cujo ID é o ID do nó multiplicado por -1
  • 70. Velvet - Implementação  Estrutura do nó: 70 corresponde ao nucleotídeos finais dos k-mers representados por esse nó se s(n) é a sequência do nó, o tamanho do nó é length(s(n))
  • 72. Velvet - Implementação  Cada nó está ligado a uma lista duplamente encadeada de arcos de saída.  Por causa da simetria do grafo, todos os arcos de entrada têm correspondência com um arco de saída do nó gêmeo.  Por isso, somente ponteiros para arcos de saída são armazenados (economia de memória). 72
  • 73. Velvet - Implementação  Estrutura do nó: 73 número de arcos da lista duplamente encadeada
  • 74. Velvet - Implementação  Reads estão associadas aos nós de duas formas:  Long reads são representadas por objetos PassageMarker em uma lista ligada cujo primeiro elemento é armazenado dentro do nó.  Short reads são representadas por shortReadMarker que são armazenados em um array ligado ao grafo. 74
  • 75. Velvet - Implementação  Estrutura do nó: 75 representam long reads
  • 76. Velvet - Implementação  Estrutura do nó: 76 variáveis booleanas que permitem acompanhar o progresso dos algoritmos
  • 77. Velvet - Implementação  Estrutura do arco: 77 arcos são mais simples, pois bastante informação é armazenada nos nós
  • 78. Velvet - Implementação  Estrutura do arco: 78 cada arco possui seu nó de destino e sua multiplicidade
  • 79. Velvet - Implementação  Estrutura do arco: 79 quantidade de reads que passam pelo arco ou pelo seu reverso complementar
  • 80. Velvet - Implementação  Estrutura do arco: 80 nó de destino
  • 81. Velvet - Implementação  Estrutura do arco: 81 o arco gêmeo possui a mesma multiplicidade
  • 82. Velvet - Implementação  Estrutura do arco: 82 ponteiros da doubly linked list de arcos que saem do nó de origem
  • 83. Velvet - Implementação  Estrutura do arco: 83 arcos são armazenados em linked lists que estão ligadas às posições de uma hash table
  • 84. Velvet - Implementação  Estrutura do grafo sobreposto: 84 nó as linhas tracejadas representam os ponteiros conectando todos os elementos (nós e arcos) cada nó está conectado ao seu nó gêmeo e à doubly linked list de arcos de saída
  • 85. Velvet - Implementação  Estrutura PassageMarker: 85 mapeamento de uma substring da sequência identificada pelo sequenceID para o nó
  • 86. Velvet - Implementação  Estrutura PassageMarker: 86 armazena a coordenada de início do alinhamento dentro do read e o término que separa o alinhamento da extremidade 3’ do nó
  • 87. Velvet - Implementação  Estrutura PassageMarker: 87 dentro do nó, passage markers são armazenados como uma doubly linked list
  • 88. Velvet - Implementação  Estrutura PassageMarker: 88 dentro da sequência, passage markers são armazenados como uma linked list
  • 89. Velvet - Implementação  Estrutura PassageMarker: 89 cada passage marker está ligado a uma estrutura twin marker que corresponde ao reverso complementar da sequência, mapeado para o nó gêmeo visitou o passage marker?
  • 90. Velvet - Implementação  Passage markers e suas conexões no grafo: 90 passage markers nós linhas tracejadas são ponteiros
  • 91. Velvet - Implementação  Estrutura do ShortReadMarker:  Numerosos, portanto, estruturas “leves”, associado a um nó. 91
  • 92. Velvet - Implementação  Estrutura do ShortReadMarker: 92 ID da sequência
  • 93. Velvet - Implementação  Estrutura do ShortReadMarker: 93 posição do marcador no nó (varia bastante)
  • 94. Velvet - Implementação  Estrutura do ShortReadMarker: 94 deslocamento do marcador desde o início do read, normalmente é 0 essa estrutura não é duplicada no nó gêmeo (economia de memória)
  • 95. Indexação de Read  O tamanho do k-mer e a quantidade de reads vêm crescendo. Por isso, a implementação de hash table através de arrays de slots (buckets) foi substitituída por árvores binárias de busca. 95
  • 96. Indexação de Read  Utilização de splay trees.  Splay: trazer um elemento X para a raiz da árvore fazendo rotações.  Objetivo: minimizar o número de acessos para achar a chave requerida.  Eficiência através da frequência com que cada nó é acessado, mantendo estes nós na parte superior da árvore. 96
  • 97. Indexação de Read  Rotações similares à AVL: 97 se não existe o elemento, então faz splay do sucessor
  • 98. Indexação de Read  Por que utilizar splay trees?  Reduz a complexidade de implementação.  Embora seja menos eficiente teoricamente, são mais fáceis de implementar e é na prática tão eficiente quanto outras formas de binary search trees.  Embora tenha-se um maior custo de memória, é robusto para um grande conjunto de dados. 98
  • 99. Indexação de Read  É feito o hash dos reads de acordo com um tamanho pré-definido do k-mer.  A variável “k” é limitada ao tamanho dos reads.  K-mers menores aumentam a conectividade do grafo.  Trade-off sensibilidade e especificidade. 99
  • 100. Exemplo  A contagem dos k-mers pode ser usada para estimar quantos reads passam por um determinado caminho. 100
  • 101. Velvet – Bolhas (bubbles) 101  Dois caminhos são considerados redundantes se eles iniciam e terminam no mesmo nó formando bolhas e contém sequências similares.  O que causam caminhos redundantes?  Erros  Variantes biológicas tais como SNPs
  • 102. Algoritmo Tour Bus 102  O Tour Bus algorithm detectar as bolhas.  O critério para decidir sobre a simplificação pode ser complexo.  Um deles: cobertura.
  • 103. Algoritmo Tour Bus 103  O algoritmo é baseado no Dijkstra (busca em largura).  O algoritmo inicia de um nó qualquer e percorre o grafo visitando os nós em ordem crescente de distância do nó inicial.  Qual é essa distância?
  • 104. Algoritmo Tour Bus 104  Qual é essa distância?  A distância entre nós consecutivos A e B é o tamanho de s(B) dividido pelo número de reads conectando A à B.
  • 105. Algoritmo Tour Bus  Se o processo encontrar um nó que já foi visitado, é realizado um backtrack para descobrir o antecessor comum dos nós.  A partir dos caminhos que foram refeitos, é feito um merge dos dois caminhos.  O nó que atingiu o nó final primeiro (faster path), é usado como um consensus por causa da cobertura mais elevada. 105
  • 106. Algoritmo Tour Bus 106  Considere o grafo:  As setas azuis indicam as travessias no grafo.
  • 107. Algoritmo Tour Bus 107  O Tour Bus inicia de um nó com mais de uma aresta de saída. O “A” é um nó que respeita esse critério.
  • 108. Algoritmo Tour Bus 108  O Tour Bus inicia de um nó com mais de uma aresta de saída. O “A” é um nó que respeita esse critério. vamos iniciar daqui O objetivo é procurar as bolhas através de uma BFS
  • 109. Algoritmo Tour Bus 109  Através dos caminhos B’C’ e BC, o nó D é visitado mais de uma vez. nó visitado mais de 1x
  • 110. Algoritmo Tour Bus 110  O nó A é o antecessor comum: antecessor comum nó visitado mais de 1x
  • 111. Algoritmo Tour Bus 111  Os nucleotídeos do path B’C’ e BC são extraídos, alinhados e comparados. Se os caminhos são similares, faz-se um merge.
  • 112. Algoritmo Tour Bus 112  A busca continua, os paths C’’D’ e CD são comparados, CD e C’’D’ são julgados similares e é feito um merge do caminho mais longo com o menor.
  • 113. Algoritmo Tour Bus  Resumindo:  Detecta caminhos redundantes. (Dijkstra-BFS)  Pode-se comparar esses caminhos usando métodos de programação dinâmica.  Se forem similares, então faz-se um merge. 113
  • 114. Algoritmo Tour Bus  Bolhas podem está dentro de outras bolhas que estão dentro de outras bolhas...  Como seria o problema de buscar todas as bolhas para dados reais?  O problema pode torna-se intratável.  Pode-se limitar a pesquisa a um limiar threshold. 114
  • 117. Referências  Zerbino’s original paper:  http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2336801/  Velvet Manual:  http://www.ebi.ac.uk/~zerbino/velvet/Manual.pdf  De Bruijn Graphs Tutorial:  http://www.homolog.us/Tutorials/index.php?p=1.1&s=1 117
  • 118. Referências  Suffix trees, Affix trees and some of their applications  http://www.techfak.uni- bielefeld.de/~stoye/dropbox/20060517birkenfeld.pdf  Suffix trees, Affix trees and some of their applications  http://www.techfak.uni- bielefeld.de/~stoye/dropbox/20060517birkenfeld.pdf 118