Esercizio 4

EMBL (http://www.ebi.ac.uk/cgi-bin/sva/sva.pl/) è una banca di sequenze nucleotidiche sviluppata da EMBL-EBI (European Bioinformatics Institute, European Molecular Biology Laboratory), in cui ogni sequenza nucleotidica viene memorizzata, con altre informazioni, in file di testo (entry EMBL) in un formato che prende il nome di formato EMBL.

Il formato EMBL è composto da record che iniziano con un codice a due lettere maisucole che specifica il contenuto del record. I soli record che non iniziano con il codice a due lettere sono quelli contenenti la sequenza nucleotidica.

Dato un file in formato EMBL, contenente la sequenza nucleotidica (sequenza di basi) di un mRNA (trascritto espresso da un gene), produrre:

  • la sequenza (nucleotidica) della CDS in formato FASTA
  • la distribuzione di frequenza dei codoni (stop codon escluso), elencati per frequenza decrescente
  • la distribuzione di frequenza degli amminoacidi della proteina, elencati per frequenza descrescente

Inoltre, preso in input un file contenente il codice genetico, effettuare la validazione della proteina contenuta nel file EMBL rispetto alla traduzione della sequenza della CDS tramite il codice genetico.


Parametri in input:

  • nome del file in formato EMBL
  • nome del file del codice genetico

Il file del codice genetico è strutturato in record di campi separati da ,, in cui il primo campo è il simbolo di un amminoacido e gli altri campi sono i codoni che codificano quell'amminoacido.

A,gct,gcc,gca,gcg
C,tgt,tgc
D,gat,gac
E,gaa,gag
F,ttt,ttc
G,ggt,ggc,gga,ggg
H,cat,cac
I,att,atc,ata
K,aaa,aag
L,tta,ttg,ctt,ctc,cta,ctg
M,atg
N,aat,aac
P,cct,ccc,cca,ccg
Q,caa,cag
R,cgt,cgc,cga,cgg,aga,agg
S,tct,tcc,tca,tcg,agt,agc
T,act,acc,aca,acg
V,gtt,gtc,gta,gtg
W,tgg
Y,tat,tac
s,tga,taa,tag


Dove trovare le informazioni che servono per risolvere l'esercizio:

  • Il record che inizia con ID

     ID   M10051; SV 1; linear; mRNA; STD; HUM; 4723 BP.

contiene l'identificatore univoco della sequenza (M10051) e l'organismo (HUM). Il fatto che il file si riferisca alla sequenza nucleotidica di un gene è indicato dalla presenza della parola mRNA.

  • Il record

     FT   CDS             139..4287

contiene lo start e l'end (1-based) della coding sequence (CDS) sulla sequenza nucleotidica.

  • L'insieme dei record che iniziano con FT sono quelli che contengono le features della sequenza nucleotidica. In particolare tutti i record della sezione:

     FT                   /translation="MGTGGRRGAAAAPLLVAVAALLLGAAGHLYPGEVCPGMDIRNNLT
     FT                   RLHELENCSVIEGHLQILLMFKTRPEDFRDLSFPKLIMITDYLLLFRVYGLESLKDLFP
     FT                   NLTVIRGSRLFFNYALVIFEMVHLKELGLYNLMNITRGSVRIEKNNELCYLATIDWSRI
     FT                   LDSVEDNHIVLNKDDNEECGDICPGTAKGKTNCPATVINGQFVERCWTHSHCQKVCPTI
     FT                   [...]
     FT                   DGGSSLGFKRSYEEHIPYTHMNGGKKNGRILTLPRSNPS"

contengono la sequenza della proteina espressa dal gene.

  • Il record che inizia con SQ:

      SQ   Sequence 4723 BP; 1068 A; 1298 C; 1311 G; 1046 T; 0 other;

introduce la sezione della sequenza nucleotidica che termina con il record // (file del file). Ogni record contenente la sequenza nucleotidica inizia con una serie di spazi iniziali, e contiene un chunk di sequenza lungo 60 basi. L'intero alla fine del record fornisce la lunghezza totale dei chunks fino a tale record. Ogni chunk in un record viene poi separato in chunks più piccoli di 10 basi.

SQ   Sequence 4723 BP; 1068 A; 1298 C; 1311 G; 1046 T; 0 other;
     ggggggctgc gcggccgggt cggtgcgcac acgagaagga cgcgcggccc ccagcgctct        60
     tgggggccgc ctcggagcat gacccccgcg ggccagcgcc gcgcgcctga tccgaggaga       120
     ccccgcgctc ccgcagccat gggcaccggg ggccggcggg gggcggcggc cgcgccgctg       180
     ctggtggcgg tggccgcgct gctactgggc gccgcgggcc acctgtaccc cggagaggtg       240
     tgtcccggca tggatatccg gaacaacctc actaggttgc atgagctgga gaattgctct       300
     gtcatcgaag gacacttgca gatactcttg atgttcaaaa cgaggcccga agatttccga       360
     gacctcagtt tccccaaact catcatgatc actgattact tgctgctctt ccgggtctat       420
     gggctcgaga gcctgaagga cctgttcccc aacctcacgg tcatccgggg atcacgactg       480
     [...]
     tttttcgttc cccccacccg cccccagcag atggaaagaa agcacctgtt tttacaaatt      4620
     cttttttttt tttttttttt tttttttttg ctggtgtctg agcttcagta taaaagacaa      4680
     aacttcctgt ttgtggaaca aaatttcgaa agaaaaaacc aaa                        4723
//

NOTA BENE:

  • l'alfabeto degli amminoacidi è {ACDEFGHIKLMNPQRSTVWY}
  • la sequenza nucleotidica riportata nell'entry EMBL è su alfabeto {a,c,g,t} nonostante rappresenti la sequenza primaria di un mRNA. Per ottenere la sequenza su alfabeto {a,c,g,u} basta operare una sostituzione di tutti i simboli t con simboli u.

Requisiti:

  • nell’header della sequenza della CDS in formato FASTA devono comparire l’identificatore univoco della sequenza, l’organismo a cui si riferisce e la lunghezza, nel seguente formato:

      >M10051-HUM; len=4149
  • le sequenze in formato FASTA devono essere prodotte in righe di 80 caratteri

  • non effettuare la sostituzione da t a u.

  • deve essere definita una funzione format_fasta() che prenda come argomenti un'intestazione FASTA, una sequenza nucleotidica/proteica, e restituisca la sequenza in formato FASTA con la sequenza separata in righe di 80 caratteri.

  • usare solo espressioni regolari per estrarre le informazioni (tranne per estrarre le informazioni dal file del codice genetico)


Variabili di output:

  • cds_sequence_fasta: sequenza nucleotidica in formato FASTA
  • codon_frequency: lista di tuple (codon, frequency) elencate per frequenza decrescente
  • ammino_frequency: lista di tuple (amminoacid, frequency) elencate per frequenza decrescente

Come leggere un file in input in un'unica stringa

Lo statement

with open(input_file_name, ’r’) as input_file:
    file_str = input_file.read()

permette di ottenere l'handle in lettura input_file al file input_file e di ottenere il suo contenuto nell'unica stringa file_str. Al termine l'handle viene chiuso e lo script può processare la stringa file_str.

Operazioni di searching in stringhe contenenti il simbolo \n

Invocando re.search() con un terzo argomento uguale al flag re.M

re.search(my_expr, my_string, re.M)

si forza a interpretare su più righe la stringa my_string.

Funzioni/Metodi suggeriti

  • Il metodo join() degli oggetti di tipo str restituisce la concatenazione degli elementi della lista passata come argomento usando la stringa invocante come separatore.

In [5]:
'+'.join(['aa','aa','aa'])


Out[5]:
'aa+aa+aa'