Class: FastaFile

Inherits:
File
  • Object
show all
Defined in:
lib/parse_fasta/fasta_file.rb

Overview

Provides simple interface for parsing fasta format files. Gzipped files are no problem.

Instance Method Summary collapse

Instance Method Details

#each_record(separate_lines = nil) {|header, sequence| ... } ⇒ Object

Analagous to IO#each_line, #each_record is used to go through a fasta file record by record. It will accept gzipped files as well.

Examples:

Parsing a fasta file (default behavior, gzip files are fine)

FastaFile.open('reads.fna.gz').each_record do |header, sequence|
  puts [header, sequence.gc].join("\t")
end

Parsing a fasta file (with truthy value param)

FastaFile.open('reads.fna').each_record(1) do |header, sequence|
  # header => 'sequence_1'
  # sequence => ['AACTG', 'AGTCGT', ... ]
end

Parameters:

  • separate_lines (Object) (defaults to: nil) —

    If truthy, separate lines of record into an array of Sequences, but if falsy, yield a Sequence object for the sequence instead.

Yields:

  • The header and sequence for each record in the fasta file to the block

Yield Parameters:

  • header (String) —

    The header of the fasta record without the leading '>'

  • sequence (Sequence, Array<Sequence>) —

    The sequence of the fasta record. If separate_lines is falsy (the default behavior), will be Sequence, but if truthy will be Array.



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/parse_fasta/fasta_file.rb', line 53

def each_record(separate_lines=nil)
  begin
    f = Zlib::GzipReader.open(self)
  rescue Zlib::GzipFile::Error => e
    f = self
  end      

  if separate_lines
    f.each("\n>") do |line|
      header, sequence = parse_line_separately(line)
      yield(header.strip, sequence)
    end
  else
    f.each("\n>") do |line| 
      header, sequence = parse_line(line)
      yield(header.strip, Sequence.new(sequence))
    end
  end

  f.close if f.instance_of?(Zlib::GzipReader)
  return f
end