2 # = lib/evo/io/writer/fasta_writer.rb - FastaWriter class
4 # Copyright:: Copyright (C) 2006-2007 Christian M. Zmasek
5 # License:: GNU Lesser General Public License (LGPL)
7 # $Id: fasta_writer.rb,v 1.6 2008/09/12 23:52:11 cmzmasek Exp $
9 # last modified: 05/16/2007
11 require 'lib/evo/io/writer/msa_writer'
15 class FastaWriter < MsaWriter
17 LINE_WIDTH_DEFAULT = 60
18 MAX_NAME_LENGTH_DEFAULT = 0
21 @line_width = LINE_WIDTH_DEFAULT
22 @max_name_length = MAX_NAME_LENGTH_DEFAULT
23 @remove_gap_chars = false
28 def set_line_width( line_width = LINE_WIDTH_DEFAULT )
30 line_width = LINE_WIDTH_DEFAULT
32 @line_width = line_width
35 def set_max_name_length( length = MAX_NAME_LENGTH_DEFAULT )
37 length = MAX_NAME_LENGTH_DEFAULT
39 @max_name_length = length
42 def remove_gap_chars( remove_gap_chars = true )
43 @remove_gap_chars = remove_gap_chars
46 def clean( clean = true )
50 def write( msa, path )
51 Util.check_file_for_writability( path )
52 f = File.open( path, "a" )
53 for i in 0 ... msa.get_number_of_seqs()
54 seq_obj = msa.get_sequence( i )
55 name = seq_obj.get_name()
57 if ( @max_name_length != MAX_NAME_LENGTH_DEFAULT )
58 name = Util.normalize_seq_name( name, @max_name_length )
62 for j in 0 ... seq_obj.get_length()
63 unless @remove_gap_chars && Util.is_aa_gap_character?( seq_obj.get_character_code( j ) )
64 char = seq_obj.get_residue( j )
66 char = Util.clean_seq_str( char )
67 if ( char.length < 1 )
71 if counter % @line_width == 0
72 f.print( Evoruby::Constants::LINE_DELIMITER )
78 f.print( Evoruby::Constants::LINE_DELIMITER )
83 end # class FastaWriter