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 :

Trouver une séquence et la rallonger


Sujet :

Bioinformatique Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Trouver une séquence et la rallonger
    Bonjour,
    je me tourne à nouveau vers vous car je souhaiterai un avis.

    Dans un premier fichier fasta, j'ai des séquences entières de mRNA.
    Dans un deuxième fichier fasta, j'ai des séquences tronquées des mêmes mRNA.
    Mon intention est de rallonger les mRNA tronqués de 500 nucléotides à l'avant et de 500 à l'arrière.

    Je pensai donc retrouver la séquence tronquée dans le mRNA entier pour ensuite extraire ma séquence rallongée.

    A votre avis est-ce possible de réalisr un tel script?

    Si oui, auriez vous quelques pistes sur lesquels me lancer car je suis totalement dans le flou?
    Si non, comment puis-je procéder pour arriver à mes fins?

    Merci beaucoup pour votre précieuse aide.

  2. #2
    Membre confirmé
    Avatar de MaliciaR
    Inscrit en
    Juillet 2008
    Messages
    513
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 513
    Points : 600
    Points
    600
    Par défaut
    Salut,

    Voudrais-tu expliquer pourquoi tu voudrais les rallonger et d'ou tu prendras les 500nt en avant et en arriere? J'avoue avoir un pitit souci de comprehension

    Merci
    Le tact dans l'audace c'est de savoir jusqu'où on peut aller trop loin. Cocteau
    L'abjection la plus totale, ce n'est pas de trahir, c'est de ne jamais donner un commencement de réalité à ses rêves les plus fous. M. Moreau


    Les indispensables : Les règles, , FAQ et tutos avant de poster, et !
    Traduction de Linux Device Drivers 3 : venez participer
    membre de l'April - Promouvoir et défendre les logiciels libres

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    En fait, un alignement à déjà été fait sur les séquences tronqués et il se trouvent qu'elles sont interessantes.

    Je cherche à mettre en évidence s'il existe des motifs intéressants en amont et/ou en aval de ces séquences. De ce fait, j'ai récupéré les séquences entières correspondantes pour pouvoir extraire une séquence plus importante.
    Le chiffre de 500 nucléotides étant totalement arbitraire.

    Merci

  4. #4
    Membre confirmé
    Avatar de MaliciaR
    Inscrit en
    Juillet 2008
    Messages
    513
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 513
    Points : 600
    Points
    600
    Par défaut
    Citation Envoyé par crazyarno Voir le message
    Je cherche à mettre en évidence s'il existe des motifs intéressants en amont et/ou en aval de ces séquences. De ce fait, j'ai récupéré les séquences entières correspondantes pour pouvoir extraire une séquence plus importante.
    Le chiffre de 500 nucléotides étant totalement arbitraire.

    Merci
    Je ne comprends toujours pas trop
    Tu as des motifs reveles par les fragments de sequences.
    Quelle est la nature des nucleotides que tu souhaites rajouter? Dans le sens, est-ce que tu cherches a rajouter des nucleotides des sequences originales de maniere a extendre les fragments interessants? Si c'est ca, tu peux tout betement aligner differents fragments de tes sequences de depart.
    Si tu cherches des motifs en amont ou en aval de tes fragments, pourquoi ne pas tout simplement creer des fichiers contenant les parties qui t'interessent et les aligner entre elles?

    Bref, j'essaie de voir un peu le sens biologique derriere tes manoeuvres

    Merci pour tes explications
    Le tact dans l'audace c'est de savoir jusqu'où on peut aller trop loin. Cocteau
    L'abjection la plus totale, ce n'est pas de trahir, c'est de ne jamais donner un commencement de réalité à ses rêves les plus fous. M. Moreau


    Les indispensables : Les règles, , FAQ et tutos avant de poster, et !
    Traduction de Linux Device Drivers 3 : venez participer
    membre de l'April - Promouvoir et défendre les logiciels libres

  5. #5
    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
    Dans un premier fichier fasta, j'ai des séquences entières de mRNA.
    Dans un deuxième fichier fasta, j'ai des séquences tronquées des mêmes mRNA.
    Mon intention est de rallonger les mRNA tronqués de 500 nucléotides à l'avant et de 500 à l'arrière.
    Si $truncate_seq est ta sous-séquence (sans espace) et $total_seq ta séquence entière (sans espace) afin de récupérer ses 2 extrémités, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if($total_seq =~ /([a-z]{500})$truncate_seq([a-z]{500})/i){
      my $start_500 = $1;
      my $end_500 = $2;
    }
    Et tu ouvres tes 2 fichiers fasta en utilisant le module Bio:SeqIO
    http://search.cpan.org/~birney/bioperl-1.4/Bio/SeqIO.pm


    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
    #!/usr/bin/perl
     
     
     
    use warnings;
    use strict;
     
     
     
    use Bio::SeqIO;
     
    # key : id      value = sequence
    my %total_seq;
    my %truncate_seq;
     
     
     
    my $in_tot  = Bio::SeqIO->new(-file => "chemin/infile_total.fsa" , '-format' => 'Fasta');
     
    while ( my $seq = $in->next_seq() ) {
        $total_seq{$seq->primary_id} = $seq->seq;
    }
     
    my $in_tot  = Bio::SeqIO->new(-file => "chemin/infile_truncate.fsa" , '-format' => 'Fasta');
     
    while ( my $seq = $in->next_seq() ) {
        $truncate_seq{$seq->primary_id} = $seq->seq;
    }
     
     
    foreach my $id (keys %truncate_seq){
     
      # sequences
      my $total_seq = $total_seq{$id};
      my $truncate_seq = $truncate_seq{$id};
     
      ...
     
      # expreg
     
      ...
     
      # to write informations in the output file
      print $outfile ">$id\n$seq_1000\n";
    }
    -- Jasmine --

  6. #6
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup, je vais essayer ce que tu me propose.

  7. #7
    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
    désolée, j'ai allongé le message entre temps.
    -- Jasmine --

  8. #8
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Je peux essayer de répondre à ta question hors contexte bio-informatique: utilise les index sur le début et la fin des derniers matchs d'une regex (@- et @+).

    Supposons que tu veuilles rechercher les occurrences d'une séquence de caractères (une de tes séquences tronquées) dans une liste données de séquences (tes séquences complètes) et que pour chaque séquence trouvée, tu veuilles l'extraire avec les 5 caractères avant et les 5 caractères après.

    Voici un exemple simplifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my $seq = 'aabbdbac';
    while (<>) {
    	if (/$seq/) {
    		print substr $_, $-[0], -5;
    		print $seq;
    		print substr $_, $+[0], 5;
    		print "\n";
    	}
    }
    Tu peux aussi utiliser les variables $`, $& et $' contenant respectivement la séquence précédant le match, celle du match et celle suivant le match, mais la doc de perl prévient d'éventuelles baisses de performance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my $seq = 'aabbdbac';
    while (<>) {
    	if (/$seq/) {
    		print substr $`, -5;
    		print $&;
    		print substr $', 0, 5;
    		print "\n";
    	}
    }
    Si ta séquence tronquée peu apparaître à plusieurs positions de ta séquence complète et que tu veux tous les contextes change if (/$seq/) { par while (/$seq/g) { dans le code qui précède.

  9. #9
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Bon entre-temps Jasmine t'a fait une vraie réponse de bio-informaticienne...

    Je te conseille quand même de jeter un oeil à perlreref et perlvar, à l'occasion.

  10. #10
    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
    Une petite remarque
    Si tu as l'intention de concaténer tes morceaux de séquences
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if($total_seq =~ /([a-z]{500})$truncate_seq([a-z]{500})/i){
      my $start_500 = $1;
      my $end_500 = $2;
      my $sequence_1000 = $start_500.$truncate_seq.$end_500;
    }
    N'utilise qu'un couple de parenthèses et récupère directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($total_seq =~ /([a-z]{500}$truncate_seq[a-z]{500})/i){
      my $sequence_1000 = $1;
    }
    -- Jasmine --

  11. #11
    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
    Citation Envoyé par crazyarno
    Bonjour,
    désolé de te déranger. Je voulais juste avoir une petite précision par rapport au script que tu m'as aider à faire.

    Il ya une partie dont je n'arrive pas à "traduire", voulant m'améliorer et devenir autonome en perl, pourrais-tu me dire à quoi cela correspond?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while ( my $seq = $in->next_seq() ) {
        $truncate_seq{$seq->primary_id} = $seq->seq;
    }
     
     
    foreach my $id (keys %truncate_seq){
     
      # sequences
      my $total_seq = $total_seq{$id};
      my $truncate_seq = $truncate_seq{$id};
     
      ...

    Petites corrections ... quand j'ai écrit cela à 0h33, je devais être fatiguée
    my $in_tot = Bio::SeqIO->new(-file => "chemin/infile_total.fsa" , '-format' => 'Fasta');

    while ( my $seq = $in_tot->next_seq() ) {
    $total_seq{$seq->primary_id} = $seq->seq;
    }

    my $in_trunc = Bio::SeqIO->new(-file => "chemin/infile_truncate.fsa" , '-format' => 'Fasta');

    while ( my $seq = $in_trunc->next_seq() ) {
    $truncate_seq{$seq->primary_id} = $seq->seq;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $in_tot  = Bio::SeqIO->new(-file => "chemin/infile_total.fsa" , '-format' => 'Fasta');
    Récupération des séquences dans $in_tot via le module Bio::SeqIO

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ( my $seq = $in_tot->next_seq() ) {
        $total_seq{$seq->primary_id} = $seq->seq;
    }
    récupération séquence par séquence dans $seq
    $seq->primary_id contient l'identifiant et $seq->seq ta séquence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $total_seq{$seq->primary_id} = $seq->seq;
    mise dans le tableau %total_seq des informations : clé = id, valeur = $seq
    $table{clé}=valeur;

    Tu fais de même pour le second fichier et récupères les identifiants dans %total_seq. Cela te permet donc de comparer les valeurs de tes deux tableaux possédant une même clé. Donc dans ton cas, comparer la séquence entière et la séquence tronquée ayant le même identifiant.

    Parcours des tableaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach my $id (keys %truncate_seq){
     
      # sequences
      my $total_seq = $total_seq{$id};
      my $truncate_seq = $truncate_seq{$id};

    Est-ce plus clair? N'hésite pas à poser des questions plus précises.
    -- Jasmine --

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

Discussions similaires

  1. [CR] trouver une bonne doc
    Par ina dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 17/06/2004, 17h43
  2. Réponses: 3
    Dernier message: 21/01/2004, 08h47
  3. Passer une séquence en parametre
    Par djousss dans le forum CORBA
    Réponses: 2
    Dernier message: 02/12/2003, 22h39
  4. Extraire une séquence d'un fichier MPEG
    Par enzosp dans le forum DirectX
    Réponses: 2
    Dernier message: 24/02/2003, 11h30

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