Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Bioinfo 2.0.1
Apostila Bioinfo 2.0.1
Versão 2.0.1
Leonardo Varuzza
Abril 2013
2
Sumário
1 Introdução 5
1.1 O que é NGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Como funciona o NGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1 Preparo da amostra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.2 Amplificação de biblioteca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.3 Sequenciamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.4 Ion Torrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.5 SOLiD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Aplicações do NGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.1 Ressequenciamento genômico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.2 Target Sequencing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3.3 RNA Seq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3.4 Sequenciamento denovo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.5 Metagenoma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2 Arquivos de Sequência 15
2.1 Fasta e FastQ Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.1 Fasta format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.2 FastQ format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2 SFF File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.1 Converter arquivo SFF para Fasta ou FastQ . . . . . . . . . . . . . . . . . . . . . . 18
2.3 Unmapped BAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4 XSQ Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3 Mapeamento de Sequências 23
3.1 SAM e BAM Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.1 Estrutura do arquivo SAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.2 BAM File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.1.3 Samtools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.1.4 Picard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2 Mapeando os reads com o TMAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.1 Criando o índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.2 Mapeando os reads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.3 Exemplo: Mapeando os reads de E. coli com o TMAP . . . . . . . . . . . . . . . . 32
3.2.4 Mapeando dados de Long Mate Pair . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3 Bowtie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.1 Utilizando o Bowtie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.2 Utilizando o Bowtie 2 com o Ion Torrent . . . . . . . . . . . . . . . . . . . . . . . . 35
3.4 Visualizando arquivos BAM com o IGV . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.4.1 Importanto o genoma de referência . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3
4 Arquivos de Anotação de Genomas 39
4.1 BED Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2 Formatos GFF e GTF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.3 Gerando arquivos de anotação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.3.1 Obtendo anotações do UCSC Browser . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.4 Manipulando arquivos BED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.4.1 Extrair sequências da regiões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5 Detecção de Variâncias 45
5.1 VCF Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.1.1 Manipulando arquivos VCF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.1.2 Indexando as variantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.2 Utilizando o samtools para detectar SNPs . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.2.1 Gerando um arquivo consenso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3 Utilizando o GATK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.3.1 Chamando Variantes no GATK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.3.2 Anotando as variantes com o dbSNP . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.4 Utilizando Ion Varriant Caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.5 Anotando os SNP’s com o snpEff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6 Montagem denovo 55
6.1 Montando o genoma com o Mira . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.1.1 Montando uma biblioteca de fragmentos utilizando o Mira 3.4 . . . . . . . . . . . . 56
6.1.2 Montando uma biblioteca de mate-pair utilizando o Mira 3.4 . . . . . . . . . . . . 57
6.1.3 Fazendo uma montagem mista com o Mira 3.4 . . . . . . . . . . . . . . . . . . . . 57
6.1.4 Fazendo uma montagem mista com o Mira 3.9 . . . . . . . . . . . . . . . . . . . . 58
6.1.5 Interpretando os resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.1.6 Comparando a montagem com uma referência . . . . . . . . . . . . . . . . . . . . . 60
6.1.7 Visualizando a montagem no Tablet . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7 Apêndices 65
7.1 Ordem dos genótipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.2 Pileup format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.3 Samtools VCF file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.4 Script para converter os nomes dos cromossomos em um arquivo VCF . . . . . . . . . . . 67
4
Capítulo 1
Introdução
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.
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[23]. 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.
5
�����������������������������������
������
�����
����
������������
���
��
����
�������������
������������
�����
����� ����� ����� ����� ����� ����� �����
���
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.
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
6
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.
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 subquan-
tificado, 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.
7
Razão Policlonal (%) Empty (%)
10 0.47 90.5
5 1.75 81.9
4 2.65 77.9
3 4.46 71.7
2 9.02 60.7
1 26.4 36.8
Tabela 1.1: Relação entre a razão beads/fragmentos, a probabilidade de beads policlonais e a probabili-
dade de empty beads.
1.2.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.
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
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
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.
Uma questão relevante para os sequenciadores que utilizam fluxos de dNTP’s são os homopolíme-
ros, 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
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[29].
1.2.5 SOLiD
A sigla SOLiD significa Sequencing by Ligation and Detection e descreve bem o processo de sequencia-
mento 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
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.
4 Notem que microsatélites com mais de uma base na repetição, como ACACAC, não são homopolimeros
5 Essesuma novo modelo do SOLiD, o 5500W, que não utiliza beads. A amplificação dos templates é feita diretamente
na lâmina.
9
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:
10
Cor Fluoróforo
0 Azul FAM
1 Verde Cy3
2 Amarelo TXR
3 Vermelho Cy5
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.
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.
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
A. Um novo Primer se liga ao template uma C. Novamente as inosinas e o fluóroforo são
posição para dentro do primer. removidos.
primer primer
5’ 5’
B. Como no primer anterior a probe se anela, D. E o processo segue, sempre com uma base
porém deslocada uma base à esquerda. deslocada à esquerda.
Probe Probe
primer primer
n2
A C G T
A 0 1 2 3
C 1 0 3 2
n1
G 2 3 0 1
T 3 2 1 0
12
0 5 10 15 20 25
P1
PA
PB
PC
PD
PE
Figura 1.8: Esquema de cobertura do template pelos probes para uma leitura de 25 bp.
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.
13
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.3.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á sequen-
ciando 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:
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.
14
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 Adenina
C Citosina
G Guanina
T (ou U) Timina (ou Uracila)
R A ou G
Y C ou T
S G ou C
W A ou T
K G ou T
M A ou C
B C ou G ou T
D A ou G ou T
H A ou C ou T
V A ou C ou G
N qualquer base
. ou - gap
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
15
Q Chance de erro Acurácia da base
10 1 em 10 90 %
20 1 em 100 99 %
30 1 em 1000 99,9 %
40 1 em 10000 99,99 %
50 1 em 100000 99,999 %
Phred Score
40
35
30
Phred Score
25
20
15
10
5
0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1
P de erro
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.
16
>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:
Para contar o número de bases no arquivo pode-se utilizar este outro comando:
17
@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:
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
18
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:
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>.xml Arquivo XML com as informações extras de cada read, em especial, as informações
de clipping de cada read.
<?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:
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:
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.
19
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:
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ça-
dos, 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 6.1).
Tendo instalado o Haskell, é muito fácil instalar o Flower. Basta utilizar o programa Cabal da seguinte
maneira:
Além de converter o SFF, o flower também permite inspecionar o arquivo. Para visualizar o SFF em
formato texto, use:
Por fim, o flower gera uma visualização do flow space em um formato tabulado muito útil. Para
gera-la:
flower -F <entrada.sff>
20
...
RWBG8:9:36 81 T 1.05 Qual {unQual = 34}
RWBG8:9:36 82 C 1.03 Qual {unQual = 27}
RWBG8:9:36 83 G 0.00
RWBG8:9:36 84 A 5.72 Qual {unQual = 27},Qual {unQual = 27},
Qual {unQual = 27},Qual {unQual = 27},
Qual {unQual = 27},Qual {unQual = 7}
RWBG8:9:36 85 T 1.93 Qual {unQual = 27},Qual {unQual = 21}
RWBG8:9:36 86 C 0.97 Qual {unQual = 26}
RWBG8:9:36 87 G 0.00
RWBG8:9:36 88 A 0.00
...
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).
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. De-
pendendo do tipo de biblioteca, é preciso passar diferentes argumentos. Para biblioteca de fragmentos
utiliza-se:
21
./convertToXSQ.sh -x <out.xsq> --mode Fragment
--c1 <F3.csfasta> --q1 <F3.QV.qual>
--libraryName <libname> --runStartTime "0000-00-00 00:00:00"
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.
22
Capítulo 3
Mapeamento 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 BLAT1 , 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[17] e o SOAP[19], 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[33, 6] e entre os
programas que implementam esta técnica estão o BWA[15, 16],bowtie[11] e o SOAPv2[20].
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 alinhamento2 .
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.
23
Código Descrição
@HD Identifica o início do arquivo SAM e a versão dele.
@SQ Identifica dada uma das sequências no arquivo de
referência
@RG 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.
@PG Lista de programas utilizados no arquivo.
@CO Comentários
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 3.3.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
M A U UM R RM F L S Q D
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.
6. CIGAR: Sequência de caracteres que descrevem como o read está mapeado na referência. O
significado de cada caracter é o seguinte:
24
Sim. valor Descrição
M 1 Template com múltiplos segmentos, ou seja, mate-pair ou pair-
end3 .
A 2 Cada segmento está corretamente alinhado.
U 4 Segmento não mapeado.
UM 8 Próximo segmento não mapeado.
R 16 O campo SEQ é o reverso complementar do read.
RM 32 O campo SEQ do próximo segmento é o reverso complementar do
read.
F 64 Esse segmento é o primeiro do template.
L 128 Esse segmento é o último do template.
S 256 Alinhamento secundário. Essa flag indica que existe outro alinha-
mento desse read que é considerado o primário pelo mapeador.
Q 512 Esse alinhamento não passou pelo controle de qualidade.
D 1024 Esse read foi considerado uma duplicata de PCR ou ótica.
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.
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[8].
Na figura 3.1 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.
25
Figura 3.1: Exemplos de alinhamentos e os respectivos registros em formato SAM[18].
3.1.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.
• 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:
• 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:
26
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:
Se for aplicado em um BAM file gerado pelo PGM vai gerar um resultado como este:
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:
27
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:
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:
• 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:
Por exemplo, se quiser modificar a tag SO de unsorted para coordinate, utilize os seguintes
comandos:
3.1.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:
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 3.4. Abaixo temos alguns comandos úteis do
Picard, neles o path de instalação está omitido para deixar mais limpa a linha de comando.
28
Argumento Descrição
MAX_RECORD_IN_RAM 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
TMP_DIR Diretório temporário
CREATE_INDEX Cria arquivo de índice .bai.
1. Ordenar um arquivo BAM: O Picard possui um comando similar ao samtools sort, que é o
SortSam.jar:
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:
2. Fazer o merge de diversos arquivos BAM: O Picard também possui uma alternativa ao
comando samtools merge
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 4 .
Quando se deseja combinar diversos arquivos BAM juntos, é um pouco tedioso colocar uma argu-
mento 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.
29
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[9]. 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:
Algoritmo Referência
map1 BWA Short Li and Durbin [15]
map2 BWA Long Li and Durbin [16]
map3 SSAHA Ning [25]
map4 SMEM Li [14]
30
80
75
map %
70
65
60
Figura 3.2: Sensitividade dos algortmos do tmap e do bowtie2 (Amostra de E. Coli O104H4)
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.
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:
Normalmente, os algoritmos individuais não são utilizados, mas sim o comando mapall. Com esse co-
mando 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:
31
150
map time (s)
100
50
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:
ID Identificador único do read group
SM cancer Nome da amostra (sample)
LB hg19 Nome da biblioteca
CN USP Nome do centro de sequencia-
mento
PU PGM/318 A utilização varia entre platafor-
mas. No PGM tem sido usado
para identificar o tipo de chip
utilizado.
PL IONTORRENT Nome da plataforma de sequen-
ciamento (esses valores são tabe-
lados pelo formato SAM)
Combinando todas as informações apresentadas, uma sugestão para rodar o TMAP é a seguinte:
32
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:
Para mapear todas as amostras você pode utilizar o comando for do bash:
33
sff_extract <entrada.sff> |
split_matepairs -l ION_TORRENT |
pair_matcher -p <orphan.fastq> |
deinterleave_pairs -o <out.1.fastq> <out.2.fastq>
É 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.
3.3 Bowtie
O bowtie[11] é 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[12], 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[32] e o pipeline na nuvem de
ressequenciamento Crossbow[13].
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:
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:
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.
34
3.3.2 Utilizando o Bowtie 2 com o Ion Torrent
Vamos agora mapear os mesmos dados utilizados com o TMAP (seção 3.2) 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:
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
for i in *.sff; do
sff_extract -c $i
done
for i in data/*.fastq; do
b=‘basename $i .fastq‘
bowtie2 -p 8 -q dh10b $i
| samtools view -Suh -
| samtools sort - $b.bowtie2
done
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 3.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
35
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 ali-
nhamento 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 3.5 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,
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.
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 3.6. 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 alinha-
mentos. 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 3.7 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
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”.
36
Figura 3.5: IGV mostrando os alinhamentos dos reads na região do gene MTRR
• 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.
• 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 96 .
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.
6 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.
37
Figura 3.6: 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.
Figura 3.7: IGV com os alinhamentos no modo colapsado. Destaque para duas posições com trocas de
nucleotídeos.
38
Capítulo 4
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.
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:
O formato bedDetail é utilizado pelo Ampliseq Designer para informar as regiões cobertas pelo painel.
Na figura 4.1, vemos um exemplo de bedDetail file gerado pelo programa.
39
track name="4477685_CCP_Designed" description="Amplicon_Insert_4477685_CCP" type=bedDetail
chr1 2488068 2488201 AMPL242431688 . TNFRSF14
chr1 2489144 2489273 AMPL262048751 . TNFRSF14
chr1 2489772 2489907 AMPL241330530 . TNFRSF14
... ... ... ... ...
chr1 6528161 6528293 AMPL294026880 . PLEKHG5
chr1 6528282 6528404 AMPL294029495 . PLEKHG5
chr1 6528391 6528519 AMPL294044396 . PLEKHG5
... ... ... ... ...
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[4].
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.
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:
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
40
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:
• transcript_id: ID do transcrito
É possível converter de GTF para GFF utilizando o comando gffread que faz parte do cufflinks2 :
41
Figura 4.2: UCSC Table Browser site
“Output Format” (ver figura 4.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.
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 4.3). São oferecidas as seguintes
opções:
• Whole Gene
• Upstream by X bases
• Exons plus X bases at each end
42
• Introns plus X bases at each end
• 5’ UTR Exons
• Coding Exons
• 3’ UTR Exons
• Downstream by X
Na figure 4.4 podemos ver graficamente os diferentes tipos de arquivos BED gerados.
43
44
Figura 4.4: Diferença entre os tipos de arquivos BED gerados pelo UCSC Table Browser.
Capítulo 5
Detecção de Variâncias
4. ALT: Bases alternativas. Se houver mais de uma alternativa, elas serão listadas separadas por
vírgulas.
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:
45
• 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 5.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 5.2. Neste, caso temos a informação de genótipos para duas amostras,
NA000001 e NA000002.
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, 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.
• 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).
46
• 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) (5.1)
• 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">
47
bgzip <var.vcf>
tabix -p vcf var.vcf.bgz
48
5.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:
Na proxima seção vamos mostrar a utilização do GATK para fazer uma chamada de variantes em
dataset de ampliseq.
gunzip FLO-528.bam.gz
gunzip CCP.bed.gz
samtools index FLO-528.bam
>chrM
49
3. Fazer a chamada de variantes:
O passo seguinte é indexar o arquivo vcf gerado. A melhor alternativa para isso é utilizar o igvtools:
O resultado vai ser um novo arquivo vcf chamado FLO-528.ann.vcf, com o rsID dos SNPs conhecidos
no campo ID.
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
6 É possível instalar em qualquer diretório que se queira, basta depois mudar a linha de comando para refletir essa
mudança.
50
É 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
5.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:
Tabela 5.3: Lista de parâmetros para Torrent Suite Variant Caller (TSVC)
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:
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:
NON_SYNONYMOUS_CODING(MODERATE|MISSENSE|Aag/Gag|K1222E|2240|PDE4DIP||CODING|NM_001198832.1|29|1)
51
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 5.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.
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 Descrição
INTERGENIC A variante está na região intergênica
UPSTREAM Região Upstream do gene (por default até 5k bases)
UTR_5_PRIME Variante na região 5’UTR
UTR_5_DELETED A variante deleta um exon que está na região 5’UTR.
START_GAINED A variante na região 5’UTR produz um sequência de 3 bases que
pode ser um START códon.
SPLICE_SITE_ACCEPTOR A variante está em um splice acceptor site (definido como as duas
bases antes do início do exon, exceto para o primeiro exon).
SPLICE_SITE_DONOR A variante está em um Splice donor site (definido como as duas
bases depois do exon, exceto para o último exon).
START_LOST Variante converte um start codon em um non-start codon. Ex:
aTg/aGg, M/R)
SYNONYMOUS_START Variante converte um start codon em outro start codon. Ex:
Ttg/Ctg, L/L (TTG and CTG can be START codons)
CDS A variante está em um CDS.
GENE A variante está em um gene.
TRANSCRIPT A variante está em um transcrito.
EXON A variante está em um exon.
EXON_DELETED Uma deleção que remove um exon.
NON_SYNONYMOUS_CODING A variante faz o códon gerar um amino ácido diferente. Ex:
Tgg/Cgg, W/R
SYNONYMOUS_CODING A variante mudao o códon, mas não o amino ácido. Ex: Ttg/Ctg,
L/L
FRAME_SHIFT Uma inserção ou deleção que gera um frame shift, por exemplo
um indel que não seja múltiplo de 3.
52
CODON_CHANGE Um ou mais códons são modificados. Por exemplo, um MNP7 de
tamanho múltiplo de 3.
CODON_INSERTION Um ou mais códons inseridos, por exemplo uma inserção múltipla
de 3 na fronteira de um códon.
CODON_CHANGE_PLUS_CODON_INSERTION 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.
CODON_DELETION Um ou vários códons foram deletados. Ex: Uma deleção múltipla
de três na fronteira do códon.
CODON_CHANGE_PLUS_CODON_DELETION 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.
STOP_GAINED Variante gera um STOP codon. Ex: Cag/Tag, Q/*
SYNONYMOUS_STOP Variante modifica um STOP codon em outro STOP codon. Ex:
taA/taG, */*
STOP_LOST Variante muta um STOP codon em um não STOP codon. Ex:
Tga/Cga, */R
INTRON A variante atinge um intron. Tecnicamente, ele não atinge um
exon no transcrito.
UTR_3_PRIME A variante atinge a região 3’UTR.
UTR_3_DELETED A variante apaga um exon que está na região 3’UTR do transcrito.
DOWNSTREAM Downstream do gene (por default até 5K bases).
INTRON_CONSERVED A variante está em uma região intrônica altamente conservada.
INTERGENIC_CONSERVED A variante está em uma região intergênica altamente conservada.
INTRAGENIC A variante atinge um gene, mas nenhum transcrito nesse gene.
RARE_AMINO_ACID A variante atinge um aminoácido raro, portanto tem grandes
chances de produzir uma perda de função.
NON_SYNONYMOUS_START 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 5.4: Lista de efeitos preditos pelo snpEff
53
54
Capítulo 6
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[3, 30].
Neste capítulo vamos mostrar como usar o montador Mira[2] para montar genomas bacterianos com
dados do Ion Torrent PGM.
<proj>_in.<platform>.fastq
<proj>_traceinfo_in.<platform>.xml
55
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:
sff_extract -s <proj>_in.iontor.fastq
-x <proj>_traceinfo_in.iontor.xml
<arquivo.sff*>
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:
sff_extract -s frag_in.iontor.fastq
-x frag_traceinfo_in.iontor.xml
C11-127_40X.sff
1 http://www.sanger.ac.uk/resources/software/caf/
56
Note que o nome do projeto é frag. Em seguida, execute o Mira com o seguinte comando:
mira
--project=frag
--job=denovo,genome,accurate,iontor
-GE:not=4 -OUT:ora=1
IONTOR_SETTINGS -AS:mrpc=100
-
tag1 IA tag2
Na figura 6.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
sff_extract -s mix_in.iontor.fastq
-x mix_traceinfo_in.iontor.xml
C11-127_40X.sff
57
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 6.1.
Todos
Número de contigs 76 1,716 5,987 2,753
Consenso 4,606,198 4,915,162 5,133,612 6,509,621
Maior Contig 358,908 7,696 26,661 414,460
N50 119,555 3,923 1,422 126,091
N90 41,691 1,869 334 616
N95 31,604 1,128 255 506
Leituras Utilizadas 1,085,429 2,235,506 4,384,827 2,906,577
58
Para montar o dataset de fragmentos utiliza-se o seguinte arquivo, chamado frag.manifest. Exem-
plo:
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 6.2 podemos ver os resultados da montagem de diferentes combinações de bibliotecas.
Number of contigs: Total consensus: Largest contig: N50 contig size: N90 contig size: N95 contig
size:
59
frag lmp35 lmp35 + frag lmp89 lmp89 + frag
Contigs Grandes
Número de Contigs 79 223 55 348 54
Consenso 4,633,751 4,573,815 4,632,400 4,562,390 4629,730
Cobertura (%) 99,9% 98,6% 99,8% 98,3% 99,8%
Maior contig 231,197 188,021 590,852 99,306 540,324
N50 93,793 40,235 204,781 30,520 185,223
N90 35,799 11,397 46,501 5,929 55,558
N95 26,409 7,035 36,041 3,710 45,094
Todos
Número de Contigs 79 260 146 410 104
Consenso 4,633,751 4,585,603 4,770,620 4,586,296 4,714,793
Cobertura (%) 99,9% 98,8% 102,8% 98,8% 101,6%
Maior Contig 231,197 188,021 590,852 99,306 540,324
N50 93,793 40,235 179,289 30,520 185,146
N90 35,799 11,378 40,957 5,811 51,490
N95 26,409 6,703 32,292 3,502 41,464
Leituras utilizadas 1,022,516 2,302,069 3,246,379 2,319,887 3,300,475
número total de contigs. Quanto maior esse número, mais fragmentada está a montagem e mais “gaps”
ela apresenta.
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 6.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 6.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 (6.3),
vemos que o número de contigs que se alinham fora da diagonal aumenta, o que indica um maior número
de misassemblies.
60
Assembly Statistics
105
4,750,000
100
4,500,000
95
4,250,000
90
4,000,000
85
3,750,000
80
3,500,000
75
70 3,250,000
Cumulative Length (%)
65 3,000,000
Cumulative Length
60 2,750,000
55 2,500,000
50 2,250,000
N95=30,290 bp
45 N90=36,060 bp
2,000,000
40
1,750,000
35
1,500,000
30
1,250,000
25 N50=119,186 bp
1,000,000
20
750,000
15
500,000
10
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 6.2: Gráfico da soma do tamanho dos contigs para o dataset de fragmentos.
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:
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 6.4.
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 6.5).
61
Frag
3.5 kbp
8.9 kbp + Frag
Figura 6.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.
62
Figura 6.4: Dotplot da montagem do dataset de fragmentos deita pelo mummerplot.
63
64
Capítulo 7
Apêndices
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
65
• . Indica que o read possui a mesma base que a referência
• +[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
Para gerar o pileup de um BAM utiliza-se o comando mpileup do samtools da seguinte maneira:
Se o arquivo possuir regiões com cobertura muito alta, é preciso especificar o parâmetro -d <max cov>,
cujo default é 250.
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ção5.1.
66
Pos. Descrição
1 number of reference Q13 bases on the forward strand
2 number of reference Q13 bases on the reverse strand
3 number of non-ref Q13 bases on the forward strand
4 number of non-ref Q13 bases on the reverse strand
Tabela 7.1: Descrição dos valores do campo I16 gerado pelo samtools mpileup
#!/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($_);
}
}
67
68
Referências
69
70
Lista de Figuras
71
72
Lista de Tabelas
7.1 Descrição dos valores do campo I16 gerado pelo samtools mpileup . . . . . . . . . . . . . . 67
73
74
Referências Bibliográficas
[1] 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.
[2] 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.
[3] D Earl, K Bradnam, J S John, A Darling, D Lin, J Fass, H O K Yu, V Buffalo, D R Zerbino, and
M Diekhans. Assemblathon 1: A competitive assessment of de novo short read assembly methods.
Genome Research, 21(12):2224–2241, 2011.
[4] 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.
[5] 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.
[6] Paolo Ferragina and Giovanni Manzini. An experimental study of an opportunistic index. Society
for Industrial and Applied Mathematics, January 2001.
[7] UCSC Genome. Bed format. http://genome.ucsc.edu/FAQ/FAQformat#format1, 2012.
[8] The SAM Format Speciation Working Group. The sam format speciation (v1.4-r985). http:
//samtools.sourceforge.net/SAM1.pdf, 2012.
[9] Broad Institute. Picard faq. http://sourceforge.net/apps/mediawiki/picard/index.php?
title=Main_Page, 2012.
[10] 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.
[11] B. Langmead, C Trapnell, M. Pop, and S L Salzberg. Ultrafast and memory-efficient alignment of
short DNA sequences to the human genome. Genome Biol, 10(3):R25, 2009.
[12] Ben Langmead and Steven L Salzberg. Fast gapped-read alignment with Bowtie 2. Nat Meth, 9(4):
357–359, March 2012.
[13] 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.
[14] H Li. Exploring single-sample SNP and INDEL calling with whole-genome de novo assembly.
Bioinformatics, 28(14):1838–1844, July 2012.
[15] H Li and R Durbin. Fast and accurate short read alignment with Burrows-Wheeler transform.
Bioinformatics, 25(14):1754–1760, July 2009.
[16] H Li and R Durbin. Fast and accurate long-read alignment with Burrows–Wheeler transform.
Bioinformatics, 26(5):589–595, 2010.
75
[17] 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.
[18] 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.
[19] R Li, Y Li, K Kristiansen, and J Wang. SOAP: short oligonucleotide alignment program. Bioinfor-
matics, 24(5):713–714, February 2008.
[20] 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.
[21] D Lipman and W Pearson. Rapid and sensitive protein similarity searches. Science, 227(4693):
1435–1441, March 1985.
[22] 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.
76