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
25 @ex_if_name_too_long = false
29 def set_line_width( line_width = LINE_WIDTH_DEFAULT )
31 line_width = LINE_WIDTH_DEFAULT
33 @line_width = line_width
36 def set_max_name_length( length = MAX_NAME_LENGTH_DEFAULT )
38 length = MAX_NAME_LENGTH_DEFAULT
40 @max_name_length = length
43 def remove_gap_chars( remove_gap_chars = true )
44 @remove_gap_chars = remove_gap_chars
47 def clean( clean = true )
51 def set_exception_if_name_too_long( exception_if_name_too_long )
52 @ex_if_name_too_long = exception_if_name_too_long
55 def write( msa, path )
56 Util.check_file_for_writability( path )
57 f = File.open( path, "a" )
58 for i in 0 ... msa.get_number_of_seqs()
59 seq_obj = msa.get_sequence( i )
60 name = seq_obj.get_name()
62 if ( @max_name_length != MAX_NAME_LENGTH_DEFAULT )
63 name = Util.normalize_seq_name( name, @max_name_length, @ex_if_name_too_long )
67 for j in 0 ... seq_obj.get_length()
68 unless @remove_gap_chars && Util.is_aa_gap_character?( seq_obj.get_character_code( j ) )
69 char = seq_obj.get_residue( j )
71 char = Util.clean_seq_str( char )
72 if ( char.length < 1 )
76 if counter % @line_width == 0
77 f.print( Evoruby::Constants::LINE_DELIMITER )
83 f.print( Evoruby::Constants::LINE_DELIMITER )
88 end # class FastaWriter