Alignement des séquences PYO
Objectifs
"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)."
Calcul
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 :
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
.
Stockage des résultats
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
- Les tables de score Needle te Water sont optimisés en lecture elles ont comme index
s1,s2
- Chaque table contient 3 694 435 831 enregistrements !
- Les valeurs
gaps
etsimil
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.
Exemples
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.