Esercizio 7

Dato un file in formato FASTQ, che memorizza reads NGS e la qualità di ognuna delle loro basi, tenere solo i reads che hanno una percentuale almeno P di basi con qualità almeno Q, effettuarne il trimming e produrre in output in formato FASTQ solo i read per cui la porzione rimasta è lunga almeno L.

Il trimming di un read consiste nel trovare la più lunga sottostringa (o una delle più lunghe) le cui basi abbiano tutte una qualità pari ad almeno Q.


Parametri in input:

  • nome del file in formato FASTQ
  • soglia minima di qualità
  • percentuale minima (compresa tra 0 e 1) delle basi con qualità almeno Q
  • lunghezza minima dopo il trimming

Requisiti:

  • deve essere definita la funzione ascii_to_quality() che prenda come argomento un carattere ASCII e restituisca il corrispondente Phred Value.
  • deve essere definita la funzione get_quality_percentage() che prenda in input una stringa di qualità (cioé una stringa di caratteri ASCII che codificano Phred Values) e una soglia minima, e restituisca la percentuale di caratteri che codificano una qualità pari ad almeno la soglia minima.
  • deve essere definita la funzione get_trimming_interval() che prenda in input una stringa di qualità e una soglia minima, e restituisca il più lungo intervallo di posizioni (o uno dei più lunghi) contenente solo caratteri che codificano qualità almeno pari alla soglia minima.
  • deve essere definita la funzione get_trimmed_read() che prenda in input una soglia minima di qualità e la lista delle quattro stringhe di un read in formato FASTQ (header della sequenza del read, sequenza del read, header della stringa di qualità, stringa di qualità). La funzione deve effettuare il trimming, cioé deve trovare la più lunga sottostringa (o una delle più lunghe) del read le cui basi abbiano una qualità pari ad almeno la soglia minima, e restituire la lista delle quattro stringhe del formato FASTQ del read dopo avere effettuato il trimming. La funzione deve chiamare get_trimming_interval(). Ad esempio per una soglia minima di qualità pari a 58 e per il read seguente:

      @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
    

    il trimming produce:

      @HWUSI-EAS522:8:5:662:692#0/1
      TATGGAGGCCCAACTTCTT
      +HWUSI-EAS522:8:5:662:692#0/1,
      aaaa`aa`aa`]__`aa`_
    

    che in questo particolare caso corrisponde a tenere un prefisso del read.


Variabili di output:

  • output_list, lista dei reads di output in formato FASTQ. Ogni elemento della lista è una lista annidata contenente le quattro righe del formato FASTQ di un read.

Come ottenere il valore ASCII di un carattere

La funzione ord() restituisce il valore ASCII del carattere passato come argomento (oggetto di tipo str).


In [2]:
ord('A')


Out[2]:
65

Come ottenere l'indice di posizione di un determinato valore in una lista

Il metodo index() degli oggetti di tipo list restituisce l'indice di posizione del valore passato come argomento.


In [4]:
[1,2,3,4].index(3)


Out[4]:
2

In [ ]: