CONVERSION D'ADN

cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 - 12 nov. 2004 à 19:38
tgmg Messages postés 6 Date d'inscription mardi 21 décembre 2010 Statut Membre Dernière intervention 20 avril 2012 - 17 déc. 2010 à 02:59
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/27527-conversion-d-adn

tgmg Messages postés 6 Date d'inscription mardi 21 décembre 2010 Statut Membre Dernière intervention 20 avril 2012
17 déc. 2010 à 02:59
bonjour,
grandvizir a t-il poffiner le code de traduction adn en acide aminé dont -il a mis un extrait en live? ou dreuteu l'a t-il fait? qu'en est-il?
tgmg Messages postés 6 Date d'inscription mardi 21 décembre 2010 Statut Membre Dernière intervention 20 avril 2012
17 déc. 2010 à 02:12
bonjour tout le monde,
ou en etes vous aujourd'hui avec les code source de traduction d'adn ou d'arn en acide aminé
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
17 nov. 2004 à 18:21
Il faut initialiser TRANS et fait plutôt un case au lieu de tous tes IF:
if res[j]='a' then ...
if res[j]='g' then ...
if res[j]='c' then ...
if res[j]='t' then ...

Ecrit plutôt:

case res[j] of:
'a': begin {ton code} end;
'c': begin {ton code} end;
'g': begin {ton code} end;
't': begin {ton code} end;
else {si les 4 chars précédents n'ont pas été trouvés};
end;

Il faut changer le CRLF par la valeur que je t'ai redonné. En effet, au lieu d'avoir 1 retour à la ligne, j'en ai deux. Mon cri d'horreur est confirmé par l'expérience.

Ca sert à rien de noter |acg| après traduction. C'est pire qu'avec seulement des tirets.
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
15 nov. 2004 à 21:20
Pour gérer la ProgressBar, ce n'est pas bien difficile. Il y a la propriété Min, Max et Position. Je prend toujours le soin de mettre Position à 0 avant de changer Max. En effet, si les changements de propriétés sont mal gérés, ça crée des erreurs. La TGauge est bien, la TProgressBar semble moins bien optimisée. Un jour j'ai eu des ralentissements monstres dans mes algos, alors que la TGauge ne faisait rien de cela.

Si c'est un problème d'affichage, fait plutôt Form1.Refresh. Bien que ProcessMessages le fasse aussi, elle permet également à l'utilisateur de faire autre chose en parallèle, ce qui pourrait influencer le déroulement de ton algo. Dans ces cas là, il faut gérer des conditions pas possibles et j'évite donc ProcessMsg lorsque ce n'est pas nécessaire.
Dreuteu Messages postés 44 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 28 février 2006
15 nov. 2004 à 20:49
Merci de tes conseils (et de tes encouragements)...

Peut être qu'au final ta méthode favorise plus les éventuelles modifications sur le code en fait, c'est même sur!)...

Pour le Appli.ProcessMessage, je l'ai lu sur le forum, comme étant uu moyen de faire venir la TProgressBar au maximum... Apparemment ca ne marche pas.

Je n'arrive pas a initialiser ProgressBar1.Max en une valeur correcte... Je vais essayer aute chose.
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
15 nov. 2004 à 20:46
Ouhlala... horreur !!!!
Le CRLF est #13#10 pas #10#13.
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
15 nov. 2004 à 20:44
Je me disais bien que la MAJ était étrange il y a qq heures. Mais maintenant, elle est effective...

Le code est devenu un ribosome à mémoire. Il stocke et travaille après. Pourquoi pas. Sinon Dreuteu est un professionnel de la ralonge:

if result[j]='aua' then Memo.Text:=Memo.Text+'';
if result[j]='aaa' then Memo.Text:=Memo.Text+'<lysine>';
if.... hum ?
if.... hum ?
if.... hum ?
if.... hum ?
if.... hum ?

Quand je disais qu'un tableau était plus simple à gérer, et surtout plus court... De plus, que se passerait-il si le Memo changeait son nom en MonMemo. Il faudrait modifier 50 lignes de code, avec interdiction de faire correction automatique avec "Remplacer". Il aurait donc fallu écrire:

var s : string;
begin
for ... do
begin
s:='Erreur'; //valeur par défaut, si pas de réponse dans les IF
if result[j]='ccc' then s:='';
if ...
if ...
if ...;
Memo.Text:=Memo.Text+s+#10#13;
end;
end;
Ca ne fait plus qu'une ligne à changer.

