Esercizio 6

Dato un file in formato GTF (Gene Transfer Format) che annota un set di geni sulla stessa genomica di riferimento, e il file della genomica di riferimento (genomic reference) in formato FASTA, produrre in output:

  • per ognuno degli esoni annotati:
    • l'elenco dei trascritti che includono l'esone
    • l'elenco dei trascritti per cui l'esone è coperto completamente da coding sequence, specificando la suddivisione in codoni in relazione a ognuno dei trascritti elencati

Parametri in input:

  • nome del file in formato GTF
  • nome del file della genomic reference in formato FASTA

Requisiti:

  • deve essere definita una funzione reverse_complement_in_case() che prenda come argomento una sequenza nucleotidica e un valore di strand e ne restituisca il reverse&complement se lo strand è -, altrimenti restituisce la sequenza così com'è
  • deve essere definita una funzione codon_separating() che prenda come argomento una sequenza nucleotidica e il frame in {0, 1, 2}, operi la suddivisione in codoni (tenendo conto del valore di frame) e restituisca una stringa che unisca i codoni usando il carattere di spazio come separatore

NOTA BENE: gli attributi (coppie nome-valore) del nono campo del file GTF non devono essere pensati a ordine fisso all'interno del campo. Per estrarre quindi un attributo, non si può usare il metodo split(), ma si deve necessariamente usare un'espressione regolare.


Variabili di output:

  • (per il primo punto) exon_inclusion_dict: dizionario di inclusione degli esoni:
    • chiave: esone inteso come tupla (start, end)
    • valore: set dei trascritti che includono l'esone (ogni trascritto deve essere rappresentato della tupla (transcript_id, gene_id))
  • (per il secondo punto) exon_coverage_list: lista degli esoni coperti interamente da coding sequence con la relativa suddivisione in codoni; ogni elemento della lista è una tupla dei seguenti cinque elementi: transcript_id, gene_id, start dell'esone, end dell'esone, suddivisione in codoni (tenendo conto del valore di frame). NOTA BENE: uno stesso esone può comparire in elementi diversi della lista dal momento che può essere incluso in trascritti diversi.

Note sul formato GTF

Feature e record GTF

Una feature GTF è un intervallo di posizioni sulla genomic reference che ha un certo significato funzionale, ad esempio un esone (feature di tipo exon) o un frammento della coding sequence di un trascritto (feature di tipo CDS).

Un record GTF rappresenta una feature di un certo tipo inclusa in un determinato trascritto (di un determinato gene). Il tipo di feature è specificato nel terzo campo del record.

Ad esempio il record:

ENm006 VEGA_Known   exon    64566   64757   .   -   .   transcript_id "U52112.4-014"; gene_id "ARHGAP4";

rappresenta un esone (feature di tipo exon) che inizia in posizione 64566 e finisce in posizione 64757, incluso (cioé che compone) nel trascritto U52112.4-014 del gene ARHGAP4.

Invece il record:

ENm006 VEGA_Known CDS   70312   70440   .   -   0   transcript_id "U52112.4-005"; gene_id "ARHGAP4";

rappresenta un frammento della coding sequence (feature di tipo CDS) del trascritto U52112.4-005 del gene ARHGAP4, mappato sulla genomic reference dalla posizione 70312 alla posizione 70440.

Esone incluso in trascritti diversi

N record di tipo exon, che corrispondono alla stessa feature sulla genomic reference (stesso intervallo di posizioni) rappresentano lo stesso esone incluso in N trascritti diversi.

Ad esempio i record seguenti:

ENm006 VEGA_Known   exon    64566   64757   .   -   .   transcript_id "U52112.4-014"; gene_id "ARHGAP4";
ENm006 VEGA_Known   exon    64566   64757   .   -   .   transcript_id "U52112.4-002"; gene_id "ARHGAP4";
ENm006 VEGA_Known   exon    64566   64757   .   -   .   transcript_id "U52112.4-003"; gene_id "ARHGAP4";
ENm006 VEGA_Known   exon    64566   64757   .   -   .   transcript_id "U52112.4-001"; gene_id "ARHGAP4";
ENm006 VEGA_Known   exon    64566   64757   .   -   .   transcript_id "U52112.4-024"; gene_id "ARHGAP4";
ENm006 VEGA_Known   exon    64566   64757   .   -   .   transcript_id "U52112.4-011"; gene_id "ARHGAP4";

rappresentano l'esone [64566, 64757] incluso in sei trascritti diversi del gene ARHGAP4.

Esone coperto da coding sequence per un dato trascritto

Un esone incluso in un trascritto è coperto completamente da coding sequence se, oltre al record di tipo exon che rappresenta l'esone incluso nel trascritto, esiste anche un record di tipo CDS corrispondente allo stesso intervallo di posizioni, che rappresenta un frammento della coding sequence dello stesso trascritto.

Ad esempio i due record:

ENm006 VEGA_Known exon  70312   70440   .   -   .   transcript_id "U52112.4-005"; gene_id "ARHGAP4";
ENm006 VEGA_Known CDS   70312   70440   .   -   0   transcript_id "U52112.4-005"; gene_id "ARHGAP4";

indicano che l'esone [70312, 70440] (incluso nel trascritto U52112.4-005del gene ARHGAP4) è coperto completamente da coding sequence.

Suddivisione in codoni di una feature di tipo CDS di un dato trascritto

La suddivisione in codoni di una feature di tipo CDS di un determinato trascritto deve tenere conto del valore del campo frame (ottavo campo del record), che specifica la posizione della prima base della feature all'interno del codone di appartenenza.

Ad esempio il record di tipo CDS seguente:

ENm006 VEGA_Known CDS   70312   70440   .   -   0   transcript_id "U52112.4-005"; gene_id "ARHGAP4";

rappresenta un frammento della coding sequence del trascritto U52112.4-005 del gene ARHGAP4. Il valore 0 del campo frame indica che la prima base della sequenza della feature è la prima base di un codone (cioé le prime tre basi della feature sono un codone completo). Tenendo presente che la sequenza della feature estratta dalla genomic reference (tenendo conto dello strand -) è:

cggcaggccaagttcatggagcacaaactcaagtgcacaaaggcgcgcaacgagtacctgcttagcctggctagtgtcaacgctgctgtcagtaactactacctgcatgacgtcttggacctcatggac

la sua suddivisione in codoni sarà dunque:

cgg cag gcc aag ttc atg gag cac aaa ctc aag tgc aca aag gcg cgc aac gag tac ctg ctt agc ctg gct agt gtc aac gct gct gtc agt aac tac tac ctg cat gac gtc ttg gac ctc atg gac

Il record di tipo CDS seguente:

ENm006 VEGA_Known CDS   72521   72683   .   -   1   transcript_id "U52112.4-019"; gene_id "ARHGAP4";

rappresenta un frammento della coding sequence del trascritto U52112.4-019 del gene ARHGAP4. Il valore 1 del campo frame indica che la prima base della sequenza della feature è la seconda base di un codone (cioé le prime due basi della feature sono le ultime due basi di un codone la cui prima base sarà l'ultima di una feature CDS diversa). Tenendo presente che la sequenza della feature estratta dalla genomic reference (tenendo conto dello strand -) è:

gaaggagccgtccctcctgtcgcccttgcactgctgggcggtgctgctgcagcacacgcggcagcagagccgggagagcgcggccctgagtgaggtgctggccgggcccctggcccagcgcctgagtcacattgcagaggacgtggggcgcctggtcaagaag

la sua suddivisione in codoni sarà dunque:

ga agg agc cgt ccc tcc tgt cgc cct tgc act gct ggg cgg tgc tgc tgc agc aca cgc ggc agc aga gcc ggg aga gcg cgg ccc tga gtg agg tgc tgg ccg ggc ccc tgg ccc agc gcc tga gtc aca ttg cag agg acg tgg ggc gcc tgg tca aga ag

Il record di tipo CDS seguente:

ENm006 VEGA_Known CDS   72761   72965   .   -   2   transcript_id "U52112.4-003"; gene_id "ARHGAP4";

rappresenta un frammento della coding sequence del trascritto U52112.4-003 del gene ARHGAP4. Il valore 2 del campo frame indica che la prima base della sequenza della feature è la terza base di un codone (cioé la prima base della feature è l'ultima base di un codone le cui prime due basi saranno le ultime di una feature CDS diversa). Tenendo presente che la sequenza della feature estratta dalla genomic reference (tenendo conto dello strand -) è:

agatgcgctggcagctgagcgagcagctgcgctgcctggagctgcagggcgagctgcggcgggagttgctgcaggagctggcagagttcatgcggcgccgcgctgaggtggagctggaatactcccggggcctggaaaagctggccgagcgcttctccagccgtggaggccgcctggggagcagccgggagcaccaaagcttccg

la sua suddivisione in codoni sarà dunque:

a gat gcg ctg gca gct gag cga gca gct gcg ctg cct gga gct gca ggg cga gct gcg gcg gga gtt gct gca gga gct ggc aga gtt cat gcg gcg ccg cgc tga ggt gga gct gga ata ctc ccg ggg cct gga aaa gct ggc cga gcg ctt ctc cag ccg tgg agg ccg cct ggg gag cag ccg gga gca cca aag ctt ccg

In [ ]: