Qualità dei reads e formato FASTQ File - e-Learning

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