Application.ProcessMessages ne semble pas nécessaire. Il faut de plus essayer d'aligner les blocs de code, car les begin...end sont illisibles.

Des améliorations ont donc été portées... Mais il y a encore qq efforts à faire. Courage, c'est déjà pas mal !
Dreuteu Messages postés 44 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 28 février 2006
15 nov. 2004 à 19:25
j'menerve pas...

J'ai jamais eu l'intention de faire des prouesses techniques, juste un prog utilisable (et UTILE)... Ce qui est presque le cas...

Ne m'en veux pas de ne pas avoir choisi ta fonction, mais je voulais du tres simple, donc celle de kenavo me convennait...
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
15 nov. 2004 à 18:34
Il semble que ça merde pas mal pour une demi douzaine de lignes de code ...
Ok, t' enerve pas, c' estait pour rire!
Bon bem moi, de toute façon j' y connais rien .......

Mai comme tu parles des sous-chaines de Kenavo, je me permets de te dire que tu as une source sur ce site qui s' appelle chouchen (ok, elle est de moi, j' arrete la frime), et, qui aporte plusieurs amelioration au source de Kenavo. Je dis ça au cas où elle t' interesserait.
Aller courage
A+
Dreuteu Messages postés 44 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 28 février 2006
15 nov. 2004 à 15:45
Voila, mise a jour effectuée... J'attends vos remarques pour améliorer la chose pas belle que j'ai utilisé pour la traduction!
Dreuteu Messages postés 44 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 28 février 2006
14 nov. 2004 à 12:19
Exact, mes excuses pour les codons stop... UAA UAG UGA, ca fait 3 et non 5 ...

Pour commencer la traduction après AUG, ce n'est pas tellement un problème puisque le programme va traduite uniquement ce qu'on lui entre comme séquences... et pas le reste!
Globus56 Messages postés 7 Date d'inscription mercredi 10 novembre 2004 Statut Membre Dernière intervention 27 août 2007
14 nov. 2004 à 12:12
Commencer après le "AUG" peut servir à décoder une partie de gène si on ne s'intéresse pas au début ou à étudier des séquences dont on n'a justement pas le début (à voir dans les énoncés d'exos où on donne rarement un séquence en entier, ce serait top long).

Pour les 5 codons Stop, je pense que c'est une faute de frappe, je n'en connais que 3: UAA, UAG et TGA.
Dreuteu Messages postés 44 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 28 février 2006
13 nov. 2004 à 16:30
Je suis d'accord avec toi Globus, sur la metode de traduction un peu compliquée, je cherche encore quelque chose de plus 'élégant'...

J'ai un peu plus de mal te suivre quand tu parles de la ponctuation... OK pour la methionine initiale (AUG) et les 5 codons stop... Mais quel est l'interet de commencer la traduction après???

A l'extreme, il serait aussi interessant de la commencer avant ( au site promoteur par exemle, ou avant MET pour voir ou la coupure se fait...

Ce que je pensais faire, c'est arreter la traduction après le STOP (permet de voir l'appartion de mutations en comparant les longueurs de chaines).

Bon... bah j'ai encore du boulot moi...
Globus56 Messages postés 7 Date d'inscription mercredi 10 novembre 2004 Statut Membre Dernière intervention 27 août 2007
13 nov. 2004 à 01:57
La méthode de traduction de GrandVizir me semble un peu compliquée... mais à première lecture c'est tentant.

J'avais implémenté à peu près le même algorythme il y a une vingtaine d'années, mais c'était du Basic (même pas "visuel") pour une exercice quand j'étais étudiant. C'est sûr qu'en Delphi on fait un code plus propre!

Ne pas oublier que le code génétique comporte une "ponctuation" (codon de démarrage AUG et codons stop) qu'il peut être intéressant de respecter ou non (notamment pouvoir court-circuiter le codon de démarrage pour démarrer le décodage à l'endroit qu'on veut).

Penser aussi qu'on peut vouloir modifier le code (certaines petites bébêtes ont un code un peu différent de tout le monde), ça peut se faire en stockant AdnTbl dans un fichier qu'on peut modifier avec un éditeur de textes.

Bon courage!
Dreuteu Messages postés 44 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 28 février 2006
12 nov. 2004 à 20:40
merci!
je suis parti sur une autre méthode, mais je vais travailler les deux en // ...

