Здравствуйте, я пишу эту программу для своего класса Bioinformatics, где получаю последовательность из текстового файла и затем мутирую последовательность. После этого я должен сделать сравнение, чтобы сделать оценку, сравнив пары оснований. У меня есть весь написанный код, но я не понимаю, почему я продолжаю получать оценку 0. Я предполагаю, что часть моего кода, которая имеет дело с этим, неверна, потому что я инициализировал $sum = 0;
. Мне было интересно, могу ли я получить некоторые помогите устранить эту проблему, чтобы мой код работал правильно. Вот последовательность, которую я использую.Ошибка вычисления оценки выравнивания последовательности Perl
AGGGCACCTCTCAGTTCTCATTCTAACACCACATAATTTTTATTTGTATTATTCAGATTTTTCATGAACTTTTCCACAT
AGAATGAAGTTGACATTGTTATTTCTCAGGGTCTCGGTTCACCAGTATTTGACAAACTTGAAGCTGAACTAGCTAAAGC
use strict;
my $sum = 0;
my @seq;
my $seqString;
my $seqShuf;
my $line;
unless(open FILE, "test_seq.txt")
{
print "Cannot open file!";
exit;
}
while (chomp($line = <FILE>))
{
next if (/^>/);
@seq = <FILE>;
}
$seqString = join("",@seq);
chomp($seqShuf = shuffle_string($seqString));
$seqShuf =~ s/\s+//g;
#print "Original sequence is:\n";
#print "$seqString\n";
#print "Mutated Sequence is:\n";
#print "$seqShuf\n";
my @shufSeq = split("", $seqShuf, length($seqShuf));
my %test = (
AA => 0,
AG => -1,
AT => -2,
AC => -2,
GA => -1,
GG => 0,
GT => -2,
GC => -2,
TA => -2,
TG => -2,
TT => 0,
TC => -1,
CA => -2,
CG => -2,
CT => -1,
CC => 0
);
my @base_pairs = make_base_pairs(@seq, @shufSeq);
foreach my $bp (@base_pairs)
{
$sum += $test{$bp};
}
print "@base_pairs\n";
print "The score is ", $sum, "\n";
# Shuffles original sequence
sub shuffle_string
{
my ($string) = @_;
my $length = length $string;
for (my $i = 0; $i < $length-1; $i++)
{
my $j = random_int ($i, $length-1);
my $tmp = substr($string, $i, 1);
substr($string, $i, 1) = substr($string, $j, 1);
substr($string, $j, 1) = $tmp;
}
return $string;
}
# created random int between two parameters
sub random_int
{
(my $par1, my $par2) = @_;
my $num = (1+$par1) + int(rand($par2 - $par1));
}
# aligns base pairs based on index location
sub make_base_pairs
{
(my @orig, my @shuf) = @_;
my $idx = 0;
my @bps;
foreach my $base (@orig)
{
push @bps, $base , $shuf[$idx];
$idx++;
}
return @bps;
}
Что вы сделали для отладки вашей программы? – Mort
'использование предупреждений;' еще важнее, чем строгий. – ysth