Contrôle Continu de LV348 [durée: 2h00 - tous les documents sont autorisés] Vous disposez dans votre répertoire du génome d’Eschericchia coli K12 au format genbank dans le fichier Esco.gbk et des séquences des CDS au format fasta dans le fichier Esco.cds. Vous disposez également du fichier fonctionsCC.py qui contient une fonction qui à partir du nom d’un fichier de séquences au format fasta vous retourne une liste de chaînes de caractères qui correspondent chacune à une séquence. Pour chaque exercice, vous devrez écrire sur la copie les commandes utilisées (ou le code Python), les résultats et les interprétations. Exercice 1 [Python conseillé] A partir du fichier Esco.cds, calculer le nombre de bases codantes dans le génome d’E. coli. Sachant que la longueur du génome d’E. coli est de 4639675 pb, combien de pourcents de ce génome sont codants ? Dans le fichier fonctionsCC.py, on dispose de la fonction readFastas et on ajoute la fonction lgCod qui à partir d’une liste de chaînes de caractères retourne la somme des longueurs des chaînes . def lgCod (seqs) : l=0 for i in seqs: l+=len(i) return l Puis, dans l’interpréteur python on lit les CDS. import fonctionsCC from fonctionsCC import * cds = readFastas("Esco.cds") cds est une liste de chaînes de caractères (string), chaque string correspond à la séquence d’un CDS. Il y avait un bug dans la fonction readFastas (on n’ajoutait pas le dernier CDS à la liste). On calcule la longueur totale en pairesde bases du génome recouvert par les séquences codantes en T.S.V.P. considérant que les CDS ne se chevauchent pas. lgcds = lgCod(cds) print lgcds 4088532 (sans bug) OU 4087845 (avec bug) ce qui correspond à un pourcentage codant pour le génome de 88,1%. Ce fort pourcentage de codant est associé à l’absence d’introns dans les génes bactériens ainsi qu’à des régions intergéniques courtes. Exercice 2 [AWK conseillé] 1) A partir du fichier Esco.gbk, extraire les lignes CDS et stocker dans un fichier tmp1 uniquement les informations correspondant à leur positions sur le génomes. (Attention de ne pas tenir compte des pseudogènes en éliminant les CDS décrits avec des "join"). Vous devez obtenir un fichier tmp1 contenant les lignes suivantes : 190..255 337..2799 2801..3733 3734..5020 5234..5530 complement(5683..6459) complement(6529..7959) 8238..9191 9306..9893 complement(9928..10494) ... On sélectionne les lignes de description de CDS qui commencent par 5 espaces suivis de CDS (on garde la deuxième colonne de ces lignes uniquement c’est-à-dire la partie description des coordonnées) et on fait un filtre négatif pour enlever les lignes qui contiennent join. awk '/^ CDS/ {print $2}' Esco.gbk | grep -v join > tmp1 2) A partir du fichier tmp1 récupérer ensuite dans un fichier tmp2 les coordonnées de début et de fin de chaque CDS. Vous devez obtenir un fichier tmp2 contenant les lignes suivantes : 190 255 337 2799 2801 3733 … awk -F '[.()]' '{if ( $0 ~ /^c/ ) {print $2, $4} else {print $1, $3}}' tmp1 > tmp2 3) A partir du fichier tmp2 calculer la longueur moyenne des CDS et afficher le résultat . . awk 'BEGIN {l=0; n=0} {l+=$2-$1+1; n+=1} END{l=l/n; print l}' tmp2 Le résultat donne une longueur moyenne de 950.353 paires de bases soit un peu moins de 1 Kb. Exercice 3 [Python conseillé] Certains acides-aminés peuvent être codés par plusieurs codons. Par exemple, la Proline peutêtre codée par CCT, CCA, CCC et CCG. Ces codons sont dits “synonymes”. On s'intéresse à l'usage de ces codons synonymes chez E. coli. 1) Ecrire une fonction python dans fonctionsCC.py (compteCodon) permettant de calculer le nombre total d'occurences de chacun des codons dans un ensemble de séquences passé en argument. Recopier le code de la fonction sur votre copie. def compteCodon(listSeq): codons={} for seq in listSeq: l=len(seq) for ii in range(0,l-2,3): co=seq[ii:ii+3] if codons.has_key(co): codons[co]=codons[co]+1 else: codons[co]=1 return codons 2) Ecrire un script python utilisant la fonction readFastas et compteCodon pour analyser et afficher dans le terminal le nombre total d'occurences de chacun des codons. Ecrire le code du script sur votre copie. On désire un affichage de la forme (l’ordre dans lequel les codons apparaissent n’a pas d’importance) : ACC 31903 ATG 37841 ACA 9596 AAA 45910 ATC 34311 .... #!/usr/bin/python from fonctionsCC import * allSeq=readFastas("Esco.cds") codons=compteCodon(allSeq) . for cc in codons.keys(): print cc, codons[cc] 3) On s'intéresse uniquement aux codons synonymes de la Proline. Peut-on dire que ces 4 codons sont utilisés de façon aléatoire (c’est-à-dire sont équiprobables)? Justifier. ./script.py | grep “^CC” (optionnel) CCT 9518 CCG 31657 CCC 7439 CCA 11488 Hypothèse: H0, utilisation alétoire des 4 codons synonymes. On fait un test de rejet de cet hypothèse à l’aide d’un chi-deux de conformité. Dans R, chisq.test(c(9518,31657,7439,11488), p=c(0.25,0.25,0.25,0.25)) Chi-squared test for given probabilities data: c(9518, 31657, 7439, 11488) X-squared = 25091.23, df = 3, p-value < 2.2e-16 La différence est très significative (p-value proche de 0), dons on rejette H0 avec un risque très faible de se tromper. L'utilisation des codons synonymes n'est pas aléatoire. Il y a des codons “préférés”. 4) Plusieurs hypothèses ont été proposées pour expliquer ce résultat. En vous basant sur certaines caractéristiques génomiques vues en TD, comment expliquer l'écart entre les codons CCC et CCG ? Faire un schéma si cela est nécessaire. Effet de la réplication/désamination: Les CDS ne sont pas également répartis entre les deux brins du chromosome bactérien. Ils se situent en excès sur le brin matrice des fragments d'Okasaki. le brin matrice des fragments d'Okasaki est particulièrement riche en guanines (relativement à sa richesse en cytosines). Une hypothèse est qu’il est plus sensible à la désamination hydrolytique (plus souvent simple brin) mais cette hypothèse à elle seule n’explique pas tout. la troisième position des codons de la Proline étant synonyme, elle est particuièrement sensible au biais mutationnels du brin sur lequel se situe le CDS donc plus de codons synonymes finissant en G. D’autres hypothèses pouvaient être avancées comme un effet transcription, un effet associé à la disponibilité des ARNt, … .