# Control de qualidade e trimagem Aqui você vai aprender 🤓 a analisar a qualidade de sequências obtidas por sequenciamento em plataforma Illumina e a *trimar* (filtrar) aquelas ***reads*** (sequências) com baixa qualidade para serem descartadas e melhorar a acurácia dos processos ***downstream***, levando para frente só ***reads*** com alta qualidade. Para este tutorial 🗒 será usado um conjunto de quatro amostras de sequenciamento do gene 16S rRNA (parte I), quatro amostras de sequenciamento do *Internal transcribed spacer* - ITS (parte II) ou três *sub-samples* de amostras de sequenciamento *shotgun* (parte III) ## Colaboradores * :female-scientist::female-technologist: MSc. Kelly J. Hidalgo Martinez Microbióloga Doutoranda em Genética e Biologia Molecular Instituto de Biologia - UNICAMP :iphone: Whastapp: +5519981721510 :mailbox_with_mail: Email: khidalgo@javeriana.edu.co * :male-scientist::male-technologist: Victor Borin Centurion Biomédico Doutorando em Genética e Biologia Molecular Instituto de Biologia - UNICAMP :iphone:Whastapp: +5519982349780 :mailbox_with_mail: Email: vborincenturion@yahoo.com.br * :male-scientist::male-technologist: Dr. Tiago Palladino Delforno Biólogo :mailbox_with_mail: Email: tiago.palladino@gmail.com --- ## Requisitos 1. Não preparou seu pc 💻 para trabalhar no servidor 🖥? então vai em 🔗[Preparativos para começar](https://) (Obrigatório) 2. Já tem uma ideia de que é a tela preta e como se navega nela? não? então vai em 🔗[UNIX Shell - Linux](https://) (Obrigatório) 3. Você precisa conhecer o tipo de arquivos com os que vai trabalhar. Em 🔗[Tipos de arquivos ](https://) encontra essa informação (Obrigatório). 4. Para entender um pouco da estrutura do gene 16S e de barcoding 🔗[vai aqui](https://). 5. Por último precisa saber como activar e desactivar ambientes virtuais em Conda para o uso das ferramentas presentes no nosso servidor. Se ainda não passou por ai vai 🔗[aqui](https://) (Obrigatório). ## Alguns tip 💁🏻‍♀️ interessantes antes de começar * Lembra da tecla [Tab] :keyboard:? para autocompletar nomes de pastas e/ou arquivos e evitar erros de digitação. * Este é novo. Com a seta para acima ⬆️ e para abaixo ⬇️ você pode voltar nos comandos que você já usou anteiormente. * Lembre-se que a linha de comando é sensível a maiúsculas e minúsculas. * Todo comando/programa tem um menu de ajuda **help** 🆘. `$ comando --help` * Na linha de comando o simbolo `#`, significa que não vai ser executado, e é usado para deixar mensagens. --- # PARTE I Gene 16S rRNA ## Vamos lá! :beginner: ### Ingressar ao servidor. Instruções 🔗 [aqui](https://) Estando na sua 📁 `/data/usuário/` vamos criar uma nova 📁 que vai chamar `16S_tutorial` **Entrada** ```coffeescript= ## Confira onde você está pwd ``` **Saída** ```coffeescript= /data/usuário ``` **Entrada** ```coffeescript= ## Crie uma nova pasta mkdir 16S_tutorial ## confira ls ``` **Saída** ```coffeescript= 16S_tutorial ``` **Entrada** ```coffeescript= ## Entre na nova pasta cd 16S_tutorial/ ``` **Todos os comandos vão ser rodados estando dentro desta 📁** Agora vamos a criar uma 📁 para colocar os dados brutos ```coffeescript= mkdir 00.RawData ``` ### Example dataset O *example dataset* se encontra numa 📁 no servidor. Vamos a criar um 🔗**link** do dataset exemplo na 📁 que você criou. Imagine que é como um atalho dos que se criam no Windows. Assim, evita-se informação repetida e uso de espaço desnecessariamente. **Entrada** ```coffeescript= ## Cópiar ln -s /home/bioinfo/Documentos/examples_datasets/16S_v3_v4/* 00.RawData ## Lembre-se que o simbolo * siginifica qualquer caracter. Nesta linha vamos cópiar todos os arquivos dentro da pasta ~/examples_datasets/16S_v3_v4/ para a pasta ~/00.RawData/ ## Confira ls 00.RawData/ ``` **Saída** ```coffeescript= amostra1_1.fq.gz amostra1_2.fq.gz amostra2_1.fq.gz amostra2_2.fq.gz amostra3_1.fq.gz amostra3_2.fq.gz amostra4_1.fq.gz amostra4_2.fq.gz ``` **Nota:** Você poderia trabalhar diretamente com seus dados se você tiver, mas a recomendação 🙂 é primeiro praticar com este *dataset*. ### 1 Trimar ✂️ primers con cutadapt Para cortar ✂️ os primers das sequências usamos um programinha chamado *cutadapt* instalado dentro do ambiente virtual qiime2-2019.10. (Não sabe o que é um ambiente virtual? Então você não passou pelo tutorial de Conda, 🔗[Vai lá](https://)) *Cutadapt* mostra as *reads* que não começam com primers e removem os primers das *reads* que tem eles. ```coffeescript= ## Active o ambiente virtual source /opt/Miniconda3/bin/activate qiime2-2019.10 ## Crie um novo diretório para armazenar as amostras sem primers mkdir 01.PrimersTrim ``` A continuação alguns primers padrão usados dependendo da região sequenciada **Primers para V6-V8** ``` -g ACGCGHNRAACCTTACC \ -G ACGGGCRGTGWGTRCAA \ ``` **Primers para V4-V5** ``` -g GTGYCAGCMGCCGCGGTAA \ -G CCGYCAATTYMTTTRAGTTT \ ``` **Primers para V3-V4** ``` -g CCTAYGGGRBGCASCAG \ -G GGACTACNNGGGTATCTAAT \ ``` Os primers (515F-806R) usados nestas amostras foram, específicos pra V4: ``` -g GTGYCAGCMGCCGCGGTAA \ -G GGACTACNVGGGTWTCTAAT \ ``` A continuação o comando, você tera que rodar ele para cada amostra, trocando os nomes das amostras de entrada e dos arquivos de saída ```coffeescript= parallel --link --jobs 4 \ 'cutadapt \ --pair-filter any \ --no-indels \ --discard-untrimmed \ -g GTGYCAGCMGCCGCGGTAA \ -G GGACTACNVGGGTWTCTAAT \ -o 01.PrimersTrim/amostra1_r1.fq.gz \ -p 01.PrimersTrim/amostra1_r2.fq.gz \ {1} {2} \ > 01.PrimersTrim/sample1_cutadapt_log.txt' \ ::: 00.RawData/amostra1_1.fq.gz ::: 00.RawData/amostra1_2.fq.gz ``` o comando para a amostra 2, note que no flag 🚩 -o e -p os nomes de saída mudaram para `amostra2_r1.fq.gz` e `amostra2_r2.fq.gz` respectivamente. O arquivo 📄 `log.txt` mudou para sample2 e por último os caminhos de entrada mudaram para `00.RawData/amostra2_1.fq.gz` e `00.RawData/amostra2_2.fq.gz`. Assim, você já sabe tudo o que tem que ser mudado cada vez que vai rodar uma amostra diferente. **Preste muita atenção a esto porque você poderia sobre escrever arquivos sem perceber.**:exclamation: ```coffeescript= parallel --link --jobs 4 \ 'cutadapt \ --pair-filter any \ --no-indels \ --discard-untrimmed \ -g GTGYCAGCMGCCGCGGTAA \ -G GGACTACNVGGGTWTCTAAT \ -o 01.PrimersTrim/amostra2_r1.fq.gz \ -p 01.PrimersTrim/amostra2_r2.fq.gz \ {1} {2} \ > 01.PrimersTrim/sample2_cutadapt_log.txt' \ ::: 00.RawData/amostra2_1.fq.gz ::: 00.RawData/amostra2_2.fq.gz ``` Amostra 3 ```coffeescript= parallel --link --jobs 4 \ 'cutadapt \ --pair-filter any \ --no-indels \ --discard-untrimmed \ -g GTGYCAGCMGCCGCGGTAA \ -G GGACTACNVGGGTWTCTAAT \ -o 01.PrimersTrim/amostra3_r1.fq.gz \ -p 01.PrimersTrim/amostra3_r2.fq.gz \ {1} {2} \ > 01.PrimersTrim/sample3_cutadapt_log.txt' \ ::: 00.RawData/amostra3_1.fq.gz ::: 00.RawData/amostra3_2.fq.gz ``` Amostra 4 ```coffeescript= parallel --link --jobs 4 \ 'cutadapt \ --pair-filter any \ --no-indels \ --discard-untrimmed \ -g GTGYCAGCMGCCGCGGTAA \ -G GGACTACNVGGGTWTCTAAT \ -o 01.PrimersTrim/amostra4_r1.fq.gz \ -p 01.PrimersTrim/amostra4_r2.fq.gz \ {1} {2} \ > 01.PrimersTrim/sample4_cutadapt_log.txt' \ ::: 00.RawData/amostra4_1.fq.gz ::: 00.RawData/amostra4_2.fq.gz ``` Confira que os arquivos :page_facing_up: de saída foram criados ```coffeescript= ls 01.PrimersTrim/ ``` **Saída** ```coffeescript= amostra1_r1.fq.gz amostra2_r1.fq.gz amostra3_r1.fq.gz amostra4_r1.fq.gz sample1_cutadapt_log.txt sample3_cutadapt_log.txt amostra1_r2.fq.gz amostra2_r2.fq.gz amostra3_r2.fq.gz amostra4_r2.fq.gz sample2_cutadapt_log.txt sample4_cutadapt_log.txt ``` Agora vamos a usar um pacote de *scripts* que chama microbiome_helper, para criar um *resumo* de todos os arquivos 📄 `log.txt`, para analizar quantas sequências ficaram depois de trimar ✂️ os primers. ```coffeescript= /home/bioinfo/Documentos/microbiome_helper/parse_cutadapt_logs.py -i 01.PrimersTrim/*log.txt ## Abra o arquivo de texto nano cutadapt_log.txt ``` **Saída** ```coffeescript= sample pairs_in read1_match read2_match pairs_passed sample1 153569 151923 150100 148499 sample2 120080 118814 116955 115727 sample3 171262 169456 166745 164997 sample4 113615 112400 111233 110059 ``` Como pode observar, por exemplo da amostra1 entraram 153569 *reads* e sairam 148499. ```coffeescript= ## Remova todos os arquivos .txt intermediarios rm 01.PrimersTrim/*_log.txt ``` É importante levar um controle das *reads* que vão ficando depois de cada passo. Para isto crie um arquivo 📄 `.xlsx` (excel), com as seguintes colunas ***Nota***: esta tabela tem colunas que serão usadas no tutorial 🗒 QIIME2 - gene 16S rRNA | SampleID | Raw_reads | Post_trim_primers | Perda até aqui| Post_QC_Trim | Perda até aqui | % Perda | Artefato | filtered | Denoised | merged_reads|non-chimeric | Perda até aqui | % perda total | | -------- | --------- | ------ | ----------------- | --------- | --------- |:---------:| --------- | ---------- | ------ | -------- | ---------- | ------ | ------------ | ---------- | ---------------- | ------------ | Você pode encontrar um template desta planilha aqui: ```coffeescript= /home/bioinfo/Documentos/examples_datasets/QC_controle.xlsx ``` Faça download 🔽 dela no seu computador 💻 usando filezilla. Precisa ajúda para isso? 🔗[Vai aqui](https://) ### 2 Explorar a qualidade das sequências ```coffeescript= ## Crie um novo diretório para armazenar os reportes de qualidade mkdir 02.FastqcReports ``` Para analisar 🤓 a qualidade das sequências vamos usar um programa chamado Fastqc, ele faz um scan de cada sequência e determina a qualidade delas segundo vários parâmetros, criando um reporte com interfaz gráfica. ```coffeescript= ## Fastqc está instalado no ambiente virtual bioinfo source /opt/Miniconda3/bin/activate bioinfo ## Rodar fastqc fastqc -t 10 01.PrimersTrim/* -o 02.FastqcReports/ ``` o flag 🚩 -t significa quantos núcleos ou threads você quer que o programa use. Nosso servidor 🖥 tem 22. 10 é bastante para este processo. Na anterior linha de comando você processou todas as amostras de uma vez só, simbolizado no caracter *. Lea o comando assim: fastqc por favor me mostra a qualidade das sequências de todas as amostras que se encontram dentro da 📁 `01.PrimersTrim/` e coloque os reportes na 📁 `02.FastqcReports/` Opcionalmente, você pode gerar um reporte único com todas as amostras, usando a ferramenta multiqc ```coffeescript= multiqc 02.FastqcReports/* -o 02.FastqcReports/ ``` Agora para conseguir observar os reportes vai no filezilla e faça download 🔽 deles no seu 💻. Só descarregue os arquivos `.html` Você vai encontrar dois arquivos por cada amostra o r1 e o r2. Por enquanto preocupe-se com o parâmetro **Per base sequence quality** que dever ser **Q >30** ![](https://i.imgur.com/4Ej7shT.png) Você vai ver esse gráfico de barras :bar_chart:. Lembra no tutorial de tipos de arquivos que tem a explicação do que é *Phred score*? para refrescar a memória, 🔗[vai lá](https://) **é importante**:exclamation:. O r2 sempre tem uma qualidade mais baixa. ![](https://i.imgur.com/Ql7SSdQ.png) Aqui neste reporte você também pode confirmar o número de sequências (**Basic Statistics**) que foram analisadas, que deve corresponder à saída do cutadapt ![](https://i.imgur.com/DLD7wuG.png) Se quiser conhecer mais sobre este reporte, saber que significam os demais parâmetros. 🔗[Vai aqui](https://dnacore.missouri.edu/PDF/FastQC_Manual.pdf). ### 3 Filtragem das *reads* com baixa qualidade ```coffeescript= ## Crie um novo diretório para armazenar as sequências limpas mkdir 03.CleanData ## Crie outra pasta onde vai armazenar o que NÃO precisa, o lixo mkdir unpaired ``` Para a trimagem ✂️ das *reads* com baixa qualidade vai usar o programa Trimmomatic A continuação alguns parâmetros: **LEADING** Remove as bases com baixa qualidade do começo da sequência. Especifique a qualidade minima para conservar a base. **TRAILING** Remove as bases com baixa qualidade do final da sequência. Especifique a qualidade minima para conservar a base. **SLIDINGWINDOW** Cria uma janela deslizante de determinado número de bases. Elimina a janela completa se a média de qualidade é menor da estipulada. WindowSize:requiredQuality. **MAXINFO** Executa um aro de qualidade adaptável, equilibrando os benefícios de reter as *reads* com o custo de reter bases com erros. targetLength:strictness. **MINLEN** Remove *reads* com comprimento menor a o estipulado. Para mais detalhes consulte o 🔗[manual do Trimmomatic](http://www.usadellab.org/cms/uploads/supplementary/Trimmomatic/TrimmomaticManual_V0.32.pdf). ```coffeescript= ## Com este comando você vai processar todas as amostras for i in 01.PrimersTrim/*1.fq.gz do BASE=$(basename $i 1.fq.gz) trimmomatic PE -threads 12 $i 01.PrimersTrim/${BASE}2.fq.gz 03.CleanData/${BASE}1_paired.fq.gz unpaired/${BASE}1_unpaired.fq.gz 03.CleanData/${BASE}2_paired.fq.gz unpaired/${BASE}2_unpaired.fq.gz LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MAXINFO:80:0.5 MINLEN:150 done ``` **Atenção!**:exclamation: O parêmetros deste comando podem ser totalmente modificados em função de seus dados e do tipo de sequenciamento (amplicon ou *shotgun*) O comando deu certo 👍🏼: quando aparece assim: ![](https://i.imgur.com/LCr0Cfh.png) Você pode reparar que nas quatro amostras sobreviveram aproximadamente 60% das sequências. Você tem que colocar na balança, poucas reads com boa qualidade ou muitas reads com baixa qualidade. Uma boa porcentagem de sequências para ser levado pra frente é minimo de 60% 👍🏼, melhor se fosse mais de 70% 👌🏼. Mas... vamos a ver 👀 de novo a qualidade como ficou com o fastqc ```coffeescript= fastqc -t 10 03.CleanData/* -o 02.FastqcReports/ multiqc 02.FastqcReports/*paired* -o 02.FastqcReports/ ## Fazer download desde Filezilla ``` Melhorou né? 👍🏼 ![](https://i.imgur.com/LBLf1XU.png) O r2 também melhorou, no entanto não todas estão na caixa verde, mas é aceptável assim ![](https://i.imgur.com/ziNleOh.png) Olhe na seção **Basic Statitics** o número de sequências restantes para atualizar sua planilha. Até aqui aprendimos como ver 👀 gráficamente a qualidade das *reads* e a filtrar aquelas com baixa qualidade, para levar as melhores para os análises *downstream*. # PARTE II ITS ## Vamos lá! :beginner: ### Ingressar ao servidor. Instruções 🔗 [aqui](https://) Estando na sua 📁 `/data/usuário/` vamos criar uma nova 📁 que vai chamar `its_tutorial`. Lembrando que a palavra usuário vai ser substituida por seu nome de usuário do servidor. **Entrada** ```coffeescript= ## Confira onde você está pwd ``` **Saída** ```coffeescript= /data/usuário ``` **Entrada** ```coffeescript= ## Crie uma nova pasta mkdir its_tutorial ## confira ls ``` **Saída** ```coffeescript= its_tutorial ``` **Entrada** ```coffeescript= ## Entre na nova pasta cd its_tutorial/ ``` **Todos os comandos vão ser rodados estando dentro desta 📁** Agora vamos a criar uma 📁 para colocar os dados brutos ```coffeescript= mkdir 00.RawData ``` ### Example dataset O *example dataset* se encontra numa 📁 no servidor. São quatro amostras de sequenciamento do ITS2. Vamos a criar um 🔗**link** do dataset exemplo na 📁 que você criou. Imagine que é como um atalho dos que se criam no Windows. Assim, evita-se informação repetida e uso de espaço desnecessariamente. **Entrada** ```coffeescript= ## Cópiar ln -s /home/bioinfo/Documentos/examples_datasets/its_ITS2/* 00.RawData ## Lembre-se que o simbolo * siginifica qualquer caracter. Nesta linha vamos cópiar todos os arquivos dentro da pasta ~/examples_datasets/its_ITS2/ para a pasta ~/00.RawData/ ## Confira ls 00.RawData/ ``` **Saída** ```coffeescript= amostra1_1.fq.gz amostra1_2.fq.gz amostra2_1.fq.gz amostra2_2.fq.gz amostra3_1.fq.gz amostra3_2.fq.gz amostra4_1.fq.gz amostra4_2.fq.gz ``` **Nota:** Você poderia trabalhar diretamente com seus dados se você tiver, mas a recomendação 🙂 é primeiro praticar com este *dataset*. ### 1 Trimar ✂️ primers con cutadapt Para cortar ✂️ os primers das sequências usamos um programinha chamado *cutadapt* instalado dentro do ambiente virtual qiime2-2019.10. (Não sabe o que é um ambiente virtual? Então você não passou pelo tutorial de Conda, 🔗[Vai lá](https://)) *Cutadapt* mostra as *reads* que não começam com primers e removem os primers das *reads* que tem eles. ```coffeescript= ## Active o ambiente virtual source /opt/Miniconda3/bin/activate qiime2-2019.10 ## Crie um novo diretório para armazenar as amostras sem primers mkdir 01.PrimersTrim ``` A continuação alguns primers padrão usados dependendo da região sequenciada **Primers para ITS1** ``` ## Primers ITS1-ITS2 -g TCCGTAGGTGAACCTGCGG \ -G GCTGCGTTCTTCATCGATGC \ ``` ``` ## Primers ITS1F-ITS2 -g CTTGGTCATTTAGAGGAAGTAA \ -G GCTGCGTTCTTCATCGATGC \ ``` ``` ## Primers ITS5-ITS2 -g GGAAGTAAAAGTCGTAACAAGG \ -G GCTGCGTTCTTCATCGATGC \ ``` **Primers para ITS2** ``` ## Primers ITS3-ITS4 -g GCATCGATGAAGAACGCAGC \ -G TCCTCCGCTTATTGATATGC \ ``` **Primers para ITS1-5.8S-ITS2** ``` # Primers ITS1-ITS4 -g TCCGTAGGTGAACCTGCGG \ -G TCCTCCGCTTATTGATATGC \ ``` Para estas amostras foram usados os primers ITS3-ITS4, específicos para o ITS2: ``` -g GCATCGATGAAGAACGCAGC \ -G TCCTCCGCTTATTGATATGC \ ``` A continuação o comando, você tera que rodar ele para cada amostra, trocando os nomes das amostras de entrada e dos arquivos de saída ```coffeescript= parallel --link --jobs 4 \ 'cutadapt \ --pair-filter any \ --no-indels \ --discard-untrimmed \ -g GCATCGATGAAGAACGCAGC \ -G TCCTCCGCTTATTGATATGC \ -o 01.PrimersTrim/amostra1_r1.fq.gz \ -p 01.PrimersTrim/amostra1_r2.fq.gz \ {1} {2} \ > 01.PrimersTrim/sample1_cutadapt_log.txt' \ ::: 00.RawData/amostra1_1.fq.gz ::: 00.RawData/amostra1_2.fq.gz ``` o comando para a amostra 2, note que no flag 🚩 -o e -p os nomes de saída mudaram para `amostra2_r1.fq.gz` e `amostra2_r2.fq.gz` respectivamente. O arquivo 📄 `log.txt` mudou para sample2 e por último os caminhos de entrada mudaram para `00.RawData/amostra2_1.fq.gz` e `00.RawData/amostra2_2.fq.gz`. Assim, você já sabe tudo o que tem que ser mudado cada vez que vai rodar uma amostra diferente. **Preste muita atenção a esto porque você poderia sobre escrever arquivos sem perceber.**:exclamation: ```coffeescript= parallel --link --jobs 4 \ 'cutadapt \ --pair-filter any \ --no-indels \ --discard-untrimmed \ -g GCATCGATGAAGAACGCAGC \ -G TCCTCCGCTTATTGATATGC \ -o 01.PrimersTrim/amostra2_r1.fq.gz \ -p 01.PrimersTrim/amostra2_r2.fq.gz \ {1} {2} \ > 01.PrimersTrim/sample2_cutadapt_log.txt' \ ::: 00.RawData/amostra2_1.fq.gz ::: 00.RawData/amostra2_2.fq.gz ``` Amostra 3 ```coffeescript= parallel --link --jobs 4 \ 'cutadapt \ --pair-filter any \ --no-indels \ --discard-untrimmed \ -g GCATCGATGAAGAACGCAGC \ -G TCCTCCGCTTATTGATATGC \ -o 01.PrimersTrim/amostra3_r1.fq.gz \ -p 01.PrimersTrim/amostra3_r2.fq.gz \ {1} {2} \ > 01.PrimersTrim/sample3_cutadapt_log.txt' \ ::: 00.RawData/amostra3_1.fq.gz ::: 00.RawData/amostra3_2.fq.gz ``` Amostra 4 ```coffeescript= parallel --link --jobs 4 \ 'cutadapt \ --pair-filter any \ --no-indels \ --discard-untrimmed \ -g GCATCGATGAAGAACGCAGC \ -G TCCTCCGCTTATTGATATGC \ -o 01.PrimersTrim/amostra4_r1.fq.gz \ -p 01.PrimersTrim/amostra4_r2.fq.gz \ {1} {2} \ > 01.PrimersTrim/sample4_cutadapt_log.txt' \ ::: 00.RawData/amostra4_1.fq.gz ::: 00.RawData/amostra4_2.fq.gz ``` Confira que os arquivos 📄 de saída foram criados ```coffeescript= ls 01.PrimersTrim/ ``` **Saída** ```coffeescript= amostra1_r1.fq.gz amostra2_r1.fq.gz amostra3_r1.fq.gz amostra4_r1.fq.gz sample1_cutadapt_log.txt sample3_cutadapt_log.txt amostra1_r2.fq.gz amostra2_r2.fq.gz amostra3_r2.fq.gz amostra4_r2.fq.gz sample2_cutadapt_log.txt sample4_cutadapt_log.txt ``` Agora vamos a usar um pacote de *scripts* que chama microbiome_helper, para criar um *resumo* de todos os arquivos 📄 `log.txt`, para analizar quantas sequências ficaram depois de trimar ✂️ os primers. ```coffeescript= /home/bioinfo/Documentos/microbiome_helper/parse_cutadapt_logs.py -i 01.PrimersTrim/*log.txt ## Abra o arquivo de texto nano cutadapt_log.txt ``` **Saída** ```coffeescript= sample pairs_in read1_match read2_match pairs_passed sample1 148237 146743 146351 145189 sample2 140739 139219 138935 137824 sample3 169466 167162 167283 166010 sample4 157229 155430 155029 153877 ``` Como pode observar, por exemplo da amostra1 entraram 148237 *reads* e sairam 145189. ```coffeescript= ## Remova todos os arquivos .txt intermediarios rm 01.PrimersTrim/*_log.txt ``` É importante levar um controle das *reads* que vão ficando depois de cada passo. Para isto crie um arquivo 📄 `.xlsx` (excel), com as seguintes colunas ***Nota***: esta tabela tem colunas que serão usadas no tutorial 🗒 QIIME2 - gene 16S rRNA | SampleID | Raw_reads | Post_trim_primers | Perda até aqui| Post_QC_Trim | Perda até aqui | % Perda | Artefato | filtered | Denoised | merged_reads|non-chimeric | Perda até aqui | % perda total | | -------- | --------- | ------ | ----------------- | --------- | --------- |:---------:| --------- | ---------- | ------ | -------- | ---------- | ------ | ------------ | ---------- | ---------------- | ------------ | Você pode encontrar um template desta planilha aqui: ```coffeescript= /home/bioinfo/Documentos/examples_datasets/QC_controle.xlsx ``` Faça download 🔽 dela no seu computador 💻 usando filezilla. Precisa ajúda para isso? 🔗[Vai aqui](https://) ### 2 Explorar a qualidade das sequências ```coffeescript= ## Crie um novo diretório para armazenar os reportes de qualidade mkdir 02.FastqcReports ``` Para analisar 🤓 a qualidade das sequências vamos usar um programa chamado Fastqc, ele faz um scan de cada sequência e determina a qualidade delas segundo vários parâmetros, criando um reporte com interfaz gráfica. ```coffeescript= ## Fastqc está instalado no ambiente virtual bioinfo source /opt/Miniconda3/bin/activate bioinfo ## Rodar fastqc fastqc -t 10 01.PrimersTrim/* -o 02.FastqcReports/ ``` o flag 🚩 -t significa quantos núcleos ou threads você quer que o programa use. Nosso servidor 🖥 tem 22. 10 é bastante para este processo. Na anterior linha de comando você processou todas as amostras de uma vez só, simbolizado no caracter *. Lea o comando assim: fastqc por favor me mostra a qualidade das sequências de todas as amostras que se encontram dentro da 📁 `01.PrimersTrim/` e coloque os reportes na 📁 `02.FastqcReports/` Opcionalmente, você pode gerar um reporte único com todas as amostras, usando a ferramenta multiqc ```coffeescript= multiqc 02.FastqcReports/* -o 02.FastqcReports/ ``` Agora para conseguir observar os reportes vai no filezilla e faça download 🔽 deles no seu 💻. Só descarregue os arquivos `.html` Você vai encontrar dois arquivos por cada amostra o r1 e o r2. Por enquanto preocupe-se com o parâmetro **Per base sequence quality** que dever ser **Q >30** ![](https://i.imgur.com/ZHz0DzT.png) Você vai ver esse gráfico de barras 📊. Lembra no tutorial de tipos de arquivos que tem a explicação do que é *Phred score*? para refrescar a memória, 🔗[vai lá](https://) **é importante**:exclamation:. O r2 sempre tem uma qualidade mais baixa. ![](https://i.imgur.com/ZNsi33Z.png) Aqui neste reporte você também pode confirmar o número de sequências (**Basic Statistics**) que foram analisadas, que deve corresponder à saída do cutadapt ![](https://i.imgur.com/XYa5klk.png) Se quiser conhecer mais sobre este reporte, saber que significam os demais parâmetros. 🔗[Vai aqui](https://dnacore.missouri.edu/PDF/FastQC_Manual.pdf). ### 3 Filtragem das *reads* com baixa qualidade ```coffeescript= ## Crie um novo diretório para armazenar as sequências limpas mkdir 03.CleanData ## Crie outra pasta onde vai armazenar o que NÃO precisa, o lixo mkdir unpaired ``` Para a trimagem ✂️ das *reads* com baixa qualidade vai usar o programa Trimmomatic A continuação alguns parâmetros: **LEADING** Remove as bases com baixa qualidade do começo da sequência. Especifique a qualidade minima para conservar a base. **TRAILING** Remove as bases com baixa qualidade do final da sequência. Especifique a qualidade minima para conservar a base. **SLIDINGWINDOW** Cria uma janela deslizante de determinado número de bases. Elimina a janela completa se a média de qualidade é menor da estipulada. WindowSize:requiredQuality. **MAXINFO** Executa um aro de qualidade adaptável, equilibrando os benefícios de reter as *reads* com o custo de reter bases com erros. targetLength:strictness. **MINLEN** Remove *reads* com comprimento menor a o estipulado. Para mais detalhes consulte o 🔗[manual do Trimmomatic](http://www.usadellab.org/cms/uploads/supplementary/Trimmomatic/TrimmomaticManual_V0.32.pdf). ```coffeescript= ## Com este comando você vai processar todas as amostras for i in 01.PrimersTrim/*1.fq.gz do BASE=$(basename $i 1.fq.gz) ## The number of threads is depending of your pc trimmomatic PE -threads 12 $i 01.PrimersTrim/${BASE}2.fq.gz 03.CleanData/${BASE}1_paired.fq.gz unpaired/${BASE}1_unpaired.fq.gz 03.CleanData/${BASE}2_paired.fq.gz unpaired/${BASE}2_unpaired.fq.gz LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MAXINFO:80:0.5 MINLEN:150 done ``` **Atenção!**:exclamation: O parêmetros deste comando podem ser totalmente modificados em função de seus dados e do tipo de sequenciamento (amplicon ou *shotgun*) Você pode reparar que nas quatro amostras sobreviveram aproximadamente 80% das sequências. Você tem que colocar na balança, poucas reads com boa qualidade ou muitas reads com baixa qualidade. Uma boa porcentagem de sequências para ser levado pra frente é no minimo 60% 👍🏼, melhor se fosse mais de 70% 👌🏼. Mas... vamos a ver 👀 de novo a qualidade como ficou com o fastqc ```coffeescript= fastqc -t 10 03.CleanData/* -o 02.FastqcReports/ multiqc 02.FastqcReports/*paired* -o 02.FastqcReports/ ## Fazer download desde Filezilla ``` Melhorou né? :thumbsup: ![](https://i.imgur.com/xzUDAzi.png) O r2 também melhorou, no entanto não todas estão na caixa verde, mas é aceptável assim ![](https://i.imgur.com/7nKOSOB.png) Olhe na seção **Basic Statitics** o número de sequências restantes para atualizar sua planilha. Até aqui aprendimos como ver 👀 gráficamente a qualidade das *reads* e a filtrar aquelas com baixa qualidade, para levar as melhores para os análises *downstream*. # PARTE III Sequenciamento *Shotgun* ## Vamos lá! :beginner: ### Ingressar ao servidor. Instruções 🔗[aqui](https://) Estando na sua 📁 `/data/usuário/` vamos criar uma nova 📁 que vai chamar `shotgun_tutorial` **Entrada** ```coffeescript= ## Confira onde você está pwd ``` **Saída** ```coffeescript= /data/usuário ``` **Entrada** ```coffeescript= ## Crie uma nova pasta mkdir shotgun_tutorial ## confira ls ``` **Saída** ```coffeescript= shotgun_tutorial ``` **Entrada** ```coffeescript= ## Entre na nova pasta cd shotgun_tutorial/ ``` **Todos os comandos vão ser rodados estando dentro desta 📁** Agora vamos a criar uma 📁 para colocar os dados brutos ```coffeescript= mkdir 00.RawData ``` ### Example dataset O *example dataset* se encontra numa 📁 no servidor. Vamos a criar um 🔗**link** do dataset exemplo na 📁 que você criou. Imagine que é como um atalho dos que se criam no Windows. Assim, evita-se informação repetida e uso de espaço desnecessariamente. **Entrada** ```coffeescript= ## Cópiar ln -s /home/bioinfo/Documentos/examples_datasets/shotgun/* 00.RawData ## Lembre-se que o simbolo * siginifica qualquer caracter. Nesta linha vamos cópiar todos os arquivos dentro da pasta ~/examples_datasets/shotgun/ para a pasta ~/00.RawData/ ## Confira ls 00.RawData/ ``` **Saída** ```coffeescript= amostra1_1.fq amostra1_2.fq amostra2_1.fq amostra2_2.fq amostra3_1.fq amostra3_2.fq ``` **Nota:** Você poderia trabalhar diretamente com seus dados se você tiver, mas a recomendação 🙂 é primeiro praticar com este *dataset*. ### 1 Explorar a qualidade das sequências ```coffeescript= ## Crie um novo diretório para armazenar os reportes de qualidade mkdir 01.FastqcReports ``` Para analisar 🤓 a qualidade das sequências vamos usar um programa chamado Fastqc, ele faz um scan de cada sequência e determina a qualidade delas segundo vários parâmetros, criando um reporte com interfaz gráfica. ```coffeescript= ## Fastqc está instalado no ambiente virtual bioinfo source /opt/Miniconda3/bin/activate bioinfo ## Rodar fastqc fastqc -t 10 00.RawData/* -o 01.FastqcReports/ ``` o flag 🚩 -t significa quantos núcleos ou threads você quer que o programa use. Nosso servidor 🖥 tem 22. 10 é suficiente para este processo. Na anterior linha de comando você processou todas as amostras de uma vez só, simbolizado no caracter *. Lea o comando assim: fastqc por favor me mostra a qualidade das sequências de todas as amostras que se encontram dentro da 📁 `00.RawData/` e coloque os reportes na 📁 `01.FastqcReports/` Opcionalmente, você pode gerar um reporte único com todas as amostras, usando a ferramenta multiqc ```coffeescript= multiqc 01.FastqcReports/* -o 01.FastqcReports/ ``` Agora para conseguir observar os reportes vai no filezilla e faça download 🔽 deles no seu 💻. Só descarregue os arquivos `.html` Você vai encontrar dois arquivos por cada amostra o r1 e o r2. Por enquanto preocupe-se com o parâmetro **Per base sequence quality** que dever ser **Q >30** ![](https://i.imgur.com/fK4Eu9X.png) Você vai ver esse gráfico de barras 📊. Lembra no tutorial de tipos de arquivos que tem a explicação do que é *Phred score*? para refrescar a memória, 🔗[vai lá](https://) **é importante**:exclamation:. O r2 sempre tem uma qualidade um pouco mais baixa. ![](https://i.imgur.com/93YY2l0.png) No caso destas amostras, a qualidade delas está muito boa, por tanto não é necessário trimar elas. Aqui neste reporte você também pode confirmar o número de sequências (**Basic Statistics**) que foram analisadas. Para estas amostras exemplo foram criados subsample de um sequenciamento *shotgun* com 10.000 *reads* para cada amostra. Para facilitar e agilizar as análises. ![](https://i.imgur.com/gzRNFxU.png) Se quiser conhecer mais sobre este reporte, saber que significam os demais parâmetros. 🔗[Vai aqui](https://dnacore.missouri.edu/PDF/FastQC_Manual.pdf). ### 2 Filtragem das *reads* com baixa qualidade Embora as amostras exemplo para esta parte do tutorial tem uma qualidade aceptável para continuar com as análises, vamos fazer o tutorial completo para você aprender os comando para filtragem de sequencias com baixa qualidade. ```coffeescript= ## Crie um novo diretório para armazenar as sequências limpas mkdir 02.CleanData ## Crie outra pasta onde vai armazenar o que NÃO precisa, o lixo mkdir unpaired ``` Para a trimagem ✂️ das *reads* com baixa qualidade vai usar o programa Trimmomatic A continuação alguns parâmetros: **LEADING** Remove as bases com baixa qualidade do começo da sequência. Especifique a qualidade minima para conservar a base. **TRAILING** Remove as bases com baixa qualidade do final da sequência. Especifique a qualidade minima para conservar a base. **SLIDINGWINDOW** Cria uma janela deslizante de determinado número de bases. Elimina a janela completa se a média de qualidade é menor da estipulada. WindowSize:requiredQuality. **MAXINFO** Executa um aro de qualidade adaptável, equilibrando os benefícios de reter as *reads* com o custo de reter bases com erros. targetLength:strictness. **MINLEN** Remove *reads* com comprimento menor a o estipulado. Para mais detalhes consulte o 🔗[manual do Trimmomatic](http://www.usadellab.org/cms/uploads/supplementary/Trimmomatic/TrimmomaticManual_V0.32.pdf). ```coffeescript= ## Com este comando você vai processar todas as amostras for i in 00.RawData/*1.fq do BASE=$(basename $i 1.fq) trimmomatic PE -threads 10 $i 00.RawData/${BASE}2.fq 02.CleanData/${BASE}1_paired.fq unpaired/${BASE}1_unpaired.fq 02.CleanData/${BASE}2_paired.fq unpaired/${BASE}2_unpaired.fq LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MAXINFO:80:0.5 MINLEN:50 done ``` **Atenção!**:exclamation: O parêmetros deste comando podem ser totalmente modificados em função de seus dados e do tipo de sequenciamento (amplicon ou *shotgun*) O comando deu certo 👍🏼 quando aparece assim: ![](https://i.imgur.com/lETO8nP.png) Você pode reparar que nas três amostras sobreviveram aproximadamente **95%** das sequências. Porque como explicado anteriormente as sequencias *raw* já estavam com boa qualidade. De tudo jeito no caso que tenha que trimar muito, você tem que colocar na balança, poucas reads com boa qualidade ou muitas reads com baixa qualidade. Uma boa porcentagem de sequências para ser levado pra frente é minimo de 60% 👍🏼, melhor se fosse mais de 70% 👌🏼. Mas... vamos a ver 👀 de novo a qualidade como ficou com o fastqc ```coffeescript= fastqc -t 10 02.CleanData/* -o 01.FastqcReports/ ## multiqc multiqc 01.FastqcReports/*paired* -o 01.FastqcReports/ ## Fazer download desde Filezilla ``` Melhorou né? :thumbsup: ![](https://i.imgur.com/gntFBuM.png) O r2 agora ficou perfeito igual ao r1 ![](https://i.imgur.com/HwJa6cJ.png) Olhe na seção **Basic Statitics** o número de sequências restantes para atualizar sua planilha. Até aqui aprendimos como ver 👀 gráficamente a qualidade das *reads* e a filtrar aquelas com baixa qualidade, para levar as melhores para os análises *downstream*. ## Referências 📄 **Trimmomatic:** Bolger, A.M., Lohse, M., and Usadel, B. (2014). Trimmomatic: a flexible trimmer for Illumina sequence data. Bioinformatics 30. 📄 **FastQC:** Andrews, S. (2010). FastQC: a quality control tool for high throughput sequence data. 📄 **MultiQC:** Ewels, P., Magnusson, M., Lundin, S., and Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics 32, 3047-3048. **FIM** :sparkle: