Class: HTS::Bam
- Includes:
- Enumerable
- Defined in:
- lib/hts/bam.rb,
lib/hts/bam/auxi.rb,
lib/hts/bam/flag.rb,
lib/hts/bam/cigar.rb,
lib/hts/bam/header.rb,
lib/hts/bam/record.rb,
lib/hts/bam/header_record.rb
Overview
A class for working with SAM, BAM, CRAM files.
Defined Under Namespace
Classes: Aux, Cigar, Flag, Header, HeaderRecord, Record
Instance Attribute Summary collapse
-
#file_name ⇒ Object
readonly
Returns the value of attribute file_name.
-
#header ⇒ Object
Returns the value of attribute header.
-
#index_name ⇒ Object
readonly
Returns the value of attribute index_name.
-
#mode ⇒ Object
readonly
Returns the value of attribute mode.
-
#nthreads ⇒ Object
readonly
Returns the value of attribute nthreads.
Class Method Summary collapse
Instance Method Summary collapse
- #<<(record) ⇒ Object
-
#aux(tag) ⇒ Object
FXIME: experimental.
- #build_index(index_name = nil, min_shift: 0, threads: 2) ⇒ Object
-
#chrom ⇒ Array
Get chrom array.
-
#cigar ⇒ Array
Get cigar array.
- #close ⇒ Object
- #each(copy: false, &block) ⇒ Object
-
#each_aux(tag) ⇒ Object
FIXME: experimental.
-
#each_chrom ⇒ Object
Get chrom iterator.
-
#each_cigar ⇒ Object
Get cigar iterator.
-
#each_flag ⇒ Object
Get flag iterator.
-
#each_insert_size ⇒ Object
(also: #each_isize)
Get insert_size iterator.
-
#each_mapq ⇒ Object
Get mapq iterator.
-
#each_mate_chrom ⇒ Object
Get mate_chrom iterator.
-
#each_mate_pos ⇒ Object
(also: #each_mpos)
Get mate_pos iterator.
-
#each_pos ⇒ Object
Get pos iterator.
-
#each_qname ⇒ Object
Get qname iterator.
-
#each_qual ⇒ Object
Get qual iterator.
-
#each_seq ⇒ Object
Get seq iterator.
-
#flag ⇒ Array
Get flag array.
- #index_loaded? ⇒ Boolean
-
#initialize(file_name, mode = "r", index: nil, fai: nil, threads: nil, build_index: false) ⇒ Bam
constructor
A new instance of Bam.
-
#insert_size ⇒ Array
(also: #isize)
Get insert_size array.
- #load_index(index_name = nil) ⇒ Object
-
#mapq ⇒ Array
Get mapq array.
-
#mate_chrom ⇒ Array
Get mate_chrom array.
-
#mate_pos ⇒ Array
(also: #mpos)
Get mate_pos array.
-
#pos ⇒ Array
Get pos array.
-
#qname ⇒ Array
Get qname array.
-
#qual ⇒ Array
Get qual array.
- #query(region, beg = nil, end_ = nil, copy: false, &block) ⇒ Object
-
#seq ⇒ Array
Get seq array.
- #write(record) ⇒ Object
- #write_header(header) ⇒ Object
Methods inherited from Hts
#closed?, #fai=, #file_format, #file_format_version, #rewind, #seek, #set_threads, #struct, #tell, #to_ptr
Constructor Details
#initialize(file_name, mode = "r", index: nil, fai: nil, threads: nil, build_index: false) ⇒ Bam
Returns a new instance of Bam.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/hts/bam.rb', line 30 def initialize(file_name, mode = "r", index: nil, fai: nil, threads: nil, build_index: false) if block_given? = "HTS::Bam.new() dose not take block; Please use HTS::Bam.open() instead" raise 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 = mode @nthreads = threads @hts_file = LibHTS.hts_open(@file_name, mode) raise Errno::ENOENT, "Failed to open #{@file_name}" if @hts_file.null? if fai r = LibHTS.hts_set_fai_filename(@hts_file, fai) raise "Failed to load fasta index: #{fai}" if r < 0 end set_threads(threads) if threads return if @mode[0] == "w" @header = Bam::Header.new(@hts_file) build_index(index) if build_index @idx = load_index(index) @start_position = tell end |
Instance Attribute Details
#file_name ⇒ Object (readonly)
Returns the value of attribute file_name.
16 17 18 |
# File 'lib/hts/bam.rb', line 16 def file_name @file_name end |
#header ⇒ Object
Returns the value of attribute header.
16 17 18 |
# File 'lib/hts/bam.rb', line 16 def header @header end |
#index_name ⇒ Object (readonly)
Returns the value of attribute index_name.
16 17 18 |
# File 'lib/hts/bam.rb', line 16 def index_name @index_name end |
#mode ⇒ Object (readonly)
Returns the value of attribute mode.
16 17 18 |
# File 'lib/hts/bam.rb', line 16 def mode @mode end |
#nthreads ⇒ Object (readonly)
Returns the value of attribute nthreads.
16 17 18 |
# File 'lib/hts/bam.rb', line 16 def nthreads @nthreads end |
Class Method Details
.open(*args, **kw) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/hts/bam.rb', line 18 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
#<<(record) ⇒ Object
121 122 123 |
# File 'lib/hts/bam.rb', line 121 def <<(record) write(record) end |
#aux(tag) ⇒ Object
FXIME: experimental
145 146 147 148 149 150 151 152 |
# File 'lib/hts/bam.rb', line 145 def aux(tag) check_closed position = tell ary = map { |r| r.aux(tag) } seek(position) ary end |
#build_index(index_name = nil, min_shift: 0, threads: 2) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/hts/bam.rb', line 62 def build_index(index_name = nil, min_shift: 0, threads: 2) check_closed if index_name warn "Create index for #{@file_name} to #{index_name}" else warn "Create index for #{@file_name}" end case LibHTS.sam_index_build3(@file_name, index_name, min_shift, (@nthreads || threads)) when 0 # successful when -1 then raise "indexing failed" when -2 then raise "opening #{@file_name} failed" when -3 then raise "format not indexable" when -4 then raise "failed to create and/or save the index" else raise "unknown error" end self # for method chaining end |
#chrom ⇒ Array
Get chrom array
131 |
# File 'lib/hts/bam.rb', line 131 define_getter :chrom |
#cigar ⇒ Array
Get cigar array
134 |
# File 'lib/hts/bam.rb', line 134 define_getter :cigar |
#close ⇒ Object
97 98 99 100 101 |
# File 'lib/hts/bam.rb', line 97 def close LibHTS.hts_idx_destroy(@idx) if @idx&.null? @idx = nil super end |
#each(copy: false, &block) ⇒ Object
184 185 186 187 188 189 190 |
# File 'lib/hts/bam.rb', line 184 def each(copy: false, &block) if copy each_record_copy(&block) else each_record_reuse(&block) end end |
#each_aux(tag) ⇒ Object
FIXME: experimental
173 174 175 176 177 178 179 180 181 182 |
# File 'lib/hts/bam.rb', line 173 def each_aux(tag) check_closed return to_enum(__method__, tag) unless block_given? each do |record| yield record.aux(tag) end self end |
#each_chrom ⇒ Object
Get chrom iterator
159 |
# File 'lib/hts/bam.rb', line 159 define_iterator :chrom |
#each_cigar ⇒ Object
Get cigar iterator
162 |
# File 'lib/hts/bam.rb', line 162 define_iterator :cigar |
#each_flag ⇒ Object
Get flag iterator
158 |
# File 'lib/hts/bam.rb', line 158 define_iterator :flag |
#each_insert_size ⇒ Object Also known as: each_isize
Get insert_size iterator
165 |
# File 'lib/hts/bam.rb', line 165 define_iterator :insert_size |
#each_mapq ⇒ Object
Get mapq iterator
161 |
# File 'lib/hts/bam.rb', line 161 define_iterator :mapq |
#each_mate_chrom ⇒ Object
Get mate_chrom iterator
163 |
# File 'lib/hts/bam.rb', line 163 define_iterator :mate_chrom |
#each_mate_pos ⇒ Object Also known as: each_mpos
Get mate_pos iterator
164 |
# File 'lib/hts/bam.rb', line 164 define_iterator :mate_pos |
#each_pos ⇒ Object
Get pos iterator
160 |
# File 'lib/hts/bam.rb', line 160 define_iterator :pos |
#each_qname ⇒ Object
Get qname iterator
157 |
# File 'lib/hts/bam.rb', line 157 define_iterator :qname |
#each_qual ⇒ Object
Get qual iterator
167 |
# File 'lib/hts/bam.rb', line 167 define_iterator :qual |
#each_seq ⇒ Object
Get seq iterator
166 |
# File 'lib/hts/bam.rb', line 166 define_iterator :seq |
#flag ⇒ Array
Get flag array
130 |
# File 'lib/hts/bam.rb', line 130 define_getter :flag |
#index_loaded? ⇒ Boolean
91 92 93 94 95 |
# File 'lib/hts/bam.rb', line 91 def index_loaded? check_closed !@idx.null? end |
#insert_size ⇒ Array Also known as: isize
Get insert_size array
137 |
# File 'lib/hts/bam.rb', line 137 define_getter :insert_size |
#load_index(index_name = nil) ⇒ Object
81 82 83 84 85 86 87 88 89 |
# File 'lib/hts/bam.rb', line 81 def load_index(index_name = nil) check_closed if index_name LibHTS.sam_index_load2(@hts_file, @file_name, index_name) else LibHTS.sam_index_load3(@hts_file, @file_name, nil, 2) # should be 3 ? (copy remote file to local?) end end |
#mapq ⇒ Array
Get mapq array
133 |
# File 'lib/hts/bam.rb', line 133 define_getter :mapq |
#mate_chrom ⇒ Array
Get mate_chrom array
135 |
# File 'lib/hts/bam.rb', line 135 define_getter :mate_chrom |
#mate_pos ⇒ Array Also known as: mpos
Get mate_pos array
136 |
# File 'lib/hts/bam.rb', line 136 define_getter :mate_pos |
#pos ⇒ Array
Get pos array
132 |
# File 'lib/hts/bam.rb', line 132 define_getter :pos |
#qname ⇒ Array
Get qname array
129 |
# File 'lib/hts/bam.rb', line 129 define_getter :qname |
#qual ⇒ Array
Get qual array
139 |
# File 'lib/hts/bam.rb', line 139 define_getter :qual |
#query(region, beg = nil, end_ = nil, copy: false, &block) ⇒ Object
192 193 194 195 196 197 198 199 200 201 202 203 204 |
# File 'lib/hts/bam.rb', line 192 def query(region, beg = nil, end_ = nil, copy: false, &block) check_closed raise "Index file is required to call the query method." unless index_loaded? if beg && end_ tid = header.get_tid(region) queryi(tid, beg, end_, copy:, &block) elsif beg.nil? && end_.nil? querys(region, copy:, &block) else raise ArgumentError, "beg and end_ must be specified together" end end |
#seq ⇒ Array
Get seq array
138 |
# File 'lib/hts/bam.rb', line 138 define_getter :seq |
#write(record) ⇒ Object
114 115 116 117 118 119 |
# File 'lib/hts/bam.rb', line 114 def write(record) check_closed r = LibHTS.sam_write1(@hts_file, header, record) raise "Failed to write record" if r < 0 end |
#write_header(header) ⇒ Object
103 104 105 106 107 108 |
# File 'lib/hts/bam.rb', line 103 def write_header(header) check_closed @header = header.dup LibHTS.sam_hdr_write(@hts_file, header) end |