Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Nouveau Membre du Club
    Inscrit en
    janvier 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : janvier 2010
    Messages : 200
    Points : 35
    Points
    35

    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 :
    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 :
    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
    Expert Confirmé

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 194
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    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 : 1 194
    Points : 2 516
    Points
    2 516

    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?
    Mes articles sur La programmation fonctionnelle en Perl publiés sur ce site:

    ________
    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

  3. #3
    Nouveau Membre du Club
    Inscrit en
    janvier 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : janvier 2010
    Messages : 200
    Points : 35
    Points
    35

    Par défaut

    La plus petite,
    j'ai finalement reussi en fasant comme ceci :
    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
    #!/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";
    }

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •