Précédent   Forum des professionnels en informatique > Autres langages > Perl > Bioinformatique
Bioinformatique Toutes vos questions sur les scripts Perl associés à la bioinformatique, modules bioperl, projets bioinformatiques, etc ... Avant de poster, veuillez consulter les cours Perl et les critiques de livres.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/05/2011, 19h43   #1
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 13
Points : 13
Points : 13
Par défaut détermination de position

Bonjour,
j'ai télécharger une séquence upstream(en amont du gène) à partir d'une base de donnée sous le format Fasta.
je veux déterminer la position en -XXX pb.
mais parfois il y a des séquences qui sont marquées FORWARD d'autres REVERSE. y a t'il différence entre les deux?
exemple1:
>XXXXXX FORWARD ATCGATCGATCGATCG.
position: -???? pb

>YYYYYY REVERSE ATCGATCGATCGATCG.
position: -???? pb
quelqu'un peut m'aider SVP pour déterminer la position des séquences colorés en rouge.
merci d'avance
cordialement
joyeux2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 12h12   #2
Membre Expert
 
Avatar de Jasmine80
 
Jasmine
Inscription : octobre 2006
Messages : 2 814
Détails du profil
Informations personnelles :
Nom : Jasmine
Âge : 32
Localisation : Belgique

Informations forums :
Inscription : octobre 2006
Messages : 2 814
Points : 2 079
Points : 2 079
Citation:
Envoyé par joyeux2000 Voir le message
mais parfois il y a des séquences qui sont marquées FORWARD d'autres REVERSE. y a t'il différence entre les deux?
exemple1:
>XXXXXX FORWARD ATCGATCGATCGATCG.
position: -???? pb

>YYYYYY REVERSE ATCGATCGATCGATCG.
position: -???? pb
A partir de quelle base de données? Cela provient de l'ADN qui est double brin tu as la séquence forward et la reverse.


Citation:
Envoyé par joyeux2000 Voir le message
quelqu'un peut m'aider SVP pour déterminer la position des séquences colorés en rouge.
merci d'avance
cordialement
Tu dois utiliser une expression régulière.

Que veux-tu rechercher, le motif ATCG. Ce motif est-il toujours précédé de xxx et suivi de xxxx ? Ce motif est trop petit que pour être cherché tel quel, tu peux le trouver facilement par hasard. Tu dois déterminer d'autres critères de recherche, comme par exemple les nucléotides devant précéder et suivre ce motif.


Voila à quoi doit ressembler le script : tu peux modifier l'expression régulière m/(ATCG)/ par m/ATCG(ATCG)ATCG/ afin de rechercher un motif plus grand.

Le module Bio::SeqIO te permet de récupérer proprement les données de ton fichier.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
 
use strict;
use warnings;
 
use Bio::SeqIO;
 
 
 
my $file = '-----.txt';
my $in  = Bio::SeqIO->new(-file => $file , '-format' => 'fasta');
 
 
 
while ( my $seq = $in->next_seq() ) {
 
	if ($seq->seq =~ m/(ATCG)/){
		print "ATCG commence à la position $-[1]\nse termine juste avant la position $+[1]\n";
	}
 
}
__________________
-- Jasmine --

Merci de poser les questions dans le forum, je ne répondrai pas aux MP.
Jasmine80 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/05/2011, 09h40   #3
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 13
Points : 13
Points : 13
Bonjour,
Merci Jasmine80 pour la réponse .
j'ai télécharger un fichier contenant les séquences upstreame des gènes à partir d'une base de données.
ces sequences sont en format FASTA.
exemple explicatif de sequence:
>XX1G56520 | chr1:2695538-2696537 FORWARD LENGTH=500ATCGATCGATCGATCGGAGAGAGATCGATCGATCGATCGATCG>YY1G56520 | chr1:2695538-2696539 FORWARD LENGTH=500ATCGATCGATCGATCGGAGAGAGATCGATCGATCGATCGATCG....
moi je veux écrire un code en bio perl qui:
lit le fichier contenant les séquences ( on peux ouvrir avec bloc note, Word ...)
recherche un motif bien déterminer (eg. GAGAGAGATCGA)
donne à quelle gène correspond cette séquence ( par exemple pour le motif coloré en rouge en note le code de gène "XX1G56520". ID qui se trouve juste après la signe ">" précédente au motif )
détermine la position de ce motif par rapport au codon start, autrement compte le nombre de lettre en commencent par le premier lettre de motif jusqu'à le dernier lettre avant la signe ">" suivante.
donner les résultats sous la forme d'un tableau contenant le code de chaque gène et la position de motif correspondant( nombre de lettre trouver avec une signe mois "-")
si vous voulez plus d'explication je suis toujours à votre disposition.
aider moi SVP c'est urgent.
cordialement
joyeux2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 07h47   #4
Membre Expert
 
