Class: HTS::Bam::Record
- Inherits:
-
Object
- Object
- HTS::Bam::Record
- Defined in:
- lib/hts/bam/record.rb
Constant Summary collapse
- SEQ_NT16_STR =
"=ACMGRSVTWYHKDBN"
Instance Attribute Summary collapse
-
#header ⇒ Object
readonly
Returns the value of attribute header.
Instance Method Summary collapse
- #aux(key = nil) ⇒ Object
- #base(index) ⇒ Object (also: #base_at)
- #base_mod(auto_parse: true) ⇒ Object
- #base_qual(index) ⇒ Object (also: #qual_at)
- #bin ⇒ Object
- #bin=(value) ⇒ Object
- #chrom ⇒ Object (also: #contig)
- #chrom=(name) ⇒ Object (also: #contig=)
- #cigar ⇒ Object
- #cigar=(value) ⇒ Object
- #each_base(&block) ⇒ Object
- #each_base_code(&block) ⇒ Object
- #each_base_mod_raw(max_mods: 10, &block) ⇒ Object
- #each_cigar_raw ⇒ Object
- #each_qual(&block) ⇒ Object
- #endpos ⇒ Object
- #flag ⇒ Object
- #flag=(value) ⇒ Object
- #flag_value ⇒ Object
-
#initialize(header, native_record = nil, qname: "*", flag: 0, tid: nil, chrom: nil, pos: -1,, mapq: 0, cigar: nil, mtid: nil, mate_chrom: nil, mate_pos: -1,, insert_size: 0, seq: UNSET, sequence: UNSET, qual: UNSET, qualities: UNSET, quality_string: UNSET, aux: nil) ⇒ Record
constructor
Build a BAM record from Ruby values.
- #insert_size ⇒ Object (also: #isize)
- #insert_size=(value) ⇒ Object (also: #isize=)
- #len ⇒ Object
- #mapq ⇒ Object
- #mapq=(value) ⇒ Object
- #mate_chrom ⇒ Object (also: #mate_contig)
- #mate_chrom=(name) ⇒ Object (also: #mate_contig=)
- #mate_pos ⇒ Object (also: #mpos)
- #mate_pos=(value) ⇒ Object (also: #mpos=)
- #mate_strand ⇒ Object
- #mtid ⇒ Object
- #mtid=(value) ⇒ Object
- #pos ⇒ Object
- #pos=(value) ⇒ Object
- #qlen ⇒ Object
- #qname ⇒ Object
- #qname=(name) ⇒ Object
- #qual ⇒ Object
- #qual_string ⇒ Object
- #rlen ⇒ Object
- #seq ⇒ Object (also: #sequence)
- #strand ⇒ Object
- #tid ⇒ Object
- #tid=(value) ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(header, native_record = nil, qname: "*", flag: 0, tid: nil, chrom: nil, pos: -1,, mapq: 0, cigar: nil, mtid: nil, mate_chrom: nil, mate_pos: -1,, insert_size: 0, seq: UNSET, sequence: UNSET, qual: UNSET, qualities: UNSET, quality_string: UNSET, aux: nil) ⇒ Record
Build a BAM record from Ruby values. Coordinates are zero-based, matching
the rest of this API. qualities is an Array of numeric Phred scores;
use quality_string for a FASTQ/SAM-style Phred+33 String.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/hts/bam/record.rb', line 18 def initialize(header, native_record = nil, qname: "*", flag: 0, tid: nil, chrom: nil, pos: -1, mapq: 0, cigar: nil, mtid: nil, mate_chrom: nil, mate_pos: -1, insert_size: 0, seq: UNSET, sequence: UNSET, qual: UNSET, qualities: UNSET, quality_string: UNSET, aux: nil) @native = native_record || Native::BamRecordHandle.create @header = header return if native_record sequence = normalize_sequence(seq, sequence) qualities = normalize_qualities(qual, qualities, quality_string, sequence.bytesize) cigar_values = normalize_cigar(cigar) validate_cigar_length!(cigar_values, sequence) @native.replace( normalize_qname(qname), normalize_flag(flag), resolve_tid(tid, chrom, "chrom"), normalize_position(pos, "pos"), normalize_mapq(mapq), cigar_values, resolve_tid(mtid, mate_chrom, "mate_chrom"), normalize_position(mate_pos, "mate_pos"), Integer(insert_size), sequence, qualities ) assign_aux(aux) if aux end |
Instance Attribute Details
#header ⇒ Object (readonly)
Returns the value of attribute header.
13 14 15 |
# File 'lib/hts/bam/record.rb', line 13 def header @header end |
Instance Method Details
#aux(key = nil) ⇒ Object
179 180 181 182 |
# File 'lib/hts/bam/record.rb', line 179 def aux(key = nil) accessor = (@aux_accessor ||= Aux.new(self)) key ? accessor.get(key) : accessor end |
#base(index) ⇒ Object Also known as: base_at
145 146 147 148 149 |
# File 'lib/hts/bam/record.rb', line 145 def base(index) index += len if index.negative? code = @native.base_code(index) code ? SEQ_NT16_STR[code] : "." end |
#base_mod(auto_parse: true) ⇒ Object
184 |
# File 'lib/hts/bam/record.rb', line 184 def base_mod(auto_parse: true) = BaseMod.new(self, auto_parse:) |
#base_qual(index) ⇒ Object Also known as: qual_at
162 163 164 165 |
# File 'lib/hts/bam/record.rb', line 162 def base_qual(index) index += len if index.negative? @native.quality_at(index) || 0 end |
#bin ⇒ Object
71 |
# File 'lib/hts/bam/record.rb', line 71 def bin = core_get(:bin) |
#bin=(value) ⇒ Object
73 74 75 |
# File 'lib/hts/bam/record.rb', line 73 def bin=(value) core_set(:bin, value) end |
#chrom ⇒ Object Also known as: contig
79 80 81 82 83 |
# File 'lib/hts/bam/record.rb', line 79 def chrom return "" if tid == -1 @header.__send__(:native_handle).target_name(tid) end |
#chrom=(name) ⇒ Object Also known as: contig=
85 86 87 |
# File 'lib/hts/bam/record.rb', line 85 def chrom=(name) self.tid = resolve_tid(nil, name, "chrom") end |
#cigar=(value) ⇒ Object
118 119 120 121 122 |
# File 'lib/hts/bam/record.rb', line 118 def cigar=(value) raise ArgumentError, "cigar must be a String or Bam::Cigar" unless value.is_a?(String) || value.is_a?(Cigar) @native.cigar = value.to_s end |
#each_base(&block) ⇒ Object
129 130 131 132 133 134 |
# File 'lib/hts/bam/record.rb', line 129 def each_base(&block) return to_enum(__method__) unless block_given? seq.each_char(&block) self end |
#each_base_code(&block) ⇒ Object
136 137 138 139 140 141 |
# File 'lib/hts/bam/record.rb', line 136 def each_base_code(&block) return to_enum(__method__) unless block_given? @native.sequence_codes.each(&block) self end |
#each_base_mod_raw(max_mods: 10, &block) ⇒ Object
186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/hts/bam/record.rb', line 186 def each_base_mod_raw(max_mods: 10, &block) return enum_for(__method__, max_mods:) unless block mods = BaseMod.new(self) begin mods.each_raw(max_mods:, &block) ensure mods.close end self end |
#each_cigar_raw ⇒ Object
202 203 204 205 206 207 |
# File 'lib/hts/bam/record.rb', line 202 def each_cigar_raw return to_enum(__method__) unless block_given? @native.cigar_values.each { |encoded| yield encoded & 15, encoded >> 4 } self end |
#each_qual(&block) ⇒ Object
155 156 157 158 159 160 |
# File 'lib/hts/bam/record.rb', line 155 def each_qual(&block) return to_enum(__method__) unless block_given? @native.qualities.each(&block) self end |
#endpos ⇒ Object
77 |
# File 'lib/hts/bam/record.rb', line 77 def endpos = @native.endpos |
#flag=(value) ⇒ Object
171 172 173 174 175 176 177 |
# File 'lib/hts/bam/record.rb', line 171 def flag=(value) case value when Integer then core_set(:flag, value) when Flag then core_set(:flag, value.value) else raise "Invalid flag type: #{value.class}" end end |
#flag_value ⇒ Object
169 |
# File 'lib/hts/bam/record.rb', line 169 def flag_value = core_get(:flag) |
#insert_size ⇒ Object Also known as: isize
103 |
# File 'lib/hts/bam/record.rb', line 103 def insert_size = core_get(:isize) |
#insert_size=(value) ⇒ Object Also known as: isize=
105 106 107 |
# File 'lib/hts/bam/record.rb', line 105 def insert_size=(value) core_set(:isize, value) end |
#len ⇒ Object
143 |
# File 'lib/hts/bam/record.rb', line 143 def len = core_get(:length) |
#mapq ⇒ Object
110 |
# File 'lib/hts/bam/record.rb', line 110 def mapq = core_get(:mapq) |
#mapq=(value) ⇒ Object
112 113 114 |
# File 'lib/hts/bam/record.rb', line 112 def mapq=(value) core_set(:mapq, value) end |
#mate_chrom ⇒ Object Also known as: mate_contig
90 91 92 93 94 |
# File 'lib/hts/bam/record.rb', line 90 def mate_chrom return "" if mtid == -1 @header.__send__(:native_handle).target_name(mtid) end |
#mate_chrom=(name) ⇒ Object Also known as: mate_contig=
96 97 98 |
# File 'lib/hts/bam/record.rb', line 96 def mate_chrom=(name) self.mtid = resolve_tid(nil, name, "mate_chrom") end |
#mate_pos ⇒ Object Also known as: mpos
64 |
# File 'lib/hts/bam/record.rb', line 64 def mate_pos = core_get(:mpos) |
#mate_pos=(value) ⇒ Object Also known as: mpos=
66 67 68 |
# File 'lib/hts/bam/record.rb', line 66 def mate_pos=(value) core_set(:mpos, value) end |
#mate_strand ⇒ Object
102 |
# File 'lib/hts/bam/record.rb', line 102 def mate_strand = mate_reverse? ? "-" : "+" |
#mtid ⇒ Object
52 |
# File 'lib/hts/bam/record.rb', line 52 def mtid = core_get(:mtid) |
#mtid=(value) ⇒ Object
54 55 56 |
# File 'lib/hts/bam/record.rb', line 54 def mtid=(value) core_set(:mtid, value) end |
#pos ⇒ Object
58 |
# File 'lib/hts/bam/record.rb', line 58 def pos = core_get(:pos) |
#pos=(value) ⇒ Object
60 61 62 |
# File 'lib/hts/bam/record.rb', line 60 def pos=(value) core_set(:pos, value) end |
#qlen ⇒ Object
124 |
# File 'lib/hts/bam/record.rb', line 124 def qlen = @native.qlen |
#qname ⇒ Object
40 |
# File 'lib/hts/bam/record.rb', line 40 def qname = @native.qname |
#qname=(name) ⇒ Object
42 43 44 |
# File 'lib/hts/bam/record.rb', line 42 def qname=(name) @native.qname = name end |
#qual ⇒ Object
152 |
# File 'lib/hts/bam/record.rb', line 152 def qual = @native.qualities |
#qual_string ⇒ Object
153 |
# File 'lib/hts/bam/record.rb', line 153 def qual_string = @native.quality_string |
#rlen ⇒ Object
125 |
# File 'lib/hts/bam/record.rb', line 125 def rlen = @native.rlen |
#seq ⇒ Object Also known as: sequence
126 |
# File 'lib/hts/bam/record.rb', line 126 def seq = @native.sequence |
#strand ⇒ Object
101 |
# File 'lib/hts/bam/record.rb', line 101 def strand = reverse? ? "-" : "+" |
#tid ⇒ Object
46 |
# File 'lib/hts/bam/record.rb', line 46 def tid = core_get(:tid) |
#tid=(value) ⇒ Object
48 49 50 |
# File 'lib/hts/bam/record.rb', line 48 def tid=(value) core_set(:tid, value) end |
#to_s ⇒ Object
209 |
# File 'lib/hts/bam/record.rb', line 209 def to_s = @native.format(@header.__send__(:native_handle)) |