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

Langage Perl Discussion :

Motif commun à des sequences


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut Motif commun à des sequences
    Bonjour à tous,
    Je suis confrontée à un problème que je n'arrive pas à résoudre.
    J'ai un fichier qui ressemble à cela :
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    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
    >seq1
    ACTTTCCACAACGATGGAAGATGATGA
    >seq2
    ACTTTCCACAACGATGGAAGATGATGAA
    >seq3
    ATTCCACAACGATGGAAGATGATGAA
    >seq4
    CTTTCCACAACGATGGAAGATGATGAA
    >seq5
    NTCCACAACGATGGAAGATGATGAAGA
    >seq6
    TACTTTCCACAACGATGGAAGATGATGA
    >seq7
    TACTTTCCACAACGATGGAAGATGATGAA
    >seq8
    TCCACAACGATGGAAGATGATGA
    >seq9
    AAAGAAGAAATTGAATAAATATATGTC
    >seq10
    AAAGAAGAAATTGAATAAATATATGT
    >seq11
    AAAGAAGAAATTGAATAAATATATGTCA
    >seq12
    AAAGAAGAAATTGAATAAATATAT
    >seq13
    AAAGAAGAAATTGAATAAATATATG
    >seq14
    AAAGAAGAAATTGAATAAATATA
    Je souhaiterai trouver la séquence la plus petite que toutes ces séquences partagent entre elle (en gras dans mon exemple), et donc la seule séquence que j'aimerai récupérer est la seq 8 et seq14
    >seq8
    TCCACAACGATGGAAGATGATGA
    >seq14
    AAAGAAGAAATTGAATAAATATA

    Quelqu'un aurait une idée ? Une suggestion ?
    J'ai fait ceci, mais ca ne fonctionne pas :
    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 strict;
    use warnings;
    use Carp qw(confess);
    use Getopt::Long;
    use List::MoreUtils qw(uniq);
    use Bio::SeqIO;
     
    my %hash;
    my ($fasta_file,$out_file);
    GetOptions("fasta=s" => \$fasta_file,"out=s" => \$out_file);
    open(my $out,'>',$out_file) or die "$out_file : $!\n\n";
    my $in = Bio::SeqIO->new( -file => $fasta_file, '-format' => 'Fasta' );
     
    # read file in hash
    while ( my $seq = $in->next_seq()){
    	my $id = $seq->id() ;
    	my $sequence = $seq->seq ;
    	$hash{$sequence}=$id;
    }
     
    my @all_seq=keys (%hash); # @seq contient toutes les sequences
    my @uniqueseq;
    my $find=0;
     
    foreach my $seqs (@all_seq){
    	$find=0;
    	my $seq=uc($seqs);  #uppercase
    	foreach (@uniqueseq){
    		if ($_=~/$seq/){ # si ma sequence contient 
    			$_=$seq; #remplace avec la plus petite sequence
    			$find=1;
    		}
    	}
    	if ($find==0){
    		push @uniqueseq,$seq;
    	}
    }
     
    foreach (@uniqueseq){
    	print ">$hash{$_}\n$_\n";
    }

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Isabella83 Voir le message
    Je souhaiterai trouver la séquence la plus petite que toutes ces séquences partagent entre elle (en gras dans mon exemple), et donc la seule séquence que j'aimerai récupérer est la seq 8 et seq14
    Euh, la plus petite séquence ou la plus grande?

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut
    La plus petite,
    j'ai finalement reussi en fasant comme ceci :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use Carp qw(confess);
    use Getopt::Long;
    use List::MoreUtils qw(uniq);
    use Bio::SeqIO;
     
    my %hash;
    my ($fasta_file,$out_file);
    GetOptions("fasta=s" => \$fasta_file,"out=s" => \$out_file);
    open(my $out,'>',$out_file) or die "$out_file : $!\n\n";
    my $in = Bio::SeqIO->new( -file => $fasta_file, '-format' => 'Fasta' );
     
    # read file in hash
    while ( my $seq = $in->next_seq()){
    	my $id = $seq->id() ;
    	my $sequence = $seq->seq ;
    	$hash{$sequence}=$id;
    }
     
    my @all_seq=keys (%hash); # @seq contient toutes les sequences
    my @sort_all_seq = sort @all_seq;
     
    my @uniqueseq;
    my $find=0;
     
    foreach my $seqs (@sort_all_seq){
    	$find=0;
    	my $seq=uc($seqs);  #uppercase
    	foreach (@uniqueseq){
    		if ($_=~/$seq/){ # si ma sequence contient 
    			$_=$seq; #remplace avec la plus petite sequence
    			$find=1;
    		}
    		if ($seq=~/$_/){ 
    			$find=1;
    		}
    	}
    	if ($find==0){
    		push @uniqueseq,$seq;
    	}
    }
     
    my @final = uniq @uniqueseq;
     
    foreach (@final){
    	print ">$hash{$_}\n$_\n";
    }

Discussions similaires

  1. Export-Import des sequences
    Par big1 dans le forum Oracle
    Réponses: 1
    Dernier message: 09/10/2006, 17h33
  2. communication des données via modem+rtc en VB6
    Par kadirov dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 06/07/2006, 11h56
  3. Outils de mise en commun des sources
    Par Invité dans le forum EDI et Outils pour Java
    Réponses: 6
    Dernier message: 17/05/2006, 09h25
  4. exp / imp des sequences ?
    Par mickjack dans le forum Import/Export
    Réponses: 6
    Dernier message: 21/04/2006, 15h15
  5. [SQLite]éliminer un motif dans des champ TEXT
    Par Invité(e) dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/05/2005, 17h44

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