Exporter la page en format Open Document

Alignement des séquences PYO

"Nous voulons déterminer la meilleure méthode pour regrouper les séquences codantes d'une collection de génomes en gènes orthologues (possédant une histoire évolutive commune)."

Nous disposons de N=85959 séquences nucléotides et nous souhaitons calcul l'alignement local et global entre chaque séquences en utilisant les algorithmes de Needleman–Wunsch et de Smith-Waterman.

Le calcul dure environ 1h pour comparer chaque séquences :

Temps CPU = 85959/24 h (10 années)/ 360 coeurs = 10j

Pour minimiser le stockage des données, nous supposons que la comparaison de deux séquences et réflexive i.e align(s1,s2) = align(s2,s1), on stockera donc N*(N-1)/2 enregistrements pour chaque type d'alignement au lieu de N*N.

Pour faciliter le traitement des résultats, les données ont été enregistré dans une base de données relationnelle. Ce choix est important car il permet de réaliser plusieurs type de requêtes sur les résultats.

Schéma de la base de données

SéquencesScore Needle Score Water
  1. Les tables de score Needle te Water sont optimisés en lecture elles ont comme index s1,s2
  2. Chaque table contient 3 694 435 831 enregistrements !
  3. Les valeurs gaps et simil sont enregistrés en entier, pour le résultat final il suffit de diviser ces valeurs par 10

Information de connexion

Serveur mesologin2
user projetpeg
password *
databse genomesDB

On peut utiliser le logiciel workbench pour explorer la BDD.

Post-traitement

Un module python (_GrandChallenge)a été developpé pour faciliter l'accès aux résultats sans avoir des connaissances en SQL.

Le module est basé sur l'ORM sqlAlchemy et offre 4 type de requêtes :

  • Interroger la liste des squences : getSequenceById(id) ; getSequenceByName(name)
  • Obtenir le score de similarité de 2 séquences, Needle : Needle('seq2','seq1') ; Needle(id1, id2)

* Obtenir le score de similarité de 2 séquences, Water : Water('seq2','seq1') ; Needle(id1, id2)

  • Obtenir le score de similarité d'une séquence, Needle : NeedleAll('seq') ; NeedleAll(id)
  • * Obtenir le score de similarité d'une séquence, Needle : NeedleAll2('seq') ; NeedleAll2(id) where i>id

* Obtenir le score de similarité d'une séquence, Water : ''WaterAll('seq') ; WaterAll(id) * Faire des requêtes complexes : ex. obtenir tous les scores Needle avec une similarité > 80%

  • Le Résultat des fonctions ci-dessus est un tuple ou liste de tuples sous format : (simil,gaps)
  • Les valeurs sont à diviser par 10.

initialisation

$ module load python 
$ ipyhon

Chargement du module

In [1]: from _GrandChallenge import *

Une séquence par son id, si aucun paramètre n'est fourni, on obtient la liste de toutes les séquences

In [3]: getSequenceById(5)
Out[3]: (5, '106896550_pgene_6')

Une séquence par son nom, si aucun paramètre n'est fourni, on obtient la liste de toutes les séquences

In [4]: getSequenceByName('106896550_pgene_8')
Out[4]: (7, '106896550_pgene_8')

Score Needle en utilisant les id des séquences

In [6]: Needle(10,85)
Out[6]: (357, 458)

Score Needle en utilisant les noms des séquences

In [7]: Needle('106896550_pgene_8','106896550_pgene_100')
Out[7]: (793, 154)

Tous les scores Needle d'une séquence par son id ⇔ la somme de tous les Needle(i,j) avec id=i or id=j

In [7]: NeedleAll(100)
 
 (100, 85953, 151, 797),
 (100, 85954, 99, 861),
 (100, 85955, 163, 785),
 (100, 85956, 195, 739),
 (100, 85957, 305, 593),
 (100, 85958, 70, 914))

Tous les scores Needle d'une séquence par son id ⇔ la somme de tous les Needle(i,j) avec id=i

In [7]: NeedleAll2('100')
 
 
 (100, 85926, 353, 522),
 (100, 85927, 103, 852),
 (100, 85928, 267, 622),
 (100, 85929, 432, 404),
 (100, 85930, 342, 520),
 (100, 85931, 177, 753),
 (100, 85932, 403, 452),
 (100, 85933, 154, 786),

Les requêtes (NeedleAll2, NeedAll) peut durer quelques minutes.