Method: HTS::Faidx#fetch_seq

Defined in:
lib/hts/faidx.rb

#seq(name) ⇒ Object #seq(name, start, stop) ⇒ String Also known as: seq

Overloads:

  • #seq(name) ⇒ Object

    Fetch the sequence as a String.

    Parameters:

    • name (String)

      chr1:0-10

  • #seq(name, start, stop) ⇒ String

    Fetch the sequence as a String.

    Parameters:

    • name (String)

      the name of the chromosome

    • start (Integer)

      the start position of the sequence (0-based)

    • stop (Integer)

      the end position of the sequence (0-based)

    Returns:

    • (String)

      the sequence

[View source]

106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/hts/faidx.rb', line 106

def fetch_seq(name, start = nil, stop = nil)
  name = name.to_s
  rlen = FFI::MemoryPointer.new(:int)

  if start.nil? && stop.nil?
    result = LibHTS.fai_fetch64(@fai, name, rlen)
  else
    start < 0    && raise(ArgumentError, "Expect start to be >= 0")
    stop  < 0    && raise(ArgumentError, "Expect stop to be >= 0")
    start > stop && raise(ArgumentError, "Expect start to be <= stop")
    stop >= seq_len(name) && raise(ArgumentError, "Expect stop to be < seq_len")

    result = LibHTS.faidx_fetch_seq64(@fai, name, start, stop, rlen)
  end

  case rlen.read_int
  when -2 then raise "Invalid chromosome name: #{name}"
  when -1 then raise "Error fetching sequence: #{name}:#{start}-#{stop}"
  end

  result
end