^^ Un peu de théorie, pour savoir de quoi on parle :distance d'édition
^^ Un peu de théorie, pour savoir de quoi on parle :distance d'édition
-- Jasmine --
oui, ça je savais
C'est le coté machine d'apprentissage des distances d'édition que je maitrise pas
En tous les cas, je viens de finir le script qui me permet d'obtenir les résultats que je voulais.
Faut encore que je commente le code, et si ça intéresse quelqu'un, je le posterais ici
Oui, c'est toujours sympa de poster ce qu'on a fait, ça peut toujours aider quelqu'un. De plus, les plus expérimentés en perl peuvent toujours nous donner leurs avis pour améliorer notre code.
Voici le mien :
sortie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #!/usr/bin/perl/ use strict; use warnings; my @pattern_sort = qw[ATCGCTGAT AGCACGTC AGTTCCCA GCGCTATC]; # motifs pos [start, end] my %pattern_list = ( ATCGCTGAT => [5,14], AGCACGTC => [22,30], AGTTCCCA => [53,61], GCGCTATC => [69,77], ); my $seq = 'cccccATCGCTGATccccccccAGCACGTCcggggggggatcgatgatagctcAGTTCCCAaaaaaaaaGCGCTATCgatgatagctcgtcttt'; my $l = length($seq); print $seq."\n"; my $i = 0; foreach my $pattern (@pattern_sort){ # nbr de tirets à écrire my $dash = $pattern_list{$pattern}->[0] - $i; # $i est mis à la position de fin du motif $i = $pattern_list{$pattern}->[1]; print '-'x$dash.$pattern; } my $dash_end = $l-$i; print '-'x$dash_end."\n";
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cccccATCGCTGATccccccccAGCACGTCcggggggggatcgatgatagctcAGTTCCCAaaaaaaaaGCGCTATCgatgatagctcgtcttt -----ATCGCTGAT--------AGCACGTC-----------------------AGTTCCCA--------GCGCTATC-----------------
-- Jasmine --
ouahou !! ça c'est du code concis!
Je viens de finir de commenter mon code.
Le voici :
Il est beaucoup moins concis, et sans doute optimisable. Donc tout commentaire sera le bienvenue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194 #!/usr/bin/perl/ use strict; use warnings; use Bio::SeqIO; # Liste des fichiers contenant les promoteurs des jeux tests au format fasta. my @liste_file = ("../resultats/jeu_test_c-jun_human.fa", "../resultats/jeu_test_c-jun_mouse.fa", "../resultats/jeu_test_sp1_human.fa", "../resultats/jeu_test_sp1_mouse.fa"); # Expressions regulieres correspondant aux differents logo de l'article Sinha. my $rx_sp1_att = "[GAT][GA]G[GT][CAT][GTC][GC][GAC]"; my $rx_sp1_find = "[GA]GG[ACT][GT]GG"; my $rx_c_jun_att = "TGA[CGA][TGC][CTA][AC]"; my $rx_c_jun_find = "[GTA][GA][TGC]GAC[GTA]"; print "\nRecherche des motifs et de leurs positions respectives dans les fichiers :\n"; foreach my $file (@liste_file) { print "\t$file...\n"; my ($FT, $esp) = ($file =~ m/jeu_test_(.+)_(human|mouse)\.fa/); my $file_res = "../resultats/infos_motifs_positions_$FT"."_$esp.txt"; open(RES, '>', $file_res) or die("Impossible d'ouvrir $file_res\n"); # On utilise le module Bio::SeqIO pour extraire les infos relatives a chaque fichier fasta. my $seqio = Bio::SeqIO->new( '-format' => 'fasta' , -file => $file, -alphabet => 'dna'); # Pour chaque sequence, on recherche les motifs correspondant au FT du fichier (sp1 ou c-jun). while(my $seqobj = $seqio->next_seq()) { my $seq = $seqobj->seq(); my $name = $seqobj->display_name(); print(RES "\n>$name\n$seq\n"); if($FT eq "c-jun") { &rech_motif($rx_c_jun_att, $rx_c_jun_find, $seq); print(RES "\n############################################################################################\n"); } elsif($FT eq "sp1") { &rech_motif($rx_sp1_att, $rx_sp1_find, $seq); print(RES "\n############################################################################################\n"); } } close(RES); } print "\nMise en forme des résultats a partir des fichiers :\n"; my @liste_file2 = ("../resultats/infos_motifs_positions_sp1_human.txt", "../resultats/infos_motifs_positions_sp1_mouse.txt", "../resultats/infos_motifs_positions_c-jun_human.txt", "../resultats/infos_motifs_positions_c-jun_mouse.txt"); foreach my $file (@liste_file2) { print "\t$file\n"; #Recuperation des infos concernant le fichier qu'on va analyser. my ($FT, $esp) = ($file =~ m/infos_motifs_positions_(.+)_(human|mouse)\.txt/); # Ouverture des fichiers my $file_res = "../resultats/jeu_test_$FT"."_$esp"."_annote.txt"; open(RES, '>', $file_res) or die("Impossible d'ouvrir $file_res\n"); open(MOTIF, '<', $file) or die("Impossible d'ouvrir $file\n"); # Declaration et Initialisation des variables my ($seq, $motifs_att, $motifs_PhyME, $motif) = ("", "", "", ""); my ($rech1, $rech2, $init) = (0,0); my ($pos, $old_pos, $taille); #parcourt du fichier contenant sequences, motifs et positions while(my $line = <MOTIF>) { # Dans le cas d'une ligne de titre, on l'imprime directement dans le fichier de resultats. if($line =~ m/>.+/) { print(RES $line); } elsif($line =~ m/^[ACTG]+/) # Si la ligne correspond a la sequence du promoteur, on la stocke dans une variable { $seq = $line; } elsif($line =~ m/connu/) # sachant qu'on imprimera les motifs connu au-dessus de la sequence, et les motifs de PhyME au-dessous de la sequence { # on utilise les variables $rech1 et $rech2 pour definir dans quelle variable ($motifs_att ou $motifs_PhyME) seront copies les motifs trouves ensuite $rech1 = 1; $rech2 = 0; $init = 1; } elsif($line =~ m/PhyME/) { $rech1 = 0; $rech2 = 1; $init = 1; } elsif($line =~ m/\t([ACGT]+)\t(\d+)/ && $rech1 == 1) { # Quand on arrive a une ligne de motifs, # on recupere le motif, sa taille et sa position dans les variables correspondantes $motif = $1; $pos = $2; $taille = length($motif); # Si c'est le premier motif qu'on trouve if($init == 1) { $init = 0; # Le nombre de tirets a mettre avant le motif correspond a la position du motif # En effet, les positions sont numerotees a partir de 0. $motifs_att = "-" x $pos; $motifs_att .= $motif; # On stocke la position courante dans la variable $old_pos pour les calculs du nombre de tiret qu'on fera pour les motifs suivant $old_pos = $pos; } else { # si le motif rencontre n'est pas le premier, # Le nombre de tirets a mettre entre le dernier motif et le motif courant # correspond a la position courante a laquelle on soustrait la somme de la position precedente et de la taille du motif # En cas de doute, faites un dessin ;-) my $nb_blanc = $pos - ($old_pos + $taille); $motifs_att .= "-" x $nb_blanc; $motifs_att .= $motif; $old_pos = $pos; } } elsif($line =~ m/\t([ACGT]+)\t(\d+)/ && $rech2 == 1) { # On fait exactement la meme chose que ci-dessus pour les motifs de PhyME en remplissant la variable $motifs_PhyME au lieu de $motifs_att $motif = $1; $pos = $2; $taille = length($motif); if($init == 1) { $init = 0; $motifs_PhyME = "-" x $pos; $motifs_PhyME .= $motif; $old_pos = $pos; } else { my $nb_blanc = $pos - ($old_pos + $taille); $motifs_PhyME .= "-" x $nb_blanc; $motifs_PhyME .= $motif; $old_pos = $pos; } } elsif($line =~ m/#+/) { # Quand on arrive a une ligne de #, ca signifie qu'on a vu tous les motifs pour la sequence en court # avant de passer a la sequence suivante, on imprime les resultats dans le fichier my $row1 = "Motifs 'connus'"; my $row2 = "Promoteur"; my $row3 = "Motifs PhyME"; printf(RES "%-16s\t$motifs_att\n", $row1); printf(RES "%-16s\t$seq", $row2); printf(RES "%-16s\t$motifs_PhyME\n\n", $row3); # et on reinitialise toutes les variables ($init, $rech1, $rech2, $motifs_att, $motifs_PhyME) = (0,0,0,"",""); } } close(RES); close(MOTIF); } # Fonction qui permet de chercher les motifs passes en argument dans la sequence passe en argument, # et d'imprimer les resultats dans le fichier de resultat ouvert. sub rech_motif { my ($motifs_att, $motif_find, $seq) = @_; print(RES "\nRecherche du motif 'connu' :\n"); while ($seq =~ m/($motifs_att)/gi) { print(RES "\t$1\t$-[1]\n"); } print(RES "\nRecherche du motif trouve par PhyME :\n"); while ($seq =~ m/($motif_find)/gi) { print(RES "\t$1\t$-[1]\n"); } }
Bon, je ne l'ai pas modifié pour qu'il soit testable (j'ai laissé mes noms de fichiers, etc)
Mais voici un bout de fichier sur lequel on peut le tester :
Encore merci pour tout Jasmine. J'adore venir ici, j'apprends toujours pleins de trucs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 >Fasl AAAAACTGGAAAGGTAGGTAGCATTATACAAAGCAGAGATCAAAGCAGCAGCTAGGATGCTCCTTCTGCAACTGCCAGTGGCGATGAGGGACTGAGCTGCTAAACGAGCATCCTGGAGGTACCTAGAGAAGTTGAACGAGTAGCCTCATGTTTATAAATACACAAACTCAAACTTGGAGTGTTCTACGGTCTTTACTCACATTTGAGAAATTCTTGTCTGGTCTGTCTGTTTGGCAGATTGCTTCAGGGGGCTTCCCTAGGCTTGTTAAGGTTAAATACCAGGTTCCCTGGCTATGTATCACCCTCTGTTGCTCCTGAGTCACCTCTGGAGCTCTGGCCTGTAGTCAACTTTAAGGCTGATTCCGTGGAATCATGAGAGTAGGAGGCTGAAAGGACTGAGTTTGAGGTTCTAGGATGTGGGGGCCATCAGCCTGTTGGCTCTTGCATCCATTTTTCCTTCAGCAGCTACAGAGCTAAGTTCTACTTTGAATGGTGATTTCTTTTCATTAATAAGGTTCTGGTACCAATGTGATGGGTCCTTGAGACTGTTCACGGGGGTGTTTATTCTTTCTCAATCTTGCCAATAATAGTACCATTTCTGCTGAATGGCACTACCAAACTCCAACCCAGTTTCTAGAAGTTTCTCTCTCGTCTCTTTCAGCTAGAACTCTTTCCCTGTGATTGGTGGACAGTAGGGTGTTGATATTTTGAATCCTCTATGAAAAAAAATTAATCAAAAGAAGGACAAAGAGATGTGGACAGACAGAATGACAATTACTAAAGAATCCTGGGAGTTGAGATATAAAAATCACAAAAGACTCATCTGGTACAGGGAGAGCAGCCATGGGACTAGGGAAGGAGGGGAAGATAAGAAATGTGTCACAGGTGAGAAAAAGCAGGCCTGGATGATCAGGGTGGGGCGGGGAGGGTGCGGGGGGAAGGGCTGGGGGCAAAAGGAAGGAACAGCCTGAGATTGCCAGCAGAGTGACCTCAGGAGAATTAGCAGCTGGGGTGGGGCAGGATGAAGGCAGCAGAAAAATAACACTTTGGGAGTTGTTTTGGCATAGGTGAGAGGGGTAGGGTGCTCATCCCAGAAATCCCAAAGCATGAGATAAAAAAAATAAAACCACTTAAAATGTAGAGTCTGCCAAAAAGGTGGAATATAGGAACTTATTGGGATTTATATGGTTTATATGGGAAAGTAATGGGAACCGAGACTGAGTTCTTAGAGGTTATTAGACATAAATGGTGTGTGTGTGTGTGTGTGTGTGGCCAGAAGACTTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGGCCAGAAGACTTGTGTGTGTGTGTGTGTGTGTGTGGCCAGAAGACTGAAGTCAAACCTAAGGCAGAGTGGTCGGTTTTATAAAGGCATAAGATATATACTTAAATTTGTTGTAAATGTTGAATAATGTTTTAGTATGTGCTGTGTGATGGTTAAGGCACACTTGCTATAAAAATGCTATTTATTGCTTATCTCAAACTCTTCTGAATTAGGCACCTCAGTTTTCATCTGGTGACCAGAAGAGAGATTGCAAAGTTAAATGATTACAGAGGAGGAAGGCTACATTTCCCAGGGGAAGTGGGATGGATAGGGGGCAGGCACAGTGGGGGGTTAGGGCAGCCTTGAACACCTGGCACACATTCCTGGTTGCAGCTGGCTGATGTTCAGGGAAGGGACTTCAACAGAGGATTCAACTCCCTATGCTCAGATGTGGAGATATCTTCTCTAGCCGAACTCCTTGGTCTTTTCCCCATGCCTCAGCACCAACAGGCCTCTCAGGACACACCCCAGAGCTGCGGAAGAGCTAATGTCCTCAAGGGGTATCCAGCGCTGACTTGCTGAGTTGGACCTCAGGCAGGCAAGCCTGGTTTACCAGCCTTCTCAGTTAGCACAGAGACGCCAATTGGAACTTCGAAGACTTGTCGTCAGAAATTTCTGGGCGGAAACTTCCTGGGGTTGCTGTGAGCTTTTT >Il10 AATATGATGTATCATTATATTGATATAAATTATGTGCTATAATTAAGTACATGCTAATATATTAATGTTTTATGTTAACATATTATGAAATAGTTTTATGTACATGTGTAAAAGGATATTCTAGACAAAAAAAAATAATTACGGGAAGATATAAGAGGTGCTGCTTCTCCTGCTGAGTTCTGTGCTCACCCCTCTGCTTCTCCTGGTGTTTCATCTCCTACCTCTGGATCAAGCTCATAGAACTGTCCAGTGCCAGTCCCAAGGACAGCTGGTACCTTCTATAGGCCAGATTCAGTTCTGGGGGGGGGGGGGTCAGACACACAAAGCTAAACACAATATGTTCAGGGACCTTGTAGCTGCTCAGAAATAAAAAAAAAAACATGCAGGAAGGCAGCAAAGGGGATTGTGGCTATCACCGTGCAGTAAGTACAGGTCACAGTCAGGAGAGAGGGCAGTGAGGGTCCATGCTAGCTGGGTCTTGAGCCTCTTCTGGGGTTCAGATCTCTGATCTACAGCAGTGTGTCCACACCTAAAACATCAGCTCAGAGAGGCAGTTGCTTCTGCTGTTGGAAACGGACATCCCAAAAAAAAACAAAAAACAGAAATCAAAAGGGAAGGAGAAAGTGAAAGGGATGGAGGCAGCTTGTCCCCTTCCCTGTGCTTGCTGCTGGTAGAAAACTCAGCCTGGAACTGACCGGAGCAGCAGTTCTTGAGTCAATTCCATTCCAACTTCTAGAAGATTCTTTTCCCGTCGAAGAGTGTCAGGAGGAGAGGCCAGACCCCCTTGATCCTGATCTGCCAGCCACTGCATCAGATAAGACGAGATAACCCCGAGTTCCTGTTCTACCAGCCCTGGTGTGGTAACCCTCTCCAATGGGGCAGGCTTGGAACCCTGTGCCAACGAAGATCCTCCCCCGTACTGATGCAGGAAGGACAGCCCGGGAGTGTACCCTCTACATGGGTCTACTTTTATTTAAGCAAACATTCCCTGGTCAACAGGACGTGTAGCATTGCCCCCCCCCCTTGGGTCACACAGAAAACAGGTACCAGGAGGACAAGTAGTTGCTTGCCCAGGGTACAGAATGAAAGGCAATAGGGGACTCTAGGCGAATGTTCTTCCCACCCAAACTGAGGTAGTAGGAGAAGTCCCTACTGAAGGGAAGGTCCAGACATAATCAAAGGACTACCAGAGATCTCCCAGGTATCTGTAGAAGTACTAACATCTCCATCCTTCAACAGCTACAGGTTACACGTCTCCAAGGCTGGGACATTGTAAAACAGGGCCATGGTAAGGTCTACCCGACAGCACAGAGCAAGCCTCCCAGAAGTCTGAGTTCCTTCTCCTAACTTCTCATGCTGGGATCTGAGCTTCTTCGTGAAACACGGGGCAGAGGAGGCACCAGAACTCTCCTCTGACCAACTGCCCCACAGCACACATATCCTCAAAGGATAGTCTTGAATACGTGATGGAAGAATTAAAGAGAGTGAGGTCTGAAGAAAATCAGCCCTCTCGGGGTTTCCTTTGGGTAACTGAGTGCTAAGGTGACTTCCGAGTCAGCAAGAAATATCGGACGTTCAACCCAGGTTGAGTGGAGGAAACAATTATTTCTCAATCCTAATATGTTCTGGAATAGCCCATTTATCCACGTCATTATGACCTGGGAGTGCGTGAATGGAATCCACAGATGAGGGCCTCTGTACATAGAACAGCTGTCTGCCTCAGGAAATACAACTTTTAGTATTGAGAAGCTAAAAAGAAAAAAAAATTAAAAGAGAGGTAGCCCATACTAAAAATAGCTGTAATGCAGAAGTTCATTCCGACCAGTTCTTTAGCGCTTACAATGCAAAAAAAAGGGAAAGGAAAAAAAAAAAGAAAGAAATTAAACTCAAAAATTGCATGGTTTAGAAGAGGGAGGAGGAGCCTGAATAACAAAAACCTTTGCCAGGAAGGCCCCACTGAGCCTTCAGTATAAAAGGGGGACCAAGAACAGGAGGTCTACA >NQO1 AACAGGCGAGCTGACTCTGTGACTCTTCTGTTTCCAGTGACTATGGCAGTGTCACTTCTGCCAATCCAAGAGCTGAGAGTGTCATCAGATAGCATCTTGGACCATAAACCCCACCCCCCCATCTCGATGTACCCACCTCTCCAGTGTACCCACCTCTCCAGGGTTCCCACCAACGTACTTTAAAGTCGCCTTAACTTATTACTTTGTTCTGTAAATTGTAAAAATCTTGTGAGGCTGCACCCACATTGGAACATAAAATTTGGGGTACCCTATATTGGTGTTCCCAGGCCGTGGCCACTCAAAATGGCTCCGGAATAAACTGTGGTTTTTATGTTGGTATTTCTTTACAGCTGAGAGATGACCCTCAGGCACAAACTGTAAGGAAACACCAGAAAACCCAATGTTGAACATTGTAGTGTGGTGTGTTTGGTATTTGTCTGATGCTGAGACAGAAGCAGCCTGTGGAAACTACTTTAGCACGTTGTTTGAGAGGAGAGTCTGACATCGCAGACGAAGCTGCCTGGTCACACAGCATCCAGTGAGAAAGCAGATAGCCTTTCCTGATGAAGCTATATCCCCAGCTCCTATTTTTGATTTTTGAAATGAGGTCTCACGTATCTTCAACTGTAGTAGTTAAGCAAGGCCAAGCCTTCAAGGGTCAAGGGTCCCTGTGTTAAGAAACCTTCAGGGTATCCTTTTATTTCCAGATAAAGCTTTGTGGTGCAAACTGGGCATGTGCAGGAATGTACCCTCCCCAAAGTACCTCCCCCATAGGAACAAGAATCTGCCTCCCTAATAAGTTCTCACCTTTTCTTTGTTTGGGAAGTGCGTTGCTTTAAAAATTGTCCTTGGTCTCTTTGCCTGCTGCAGCTGATATTTCTTTCTTCCCTCTTATAGCCCATTGTGTTACTTCGGCTTTGCCCTAACCGGAATGAGACTCCACTGAGATCCATCACAAGGGCTGTCACTAGCCTGTCACCACAGGAGACTGCACGTGTGTCTTTCCCTCACTGTCAGAATTTATCAGATAACAGGAAAGTTGAGCTCTTTTAATGATGGCAATCTGTTATAATGTCTACCCTACTTTGGGAGCTTGACCAAGGCACACACATACATGTAGGGTCTTTATTCCAACCCTTTTTCTTTCTTTCTCTGTTTTTGAGACAGGGTCTCACCTATGTAGCCCTGGCTGTTGTTCTAGCACTAGCTATGTGGACCAGTCTGGCCTTAAACTCAGAGATCTGCCTGCTTCTGGCACCCAAGTGATGGGATTAAAAGCATGTACTAGTCGTGGTGGCGCACTCCTTTAATCCCAGCACTTGGGAGGCAGAGGCAGGTGGATTTCTGAGTTCGAGGCCAGCCTGGTCTACAGAGTGAGTTCCAGGACAGCCAGGGCTACACAGAGAAACACTTCCCTGTGGCTGCTGTCTCCTGCCAGCTTTGCTCTGGCTTCCTAGAGAGTCGCACAGATGAGTTCCCCGTTACCTGGTCACCGGGGGCAAAGTTGAGGAGACCCAAGTGTGTATACCCAGGGAGCAGTTTTTGCAGTTTCTAAGAGCAGAACGCAGCACGAATTCATTTCACACGAGGACAAGTCTCTCTGAACTTTCAGTCTAGAGTCACAGTGAGTCGGCAAAATTTGAGCCCATCCGTTTTGCTGCCCCACCCTTCCCCTAGCGTGCAAAGGTGACTTCCCACGGCTGAGTGAGGACTAATCTACACAGGCTGATTATGTAGGCAGGTCCCACGAAGCTCGAAAAATTCTGTTGGAAATTTCCATTTTGTACCCAGGAGGTCTTGGGACAGGGAGCAGATGAATTTATTCAATATGTCCCCATATCCTCAAATTCTCTCTCACTCCCTTGCTCCCGGGGAACCCTTTTGACTTCCATATACAGGAGTCCTAGTCCAGCCCCAAACTGCTTCTCCCTGCCAAAAACTTGGTATCTTCCCAAGATGCCTCTGGGTTCTGGAGTCCAGCCCCGCCCTCGCTGGCTGCTC
Pour ouvrir un fichier, il vaut mieux utiliser
Tu devrais passer le filehandle à ton sous-programme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 open my $res, '>', $file_res or die $!; ... close $res;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 sub rech_motif { my ($motifs_att, $motif_find, $seq, $res) = @_; print($res "\nRecherche du motif 'connu' :\n"); while ($seq =~ m/($motifs_att)/gi) { print($res "\t$1\t$-[1]\n"); } print($res "\nRecherche du motif trouve par PhyME :\n"); while ($seq =~ m/($motif_find)/gi) { print($res "\t$1\t$-[1]\n"); } }$rech1 suffit, inutile d'utiliser $rech2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 elsif($line =~ m/connu/) # sachant qu'on imprimera les motifs connu au-dessus de la sequence, et les motifs de PhyME au-dessous de la sequence { # on utilise les variables $rech1 et $rech2 pour definir dans quelle variable ($motifs_att ou $motifs_PhyME) seront copies les motifs trouves ensuite $rech1 = 1; $init = 1; } elsif($line =~ m/PhyME/) { $rech1 = 0; $init = 1; ... elsif($line =~ m/\t([ACGT]+)\t(\d+)/ && $rech1 == 1) {... elsif($line =~ m/\t([ACGT]+)\t(\d+)/ && $rech1 == 0) {...
Pourquoi faire 2 elsif différents dans lesquels seuls les noms des variables changent? Pourquoi ne pas créer un seul sous-programme?
Pour ce qui est de devoir utiliser un fichier intermédiaire stockant les résultats, qu'on doit écrire, ouvrir et lire pour les récupérer, ce serait plus optimal de stocker ces données dans 2 tableaux, quitte à les écrire également dans un fichier afin d'en garder la trace écrite.
-- Jasmine --
Voici le genre de code auquel je pense :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 if($FT eq "c-jun"){ &rech_motif($rx_c_jun_att, $rx_c_jun_find, $seq, $res, \@res_connu, \@res_PhyME); # parcours des 2 tableaux et écriture directement dans le # fichier final sans passer par un fichier intermédiaire foreach my $pos (0...$#res_connu){ if(defined $res_connu[$pos]){ # print "$pos\t$res_connu[$pos]\n"; # calculs des tirets à placer entre les motifs } } foreach my $pos (0...$#res_PhyME){ if(defined $res_PhyME[$pos]){ print "$pos\t$res_PhyME[$pos]\n"; } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 # Fonction qui permet de chercher les motifs passes en argument dans la sequence passe en argument, # et d'imprimer les resultats dans le fichier de resultat ouvert. sub rech_motif { my ($motifs_att, $motif_find, $seq, $res, $res_connu_ref, $res_PhyME_ref) = @_; print($res "\nRecherche du motif 'connu' :\n"); while ($seq =~ m/($motifs_att)/gi) { # on garde les positions et les motifs dans un array # au lieu de les stocker dans le fichier intermédiaire $res_connu_ref->[$-[1]] = $1; # écriture accessoire dans le fichier intermédiaire # pour garder les valeurs des postions écrites print($res "\t$1\t$-[1]\n"); } print($res "\nRecherche du motif trouve par PhyME :\n"); while ($seq =~ m/($motif_find)/gi) { $res_PhyME_ref->[$-[1]] = $1; print($res "\t$1\t$-[1]\n"); } }
-- Jasmine --
j'ai pas le temps de me repencher sur ce script pour l'instant, mais promis, je vais étudier en détail tes propositions dès que j'aurais un moment
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager