if( $self->{'_seq'}->{$name} ) { $self->warn("Replacing one sequence [$name]\n") unless $self->verbose < 0; }
####
hit1_AM161438.1_1-497/20-516 gAGAAACCCUGGAA
hit1_AM161438.1_1-497/1-1:497-993 gGAAAAUCCGUCGA
hit1_EF374296.1_1-432/1-432 uauGGAAACWUACU
hit1_EF374296.1_1-432/1-1:432-863 UGAAAAUCCGUCGA
hit1_EF374296.1_509-949/509-509:949-1389 GGAAAAUCCGUCGA
hit1_EF374296.1_509-949/938-1382 AUAGUAAGAGGAAA
hit1_EF374297.1_30-470/30-30:470-910 GGAAAAUCCGUCGA
####
-------------------- WARNING ---------------------
MSG: Replacing one sequence [hit1_EF374296.1_1-432/1-432]
---------------------------------------------------
####
use strict;
use warnings;
use MyAlign;
my $aln = new MyAlign;
open ( ALIGN, " read_alignment ( \*ALIGN );
close ALIGN;
####
use Bio::SimpleAlign;
sub new {
my $caller = shift;
my $class = ref( $caller ) || $caller;
my $self = $class -> SUPER::new();
return $self;
}
sub read_alignment {
my $self = shift;
my $in = shift;
my( %align, %c2name, $count );
while( <$in> ) {
/^([^\#]\S+)\s+([A-Za-z\.\-]+)\s*/ && do {
my $name = $1;
my $seq = $2;
if( ! defined $align{$name} ) {
$count++;
$c2name{$count} = $name;
}
$align{$name} .= $seq;
next;
};
}
$count = 0;
foreach my $no ( sort { $a <=> $b } keys %c2name ) {
my $name = $c2name{$no};
my( $seqname, $start, $end, $strand );
if( $name =~ /(\S+)\/(\d+)-(\d+)$/ ) {
$seqname = $1; $start = $2; $end = $3;
} elsif ( $name =~ /(\S+)\/(\d+)-(\d+):(\d+)-(\d+)/ ) {
$seqname = $1; my $ns = $2; my $s = $3; my $e = $4; my $ne = $5;
$start = "$ns-$s"; $end = "$e-$ne"; # surprise: this is legal
$strand = 1;
}
my $seq = new Bio::LocatableSeq( '-seq'=>$align{$name}, '-id'=>$seqname,
'-start'=>$start, '-end'=>$end, '-strand'=>$strand, '-type'=>'aligned' );
$self -> add_seq($seq);
$count++;
}
return $count;
}