Class: HTS::Tabix

Inherits:
Hts
  • Object
show all
Includes:
Enumerable
Defined in:
lib/hts/tabix.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Hts

#close, #closed?, #fai=, #file_format, #file_format_version, #rewind, #seek, #set_threads, #struct, #tell, #to_ptr

Constructor Details

#initialize(file_name, index: nil, threads: nil, build_index: false) ⇒ Tabix

Returns a new instance of Tabix.

Raises:

  • (Errno::ENOENT)


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/hts/tabix.rb', line 25

def initialize(file_name, index: nil, threads: nil, build_index: false)
  if block_given?
    message = "HTS::Tabix.new() dose not take block; Please use HTS::Tabix.open() instead"
    raise message
  end

  # NOTE: Do not check for the existence of local files, since file_names may be remote URIs.

  @file_name  = file_name
  @index_name = index
  @mode       = "r"
  @nthreads   = threads
  @hts_file   = LibHTS.hts_open(@file_name, @mode)

  raise Errno::ENOENT, "Failed to open #{@file_name}" if @hts_file.null?

  set_threads(threads) if threads

  # build_index(index) if build_index
  @idx = load_index(index)
end

Instance Attribute Details

#file_nameObject (readonly)

Returns the value of attribute file_name.



11
12
13
# File 'lib/hts/tabix.rb', line 11

def file_name
  @file_name
end

#index_nameObject (readonly)

Returns the value of attribute index_name.



11
12
13
# File 'lib/hts/tabix.rb', line 11

def index_name
  @index_name
end

#modeObject (readonly)

Returns the value of attribute mode.



11
12
13
# File 'lib/hts/tabix.rb', line 11

def mode
  @mode
end

#nthreadsObject (readonly)

Returns the value of attribute nthreads.



11
12
13
# File 'lib/hts/tabix.rb', line 11

def nthreads
  @nthreads
end

Class Method Details

.open(*args, **kw) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/hts/tabix.rb', line 13

def self.open(*args, **kw)
  file = new(*args, **kw) # do not yield
  return file unless block_given?

  begin
    yield file
  ensure
    file.close
  end
  file
end

Instance Method Details

#build_indexObject



47
48
49
# File 'lib/hts/tabix.rb', line 47

def build_index
  raise "Not implemented yet"
end

#index_loaded?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/hts/tabix.rb', line 59

def index_loaded?
  !@idx.null?
end

#load_index(index_name = nil) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/hts/tabix.rb', line 51

def load_index(index_name = nil)
  if index_name
    LibHTS.tbx_index_load2(@file_name, index_name)
  else
    LibHTS.tbx_index_load3(@file_name, nil, 2)
  end
end

#name2id(name) ⇒ Object



63
64
65
# File 'lib/hts/tabix.rb', line 63

def name2id(name)
  LibHTS.tbx_name2id(@idx, name)
end

#query(region, start = nil, end_ = nil, &block) ⇒ Object



74
75
76
77
78
79
80
81
82
83
# File 'lib/hts/tabix.rb', line 74

def query(region, start = nil, end_ = nil, &block)
  check_closed
  raise "Index file is required to call the query method." unless index_loaded?

  if start && end_
    queryi(name2id(region), start, end_, &block)
  else
    querys(region, &block)
  end
end

#seqnamesObject



67
68
69
70
71
72
# File 'lib/hts/tabix.rb', line 67

def seqnames
  nseq = FFI::MemoryPointer.new(:int)
  LibHTS.tbx_seqnames(@idx, nseq).then do |pts|
    pts.read_array_of_pointer(nseq.read_int).map(&:read_string)
  end
end