Merge branch 'JABAWS_Release_2_5' into develop
[jabaws.git] / binaries / src / jpred / lib / FASTA / File.pm
diff --git a/binaries/src/jpred/lib/FASTA/File.pm b/binaries/src/jpred/lib/FASTA/File.pm
new file mode 100644 (file)
index 0000000..ddf639d
--- /dev/null
@@ -0,0 +1,71 @@
+package FASTA::File;
+
+use strict;
+use warnings;
+use Carp;
+
+use base qw(Sequence::File);
+use FASTA;
+
+sub old_read {
+  my ( $self, $fh ) = @_;
+
+  my ( $id, $seq, @seqs );
+  while (<$fh>) {
+    chomp;
+    next if /^\s+$/;
+
+    if (s/^>//) {
+      push @seqs, [ $id, $seq ] if $id and $seq;
+      $seq = undef;
+      $id  = $_;
+    } else {
+      $seq .= $_;
+    }
+  }
+  push @seqs, [ $id, $seq ] if $id and $seq;
+
+  for (@seqs) {
+    my $new = FASTA->new( id => ${$_}[0] );
+    $new->seq( split //, ${$_}[1] );
+    $self->add_entries($new);
+  }
+
+  1;
+}
+
+sub read {
+  my ( $self, $fh ) = @_;
+  local $/ = "\n>";
+  while (<$fh>) {
+    s/^>//g;
+    s/>$//g;
+
+    my ( $id, @data ) = split /\n/, $_;
+    my $entry = FASTA->new( id => $id );
+    $entry->seq( split //, join( "", @data ) );
+
+    $self->add_entries($entry);
+  }
+
+  1;
+}
+
+sub write {
+  my ( $self, $fh ) = @_;
+
+  local $| = 1;
+
+  for ( $self->get_entries ) {
+    my $id  = $_->id;
+    my @seq = $_->seq;
+
+    my $seq = join '', @seq;
+    $seq =~ s/\s*//g;
+    $seq =~ s/(.{72})/$1\n/g;
+
+    print $fh ">$id\n$seq\n";
+  }
+}
+
+1;