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 :

détermination de position


Sujet :

Bioinformatique Perl

  1. #1
    Membre averti Avatar de joyeux2000
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    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

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    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 : 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
    #!/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";
    	}
     
    }

  3. #3
    Membre averti Avatar de joyeux2000
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    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

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Bonjour Joyeux,

    Tu dois ouvrir le fichier de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open my $in_file_fh, '<', $file or die;
    Puis parcourir les lignes une à une ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (my $line = <$in_file_fh> ){
    .. afin de les analyser via des expressions régulières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    #!/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.

  5. #5
    Membre averti Avatar de joyeux2000
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    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

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab{$id} = $start_motif

  7. #7
    Membre averti Avatar de joyeux2000
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    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 : 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
    #!/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

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Pour la boucle principale, il est peut-être possible d'envisager cela ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  9. #9
    Membre averti Avatar de joyeux2000
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    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

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    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.

  11. #11
    Membre averti Avatar de joyeux2000
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    Bonjour,
    Merci bien Philou67430 pour votre aide.
    voici le code
    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
    #!/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 : Sélectionner tout - Visualiser dans une fenêtre à part
    print "$id: ", $-[0] - $-[1], " -> ", $-[0] + length($pattern) - $-[1], "\n";
    à la fin du script, il m'affiche
    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

  12. #12
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    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 : 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
    #!/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";
        }
      }
    }

  13. #13
    Membre averti Avatar de joyeux2000
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    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

  14. #14
    Membre averti Avatar de joyeux2000
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    Bonjour,
    Merci beaucoup Jasmine , Merci beaucoup Philou67430 .
    C'est résolu .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/08/2014, 09h41
  2. Réponses: 6
    Dernier message: 21/12/2012, 17h05
  3. Tic tac toe- déterminer une position gagnante
    Par shirya dans le forum Intelligence artificielle
    Réponses: 7
    Dernier message: 26/10/2010, 10h33
  4. Déterminer la position d'un UserControl dans une Form
    Par Delphi-ne dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 25/11/2007, 13h59
  5. Déterminer la position de la souris
    Par genteur slayer dans le forum Composants VCL
    Réponses: 6
    Dernier message: 16/06/2003, 11h01

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