Corso di Elementi di Bionformatica Laurea Triennale in Informatica Il formato FASTQ per la qualità delle sequenze Anno Accademico 2015-2016 Docente del laboratorio: Raffaella Rizzi 1 La qualità delle sequenze L’aspetto legato alla qualità delle sequenze è attualmente importantissimo: ü le nuove tecnologie di sequenziamento (NextGeneration Sequencing, NGS) producono reads (sequenze) corti per i quali la conoscenza della qualità risulta di fondamentale importanza ü i software tools che processano sequenze NGS devono tenere conto della qualiltà della sequenza Ad ogni base di un read viene dunque associato un indice di qualità. La qualità delle sequenze L’aspetto legato alla qualità delle sequenze è attualmente importantissimo: ü le nuove tecnologie di sequenziamento (NextGeneration Sequencing, NGS) producono reads (sequenze) corti per i quali la conoscenza della qualità risulta di fondamentale importanza ü i software tools che processano sequenze NGS devono tenere conto della qualiltà della sequenza Ad ogni base di un read viene dunque associato un Repository di NGS data: Sequence Read Archive (SRA): indice di qualità. http://www.ncbi.nlm.nih.gov/sra Il formato FASTQ FASTQ: ü è un formato di puro testo facilmente leggibile ü ü ü è pensato (da Wellcome Trust Sanger Institute) per associare ad una sequenza la qualità di ogni sua singola base è un formato standard per l’output di strumenti di sequenziamento NGS ha estensione: *.fq oppure *.fastq Il formato FASTQ FASTQ: ü è un formato di puro testo facilmente leggibile ü ü ü è pensato (da Wellcome Trust Sanger Institute) per associare ad una sequenza la qualità di ogni sua singola base FASTQstandard = FASTA + qualità è un formato per l’output di strumenti di sequenziamento NGS ha estensione: *.fq oppure *.fastq Sanger VS Next-Generation Sequencing (NGS) Metodo Sanger Metodi NGS ð Piuttosto costoso (centinaia di milioni di dollari per Human Genome Project) ð Poco costoso (attorno al milione di dollari per sequenziare il genoma umano) ð Processa pochissimi reads in un run (copertura relativamente bassa) ð Processa tanti reads in un run (milioni) (copertura da 10 a 100 volte superiore quella Sanger) ð Lunghezza dei reads fino a 1000 bp ð Qualità elevata ð Reads relativamente corti ð Qualità relativamente bassa Sanger VS Next-Generation Sequencing (NGS) Metodo Sanger Metodi NGS ð Piuttosto costoso (centinaia di milioni di dollari per Human Genome Project) ð Poco costoso (attorno al milione di dollari per sequenziare il genoma umano) ð Processa pochissimi reads in un run (copertura relativamente bassa) ð Processa tanti reads in un run (milioni) (copertura da 10 a 100 volte superiore quella Sanger) ð Lunghezza dei reads fino a 1000 bp ð Qualità elevata ð Reads relativamente corti ð Qualità relativamente bassa Sanger VS Next-Generation Sequencing (NGS) Metodo Sanger Metodi NGS ð Piuttosto costoso (centinaia di milioni di dollari per Human Genome FASTA Project) ð Poco costoso (attorno al milione di dollari per sequenziare il genoma umano) ð Processa pochissimi reads in un run (copertura relativamente bassa) ð Processa tanti reads in un run (milioni) (copertura da FASTQ 10 a 100 volte superiore quella Sanger) ð Lunghezza dei reads fino a 1000 bp ð Qualità elevata ð Reads relativamente corti ð Qualità relativamente bassa Base calling Un esperimento di sequenziamento produce in generale un cromatogramma da cui si deriva la sequenza delle base tramite il cosiddetto processo di base calling Base calling Un esperimento di sequenziamento produce in generale un cromatogramma da cui si deriva la sequenza delle base tramite il cosiddetto processo di base calling Base calling La lettura di un cromatogramma permette l’associazione di un indice di qualità ad ogni base chiamata. Oltre alla sequenza di basi, si ottiene dunque anche la corrispondente sequenza di indici di qualità. Base calling La lettura di un cromatogramma permette l’associazione di un indice di qualità ad ogni base chiamata. Oltre alla sequenza di basi, si ottiene dunque anche la corrispondente sequenza di indici di qualità. L’indice di qualità più usato attualmente è il Phred Quality Score Phred Quality Score Phred Quality Score è stato sviluppato all’interno del software Phred base-calling nei primi anni Novanta dal gruppo di Phil Green (Washington University). La qualità q, relativa ad una certa base b nella sequenza, è: q = -10 log10 (p) dove p è la probabilità che la base b sia errata. (Il valore calcolato viene arrotondato all’intero più vicino) Phred Quality Score Esercizio 1. Calcolare il phred value q di una base che ha una probabilità dell’1% di essere errata (cioè una probabilità del 99% di essere corretta). Phred Quality Score Esercizio 1. Calcolare il phred value q di una base che ha una probabilità dell’1% di essere errata (cioè una probabilità del 99% di essere corretta). q = - 10 log10 (0.01) = 20 Phred Quality Score Esercizio 2. Calcolare il phred value q di una base che ha una probabilità del 100% di essere errata (cioè una probabilità dello 0% di essere corretta). Phred Quality Score Esercizio 2. Calcolare il phred value q di una base che ha una probabilità del 100% di essere errata (cioè una probabilità dello 0% di essere corretta). q = - 10 log10 (1.0) = 0 Phred Quality Score Esercizio 3. Calcolare il phred value q di una base che ha una probabilità dello 0% di essere errata (cioè una probabilità del 100% di essere corretta). Phred Quality Score Esercizio 3. Calcolare il phred value q di una base che ha una probabilità dello 0% di essere errata (cioè una probabilità del 100% di essere corretta). q = - 10 log10 (0.0) = +infinito Phred Quality Score Esercizio 3. Calcolare il phred value q di una base che ha una probabilità dello 0% di essere errata (cioè una probabilità del 100% di essere corretta). q = - 10 log10 (0.0) = +infinito Una base con q maggiore o uguale a 50 è considerata praticamente corretta. Phred Quality Score Esercizio 3. Calcolare il phred value q di una base che ha una probabilità dello 0% di essere errata (cioè una probabilità del 100% di essere corretta). q = - 10 log10 (0.0) = +infinito Una base con q maggiore o uguale a 30 (e inferiore a 50) è considerata “buona”. Phred Quality Score Esercizio 4. Calcolare la probabilità di errore di una base con phred value pari a 50. Phred Quality Score Esercizio 4. Calcolare la probabilità di errore di una base con phred value pari a 50. p = 10 ^(q/-10) = 10 ^ (-5) = 0.00001 Phred Quality Score Esercizio 4. Calcolare la probabilità di errore di una base con phred value pari a 50. p = 10 ^(q/-10) = 10 ^ (-5) = 0.00001 Una base con phred value pari a 50, ha una probabilità dello 0.001% di essere sbagliata. Phred Quality Score Esercizio 4. Calcolare la probabilità di errore di una base con phred value pari a 50. p = 10 ^(q/-10) = 10 ^ (-5) = 0.00001 Le basi che hanno una probabilità inferiore allo 0.001% di essere sbagliate sono considerate corrette Phred Quality Score Esercizio 5. Calcolare il phred value q di una base che ha una probabilità del 75% di essere corretta. Phred Quality Score Esercizio 5. Calcolare il phred value q di una base che ha una probabilità del 75% di essere corretta. q = - 10 log10 (1-0.75) = 6 Phred Quality Score Esercizio 6. Data una base, avente phred value q pari a 10, calcolare la probabilità pc che la base sia stata chiamata correttamente. Phred Quality Score Esercizio 6. Data una base, avente phred value q pari a 10, calcolare la probabilità pc che la base sia stata chiamata correttamente. p = 10 ^(q/-10) = 10 ^ (-1) = 0.1 pc = 1 - p = 1 - 0.1 = 0.9 Formato FASTQ Il formato FASTQ è composto da quattro righe: Formato FASTQ Il formato FASTQ è composto da quattro righe: 1. Header della sequenza contenente l’identificatore del read simbolo iniziale: @ Formato FASTQ Il formato FASTQ è composto da quattro righe: 1. 2. Header della sequenza contenente l’identificatore del read simbolo iniziale: @ Sequenza delle basi del read Formato FASTQ Il formato FASTQ è composto da quattro righe: 1. 2. 3. Header della sequenza contenente l’identificatore del read simbolo iniziale: @ Sequenza delle basi del read Header della sequenza dei phred values simbolo iniziale: + Formato FASTQ Il formato FASTQ è composto da quattro righe: 1. 2. 3. 4. Header della sequenza contenente l’identificatore del read simbolo iniziale: @ Sequenza delle basi del read Header della sequenza dei phred values simbolo iniziale: + Sequenza dei phred values corrispondenti alle basi del read (codificata in caratteri stampabili) Formato FASTQ (esempio) @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Formato FASTQ (esempio) @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Header della sequenza: dopo il simbolo @ c’è l’ID del read Formato FASTQ (esempio) @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Sequenza delle basi del read Formato FASTQ (esempio) @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Header della sequenza dei phred values: dopo il simbolo + c’è l’ID (opzionale) del read Formato FASTQ (esempio) @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Header della sequenza dei phred values: dopo il simbolo + c’è l’ID (opzionale) del read Formato FASTQ (esempio) @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Sequenza dei phred values: il carattere i-esimo codifica Il phred value q della i-esima base del read Conversione di q in carattere Ogni phred value q viene convertito in un carattere stampabile su file Ogni sequenziatore NGS ha una propria funzione f che specifica la conversione da phred value q a carattere c: c = f(q) Conversione di q in carattere Una tipica conversione è la seguente: c = ASCII(min(q,93)+33) cioé: 1. se q è maggiore di 93, si pone q=93 2. si aggiunge a q il valore 33 3. si converte in ASCII l’intero ottenuto al punto 2 Conversione di q in carattere Una tipica conversione è la seguente: c = ASCII(min(q,93)+33) cioé: 1. se q è maggiore di 93, si pone q=93 2. si aggiunge a q il valore 33 3. si converte in ASCII l’intero ottenutoche al punto Il codice è una tabella fa 2 corrispondere a un intero in [0, 127] un carattere Rappresentazione in base 10 Rappresentazione in base 16 Rappresentazione in base 8 Ad esempio, all’intero 50 corrisponde il carattere ‘2’ I caratteri stampabili corrispondono agli interi nell’intervallo [32, 127] Conversione di q in carattere Una tipica conversione è la seguente: c = ASCII(min(q,93)+33) Esercizio 7: trovare il carattere che corrisponde a un valore q = 32 secondo la conversione riportata sopra. Conversione di q in carattere Una tipica conversione è la seguente: c = ASCII(min(q,93)+33) Esercizio 7: trovare il carattere che corrisponde a un valore q = 32 secondo la conversione riportata sopra. q=32 à ‘A’ Conversione di q in carattere Una tipica conversione è la seguente: c = ASCII(min(q,93)+33) Esercizio 8: trovare il valore di q che corrisponde al carattere ‘a’ secondo la conversione riportata sopra. Conversione di q in carattere Una tipica conversione è la seguente: c = ASCII(min(q,93)+33) Esercizio 8: trovare il valore di q che corrisponde al carattere ‘a’ secondo la conversione riportata sopra. ‘a’ à q=64 (probabilità di errore dello 0.00004%) Conversione di q in carattere Una tipica conversione: c = ASCII(min(q,93)+33) Esercizio 9: trovare la probabilità che la dodicesima base del read (riportato nell’esempio precedente) sia corretta. Conversione di q in carattere Una tipica conversione: c = ASCII(min(q,93)+33) Esercizio 9: trovare la probabilità pc che la dodicesima base del read (riportato nell’esempio precedente) sia corretta. ‘]’ à 93 (dalla tabella ASCII) q = 93-33 = 60 q = 60 à p = 0,000001 pc = 1 – p = 0,999999 Trimming dei reads La conoscenza della qualità dei reads consente di effettuare il trimming delle sequenze prima di qualsiasi processamento. Il trimming consiste in: 1. eliminare (eventualmente) un prefisso e/o un suffisso di bassa qualità (al di sotto di una prefissata soglia) 2. eliminare un read che risulti troppo corto dopo avere effettuato il trimming Trimming dei reads @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Si supponga di volere tenere solo le basi che hanno un phred value q maggiore o uguale a una soglia prefissata q*, ad esempio q*=58. Trimming dei reads @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Considero il carattere c* che corrisponde al valore q*=58: c* = … Trimming dei reads @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Considero il carattere c* che corrisponde al valore q*=58: c* = ‘[’ Trimming dei reads @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Una strategia è quella di trovare la più lunga parte della sequenza dei phred values che non contenga caratteri il cui valore intero (nella tabella ASCII) sia minore o uguale a quello del carattere ‘[’. Trimming dei reads @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Una strategia è quella di trovare la più lunga parte della sequenza dei phred values che non contenga caratteri il cui valore intero (nella tabella ASCII) sia minore o uguale a quello del carattere ‘[’. Trimming dei reads @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Una strategia è quella di trovare la più lunga parte della sequenza dei phred values che non contenga caratteri il cui valore intero (nella tabella ASCII) sia minore o uguale a quello del carattere ‘[’. Significa cioè trovare la più lunga parte del read la cui qualità non vada al di sotto della soglia q*=58. Trimming dei reads @HWUSI-EAS522:8:5:662:692#0/1 TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX Se tale parte è troppo corta, allora elimino il read Esercizio Scrivere un programma che prenda in input un file in formato FASTQ, una soglia Q di qualità e un valore T compreso tra 0 e 1, e produca in output un file FASTQ contenente le sole sequenze in cui la percentuale di basi con qualità >= Q è pari ad almeno T. Esercizio @HWUSI-EAS522:8:5:662:692#0/1 example.fq TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX @HWUSI-EAS522:8:5:662:693#0/1 TCTGCCAACTTCTTATGGAGGCCTGTATTCACAGGT +HWUSI-EAS522:8:5:662:693#0/1 Aaaa`aa`aa`]__`:a`_U;_A`^\\UTWZ`X^QX @HWUSI-EAS522:8:5:662:694#0/1 TCTGCCAGAGGCCTGTATTCACAGGTACTTCTTATG +HWUSI-EAS522:8:5:662:694#0/1 aaaa`aa`aa`]__`aa`_u[_a`^\\utwz`x^QX @HWUSI-EAS522:8:5:662:695#0/1 TCGCCTGTATTCACAGGTTGCCAACTTCTTATGGAG +HWUSI-EAS522:8:5:662:695#0/1 AaaA`aa`aa`]__`:A`_U;_A`^\\UTWZ`X^QX Con Q=58 e T=0.7 vengono tenuti solo Il primo e il terzo read Esercizio @HWUSI-EAS522:8:5:662:692#0/1 example.fq TATGGAGGCCCAACTTCTTGTATTCACAGGTTCTGC +HWUSI-EAS522:8:5:662:692#0/1 aaaa`aa`aa`]__`aa`_U[_a`^\\UTWZ`X^QX @HWUSI-EAS522:8:5:662:693#0/1 TCTGCCAACTTCTTATGGAGGCCTGTATTCACAGGT +HWUSI-EAS522:8:5:662:693#0/1 Aaaa`aa`aa`]__`:a`_U;_A`^\\UTWZ`X^QX @HWUSI-EAS522:8:5:662:694#0/1 TCTGCCAGAGGCCTGTATTCACAGGTACTTCTTATG +HWUSI-EAS522:8:5:662:694#0/1 aaaa`aa`aa`]__`aa`_u[_a`^\\utwz`x^QX @HWUSI-EAS522:8:5:662:695#0/1 TCGCCTGTATTCACAGGTTGCCAACTTCTTATGGAG +HWUSI-EAS522:8:5:662:695#0/1 AaaA`aa`aa`]__`:A`_U;_A`^\\UTWZ`X^QX Con Q=58 e T=0.7 vengono tenuti solo Il primo e il terzo read