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
|