IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bioinformatique Perl Discussion :

récupérer les positions d'un motif dans un promoteur


Sujet :

Bioinformatique Perl

  1. #21
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    ^^ Un peu de théorie, pour savoir de quoi on parle :distance d'édition
    -- Jasmine --

  2. #22
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    ^^ Un peu de théorie, pour savoir de quoi on parle :distance d'édition
    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

  3. #23
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    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 :
    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";
    sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cccccATCGCTGATccccccccAGCACGTCcggggggggatcgatgatagctcAGTTCCCAaaaaaaaaGCGCTATCgatgatagctcgtcttt
    -----ATCGCTGAT--------AGCACGTC-----------------------AGTTCCCA--------GCGCTATC-----------------
    -- Jasmine --

  4. #24
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    ouahou !! ça c'est du code concis!

    Je viens de finir de commenter mon code.
    Le voici :
    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");
    	}
    }
    Il est beaucoup moins concis, et sans doute optimisable. Donc tout commentaire sera le bienvenue
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >Fasl
    AAAAACTGGAAAGGTAGGTAGCATTATACAAAGCAGAGATCAAAGCAGCAGCTAGGATGCTCCTTCTGCAACTGCCAGTGGCGATGAGGGACTGAGCTGCTAAACGAGCATCCTGGAGGTACCTAGAGAAGTTGAACGAGTAGCCTCATGTTTATAAATACACAAACTCAAACTTGGAGTGTTCTACGGTCTTTACTCACATTTGAGAAATTCTTGTCTGGTCTGTCTGTTTGGCAGATTGCTTCAGGGGGCTTCCCTAGGCTTGTTAAGGTTAAATACCAGGTTCCCTGGCTATGTATCACCCTCTGTTGCTCCTGAGTCACCTCTGGAGCTCTGGCCTGTAGTCAACTTTAAGGCTGATTCCGTGGAATCATGAGAGTAGGAGGCTGAAAGGACTGAGTTTGAGGTTCTAGGATGTGGGGGCCATCAGCCTGTTGGCTCTTGCATCCATTTTTCCTTCAGCAGCTACAGAGCTAAGTTCTACTTTGAATGGTGATTTCTTTTCATTAATAAGGTTCTGGTACCAATGTGATGGGTCCTTGAGACTGTTCACGGGGGTGTTTATTCTTTCTCAATCTTGCCAATAATAGTACCATTTCTGCTGAATGGCACTACCAAACTCCAACCCAGTTTCTAGAAGTTTCTCTCTCGTCTCTTTCAGCTAGAACTCTTTCCCTGTGATTGGTGGACAGTAGGGTGTTGATATTTTGAATCCTCTATGAAAAAAAATTAATCAAAAGAAGGACAAAGAGATGTGGACAGACAGAATGACAATTACTAAAGAATCCTGGGAGTTGAGATATAAAAATCACAAAAGACTCATCTGGTACAGGGAGAGCAGCCATGGGACTAGGGAAGGAGGGGAAGATAAGAAATGTGTCACAGGTGAGAAAAAGCAGGCCTGGATGATCAGGGTGGGGCGGGGAGGGTGCGGGGGGAAGGGCTGGGGGCAAAAGGAAGGAACAGCCTGAGATTGCCAGCAGAGTGACCTCAGGAGAATTAGCAGCTGGGGTGGGGCAGGATGAAGGCAGCAGAAAAATAACACTTTGGGAGTTGTTTTGGCATAGGTGAGAGGGGTAGGGTGCTCATCCCAGAAATCCCAAAGCATGAGATAAAAAAAATAAAACCACTTAAAATGTAGAGTCTGCCAAAAAGGTGGAATATAGGAACTTATTGGGATTTATATGGTTTATATGGGAAAGTAATGGGAACCGAGACTGAGTTCTTAGAGGTTATTAGACATAAATGGTGTGTGTGTGTGTGTGTGTGTGGCCAGAAGACTTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGGCCAGAAGACTTGTGTGTGTGTGTGTGTGTGTGTGGCCAGAAGACTGAAGTCAAACCTAAGGCAGAGTGGTCGGTTTTATAAAGGCATAAGATATATACTTAAATTTGTTGTAAATGTTGAATAATGTTTTAGTATGTGCTGTGTGATGGTTAAGGCACACTTGCTATAAAAATGCTATTTATTGCTTATCTCAAACTCTTCTGAATTAGGCACCTCAGTTTTCATCTGGTGACCAGAAGAGAGATTGCAAAGTTAAATGATTACAGAGGAGGAAGGCTACATTTCCCAGGGGAAGTGGGATGGATAGGGGGCAGGCACAGTGGGGGGTTAGGGCAGCCTTGAACACCTGGCACACATTCCTGGTTGCAGCTGGCTGATGTTCAGGGAAGGGACTTCAACAGAGGATTCAACTCCCTATGCTCAGATGTGGAGATATCTTCTCTAGCCGAACTCCTTGGTCTTTTCCCCATGCCTCAGCACCAACAGGCCTCTCAGGACACACCCCAGAGCTGCGGAAGAGCTAATGTCCTCAAGGGGTATCCAGCGCTGACTTGCTGAGTTGGACCTCAGGCAGGCAAGCCTGGTTTACCAGCCTTCTCAGTTAGCACAGAGACGCCAATTGGAACTTCGAAGACTTGTCGTCAGAAATTTCTGGGCGGAAACTTCCTGGGGTTGCTGTGAGCTTTTT
     
    >Il10
    AATATGATGTATCATTATATTGATATAAATTATGTGCTATAATTAAGTACATGCTAATATATTAATGTTTTATGTTAACATATTATGAAATAGTTTTATGTACATGTGTAAAAGGATATTCTAGACAAAAAAAAATAATTACGGGAAGATATAAGAGGTGCTGCTTCTCCTGCTGAGTTCTGTGCTCACCCCTCTGCTTCTCCTGGTGTTTCATCTCCTACCTCTGGATCAAGCTCATAGAACTGTCCAGTGCCAGTCCCAAGGACAGCTGGTACCTTCTATAGGCCAGATTCAGTTCTGGGGGGGGGGGGGTCAGACACACAAAGCTAAACACAATATGTTCAGGGACCTTGTAGCTGCTCAGAAATAAAAAAAAAAACATGCAGGAAGGCAGCAAAGGGGATTGTGGCTATCACCGTGCAGTAAGTACAGGTCACAGTCAGGAGAGAGGGCAGTGAGGGTCCATGCTAGCTGGGTCTTGAGCCTCTTCTGGGGTTCAGATCTCTGATCTACAGCAGTGTGTCCACACCTAAAACATCAGCTCAGAGAGGCAGTTGCTTCTGCTGTTGGAAACGGACATCCCAAAAAAAAACAAAAAACAGAAATCAAAAGGGAAGGAGAAAGTGAAAGGGATGGAGGCAGCTTGTCCCCTTCCCTGTGCTTGCTGCTGGTAGAAAACTCAGCCTGGAACTGACCGGAGCAGCAGTTCTTGAGTCAATTCCATTCCAACTTCTAGAAGATTCTTTTCCCGTCGAAGAGTGTCAGGAGGAGAGGCCAGACCCCCTTGATCCTGATCTGCCAGCCACTGCATCAGATAAGACGAGATAACCCCGAGTTCCTGTTCTACCAGCCCTGGTGTGGTAACCCTCTCCAATGGGGCAGGCTTGGAACCCTGTGCCAACGAAGATCCTCCCCCGTACTGATGCAGGAAGGACAGCCCGGGAGTGTACCCTCTACATGGGTCTACTTTTATTTAAGCAAACATTCCCTGGTCAACAGGACGTGTAGCATTGCCCCCCCCCCTTGGGTCACACAGAAAACAGGTACCAGGAGGACAAGTAGTTGCTTGCCCAGGGTACAGAATGAAAGGCAATAGGGGACTCTAGGCGAATGTTCTTCCCACCCAAACTGAGGTAGTAGGAGAAGTCCCTACTGAAGGGAAGGTCCAGACATAATCAAAGGACTACCAGAGATCTCCCAGGTATCTGTAGAAGTACTAACATCTCCATCCTTCAACAGCTACAGGTTACACGTCTCCAAGGCTGGGACATTGTAAAACAGGGCCATGGTAAGGTCTACCCGACAGCACAGAGCAAGCCTCCCAGAAGTCTGAGTTCCTTCTCCTAACTTCTCATGCTGGGATCTGAGCTTCTTCGTGAAACACGGGGCAGAGGAGGCACCAGAACTCTCCTCTGACCAACTGCCCCACAGCACACATATCCTCAAAGGATAGTCTTGAATACGTGATGGAAGAATTAAAGAGAGTGAGGTCTGAAGAAAATCAGCCCTCTCGGGGTTTCCTTTGGGTAACTGAGTGCTAAGGTGACTTCCGAGTCAGCAAGAAATATCGGACGTTCAACCCAGGTTGAGTGGAGGAAACAATTATTTCTCAATCCTAATATGTTCTGGAATAGCCCATTTATCCACGTCATTATGACCTGGGAGTGCGTGAATGGAATCCACAGATGAGGGCCTCTGTACATAGAACAGCTGTCTGCCTCAGGAAATACAACTTTTAGTATTGAGAAGCTAAAAAGAAAAAAAAATTAAAAGAGAGGTAGCCCATACTAAAAATAGCTGTAATGCAGAAGTTCATTCCGACCAGTTCTTTAGCGCTTACAATGCAAAAAAAAGGGAAAGGAAAAAAAAAAAGAAAGAAATTAAACTCAAAAATTGCATGGTTTAGAAGAGGGAGGAGGAGCCTGAATAACAAAAACCTTTGCCAGGAAGGCCCCACTGAGCCTTCAGTATAAAAGGGGGACCAAGAACAGGAGGTCTACA
     
    >NQO1
    AACAGGCGAGCTGACTCTGTGACTCTTCTGTTTCCAGTGACTATGGCAGTGTCACTTCTGCCAATCCAAGAGCTGAGAGTGTCATCAGATAGCATCTTGGACCATAAACCCCACCCCCCCATCTCGATGTACCCACCTCTCCAGTGTACCCACCTCTCCAGGGTTCCCACCAACGTACTTTAAAGTCGCCTTAACTTATTACTTTGTTCTGTAAATTGTAAAAATCTTGTGAGGCTGCACCCACATTGGAACATAAAATTTGGGGTACCCTATATTGGTGTTCCCAGGCCGTGGCCACTCAAAATGGCTCCGGAATAAACTGTGGTTTTTATGTTGGTATTTCTTTACAGCTGAGAGATGACCCTCAGGCACAAACTGTAAGGAAACACCAGAAAACCCAATGTTGAACATTGTAGTGTGGTGTGTTTGGTATTTGTCTGATGCTGAGACAGAAGCAGCCTGTGGAAACTACTTTAGCACGTTGTTTGAGAGGAGAGTCTGACATCGCAGACGAAGCTGCCTGGTCACACAGCATCCAGTGAGAAAGCAGATAGCCTTTCCTGATGAAGCTATATCCCCAGCTCCTATTTTTGATTTTTGAAATGAGGTCTCACGTATCTTCAACTGTAGTAGTTAAGCAAGGCCAAGCCTTCAAGGGTCAAGGGTCCCTGTGTTAAGAAACCTTCAGGGTATCCTTTTATTTCCAGATAAAGCTTTGTGGTGCAAACTGGGCATGTGCAGGAATGTACCCTCCCCAAAGTACCTCCCCCATAGGAACAAGAATCTGCCTCCCTAATAAGTTCTCACCTTTTCTTTGTTTGGGAAGTGCGTTGCTTTAAAAATTGTCCTTGGTCTCTTTGCCTGCTGCAGCTGATATTTCTTTCTTCCCTCTTATAGCCCATTGTGTTACTTCGGCTTTGCCCTAACCGGAATGAGACTCCACTGAGATCCATCACAAGGGCTGTCACTAGCCTGTCACCACAGGAGACTGCACGTGTGTCTTTCCCTCACTGTCAGAATTTATCAGATAACAGGAAAGTTGAGCTCTTTTAATGATGGCAATCTGTTATAATGTCTACCCTACTTTGGGAGCTTGACCAAGGCACACACATACATGTAGGGTCTTTATTCCAACCCTTTTTCTTTCTTTCTCTGTTTTTGAGACAGGGTCTCACCTATGTAGCCCTGGCTGTTGTTCTAGCACTAGCTATGTGGACCAGTCTGGCCTTAAACTCAGAGATCTGCCTGCTTCTGGCACCCAAGTGATGGGATTAAAAGCATGTACTAGTCGTGGTGGCGCACTCCTTTAATCCCAGCACTTGGGAGGCAGAGGCAGGTGGATTTCTGAGTTCGAGGCCAGCCTGGTCTACAGAGTGAGTTCCAGGACAGCCAGGGCTACACAGAGAAACACTTCCCTGTGGCTGCTGTCTCCTGCCAGCTTTGCTCTGGCTTCCTAGAGAGTCGCACAGATGAGTTCCCCGTTACCTGGTCACCGGGGGCAAAGTTGAGGAGACCCAAGTGTGTATACCCAGGGAGCAGTTTTTGCAGTTTCTAAGAGCAGAACGCAGCACGAATTCATTTCACACGAGGACAAGTCTCTCTGAACTTTCAGTCTAGAGTCACAGTGAGTCGGCAAAATTTGAGCCCATCCGTTTTGCTGCCCCACCCTTCCCCTAGCGTGCAAAGGTGACTTCCCACGGCTGAGTGAGGACTAATCTACACAGGCTGATTATGTAGGCAGGTCCCACGAAGCTCGAAAAATTCTGTTGGAAATTTCCATTTTGTACCCAGGAGGTCTTGGGACAGGGAGCAGATGAATTTATTCAATATGTCCCCATATCCTCAAATTCTCTCTCACTCCCTTGCTCCCGGGGAACCCTTTTGACTTCCATATACAGGAGTCCTAGTCCAGCCCCAAACTGCTTCTCCCTGCCAAAAACTTGGTATCTTCCCAAGATGCCTCTGGGTTCTGGAGTCCAGCCCCGCCCTCGCTGGCTGCTC
    Encore merci pour tout Jasmine. J'adore venir ici, j'apprends toujours pleins de trucs

  5. #25
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Pour ouvrir un fichier, il vaut mieux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open my $res, '>', $file_res or die $!;
    ...
    close $res;
    Tu devrais passer le filehandle à ton sous-programme
    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");
    	}
    }
    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)
    		{...
    $rech1 suffit, inutile d'utiliser $rech2

    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 --

  6. #26
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    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 --

  7. #27
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/09/2006, 23h33
  2. Réponses: 2
    Dernier message: 15/09/2006, 12h18
  3. [VB.NET]Récupérer les variables d'un XML dans VB
    Par Yanos dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/07/2006, 08h21
  4. Récupérer les valeurs d'un noeud dans un fichier XML
    Par yosthegost dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 17h38
  5. Récupérer les valeur d'un énuméré dans une string
    Par Oliv_75 dans le forum SL & STL
    Réponses: 5
    Dernier message: 28/09/2005, 00h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo