[Bioperl-l] Bug in method "slice" of Bio::SimpleAlign

phil- phil- at 126.com
Sat Sep 16 09:25:29 EDT 2006


Hi there,

part of the original code of Bio::SimpleAlign, which caculate the start and end of the sliced LocatableSeq

	my $slice_seq = $seq->subseq($start, $seq_end);
	$new_seq->seq( $slice_seq );
	# start
	if ($start > 1) {
	    my $pre_start_seq = $seq->subseq(1, $start - 1);
	    $pre_start_seq =~ s/\W//g; #print "$pre_start_seq\n";
	    $new_seq->start( $seq->start + CORE::length($pre_start_seq)  );
	} else {
	    $new_seq->start( $seq->start);
	}

	# end
	$slice_seq =~ s/\W//g;
	$new_seq->end( $new_seq->start + CORE::length($slice_seq) - 1 );
 And I think there is something wrong when we have a LocatableSeq which in its negative strand.
 In my opinion it should change to this

        my $slice_seq = $seq->subseq($start, $seq_end);
        $new_seq->seq( $slice_seq );

        $slice_seq =~ s/\W//g;
        
        if ($start > 1) {
            my $pre_start_seq = $seq->subseq(1, $start - 1);
            $pre_start_seq =~ s/\W//g;
            if ($seq->strand > 0){
                $new_seq->start( $seq->start + CORE::length($pre_start_seq) );
            } else {
                $new_seq->start( $seq->end - CORE::length($pre_start_seq) - CORE::length($slice_seq) + 1);
            }
        } else {
            $new_seq->start( $seq->start);
        }
        $new_seq->end( $new_seq->start + CORE::length($slice_seq) - 1 );

Maybe my code still needs optimization, and I don't know how to distribute it to the CVS. So please help ^_^

Philip Young
GuangZhou, China
2006-9-16
   


More information about the Bioperl-l mailing list