PS: ne t'enerves pas, quand je disais que tu ralais, c'était ironique... Je suis conscient que ce prog n'est pas au max de ses capacités... mais sois conscient que j'y travaille.
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
12 nov. 2004 à 20:35
Déjà je ne rales pas. J'ai déjà fait un prog sur les ADN parce que j'en avais besoin. T'as qu'à voir mon site web. De plus, quand on poste un code source, il faut qu'il soit fini. C'est d'ailleurs dans ton intérêt. Sinon il y a des 4/10 qui tombent de je ne sais pas où, alors que s'il avait été terminé, il serait dejà à 8. Je n'ai pas encore voté.

Sinon la traduction en protéines est très facile. T'as qu'à faire (c'est pas parfait, car c'est en LIVE):

type TAdnStruct = record
ADN, Prot : string;
end;

const
AdnMax = LeNbDeCombines-1;
AdnTbl : array[0..AdnMax] of TAdnStruct = ( (ADN: 'uag'; Prot: 'stp'), (.....), ....);
//Tout en LowerCase, svp!

function SearchProt(_ADN:string):string;
var x : cardinal;
begin
_ADN:=LowerCase(_ADN);
SearchProt:='';
for x:=0 to AdnMax do
if AdnTbl[x].Adn=_ADN then
begin
SearchProt:=AdnTbl[x].Prot;
break;
end;
end;

Ensuite, tu fais une boucle avec les conseils déjà données et tu faits le remplacement des ADN en Protéines. Bien sûr, dans ce commentaire les String doivent être pensés comme des String[3]. Pas plus de 3 caractères dans les dvlpts, svp !

Il y a confusion ADN et ARN dans les noms de constante et de tableau, mais je suis sûr que tu va bien pouvoir déméler tout ça.

A la prochaine MAJ donc... :))
Dreuteu Messages postés 44 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 28 février 2006
12 nov. 2004 à 20:07
oui mais!

1) la fonction de kenavo détruit les séparateurs
2) je n'ai plus pensé a LowerCase quand j'ai fait le progamme, j'étais plus branché 'finir un truc exploitable' que 'finir un truc techniquement nickel', ce qui de toute facon n'est pas encore a ma portée
3) comme il est dit dans les explications, le porgramme va BIENTOT jouer le ribosome, ainsi que la DNApol, et probablement quelques EcoRI, BamHI, ...
Autant te le dire tout de suite, si j'ai mis une vérification de bases non appariées, c'est pour vérifier que la traduction soit possible....
4) tu rales parce que le prog ignore les caractères non reconnus! Je peux te dire que si mon programme de traduction avait fait ca au lycée, j'aurais pas ralé moi... Question de point de vue, je suppose.

De manière générale, la traduction en protéines (en fait non, en suite d'acides aminés... déterminer la structure protéïque a partir de la formule c'est pas la joie...) sera prévue d'ici peu... Je cherche encore un moyen propre de la coder, et j'en ai un qui me semble exploitable... @ voir, donc.

Ceci dit, un grand merci pour le LowerCase, il m'était sooti de la tête...
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
12 nov. 2004 à 19:38
Rien que le début: «Obligation de séparer chaque base par un '-' (séparateur de chaines). Les bases doivent êtres notées en minuscule.». Ca peut être meilleur...

Autant déjà mettre la chaine en minuscules dès le début:
MaChaine:=LowerCase(MaChaine);

Ce qui aurait été bien, c'est de faire la traduction des protéines... C'est bien plus intéressant. L'ADN vers ARN n'est après tout qu'une substitution des T par un U... Ici, on rajoute juste des crochets en plus. En plus si des lettres sont non reconnues, elles sont ignorées. :(

Pourquoi forcer les tirets ? Si on les laisse, le programme doit les éliminer avec une boucle FOR DOWNTO. Le prog se charge ensuite de jouer le ribosome (c'est ça? ou l'enzyme de j'sais pu quoi): il sélectionne la chaîne par groupe de 3 avec la fonction COPY. Copy(MaChaine,1,3) pour les 3 premiers caractères, Copy(MaChaine,4,3) pour les 3 suivants... etc

C'est déjà moins contraignant. Et de plus, pour voir si la chaine est bonne, il suffit alors juste de vérifier que Length(MaChaine) mod 3 = 0 (est-ce multiple de 3 ?). Avec des tirets, il y aurait de pb dans les intervalles. En effet dans "A-B-C", il y a 3 lettres mais 2 tirets. Alors pour vérifier le MOD par 3... aïe !