Bonjour à tous,
je me lance dans un petit projet qui porte sur la recherche de séquences d'ADN qui se répètent autour d'un gène identifié. Prenons tout de suite un petit exemple ça sera plus simple.
Supposons que j'ai le jeu de données suivant :
attcg ttttttt gcaata ccatg
attcg ttttttt ac tagggc
attcg ttttttt tacc
tacc ggcta ttttttt
gtaatcggta ggcta ttttttt
attcagc ggcta ttttttt
tacggacgccga ggcta ttttttt
tacaaagacagcg ggcta ttttttt
gacc at aggc gatt attca gattc catc ttttttt
gacc at aggc gatt attca gattc atgg ttttttt
accg at gg ca ttttttt
accg at agc ccc ttttttt at gcac agt
accg at gat aat ttttttt gaccctagacg
accg gg gat ttga ttagccga agg ttac ttttttt
accg gg gat ttga ttagccga agg acatg ttttttt
J'ai donc des lignes d'ADN composées de séquences (une séquence est une suite de lettres séparée d'une autre suite de lettres par un espace). La séquence ttttttt est mon gène d'intérêt. En regardant rapidement le jeu de données, on s'aperçoit que certains motifs de séquences se répètent autour de mon gène :
- Par exemple, sur les trois premières lignes, la séquence attcg précède immédiatement mon gène.
- Sur les deux dernières lignes, les séquences "accg gg gat ttga ttagccga agg" précèdent une séquence variable puis mon gène d'intérêt.
Mon but est donc de construire un programme en C qui repère ces motifs répétés autour d'un gène dans des milliers de lignes. L'output pour l'exemple donné précédemment serait quelque chose comme :
attcg ttttttt *
* ggcta ttttttt
gacc at aggc gatt attca gattc * ttttttt
accg at * ttttttt
accg gg gat ttga ttagccga agg * ttttttt
où les étoiles représentent les parties les plus variables des lignes, situées entre des séquences répétées et mon gène.
Bon pour y avoir un peu réfléchi déjà, c'est pas si facile que ça à programmer. Pour l'instant, ma seule idée est la façon brutale : je prends la première séquence de la 1ere ligne, je regarde si elle se trouve au même endroit dans d'autres lignes, puis je recherche le gène et je mets une étoile à la place de toutes les autres séquences de la ligne. Ca me donne mon premier output : attcg ttttttt *. Puis je refais la même chose mais en prenant les deux premières séquences de ma 1ere ligne cette fois-ci. Etc, etc...
Avant de commencer à coder tout ça, j'aurais aimé solliciter vos expériences pour savoir si vous ne voyez pas une façon plus maline de coder ça. Ou un algorithme qui existerait déjà et permettrait de faire plus ou moins cela, de la recherche de chaines de caractère répétées dans une liste de chaines de caractères.
J'aurais aussi aimé savoir si un autre langage que C pouvait être plus adapté pour faire ça (du travail sur des chaînes). Mes capacités de programmation sont néanmoins limitées à, outre C, Python et Matlab. Mais je peux apprendre si ça en vaut la peine . Et C sera toujours intéressant pour sa rapidité, vu que j'ai des milliers de lignes à traiter.
Merci d'avance de vos conseils, et n'hésitez pas à me demander des choses si je n'ai pas été clair !
PS : comme le post ne parle pas vraiment de C, vous pouvez le déplacer vers un forum plus approprié, mais je n'en ai pas vraiment vu en cherchant un peu.
Partager