Avatar de Jasmine80
 
Jasmine
Inscription : octobre 2006
Messages : 2 814
Détails du profil
Informations personnelles :
Nom : Jasmine
Âge : 32
Localisation : Belgique

Informations forums :
Inscription : octobre 2006
Messages : 2 814
Points : 2 079
Points : 2 079
Bonjour Joyeux,

Tu dois ouvrir le fichier de cette façon :
Code :
open my $in_file_fh, '<', $file or die;
Puis parcourir les lignes une à une ..
Code :
while (my $line = <$in_file_fh> ){
.. afin de les analyser via des expressions régulières :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
 
	# si la ligne commence par > 
	if ($line =~ m/^>(\w+)\|/){
		$id = $1;
	}
	# si la ligne contient le motif
	elsif ($line =~ m/(GAGAGAGATCGA)/i){
		$pattern = $1;
		$position = $-[1];
	}

Ce qui donne (script à adapter à ton cas)
Code :
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
#!/usr/bin/perl
 
 
use warnings;
use strict;
 
 
# ouverture du fichier
my $file = '...';
open my $in_file_fh, '<', $file or die;
 
 
# tableau contenant les résultats
my %tab;
 
 
 
# parcours du fichier
while (my $line = <$in_file_fh> ){
 
	# récupération des informations
	my $id;
	my $pattern;
	my $position;
 
	# si la ligne commence par > 
	if ($line =~ m/^>(\w+)\|/){
		$id = $1;
	}
	# si la ligne contient le motif
	elsif ($line =~ m/(GAGAGAGATCGA)/i){
		$pattern = $1;
		$position = 
	}	
	if ( (defined $id) && (defined $pattern) ){
 
		# ce que tu veux garder
		$tab{} = ;
 
		# on remet les valeurs à zéro
		$id;
		$pattern;
		$position;			
	}
}
 
close $in_file_fh;

Voici la FAQ sur les expressions régulières et les fichiers

Si tu as d'autres questions, n'hésite pas.
__________________
-- Jasmine --

Merci de poser les questions dans le forum, je ne répondrai pas aux MP.
Jasmine80 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/05/2011, 16h36   #5
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 13
Points : 13
Points : 13
Bonjour,
premièrement, un grand merci à Jasmine80 pour tout l'aide qu'il m'a fourni.
mais le problème que pour la position j'ai pas pu la déterminer, parce que moi je veux la position par rapport au codon start dans une séquence upstream, donc j'ai besoin de compter le nombre les lettres en commençant par la signe ">" qui suit le motif.
j'ai essayé avec mais elle détermine la position par rapport au début de la ligne.
de plus, pour je sais pas qu'est ce qu'il faut écrire à fin que le tableau affiche le id de gène et la position.
c'est pas forcement que les résultats s'affichent sous la forme d'un tableau, l’essentiel on obtient code du gène suivie de la position correspondante.
exemple explicatif de séquence:
>XX1G56520 | chr1:2695538-2696537 FORWARD LENGTH=500ATCGATCGATCGATCGGAGAGAGATCGATCGATC>YY1G56520 | chr1:2695538-2696539 FORWARD LENGTH=500ATCGATCGATCGATCGGAGAGAGATCGATCGATCGATCGATCG....
pour le motif en rouge
id de gene: XX1G56520
la position: -18 to -7
je suis encore débutant , j'ai besoin de l'aide.
Merci d'avance
joyeux2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 09h33   #6
Membre Expert
 
Avatar de Jasmine80
 
Jasmine
Inscription : octobre 2006
Messages : 2 814
Détails du profil
Informations personnelles :
Nom : Jasmine
Âge : 32
Localisation : Belgique

Informations forums :
Inscription : octobre 2006
Messages : 2 814
Points : 2 079
Points : 2 079
Citation:
Envoyé par joyeux2000 Voir le message
Bonjour,
premièrement, un grand merci à Jasmine80 pour tout l'aide qu'il m'a fourni.
mais le problème que pour la position j'ai pas pu la déterminer, parce que moi je veux la position par rapport au codon start dans une séquence upstream, donc j'ai besoin de compter le nombre les lettres en commençant par la signe ">" qui suit le motif.
j'ai essayé avec mais elle détermine la position par rapport au début de la ligne.

Si ta ligne vaut = '>XX1G56520 | chr1:2695538-2696537 FORWARD LENGTH=500ATCGATCGATCGATCGGAGAGAGATCGA', que tu cherches le motif GAGAGAGATCGA et que tu fais :

Code :
1
2
3
4
5
6
7
8
	if ($line =~ m/LENGTH=\d+(\w+)(GAGAGAGATCGA)/){
 
		# $2 contient le motif et $1 contient le début de séquence avant celui-ci
 
		my $start_motif = length($1);
 
		print $1."\n".$start_motif."\n";
	}


Citation:
Envoyé par joyeux2000 Voir le message
de plus, pour je sais pas qu'est ce qu'il faut écrire à fin que le tableau affiche le id de gène et la position.
Tu peux écrire :
Code :
$tab{$id} = $start_motif
__________________
-- Jasmine --

Merci de poser les questions dans le forum, je ne répondrai pas aux MP.
Jasmine80 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/05/2011, 11h11   #7
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 13
Points : 13
Points : 13
Bonjour,
Merci beaucoup Jasmine
mais, le code présente encore des erreurs .
SVP, aidez moi à les corriger. je veux que programme tourne et m'affiche les résultats, je les besoins beaucoup.
Code :
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
#!/usr/bin/perl
 
 
use warnings;
use strict;
 
 
# ouverture du fichier
my $file = 'ups.txt';
open my $in_file_fh, '<', $file or die;
 
 
# tableau contenant les résultats
my %tab;
 
 
 
# parcours du fichier
while (my $line = <$in_file_fh> ){
 
	# récupération des informations
	my $id;
	my $pattern;
	my $position;
 
	# si la ligne commence par > 
	if ($line =~ m/^>(\w+)\|/){
		$id = $1;
	}
	if ($line =~ m/LENGTH=\d+(\w+)(GAGAGAGATCGA)/){
 
		# $2 contient le motif et $1 contient le début de séquence avant celui-ci
 
		my $start_motif = length($1);
 
		print $1."\n".$start_motif."\n";
	}	
	if ( (defined $id) && (defined $pattern) ){
 
		# ce que tu veux garder
		$tab[$id] = $start_motif
 
		# on remet les valeurs à zéro
		$id;
		$pattern;
		$position;			
	}
}
 
close $in_file_fh;
bien cordialement
joyeux2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 16h30   #8
Membre Expert
 
Inscription : avril 2009
Messages : 2 218
Détails du profil
Informations personnelles :
Âge : 46

Informations forums :
Inscription : avril 2009
Messages : 2 218
Points : 2 480
Points : 2 480
Pour la boucle principale, il est peut-être possible d'envisager cela ainsi :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
# parcours du fichier
while (my $line = <$in_file_fh> ){
  # si la ligne commence par >, on récupère l'ID et 
  if (my ($id) = $line =~ m/^>(\w+)\|/) {
 
    # On recherche le pattern et le start (>) qui suit
    if (my ($pattern, $start) = $line =~ m/LENGTH=\d+(?:\w+)(GAGAGAGATCGA)(?:.*?)(<)/) {
      # Il suffit alors d'afficher les informations de position :
      print "$id: ", $-[0] - $-[1], " -> ", $-[0] + length($pattern) - $-[1], "\n";
    }
  }
}
Pour le vérifier, il faudrait que l'on puisse disposer d'un exemple de fichier ups.txt.
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/05/2011, 01h24   #9
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 13
Points : 13
Points : 13
Bonjour,
Merci Philou67430, Merci Jasmine80.
mais mon problème n'est pas encore résolu .il y a toujours des erreurs qui s'affichent.
Cordialement
joyeux2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 09h52   #10
Membre Expert
 
Inscription : avril 2009
Messages : 2 218
Détails du profil
Informations personnelles :
Âge : 46

Informations forums :
Inscription : avril 2009
Messages : 2 218
Points : 2 480
Points : 2 480
Merci de poster ici les réponses que vous m'avez faites en privé.
De même, postez le script que vous avez utilisé qui provoquent les erreurs que vous m'avez envoyées, car je doute que la partie de script que j'ai postée plus haut ne soit à l'origine de ces erreurs.
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/05/2011, 10h32   #11
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 13
Points : 13
Points : 13
Bonjour,
Merci bien Philou67430 pour votre aide.
voici le code
Code :
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
#!/usr/bin/perl
 
 
use warnings;
use strict;
 
 
# ouverture du fichier
my $file = 'ups.txt';
open my $in_file_fh, '<', $file or die;
 
 
# parcours du fichier
while (my $line = <$in_file_fh> ){
  # si la ligne commence par >, on récupère l'ID et 
  if (my ($id) = $line =~ m/^>(\w+)\|/) {
 
    # On recherche le pattern et le start (>) qui suit
    if (my ($pattern, $start) = $line =~ m/LENGTH=\d+(?:\w+)(GAGAGA)(?:.*?)(<)/) {
      # Il suffit alors d'afficher les informations de position :
      print "$id: ", $-[0] - $-[1], " -> ", $-[0] + length($pattern) - $-[1], "\n";
    }
  }
}		
close $in_file_fh;
pour l'erreur, lorsque j'ai exécuté le Script il m'affiche rien, ni erreur, ni résultat. de plus lorsque j'ai déplacé
Code :
print "$id: ", $-[0] - $-[1], " -> ", $-[0] + length($pattern) - $-[1], "\n";
à la fin du script, il m'affiche
Citation:
Global symbol “$id” requires explicit package name at D:\perl…line 25
Global symbol “$pattern” requires explicit package name at D:\perl…line 25
si vous voulez plus d'explication, je suis à votre disposition.
Merci d'avance
Bien cordialement
joyeux2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 11h18   #12
Membre Expert
 
Inscription : avril 2009
Messages : 2 218
Détails du profil
Informations personnelles :
Âge : 46

Informations forums :
Inscription : avril 2009
Messages : 2 218
Points : 2 480
Points : 2 480
Le manque de résultat vient du fait que les séquences ne sont pas enregistrées sur une seule ligne, mais sur plusieurs lignes.
Pour faire les recherches, il faut donc d'abord "concaténer" toutes les lignes d'une séquence, et ensuite seulement faire la recherche.

De même, l'expression régulière pour extraire l'ID était trop restrictive.

Enfin, avec le fichier que vous m'avez fourni en MP, il n'y a aucune ligne de séquence pour laquelle on trouve un > au milieu des nucléotides... du coup, la recherche "du start" échoue toujours... Je ne peux aller plus loin.

Le script en l'état :
Code :
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
#!/usr/bin/perl
 
 
use warnings;
use strict;
 
 
# ouverture du fichier
my $file = 'ups.txt';
open my $in_file_fh, '<', $file or die;
 
 
# parcours du fichier
my @seq;
while (my $line = <$in_file_fh> ){
  chomp($line);
  if ($line =~ /^>/) {
    # traiter la séquence courante s'il y en a une
    sequence(@seq) if @seq;
    # préparer la sequence suivante
    @seq = ();
  }
  # enregistrer la ligne courante pour la séquence courante
  push @seq, $line;
}
# Traiter la dernière séquence
sequence(@seq) if @seq;
close $in_file_fh;
 
sub sequence {
  my $seq = join "", @_;
 
  # si la ligne commence par >, on récupère l'ID et
  if (my ($id) = $seq =~ m/^>(\w+)\s*\|/) {
 
    # On recherche le pattern et le start (>) qui suit
    if (my ($pattern, $start) = $seq =~ m/LENGTH=\d+(?:\w+)(GAGAGA)(?:.*?)(<)/) {
      # Il suffit alors d'afficher les informations de position :
      print "$id: ", $-[0] - $-[1], " -> ", $-[0] + length($pattern) - $-[1], "\n";
    }
  }
}
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/05/2011, 13h16   #13
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 13
Points : 13
Points : 13
Bonjour,
ok un grand Merci Philou67430 pour tout l'effort et l'aide que vous m'avez fournis.
déjà, le code que vous m'avez donné est un pas très important pour moi.
mais si quel qu’un 'autres à une idée, je serai très reconnaissant.
Merci d'avance
cordialement
joyeux2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 21h41   #14
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : mai 2010
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 13
Points : 13
Points : 13
Bonjour,
Merci beaucoup Jasmine , Merci beaucoup Philou67430 .
C'est résolu .
joyeux2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h26.


 
 
 
 
Partenaires

Hébergement Web