Introdução à análise de dados de sequenciadores de nova geração

Transcrição

Introdução à análise de dados de sequenciadores de nova geração
Introdução à análise de dados de sequenciadores de nova geração
Versão 2.1β
Leonardo Varuzza
Abril 2013
2
Sumário
1 Introdução
1.1 Bioinformática . . . . . . . . . . . .
1.2 O que é NGS . . . . . . . . . . . . .
1.3 Como funciona o NGS . . . . . . . .
1.3.1 Preparo da amostra . . . . .
1.3.2 Amplificação de biblioteca . .
1.3.3 Sequenciamento . . . . . . .
1.3.4 Ion Torrent . . . . . . . . . .
1.3.5 SOLiD . . . . . . . . . . . . .
1.4 Aplicações do NGS . . . . . . . . . .
1.4.1 Ressequenciamento genômico
1.4.2 Target Sequencing . . . . . .
1.4.3 RNA Seq . . . . . . . . . . .
1.4.4 Sequenciamento denovo . . .
1.4.5 Metagenoma . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 Arquivos de Sequência
2.1 Fasta e FastQ Files . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Fasta format . . . . . . . . . . . . . . . . . . . . . . .
2.1.2 FastQ format . . . . . . . . . . . . . . . . . . . . . . .
2.2 SFF File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Converter arquivo SFF para Fasta ou FastQ . . . . . .
2.3 Unmapped BAM . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 XSQ Format . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5 SAM e BAM Files . . . . . . . . . . . . . . . . . . . . . . . .
2.5.1 Estrutura do arquivo SAM . . . . . . . . . . . . . . .
2.5.2 BAM File . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.3 Samtools . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.4 Picard . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6 Mapeando os reads com o TMAP . . . . . . . . . . . . . . . .
2.6.1 Criando o índice . . . . . . . . . . . . . . . . . . . . .
2.6.2 Mapeando os reads . . . . . . . . . . . . . . . . . . . .
2.6.3 Exemplo: Mapeando os reads de E. coli com o TMAP
2.6.4 Mapeando dados de Long Mate Pair . . . . . . . . . .
2.7 Bowtie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.1 Utilizando o Bowtie 2 . . . . . . . . . . . . . . . . . .
2.7.2 Utilizando o Bowtie 2 com o Ion Torrent . . . . . . . .
2.8 Visualizando arquivos BAM com o IGV . . . . . . . . . . . .
2.8.1 Importanto o genoma de referência . . . . . . . . . . .
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
6
7
7
7
8
8
10
13
13
13
14
14
14
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
18
18
19
20
20
23
23
25
25
28
28
30
32
32
32
34
35
36
36
36
37
39
3 Arquivos de Anotação de Genomas
3.1 BED Formats . . . . . . . . . . . . . . . . . .
3.2 Formatos GFF e GTF . . . . . . . . . . . . .
3.3 Gerando arquivos de anotação . . . . . . . . .
3.3.1 Obtendo anotações do UCSC Browser
3.3.2 Obtendo anotação do Ensembl . . . .
3.4 Manipulando arquivos BED . . . . . . . . . .
3.4.1 Extrair sequências da regiões . . . . .
3.4.2 Calculando interseções . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
41
41
42
43
43
45
45
45
45
4 Detecção de Variâncias
4.1 VCF Files . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Codificação do Genótipo em arquivo VCF
4.1.2 Manipulando arquivos VCF . . . . . . . .
4.1.3 Indexando as variantes . . . . . . . . . . .
4.2 Utilizando o samtools para detectar SNPs . . . .
4.2.1 Gerando um arquivo consenso . . . . . . .
4.3 Utilizando o GATK . . . . . . . . . . . . . . . .
4.3.1 Chamando Variantes no GATK . . . . . .
4.3.2 Anotando as variantes com o dbSNP . . .
4.3.3 Comparando arquivos VCF com o GATK
4.3.4 Generando uma referência alternativa . .
4.4 Utilizando Ion Varriant Caller . . . . . . . . . . .
4.5 Anotando os SNP’s com o snpEff . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
47
47
49
49
49
50
50
51
51
52
52
53
53
54
5 Montagem denovo
5.1 Montando o genoma com o Mira . . . . . . . . . . . . . . . . . . . . .
5.1.1 Montando uma biblioteca de fragmentos utilizando o Mira 3.4 .
5.1.2 Montando uma biblioteca de mate-pair utilizando o Mira 3.4 .
5.1.3 Fazendo uma montagem mista com o Mira 3.4 . . . . . . . . .
5.1.4 Fazendo uma montagem com o Mira 3.9 . . . . . . . . . . . . .
5.1.5 Interpretando os resultados . . . . . . . . . . . . . . . . . . . .
5.2 Montando genomas com o SPAdes . . . . . . . . . . . . . . . . . . . .
5.3 Análises pós montagem . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.1 Comparando a montagem com uma referência . . . . . . . . . .
5.3.2 Ordenando os contigs . . . . . . . . . . . . . . . . . . . . . . .
5.3.3 Visualizando a montagem no Tablet . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
57
57
58
59
59
60
61
62
63
63
65
65
6 RNA Seq
6.1 Mapeando os reads com o STAR . .
6.2 Quantificando a expressão gênica . .
6.2.1 Quantificando com o cufflinks
6.3 Análise estatística . . . . . . . . . .
6.3.1 cummeRbund . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
69
69
70
71
73
73
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
os nomes dos cromossomos em um arquivo VCF
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
77
77
77
78
79
80
7 Apêndices
7.1 Ordem dos genótipos
7.2 Pileup format . . . .
7.3 Samtools VCF file .
7.4 Script para converter
7.5 Tabelas . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Capítulo 1
Introdução
1.1
Bioinformática
A bioinformática é uma área interdisciplinar que desenvolme métodos para armazenar, recuperar e organizar dados biológicos. Para o sequenciamento de DNA bioinformática é quase sempre mandatória
devido à dificuldade de se extrair informação biológica sem o auxílio de computadores. O resultado do
sequênciamento é uma cadeia longa de símbolos que representam a ordem da Adenida, Guanina, Citosina e Timina no DNA, usualemente, e por motívos óbvios, se usa A,G, C e T. Portanto, o trababalho
da bioinformática é armazenar em um computador essas sequências, e principalmente as informações
biológicas associadas à elas.
Em 1979 no laboratório de Los Alamos, o mesmo que criou a bomba atômica, foi criado o GenBank,
o primeiro banco de dados computacional de sequências. Portanto o primeiro sistema de bioinformática
surge apenas apenas 2 anos após a publicação do trabalho de Sanger descrevendo o sequenciamento
por eletroforese em gel. O GenBank de Los Alamos seria incorporado ao NCBI, National Center for
Biological Information, em 1992.
E evolução da tecnologia de sequênciamento tornou a bioinformática ainda mais curcial, se antes
já será impraticável analisar manualmente 96 kilobases por corrida, com os sequenciadores que geram
gigabytes por corrida é impossível, se uma pessoa pudesse analisar uma base por segundo, demoraria
quase 32 anos para analisar uma corrida de 1 Gbp. Por isso podemos considerar que atualmente os
sequenciadores são sistemas químico computacionais que geram e analisam a informação genética.
Inicialmente, devido a limitação do damanho das leituras dos sequenciadores de nova geração, a
principal aplicação era o resequenciamento, por isso, os algoritmos mais desenvolvidos são os que mapeiam
as leituras em um genoma de referência. Os mapeadores mais imporatnes são o Bowtie[16], o BWA[23], o
SSAHA[33] e para o Ion Torrent temos o TMAP, que foi desenvolvido internamente pela Life Technologies,
mas que utiliza algoritmos similares aos outros.
Caso não haja um genoma de referência previamente sequenciado, é necessário fazer o sequenciamento
de novo, ou seja pela primeira vez. Como dito antes as leituras da nova geração eram muito curtas, de
25 à 35 pares de bases, porém, hoje elas já chregam à valores como 400bp no PGM. Por causa dessa
melhoria e também devido ao menor custos, o NGS se tornou dominante também para o sequenciamento
de novo, em grandes centros de genômica as frotas de sequenciadores de Sanger foram aposentadas e
substituídas por um conjunto bem menor de máquinas de nova geração.
Do ponto de vista do sequenciamento, fazer um resequenciamento ou um sequenciamento de novo
não tem diferença, o que muda é a forma de análise, pois em vez de usar um mapeiador, é preciso usar
um montador para reconstruir o genoma original apatir das leituras. Existem duas abordagens para
a montagem do genoma, a primeira, chamda de Overlap-Layout-Concensus ou OLC, é a mais antiga e
já era usada para sequenciamento de Sanger. O limite do OLC é que a complexidade aumenta com o
número de leituras e para a montagem de grandes genomas ela se torna impraticável. Por isso surgiram
os montadores baseados em gráfos de De Bruijn. Porém, para pequenos genomas ainda se utilizam
montadores OLC pois eles requerem menos memória, em especial, o Mira[4], um montador OLC otimiza
para NGS, é bastante popular. Que utilizam gráfos De Bruijn existe o Velvet[43] e recentemente foi
lançada uma versão otimizada pra o Ion Torrent do SPAdes[2].
Ao contrário do mapeamento em que os algoritmos estão muito bem estabelecidos, a área de montagem
5
de genomas é muito mais experimental e ainda um campo muito ativo de pesquisa[39].
1.2
O que é NGS
Sequenciadores de DNA são equipamentos que leem uma amostra de DNA e geram um arquivo eletrônico
com simbolos que representam a sequência de bases nitrogenadas – A, C, G, T – contidas na amostra. O
primeiro método popular de sequenciamento da DNA foi o de terminação de cadeia de Sanger, publicado
em 1977. Em 1986 foi lançado o primeiro sequenciador automático de DNA, o ABI 370, e em 1998, o
primeiro sequenciador de eletroforese capilar, o ABI 3700. Com a automatização foi possível realizar
grandes projetos de sequenciamento, como o genoma humano, do camundongo e outros. Para realizar
esses projetos foram montados grandes centros com dezenas de máquinas instaladas e ao custo de bilhões
de doláres.
O sequenciamento de nova geração – Next Generation Sequencing, em inglês, ou simplemente NGS
– são processos de sequenciamento de DNA que utilizam metodologias diferentes da de Sanger, com o
objetivo de acelar e baixar o custo do processo de sequênciamento. Apesar de se diferenciarem consideravelmente entre sí todos os sequenciadores de NGS se baseiam no processamento paralelo massivo de
fragmentos de DNA. Enquanto que um sequenciador de eletroforese processa, no máximo, 96 fragmentos
por vez, os sequenciadores de nova geração podem ler até bilhões de fragmentos ao mesmo tempo.
Na figura 1.1 vemos a evolução do custo por megabase sequenciada. Nota-se um primeiro decrésimo
em 2004, ano do lançamento do sequenciador 454 da Roche e um decrésimo mais acentuado a partir
de 2006 e 2007, anos em que foram lançados os sequenciadores de nova geração da Illumina e da Life
Technologies. No gráfico, vemos também qual seria a redução de custo, se a tecnologia de sequenciamento
tivesse evoluido segundo a lei de Moore[30]. Vê-se que a evolução do sequenciamento de DNA foi muito
mais acelerada do que dos processadores de computadores. A implicação disso é que os sequenciadores
evoluiram muito mais rápido do que os computadores que analisam os dados gerados, daí a necessidade
computacional para lidar com os dados gerados ter se tornado muito maior do que há 10 anos.
�����������������������������������
������
������������
�����
����
���
��
����
�������������
������������
�����
�����
�����
�����
�����
���
�����
�����
�����
Figura 1.1: Evolução do custo de sequenciamento por megabase. Fonte: http://www.genome.gov/
sequencingcosts/.
Apesar da redução impressionante no custo por megabase, o custo por reação, também chamdado do
custo de apertar o botão start, ainda é bastante alto, da ordem de dezenas de milhares de dólares. Ou
seja, ampliou-se muito a capacidade dos sequenciadores, permitindo até o sequenciamento de mais de um
genoma por corrida, mas sem reduzir muito o custo de operação do equipamento. Um fator limitante na
redução desse custo é o uso de reagentes caros, como bases marcadas por fluoróforos. No final de 2010,
foi lançado o PGM, da Ion Torrent, o primeiro sequenciador a detectar a incorporação dos nucleotídeos
através de um semicondutor, reduzindo, dessa forma, a complexidade do equipamento e o custo da reação
de sequencimento.
6
1.3
Como funciona o NGS
Cada tecnologia de sequenciamento possui uma estratégia diferente, mas em geral podemos identificar etapas comums entre todos os sequenciadores1 : preparo da amostra, amplificação da biblioteca e
sequenciamento.
1.3.1
Preparo da amostra
Primeiro o DNA é fragmentado por um processo químico, mecânico ou enzimática. Cada um desses
fragmentos é chamado de template. Não importa qual o método de fragmentação escolhido, é importante
que ele quebre o DNA de maneira aletória, de forma que todo o genoma seja coberto de maneira o mais
uniforme possível2 .
Após a fragmentação, adaptadores, sequências artificiais conhecidas, são incorporados ao template.
Nessa etapa é possível combinar diferentes amostras em uma mesma reação de sequênciamento através
do uso de adaptadores com uma pequena parte , normalmente 5 ou 10 bases, diferente. Depois de ligados
esses adaptadores, as amostras são misturadas, amplificadas e sequenciadas juntas. Após isso, no processo
de sequênciamento, essa parte do adaptador é lida e as amostras são separadas computacionalmente.
Um outro tipode de biblioteca são as de Long Mate-Pair[37], ou LMP. Nesse caso, são gerados
tamplates maiores, da ordem de algumas kilobases. São ligados adaptadores complementares nas pontas
do template e ele é circularizados. Em seguida é feita uma digestão enzimática que gera um único
fragmento com as duas pontas do template separadas adaptador interno (ver figura 1.2). Apesar de ser
um processo mais trabalhoso para o preparo de uma bibliotecas simples de fragmentos, o LMP permite a
detecção de variações estruturais em projetos de ressequenciamento e de geração de scaffolds em projetos
de sequenciamento denovo.
Figura 1.2: Processo da amostra de Long Mate Pair.
Um artefato que pode surgir nessa etapa são as duplicações de reads causadas por artefatos de PCR.
Esses artefatos podem gerar distorções na cobertura do genoma e impactar as análises de variações do
genoma ou de expressão do transcriptoma. Por conta disso, as pipelines de análises normalmente possuem
uma etapa em que os reads duplicados são marcados, e consequentemente ignorados nas análises finais.
1.3.2
Amplificação de biblioteca
A amplificação de bibliotecas tem como objetivo gerar em um pequeno espaço físico milhares de cópias
de cada fragmento de DNA produzido na etapa de preparo da amostra. O objetivo dessa amplificação é
1 Nos últimos anos foram propostas tecnologias que tentam eliminar a etapa de amplificação, sequenciando diretamente
uma única molecula de DNA, porém todas as tecnologias propostas sofreram de problemas de baixa acurácia e baixo
throughput.
2 Uma excessão à essa regra é o sequenciamento de amplicons, nesse caso o objetivo é sequenciar pequenas regiões que
tem exatamente o tamanho da leitura gerada pelo sequênciador
7
aumentar a fonte de sinal luminoso para a maioria dos sequenciadores, e iônico no o caso do Ion Torrent,
que será detectado na etapa de sequenciamento.
O primeiro processo de amplificação desenvolvido para esse propósito foi o PCR de emulsão. Nele
são criados milhões de micro reatores em uma emulsão de óleo. Esses reatores contêm todos os reagentes
necessários para uma reação de PCR e pequenas esferas (também chamdas de beads ou de IonSpheres)
cobertas com a sequência complementar ao adaptador. Esses fragmentos, servem para fixar os clones do
template na esfera e também como primer para a reação de PCR. Ao final do processo a esfera pode
estar em quatro estados:
1. Caso ideal: Um único fragmento foi incorporado à uma única esfera.
2. Beads policlonais: Múltiplos fragmentos foram incorporados a uma esfera.
3. Empty bead: Nenhum fragmento foi incorporado à esfera.
4. Multiple beads: Mais de uma esfera estava presente no micro reator.
O caso de Multiple beads é controlado pelo tamanho do reator, de forma que caiba somente uma esfera
por reator. As empty beads são eliminadas através de uma operação de enriquecimento para beads com
template incorporado. Por fim, as beads policlonais são controladas por meio de um processo estatístico,
que segue uma distriuiçãode Poisson. Basicamente temos muito mais beads do que templates . Por
exemplo, se tivermos 10 vezes mais beads do que templates, espera-se que somente 0,47% das beads
sejam policlonais. Claro que o efeito secundário é que 90% das beads estejam vazias, porém essas beads
são eliminadas por meio do processo de enriquecimento.
O principal fator que afeta a etapa de amplificação é a quantificação do DNA. Se o DNA for subquantificado, ou seja, existe mais DNA na amostra do que o reportado, o resultado vai ser um aumento da
quantidade de beads policlonais. Por outro lado, se o DNA for sobrequantificado, ou seja, se existe menos
DNA do que o reportado, o resultado vai ser uma quantidade muito pequena de beads com fragmentos.
Na tabela 1.1 vemos a porcentagem esperada de beads policlonais e empty beads, se tivermos uma relação
1 para 1 entre beads e fragmentos esperasse que mais de 26% das beads sejam policlonais.
Razão
10
5
4
3
2
1
Policlonal (%)
0.47
1.75
2.65
4.46
9.02
26.4
Empty (%)
90.5
81.9
77.9
71.7
60.7
36.8
Tabela 1.1: Relação entre a razão beads/fragmentos, a probabilidade de beads policlonais e a probabilidade de empty beads.
1.3.3
Sequenciamento
O sequenciador é um instrumento que executa uma série de reações químicas. Estes geram sinais que são
detectados e determinam a sequência de bases template se está sendo analisado. A seguir, vamos mostra
o processo de sequenciamento de dois intrumentos que têm abordagens completamente diferentes: o Ion
Torrent e o SOLiD.
1.3.4
Ion Torrent
A maioria dos sequenciadores utiliza uma DNA polimerase para gerar a fita complementar ao template ,
bases marcadas por fluoroforos, e câmeras a detecção. O Ion Torrent é diferente pois a detecção é feita
diretamente. A reação de polimerização gera naturalmente um um H +3 , ou seja, um próton, que altera
3 A reação de polimerização também gerar um fosfato e esse é o caminho de deteção utilizado pelo 454, com a diferença
que a emissão do fosfato não é detectada diretamente, mas indiretamente através da ativação de uma luciferase que gera
luz
8
o pH do meio. Essa alteração do pH é detectada por um transistor ISFET[3] e convertida em um sinal
elétrico (figura 1.3).
Figura 1.3: Reação de incorporação de uma base pela polimerase.
Outro ponto importante para determinar a sequência é sincronizar a polimerase com a detecção,
tanto no Ion Torrent quanto no 454 essa sincronização é feita pelo controle do tipo disponível para a
polimerase. Por exemplo, suponha que o início do fragmento que se deseja sequenciar seja AGT e que o
sequenciador disponiblize uma certa quantidade de dTTP. A polimerase vai fazer o pareamento do A com
o T e o sinal vai ser detectado pelo transitor ISFET. Para continuar a reação, a polimerase necessita de
um dCTP, porém esse reagente não está disponível e, portanto, a reação para e a leitura da incorporação
é feita. Em seguida, ocorre uma lavagem, e a base seguinte é injetada, e assim por diante em uma série
de fluxos. Podemos ver na figura 1.4 uma representação dos sinais detectados pelo sensor de um único
poço. É essa informação de intensidade de sinal que é convertida depois na sequência de bases.
Figura 1.4: Flowgram da sequência AATCTTCGT...
Uma questão relevante para os sequenciadores que utilizam fluxos de dNTP’s são os homopolímeros, sequencias contínuas de bases iguais como AAAA, CCCCC e etc4 . Nesse caso, todas as bases do
homopolímero vão ser incorporadas em um único fluxo. Felizmente, o sensor ISFET tem uma resposta
bastante linear; portanto, se um A tem um sinal x, um AA vai ter um sinal aproximadamente 2x, e
assim por diante. Na prática, é possível detectar com boa acurácia homopolímeros de até 6 bases.
O último elemento importante, e que diferencia os sequenciadores da nova geração em relação à
anterior, é o paralelismo da reação e da detecção. No Ion Torrent esse paralelismo é obtido pelo uso de
chips de silício. Utilizando o processo CMOS, o mesmo utilizado na fabricação de chips de computador
4 Notem
que microsatélites com mais de uma base na repetição, como ACACAC, não são homopolimeros
9
ou sensores de câmeras digitais, são construídos milhões de poços microscópicos um pouco maiores do
que as esferas com fragmentos de DNA, de forma que, em cada poço, tenha somente uma esfera. No
chip estão também os transitores IsFET que fazem a detecção da mudança de pH, ou seja, cada poço
possui o seu próprio “pH-gâmero” para fazer a detecção do sinal[38].
1.3.5
SOLiD
A sigla SOLiD significa Sequencing by Ligation and Detection e descreve bem o processo de sequenciamento utilizado pelo instrumento. Ao invés de utilizar uma polimerase e detectar a incorparação de cada
uma das bases, o SOLiD utiliza octâmeros marcados com fluoróforos para identificar a sequência alvo.
As primeiras 5 bases da probe garantem a especificidade da ligação da probe com o template, enquanto
que as 3 útimas são inosinas que anelam de maneira inespecífica. Conectado à última, inosina temos o
fluróforo que gerará o sinal luminoso a ser detectado pelo sequenciador (ver fig 1.5).
Fluoróforo
Probe
n1 n2 n3 n4 n5 x x x
Figura 1.5: Estrutura da probes utilizadas pelo SOLiD
No SOLiD, assim como no Ion Torrent, cada fragmento é amplificado milhares de vezes na superfície
de uma bead5 . Essas beads são então depositadas e fixadas em uma lâmina de vidro. É muito importante
ter essa fixação, porque sabemos que o sinal luminoso que será gerado pelo processo de sequenciamento
está vindo da mesma bead (ou seja, da mesma população de clones geradas de um template) por meio
das coordenadas do ponto luminoso na lâmina.
A reação de sequenciamento ocorre para cada um dos milhares de clones em cada uma das centenas
de milhões de beads depositadas na lâmina. As etapas dessa reação são, de maneira simplificada, as
seguintes:
1. Na etapa de construção de biblioteca, é adicionado um primer em cada extremidade de cada fragmento, chamados de P1 e P2 . No processo de sequenciamento é adicionado um primer complementar
à P1 , chamado de PA . A última base desse primer alinha com a última base de P1 (fig 1.6 A)
2. É adicionado um pool equimolar de probes. Como temos 4 bases diferentes e uma estrutura de 5
bases mais 3 inosinas, temos portanto 4ˆ5 = 1024 combinações diferentes de probes. As probes vão
se anelar ao longo do template. Após o anelamento, é adicionada uma ligase, que vai fixar somente
a probe que estiver ao lado de uma ponta 506 . Após a fixação pela ligase ocorre uma lavagem e
todas as probes não fixadas são removidas (fig 1.6 B)
3. É feita a leitura do floróforo. As inosinas, as três últimas bases da probe, são removidas junto com
um floróforo, criando assim uma ponta 50 livre para fazer a ligação da próxima probe (fig 1.6 C)
4. É feita uma nova incorporação de probes e o processo se repete (fig 1.6 D)
A incorporação de probes é repetida 5, 7, 10 ou 15 vezes, dependendo do tamanho desejado de leitura.
Terminado esse ciclos o sistema é aquecido e a fita complementar ao template que foi gerada denatura e
é eliminada. É então incorporado um novo primer, chamado de PB , que alinha uma base a esquerda de
PA . Todo o processo de incorporação de probes é repetido, mas sempre com uma base à esquerda (fig
1.7). Na tabela 1.3 vemos a relação entre primer, ciclo e bases lidas. Vemos que a cada ligação de probe
duas bases são lidas e que cada base é lida por duas probes diferentes. Por exemplo, a base s1 é lida
5 Esses uma novo modelo do SOLiD, o 5500W, que não utiliza beads. A amplificação dos templates é feita diretamente
na lâmina.
6 Duas probes consecutivas não ligam porque na extremidade 50 da probe tem o floróforo, que impede a ligação 50 –30 .
10
A. Primer se liga ao template
primer
C. As 3 últimas bases da probe (as inosinas) são
removidas junto com a probe.
primer
5’
... p-2 p-1 p0 s1 s2 s3 s4 s5 s6 s7 ...
... p-2 p-1 p0 s1 s2 s3 s4 s5 s6 s7 ...
Template
Template
D. Uma nova probe é incorporada e o processo
se repete.
B. Primeira probe anela ao template e
fluóroforo é lido.
Probe
primer
5’
primer
... p-2 p-1 p0 s1 s2 s3 s4 s5 s6 s7 ...
Probe
... p-2 p-1 p0 s1 s2 s3 s4 s5 s6 s7 ...
Template
Template
Figura 1.6: Algumas etapas do processo de sequenciamento: ligação do primeiro primer.
pelo ciclo 1 do PA e pelo ciclo 2 do PB . Essa construção é chamada de Two Bases Encoding ou 2BE7 ,
e permite que se faça depois a correção de erros que aumenta a acurácia do processo de sequenciamento
e esta é a principal característica do SOLiD. Vale a pena também resaltar que na segunda ligação, a
última base do primer P1 é sequenciada, isso é muito importante para fazer depois a decodificação das
cores para bases.
0
1
2
3
Cor
Azul
Verde
Amarelo
Vermelho
Fluoróforo
FAM
Cy3
TXR
Cy5
Tabela 1.2: Codificação das cores em números.
Pelo processo de sequenciamento, cada probe 2 de cada 5 bases cobertas por ela, para cobrir todas as
bases duas vezes, temos que utilizar 5 probes, que se alinham em posições diferentes de P1 e permitem
que se cubra todo o fragmento8 . Veja a figura 1.8.
O resultado do sequenciamento é codificado em números de acordo com a tabela 1.2. A relação entre
as duas primeiras bases da probe, n1 e n2 , e a cor do fluróforo é dada pela tabela 1.4. Essa tabela
tem diversas propriedades interessantes: ela é simétrica e nenhuma cor se repete na mesma linha ou na
mesma coluna (como em um jogo de Soduko). Por causa dessas propriedades temos que, se soubermos
a primeira base do par e a cor fica determinada a segunda base. Suponhamos que a primeira base do
par seja um T, se a cor lida pela probe for verde, a segunda base é, portano, um G. Como o primeira
probe do primer PB lê a última base do adaptar P1 , que é conhecida, podemos portanto descobrir qual
é a primeira base da leitura. Tendo a primeira base da leitura e a segunda cor, podemos descobrir a
segunda base, e assim por diante. Podemos pensar nas cores como transformações entre bases, e que se
essas transformações forem encadeads, podemos gerar todas as bases da leitura.
7 Existe também uma codificação alternativa chamada de Four Bases Enconding, ou 4BE, que é opcionalmente utilizada
para fazer uma segunda correção de erros chamada de Exact Call Chemistry ou ECC.
8 Pela construção das probes sequenciaríamos também as 5 últimas bases de P , o que não é interessante. Por isso, após
1
o primer PB , é adicionado um espaçador que desloca a posição inicial do sequenciamento 5 bases para frente.
11
Primer
PA
PA
PA
...
PB
PB
PB
...
Ciclo
1
2
3
...
1
2
3
...
Bases Lidas
s1 s2
s6 s7
s11 s12
...
p0 s1
s5 s6
s10 s11
...
Tabela 1.3: Leitura de bases pelas probes do SOLiD
C. Novamente as inosinas e o fluóroforo são
removidos.
A. Um novo Primer se liga ao template uma
posição para dentro do primer.
primer
5’
primer
... p-2 p-1 p0 s1 s2 s3 s4 s5 s6 s7 ...
... p-2 p-1 p0 s1 s2 s3 s4 s5 s6 s7 ...
Template
Template
D. E o processo segue, sempre com uma base
deslocada à esquerda.
B. Como no primer anterior a probe se anela,
porém deslocada uma base à esquerda.
primer
5’
Probe
primer
... p-2 p-1 p0 s1 s2 s3 s4 s5 s6 s7 ...
Template
Probe
... p-2 p-1 p0 s1 s2 s3 s4 s5 s6 s7 ...
Template
Figura 1.7: Algumas etapas do processo de sequenciamento: Ligação do segundo primer.
Suponha que a última base de P1 seja um T, e que a seguinte sequência de cores tenha sido obtida:
3 1 3 1 0 2 . Se consultarmos a tabela 1.2, temos que T na primeira base com 3 gera um A, portanto
a primeira base da nossa sequência é um A, o que nos gera o seguinte resultado intermediário:
A1 3 1 0 2
Vendo agora, a combinação de A com 1 gera um C, e o nosso segundo resultado intermediário é:
AC 3 1 0 2
Continuando a aplicar as transformações chegamos aos seguintes resultados:
ACG 1 0 2
ACGT 0 2
ACGT T 2
ACGT T C
Portanto, a sequência T313102 codificada em color space representa a sequência ACGTTC em base
space.
12
0
P1
5
10
15
20
25
PA
PB
PC
PD
PE
Figura 1.8: Esquema de cobertura do template pelos probes para uma leitura de 25 bp.
n1
n2
A
C
G
T
A
0
1
2
3
C
1
0
3
2
G
2
3
0
1
T
3
2
1
0
Tabela 1.4: Codificação de bases para cores
1.4
Aplicações do NGS
O número de aplicações do NGS é ilimitado. Qualquer coisa que possa ser transformada em DNA pode
ser sequenciada utilizando o mesmo protocolo. Por isso, se alguém quiser criar uma nova análise, basta
modificar a etapa de preparo de biblioteca e de análise e teremos uma nova aplicação. Mesmo assim,
existe um grupo de aplicações que é mais utilizado pela comunidade científica.
1.4.1
Ressequenciamento genômico
Projetos de ressequenciamento têm como objetivo descobrir diferenças entre o genoma de referência e o
genoma de interesse. Os projetos de ressequenciamento normalmente buscam encontrar diferenças entre
o genoma de uma pessoa saudável e o genoma de uma pessoa com alguma doença, como o câncer ou uma
doença hereditária. O ressequenciamento também tem aplicações agropecuárias: pode-se utiliza-lo para
entender a diferença entre genomas de raças de animais, cultivares de plantas ou isolados de bactérias.
O resultado de um projeto de ressequenciamento é a lista das variantes detectadas. Tendo em mãos
essa lista, o pesquisador pode compará-la com os genes anotados do organismo para tentar entender a
relação entre genótipo e fenótipo. Um parâmetro importante para o ressequenciamento é a cobertura
média do genoma, ou seja, quantas vezes em média cada base do genoma foi coberta. Suponha um
genoma de 3 Gbp: para ter uma cobertura de 20× é preciso gerar 60 Gbp de dados. Para detectar
variantes germinativas é recomendada uma covertura entre 20× e 30×, porque essas variantes vão ter
uma frequência em torno de 100% para mutações homozigotas e 50% para variações heterozigotas. Já
para detectar variantes somáticas, é necessária uma cobertura maior, porque essas variantes ocorrem
com frequências menores do que as variantes germinativas. A capacidade de detecção da variante vai
depender da frequência mínima que se deseja detectar e da acurácia das leituras geradas.
1.4.2
Target Sequencing
O ressequenciamento de um genoma inteiro gera um volume enorme de dados e permite fazer uma identificação completa das variações no genoma. Porém, muitas vezes, os pesquisadores só estão interessados
nas variações das regiões codificantes, ou até mesmo num subconjunto de genes e, portanto, sequenciar
13
todo o genoma para depois selecionar a parte que interessa é bastante ineficiente. Uma alternativa ao
ressequenciamento completo é o target sequencing, na qual a amostra é tratada para selecionar somente
as regiões de interesse.
Existem duas principais abordagens para o target sequencing: captura por hibridização, método utilizado pelos kits SureSelect da Agilent e TargetSeq da Life, e captura por amplificação como o RainStorm
da Rain Dance e o AmpliSeq da Life.
Recomenda-se uma alta cobertra da região de interesse pois, como estamos restringindo o sequenciamento às regiões de interesse, queremos garantir que todas as bases tenham cobertura suficiente para que
possamos fazer a identificação de variações de maneira confiável. Uma recomendação corrente é cobrir a
região de interesse com uma média de cobertura entre 80 e 100 vezes. Mesmo assim, o target sequencing
oferece vantagens de custo e de processamento devido ao volume reduzido de dados, um genoma humano
sequenciado a 20× gera 60Gbps de sequências, enquanto que um exoma sequenciado a 100× gera 5Gbps
de dados.
1.4.3
RNA Seq
RNA Seq, também chamado the Whole Transcriptome Shotgun Sequencing, é o uso de NGS para sequenciar cDNA com a intenção de capturar a informação do transcriptoma de um organimo. Ao contrário de
outras técnicas, como Microarray ou RT-PCR, o RNA Seq não necessita uma lista pre-definida dos gene
que se deseja detectar. A princípio, qualquer transcrito que estiver sendo expresso pode ser detectado se
o experimento tiver cobertura suficiente. Além disso, o RNA Seq permite detectar, além da expressão,
eventos de splicing alternativo e expressão de genes desconhecidos.
Segundo as diretrizes do projeto ENCODE[35], para estudar somente a expressão de transcritos
polyA, uma cobertura de 20 a 25 milhões de reads curtos mapeados é suficiente. Mas para detectar
transcritos raros ou variações e isoformas em uma amostra de mamíferos, é necessário uma cobertura
de 100 a 200 milhões de reads. O projeto ENCODE também recomenda a realização de duas ou mais
replicatas biológicas. Normalmente não é necessário realizar réplicas técnicas.
Um dos problemas em manipular RNA é a sua fragilidade. Por isso é preciso tomar muito cuidado
na manipulação da amostra e também é preciso avaliar a sua qualidade antes de fazer o sequenciamento
(utilizando, por exemplo, o BioAnalyzer da Agilent). Caso a amostra esteja degradada, o resultado é
uma taxa muito baixa de reads mapeados. Outro problema é o RNA Ribossomal, ele corresponde a
uma grande quantidade da massa de RNA de uma célula e, se não for removido da amostra no final, a
maioria dos reads será de RNA ribossomal, o que normalmente não é objetivo do experimento. É possível
utilizar um kit de depleção de RNA Ribossomol, como o Ribominus da Invitrogen, ou então fazer um
enriquecimento para RNA com calda polyA, como o poly(A) Purist também da Invitrogen. Caso haja
interesse também em RNAs não codificantes é melhor utilizar somente o Ribominus. Caso contrário, o
poly(A) Purist é mais eficiente (alguns grupos utilizam os dois para garantir a remoção dos ribossomais).
1.4.4
Sequenciamento denovo
Quando não se tem um genoma de referência, é necessário realizar a montagem denovo. O processo de
montagem denovo é muito mais trabalhoso do que o mapeamento com referência. É necessário ter uma
cobertura muito maior e os programas de montagem cometem muito mais erros do que os programas
de mapeamento. Apesar disso, é possível obter bons resultados na montagem de genomas bacterianos
com relativo pouco esforço. Para genomas de organismos superiores, é necessário combinar diversas
tecnologias de sequenciamento e utilizar computadores com quantidades massivas de memória RAM
para efetuar o processo de montagem do genoma.
1.4.5
Metagenoma
A metagenômica é o estudo do material genético extraído diretamente do ambiente. Normalmente,
quando se quer estudar o genoma de uma bactéria, é feita uma cultura para garantir que se está sequenciando um único genoma. Porém, a diversidade de micro-organismos presentes no ambiente é muito maior
do que é possível acessar via sequenciamento individual de bactérias. Por isso, o estudo do metagenoma
é importante.
Existem dois tipos de estudo de metagenomas:
14
1. Estudo de diversidade utilizando o gene ribossomal 16s: Nesse tipo de estudo amplifica-se por PCR
a sequência 16s e se compara o resultado contra um banco de dados de bactérias conhecidas. Com
isso, é possível avaliar e comparar a diversidade de bactérias presentes na amostra.
2. Shotgun Metagenomics: Nesse segundo caso não se faz nenhuma seleção de alvo. Todo o DNA
extraído da amostra é fragmentado e sequenciado. A análise consiste em montar o “metagenoma”
da amostra para tentar identificar, além da diversidade de genomas, novos genes.
A metagenômica é uma área muito ativa de pesquisa e os métodos de análise ainda são muito manuais.
15
16
Capítulo 2
Arquivos de Sequência
Em princípio, é bastante simples representar uma sequência de DNA em formato texto. Cada base pode
ser presentada por um caracter: A para Adenina, C para Citosina, G para Guanina e T para timina.
O código oficial para representar DNA é mantido pela IUPAC e inclui também códigos para identificar
bases ambíguas, ou seja, os casos em que não se sabe ao certo a base correta, mas se sabe que deve ser
um C ou T ou algo similar. O código completo está na tabela 2.1.
A
C
G
T (ou U)
R
Y
S
W
K
M
B
D
H
V
N
. ou -
Adenina
Citosina
Guanina
Timina (ou Uracila)
A ou G
C ou T
G ou C
A ou T
G ou T
A ou C
C ou G ou T
A ou G ou T
A ou C ou T
A ou C ou G
qualquer base
gap
Tabela 2.1: Código IUPAC para representar o DNA
Além da informação da base, os sequenciadores também produzem uma estimativa da probablidade
da base detectada estar correta. Usualmente essa probabilidade é representada pelo “Phred Quality
Score”, assim chamado porque foi utilizado pela primeira vez no software phred[9]. A fórmula para
calcular os valores de phred é:
Q = −10 log10 Perro
(2.1)
Onde Perro é a probabilidade da base ter sido identificada de maneira errada1 . Na figura 2.1, temos
o gráfico da função que calcula o phred score e na tabela 2.2 temos exemplos de alguns valors de phred.
Nela vemos que, por exemplo, uma base com phred 20 tem 99% de acurácia, ou seja, uma chance em
100 de estar errada.
1 O score phred é construído com base em uma série de preditores de qualidade que são calibrados com dados reais para
gerar uma estimativa de probabilidade de erro.
17
Q
10
20
30
40
50
Chance de erro
1 em 10
1 em 100
1 em 1000
1 em 10000
1 em 100000
Acurácia da base
90 %
99 %
99,9 %
99,99 %
99,999 %
Tabela 2.2: Valores de qualidade phred, probabilidades de erro e acurácia
Phred Score
40
35
Phred Score
30
25
20
15
10
5
0
0.01
0.02
0.03
0.04
0.05
P de erro
0.06
0.07
0.08
0.09
0.1
Figura 2.1: Gráfico da função que calcula o Phred Score
Tipicamente, os valores de phred score estão entre 1 e 40. Até é possível sequenciar com uma acurácia
maior que 40, porém, a acurácia das etapas anteriores de 99,99%, e a acurácia do processo inteiro não
pode ser maior do que da parte menos acurada, o que é uma consequência da propagação derros.
A maneira mais simples de representar os valores de qualidade em formato texto é uma lista de
inteiros, o que adiciona de 2 a 3 bytes de dados para cada base sequenciada (1 a 2 caracteres para o valor
da qualidade e um caracter como separador entre os valores). Antes do NGS essa forma de representação
era prática porque o volume de dados era pequeno, mas recentemente se tornou necessário criar novos
formatos que economizassem bytes.
Neste capítulo, vamos analisar os formatos de representação de dados de sequenciamento mais usados
e como manipulá-los utilizando ferramentas gratuitas.
2.1
2.1.1
Fasta e FastQ Files
Fasta format
A forma mais universal de representar sequências biológicas é o formato fasta. Este formato foi criado
para o programa de alinhamento de DNA e proteínas FASTA[26]. Por ser um formato texto muito
simples, ele foi sendo adaptado para as mais diversas aplicações. Mas por outro lado muitas aplicações
não seguem o padrão de maneira estrita.
De maneira geral, um arquivo fasta contém uma série de cabeçalhos seguidos pelo texto da sequência.
Cada cabeçalho é definido por uma linha que se inicia com o caracter >. Pelo padrão, linhas que iniciam
com o caracter ; são consideradas comentários, mas algumas aplicações utilizam o caracter # para essa
função. Abaixo vemos um exemplo de arquivo fasta:
18
>HSBGPG Human gene for bone gla protein (BGP) (fragment)
GGCAGATTCCCCCTAGACCCGCCCGCACCATGGTCAGGCATGCCCCTCCTCATCGCTGGGCACAGCCCAGAGGGT
ATAAACAGTGCTGGAGGCTGGCGGGGCAGGCCAGCTGAGTCCTGAGCAGCAGCCCAGCGCAGCCACCGAGACACC
ATGAGAGCCCTCACACTCCTCGCCCTATTGGCCCTGGCCGCACTTTGCATCGCTGGCCAGGCAGGTGAGTGCCCC
CCTGGAGCCCAGGAGGGAGGTGTGTGAGCTCAATCCGGACTGTGACGAGTTGGCTGACCACATCGGCTTTCAGGA
GGCCTATCGGCGCTTCTACGGCCCGGTCTAGGGTGTCGCTCTGCTGGCCTGGCCGGCAACCCCAGTTCTGCTCCT
CTCCAGGCACCCTTCTTTCCTCTTCCCCTTGCCCTTGCCCTGACCTCCCAGCCCTATGGATGTGGGGTCCCCATC
ATCCCAGCTGCTCCCAAATAAACTCCAGAAG
>HSGLTH1 Human theta 1-globin gene (fragment)
CCACTGCACTCACCGCACCCGGCCAATTTTTGTGTTTTTAGTAGAGACTAAATACCATATAGTGAACACCTAAGA
CGGGGGGCCTTGGATCCAGGGCGATTCAGAGGGCCCCGGTCGGAGCTGTCGGAGATTGAGCGCGCGCGGTCCCGG
GATCTCCGACGAGGCCCTGGACCCCCGGGCGGCGAAGCTGCGGCGCGGCGCCCCCTGGAGGCCGCGGGACCCCTG
CTTCTTGCCGTGCTCTCTCGAGGTCAGGACGCGAGAGGAAGGCGC
Neste exemplo, vemos duas sequencias: uma identificada com HSBGPG e outra como HSGLTH1.
Depois de cada identificador temos um espaço e em seguida um comentário sobre a sequência. Depois
disso temos o corpo de cada sequência, o padrão manda que a sequência seja quebrada em linha entre 70
e 132 caracteres. No exemplo, está uma sequência de nucleotídeos, mas o arquivo fasta pode ser utilizado
para representar qualquer tipo de sequência biológica.
O arquivo fasta pode vir acompanhado de um arquivo com extensão .qual. Nesse arquivo estão
os valores de qualidade associados com cada base. Ele tem basicamente o mesmo formato do arquivo
.fasta, porém, no lugar da sequência de bases, ele tem os valores de qualidade na escala phred separados
por espaços. Abaixo temos um exemplo de arquivo .fasta e o respectivo arquivo .qual.
FASTA
>RWBG8:4:5
CTCATTGCCCTCAACACAGTGGAGCGAATTCCTTTGGAAAACCTGCAGATCATCAGAGGAAATATGTACT
ACGAAAATTCCTATGCCTTAGCAGTCTTATCTAACTATGA
QUAL
>RWBG8:4:5
23 16 31 29 30 26 31 31 32 25 32 33 33 29 32 32 31 29 29 29 33 29 31 31 33 31
30 22 29 20 26 18 24 26 12 26 19 25 28 29 13 29 24 32 32 30 30 30 34 33 33 32
33 33 33 33 33 33 29 33 33 25 31 31 29 29 24 24 24 24 24 24 29 29 31 31 18 29
25 29 21 25 25 13 13 15 19 26 22 26 27 28 29 25 31 28 33 29 33 33 33 33 33 29
33 33 34 34 30 30
Como o fasta é um formato de texto, é possível utilizar ferramentas padrão do unix para manipulá-lo.
Para contar o número de sequências em um arquivo fasta, usa-se o seguinte comando:
grep -c "^>" <arquivo.fasta>
Para contar o número de bases no arquivo pode-se utilizar este outro comando:
grep -v "^[>;]" <arquivo.fasta> | wc -c
2.1.2
FastQ format
O formato fasta/qual foi amplamente utilizado para representar sequências geradas por sequenciadores
de Sanger. Porém com o aumento da capacidade dos sequenciadores os arquivos neste formato passaram
a ficar muito pesados. Uma maneira de reduzir o volume de dados foi a criação do formato fastQ. Neste
formato as bases e os valores de qualidade são representados no mesmo arquivo. Além disso as qualidades
são codificadas com caracteres ASCII ao invés de uma sequência de números. Essa codificação é mais
eficiente porque cada valor de qualidade precisa em geral de 3 bytes, dois digitos do valor mais o espaço,
enquanto que no fastQ cada qualidade precisa de somente 1 byte. Abaixo temos um exemplo de arquivo
fastQ:
19
@SEQ_ID
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
!’’*((((***+))%%%++)(%%%%).1***-+*’’))**55CCF>>>>>>CCCCCCC65
Nesse formato, o cabeçalho é definido pelo caracter @, e é seguido pelo identificador da sequência. Na
linha seguinte tem-se a sequência e, ao contrário do formato fasta, que manda quebrar a sequência em
diversas linhas, no fastQ deve-se ter somente uma linha (mas muitas vezes essa regra não é respeitada).
Na linha seguinte tem-se o caracter + que pode ser seguido pelo identificador da sequência novamente, e
na última linha tem-se os valores de qualidade representados em ASCII.
Para converter o valor de qualidade phred para fastQ adiciona-se 33 a ele e procura-se o caracter
ASCII correspondente. Este é o padrão definido pelo Sanger Institute e mais utilizado atualmente.
Porém as primeiras versões da pipeline de análise da Illumina definem o valor de qualidade como phred
mais 64, o que pode causar problemas para quem estiver manipulando esses arquivos. A partir da versão
1.8 da pipeline de análises a Illumina também passou a adotar o padrão do Sanger.
Para converter de fastQ para fasta pode-se utiliar o programa seqtk que vem junto com o samtools:
seqtk fq2fa in.fastq > out.fasta
2.2
SFF File
O Standard Flow Format[32], ou SFF, é um arquivo binário que foi desenvolvido em conjunto pela
454 Life Science, o Whitehead Institute e pelo Sanger Institute para representar sequências geradas
por um sequenciador baseado em fluxos como o 454 ou o Ion Torrent. Nesse arquivo a sequência é
representada em termos de fluxos, ou seja, as bases e o tamanho normalizado do sinal detectado. Por
exemplo, a sequência AATGG é representada com o equivalente a A3 T1 G2, mas, como a relação
entre o sinal e o tamanho do homopolímero não é totalmente exata, o comprimento dos homopolímeros
é representado por números fracionados. Assim, o exemplo anterior pode ser algo como: A2.9 T1.1
G1.5. Tal informação é perdida devido aos arredondamentos executados quando se converte de SFF
para fasta, mas um programa que trabalhe diretamente com SFF pode utilizar essa informação para
resolver ambiguidades. Essa informação em termos de intensidade de sinal para cada fluxo também é
chamada de flow space em oposição à sequência pura que está em base space.
O arquivo SFF contém um cabeçalho com informações da corrida, assim como um cabeçalho por
read. Além de informar o nome de cada read e o tamanho, esse cabeçalho contém as informações de
clipping de adaptador e clipping de qualidade. Tendo o arquivo SFF, é possível extrair as sequências
sem o clipping, o que pode ser útil para algumas aplicações.
2.2.1
Converter arquivo SFF para Fasta ou FastQ
Muitos programas não lidam diretamente com arquivos SFF, por isso é necessário fazer a conversão para
formatos mais antigos, como fasta ou fastQ2 . Na tabela 2.3 está a lista de alguns conversores de SFF
gratuitos.
Nome
sff_extract
sff2fastq
Flower
Linguagem
Python
C
Haskell
URL
http://bioinf.comav.upv.es/sff_extract/
https://github.com/indraniel/sff2fastq
http://biohaskell.org/
Tabela 2.3: Conversores de SFF
O conversor mais fácil de utilizar é o sff_extract, pois ele é somente um script em python. Porém,
ele é o conversor mais lento. O sff2fastq é o mais rápido, porém é menos flexível, pois só gera arquivo
no formato fastQ. Por fim, o Flower é rápido e flexível, mas necessita ter a linguagem de programação
Haskell instalada no sistema.
2 O Torrent Browser fornece o resultado da corrida no formato BAM, mas ele também gera as sequências nos formatos
SFF e fastQ por meio de plugins.
20
Converter utilizando o sff_extract
Para utilzar o sff_extract você precisa baixar o script. O nome do arquivo será sff_extract_<versão>.
Renomeie para sff_extract e torne o arquivo executável com o comando chmod +x sff_extract. Para
converter de SFF para fasta/qual utilize o seguinte comando:
sff_extract -o <prefixo> <entrada.sff>
Onde <prefixo> é o nome dos arquivos .fasta e .qual que vão ser gerados e <entrada.sff> é o
nome do arquivo sff que se deseja converter. Este comando vai gerar três arquivos:
• <prefixo>.fasta Com as sequências em formato fasta
• <prefixo>.fasta.qual Com os valores de qualidade em formato phred
• <prefixo>.xml Arquivo XML com as informações extras de cada read, em especial, as informações
de clipping de cada read.
Abaixo temos um exemplo de um registro em um arquivo XML gerado:
<?xml version="1.0"?>
<trace_volume>
<trace>
<trace_name>RWBG8:4:5</trace_name>
<clip_quality_right>149</clip_quality_right>
<clip_vector_left>5</clip_vector_left>
<clip_vector_right>114</clip_vector_right>
</trace>
...
</trace_volume>
Todos os valores de clipping são indexados a partir de 1. Para encontrar a primeira base não trimada,
utiliza-se a seguinte expressão:
f irst_base_position = max(1, clip_quality_lef t, clip_adapter_lef t)
(2.2)
E para achar a última base não clipada utiliza-se (caso os clip_adapter_right ou clip_quality_right
sejam 0, o valor é substituído pelo número total de bases no read):
last_base_position = min(clip_quality_right, clip_adapter_right)
(2.3)
Portanto, o read no exemplo acima possui bases não clipadas entre as posições 5 e 114. Toda essa
informação de clipagem é indicada por soft clipping, ou seja, as bases do adaptador e as de baixa
qualidade são indicadas em minúsculas. Para fezer o hard clipping e gerar um arquivo fasta “limpo”,
utilize o seguinte comando:
sff_extract -c -o <prefixo> <entrada.sff>
Neste caso, serão gerados os mesmos arquivos, porém o arquivo XML não terá as informações de
clipping porque o clipping já foi feito nos arquivos fasta e qual.
Para gerar o arquivo em formato FastQ, utilize:
sff_extract -Q -o <prefixo> <entrada.sff>
ou
sff_extract -c -Q -o <prefixo> <entrada.sff>
Esse comando vai gerar o arquivo <prefixo>.fastq e <prefixo>.xml, e da mesma forma que no
exemplo anterior, se for adicionada a opção -c, o resultado será com hard clipping.
21
Utilizando o seq_crumbs
O sff_extract foi suplantado pelo pacote seq_crumbs. Diferentemente do programa anterior, o seq_crumbs
foi concebido em módulos, que podem ser combinados de maneira muito mais versátil. Além disso, ele
utiliza a biblioteca biopython. Para baixar o programa, utilize esse endereço:
https://github.com/JoseBlanca/seq_crumbs
Já o biopython está disponível em:
http://biopython.org/wiki/Download
Para fazer a conversão de SFF para fastQ utiliza-se:
sff_exrtract -c -o <output> <entrada.sff>
Note que a versão do seq_crumbs só gera arquivos em formato fastq, não tendo mais a opção de
gerar fasta/qual. Como no programa anterior, a opção -c pede para o programa fazer o trimming das
sequências.
Para fazer a conversão de arquivos SFF de mate-pair vemos uma diferença muito maior, pois temos
que combinar o programa sff_extract com o programa split_matepairs:
sff_extract <entrada.sff> |
split_matepairs -l ION_TORRENT
A combinação desses dois comandos é equivalente ao sff_extract -l. Mas o seq_crumbs oferece
mais opções de manipulação de arquivos. É possível também gerar dois arquivos de mates desentrelaçados, ou seja, um arquivo com a primeira tag e outro com a segunda. Para isso utilize:
sff_extract <entrada.sff> |
split_matepairs -l ION_TORRENT |
pair_matcher -p <orphan.fastq> |
deinterleave_pairs -o <out.1.fastq> <out.2.fastq>
O comando pair_matcher remove as tags que estão sem os seus respectivos pares e coloca no
arquivo <orpha.fastq>, já o deinterleave_pairs separa os pares nos arquivos <out.1.fastq> e
<out.2.fastq>.
Utilizando o Flower
O Flower é um utilitário para ler arquivos SFF feito na linguagem de programação Haskell. Por ser
uma linguagem compilada ele é muito mais do que o sff_extract, que foi escrito em Python. Duas
desvantagens é que o runtime do Haskell é menos ubíquo do que do Python e ele não gera o arquivo
XML com as informações de clipagem necessárias para o Mira (ver 5.1).
Tendo instalado o Haskell, é muito fácil instalar o Flower. Basta utilizar o programa Cabal da seguinte
maneira:
cabal install biosff
Para converter um arquivo SFF para fastQ, utiliza-se:
flower -q <entrada.sff> > saida.fastq
Além de converter o SFF, o flower também permite inspecionar o arquivo. Para visualizar o SFF em
formato texto, use:
flower entrada.sff | more
Por fim, o flower gera uma visualização do flow space em um formato tabulado muito útil. Para
gera-la:
flower -F <entrada.sff>
Segue um exemplo de resultado:
22
...
RWBG8:9:36
RWBG8:9:36
RWBG8:9:36
RWBG8:9:36
RWBG8:9:36
RWBG8:9:36
RWBG8:9:36
RWBG8:9:36
...
81
82
83
84
T
C
G
A
85
86
87
88
T
C
G
A
1.05 Qual {unQual = 34}
1.03 Qual {unQual = 27}
0.00
5.72 Qual {unQual = 27},Qual
Qual
Qual
1.93 Qual {unQual = 27},Qual
0.97 Qual {unQual = 26}
0.00
0.00
{unQual
{unQual
{unQual
{unQual
=
=
=
=
27},
27},Qual {unQual = 27},
27},Qual {unQual = 7}
21}
Note que mesmo os fluxos que não tiveram sinal são registrados no arquivo SFF e também que,
para os homopolímeros, temos uma estimativa de qualidade para cada uma das bases (quebra de linha
adicionada para facilitar a visualização).
2.3
Unmapped BAM
O formato BAM, discutido na seção sobre mapeamento (seção 2.5.2), é um formato criado para representar o mapeamento dos reads de NGS em um genoma de referência. Ele é um formato binário,
compactado, indexável e amplamento suportado que pode representar tanto reads mapeados como reads
não mapeados. Os campos opcionais do formato BAM permite grande flexibilidade. É possível adicionar
as informações de flow space do Ion e do 454 ou o color space do SOLiD direto no arquivo BAM, fazendo
dele uma alternativa para os formatos nativos.
Para converter de Unmapped BAM para fastQ, pode-se utizar o comando SamToFastq do Picard
(ver seção 2.5.4) da sequinte maneira:
java -jar SamToFastq.jar
2.4
I=<input.bam> FASTQ=<out.fastq>
XSQ Format
O XSQ é o formato nativo do SOLiD 5500. Ele é um formato binário que diminiu em até 60% o número
de bytes necessários para representar o conjunto de sequências no formato fasta/qual. Ele utiliza como
base o HDF5, que é um formato criado para armazenar grandes volumes de dados numéricos.
Esse formato permite representar os reads tanto em base quanto em color space assim como reads
únicos e pareados. Sendo um formato binário, ele também permite o acesso aleatório dos reads contidos
nele. Por fim, é possível adicionar metadados sobre a corrida no próprio arquivo de sequência, facilitando
o armazenamento e a organização dos dados.
As ferramentas de conversão de XSQ para csfasta e vice-versa, assim como a documentação do
formato, estão disponíveis em:
http://www.lifetechnologies.com/us/en/home/technical-resources/software-downloads/xsqsoftware.html
Porém, esses conversores só estão disponíveis para Linux CentOS ou RedHat 4 ou 5. Para converter
de XSQ para csfasta utiliza-se:
./convertFromXSQ.sh -f -o <diretorio de sáida>
<in.xsq>
Será criado um diretório Libraries dentro do <diretório de saída>. Dentro de Libraries, será
criado um diretório para cada tag – F3, R3, etc – e dentro deste um diretório reads com os arquivos
csfasta, qual e fastq (caso o sequenciamento tenha sido feito com ECC). A opção -f pede para o programa
filtrar os reads marcados como filtrados pelo basecaller e portanto é altamente recomendável.
Também é possível converter de csfasta/qual para XSQ com o comando convertToXSQ.sh. Dependendo do tipo de biblioteca, é preciso passar diferentes argumentos. Para biblioteca de fragmentos
utiliza-se:
23
./convertToXSQ.sh
-x <out.xsq> --mode Fragment
--c1 <F3.csfasta> --q1 <F3.QV.qual>
--libraryName <libname> --runStartTime "0000-00-00 00:00:00"
E para biblioteca de Long Mate Pair:
./convertToXSQ.sh
-x <out.xsq> --mode LMP
--c1 <F3.csfasta> --q1 <F3.QV.qual>
--c2 <R3.csfasta> --q2 <R3.QV.qual>
--libraryName <libname> --runStartTime "0000-00-00 00:00:00"
--libraryInsertSizeMinimum <inserto min.>
--libraryInsertSizeMaximum <inserto máx.>
Nesse caso temos que informar, além dos campos do arquivo utilizados no caso da biblioteca de
fragmentos, o arquivos do de sequência e qualidade do mate e, o tamanho mínimo do e máximo do
inserto.
24
chapterMapeamento de Sequências
Após um experimento de NGS é quase sempre necessário fazer o mapeamento das leituras geradas
em um genoma de referência. O primeiro programa para fazer esse mapeamento foi o BLAT3 , criado
por Jim Kenth para mapear leituras com alta similaridade contra um genoma de referência. Porém, o
BLAT não consegue alinhar regiões com menos de 40bp e também não tem performance suficiente para
alinhar os milhões de reads gerados por NGS. Os primeiros mapeadores open source otimizados para
NGS foram o MAQ[21] e o SOAP[24], ambos mapeadores que utilizam hash tables para acelerar a busca,
com a diferença que o MAQ indexa os reads enquanto o SOAP indexa o genoma de referência. Com o
aumento do throughput, dos sequenciadores a abordagem de indexar os reads se tornou inviável e por
isso os mapeadores mais recentes indexam a referência.
O problema do uso de hash table é o uso de memória. Alguns mapeadores, como o mapreads
do SOLiD, podem dividir a hash em partes e fazer o mapeamento em etapas de forma a permitir o
mapeamento de grandes genomas mesmo com pouca memória. Alternativamente, é possível utilizar
um FM-Index, que indexa o genoma de referência compactado pela Burrows-Wheeler[42, 10] e entre os
programas que implementam esta técnica estão o BWA[23, 20],bowtie[17] e o SOAPv2[25].
Para aumentar a eficiência os algoritmos citados diminuem a sensibilidade, limitando o número de
mismatches permitidos. Como os reads de NGS normalmente possuem uma qualidade maior no início
do read, utiliza-se uma estratégia de seed and extend: na primeira fase pega-se o início do read, entre 25
e 30 bases, e faz-se a busca permitindo poucos erros – como 2 por exemplo. Encontrada uma posição de
ancoramento do read é feita a extensão do alinhamento de modo a maximizar o score de alinhamento4 .
Na seção seguinte é explorado o format SAM/BAM, que é o formato universal para representar
alinhamentos de NGS e nas próximas seções será mostrado como utilizar alguns mapeadores.
2.5
SAM e BAM Files
O formato SAM, Sequence Alignment/Mapping, é um formato texto criado para representar o resultado
do alinhamento dos reads de NGS contra um genoma de referência[12, 22]. A versão binária no SAM
é chamado de BAM, de Binary SAM, e contém exatamente as mesmas informações, mas em formato
binário. Além do formato binário ser mais eficiente, o arquivo BAM também é compactado em blocos,
o que permite ao mesmo tempo a redução do uso de armazemento e o carregamento parcial do arquivo,
o que é muito importante para programas de visualização.
2.5.1
Estrutura do arquivo SAM
As primeiras linhas do arquivo SAM são o cabeçalho. Estas linhas começam com o caracter @ seguido
por um código de 2 caracteres que identificam o tipo de informação contina na linha. A lista de códigos
está na tabela 2.4. Depois do cabeçalho temos os alinhamentos propriamente ditos, um por linha, com
campos separados por TABs. Na tabela 2.5 está a lista campos de cada alinhamento.
Código
@HD
@SQ
@RG
@PG
@CO
Descrição
Identifica o início do arquivo SAM e a versão dele.
Identifica dada uma das sequências no arquivo de
referência
Read group: identifica conjuntos de reads dentro do
arquivo. Esse registro é muito importante quando
são combinados os resultados múltiplas corridas em
um único arquivo.
Lista de programas utilizados no arquivo.
Comentários
Tabela 2.4: Headers do arquivo SAM
3 O BLAST e o FASTA são programas mais antigos, mas o objetivo deles é fazer buscas em bancos de sequencias e não
especificamente mapear reads em um genoma montado.
4 O BWA-long utiliza uma abordagem um pouco diferente. Em vez de fazer o seed and extend, ele realiza um alinhamento
Smith-Waterman contra o índice BWT do genoma
25
Col.
1
2
3
4
5
6
7
8
9
10
11
12
Nome
QNAME
FLAG
RNAME
POS
MAPQ
CIGAR
RNEXT
PNEXT
TLEN
SEQ
QUAL
FIELDs
Descrição
Nome do read
Bits indicando diversas informações sobre o alinhamento
Nome da sequência na referência
Posição mais à esquerda do read que se alinha na referência
Qualidade do Mapeamento
CIGAR string
Referência do próximo read no par/segmento
Posição do próximo read no par/segmento
Tamanho do template observado
Sequência do read
Qualidade do read codificada utilizando a convenção do fastQ do Sanger
Campos opcionais
Tabela 2.5: Alinhamento no arquivo SAM
Abaixo segue uma descrição mais detalha de cada um dos campos:
1. QNAME: Nome do read ou ’*’ para indicar que a informação não está disponível.
2. FLAG: Bits descrevendo algumas propriedades do alinhamento. o layout dos bits esta abaixo e o
significado de cada bit está na tabela 2.6.
0
M
1
A
2
4
5
6
U UM R RM F
Sim.
M
A
U
UM
R
RM
3
valor
1
2
4
8
16
32
F
L
S
64
128
256
Q
D
512
1024
7
L
8
9
10
S
Q
D
11
12
13
14
15
Descrição
Template com múltiplos segmentos, ou seja, mate-pair ou pairend5 .
Cada segmento está corretamente alinhado.
Segmento não mapeado.
Próximo segmento não mapeado.
O campo SEQ é o reverso complementar do read.
O campo SEQ do próximo segmento é o reverso complementar do
read.
Esse segmento é o primeiro do template.
Esse segmento é o último do template.
Alinhamento secundário. Essa flag indica que existe outro alinhamento desse read que é considerado o primário pelo mapeador.
Esse alinhamento não passou pelo controle de qualidade.
Esse read foi considerado uma duplicata de PCR ou ótica.
Tabela 2.6: Significado e valor de cada flag do format SAM.
Por exemplo, um read corretamente mapeado vai ter um valor de flag 2, mas se ele mapear na
fita oposta a flag vai ser 2 + 16 = 18. Caso o read seja o primeiro de um par a flag vai ser
1 + 2 + 16 + 64 = 83.
3. RNAME: Nome da sequência de referência ou um número indicando qual o registro @SQ do header
com a correspondente sequência. Um read não mapeado tem o valor ’*’ neste campo.
4. POS: Posição mais à esquerda do alinhamento do read com a referência (valores começando em
1). Se o valor for 0, o read não está alinhado.
5. MAPQ: Qualidade do mapeamento. Este valor é representado como um inteiro com interpretação
similar ao índice phred de qualidade, ou seja, P = −10 log10 Q, onde Q é a probabilidade do read
estar mapeado de maneira errada.
26
6. CIGAR: Sequência de caracteres que descrevem como o read está mapeado na referência. O
significado de cada caracter é o seguinte:
M
I
D
N
S
H
P
=
X
Alignment Match (pode ser um match ou um mismatch)
Inserção na referência
Deleção na referência
Intron (este caracter só é utilizado para representar mRNA’s)
Soft clipping (corta uma base presente em SEQ)
Hard clipping (corta uma base não presente em SEQ)
Padding (deleção em uma padded reference)
Sequence Match
Sequence Mismatch
7. RNEXT: Sequência na referência do próximo segmento. Se RNEXT for ’*’ então esta informação
não está presente e se for ’=’ RNEXT tem o mesmo valor e RNAME.
8. PNEXT: Posição do próximo segmento, 0 caso esta informação não esteja disponível.
9. TLEN: Tamanho do inserto entre os segmentos. O segmento à esquerda tem sinal positivo e o
segmento à direita tem sinal negativo, o valor 0 indica que essa informação não está presente.
10. SEQ: Sequência do segmento. Pode ser ’*’ se o valor não tiver sido armazenado. Um ’=’ denota
uma base idêntica à da referência.
11. QUAL: Qualidade das bases de SEQ em formato Sanger FastQ.
Após os campos obrigatórios, pode haver campos opcionais. Esses campos têm o formato
T AG : T Y P E : V ALU E
, onde tag é uma sequência de 2 caracteres que inidcam o campo, TYPE indica o tipo de dado e VALUE
é o valor do campo, para a documentação completa veja a especificação do formato SAM[12].
Na figura 2.2 vemos alguns alinhamentos e as entradas equivalentes em formato SAM. O primeiro
read, r001, tem as seguintes flags 163(= 1 + 2 + 32 + 128) = A + M + RM + L, portanto está corretamente
mapeado (A), é o segundo membro de um par (M +L) e o seu par mapeia na posição 37 na fita oposta (flag
RM ). O read r002 posui três soft-clipped bases, a coordenada mostrada no arquivo SAM é da primeira
base alinhada. A string CIGAR deste alinhamento contém um P (padding) que corretamente alinha a
sequência inserida. A informação de padding pode ser omitida se o alinhador não suportar alinhamento
múltiplo de sequências. As últimas 6 bases do read r003 mapeiam na posição 9, e as 5 primeiras mapeiam
na posição 29 da fita reversa. O hard clipping (H) indica bases que não estão presentes na referência. A
tag opcional NM indica o número de mismatches no alinhamento. O read r004 alinha sobre um intron,
fato indicado pelo caracter N.
Figura 2.2: Exemplos de alinhamentos e os respectivos registros em formato SAM[22].
27
2.5.2
BAM File
O arquivo BAM tem exatamente a mesma estrutura do arquivo SAM, porém as informações estão
codificadas em formato binário para economizar espaço em disco e na memória. Além disso, o formato
BAM possui uma compactação em blocos chamada BGZF, que permite o acesso aleatório ao arquivo
mesmo ele estando compactado. Por ter esssa estrutura de blocos, o arquivo BAM pode ser carregado
parcialmente, o que permite a visualização de arquivos BAM muito grandes, sem exceder a capacidade
da memória RAM. Para fazer esse carregamento, o visualizador utiliza um arquivo auxiliar que indexa
os blocos do arquivo BAM em relação às coordenadas genômicas. Esse arquivo tem o mesmo nome do
arquivo BAM, mas com a extensão .bai, de BAM index. Ele também tem que estar no mesmo diretório
que o arquivo BAM.
2.5.3
Samtools
Junto com o formato SAM/BAM foi criada a ferramenta samtools para manipular esses arquivos. Ele
está disponível no site:http://samtools.sourceforge.net/. Para baixar o código fonte do programa,
vá para a URL:
http://sourceforge.net/projects/samtools/files/samtools/0.1.18/
Após baixar o código fonte compile, com o comando make, será gerado um executável chamado
samtools o qual você pode copiar para o diretório que quiser, como por exemplo /usr/local. A
estrutura geral de execução do samtools está abaixo, command é um dos comandos reconhecidos pelo
samtools e <arg>* são as opções para cada um dos comandos.
samtools <command> <arg>*
A seguir, uma lista de receitas úteis para manipular arquivos SAM/BAM:
• Converter entre SAM e BAM: Para fazer a conversão entre a versão binária e texto utiliza-se
o comando view:
– BAM para SAM: samtools view <input.bam> > <output.sam>
– SAM para BAM: samtools view -S -b <input.sam> > <output.bam>
• Visualizar o header de um arquivo BAM: Para extrair somente o header de um arquivo
BAM, use:
samtols view -H <arquivo.bam>
• Ordenar e indexar um arquivo BAM: Para visualizar e também para realizar diversas análises
é preciso ordenar os alinhamentos de acordo com a posição genômica. Para isso utiliza-se o seguinte
comando:
samtools sort <arquivo.bam> <novo.nome>
Onde <novo.nome> é o prefixo do nome do novo arquivo que vai ser gerado com os reads ordenados.
Esse nome não pode ser o mesmo do arquivo original e não precisa colocar a extensão .bam.
Ela é adicionada automaticamente, e se você colocá-la no final vai ter um arquivo com extensão
.bam.bam, o que não é muito elegante. Caso o arquivo bam não caiba na memória disponível
(que é controlada pela opção -m), será gerado um arquivo temporário com o <novo.nome>.X.bam.
No final do processo esses arquivos vão ser combinados e um arquivo chamado <nome.nome>.bam
é gerado. O valor default de -m é 500000000 (500Mb). Se o computador tiver mais memória
disponível e o arquivo BAM for bastante grande, é interessante aumentar esse valor de forma a
agilizar o processo de ordenação do arquivo bam. Portanto, em um computador com 8Gb de RAM
pode-se utilizar algo como:
samtools sort -m 4000000000 <arquivo.bam> <novo.nome>
Por fim, para indexar o arquivo ordenado, utiliza-se
28
samtools index <novo.nome.bam>
Que vai gerar o arquivo <novo.nome.bai.
Existe um problema no samtools, o comando sort não altera a tag SO, que indica se o arquivo está
ordenado ou não. Desse modo se o arquivo original tiver SO:unsorted, o arquivo gerado ordena
também vai conter SO:unsorted. Alguns programas estão conscientes desse problemas e lidam
com ele, porém caso seja necessário corrigir essa tag é preciso utilizar o comando reheader do
samtools (veja detalhes sobre esse comando mais abaixo).
• Gerar um relatório sobre o mapeamento:
Para conseguir um relatório dos reads mapeados em arquivo BAM, utiliza-se o comando flagstat
da seguinte maneira:
samtools flagstat <input.bam>
Se for aplicado em um BAM file gerado pelo PGM vai gerar um resultado como este:
99525
0 + 0
81284
0 + 0
0 + 0
0 + 0
0 + 0
0 + 0
0 + 0
0 + 0
0 + 0
+ 0 in total (QC-passed reads + QC-failed reads)
duplicates
+ 0 mapped (81.67%:-nan%)
paired in sequencing
read1
read2
properly paired (-nan%:-nan%)
with itself and mate mapped
singletons (-nan%:-nan%)
with mate mapped to a different chr
with mate mapped to a different chr (mapQ>=5)
Os valores são classificados como QC-passed reads e QC-failed reads de acordo com o valor da flag
Q(512) do campo FLAGS. Todos os valores estão divididos nessas duas categorias. Esse exemplo
não tem nenhum read marcado com QC-failed e portanto os valores no segundo grupo são todos
zero. A maioria dos valores nesse relatório diz respeito a bibliotecas de reads pareados, e como
essa era uma biblioteca de fragmentos, então o valor mais importante é o número e à porcentagem
de reads mapeados, no caso 81.284, 81,67% do total de 99.525 reads. Abaixo vemos o resultado do
flagstat em um arquivo de reads mate-pair do SOLiD:
844482954 + 0 in total (QC-passed reads + QC-failed reads)
225681606 + 0 duplicates
688865129 + 0 mapped (81.57%:nan%)
844482954 + 0 paired in sequencing
422241477 + 0 read1
422241477 + 0 read2
345539940 + 0 properly paired (40.92%:nan%)
533247304 + 0 with itself and mate mapped
155617825 + 0 singletons (18.43%:nan%)
178287164 + 0 with mate mapped to a different chr
90834280 + 0 with mate mapped to a different chr (mapQ>=5)
• Combinar diversos arquivos BAM em um novo arquivo: Para combinar diversos arquivos
bam em um novo arquivo utiliza-se:
samtools merge <out.bam> <input1.bam> <input2.bam> ...
29
Porém, essa opção vai simplesmente copiar o header do arquivo <input1.bam> e combinar os
alinhamentos de todos os arquivos, mas isso pode fazer com que as tags @SQ, @RG e @PG fiquem
inconsistentes entre o header e os alinhamentos. Por isso, é necessário criar um novo header, com
as informações corretas, e utilizar o comando:
samtools merge -rh <novo.header.txt> <out.bam>
<input1.bam> <input2.bam> ...
Onde <novo.header.txt> é o header gerado pelo usuário. Alternativamente, o usuário pode
utilizar o comando MergeSamFiles do pacote Picard (seção 2.5.4), que atualiza o header ao fazer
o merge.
• Substituir o header de um arquivo BAM: Para substituir o header de um arquivo BAM, crie
um novo header em um arquivo texto e utilize o seguinte comando:
samtools reheader <novo.header.txt> <arquivo.bam> > <novo.arquivo.bam>
Por exemplo, se quiser modificar a tag SO de unsorted para coordinate, utilize os seguintes
comandos:
samtools view -H <arquivo.bam> |
sed ’s/SO:unsorted/SO:coordinate/’ > header.txt
samtools rehader header.txt <arquivo.bam> > <fixed.bam>
• Separar reads mapeados e não mapeados em um arquivo BAM: O formato BAM permite
representar tanto reads mapeados quanto reads não mapeados no mesmo arquivo, para separar os
reads não mapeados utiliza-se o seguinte comando:
samtools view -f4 -b input.bam > unmapped.bam
A opção -f filtra pela flag do alinhamento, na seção 2.6 você pode ver a lista das flags utilizadas,
no caso a flag 4 significa um segmento não mapeado. É possível fazer a filtragem inversa utilizando
a opção -F, portanto, para filtrar somente os reads mapeados utiliza-se:
samtools view -F4 -b input.bam > mapped.bam
2.5.4
Picard
Picard é um conjunto de programas para manipular arquivos SAM/BAM escritos em Java e é um
excelente complemento ao samtools. A página do projeto é http://picard.sourceforge.net/ e um
arquivo .tar.gz, com os pacotes jar já compilados pode ser baixado em:
http://sourceforge.net/projects/picard/files/picard-tools/1.67/
O pacote está estruturado como uma série de arquivos jar, sendo que cada jar é um comando. A
estrutura geral para executar um comando é a seguinte:
java -jar <path de instalação>/<comando>.jar <args*>
Cada ferramenta tem um conjunto próprio de argumentos, porém, alguns argumentos que são comuns
à todas as ferramentas podem ser visualizados na tabela 2.7. Abaixo temos alguns comandos úteis do
Picard, neles o path de instalação está omitido para deixar mais limpa a linha de comando.
1. Ordenar um arquivo BAM: O Picard possui um comando similar ao samtools sort, que é o
SortSam.jar:
java -jar SortSam.jar
I=<entrada.bam> O=<sorted.bam>
SO=coordinate
CREATE_INDEX=true
30
Argumento
MAX_RECORD_IN_RAM
TMP_DIR
CREATE_INDEX
Descrição
Número máximo de registros à serem mantidos na
memória. Aumentando esse valor reduze-se o número de operações intermediárias de disco. Default:
500.000
Diretório temporário
Cria arquivo de índice .bai.
Tabela 2.7: Argumentos comuns a todos os comandos do Picard.
A grande vantagem do SortSam.jar em relação ao samtools sort é que esse comando atualiza
de maneira apropriada o header do arquivo, trocando a tag SO para coordinate. Para ordenar
arquivos muito grandes é interessante aumentar o valor de MAX_RECORD_IN_RAM. Em uma máquina
com uma boa quantidade de RAM pode-se aumentar esse valor em 10×, como por exemplo:
java -jar SortSam.jar
I=<entrada.bam> O=<sorted.bam>
SO=coordinate
CREATE_INDEX=true
MAX_RECORD_IN_RAM=5000000
2. Fazer o merge de diversos arquivos BAM: O Picard também possui uma alternativa ao
comando samtools merge
java -jar MergeSamFiles.jar
O=<resultado.bam> I=<input1.bam> I=<input2.bam>...
MSD=true
AS=true USE_THREADING=true CREATE_INDEX=true
Assim com o SortSam.jar, o MergeSamFiles.jar trata melhor o header do arquivo gerado do que o
comando equivalente do samtools. Por default ele gera corretamente as tags @RG e @PG no header,
e com a opção MERGE_SEQUENCE_DICTIONARIES, ele também gera as tags @SQ corretas. A opção
AS significa “Assume Sorted” e existe para lidar com o fato do samtools não atualizar o header do
arquivo gerado, e portanto indicar como unsorted um arquivo ordenado. A opção USE_THREADING
faz com que o programa utilize duas threads 6 .
Quando se deseja combinar diversos arquivos BAM juntos, é um pouco tedioso colocar uma argumento I=<file.bam> para cada arquivo. É possível combinar o MergeSamFiles com o comando
find do unix para combinar todos os arquivos BAM em um mesmo diretório.
java -jar /share/apps/picard/MergeSamFiles.jar
O=<out.bam>
USE_THREADING=true MSD=true
‘find -name \*.bam -printf "I=%p\n"‘
3. Identificar Read Duplicados:
Durante o preparo de biblioteca pode ocorrer a duplicação de um fragmento, o que causa um viés
artificial da região que originou o fragmento. Por isso, é recomendado que reads suspeitos de serem
duplicatas sejam marcados e ignorados nas análises subsequentes. O MarkDuplicates.jar procura
reads nos quais as posições mais 5’ do alinhamento e a orientação sejam iguais. O read com a
melhor qualidade não é alterado e todos os outros são marcados como duplicados. Para bibliotecas
de mate-pair e pair-end ocorre o mesmo, porém as cordenadas e a orientação dos dois pares de
reads devem coincidir[14]. Uma vantagem do MarkDuplicates.jar é que ele consegue encontrar
duplicatas mesmo se os reads do par não mapearem no mesmo cromossomo.
Para executar o comando utilize:
6 Linhas
de execução do programa. Em um sistema com mais de um processador/core essa opção aumenta a performance
do programa, podendo reduzir o tempo de processamento em 20%
31
java -jar MarkDuplicates.jar I=<input.bam>
O=<input.dups.bam>
M=<input.dups_report.txt> AS=true
CREATE_INDEX=true
2.6
Mapeando os reads com o TMAP
O Ion Torrent possui um mapeador otimizado para o padrão de erros dos dados gerados pelo sequenciador. Chamado de TMAP, ele foi criado por Nils Homer. O TMAP é otimizado para os reads de
tamanho variável e também para lidar com erros de homopolímeros gerados pelo Ion Torrent. Para isso,
ele implementa quatro algoritmos de mapeamento que podem ser utilizados individualmente ou combinados. A lista de algoritmos está na tabela 2.8. Na figura 2.3 temos uma comparação da sensitividade
(porcentagem de reads mepados) dos algoritmos do TMAP para o dataset de E. Coli O104H47 . Por
comparação foi também colocada a performance bowtie2 e vemos que este tem uma performance um
pouco superior ao map1, porém inferior a todos os outros algoritmos (pelo menos para esse dataset).
Vê-se que o desempenho de map3 e map4 foi bem superior aos outros dois algoritmos, o que gera o
questionamento do porquê deles terem sido incluídos. Na figura 2.4, temos os tempos de processamento
dos mesmos dados da figura anterior. Podemos notar que o map1, apesar de menos eficiente em relação
à porcentagem de reads mapeados, é mais rápido do que map3 e map4.
Para equilibrar sensitividade e performance, temos o comando mapall. Ele aplica cada algoritmo de
mapeamento em estágios definidos pelo usuário. Dessa forma somente os reads que não mapearem em
um estágio são passados para o estágio seguinte. Portanto, uma abordagem eficiênte é colocar o map1
no primeiro estágio, para fazer rapidamente o mapeamento dos reads “fáceis”, e em seguida usar o map3
e o map4 para mapear o resto dos reads.
O código fonte do TMAP está disponível no site github:
https://github.com/iontorrent/TMAP
Para ter uma melhor performance o TMAP pode opcionalmente utilizar o TCMalloc da gperftools
que está disponível em:
http://code.google.com/p/gperftools/
map1
map2
map3
map4
Algoritmo
BWA Short
BWA Long
SSAHA
SMEM
Referência
Li and Durbin [23]
Li and Durbin [20]
Ning et al. [33]
Li [19]
Tabela 2.8: Algoritmos do TMAP
2.6.1
Criando o índice
O primeiro passo para usar o TMAP é gerar o índice do genoma de referência. Para isso, utiliza-se o
comando index da seguinte forma:
tmap index -f <referecen.fasta>
Caso haja bases ambíguas na referência, será mostrada uma mensagem de aviso e as bases ambíguas
serão trocadas, dentre as bases possíves, pela de menor valor lexicográfico. Por exemplo, a base Y, que
representa C ou T, será trocada por C, a base N que representa qualquer base será trocada por A, e
assim por diante. A indexação do genoma humano pode demorar 4 horas em um computador atual. O
resultado será diversos arquivos com os índices.
2.6.2
Mapeando os reads
O comando para aplicar um dos algoritmos é:
7 Disponível
na Ion Community
32
80
75
70
60
65
map %
bowtie2
map1
map2
map3
map4
Figura 2.3: Sensitividade dos algortmos do tmap e do bowtie2 (Amostra de E. Coli O104H4)
tmap <mapN> -f <reference> -r <reads>
Onde mapN é map1, map2, map3 ou map4, <reference> é nome de um arquivo fasta que já tenha
sido indexado e <reads> é o arquivo dos reads, que pode estar em formato, fasta, fastQ ou SFF. Como
resultado o tmap gera um arquivo SAM na saída padrão. Caso se utilize um arquivo SFF, é possível
propagar a informação dos flows para o aquivo SAM por meio da opção -Y. Também é possível utilizar
diversas threads com a opção -n <num threads>.
A opção -o X controla o formato de saída do programa, -o 0 é o default e gera uma saída texto em
formato SAM, -o 1 gera um resultado binário em formato BAM, e por fim -o 2 gera um arquivo BAM
não comprimido, uma opção útil se o resultado for tmap vai ser enviado para um outro comando para
mais processamentos, como por exemplo no comando abaixo, que combina o tmap com o samtools sort:
tmap <mapN> -f <reference> -r <reads> -o 2 |
samtools sort -n <memoria> - <output>
Normalmente, os algoritmos individuais não são utilizados, mas sim o comando mapall. Com esse comando você pode combinar os algoritmos em estágios adicionando argumentos no formato stageM mapX*
que define quais algoritmos serão utilizados em cada estágio. É possível definir diversos estágios de modo
que, se um read não mapear em um determinado estágio, ele é passado para o estágio seguinte. Uma
estratégia é colocar o map1 no primeiro estágio, porque ele é mais rápido, e o map3 e o map4 no segundo
estágio. Para isso, utilizamos o seguinte comando:
tmap mapall -f <reference> -r <reads>
stage1 map1 stage2 map3 map4
Também é possível controlar as informações da tag @RG através da opção -R. Isso é importante porque
outros programas validam essa tag ao abrir o arquivo BAM. E além disso é bom adicionar metadata
sobre a amostra para facilitar a organização dos arquivos. Algumas tags que podem ser utilizadas são:
33
150
100
50
map time (s)
map1
map2
map3
map4
Figura 2.4: Performance dos algoritmos do tmap (Amostra de E. Coli O104H4)
ID
SM
LB
CN
Identificador único do read group
Nome da amostra (sample)
Nome da biblioteca
Nome do centro de sequenciamento
PU PGM/318
A utilização varia entre plataformas. No PGM tem sido usado
para identificar o tipo de chip
utilizado.
PL IONTORRENT Nome da plataforma de sequenciamento (esses valores são tabelados pelo formato SAM)
Combinando todas as informações apresentadas, uma sugestão para rodar o TMAP é a seguinte:
cancer
hg19
USP
tmap mapall -n <num threads> Y -f <reference> -r <reads.sff>
-R LB:<LB> -R CN:<CN> -R PU:PGM/<chip>
-R ID:<ID> -R SM:<SM> -R PL:IONTORRENT
stage1 map1 stage2 map2 map3 -o 2|
samtools sort - <output>
2.6.3
Exemplo: Mapeando os reads de E. coli com o TMAP
1. Faça o download do arquivo SFF com os reads no site da Ion Community: http://lifetechit.hosted.jivesoftware.com/docs/DOC-1518
2. Descompacte o arquivo zip com os reads.
3. Faça o download da referência no site do NCBI:http://www.ncbi.nlm.nih.gov/nuccore/NC_
010473.1 em formato fasta e renomeie o arquivo dh10b.fasta
4. Indexe a referência: tmap index -f dh10b.fasta
5. Utilize o TMAP para mapear os reads na referência. Para mapear uma amostra utilize:
34
tmap mapall -Y -f dh10b.fasta -r 64.sff
-R LB:O104H4 -R CN:uni-munster -R PU:PGM/314
-R ID:64 -R SM:ecoli -R PL:IONTORRENT
stage1 map1 stage2 map2 map3 -o 2 |
samtools sort - 64
Para mapear todas as amostras você pode utilizar o comando for do bash:
for file in *.sff; do
base=‘basename $file .sff‘ ;
tmap mapall -Y -f dh10b.fasta -r $file
-R LB:O104H4 -R CN:uni-munster -R PU:PGM/314
-R ID:$base -R SM:ecoli -R PL:IONTORRENT
stage1 map1 stage2 map2 map3 -o 2|
samtools sort - $base ;
done
6. Marque os reads duplicados: utilize o comando MarkDuplicates.jar do picard para identificar os
reads duplicados:
java -jar MarkDuplicates.jar
I=64.bam O=64.dups.bam M=64.dups.txt AS=true
Ou utilize o for para processar todos os arquivos bam:
for file in *.bam; do
base=‘basename $file .bam‘ ;
java -jar MarkDuplicates.jar
I=$file O=$base.dups.bam M=$base.dups.txt AS=true
done
7. Faça o merge dos arquivos bam utilizando o MergeSamFiles.jar do Picard:
java -jar MergeSamFiles.jar O=O104H4.bam
‘ls *.dups.bam | sed s/^/I=/‘
USE_THREADING=TRUE SO=coordinate MSD=true
8. Verifique os parâmtros do resultado utilizando o comando flagstat do samtools:
samtools flagstat O104H4.bam
2.6.4
Mapeando dados de Long Mate Pair
O TMAP também suporta o mapeamento de reads pareados. A principal diferença quando se utiliza o
mapeamento pareado ao invés do normal é que no primeiro caso o mapeador vai fazer o pareamento dos
reads, ou seja, ela vai indicar para cada read a posição do seu respectivo par (colunas RNEXT e PNEXT
do arquivo BAM).
Para fazer o mapeamento é preciso primeiro separar as tags do mate-pair utilizando o seq_crumbs
(veja seção 2.2.1). O comando para fazer a extração é:
sff_extract <entrada.sff> |
split_matepairs -l ION_TORRENT |
pair_matcher -p <orphan.fastq> |
deinterleave_pairs -o <out.1.fastq> <out.2.fastq>
Para fazer o mapeamento utilze o seguinte comando:
tmap mapall -Q 1 -f <ref.fasta> -r <out.1.fastq> -r <out.2.fastq> -o 2
stage1 map1 stage2 map3 map4 > <out.bam>
É importante colocar a opção -Q 1 para indicar que os dados são de mate-pair e colocar a opção -r
duas vezes, uma para cada arquivo dos pares.
35
2.7
Bowtie
O bowtie[18] é um mapeador bastante popular criado para mapear short reads. Ele é especialmente
eficiente para reads com 50bp ou menos. O bowtie suporta dados tanto em base quanto color space.
A versão mais nova, bowtie 2[16], suporta alinhamentos com gaps e por isso é mais adequado para
reads com 100bp ou mais. Infelizmente ele não suporta mais color-space. Em termos de algoritmo, o
bowtie 2 é muito similar ao TMAP, dividindo o mapeamento em uma primeira etapa de alinhamento
sem gaps seguida de uma etapa de alinhamento Smith-Waterman. Diversos softwares utilizam o bowtie
como mapeador, em especial o pipeline de análise de RNA-Seq Tophat[41] e o pipeline na nuvem de
ressequenciamento Crossbow[17].
2.7.1
Utilizando o Bowtie 2
O bowtie2 está disponível na seguinte URL:
http://bowtie-bio.sourceforge.net/bowtie2/index.shtml
É possível baixar tanto os binários para Mac ou Linux quanto o código fonte do programa. Após
descompactar o pacote, adicione o diretório do bowtie2 ao path ou faça um link dos binários contidos
nele para um /usr/local/bin ou outro diretório que já esteja no path.
O uso do bowtie2 é muito similar ao tmap, até porque ambos se baseiam nos mesmos princípios.
Inicialmente, é necessário indexar a referência utilizando o comando bowtie2-index da seguinte forma:
bowtie2-build -f <ref.fasta> <prefix>
Onde <prefix> é o prefixo do nome dos arquivos de índice que vão ser gerados. Esse nome vai ser
depois utilizado para referenciar os índices. Para mapear um arquivo fastq utiliza-se:
bowtie2 -p <threads> <prefix> <reads.fastq>
Onde <threads> é o número de threads a utilizar, <prefix> é o prefixo usado na criação do índice
e <reads.fastq> é o arquivo com os reads à mapear. Diferentemente do TMAP, o bowtie2 só suporta
reads em formato fasta ou fastq, não em SFF. Para gerar diretamente os alinhamentos em formato BAM,
combina-se o bowtie com o samtools:
bowtie2 -p <threads> <prefix> <reads.fastq>
| samtools view -Sbh | samtools sort -m <memory> - <output>
Onde <memory> é a quantidade de memória utilizada na ordenação dos reads e <output> é o nome
do arquivo de saída sem a extenção .bam.
2.7.2
Utilizando o Bowtie 2 com o Ion Torrent
Vamos agora mapear os mesmos dados utilizados com o TMAP (seção 2.6) com o Bowtie 2. Assim
como no caso do TMAP, a primeira etapa é indexar o genoma de referência. Para isso, utilize o seguinte
comando:
bowtie2-build dh10b.fasta dh10b
Como o bowtie não suporta o formato sff, é preciso fazer a conversão para fastQ. Para isso, utilize
um do programas descritos na seção 2.2, como por exemplo o sff_extract:
sff_exract -c 64.sff
Ou então empregue o comando for para converter todos os arquivos:
for i in *.sff; do
sff_extract -c $i
done
36
Em seguida, vamos usar o bowtie para fazer o mapeamento:
for i in data/*.fastq; do
b=‘basename $i .fastq‘
bowtie2 -p 8 -q dh10b $i
| samtools view -Suh | samtools sort - $b.bowtie2
done
2.8
Visualizando arquivos BAM com o IGV
A ferramenta mais popular para visualizar arquivos BAM é o IGV do Broad Institute. O IGV é um
programa em java disponível para Linux, Mac OS e Windows. É possível baixar o programa como um
stand-alone, assim como via Java Web Start. Ele está disponível no seguinte link:
http://www.broadinstitute.org/software/igv/download
É possível iniciar o IGV utilizando a tecnologia de WebStart, que cuida automaticamente do download
do aplicativo e o inicia no computador do usuário. Na página serão mostrados quatro ícones para iniciar
o IGV, o que muda entre eles é a configuração de memória. Escolha a opção de acordo com a quantidade
de memória disponível no seu computador, o tipo de sistema operacional e se você está rodando no modo
de 32 ou 64 bits. Alternativamente você pode ir até a seção “Binary Distribution” para baixar o arquivo
zip com o programa. Após baixa-lo, basta executar o programa igv.bat no Windows e o igv.sh no
Linux ou Mac OS.
Vamos demonstrar o IGV utilizando um dataset do Comprehensive Cancer Panel, disponível em:
http://ioncommunity.lifetechnologies.com/docs/DOC-3012
Baixe o arquivo FLO-528.bam.gz, em seguida descompacte-o e crie o índice .bai:
gunzip FLO-528.bam
samtools index FLO-528.bam
No IGV, vá para o menu File, escolha Load from File... e selecione o arquivo FLO-528.bam.
Inicialmente o IGV não vai mostrar nenhuma informação porque o nível de zoom está muito alto. Para
visualizar os alinhamentos é necessário selecionar uma das regiões capturadas pelo ampliseq. Para isso,
vá na caixa de texto na toolbox superior e coloque o nome do gene MTRR. Como o IGV tem a anotação
do genoma humano, ele vai focalizar a janela principal na região onde se encontra o gene MTRR, no caso
entre as coordenadas 7,865,776 e 7,901,794 do cromossomo 5 como pode ser visto na caixa de texto, que
mudou de MTRR para as coordenadas da região mostrada.
Na figura 2.5 vemos o um screenshot do IGV mostrando a região selecionada. A parte principal da
tela está dividida em duas regiões: No topo, temos a barra de navegação que mostra o cariótipo do
cromossomo que está sendo exibida e a região que está sendo mostrada, que é indicada por uma pequena
barra vermelha no cariótipo. Logo abaixo temos uma escala com as coordenadas da região. No resto
da tela são mostrados os arquivos carregados. No caso, temos o arquivo bam com os alinhamentos e na
parte de baixo temos a anotação do genoma. É possível adicionar outras seções na visualização, basta
abrir novos arquivos e a tela será subdividida verticalmente para acomodar as novas visualizações.
A visualização do arquivo bam está dividade em duas regiões. No topo temos um gráfico que mostra
a cobertura, ou seja, o número de reads cobrindo cada base do genoma. Na parte de baixo temos o alinhamento de cada read. No nível e zoom do gene inteiro podemos ver poucos detalhes dos alinhamentos,
mas pelo gráfico de cobertura já é possível verificar a eficiência do processo de captura. Vemos que as
leituras estão nas regiões do exons, o que é exatamente o objetivo do processo de captura.
É possível mudar o nível de zoom através dos botões “-” e “+” no canto superior direito da tela.
Também é possível aumentar o nível de zoom com um click duplo em um ponto de interesse. Com o click
duplo será feito o zoom e a tela será centralizada no ponto de click. Por fim, é possível mudar o zoom e
a posição digitando novas coordenadas na caixa de texto. Pode-se aumentar o zoom até ser possível os
núcleotídeos do genoma.
Na figura 2.6 vemos o zoom de um dos exons do gene MTRR. Nesse nível de zoom podemos ver cada
um dos reads alinhados na região, representados pelas caixas cinzas. A seta na ponta do read indica o
sentido do alinhamento. Todas as posições em cinza indicam que a base no read é igual à da referência,
37
Figura 2.5: IGV mostrando os alinhamentos do reads na região do gene MTRR
qualquer troca é indicada como um retângulo colorido, já inserções são indicadas como um I azul e
deleções são indicadas como uma quebra com um traço preto no read.
Figura 2.6: IGV mostrando os alinhamentos dos reads na região do gene MTRR
Podemos obter mais informações sobre cada read e cada posição basta deixar o ponteiro do mouse
parado em uma posição e uma popup box irá aparecer (fig 2.7. Também é possível colocar o mouse sobre
a cobertura e o IGV irá informar a quantidade de reads na posição indicada, assim como a quantidade
de cada base, deleções e inserções.
Clicando na região com o nome do arquivo é possível mudar a visualização do painel com os alinhamentos. Mudar a visualização de “Expanded” para “Collapsed” permite ter uma visão mais geral dos
alinhamentos, com menos foco em cada alinhamento individual. Na figura 2.8 vemos que o exon em
questão está coberto por reads vindos de dois amplicons diferentes com um pequeno overlap no meio.
Vemos também mais claramente duas trocas nucleotídicas. É possível também mudar a visualização
38
Figura 2.7: Popup boxes do IGV. A) Popup que aparece quando se deixa o cursor sobre um dos reads.
B) popup mostrado quando se deixa o cursor sobre o gráfico de cobertura.
dos genes, só que o padrão é tê-los em “Collapsed”, o que é díficil de visualizar se o gene tiver diversas
isoformas diferentes ou se houver genes com overlap em fitas opostas. Nesses casos recomenda-se mudar
a visualização dos genes para “Expanded”.
Figura 2.8: IGV com os alinhamentos no modo colapsado. Destaque para duas posições com trocas de
nucleotídeos.
2.8.1
Importanto o genoma de referência
Na seção anterior trabalhamos com dados de humano mapeados contra a versão hg19 do genoma, que
é um dos genomas distribuídos pelo Broad Institute para utilizar com o IGV. Porém, frequentemente
temos que trabalhar com outro genomas não disponibilizados ou até mesmo com genomas novos, criados
pelo próprio grupo de pesquisa. Nesses casos é preciso importar o genoma antes de poder visualizar
qualquer alinhamento. Para fazer essa operação escolha o item “Import Genome...” no meu File. Será
aberta uma caixa de diálogos com os seguintes items:
39
• Unique Identier Um ID para o genoma, deve ser único para todos os genomas registrados no
programa, por exemplo “human_hg19”.
• Descriptive Name Um nome descritivo, que vai aparecer na lista de genomas do menu pull down.
• FASTA File Arquivo fasta com o genoma.
• opcional Cytoband file Arquivo com as informações. Ele permite gerar a ilustração das citobandas
na área superior do IGV.
• opcional Gene file Arquivo com a anotação do genoma em formato BED ou GFF.
• opcional Alias file Um arquivo com duas colunas que determina uma relação entre os nomes das
sequências (cromossomos, contigs etc.) do genoma e da anotação, por exemplo, podemos ter um
genoma cuja sequência se chame chr9, mas no arquivo de genes está somente 98 .
Após preencher todos os campos o IGV irá perguntar onde salvar o arquvo .genome que será criado
com todas as informação necessárias para a visualização. Esse é um arquivo binário que deve ser mantido
para futuros usos do genoma criado. A criação do genoma só precisa ser feita uma vez. Após criado, ele
passa a fazer parte do menu de genomas disponíveis da instalação local do IGV.
8 Uma exceção para essa regra são os nomes no formato NCBI, se por exemplo a sequência do genoma tiver a forma
gi|125745044|ref|NC_002229.3|, mas na anotação estiver a forma curta NC_002229.3, o IGV fará a associão entre as duas
automaticamente.
40
Capítulo 3
Arquivos de Anotação de Genomas
A sequência linear de bases que formam o genoma é somente o primeiro nível de informação genética.
Codificados nela estão os genes e os elementos de regulação de expressão gênica. Para identificar a
posição desses elementos, utiliam-se arquivos de anotação, que em geral nada mais são do que arquivos
texto que associam coordenadas genômicas com características ou features. A seguir vamos descrever
alguns formatos de arquivos de anotação.
3.1
BED Formats
O formato BED foi criado pela UCSC para descrever anotações em um genoma. Ele é um formato muito
associado ao UCSC Browser e possui diversos campos que descrevem a representação gráfica da anotação
pelo visualizador. Ele é um formato texto, com colunas separadas por caracteres TAB que representa
intervalos no genoma associados à anotação ou feature[11].
Existem três variações do formato BED, a versão padrão, a versão bedDetail e a versão bedGraph,
além de uma versão binária chamada de bigBed.
Em comum, todos os formatos têm as seguintes colunas:
1. chrom: Nome do cromossomo ou scaffold.
2. chromStart: Posição incial da anotação (iniciando em 0)
3. chromEnd: Posição final da anotação.
Além das linhas descrevendo as features, um arquivo bed pode ter um cabeçalho que começa com a
palavra track e descreve outros atributos utilizados na representação gráfica das regiões.
No formato bedDetail se adicionam mais duas colunas, tendo assim a seguinte estrutura:
1. chrom: Nome do cromossomo ou scaffold.
2. chromStart: Posição incial da anotação (iniciando em 0)
3. chromEnd: Posição final da anotação.
4. Nome: Nome da região
5. Description: Descrição da região
O formato bedDetail é utilizado pelo Ampliseq Designer para informar as regiões cobertas pelo painel.
Na figura 3.1, vemos um exemplo de bedDetail file gerado pelo programa.
41
track
chr1
chr1
chr1
...
chr1
chr1
chr1
...
name="4477685_CCP_Designed" description="Amplicon_Insert_4477685_CCP" type=bedDetail
2488068 2488201 AMPL242431688 . TNFRSF14
2489144 2489273 AMPL262048751 . TNFRSF14
2489772 2489907 AMPL241330530 . TNFRSF14
...
...
...
...
6528161 6528293 AMPL294026880 . PLEKHG5
6528282 6528404 AMPL294029495 . PLEKHG5
6528391 6528519 AMPL294044396 . PLEKHG5
...
...
...
...
Figura 3.1: Exemplo de arquivo bedDetail
3.2
Formatos GFF e GTF
O GFF é outro formato texto utilizado para representar anotações. O formato passou por diversas
revisões, sendo a mais recente o GFF3. Originalmente, GFF significava Gene Finding Format, mas foi
rebatizado para Generic Feature Format para representar o aumento de escopo do formato. Além do
GFF3, também é comumente utilizado o formato GTF (também chamado de GFF2.5). O formato GFF
é mantido pelo projeto Sequency Ontology[40].
A estrutura do GFF é bastante similar ao do formato BED mas com alguns campos que refletem a
sua origen ligada a programas de gene finfing:
1. SeqId: Identificação do cromossomo ou sequência da qual a anotação faz parte.
2. Source: Programa ou algorítmo que gerou a anotação.
3. type: Descreve a natureza biológica da anotação, como “gene” ou “exon”. Tem que ser um termo
do SOFA1 ou um código do Sequence Ontology[8].
4. start: Posição inicial da anotação em relação à sequência identificada na primeira coluna. O
sistema de coordenadas começa em 1.
5. end: Final da anotação, tem de ser um valor igual ou maior que start.
6. score: Nas versões iniciais, esse campo não estava bem definido. Atualmente se recomenda que
se utilize o p-value para predição de genes ou o e-value para mapeamento.
7. strand: Fita da anotação, + para a fita positiva e − para a fita negativa.
8. phase: Para anotações como CDS, essa coluna indica o início da anotação em relação ao frame
de leitura. O valor de 0 indica que o próximo códon começa na primeira base, 1 que é preciso pular
uma base e assim por diante até 2.
9. attributes: Lista de pares tag=valor. Os pares são separados por ;. A lista de tags que podem
ser utilizadas é aberta, mas algumas têm semântica predefinida.
A lista das tags predefinidas para a coluna atributos está na página do formato, vale resaltar algumas:
• ID: Identificador da anotação, tem que ser único no arquivo.
• Parent: ID da anotação pai.
Com as tags ID e Parente é possível definir qualquer estrutura hierárquica no genoma, como por
exemplo a relação gene–transcrito–exon. Abaixo temos um exemplo de anotações em GFF:
1 Sequence
Ontology Feature Annotatio
42
ctg123 example mRNA 1300 9950 . + . ID=t_012143;gene_name=EDEN
ctg123 example exon 1300 1500 . + . Parent=t_012143
ctg123 example exon 3000 3902 . + . Parent=t_012143
ctg123 example exon 5000 5500 . + . Parent=t_012143
ctg123 example exon 7000 9000 . + . Parent=t_012143
ctg123 example exon 9400 9950 . + . Parent=t_012143
ctg123 example CDS 3301 3902 . + 0 Parent=t_012143
ctg123 example CDS 5000 5500 . + 1 Parent=t_012143
ctg123 example CDS 7000 7600 . + 1
Parent=t_012143
Uma outra abordagem para representação de genes e transcritos é o formato GTF. Este formato é
quase idêntico ao GFF3, só mudando a coluna attributes. Em vez de utilzar o formato tag=valor, ele
utiliza tag "valor", e em vez de usar uma estrutura genérica de pai e filho entre as anotações, ele exige
os seguintes atributos:
• gene_id: ID do gene associado à esta anotação
• transcript_id: ID do transcrito
Utilizando um mesmo valor de gene_id e variando o trascript_id é possível representar as informações de splicing alternativo. Essa é uma solução bem menos flexível do que a do GFF3. Abaixo um
exemplo de anotação em formato GTF:
381
381
381
381
381
Twinscan
Twinscan
Twinscan
Twinscan
Twinscan
CDS
CDS
CDS
start_codon
stop_codon
380
501
700
380
708
401
650
707
382
710
.
.
.
.
.
+
+
+
+
+
0
2
2
0
0
gene_id
gene_id
gene_id
gene_id
gene_id
"001";
"001";
"001";
"001";
"001";
transcript_id
transcript_id
transcript_id
transcript_id
transcript_id
"001.1";
"001.1";
"001.1";
"001.1";
"001.1";
É possível converter de GTF para GFF utilizando o comando gffread que faz parte do cufflinks2 :
gffread <in.gtf> -o <out.gff>
E também de GFF pra GTF:
gffread -T <in.gff> -o <out.gtf>
3.3
Gerando arquivos de anotação
Pode-se obter os arquivos de anotações de genomas bem estudados, pode-se usar os serviços dos bancos
de dados de anotações, como o UCSC ou o Ensembl. Caso o genoma de interesse não esteja nessas bases
de dados, é possível encontrar informações de anotações, normalmente feitas automaticamente por um
programa, na página do projeto de montagem do genoma.
3.3.1
Obtendo anotações do UCSC Browser
O UCSC Browser possui um serviço chamado Table Browser[15] que permite exportar as informações de
sua base de dados para diversos formatos, entre eles o bed e o GTF. Essa ferramenta está disponível em:
http://genome.ucsc.edu/cgi-bin/hgTables
Na figura 3.2 vemos tela de seleção de informações do site. Na primeira linha de combo boxes
escolhe-se o genoma de interesse e a versão deste, por default será mostrado o genoma humano na versão
hg19. Abaixo pode-se escolhe o grupo e a “track” de anotações, no caso vamos deixar no grupo “Genes
and Gene Prediction” e na track “UCSC Genes”. Por fim, podemos escolher qual tabela que queremos
exportar. No caso vamos escolher a tabela “knownGene”. Existem diversas opções de filtragem e é
até possível fazer operações de bancos de dados com as anotações, mas o que nos interessa é o seletor
2 http://cufflinks.cbcb.umd.edu/
43
Figura 3.2: UCSC Table Browser site
“Output Format” (ver figura 3.2) que permite escolher, entre outros formatos, GTF e BED. Logo abaixo
é possível esolher um nome para o arquivo que vai ser gerado e também escolher para que o arquivo seja
enviado já comprimido com o programa gzip, reduzindo assim o tamanho do download. Por fim, clica-se
em “Get Output” para fazer o download das anotações.
Figura 3.3: Escolha de regiões ao exportar arquivo BED
Caso se escolha gerar um arquivo em formato BED, será mostrada uma outra tela que permite escolher
as regiões do gene que serão incluídas no arquivo gerado (ver figura 3.3). São oferecidas as seguintes
opções:
• Whole Gene
• Upstream by X bases
• Exons plus X bases at each end
44
• Introns plus X bases at each end
• 5’ UTR Exons
• Coding Exons
• 3’ UTR Exons
• Downstream by X
Na figure 3.4 podemos ver graficamente os diferentes tipos de arquivos BED gerados.
3.3.2
Obtendo anotação do Ensembl
Alternativamente é possível baixar arquivos de anotação pré-formatados em formato GTF no site do
Ensembl:
http://www.ensembl.org/info/data/ftp/index.html
Uma diferença entre o arquivo de anotação do Ensembl e do UCSC é a nomenclatura dos cromossomos,
o UCSC chama-os de chr1, chr2, ..., chrM, chrX, chrY. Já o Ensembl, e o NCBI também, utilizam
simplesmente: 1, 2, ..., MT, X, Y. Para transformar a nomenclatura do cromossomos para o sitema do
UCSC, pode-se utilizar o script addchr.pl listado no apêndice 7.4.
3.4
Manipulando arquivos BED
Uma ferramenta muito útil para manipular arquivos de anotação é o bedtools. Apesar do nome, a
ferramente suporta tanto formato BED quanto GFF, GTF, VCF, SAM e BAM. O código está disponível
em:
https://code.google.com/p/bedtools/
3.4.1
Extrair sequências da regiões
Para extrair a sequência das regiões indicadas pelo arquivo bed utiliza o comando getfasta do bedtools:
bedtools getfasta -s -name -fi <genome.fasta> -bed <file.bed> -fo <output.fasta>
A opção -name faz com que o programa coloque no header do arquivo fasta o nome da região,
definido pela terceira coluna do arquivo bed, caso seja omitida, o programa coloca as coordenadas da
região capturada. Já a opção -s pede para o programa respeitar o fita da anotação, nesse caso é gerado
o reverso complementar da região delimitada. É possível, por exemplo, extrair todos os exons do genoma
humano utilizando esse comando, primeiro é preciso baixar a anotação do UCSC (veja 3.3.1), em seguida
usa-se:
bedtools getfasta -s -name -fi hg19.fasta -bed exons.bed -fo exons.fasta
3.4.2
Calculando interseções
45
46
Figura 3.4: Diferença entre os tipos de arquivos BED gerados pelo UCSC Table Browser.
Capítulo 4
Detecção de Variâncias
Em um projeto de sequenciamento, o passo natural seguinte ao mapeamento é a detecção de diferenças
entre o genoma sequenciado e o genoma de referência. Com uma biblioteca de fragmentos é possível
detectar Single Nucleotide Polymorphism, normalmente chamados de SNPs (se pronuncia “esnipe”), e
pequenas inserções/deleções (usualmente chamados de indels).
Com uma biblioteca de mate-pair, também é possível detectar variações estruturais como grandes
indels e inversões. Neste capítulo vamos abordar somente a detecção de SNPs e de small-indels.
4.1
VCF Files
O formato VCF (Variant Call Format), assim como o formato BAM, foi criado pelo 1000 Genomes
Project para representar as variações detectadas[34]. O arquivo VCF é um arquivo texto. No topo do
arquivo, há um cabeçalho, indicado pelas linhas que começam com #. Depois do cabeçalho, uma lista
de VCF Records, um por linha. Cada campo do registro é colocado em uma coluna, a lista das colunas
está abaixo:
1. CHROM: Cromossomo ou contig da variante.
2. POS: Posição da variante iniciando a contagem por 1.
3. REF: Bases da referência.
4. ALT: Bases alternativas. Se houver mais de uma alternativa, elas serão listadas separadas por
vírgulas.
5. QUAL: Score da variante em escala phred.
6. FILTER: Se a variante passou pelos controles de qualidade: PASS; caso contrário uma lista de
códigos separos por vírgulas descrevendo por que ela foi rejeitada.
7. INFO: Lista de valores separados por dois pontos com estatísticas sobre as variantes. Os valores
estão na forma <chave>=<valor>, onde chave é uma string curta que identifica o valor. Abaixo,
temos uma lista de chaves definidas pelo padrão. Todas elas são opcionais e os usuários podem
também adicionar chaves extras. No entanto as chaves abaixo são reservadas:
• AA: Alelo Ancestral
• AC: Contagem por alelos
• AF: Frequência de cada alelo
• AN: Número total de alelos
• BQ: RMS1 da qualidade para essa posição
1 Root
• CIGAR: Cigar String descrevendo como um alelo alternativo se alinha no alelo de referência
pP
2
Mean Square:
i
xi
47
• DB: Membro do dbSNP
• DP: Cobertura para todas as amostras
• END: Posição final da variante descrita nesse registro
• H2: Membro do hapmap2
• H3: Membro do hapmap3
• MQ: RMS do mapping quality
• MQ0: Número de reads com M Q = 0
• NS: Número de samples
• SB: Strand Bias nessa posição
• SOMATIC: Indica que essa variante é somática
• VALIDATED: Validado por outro experimento
• 1000G: Membro do 1000 Genomes
Um exemplo com as 8 primeiras colunas de um arquivo VCF está na tabela 4.1. Depois da 8a coluna
podemos encontrar informações de genótipo. Primeiro temos uma coluna chamada FORMAT, a qual
define uma lista com tipos de dados (separados por dois pontos). Em seguida temos uma coluna para
cada amostra com os valores definidos por FORMAT, e no cabeçalho está o nome de cada amostra.
Vemos um exemplo na tabela 4.2. Neste, caso temos a informação de genótipos para duas amostras,
NA000001 e NA000002.
#CHROM
20
20
20
20
POS
14370
17330
1230237
1234567
ID
rs6054257
.
.
microsat1
REF
G
T
T
GTC
ALT
A
A
.
G,GTCT
QUAL
29
3
47
50
FILTER
PASS
q10
PASS
PASS
INFO
NS=3;DP=14;AF=0.5
NS=3;DP=11;AF=0.017
NS=3;DP=13;AA=T
NS=3;DP=9;AA=G
Tabela 4.1: Exemplo de lista de variantes em arquivo VCF (parte obrigatória).
FORMAT
GT:GQ:DP:HQ
GT:GQ:DP:HQ
GT:GQ:DP:HQ
GT:GQ:DP
NA00001
0|0:48:1:51,51
0|0:49:3:58,50
0|0:54:7:56,60
0/1:35:4
NA00002
1|0:48:8:51,51
0|1:3:5:65,3
0|0:48:4:51,51
0/2:17:2
Tabela 4.2: Exemplo de lista de variantes em arquivo VCF (definição de genótipos).
Assim como para o campo INFO, existem diversas chaves predefinidas para o genótipo. Abaixo temos
a lista definida pelo padrão:
• GT: Genótipo, a descrição desse campo está na seção 4.1.1.
• FT: A mesma coisa que o campo FILTER, porém individual para a amostra.
• GL: log10 da verossimillhança para possível genótipo. Se A for o alelo de referência e B o alelo
alternativo, a ordem dos genótipos é AA,AB e BB (a fórmula geral para a ordem dos genótipos
está explicada no apêndice 7.1).
• GLE: Verossimilhança do genótipo usado quando existe incerteza de copy mumber.
• PL: Valores de GL em scala phred.
• GP: Probabilidade à posteriori dos genótipos em escala phred.
• CQ: Probabilidade condicional do genótipo estar errado, dado que o locus é variante (em escala
phred):
− 10 log10 p(genótipo está errado|locus é variante)
(4.1)
48
• HQ: qualidade dos halótipos, dois valores separados por vírgula em escala phred.
• PS: Phase Set, definido como o conjunto de genótipos em fase que este genótipo pertence.
• PQ: Qualidade da atribuição de fase do genótipo, em escala phred.
• EC: Lista separada por vírgulas do valor esperado da contagem de cada alelo alternativo listado
na coluna ALT.
• MQ: RMS do mapping quality, similar à encontrada na coluna INFO.
Além dos registros VCF, o arquivo contém um header. Esse header é bastante útil porque adiciona
uma descrição texto para vários campos contidos no arquivo. Para os campos padrão pode-se consultar
a especificação do padrão, mas para campos específicos de algum programa a descrição no arquivo
é bastante útil. Em especial as linhas INFO e FORMAT descrevem as chaves das colunas INFO e
FORMAT no arquivo. Abaixo temos um exemplo de VCF header:
##fileformat=VCFv4.1
##fileDate=20090805
##source=myImputationProgramV3.1
##reference=file:///seq/references/1000GenomesPilot-NCBI36.fasta
##contig=<ID=20,length=62435964,assembly=B36,
md5=f126cdf8a6e0c7f379d618ff66beb2da,species="Homo sapiens",taxonomy=x>
##phasing=partial
##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency">
##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele">
##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129">
##INFO=<ID=H2,Number=0,Type=Flag,Description="HapMap2 membership">
##FILTER=<ID=q10,Description="Quality below 10">
##FILTER=<ID=s50,Description="Less than 50% of samples have data">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
4.1.1
Codificação do Genótipo em arquivo VCF
O genótipo é codificado como valores de alelo separados por / ou |. O alelo da referência é indicado
por 0, o primeiro alelo em ALT é indicado por 1, o segundo por 2, e assim por diante. Para um genoma
diplóide esse campo pode ser 0/1, 1|0, 1/2 e assim por diante. Para um genoma monoplóide, somente
um valor deve ser dado, e para um genoma triplóide podemos ter algo como 0|0|1. A diferença dos
separadores é que / indica genótipos fora de fase e | indica genópicos em fase.
4.1.2
Manipulando arquivos VCF
Como o arquivo VCF é uma tabela com colunas separadas por tabulação, pode facilmente ser lido (no
caso de um arquivo de tamanho razoável) em um planilha eletrônica como o Excel ou Open Office Calc.
Também pode ser facilmente manipulado utilizando scripts e utilitários do unix.
4.1.3
Indexando as variantes
Para visualizar o arquivo vcf no IGV é necessário comprimi-lo e indexá-lo primeiro. Para isso utilizamse duas ferramenta criadas pelo grupo do samtools: o bgzip e o tabix, ambos disponíveis no seguinte
endereço:
http://sourceforge.net/projects/samtools/files/tabix
O bgzip é um compactador de blocos2 e o que ele faz é aplicar o algoritmo de compressão em blocos
do arquivo de entrada. Já o tabix cria um índice que permite que o visualizador carregue na memória
2 Esse
é o mesmo formato de compactação utilizado pelo arquivo BAM
49
somente as variantes associadas à região que está sendo mostrada na tela. Para utilizá-los no arquivo
VCF:
bgzip <var.vcf>
tabix -p vcf var.vcf.bgz
4.2
Utilizando o samtools para detectar SNPs
O samtools é uma ferramenta geral para a manipulação de arquivos BAM e já foi abordada na seção
2.5.3. Ele também permite fazer análises simples de SNPs através do comando mpileup. Nessa seção
vamos mostar como usar o samtools gerar um arquivo em formato BCF3 e depois fazer a chamda de
SNPs. Para mais detalhes sobre o formato pileup, veja o apêndice 7.2. Para gerar o arquivo BCF,
usa-se4 :
samtools mpileup -d <max cov> -f <ref.fasta>
-g <align.bam> > <out.bcf>
Esse resultado não é uma lista de SNPs, mas sim um BCF intermediário que será utilizado para fazer
a chamada. É possível visualizar esse arquivo com o seguinte comando:
bcftool view <out.bcf> | less
A descrição dos campos do arquivo intermediário está no apêndice 7.3. Finalmente para aplicar o
modelo estatístico e fazer a chamada de SNPs utilizamos o bcftools da seguinte maneira:
bcftools view -D<cobertura> -c -v -b <out.bcf> > <var.raw.bcf>
A opção -c pede para o bcftools fazer a chamada de SNPs, a opção -v pede para o programa gerar
somente os sítios com variantes e a opção -b pede para gerar o resutado em formato BCF. Se você utilizar
a opção -g em vez de -c também é gerada a informação de genótipos.
O algoritmo do bcftools não é muito restritivo, por isso é recomendável filtrar a lista de SNPs. Junto
com o samtools vem o script vcfutils.pl que tem uma opção varFilter para fazer isso:
bcftools view -c -v <var.raw.bcf> | vcfutils.pl varFilter > <vars.vcf>
É possível mudar valores dos parâmetros de filtragem através dessas opções:
Default
Opção Descrição
-Q
minimum RMS mapping quality for SNPs
10
-d
minimum read depth
2
-D
maximum read depth
10000000
-a
minimum number of alternate bases
2
-w
SNP within INT bp around a gap to be filtered 3
-W
window size for filtering adjacent gaps
10
-1
min P-value for strand bias (given PV4)
0.0001
-2
min P-value for baseQ bias
1e-100
-3
min P-value for mapQ bias
0
min P-value for end distance bias
0.0001
-4
-e
min P-value for HWE (plus F<0)
0.0001
4.2.1
Gerando um arquivo consenso
Muitas vezes deseja-se um arquivo fasta com o consenso das regiões cobertas, para isso é possível utilizar
o vcfutils.pl da sequinte maneira:
samtools mpileup -uf <ref.fa> <aln.bam> |
bcftools view -cg - |
vcfutils.pl vcf2fq > consensus.fastq
3 Binary
4 Para
VCF
gerar um arquivo BCF não comprimido, troca-se o -g por -u.
50
O resultado é um arquivo fastQ, para convertê-lo para fasta utiliza-se o comando seqtk5 :
seqtk fq2fa consensus.fastq > consensus.fasta
4.3
Utilizando o GATK
O GATK, Genome Analysis Toolkit é um software desenvolvido pelo Broad Institute para análise de
dados de nova geração, com ênfase na análise de variantes e genotipagem. Ele está disponível em:
http://www.broadinstitute.org/gatk/download
O programa tem uma estrutura modular, sendo dividio em diversas análises, todas empacotadas junto
com o framework em um arquivo jar. Para ter a lista de análises utiliza-se o comando:
java -jar GenomeAnalysisTK.jar
Para executar uma análise específica:
java -jar GenomeAnalysisTK.jar -T <analysis> <args*>
Na proxima seção vamos mostrar a utilização do GATK para fazer uma chamada de variantes em
dataset de ampliseq.
4.3.1
Chamando Variantes no GATK
Para demonstar a chamada de variantes com o GATK vamos utilizar um dataset do comprehensive
cancer panel. As estapas da análise são as seguintes:
1. Fazer o download dos arquivos FLO-528.bam.gz e CCP.bed.gz em:
http://ioncommunity.lifetechnologies.com/docs/DOC-3012
Tendo os arquivos, é necessário decompactá-los e indexar o arquivo bam com os seguintes comandos:
gunzip FLO-528.bam.gz
gunzip CCP.bed.gz
samtools index FLO-528.bam
2. Recriar o genoma de referência utilizado no mapeamento. A sequências dos cromossomos está
disponível no UCSC:
http://hgdownload.cse.ucsc.edu/goldenPath/hg19/bigZips/chromFa.tar.gz
Porém, a sequência mitocondrial utilizada está no Genbank:
http://www.ncbi.nlm.nih.gov/nuccore/NC_012920
É preciso baixá-la em formato fasta e salvar com o nome de chrM.fa. Depois, é preciso editar esse
arquivo, mudando o header para:
>chrM
Em seguida, é preciso descompactar os cromossos e concatená-los junto com o genoma mitocondrial
em um único arquivo:
tar zxvf chromFa.tar.gz
cat chr[1-9].fa chr[12][0-9].fa chrX.fa chrY.fa chrM.fa
> hg19.fasta
Por fim, é preciso indexar o arquivo fasta utilizando o samtools:
5 ver
seção 2.1.2
51
samtools faidx hg19.fasta
E criar o dicionário de sequências do arquivo com o o Picard:
java -jar CreateSequenceDictionary.jar
R=hg19.fasta O=hg19.dict
3. Fazer a chamada de variantes:
java -jar
-I
-L
-o
GenomeAnalysisTK.jar -T UnifiedGenotyper
FLO-528.bam -R hg19.fasta
CCP.bed
SNP1.vcf
O resultado é o arquivo SNP1.vcf, com a lista de SNP encontrados.
4.3.2
Anotando as variantes com o dbSNP
Uma das primeiras análises a ser feite com uma lista de variantes é comparar elas com a base de SNPs
comnhecidas do NCBI, o dnSNP. Para isso, é necessário baixar o arquivo vcf com o dbSNP:
ftp://ftp.ncbi.nih.gov/snp/organisms/human_9606/VCF/00-All.vcf.gz
A princípio, seria muito fácil utilizar esse arquivo para anotar o arquivo de variantes gerado pelo
variant caller. O problema é a diferença nos nomes dos cromossomos, o dbSNP utiliza 1, 2, 3 etc nos
nomes dos cromossomos e a referência que utilizamos para fazer a chamada utiliza o padrão da UCSC:
chr1, chr2 etc. Para resolver essas discrepâncias podemos utilizar um script que mude os nomes dos
cromossomos no dbSNP. O script está disponível no apêndice 7.4. Para fazer a conversão:
gzcat 00-All.vcf.gz | addchr.pl
> dbsnp-chr.vcf
O passo seguinte é indexar o arquivo vcf gerado. A melhor alternativa para isso é utilizar o igvtools:
igvtools index dbsnp-chr.vcf
Por fim faz-se a anotação:
java -jar GenomeAnalysis.jar -T VariantAnnotator
-R hg19.fasta -D dbsnp-chr.vcf
-V FLO-528.vcf -o FLO-528.ann.vcf
O resultado vai ser um novo arquivo vcf chamado FLO-528.ann.vcf, com o rsID dos SNPs conhecidos
no campo ID.
4.3.3
Comparando arquivos VCF com o GATK
Frequentemente queremos comprar diferentes arquivos VCF, por exemplo quando estamos comparando
amostras relacionadas como tumor e normal ou então trios de pai, mãe e filho. Nesses casos queremos
responder perguntas como: Quais são as mutações presentes somente no tumor ou mutações que existam
no probando, mas não nos seus pais.
O comando abaixo gera um arquivo VCF com diversas amostras combinadas:
java -jar GenomeAnalysis.jar -T CombineVariants
-R reference.fasta
-genotypeMergeOptions UNIQUIFY
-V sample1.vcf
-V sample2.vcf
-o combined.vcf
52
Esse comando vai gerar um novo VCF com os genóticos de ambas as amostras, um em cada coluna.
Um outra análise é separar somente os SNP’s discordantes, ou seja, os que existem em somente uma
amostra, para isso usamos o seguinte comando:
java -jar GenomeAnalysis.jar -T SelectVariants
-R reference.fasta
-V sample1.vcf
-disc sample2.vcf
-o sample1_only.vcf
4.3.4
Generando uma referência alternativa
java -jar GenomeAnalysis.jar -T FastaAlternateReferenceMaker
-R reference.fasta
-V filtered_variants.vcf
-o newref.fasta
4.4
Utilizando Ion Varriant Caller
É possível baixar o plugin Torrent Suite Variant Caller (TSVC) na Ion Community e utilizá-lo para
fazer a chamada de variantes em um outro computador. A versão 2.2 do plugin está disponível em:
http://ioncommunity.lifetechnologies.com/docs/DOC-2936
Deve-se baixar o Offiline Installer, que nada mais é do que um arquivo zip chamado:
variantCaller-2.2.3.31037.zip
Descompacte esse arquivo no mesmo diretório dos dados6 :
unzip -x variantCaller-2.2.3.31037.zip
Vai ser criado um diretório chamado variantCaller com o programa. O comando para fazer a
chamada de variantes é o seguinte:
mkdir FLO-528-tsvc ;
./variantCaller/variantCaller.py
-r ./variantCaller/
-p ./variantCaller/paramFiles/ampliseq.Somatic.json
-b CCP.bed
FLO-528-tsvc
hg19.fasta
FLO-528.sorted.bam
É necessário criar o diretório onde os resultados vão ser escritos, o programa não faz isso sozinho,
por isso a primeira linha. É preciso também passar o diretório onde o TSVC está instalado com a
opção -r. Em seguida, informa-se qual o arquivo com os parâmetros para a chamada de variantes,
no caso escolhemos o arquivo ampliseq.Somatic.json, o nome do arquivo é a combinação do tipo de
biblioteca com o nível de estringência desejado, no caso uma biblioteca de ampliseq com a estringência
para variantes somáticas, ou de baixa frequência. Os arquivos de parâmetros disponíveis estão na tabela
4.3. O parâmetro -p informa o arquivo .bed com as regiões que foram capturadas. Por fim, temos os
seguintes argumentos: diretório de saída, genoma de referência e arquivo .bam. Os arquivos com os
resultados vão ser:
• FLO-528-tsvc/SNP_variants.vcf: Somente os SNPs chamados.
• FLO-528-tsvc/indel_variants.vcf: Somente os indels chamados.
• FLO-528-tsvc/TSVC_variants.vcf: Ambos os arquivos combinados.
6 É possível instalar em qualquer diretório que se queira, basta depois mudar a linha de comando para refletir essa
mudança.
53
Tipo de biblioteca
Estringência
ampliseq
ampliseq
targetseq
targetseq
fullgenome
fullgenome
Germ Line
Somatic
Germ Line
Somatic
Germ Line
Somatic
Tabela 4.3: Lista de parâmetros para Torrent Suite Variant Caller (TSVC)
4.5
Anotando os SNP’s com o snpEff
O snpEff é uma ferramenta muito útil para comparar um arquivo VCF com as anotações de um genoma.
Ele está disponível em:
http://snpeff.sourceforge.net/
Após baixá-lo o primeiro passo é baixar o arquivo binário com as anotações do genoma desejado. O
arquivo snpEff.config contém a lista dos genomas disponíveis. Para baixar as anotações do hg19:
java -jar snpEff.jar -c snpEff.config
download hg19
Os arquivos vão ser gravados no diretório ~/snpEff/data/hg19. A localização desses dados pode ser
mudada editando o arquivo de configuração snpEff.config. Para anotar um arquivo VCF utiliza-se:
java -jar snpEff.jar eff
-c snpEff.config
hg19 SNP_variants.vcf >
SNP_variants.snpeff.vcf
O resultado vai ser um novo arquivo VCF com uma tag EFF no campo INFO, descrevendo o efeito
do SNP. Essa tag contém uma lista de registros com a seguinte estrutura:
Effect ( Effefct_Impact | Codon_Change | Amino_Acid_change |
Gene_Name | Gene_BioType | Coding | Transcript |
Rank [ | ERRORS | WARNINGS ] )
Abaixo vemos um exemplo de um registro:
NON_SYNONYMOUS_CODING(MODERATE|MISSENSE|Aag/Gag|K1222E|2240|PDE4DIP||CODING|NM_001198832.1|29|1)
Ele mostra um mutação não sinônimo no transcrito MN_001198832.1 do gene K122E. A descrição de
cada um dos campos é:
1. Effect: Efeito da variantes. A lista dos efeitos que o programa detecta está na tabela 4.4.
2. Effect impact: Impacto do efeito. Pode ter os seguintes valores: High, Moderate, Low, Modifier.
3. Functional class: Classe funcional: NONE, SILENT, MISSENSE, NONSENSE.
4. Codon_Change: Mudança de códon, no formato: codon original/novo codon.
5. Amino_Acid_change: Mudança de aminoácido, no formato: AA antigo posição novo AA (ex:
’E30K’)
6. Amino_Acid_length: Tamanho da proteína em aminoácidos (tamanho do transcrito dividido por
3).
7. Gene_name: Nome do gene.
8. Gene_bioType: bioType do gene, se disponível. Segue as convenções do ENSEMBL. Por exemplo:
protein_coding.
54
9. Gene_Coding: Pode ser CODING ou NON_CODING. Caso o gene esteja marcado como codante de
proteína ou não.
10. Trancript: ID do transcrito (usualmente ENSEMBL IDs)
11. Exon/Intron Rank: Posição do Exon ou do Intron (ex: ’1’ para o primeiro exon, 2 para o segundo
etc)
12. Genotype: Número do genótipo desse efeito (ex: ’2’ se o efeito corresponde ao segundo ALT)
13. Warnings / Errors: Qualquer aviso ou erro (não é mostrado se estiver vazio).
Efeito
INTERGENIC
UPSTREAM
UTR_5_PRIME
UTR_5_DELETED
START_GAINED
SPLICE_SITE_ACCEPTOR
SPLICE_SITE_DONOR
START_LOST
SYNONYMOUS_START
CDS
GENE
TRANSCRIPT
EXON
EXON_DELETED
NON_SYNONYMOUS_CODING
SYNONYMOUS_CODING
FRAME_SHIFT
CODON_CHANGE
CODON_INSERTION
CODON_CHANGE_PLUS_CODON_INSERTION
CODON_DELETION
CODON_CHANGE_PLUS_CODON_DELETION
STOP_GAINED
SYNONYMOUS_STOP
STOP_LOST
INTRON
7 Multiple
Descrição
A variante está na região intergênica
Região Upstream do gene (por default até 5k bases)
Variante na região 5’UTR
A variante deleta um exon que está na região 5’UTR.
A variante na região 5’UTR produz um sequência de 3 bases que
pode ser um START códon.
A variante está em um splice acceptor site (definido como as duas
bases antes do início do exon, exceto para o primeiro exon).
A variante está em um Splice donor site (definido como as duas
bases depois do exon, exceto para o último exon).
Variante converte um start codon em um non-start codon. Ex:
aTg/aGg, M/R)
Variante converte um start codon em outro start codon. Ex:
Ttg/Ctg, L/L (TTG and CTG can be START codons)
A variante está em um CDS.
A variante está em um gene.
A variante está em um transcrito.
A variante está em um exon.
Uma deleção que remove um exon.
A variante faz o códon gerar um amino ácido diferente. Ex:
Tgg/Cgg, W/R
A variante mudao o códon, mas não o amino ácido. Ex: Ttg/Ctg,
L/L
Uma inserção ou deleção que gera um frame shift, por exemplo
um indel que não seja múltiplo de 3.
Um ou mais códons são modificados. Por exemplo, um MNP7 de
tamanho múltiplo de 3.
Um ou mais códons inseridos, por exemplo uma inserção múltipla
de 3 na fronteira de um códon.
Um códon foi modificado e um ou mais foram inseridos. Ex: uma
inserção múltipla de 3, mas não na fronteira do códon.
Um ou vários códons foram deletados. Ex: Uma deleção múltipla
de três na fronteira do códon.
Um códon foi modificado e um ou mais foram deletados. Ex: Uma
deleção múltipla de três, mas não na fronteira do códon.
Variante gera um STOP codon. Ex: Cag/Tag, Q/*
Variante modifica um STOP codon em outro STOP codon. Ex:
taA/taG, */*
Variante muta um STOP codon em um não STOP codon. Ex:
Tga/Cga, */R
A variante atinge um intron. Tecnicamente, ele não atinge um
exon no transcrito.
nucleotide polimorphism
55
UTR_3_PRIME
UTR_3_DELETED
DOWNSTREAM
INTRON_CONSERVED
INTERGENIC_CONSERVED
INTRAGENIC
RARE_AMINO_ACID
NON_SYNONYMOUS_START
A variante atinge a região 3’UTR.
A variante apaga um exon que está na região 3’UTR do transcrito.
Downstream do gene (por default até 5K bases).
A variante está em uma região intrônica altamente conservada.
A variante está em uma região intergênica altamente conservada.
A variante atinge um gene, mas nenhum transcrito nesse gene.
A variante atinge um aminoácido raro, portanto tem grandes
chances de produzir uma perda de função.
Variante muta um start codon em outro start start codon (o novo
códon produz um AA diferente). Ex: Atg/Ctg, M/L (ATG e CTG
podem ser START codons)
Tabela 4.4: Lista de efeitos preditos pelo snpEff
56
Capítulo 5
Montagem denovo
Nos capítulos anteriores foram discutidas técnicas de análise que envolvem o mapeamento das sequências
obtidas em um genoma de referência, porém, quando não se tem o genoma de referência do organismo
estudado é preciso gerar, ou montar, esse genoma de novo, ou seja, pela primeira vez. Ao contrário do
mapeamento em que os algoritmos estão muito bem estabelecidos, a área de montagem de genomas é
muito mais experimental e ainda um campo muito ativo de pesquisa[39].
Neste capítulo vamos mostrar como usar o montador Mira[4] para montar genomas bacterianos com
dados do Ion Torrent PGM.
Dataset de E. coli:
http://ioncommunity.lifetechnologies.com/docs/DOC-7563
Temos um dataset de mate-pair para denovo disponível na Ion Community:
http://ioncommunity.lifetechnologies.com/docs/DOC-7392
5.1
Montando o genoma com o Mira
O Mira está disponível no sourceforge. Atualmente existem duas versões disponíveis, a 3.4 estável e a 3.9
em desenvolvimento. Normalmente, é melhor utilizar sempre a versão estável, porém um dos focos da
versão em desenvolvimento é o suporte ao ion torrent, motivo pelo qual vamos abordar as duas versões.
Ambas as versões estão disponíveis em seus respectivos diretórios em:
http://sourceforge.net/projects/mira-assembler/files/MIRA/
É possível baixar o código fonte e também versões precompiladas para Linux. Também é necessário
baixar o programa sff_extract (ver 2.2.1). Para fazer a montagem, vamos utilizar os seguintes dados:
C11-127_40X.sff.zip
Corrida de fragmentos
http://bit.ly/denovo-C11-127_40x
FRA-257_40X.sff.zip
Corrida de mate pair de 3.5kbp
C28-140_40X.sff.zip
Corrida de mate pair de 8.9kbp
MG1655.fasta.gz
Genoma de referência
LMP_Linkers.fasta.gz Sequência dos linkers
No caso, sugere-se utilizar as versões que foram subsampled para que a cobertura fosse somente 40
vezes o tamanho do genoma. Nota-se que utilizar uma coberutra muito alta geralmente piora a qualidade
de montagem, pois os erros se acumulam e geram muitos pequenos contigs.
A primera etapa é transformar o arquivo sff em fastq, mas para isso é preciso utilizar o programa
sff_extract. Deve-se utilizar esse programa e não os outros citados na seção 2.2.1 porque ele gera
também um arquivo XML com as informações de clipagem das sequências. Um ponto muito importante
é seguir a convenção de nomes do Mira, o arquivo de sequências tem que ter o seguinte nome:
<proj>_in.<platform>.fastq
Já o arquivo XML tem que ter este nome:
<proj>_traceinfo_in.<platform>.xml
No caso do Ion Torrent <platform> tem que ser iontor e <proj> é o nome escolhido para o projeto.
O comando para fazer a conversão tem a seguinte estrutura:
57
sff_extract -s <proj>_in.iontor.fastq
-x <proj>_traceinfo_in.iontor.xml
<arquivo.sff*>
A fórmula geral para executar o mira é a seguinte:
mira
--project=frag
--job=denovo,genome,accurate,iontor
Na opção --project utilizamos o mesmo nome dos arquivos, e com isso o Mira vai utilizar os arquivos
corretos. Na opção --job descrevemos o job de montageme as opções são: denovo ou mapping, genome
ou est, accurate ou draft e a lista de tecnologias à serem utilizadas.
Além dessas, é possível adicionar uma série de outras opções que fazem o ajuste do algoritmo e do
comportamento do programa, alguns exemplos são:
-GE:not=x
Ajusta o número de threads do programa para x. O Mira utiliza 2 threads
por default. Aumentar esse valor agiliza o processo, mas somente em uma das
etapas, o algoritmo SKIM.
-OUT:ora=1 Pede para o Mira gerar um arquivo .ace como saída da montagem. Esse arquivo
pode depois ser utilizado para visualizar a posição dos reads nos contigs.
Os resultados vão estar em um diretório chamado <project>_assembly, e dentro deste vão estar os
seguintes diretórios:
• <project>_d_info Diretório com informações sobre a montagem. Normalmente, o primeiro arquivo à se verificar após o término do programa é o <project>_info_assembly.txt, que contém
as estatísticas mais relevantes sobre a montagem.
• <project>_d_results Diretório com os arquivos da montagem, contém os seguintes arquivos:
– <project>_out.unpadded.fasta (e .qual) Arquivo com os contigs montados e respectivo
arquivo de qualidade.
– <project>_out.padded.fasta (e .qual) Versão do arquivo anterior com ’*’ adicionados em
posições nas quais exista uma pequena evidência de bases adicionais.
– <project>_out.maf Montagem no formato nativo do Mira.
– <project>_out.caf Montagem no formato CAF, criado pelo Sanger1 .
– <project>_out.ace Arquivo .ace compatível com diversos visualizadores de montagem. Gerado pela opção -OUT:ora=1. Também pode ser gerado com o comando convert_project
do próprio mira.
• <project>_d_chkpt Checkpoint do montador, pode ser apagado após o término da montagem.
• <project>_d_tmp Diretório com arquivos temporários, também pode ser apagado.
Na proximas seções vamos detalhar como utilizar o Mira em diferentes situações.
5.1.1
Montando uma biblioteca de fragmentos utilizando o Mira 3.4
Vamos primeiro demonstrar como fazer a montagem utilizando somente um arquivo de fragmentos.
Iniciando pela geração do arquivo fastq:
sff_extract
-s frag_in.iontor.fastq
-x frag_traceinfo_in.iontor.xml
C11-127_40X.sff
Note que o nome do projeto é frag. Em seguida, execute o Mira com o seguinte comando:
1 http://www.sanger.ac.uk/resources/software/caf/
58
mira
--project=frag
--job=denovo,genome,accurate,iontor
-GE:not=4 -OUT:ora=1
IONTOR_SETTINGS -AS:mrpc=100
Em relação ao comando apresentado na seção anterior, adicionamos as opções específicas de cada
plataforma, para isso colocamos IONTOR_SETTINGS seguido das opções para o Ion Torrent, no caso
-AS:mrpc=100 que diz para filtrar todos os contigs com menos de 100 reads.
5.1.2
Montando uma biblioteca de mate-pair utilizando o Mira 3.4
tag1
IA
tag2
Figura 5.1: Estrutura do read de mate-pair do Ion Torrent
Na figura 5.1 vemos a estrutura do read gerado pela técnica de mate-pair no Ion Torrent. Pela construção
temos a tag1 seguida pelo adaptador interno (IA) e a tag2 . O sentido de leitura está indicado pela seta.
Por conta dessa estrutura é preciso separar as tags utilizando a sequência do adaptador interno, o que é
feito na conversão de sff para fastq. O sff_extract utiliza o mapeador SSAHA2 para mapear o IA e
gerar as tags. Portanto, é preciso instalar o SSAHA2, que está disponivel em:
http://www.sanger.ac.uk/resources/software/ssaha2/
É preciso colocar os programas SSAHA2 no path e em seguida utiliza-se o seguinte comando para
gerar os arquivos:
sff_extract
-l LMP_Linkers.fasta
-s lmp35_in.iontor.fastq
-x lmp35_traceinfo_in.iontor.xml
FRA-257_40X.sff
A opção -l fornece um arquivo com a sequência do IA e do seu reverso complementar, no caso, para
o Ion Torrent as sequências são:
>IA
CTGCTGTACCGTACATCCGCCTTGGCCGTACAGCAG
>IA_revcom
CTGCTGTACGGCCAAGGCGGATGTACGGTACAGCAG
mira
--project=frag
--job=denovo,genome,accurate,iontor
-GE:not=4 -OUT:ora=1
IONTOR_SETTINGS -AS:mrpc=100
-GE:tismin=3000 -GE:tismax=4000
5.1.3
Fazendo uma montagem mista com o Mira 3.4
Agora vamos montar a biblioteca de fragmentos junto com as duas bibliotecas de mate-pair. Para isso
vamos iniciar o processo extraindo os reads de fragmentos:
sff_extract
-s mix_in.iontor.fastq
-x mix_traceinfo_in.iontor.xml
C11-127_40X.sff
59
Em seguida, vamos extrair os dados de primeira biblioteca de mate-pair, devemos prestar muita
atença à opção -a, que pede para que os novos reads extraídos sejam anexados ao arquivo criado na
etapa anterior.
sff_extract
-a -l LMP_Linkers.fasta
-s mix_in.iontor.fastq
-x mix_traceinfo_in.iontor.xml
-i "insert_size:3500,insert_stdev:500"
FRA-257_40X.sff
Outro ponto importante é a opção -i, que adiciona as informações do inserto ao arquivo XML, no
caso nós adicionamos o tamanho do inserto e o desvio padrão deste, respectivamente, 3500 e 500 bp.
Repetimos o mesmo processo com a segunda biblioteca de mate-pair, no caso alterando o tamanho do
inserto para 8900 bp.
sff_extract
-a -l LMP_Linkers.fasta
-s mix_in.iontor.fastq
-x mix_traceinfo_in.iontor.xml
-i "insert_size:8900,insert_stdev:500"
C28-140_40X.sff
Por fim, executamos a montagem com o mesmo comando do mira:
mira
--project=frag
--job=denovo,genome,accurate,iontor
-GE:not=4 -OUT:ora=1
IONTOR_SETTINGS -AS:mrpc=100
Note que não informamos o tamanho do inserto pois essa informação já está embutida no arquivo
xml. O resultado de todas as configurações de montagem para o Mira 3.4 está na tabela 5.1.
frag
LMP 3.5
LMP 8.9
todos
Contigs Grandes
Número de contigs
Consenso
Cobertura (%):
Maior Contig
N50
N90
N95
76
4,606,198
98%
358,908
119,555
41,691
31,604
1,617
4,878,703
104%
7,696
3,928
1,950
1,223
2,766
4,156,500
89%
26,661
1,950
667
578
349
4,936,678
105%
414,460
167,387
31,608
1,861
Todos
Número de contigs
Consenso
Maior Contig
N50
N90
N95
Leituras Utilizadas
76
4,606,198
358,908
119,555
41,691
31,604
1,085,429
1,716
4,915,162
7,696
3,923
1,869
1,128
2,235,506
5,987
5,133,612
26,661
1,422
334
255
4,384,827
2,753
6,509,621
414,460
126,091
616
506
2,906,577
Tabela 5.1: Resultados das montagens do Mira
5.1.4
Fazendo uma montagem com o Mira 3.9
Apesar de ainda estar em desenvolvimento, a versão do Mira 3.9 oferece um melhor suporte a dados do
Ion Torrent além de um novo formato de arquivo de configuração para as corridas, que facilita muito a
execução de corridas que combinam diferentes bibliotecas.
60
Para montar o dataset de fragmentos utiliza-se o seguinte arquivo, chamado frag.manifest. Exemplo:
project = frag
job = genome,denovo,accurate
parameters = -GE:not=4 IONTOR_SETTINGS -AS:mrpc=100
readgroup = fragment
technology = iontor
data = frag_in.iontor.fastq frag_traceinfo_in.iontor.xml
Note que os parâmetros estão definidos no topo do arquivo, mas o nome dos arquivos estão definidos
na seção readgroup em vez de serem determinados pela convenção de nomes. Mantivemos os mesmos
nomes de arquivos dos exemplos do mira 3.4, mas poderíamos tê-los chamado de qualquer outro nome
que quiséssemos. Para executar a montagem digita-se o comando:
mira frag.manifest
O uso do arquivo de configuração se torna mais útil quando temos mais de um readgroup:
project = mix
job = genome,denovo,accurate
parameters = -GE:not=4 IONTOR_SETTINGS -AS:mrpc=100
readgroup = frag
data = C11-127_40X.fastq C11-127_40X.xml
technology = iontor
readgroup = lmp89
data = C28-140_40X.fastq C28-140_40X.xml
technology = iontor
templatesize = 8328 9774
segmentplacement = ---> --->
readgroup = lmp35
data = FRA-257_40X.fastq FRA-257_40X.xml
technology = iontor
templatesize = 3075 3863
segmentplacement = ---> --->
Note que definimos 3 readgroups, um para cada tipo de biblioteca. Definimos também o intevalo
válido para o tamanho do inserto das bibliotecas de mate-pair, assim como a sua orientação. Veja que
dessa vez utilizamos uma convenção de nomes completamente diferente, algo que não seria possível no
mira 3.4.
Na tabela 5.2 podemos ver os resultados da montagem de diferentes combinações de bibliotecas.
5.1.5
Interpretando os resultados
Na tabela 5.1 vemos os resultados da montagem para as diferentes bibliotecas e também a montagem
mista que utiliza todas elas. As estatísticas estão divididas em duas seções: “Contigs Grandes” e “Todos”.
A primeira mostra as estatísticas somente dos contigs com mais de 500 bp e que satisfazem certos critérios
de cobertura, já a segunda seção mostra as estatísticas de todos os contigs gerados, independentemente do
tamanho e da cobertura2 . Para avaliar a montagem podemos começar olhando para o “Total Consensus”,
para verificar se o valor está de acordo com o tamanho esperado do genoma. Em seguida, verifica-se o
número total de contigs. Quanto maior esse número, mais fragmentada está a montagem e mais “gaps”
ela apresenta.
2 Com
exceção dos contigs filtrados pelos critérios estabelecidos no momento da montagem
61
frag
lmp35
lmp35 + frag
lmp89
lmp89 + frag
Todos
Contigs Grandes
3 Número de Contigs
Consenso
Cobertura (%)
Maior contig
N50
N90
N95
79
4,633,751
99,9%
231,197
93,793
35,799
26,409
223
4,573,815
98,6%
188,021
40,235
11,397
7,035
55
4,632,400
99,8%
590,852
204,781
46,501
36,041
348
4,562,390
98,3%
99,306
30,520
5,929
3,710
54
4629,730
99,8%
540,324
185,223
55,558
45,094
49
4,631,293
99,8%
647,731
178,608
52,857
35,447
Todos
Número de Contigs
Consenso
Cobertura (%)
Maior Contig
N50
N90
N95
Leituras utilizadas
79
4,633,751
99,9%
231,197
93,793
35,799
26,409
1,022,516
260
4,585,603
98,8%
188,021
40,235
11,378
6,703
2,302,069
146
4,770,620
102,8%
590,852
179,289
40,957
32,292
3,246,379
410
4,586,296
98,8%
99,306
30,520
5,811
3,502
2,319,887
104
4,714,793
101,6%
540,324
185,146
51,490
41,464
3,300,475
438
5,254,508
113,3%
647,731
126,981
2,360
1,601
5,593,167
Tabela 5.2: Resultados da montagem do Mira 3.9
Outra estatística muito importante são os Nxx: N50, N90 etc. O N50 representa o tamanho do
contig tal qual 50% do “Total Consensus” está representado por contigs iguais ou de mesmo tamanho.
De maneira similar se define o N90, o N95 ou qualquer outro que se queira. Na figura 5.2 vemos o gráfico
da soma dos tamanhos dos contigs: do maior para o menor, estão indicados os pontos em que a soma
do tamanho representa 50%, 90% e 95% da soma total, e os respectivos valores de N50, N90 e N95. O
N50 é normalmente reportado nas publicações que tratam de montagem de genomas porque ele é um
compromisso entre a capacidade do montador de gerar grandes contigs mas também em não fragmentar
muito o genoma.
Analisando os dados da tabela 5.2, vemos que a combinação de uma biblioteca de mate-pair com
uma de fragmentos gera contigs maiores (o N50 aumenta aproximadamente 5×), e um número menor de
contigs grandes. Por outro lado, se olharmos para os dotplots gerados para todos esses datasets (5.3),
vemos que o número de contigs que se alinham fora da diagonal aumenta, o que indica um maior número
de misassemblies.
5.2
Montando genomas com o SPAdes
SPAdes é um montador baseado em grafos de deBrujin desenvolvido por pesquisadores russos. O software
está disponível na seguinte URL:
http://bioinf.spbau.ru/spades
A montagem por grafos de deBrujin exige menos memória do que pela técnica de overlap-layoutconsensus do Mira. Porém a montagem por grafos é mais sensível à erros de sequenciamento, por isso
ela é norlamente precedida por uma etapa de correção de erros. O SPAdes inclui um corretor de erros
próprio para o Ion, que utiliza a informação dos flows para corrigir as leituras antes de fazer a montagem.
O SPAdes possui um script em python que executa todas as etapas da montagem, o seu uso é bastante
simples:
spades.py -t 8 -o spades_assembly --iontorrent -s input.bam
O parâmetro -t informa o número de threads e o -s o diretório com os arquivos de output. As
estatísticas de montagem foram feitas com o software quast, na tabela 5.2 estão os resultados para a
montagem do genoma de E. coli.
62
Assembly Statistics
105
4,750,000
100
4,500,000
95
4,250,000
90
4,000,000
85
3,750,000
75
3,500,000
70
3,250,000
65
3,000,000
60
2,750,000
55
2,500,000
50
2,250,000
N95=30,290 bp
N90=36,060 bp
45
2,000,000
40
1,750,000
35
1,500,000
30
1,250,000
N50=119,186 bp
25
1,000,000
20
750,000
15
10
500,000
5
250,000
0
0
0
5
10
15
20
25
30
35
40
45
50
55
60
65
70
75
80
Contig Number
Figura 5.2: Gráfico da soma do tamanho dos contigs para o dataset de fragmentos.
5.3
5.3.1
Análises pós montagem
Comparando a montagem com uma referência
Quando se faz a montagem de um genoma conhecido, é possível avaliar a qualidade de montagem
alinhando os contigs contra esse genoma. Uma ferramenta para fazer isso é o MUMmer, disponível em:
http://mummer.sourceforge.net/
Utiliza-se para fazer o alinhamento o comando nucmer, que é um alinhador muito rápido para um
pequeno conjunto de sequências:
nucmer -maxmatch -c 100 -p <name> ref.fasta conrigs.fasta
Esse comando vai gerar um arquivo chamado <name>.delta que contém todos, alinhamentos entre os
contigs e a referência codificados em um formato compacto, propício para o processamento por software.
Ou seja, não é um formato para ser visualizado diretamente por pessoas. As opção -maxmatch pede para
o programa tentar todas as ancôras de alinhamento, mesmo se elas não forem únicas, e a opção -c 100
pede para remover alinhamentos muito curtos, com menos de 100bps.
Em seguida, utiliza-se o comando delta-filter para filtrar os alinhamentos e tornar a visualização mais
simples:
delta-filter -r <name>.delta > <name>.delta.r
A opção -r diz para o programa escolher o melhor alinhamento em relação à referência. É possível
também filtrar pelo tamanho do alinhamento, com a opção -l. Por exemplo, -l 1000 vai mostrar
somente os alinhamentos 1kbp ou mais.
Por fim utilize o comando mummerplot para gerar o gráfico de comparação dos contigs contra a
referência:
mummerplot -large -layout -p <name> <name>.delta.r
63
Cumulative Length
Cumulative Length (%)
80
+ Frag
Frag
3.5 kbp
8.9 kbp
Figura 5.3: Dotplot de todas as bibliotecas montadas com o mira 3.9. Na primeira coluna vemos o dotplot
das bibliotecas de fragmentos, LMP 3.5kbp e LMP 8.9 kbp, e na segunda coluna vemos a combinação
desses bibliotecas junto com a de fragmentos.
64
Assembly
# contigs (≥ 0 bp)
# contigs (≥ 1000 bp)
Total length (≥ 0 bp)
Total length (≥ 1000 bp)
# contigs
Largest contig
Total length
GC (%)
N50
N75
L50
L75
# N’s per 100 kbp
contigs
157
107
4470161
4455702
116
326976
4462511
50.72
82852
45583
17
35
0.00
Tabela 5.3: All statistics are based on contigs of size ≥ 500 bp, unless otherwise noted (e.g., "# contigs
(≥ 0 bp)"and "Total length (≥ 0 bp)"include all contigs).
O mummerplot utiliza o gnuplot para gerar os gráficos, por isso é necessário que esse programa esteja
instalado. Também é possível gerar um arquivo de imagem com a opção --png ou um Postscript com
--ps. Podemos ver o resultado do mmumerplot na figura 5.4.
5.3.2
Ordenando os contigs
Além de servir para comparar a montagem, um genoma de referência proximo também pode ser utilizado
para ordenar os contigs. Obviamente que o montador não tem como saber a posição relativa dos contigs
e o posicionamento destes no arquivo de saída é aleatório ou no maximo ordenado por tamanho ou outro
critério de qualidade (veja figura 5.5 (A). O Mauve[36] é uma ferramenta gráfica que permite alinhar e
visualizar sequências. o software está disponível no seguinte endereço:
http://darlinglab.org/mauve/mauve.html
Apos abrir o software entre no menu Tools e escolha “Move Contigs”. Crie um novo diretório para
a análise. Adicione a sequência de referência e em seguida os contigs. O programa vai fazer uma
alinhamento progressivo, para cada iteração será gerado um diretório chamado AlignmentX, onde X é o
número de iteração. Ao final do processo o programa vai mostrar o resultado do último alinhamento. O
arquivo com os contigs ordenados vai estar no diretório AlignmentX da última iteração. O resultado do
alinhamneto com os contigs reordenados está na figura 5.5 (A).
5.3.3
Visualizando a montagem no Tablet
É possível visualizar a montagem dos contigs, ou seja, a posição de cada read nos contigs, utilizando o
programa Tablet[29], que está disponível em:
http://bioinf.scri.ac.uk/tablet/
Esse programa possui instalador gráfico e suporta alguns formatos de alinhamento, entre eles o
formato ACE que pode ser gerado pelo Mira com a opção -OUT:ora=1. Caso o Mira não tenha rodado
com essa opção, é fácil converter o arquivo .maf em .ace com o comando:
convert_project
-f maf -t ace <input>.maf <output>
Tendo o arquivo .ace basta clicar em “Open Assembly” e escolhê-lo na janela de diálogo. No painel
da esquerda está a lista de contigs. Quando se clica em um deles o painel central mostra os alinhamentos
(ver figura 5.6).
65
Figura 5.4: Dotplot da montagem do dataset de fragmentos deita pelo mummerplot. O traços em
vermelho indicam regiões que alinharam no sentido forward e as em azul indicam alinhamento no sentido
reverse.
66
(A) Original
(B) Reordenado:
Figura 5.5: Alinhamento dos contigs em relação ao genoma de referência. (A) Alinhamento original. (B)
alinhamento depois que os contigs foram movidos pelo Mauvi.
Figura 5.6: Visualizador de montagem Tablet
67
68
Capítulo 6
RNA Seq
O RNA-Seq, também chamado Whole Transcriptome Sequencing, é o sequenciamento do RNA de uma
célula. Comparado com o microarray, o RNA-Seq possui um desenho experimental mais simples pois
não é necessário fazer réplicas técnicas e nem é preciso fazer complexas normalizações. Porém ele exige
uma etapa prévia de análise, que é o mapeamento dos reads no genoma de referência e a contagem dos
reads por exon. Porém, há uma complicação no caso do RNA, o splicing, que é a remoção de partes
da molécula de RNA antes da tradução para proteína (veja figura 6.1) a e b. As partes do RNA que
são removidas se chamam introns, já as partes que são efetivamente traduzidas se chamam exons. Esse
é um fenômeno que tem que ser levado em conta no momento do mapeamento dos reads, pois reads
posicionados na fronteira de dois introns não vão mapear no genoma (veja figura 6.1 c).
Um arquivo de anotação de genes é importante tanto para o alinhamento quanto para a quantificação
da expressão. Em espécies sem uma boa anotação de genes é possível utilizar o cuffllinks para estimar
a estrutura dos genes, porém em um organismo já anotado é importante utilizar a anotação padrão
para aproveitar o conhecimento estabelecido sobre determinado gene, é importante saber que o gene
diferencialmente expresso detectado no experimento é o BRCA1 e não o gene cuffXYZ. Para o genoma
humano recomendamos o uso da anotação do projeto Gencode. Para as duas mais recentes versões do
genoma humano temos os seguintes links:
hg19 http://www.gencodegenes.org/releases/19.html
hg38 http://www.gencodegenes.org/releases/21.html
Apesar de não exigir réplicas técnicas[28], é necessário fazer réplicas biológicas por conta da variabilidade entre indivíduos de uma mesma população[13]. Em termos de cobertura, não é necessária uma
produndidade muito alta, segundo Liu et al. [27], para o genoma humano, após 10 milhões de reads
temos uma situação de retornos decrescentes.
6.1
Mapeando os reads com o STAR
O Tophat é baseado no mapeador genérico bowtie para alinhar os reads do RNA-Seq no genoma, o
programa tem que implementar uma heurística para lidar com os splice-junctions pois o mapeador não
foi feito para lidar com reads que não alinham de maneira contínua no genoma.
O mapeador STAR[7] foi criado desde o início para ser um mapeador para RNA-Seq, o que o torna
mais rápido e acurado do que outros programas para mapear RNA-Seq. Esse programa aplica uma
técnica de mapeamento chamada de Maximal Mappable Prefix (MMP), que é similar ao Maximal Exact
Match utilizado pelo TMAP, MAUVE[5] e Mummer[6], porém tenta-se alinhar o prefixo do read contra
o genoma. Esse alinhamento prosegue até o read atingir um splice-site ou o final do reads. Nesse ponto,
se o read não tiver sido totalmente alinhado, ele inicia o processo novamente, porém a partir da parte
que não alinhou.
Para rodar o STAR é preciso primeiro indexar o genoma de referência. Para fazer isso com o hg19
utilize o seguinte comando:
STAR --runThreadN 4 \\
--runMode genomeGenerate
--genomeDir hg19_STAR/
69
a. Gene
1
b. mRNA
1 2
c. Junção
2
3
3
4
5
4 5
1
2
Figura 6.1: Splicing do RNA mensageiro: a. Estrutura do gene, mostrando os exons (em preto) e os
introns (em cinza); b. RNA mensageiro após o splicing, note que as regiões em cinza são removidas,
ficando somente os exons; c. Reads na região da junção do exons, indicados em vermelho, representam
uma sequência que não “existe” no genoma de referência. mapeiam n
--genomeFastaFiles hg19.fasta
--sjdbGTFfile gencode.v19.annotation.gtf
--sjdbOverhang 100
Para alinhar os reads no genoma indexado utilize o comando:
STAR --runThreadN 4 \\
--genomeDir hg19_STAR \\
--readFilesIn input.fastq \\
--outReadsUnmapped Fastx \\
--outSAMtype BAM SortedByCoordinate
6.2
Quantificando a expressão gênica
Diversos programas representam a abundância dos dos transcritos em RPKM, ou Reads per exon Kilobase
per Million of reads, que é a razão do número de reads mapeados em uma região (seja um exon, transcrito
ou gene) pelo tamanho da região em kbp e o total de reads em milhões:
reads mapeados
(6.1)
tamanho × milhões de reads
Em termos de uma fórmula, o RP KMi de um gene i é definido em 6.2. Onde mi é a contagem de
fragmentos mapeados na região i, li é o comprimento da região em bases.
RP KM =
mi
RPKMi = 109 P
li j m j
(6.2)
Outra medida popular de expressão de RNA Seq é o FPKM, ou Fragments per Kilobase per Million of
reads[31]. Esse medida é gerada pelo software cufflinks que nós vamos discutir na seção 6.2.1. Primeiro
vamos definir a abundância como ρi = Pmim , que é a fração dos reads alinhados em uma região. O
j
j
cufflinks usa um modelo estatístico para estimar o valor mais provável de ρ̂i levando em conta além da
contagem dos reads, também mapeamento de um read em transcritos diferentes que compartilham um
mesmo exon e o pareamento das leituras em caso de dados dessa natureza. Por fim, o cufflinks também
fornece uma estimativa da incerteza de ρ̂i . Ao final do processo, o FPKM é calculado se escalonando o
valor de ρ̂i para uma escala compatível com o RPKM (fórmula 6.3).
ρ̂i
j ρ̂j lj
FPKMi = 109 P
70
(6.3)
6.2.1
Quantificando com o cufflinks
O programa cufflinks está disponível em:
http://cole-trapnell-lab.github.io/cufflinks/
Originalmente o cufflinks era um único programa capaz tanto de quantificar a expressão de genes
conhecidos como também descobrir novos genes. Na figura 6.2 vemos o workflow do cufflinks, à esquerda para as versões anteriores a 2.2 e a direita para as versões posteriores a 2.2. Em ambas inicia-se
executando o cufflinks em cada uma das amostras para gerar a anotação de genes. Caso existe uma
anotação de genes prévia é possível utilizá-la como parâmetro inicial. Após executar o cufflinks em todas
as amostras, combina-se as anotações em uma só com o comando cuffmerge.
Após rodar o cuffmerge utiliza-se o cuffdiff com os arquivos bam e com a anotação gerada pelo cuffmerge para encontrar os genes diferencialmente expressos. Na versão mais recente, pode-se utilizar o comando cuffquant. Esse programa quantifica os genes e gera um arquivo binário chamado abundance.cxb.
Esse arquivo pode ser utilizado com o cuffdiff ou alternativamente pode ser utilizado para gerar os valores
normalizados de expressão com o comando cuffnorm. A vendagem de utilizar o arquivo abundance.cxb
é que o seu processamento é mais rápido do que processar novamente o arquivo BAM.
Figura 6.2: Workflow do cufflinks
Com a opção -g genes.gtf, o cufflinks utiliza as anotações pré existentes, já a opção -G genes.gtf
desabilida a detecção de novos transcritos, restringindo a quantificação à genes conhecidos. Porém, caso
deseje-se fazer somente a quantificação, sem detecção de novos genes pode-se optar usar diretamente o
cuffquant. Outra opção importante é --library-type que depende da técnica de captura do RNA, as
opções disponíveis na tabela 6.1.
71
Valor
fr-unstranded
fr-secondstrand
fr-firststrand
Descrição
Biblioteca que não preserva a informação de direção do RNA. Essa é a opção
default.
Biblioteca direcional utilizada pelo Ion
Torrent e pelo SOLiD
Biblioteca direcional pelo método de
dUTP.
Tabela 6.1: Opções para tipos de biblioteca para o cufflinks
O comando para executar o cufflinks é o seguinte:
cufflinks -g genes.gtf
-p 8
--library-type fr-secondstrand
-o cufflinks_out
aligned.bam
O programa vai gerar três arquivos:
• transcripts.gtf: Arquivo com a lista de transcritos detectados, ele informa também o valor de
FPKM na última coluna do arquivo GTF.
• genes.fpkm_tracking: Arquivo com os valores de FPKM para cada gene.
• isoforms.fpkm_tracking: Arquivo com os valores de FPKM para cada isoforma.
Caso queira executar somente somente a quantificação, o comando é o seguinte:
cuffquant -p 8
-p 8
--library-type fr-secondstrand
-o output_dir
genes.gtf
align.bam
O arquivo de saída do cuffquant é um arquivo binário chamado abundance.cxb. Para ter os valores
de expessão normalizados é preciso executar o programa cuffnorm. É possível escolher o algoritmo de
normalização,
cuffnorm -o norm_ouput
-p 8
--library-type fr-secondstrand
--labels cond1,cond2,...
genes.gtf
cond1_sample1/abundances.cxb,cond1_sample2/abundances.cxb,...
cond2_sample1/abundances.cxb,cond2_sample2/abundances.cxb,...
...
72
Nome
classic-fpkm
geometric
quartile
Descrição
Gera os mesmos valores que o cufflinks
FPKM e contagem de fragmentos são
FPKMs são normalizados pela mediana
the média geométrica da contagem de
fragmentos em todas as bibliotecas[1].
Mesmo método utilizado pelo DEGseq.
FPKM é normalizado pela razão do terceiro quartil e as contagens mela média
do mesmo quartil entre todas as bibliotecas.
Tabela 6.2: Opções de normalização para o cuffnorm
Finalmente, para executar o cuffdiff utilizamos o seguinte comando:
cuffdiff -o diff_ouput
-p 8
--library-type fr-secondstrand
--labels cond1,cond2,...
--ibrary-norm-method geometric
genes.gtf
cond1_sample1/abundances.cxb,cond1_sample2/abundances.cxb,...
cond2_sample1/abundances.cxb,cond2_sample2/abundances.cxb,...
...
Ambos os comandos são praticamente idênticos. Importante ressaltar a estrutura dos comandos.
Depois do arquivo com a anotação dos genes temos a lista amostras. Amostras de uma mesma condição
são colocadas juntas separadas por vírgulas, cada conjunto de amostras representando uma condição é
separado por um espaço. É importante usar a opção --labels para identificar cada uma das condições,
isso será utilizado depois na análise estatística. Caso você esteja fazendo uma análise de uma amostra
de um tumor versus uma amostra normal teríamos --labels tumor,normal.
6.3
Análise estatística
A última etapa da análise de RNA-seq é a análise estatística dos resultados. A linguagem R é a principal
plataforma free software para análise estatística de dados. Especificamente para a análise de expressão
gênica existe o projeto Bioconductor que provêm diversos pacotes para essa função. Dentre os pacotes
nós destacamos o EdgeR,o DEGSeq e o CummeRbund para RNA-Seq. Em especial, o CummeRbund
foi desenvolvido especificamente para o cufflinks e é o único pacote que suporte os valores de FPKM, os
outros programas utilizam as contagens absolutas.
O R está disponível na página do projeto (http://www.r-project.org/). Recomendamos fortemente
que se instala a user interface do Rstudio (http://www.rstudio.com/)
6.3.1
cummeRbund
Para instalar o cummeRbund você precisa entrar no R via ambiente shell ou via Rstudio. Dentro do R
utilize esses comandos:
source("http://bioconductor.org/biocLite.R")
biocLite("cummeRbund")
Após a instalação você tem que carregar a biblioteca com o comando:
library("cummeRbund")
Em seguida carregue os dados do cuffdiff com o comando:
73
setwd("diff_out")
cuff<-readCufflinks()
Substitua diff_out pelo diretório onde estão os resultados do cuffdiff. A função readCufflinks vai
ler os arquivos e gerar uma base de dados relacional com os dados, isso acelera as análises e toda a vez
que o script for reexecutado ele vai ler a base de dados ao invés dos arquivos de texto, o que também
torna a análise mais rápida. Porém, se você reexecutar o cuffdiff, é preciso colocar a opção rebuild=T
para que a função gere novamente a base de dados.
Para conseguir a lista dos genes diferencialmente expressos para um nível α = 0.05 de significância
utilizamos os seguintes comandos:
diffGeneIDs <- getSig(cuff,level="genes",alpha=0.05)
diffGenes<-getGenes(cuff,diffGeneIDs)
A variável diffGenes é um GeneSet, é possível extrair informações com as funções apropriadas:
• Nomes dos genes featureNames(diffGenes))
• Valores de FPKM para cada condição fpkm(diffGenes) ou fpkmMatrix(diffGenes)
O cummeRbund possui diversas funções para a geração de gráficos, vamos listar alguns deles abaixo:
• Clusterização:
csDendro(genes(cuff),replicates=T)
tumor_1
tumor_0
normal_1
normal_0
0.0
0.1
0.2
0.3
0.4
É útil fazer esse gráfico com as réplicas para verificar a similaridade delas.
Figura 6.3: Dendogram das amostras
• MA Plot:
MAplot(genes(cuff),"tumor","normal")
O MA plot é um gráfico tradicional na análise de expressão gene que compara o log da razão entre
o valor de expressão de duas condições com a média. Considere dois valores de expressão em duas
condições, T e N, a fórmula de M e A é dada por:
M=
A=
log2 (T ) − log2 (N )
1
1
(log2 (T ) + log2 (N ))
2 log2 (T N ) =
2
log2 (T /N ) =
74
(6.4)
(6.5)
O objetivo do MA plot é detectar se existe uma dependência da diferença de expressão (M) em
relação à intensidade da expressão do gene (A).
50
log2(M)
25
0
−25
−50
0
2
4
6
A
Figura 6.4: MA Plot
• Volcano Plot:
csVolcano(genes(cuff),"tumor","normal",
alpha=0.05,showSignificant=TRUE)
O Volcano plot contrasta o log10 do p-value com o log2 do fold change. O gráfico tem esse nome
devido ao formato típico de V que ele tem. Na figura 6.5 os genes significantes foram coloridos de
vermelho.
genes: tumor/normal
4
− log10(p value)
3
significant
no
2
yes
1
0
−20
−10
0
10
20
log2(fold change)
Figura 6.5: Volcano Plot
• Heatmap:
csHeatmap(diffGenes,cluster=’both’)
O heatmap indica o nível de expressão de cada gene em uma graduação de cores, na figura 6.6
quanto mais vermelho o gene, mais expresso ele. A opção cluster=’both’ faz com que o R clusterize
as amostras e os genes. Esse gráfico é útil para detectar conjuntos de genes que tenham um padrão
de expressão similar.
75
SRCIN1|ENSG00000017373.11
HOMER3|ENSG00000051128.14
EPN3|ENSG00000049283.13
COL11A1|ENSG00000060718.14
SYT7|ENSG00000011347.5
FAP|ENSG00000078098.9
UHRF1|ENSG00000034063.9
TACC3|ENSG00000013810.14
KIF4A|ENSG00000090889.10
CDC45|ENSG00000093009.5
DEPDC1B|ENSG00000035499.8
C20orf26|ENSG00000089101.13
ASPM|ENSG00000066279.12
DMRT3|ENSG00000064218.4
DLX3|ENSG00000064195.7
ZIC2|ENSG00000043355.6
ENO1|ENSG00000074800.9
CYB561|ENSG00000008283.11
SF3B2|ENSG00000087365.10
GSDMB|ENSG00000073605.14
SREBF1|ENSG00000072310.12
U2AF2|ENSG00000063244.8
RPLP0|ENSG00000089157.11
XYLT2|ENSG00000015532.5
WIZ|ENSG00000011451.13
STXBP2|ENSG00000076944.10
OPHN1|ENSG00000079482.11
MBD3|ENSG00000071655.13
FER1L4|ENSG00000088340.11
IRAK3|ENSG00000090376.4
ATP1A2|ENSG00000018625.10
ABCC8|ENSG00000006071.7
WSCD2|ENSG00000075035.5
CPS1|ENSG00000021826.10
MYO16|ENSG00000041515.11
TF|ENSG00000091513.10
PDK4|ENSG00000004799.7
DNTTIP2|ENSG00000067334.9
CCDC80|ENSG00000091986.11
DCN|ENSG00000011465.12
log10 FPKM + 1
2
1
0
tumor
normal
Figura 6.6: Heatmap
76
Capítulo 7
Apêndices
7.1
Ordem dos genótipos
O formato VCF define a seguinte expressão para ordenar os genótipos nos campos GL e PL:
F (j, k) = k ∗ (k + 1) + j
(7.1)
Para aplicar a fórmula, associamos a base da referência com o valor 0, e as bases alternativas com os
valores 1, 2, 3, .... Depois, geramos todos os pares distintos (para uma combinação A,B e B,A, mantemos
somente A,B) e os ordenamos de acordo com a função F . A ordem para 2,3 e 4 genótipos é:
2 AA, AB, BB
3 AA, AB, BB, AC, BC, CC
4 AA, AB, BB, AC, BC, CC, AD, BD, CD, DD
Por exemplo, se a referência for A e a variante for T, a ordem dos genótipos é:
AA,AT,TT
E se a referência for A e os genótipos as variantes forem C e T, a ordem é:
AA,AT,TT,AC,CT,CC
7.2
Pileup format
Podemos pensar que o arquivo BAM é organizado em torno dos reads, mas muitas vezes estamos interessados na informação de alinhamento base-a-base. O formato pileup faz uma representação texto
organizada em torno das posições genômicas. Em outras palavras, para cada base do genoma ele “empilha” as bases dos reads. O resultado é uma tabela como a mostrada abaixo:
ecoli 1 A 7
^b.^‘.^O,^E,^D,^A,^J, 9?4===5
ecoli 2 G 8
..,,,,,^t,
9?)===-)
ecoli 3 C 10 ..,,,,,,^w.^>.
5?,=7=5)B8
ecoli 4 T 10 ..,,,,,,..
5?$(&(($B8
ecoli 5 T 13 ..,,,,,,..^j.^j,^E,
5?4=7=5)B8;!!
ecoli 6 T 13 ..,,,,,,...,,
5?4=7=5)B8;!!
ecoli 7 T 13 ..,,,,,,...,,
((4=7=5)((2!!
ecoli 8 C 14 ..,,,,,,...,,^g.
:?6=7=5)>1=!!=
ecoli 9 A 15 ..,,,,,,...,,.^w.
;?6;975+A4;!!=A
O significado de cada coluna é o seguinte:
1. Contig: Nome do contig/cromossomo
2. Posição: Posição no contig/cromossomo (iniciando em 1)
3. Referências: Base na referência
4. Reads: Número de reads mapeados na posição
5. Bases: Esse é o campo mais complexo do arquivo, os símbolos têm os seguintes significados:
77
• . Indica que o read possui a mesma base que a referência
• , Indica que o read possui a mesma base na fita reversa da referência
• ACGTN Indica uma troca pela base indicada
• acgtn Indica uma troca pela base indicada na fita reversa
• +[num][bases] Indica uma inserção de tamanho [num], com as bases [bases]. Por exemplo:
+2AG representa uma inserção das bases AG, já +2AGTC representa uma inserção das bases
AG seguida de duas substituições
• -[num][bases] Indica uma deleção de tamanho [num], com as bases [bases]. Por exemplo:
-2AG representa a deleção das bases AG.
• ^[Q] Indica o início do read, o caracter seguinte ao ^ indica o mapping quality em codificação
fastQ
• $ Indica o final do read
6. Qualidades: Qualidade das bases em codificação fastQ
Para gerar o pileup de um BAM utiliza-se o comando mpileup do samtools da seguinte maneira:
samtools mpileup -f <referencia> <align.bam> > result.pileup
Se o arquivo possuir regiões com cobertura muito alta, é preciso especificar o parâmetro -d <max cov>,
cujo default é 250.
7.3
Samtools VCF file
O resultado do comando mpileup do samtools não é uma lista de SNPs, mas sim um BCF intermediário
que será utilizado para fazer a chamada. Nesse arquivo, vale ressaltar o campo I16, que é uma lista de 16
estatísticas que podem ser utilizadas no variant calling (tabela 7.1). Nessa tabela vemos a quantidade de
bases que concordam com a referência e as que estão diferentes da referência (non-ref) em ambas as fitas,
vemos também as somas das qualidades ref e non-ref, a soma dos quadrados das qualidades, também
vemos a soma dos mapping qualities e os quadrados dos mapping qualities. Nos últimos campos temos
a soma tail-distance, que é a distância da posição do read em relação aos extremos dele. Suponha a base
na posição k do read de comprimento l, a tail distance nesse caso é min(k, l − k).
Também podemos ver uma coluna chamada FORMAT, seguida por uma coluna para cada amostra.
A coluna FORMAT descreve o formato da informação de genótipo e nas colunas seguintes temos os
valores de genótipo para cada amostra. No caso temos o formato PL, que mostra a probabilidade de
cada genótipo em escala phred. A ordem dos genótipos é definida pelo formato VCF. Para mais detalhes
veja a seção4.1.
78
Pos.
1
2
3
4
Descrição
number of
number of
number of
number of
reference Q13 bases on the forward strand
reference Q13 bases on the reverse strand
non-ref Q13 bases on the forward strand
non-ref Q13 bases on the reverse strand
5
6
7
8
sum
sum
sum
sum
of
of
of
of
reference base qualities
squares of reference base qualities
non-ref base qualities
squares of non-ref base qualities
9
10
11
12
sum
sum
sum
sum
of
of
of
of
ref mapping qualities
squares of ref mapping qualities
non-ref mapping qualities
squares of non-ref mapping qualities
13
14
15
16
sum
sum
sum
sum
of
of
of
of
tail distance for ref bases
squares of tail distance for ref bases
tail distance for non-ref bases
squares of tail distance for non-ref
Tabela 7.1: Descrição dos valores do campo I16 gerado pelo samtools mpileup
7.4
Script para converter os nomes dos cromossomos em um
arquivo VCF
Código do script addchr.pl, utilizado para mudar o nome dos cromossomos no arquivo VCF do dbSNP:
#!/usr/bin/env perl
sub addchr {
my $line=shift;
if($line =~ /^(\d+|X|Y)/) {
$line="chr$line";
}elsif($line =~ /^MT/) {
$line =~ s/(^MT)/chrM/;
}
return $line;
}
while(<>) {
if(/^#/) {
if (/##contig=<ID=(.*?),(.*)/) {
#
print "1=$1 2=$2\n";
print "##contig=<ID=",addchr($1),",$2\n";
} else {
print;
}
} else {
print addchr($_);
}
}
79
7.5
Tabelas
BioPython
bedtools
biohaskell
bowtie2
CAF
cufflinks
cutadapt
gatak
gpertools
IGV
mMira
mummer
picard
SSAHA2
samtools
seq crumbs
sff exract
sff2fastq
snpEff
TMAP
Tablet
tabix
tophat
TSVC
XSQ Tools
http://biopython.org/wiki/Download
https://code.google.com/p/bedtools/
http://biohaskell.org/
http://bowtie-bio.sourceforge.net/bowtie2/index.shtml
http://www.sanger.ac.uk/resources/software/caf/
http://cufflinks.cbcb.umd.edu/
https://code.google.com/p/cutadapt/
http://www.broadinstitute.org/gatk/download
http://code.google.com/p/gperftools/
http://www.broadinstitute.org/software/igv/download
http://sourceforge.net/projects/mira-assembler/files/MIRA/
http://mummer.sourceforge.net/
http://picard.sourceforge.net/
http://www.sanger.ac.uk/resources/software/ssaha2/
http://samtools.sourceforge.net/
https://github.com/JoseBlanca/seq_crumbs
http://bioinf.comav.upv.es/sff_extract/
https://github.com/indraniel/sff2fastq
http://snpeff.sourceforge.net/
https://github.com/iontorrent/TMAP
http://bioinf.scri.ac.uk/tablet/
http://sourceforge.net/projects/samtools/files/tabix
http://tophat.cbcb.umd.edu/
http://ioncommunity.lifetechnologies.com/docs/DOC-2936
http://www.lifetechnologies.com/us/en/home/technical-resources/
software-downloads/xsq-software.html
Tabela 7.2: Lista de programas utilizados na apostila.
80
Referências
81
82
Lista de Figuras
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
2.1
2.2
2.3
2.4
2.5
2.6
2.7
Evolução do custo de sequenciamento por megabase. Fonte: http://www.genome.gov/
sequencingcosts/. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Processo da amostra de Long Mate Pair. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Reação de incorporação de uma base pela polimerase. . . . . . . . . . . . . . . . . . . . .
Flowgram da sequência AATCTTCGT... . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estrutura da probes utilizadas pelo SOLiD . . . . . . . . . . . . . . . . . . . . . . . . . .
Algumas etapas do processo de sequenciamento: ligação do primeiro primer. . . . . . . . .
Algumas etapas do processo de sequenciamento: Ligação do segundo primer. . . . . . . .
Esquema de cobertura do template pelos probes para uma leitura de 25 bp. . . . . . . . .
6
7
9
9
10
11
12
13
Gráfico da função que calcula o Phred Score . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemplos de alinhamentos e os respectivos registros em formato SAM[22]. . . . . . . . . .
Sensitividade dos algortmos do tmap e do bowtie2 (Amostra de E. Coli O104H4) . . . . .
Performance dos algoritmos do tmap (Amostra de E. Coli O104H4) . . . . . . . . . . . . .
IGV mostrando os alinhamentos do reads na região do gene MTRR . . . . . . . . . . . . .
IGV mostrando os alinhamentos dos reads na região do gene MTRR . . . . . . . . . . . .
Popup boxes do IGV. A) Popup que aparece quando se deixa o cursor sobre um dos reads.
B) popup mostrado quando se deixa o cursor sobre o gráfico de cobertura. . . . . . . . .
IGV com os alinhamentos no modo colapsado. Destaque para duas posições com trocas
de nucleotídeos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
27
33
34
38
38
3.1
3.2
3.3
3.4
Exemplo de arquivo bedDetail . . . . . . . . . . .
UCSC Table Browser site . . . . . . . . . . . . .
Escolha de regiões ao exportar arquivo BED . . .
Diferença entre os tipos de arquivos BED gerados
.
.
.
.
42
44
44
46
5.1
5.2
5.3
Estrutura do read de mate-pair do Ion Torrent . . . . . . . . . . . . . . . . . . . . . . . .
Gráfico da soma do tamanho dos contigs para o dataset de fragmentos. . . . . . . . . . . .
Dotplot de todas as bibliotecas montadas com o mira 3.9. Na primeira coluna vemos o
dotplot das bibliotecas de fragmentos, LMP 3.5kbp e LMP 8.9 kbp, e na segunda coluna
vemos a combinação desses bibliotecas junto com a de fragmentos. . . . . . . . . . . . . .
Dotplot da montagem do dataset de fragmentos deita pelo mummerplot. O traços em vermelho indicam regiões que alinharam no sentido forward e as em azul indicam alinhamento
no sentido reverse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Alinhamento dos contigs em relação ao genoma de referência. (A) Alinhamento original.
(B) alinhamento depois que os contigs foram movidos pelo Mauvi. . . . . . . . . . . . . .
Visualizador de montagem Tablet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
63
2.8
5.4
5.5
5.6
6.1
6.2
6.3
6.4
6.5
. . .
. . .
. . .
pelo
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
UCSC Table Browser.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Splicing do RNA mensageiro: a. Estrutura do gene, mostrando os exons (em preto) e os
introns (em cinza); b. RNA mensageiro após o splicing, note que as regiões em cinza são
removidas, ficando somente os exons; c. Reads na região da junção do exons, indicados em
vermelho, representam uma sequência que não “existe” no genoma de referência. mapeiam n
Workflow do cufflinks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dendogram das amostras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MA Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Volcano Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
39
39
64
66
67
67
70
71
74
75
75
6.6
Heatmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
84
Lista de Tabelas
1.1
1.2
1.3
1.4
Relação entre a razão beads/fragmentos,
bilidade de empty beads. . . . . . . . . .
Codificação das cores em números. . . .
Leitura de bases pelas probes do SOLiD
Codificação de bases para cores . . . . .
a probabilidade de
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
Código IUPAC para representar o DNA . . . . . . . . . . . .
Valores de qualidade phred, probabilidades de erro e acurácia
Conversores de SFF . . . . . . . . . . . . . . . . . . . . . . .
Headers do arquivo SAM . . . . . . . . . . . . . . . . . . . .
Alinhamento no arquivo SAM . . . . . . . . . . . . . . . . . .
Significado e valor de cada flag do format SAM. . . . . . . . .
Argumentos comuns a todos os comandos do Picard. . . . . .
Algoritmos do TMAP . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
18
20
25
26
26
31
32
4.1
4.2
4.3
4.4
Exemplo de lista de variantes em arquivo VCF (parte obrigatória). . . .
Exemplo de lista de variantes em arquivo VCF (definição de genótipos).
Lista de parâmetros para Torrent Suite Variant Caller (TSVC) . . . . .
Lista de efeitos preditos pelo snpEff . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
48
48
54
56
5.1
5.2
5.3
Resultados das montagens do Mira . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Resultados da montagem do Mira 3.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
All statistics are based on contigs of size ≥ 500 bp, unless otherwise noted (e.g., "# contigs
(≥ 0 bp)"and "Total length (≥ 0 bp)"include all contigs). . . . . . . . . . . . . . . . . . . . 65
6.1
6.2
Opções para tipos de biblioteca para o cufflinks . . . . . . . . . . . . . . . . . . . . . . . . 72
Opções de normalização para o cuffnorm . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.1
7.2
Descrição dos valores do campo I16 gerado pelo samtools mpileup . . . . . . . . . . . . . . 79
Lista de programas utilizados na apostila. . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
85
beads policlonais
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
e
.
.
.
.
a
.
.
.
.
proba. . . . . 8
. . . . . 11
. . . . . 12
. . . . . 13
86
Referências Bibliográficas
[1] Simon Anders and Wolfgang Huber. Differential expression analysis for sequence count data.
Genome Biol, 11(10):R106, 2010.
doi: 10.1186/gb-2010-11-10-r106.
URL http://www.
biomedcentral.com/content/pdf/gb-2010-11-10-r106.pdf.
[2] Anton Bankevich, Sergey Nurk, Dmitry Antipov, Alexey A Gurevich, Mikhail Dvorkin, Alexander S Kulikov, Valery M Lesin, Sergey I Nikolenko, Son Pham, Andrey D Prjibelski, Alexey V
Pyshkin, Alexander V Sirotkin, Nikolay Vyahhi, Glenn Tesler, Max A Alekseyev, and Pavel A Pevzner. SPAdes: A New Genome Assembly Algorithm and Its Applications to Single-Cell Sequencing.
Journal of Computational Biology, 19(5):455–477, May 2012. doi: 10.1089/cmb.2012.0021. URL
http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3342519/.
[3] P. Bergveld. Thirty years of isfetology: What happened in the past 30 years and what may happen
in the next 30 years. Sensors and Actuators B: Chemical, 88(1):1 – 20, 2003. ISSN 0925-4005.
doi: 10.1016/S0925-4005(02)00301-5. URL http://www.sciencedirect.com/science/article/
pii/S0925400502003015.
[4] B Chevreux, T Pfisterer, B Drescher, A J Driesel, W E G Müller, T Wetter, and S Suhai. Using
the miraEST assembler for reliable and automated mRNA transcript assembly and SNP detection
in sequenced ESTs. Genome Research, 14(6):1147–1159, 2004. URL http://genome.cshlp.org/
content/14/6/1147.short.
[5] A C E Darling. Mauve: Multiple Alignment of Conserved Genomic Sequence With Rearrangements. Genome Research, 14(7):1394–1403, June 2004. doi: 10.1101/gr.2289704. URL
http://www.genome.org/cgi/doi/10.1101/gr.2289704.
[6] A L Delcher, S Kasif, R D Fleischmann, J Peterson, O White, and S L Salzberg. Alignment of whole
genomes. Nucleic Acids Research, 27(11):2369–2376, 1999. URL http://nar.oxfordjournals.
org/content/27/11/2369.short.
[7] Alexander Dobin, Carrie A Davis, Felix Schlesinger, Jorg Drenkow, Chris Zaleski, Sonali
Jha, Philippe Batut, Mark Chaisson, and Thomas R Gingeras. STAR: ultrafast universal
RNA-seq aligner. Bioinformatics, 29(1):15–21, January 2013. doi: 10.1093/bioinformatics/
bts635. URL http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?dbfrom=pubmed&
id=23104886&retmode=ref&cmd=prlinks.
[8] Karen Eilbeck, Suzanna E Lewis, Christopher J Mungall, Mark Yandell, Lincoln Stein, Richard
Durbin, and Michael Ashburner. The Sequence Ontology: a tool for the unification of genome annotations. Genome Biol, 6(5):R44, 2005. doi: 10.1186/gb-2005-6-5-r44. URL http:
//genomebiology.com/2005/6/5/R44.
[9] B Ewing, L D Hillier, M C Wendl, and P Green. Base-calling of automated sequencer traces
usingPhred. I. Accuracy assessment. Genome Research, 8(3):175–185, 1998. URL http://genome.
cshlp.org/content/8/3/175.short.
[10] Paolo Ferragina and Giovanni Manzini. An experimental study of an opportunistic index. Society
for Industrial and Applied Mathematics, January 2001. ISBN 0-89871-490-7. URL http://dl.acm.
org/citation.cfm?id=365411.365458.
[11] UCSC Genome. Bed format. http://genome.ucsc.edu/FAQ/FAQformat#format1, 2012.
87
[12] The SAM Format Speciation Working Group. The sam format speciation (v1.4-r985). http:
//samtools.sourceforge.net/SAM1.pdf, 2012.
[13] Kasper D Hansen, Zhijin Wu, Rafael A Irizarry, and Jeffrey T Leek. Sequencing technology does not
eliminate biological variability. Nat Biotechnol, 29(7):572–573, July 2011. doi: 10.1038/nbt.1910.
URL http://www.nature.com/doifinder/10.1038/nbt.1910.
[14] Broad Institute. Picard faq.
title=Main_Page, 2012.
http://sourceforge.net/apps/mediawiki/picard/index.php?
[15] D Karolchik, A S Hinrichs, T S Furey, K M Roskin, C W Sugnet, D Haussler, and W J Kent. The
UCSC Table Browser data retrieval tool. Nucleic Acids Research, 32(suppl 1):D493–D496, 2004.
URL http://nar.oxfordjournals.org/content/32/suppl_1/D493.short.
[16] B. Langmead and S L Salzberg. Fast gapped-read alignment with Bowtie 2 : Nature Methods :
Nature Publishing Group. Nat Meth, 2012. URL http://www.nature.com/nmeth/journal/v9/
n4/abs/nmeth.1923.html.
[17] Ben Langmead, Michael C Schatz, Jimmy Lin, Mihai Pop, and Steven L Salzberg. Searching for
SNPs with cloud computing. Genome Biol, 10(11):R134, 2009. doi: 10.1186/gb-2009-10-11-r134.
URL http://genomebiology.com/2009/10/11/R134.
[18] Ben Langmead, Cole Trapnell, Mihai Pop, and Steven L Salzberg. Ultrafast and memory-efficient
alignment of short DNA sequences to the human genome. Genome Biol, 10(3):R25, 2009. doi:
10.1186/gb-2009-10-3-r25). URL http://www.biomedcentral.com/content/pdf/gb-2009-10-3r25.pd.
[19] H Li. Exploring single-sample SNP and INDEL calling with whole-genome de novo assembly.
Bioinformatics, 28(14):1838–1844, July 2012. doi: 10.1093/bioinformatics/bts280. URL http:
//bioinformatics.oxfordjournals.org/cgi/doi/10.1093/bioinformatics/bts280.
[20] H Li and R Durbin. Fast and accurate long-read alignment with Burrows–Wheeler transform. Bioinformatics, 26(5):589–595, 2010. URL http://bioinformatics.oxfordjournals.org/content/
26/5/589.short.
[21] H Li, J Ruan, and R Durbin. Mapping short DNA sequencing reads and calling variants using
mapping quality scores. Genome Research, 18(11):1851–1858, November 2008. doi: 10.1101/gr.
078212.108. URL http://genome.cshlp.org/cgi/doi/10.1101/gr.078212.108.
[22] H Li, B Handsaker, A Wysoker, T Fennell, J Ruan, N Homer, G Marth, G Abecasis, R Durbin, and
1000 Genome Project Data Processing Subgroup. The Sequence Alignment/Map format and SAMtools. Bioinformatics, 25(16):2078–2079, August 2009. doi: 10.1093/bioinformatics/btp352. URL
http://bioinformatics.oxfordjournals.org/cgi/doi/10.1093/bioinformatics/btp352.
[23] Heng Li and Richard Durbin. Fast and accurate short read alignment with Burrows-Wheeler transform. Bioinformatics, 25(14):1754–1760, July 2009. doi: 10.1093/bioinformatics/btp324. URL
http://bioinformatics.oxfordjournals.org/cgi/doi/10.1093/bioinformatics/btp324.
[24] R Li, Y Li, K Kristiansen, and J Wang. SOAP: short oligonucleotide alignment program. Bioinformatics, 24(5):713–714, February 2008. doi: 10.1093/bioinformatics/btn025. URL http:
//bioinformatics.oxfordjournals.org/cgi/doi/10.1093/bioinformatics/btn025.
[25] R Li, C Yu, Y Li, T W Lam, S M Yiu, K Kristiansen, and J Wang. SOAP2: an improved
ultrafast tool for short read alignment. Bioinformatics, 25(15):1966–1967, July 2009. doi: 10.1093/
bioinformatics/btp336. URL http://bioinformatics.oxfordjournals.org/cgi/doi/10.1093/
bioinformatics/btp336.
[26] D Lipman and W Pearson. Rapid and sensitive protein similarity searches. Science, 227(4693):
1435–1441, March 1985. doi: 10.1126/science.2983426. URL http://www.sciencemag.org/cgi/
doi/10.1126/science.2983426.
88
[27] Yuwen Liu, Jie Zhou, and Kevin P White. RNA-seq differential expression studies: more sequence or more replication? Bioinformatics, 30(3):301–304, 2014. URL http://bioinformatics.
oxfordjournals.org/content/30/3/301.short.
[28] J.C. Marioni, C.E. Mason, S.M. Mane, M. Stephens, and Y. Gilad. RNA-seq: an assessment of
technical reproducibility and comparison with gene expression arrays. Genome Research, 18(9):
1509–1517, 2008. URL http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?dbfrom=
pubmed&id=18550803&retmode=ref&cmd=prlinks.
[29] I Milne, M Bayer, L Cardle, P Shaw, G Stephen, F Wright, and D Marshall. Tablet–next generation
sequence assembly visualization. Bioinformatics, 26(3):401–402, February 2010. doi: 10.1093/
bioinformatics/btp666. URL http://bioinformatics.oxfordjournals.org/cgi/doi/10.1093/
bioinformatics/btp666.
[30] Gordon Moore. Lei de moore. http://en.wikipedia.org/wiki/Moore’s_law, 2012.
[31] Ali Mortazavi, Brian A Williams, Kenneth McCue, Lorian Schaeffer, and Barbara Wold. Mapping
and quantifying mammalian transcriptomes by RNA-Seq. Nat Meth, 5(7):621–628, 2008. URL
http://www.nature.com/nmeth/journal/vaop/ncurrent/full/nmeth.1226.html.
[32] NCBI. Standard flow format. http://www.ncbi.nlm.nih.gov/Traces/trace.cgi?cmd=show&f=
formats&m=doc&s=format#sff, 2012.
[33] Zemin Ning, Anthony J Cox, and James C Mullikin. SSAHA: A Fast Search Method for Large
DNA Databases. Genome Research, 2001. URL http://genome.cshlp.org/content/11/10/1725.
short.
[34] 1000 Genomes Project. Variant call format specification version 4.1. http://www.1000genomes.
org/wiki/Analysis/Variant%20Call%20Format/vcf-variant-call-format-version-41, 2012.
[35] ENCODE Project. Standards, guidelines and best practices for rna-seq. http://encodeproject.
org/ENCODE/protocols/dataStandards/ENCODE_RNAseq_Standards_V1.0.pdf, 2012.
[36] A I Rissman, B Mau, B S Biehl, A E Darling, J D Glasner, and N T Perna. Reordering contigs of
draft genomes using the Mauve Aligner. Bioinformatics, 25(16):2071–2073, August 2009. doi: 10.
1093/bioinformatics/btp356. URL http://bioinformatics.oxfordjournals.org/cgi/doi/10.
1093/bioinformatics/btp356.
[37] J.C. Roach, C. Boysen, K. Wang, and L. Hood. Pairwise end sequencing: a unified approach to genomic mapping and sequencing. Genomics, 26(2):345–353, 1995. URL http://www.sciencedirect.
com/science/article/pii/088875439580219c.
[38] Jonathan M Rothberg, Wolfgang Hinz, Todd M Rearick, Jonathan Schultz, William Mileski, Mel
Davey, John H Leamon, Kim Johnson, Mark J Milgrew, Matthew Edwards, Jeremy Hoon, Jan F
Simons, David Marran, Jason W Myers, John F Davidson, Annika Branting, John R Nobile,
Bernard P Puc, David Light, Travis A Clark, Martin Huber, Jeffrey T Branciforte, Isaac B
Stoner, Simon E Cawley, Michael Lyons, Yutao Fu, Nils Homer, Marina Sedova, Xin Miao,
Brian Reed, Jeffrey Sabina, Erika Feierstein, Michelle Schorn, Mohammad Alanjary, Eileen Dimalanta, Devin Dressman, Rachel Kasinskas, Tanya Sokolsky, Jacqueline A Fidanza, Eugeni Namsaraev, Kevin J Mckernan, Alan Williams, G Thomas Roth, and James Bustillo. An integrated semiconductor device enabling non-optical genome sequencing. Nature, 475(7356):348–352,
July 2011. doi: 10.1038/nature10242. URL http://eutils.ncbi.nlm.nih.gov/entrez/eutils/
elink.fcgi?dbfrom=pubmed&id=21776081&retmode=ref&cmd=prlinks.
[39] S L Salzberg, A M Phillippy, A Zimin, D Puiu, T Magoc, S Koren, T J Treangen, M C Schatz,
A L Delcher, and M Roberts. GAGE: A critical evaluation of genome assemblies and assembly
algorithms. Genome Research, 22(3):557–567, 2012. URL http://genome.cshlp.org/content/
22/3/557.short.
[40] Lincoln Stein. http://www.sequenceontology.org/gff3.shtml, February 2013.
89
[41] Cole Trapnell, Lior Pachter, and Steven L Salzberg. TopHat: discovering splice junctions with
RNA-Seq. Bioinformatics, 25(9):1105–1111, April 2009. doi: 10.1093/bioinformatics/btp120. URL
http://bioinformatics.oxfordjournals.org/cgi/doi/10.1093/bioinformatics/btp120.
[42] D. Wheeler and M Burrows. A block-sorting lossless data compression algorithm. Digital Systems
Research Center Report, 124, 1994. URL http://scholar.google.com/scholar?q=related:U_
0kiwo6fbsJ:scholar.google.com/&hl=en&num=30&as_sdt=0,5.
[43] Daniel R Zerbino, Gayle K McEwen, Elliott H Margulies, and Ewan Birney. Pebble and rock band:
heuristic resolution of repeats and scaffolding in the velvet short-read de novo assembler. PLoS
ONE, 4(12):e8407, 2009. URL http://dx.plos.org/10.1371/journal.pone.0008407.g005.
90

Documentos relacionados

from lvaruzza.com - Leonardo Varuzza`s Site

from lvaruzza.com - Leonardo Varuzza`s Site A amplificação de bibliotecas tem como objetivo gerar em um pequeno espaço físico milhares de cópias de cada fragmento de DNA produzido na etapa de preparo da amostra. O objetivo dessa amplificação...

Leia mais