Bonjour,Trouver tous les répétées 4-mères dans une séquence d'ADN - Perl
J'essaie d'écrire un programme qui lit dans un fichier au format FASTA contenant des séquences d'ADN multiples, identifie tous les répétées 4-mères (c.-à-tout 4-mères qui se produisent plus d'une fois) dans une séquence, et imprime le 4-mer répété et l'en-tête de la séquence dans laquelle il a été trouvé. Un k-mer est simplement une séquence de k nucléotides (par exemple, "aaca", "gacg" et "tttt" sont des 4-mères).
Voici mon code:
use strict;
use warnings;
my $count = -1;
my $file = "sequences.fa";
my $seq = '';
my @header =();
my @sequences =();
my $line = '';
open (READ, $file) || die "Cannot open $file: $!.\n";
while ($line = <READ>){
chomp $line;
if ($line =~ /^>/){
push @header, $line;
$count++;
unless ($seq eq ''){
push @sequences, $seq;
$seq = '';
}
} else {
$seq .= $line;
}
} push @sequences, $line;
for (my $i = 0; $i <= $#sequences+1; $i++){
if ($sequences[$i] =~ /(....)(.)*\g{1}+/g){
print $header[$i], "\n", $&, "\n";
}
}
J'ai deux demandes: D'abord, je ne sais pas comment concevoir mon modèle regex pour obtenir la sortie désirée. Ensuite, et c'est moins important, je suis certain que mon code est très inefficace, donc s'il y a un moyen de le raccourcir, dites-le moi s'il vous plaît.
Merci d'avance!
Voici un exemple pour un fichier FASTA: (Notez qu'il ya une ligne supplémentaire entre les séquences, ce qui est le cas dans les fichiers FASTA d'origine)
> NC_001422.1 entérobactéries phage phiX174 sensu lato, complète génome GAGTTTTATCGCTTCCATGACGCAGAAGTTAACACTTTttttttCGGATATTTCTGATGAGTCGAAAAAT CCCTTACTTGAGGATAtatataAATTATGTCTAATATTCAAACTGGCGCCGAGCGTATGCCGCATGACCT
> NC_001501.1 entérobactéries phage phiX184 sensu lato, génome complet AACGGCTGGTCAGTATTTAAGGTTAGTGCTGAGGTTGACTACATCTGTTTTTAGAGACCC AGACCTTTTA TCTCACTTCTGTTACTCCAGCTTCTTCGGCACCTGTTTTACAGACACCTAAAGCTACATCGTCAACGTTA TATTTTGATAGTTTGACGGTTAATGCTGGTAATGGTgagagagaGGTTTTCTTCATTGCATTCAGATGGA TCAACGCCGCTAATCAGGTTGTTTCTGTTGGTGCTGATATTGCTTTTGATGCCGACCCTAAATTTTTTGC CTGTTTGGTTCGCTTTGAGTCTTCTTCGGTTCCGACTACCCTCCCGACTGCCTATGATGTTTATCCTTTG
> NC_001622.5 entérobactéries phage phiX199 de Lato, génome complet de TTCGCTGAATCAGGTTATTAAAGAGTTGCCGAGATATTTATGTTGGTTTCATGCGGATTGGTCGTTTAAA TTGGACTTGGTGGCAAGTCTGCCGCTGATAAAGGAAAGGATAATGACCAAATCAAAGAACTCGTGATTAT CTTGCTGCTGCATTTCCTGAGCTTAATGCTTGGGAGCGTGCTGGTGCTGATGCTTCCTCTGCTGGTATGG TTGACGCCGGATTTGAGAATCAAAAATGTGAGAGAGCTTACTAA AATGCAACTGGACAATCAGAAAGAGA GATGCAAAATGAGACTCAAAAAGAGATTGCTGGCATTCAGTCGGCGACTTCACGCCAGAATACGAAAGAC CAGGTATATGCACAAAATGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTATTA TGGAAAACACCAATCTTTCCAAGCAACAGCAGGTTTCCGAGATTATGCGCCAAATGCTTACTCAAGCTCA AACGGCTGGTCAGTATTTTACCAATGACCAAATCAAAGAAATGACTCGCAAGGTTAGTGCTGAGGTTGAC TTAGATGAGTGTTCATCAGCAAACGCAGAATCAGCGGTATGGCTCTTCTCATATTGGCGCTACTGCAAAG
Eh bien, fait pour expliquer ce qu'est réellement un 4-mer! Juste une question - peuvent-ils se chevaucher? Et avez-vous quelques exemples de données et la sortie désirée? – Sobrique
Oui, ils peuvent se chevaucher. J'ai essayé de joindre un fichier fasta mais il semble que ce ne soit pas possible. Je vais copier un exemple dans la question. Malheureusement, je n'ai pas d'échantillon pour la sortie désirée – ic23oluk
Quelle version de Perl utilisez-vous? 'perl -v' – Zaid