From ed50c2d080eb8a787af98b93b174f6908ef86f39 Mon Sep 17 00:00:00 2001 From: Kieron Taylor <ktaylor@ebi.ac.uk> Date: Mon, 16 Jan 2012 17:33:04 +0000 Subject: [PATCH] Minor nomenclature tweaks, and better support for Bio::Seq objects --- .../Bio/EnsEMBL/Utils/IO/FASTASerializer.pm | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/modules/Bio/EnsEMBL/Utils/IO/FASTASerializer.pm b/modules/Bio/EnsEMBL/Utils/IO/FASTASerializer.pm index 576858a829..cf38728575 100644 --- a/modules/Bio/EnsEMBL/Utils/IO/FASTASerializer.pm +++ b/modules/Bio/EnsEMBL/Utils/IO/FASTASerializer.pm @@ -27,7 +27,7 @@ Bio::EnsEMBL::Utils::IO::FASTASerializer my $serializer = Bio::EnsEMBL::Utils::IO::FASTASerializer->new($filehandle); $serializer->chunk_factor(1000); $serializer->line_width(60); - $serializer->print_Slice($slice); + $serializer->print_Seq($slice); $serializer = Bio::EnsEMBL::Utils::IO::FASTASerializer->new($filehandle, sub { @@ -35,8 +35,6 @@ Bio::EnsEMBL::Utils::IO::FASTASerializer return ">Custom header"; } ); - $serializer->print_metadata($slice); - $serializer->print_Slice($slice,"no duplicate headers please"); =head1 DESCRIPTION @@ -56,6 +54,7 @@ package Bio::EnsEMBL::Utils::IO::FASTASerializer; use strict; use warnings; use Bio::EnsEMBL::Utils::Exception; +use Bio::EnsEMBL::Utils::Scalar qw/assert_ref check_ref/; use base qw(Bio::EnsEMBL::Utils::IO::Serializer); @@ -93,13 +92,21 @@ sub new { else { $self->{'header_function'} = sub { my $slice = shift; - my $id = $slice->seq_region_name; - my $seqtype = 'dna'; - my $idtype = $slice->coord_system->name; - my $location = $slice->name; - return ">$id $seqtype:$idtype $location\n"; - } + if(check_ref($slice, 'Bio::EnsEMBL::Slice')) { + my $id = $slice->seq_region_name; + my $seqtype = 'dna'; + my $idtype = $slice->coord_system->name; + my $location = $slice->name; + + return ">$id $seqtype:$idtype $location"; + } + else { + # must be a Bio::Seq , or we're doomed + + return ">".$slice->name; + } + }; } @@ -118,31 +125,28 @@ sub print_metadata { my $self = shift; my $slice = shift; my $fh = $self->{'filehandle'}; - my $metadata = &{$self->{'header_function'}}($slice); - print $fh $metadata; + my $metadata = $self->{'header_function'}->($slice); + print $fh $metadata."\n"; } -=head2 print_slice +=head2 print_Seq Arg [1] : Bio::EnsEMBL::Slice or other Bio::PrimarySeqI compliant object - Arg [2] : Optional Boolean - override the default serialisation of a header + Description: Serializes the slice into FASTA format. Buffering is used While other Bioperl PrimarySeqI implementations can be used, a custom header function will be required to accommodate it. - Add an override as second argument if more control is needed - over when and how custom headers are written. Returntype : None =cut -sub print_Slice { +sub print_Seq { my $self = shift; my $slice = shift; - my $override = shift; my $fh = $self->{'filehandle'}; - # Default print header, override - $self->print_metadata($slice) unless $override; + + $self->print_metadata($slice); # set buffer size my $chunk_size = $self->{'chunk_factor'} * $self->{'line_width'}; -- GitLab