8796 sujets

Développement web côté serveur, CMS

Bien le bonjour chers amis.

Je viens à vous pour implorer votre aide (lol). En effet, dans le cadre de mes études, j'ai une option informatique où je dois programmer un site avec du css de l'html et du php. (Mais je n'en connais vraiment que les rudiments, donc j'ai beaucoup de mal à comprendre toutes les infos que je trouve sur le net).

Alors je me décide enfin à exposer clairement mon problème, qui sait, quelqu'un pourra peut-être m'aider.

Je travaille sur l'adn, et je voudrais faire un "graphique" (à l'aide de Jpgraph) pour afficher le brin d'adn entré par l'utilisateur sous la forme d'un rectangle plein de couleur claire avec des rectangle de couleur foncée par dessus au niveau de chaque ORF (cadre de lecture sur un brin d'adn).
En fait, pour cela je pense pouvoir me débrouiller mais je vous explique ça pour que vous compreniez mieux mon vrai problème qui est le suivant :

J'ai ma séquence adn qui ressemble à ceci par exemple :

"AUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAUAUG
CAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAG
AUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUG
CACAGCAGCAUACCAGCAU"

et je dois réussir à trouver la position de tous les différents orf dans cette séquence grâce à un code php. (Un orf commençant par "AUG" et finissant par "UAG" mais qui peut avoir n'importe nombre ou type de lettre au milieu).

En comment faire pour que l'ordinateur donne "un nom de variable" à chaque orf qu'il trouve dans la séquence ?

(Je pense qu'il faut que j'utilise les regex mais j'y comprends rien Smiley decu ).
Modifié par Felipe (09 May 2010 - 07:48)
Le plus simple est d'utiliser des regex, comme tu l'as dit : elles te permettront de localiser ce que tu souhaites, et de placer les résultats dans un tableau (càd leur donner un nom de variable, comme tu le souhaites).
Tu dis qu'un orf commence par AUG et se termine par UAG. Or dans ton exemple je ne vois aucun UAG, est-ce normal ? Les orfs doivent-ils se suivrent ou peuvent-il s'imbriquer ? Et quand tu dis qu'il peut y avoir n'importe quelle lettre, et n'importe quel nombre de lettre entre ces deux délimiteurs, j'imagine que tu veux dire n'importe quelle lettre entre A, U, et G, et modulo 3 ?
Oui j'ai mis un exemple au pif, il n'y a pas forcément d'UAG dedans. Les orf peuvent s'imbriquer en effet et oui aussi pour les lettres A, U et G modulo 3. Smiley cligne Dsl pour mon manque de précisions.
Administrateur
Bonjour,

le fait que TU doives créer le code PHP fait partie de l'exercice ou bien tu peux reprendre des bibliothèques existantes ?
Il existe de nombreuses ressources de bioinfo avec des algorithmes ultraoptimisés pour chaque besoin, vu la longueur de certains calculs (ou le nombre de milliards de fois où on les lance).
Une regexp mal écrite peut être plus lente qu'une analyse séquentielle (automate, chaîne de Markov, ...).

Sinon en regexp :
- preg_match_all() http://fr2.php.net/manual/fr/function.preg-match-all.php
- expreg.com http://www.expreg.com/presentation.php
Euh Felipe... Tu me parles en chinois là. lol Non je ne pense pas que j'ai le droit aux bibliothèques je sais pas quoi lol.

En fait j'ai réfléchi à mon problème et il est bien plus complexe que prévu.
Il me faut trouver AUG dans ma chaîne mais il faut que la chaîne avant AUG soit un multiple de 3, et que la chaîne entre ATG et TAG soit multiple de 3 aussi. Exemple : AGG ATG ACG ATG ATT AGC TTC GTA TAG ACG GTA

HELP :'(
Mes cours de bio sur les protéines commencent à dater un peu mais... Tu es sûr qu'il est possible que des chaînes de protéine soient comprises les unes dans les autres ? Je vois mal comment une enzime va pouvoir découper proprement une chaîne d'acides aminés si elle coupe au premier codon AUG qu'elle rencontre (du coup ça couperait aussi la chaîne qui contenait celle coupée). Ca poserait problème, non ?

Pour ce qui est de tes multiples de 3, avec des expressions régulières c'est très simple à gérer.
Une regex est certainement la meilleurs solution mais pour ça il va falloir déterminer d'abord comment repérer la/les séquences à récupérer. En gros ce qui les définies.

Comment les séquences sont-elles séparées ?
La longueur des séquences est-elle définie ou varie-t-elle d'une séquence à une autre ?
42 est-elle la réponse ? Oups, sale geek Smiley lol
La longueur des séquences est aléatoire, les orf commencent par AUG et finissent par UAG. Les séquences se lisent 3 lettres par 3 lettres... Euh c'est tout je crois.
Si j'ai bien compris je dirais que quelque chose comme ça doit marcher :

preg_match_all("/AUG(.+)UAG/", $subject, $matches, PREG_SET_ORDER);

foreach($matches as $match) {
    echo $match[1] .'<br />';
}
Je n'ai pas pris la peine de tester, mais ce qui est sûr c'est que la regex pourrait être optimisée, et plus correcte en la modifiant ainsi :
/AUG([AGU]{3})+UAG/
... d'une part, parce que sinon elle ne gère pas le fait que les codons sont composés de 3 éléments, et utiliser le point là où l'alphabet n'est composé que de 3 caractères va lui faire consommer plus de ressources que nécessaire.