Class: HTS::Bam::Record
- Inherits:
-
Object
- Object
- HTS::Bam::Record
- Defined in:
- lib/hts/bam/record.rb
Overview
A class for working with alignment records.
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) ⇒ String
Get the auxiliary data.
-
#base(n) ⇒ String
Get the base of the requested index “i” of the query sequence.
-
#base_qual(n) ⇒ Integer
Get the base quality of the requested index “i” of the query sequence.
-
#bin ⇒ Integer
Get the bin calculated by bam_reg2bin().
- #bin=(bin) ⇒ Object
-
#chrom ⇒ String
(also: #contig)
Get the reference sequence name of the alignment.
-
#cigar ⇒ Bam::Cigar
Get the Bam::Cigar object.
-
#endpos ⇒ Integer
Get the rightmost base position of the alignment on the reference genome.
-
#flag ⇒ Bam::Flag
Get Bam::Flag object of the alignment.
- #flag=(flag) ⇒ Object
-
#initialize(header, bam1_t = nil) ⇒ Record
constructor
A new instance of Record.
-
#insert_size ⇒ Integer
(also: #isize)
Get the observed template length.
- #insert_size=(isize) ⇒ Object (also: #isize=)
-
#len ⇒ Integer
Get the length of the query sequence.
-
#mapq ⇒ Integer
Get the mapping quality of the alignment.
- #mapq=(mapq) ⇒ Object
-
#mate_chrom ⇒ String
(also: #mate_contig)
Get the reference sequence name of the mate.
-
#mate_pos ⇒ Integer
(also: #mpos)
Get the 0-based leftmost coordinate of the mate.
- #mate_pos=(mpos) ⇒ Object (also: #mpos=)
-
#mate_strand ⇒ String
Get whether the query’s mate is on the reverse strand.
-
#mtid ⇒ Integer
Get the chromosome ID of the mate.
- #mtid=(mtid) ⇒ Object
-
#pos ⇒ Integer
Get the 0-based leftmost coordinate of the alignment.
- #pos=(pos) ⇒ Object
-
#qlen ⇒ Integer
Calculate query length from CIGAR.
-
#qname ⇒ String
Get the read name.
- #qname=(name) ⇒ Object
-
#qual ⇒ Array
Get the base qualities.
-
#qual_string ⇒ String
Get the base qualities as a string.
-
#rlen ⇒ Integer
Calculate reference length from CIGAR.
-
#seq ⇒ String
(also: #sequence)
Get the sequence.
-
#strand ⇒ String
Get whether the query is on the reverse strand.
-
#struct ⇒ Object
Return the FFI::Struct object.
-
#tid ⇒ Integer
Get the chromosome ID of the alignment.
- #tid=(tid) ⇒ Object
- #to_ptr ⇒ Object
-
#to_s ⇒ String
A string representation of the alignment.
Constructor Details
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) ⇒ String
Get the auxiliary data.
254 255 256 257 258 259 260 261 |
# File 'lib/hts/bam/record.rb', line 254 def aux(key = nil) aux = Aux.new(self) if key aux.get(key) else aux end end |
#base(n) ⇒ String
Get the base of the requested index “i” of the query sequence.
201 202 203 204 205 206 207 |
# File 'lib/hts/bam/record.rb', line 201 def base(n) n += len if n < 0 return "." if (n >= len) || (n < 0) # eg. base(-1000) r = LibHTS.bam_get_seq(@bam1) SEQ_NT16_STR[LibHTS.bam_seqi(r, n)] end |
#base_qual(n) ⇒ Integer
Get the base quality of the requested index “i” of the query sequence.
226 227 228 229 230 231 232 |
# File 'lib/hts/bam/record.rb', line 226 def base_qual(n) n += len if n < 0 return 0 if (n >= len) || (n < 0) # eg. base_qual(-1000) q_ptr = LibHTS.bam_get_qual(@bam1) q_ptr.get_uint8(n) end |
#bin ⇒ Integer
Get the bin calculated by bam_reg2bin().
84 85 86 |
# File 'lib/hts/bam/record.rb', line 84 def bin @bam1[:core][:bin] end |
#bin=(bin) ⇒ Object
88 89 90 |
# File 'lib/hts/bam/record.rb', line 88 def bin=(bin) @bam1[:core][:bin] = bin end |
#chrom ⇒ String Also known as: contig
Get the reference sequence name of the alignment. (a.k.a RNAME) ” if not mapped.
101 102 103 104 105 |
# File 'lib/hts/bam/record.rb', line 101 def chrom return "" if tid == -1 LibHTS.sam_hdr_tid2name(@header, tid) end |
#cigar ⇒ Bam::Cigar
Get the Bam::Cigar object.
157 158 159 |
# File 'lib/hts/bam/record.rb', line 157 def cigar Cigar.new(self) end |
#endpos ⇒ Integer
Get the rightmost base position of the alignment on the reference genome.
94 95 96 |
# File 'lib/hts/bam/record.rb', line 94 def endpos LibHTS.bam_endpos @bam1 end |
#flag ⇒ Bam::Flag
Get Bam::Flag object of the alignment.
236 237 238 |
# File 'lib/hts/bam/record.rb', line 236 def flag Flag.new(@bam1[:core][:flag]) end |
#flag=(flag) ⇒ Object
240 241 242 243 244 245 246 247 248 249 |
# File 'lib/hts/bam/record.rb', line 240 def flag=(flag) case flag when Integer @bam1[:core][:flag] = flag when Flag @bam1[:core][:flag] = flag.value else raise "Invalid flag type: #{flag.class}" end end |
#insert_size ⇒ Integer Also known as: isize
Get the observed template length. (a.k.a TLEN)
134 135 136 |
# File 'lib/hts/bam/record.rb', line 134 def insert_size @bam1[:core][:isize] end |
#insert_size=(isize) ⇒ Object Also known as: isize=
138 139 140 |
# File 'lib/hts/bam/record.rb', line 138 def insert_size=(isize) @bam1[:core][:isize] = isize end |
#len ⇒ Integer
Get the length of the query sequence.
194 195 196 |
# File 'lib/hts/bam/record.rb', line 194 def len @bam1[:core][:l_qseq] end |
#mapq ⇒ Integer
Get the mapping quality of the alignment. (a.k.a MAPQ)
147 148 149 |
# File 'lib/hts/bam/record.rb', line 147 def mapq @bam1[:core][:qual] end |
#mapq=(mapq) ⇒ Object
151 152 153 |
# File 'lib/hts/bam/record.rb', line 151 def mapq=(mapq) @bam1[:core][:qual] = mapq end |
#mate_chrom ⇒ String Also known as: mate_contig
Get the reference sequence name of the mate. ” if not mapped.
112 113 114 115 116 |
# File 'lib/hts/bam/record.rb', line 112 def mate_chrom return "" if mtid == -1 LibHTS.sam_hdr_tid2name(@header, mtid) end |
#mate_pos ⇒ Integer Also known as: mpos
Get the 0-based leftmost coordinate of the mate.
71 72 73 |
# File 'lib/hts/bam/record.rb', line 71 def mate_pos @bam1[:core][:mpos] end |
#mate_pos=(mpos) ⇒ Object Also known as: mpos=
75 76 77 |
# File 'lib/hts/bam/record.rb', line 75 def mate_pos=(mpos) @bam1[:core][:mpos] = mpos end |
#mate_strand ⇒ String
Get whether the query’s mate is on the reverse strand.
128 129 130 |
# File 'lib/hts/bam/record.rb', line 128 def mate_strand LibHTS.bam_is_mrev(@bam1) ? "-" : "+" end |
#mtid ⇒ Integer
Get the chromosome ID of the mate. -1 if not mapped.
51 52 53 |
# File 'lib/hts/bam/record.rb', line 51 def mtid @bam1[:core][:mtid] end |
#mtid=(mtid) ⇒ Object
55 56 57 |
# File 'lib/hts/bam/record.rb', line 55 def mtid=(mtid) @bam1[:core][:mtid] = mtid end |
#pos ⇒ Integer
Get the 0-based leftmost coordinate of the alignment.
61 62 63 |
# File 'lib/hts/bam/record.rb', line 61 def pos @bam1[:core][:pos] end |
#pos=(pos) ⇒ Object
65 66 67 |
# File 'lib/hts/bam/record.rb', line 65 def pos=(pos) @bam1[:core][:pos] = pos end |
#qlen ⇒ Integer
Calculate query length from CIGAR.
163 164 165 166 167 168 169 |
# File 'lib/hts/bam/record.rb', line 163 def qlen # cigar.qlen will be slower because it converts to a Ruby array. LibHTS.bam_cigar2qlen( @bam1[:core][:n_cigar], LibHTS.bam_get_cigar(@bam1) ) end |
#qname ⇒ String
Get the read name. (a.k.a QNAME)
31 32 33 |
# File 'lib/hts/bam/record.rb', line 31 def qname LibHTS.bam_get_qname(@bam1).read_string end |
#qname=(name) ⇒ Object
35 36 37 |
# File 'lib/hts/bam/record.rb', line 35 def qname=(name) LibHTS.bam_set_qname(@bam1, name) end |
#qual ⇒ Array
Get the base qualities.
211 212 213 214 |
# File 'lib/hts/bam/record.rb', line 211 def qual q_ptr = LibHTS.bam_get_qual(@bam1) q_ptr.read_array_of_uint8(len) end |
#qual_string ⇒ String
Get the base qualities as a string. (a.k.a QUAL) ASCII of base quality + 33.
219 220 221 |
# File 'lib/hts/bam/record.rb', line 219 def qual_string qual.map { |q| (q + 33).chr }.join end |
#rlen ⇒ Integer
Calculate reference length from CIGAR.
173 174 175 176 177 178 |
# File 'lib/hts/bam/record.rb', line 173 def rlen LibHTS.bam_cigar2rlen( @bam1[:core][:n_cigar], LibHTS.bam_get_cigar(@bam1) ) end |
#seq ⇒ String Also known as: sequence
Get the sequence. (a.k.a SEQ)
182 183 184 185 186 187 188 189 |
# File 'lib/hts/bam/record.rb', line 182 def seq r = LibHTS.bam_get_seq(@bam1) seq = String.new len.times do |i| seq << SEQ_NT16_STR[LibHTS.bam_seqi(r, i)] end seq end |
#strand ⇒ String
Get whether the query is on the reverse strand.
122 123 124 |
# File 'lib/hts/bam/record.rb', line 122 def strand LibHTS.bam_is_rev(@bam1) ? "-" : "+" end |
#struct ⇒ Object
Return the FFI::Struct object.
21 22 23 |
# File 'lib/hts/bam/record.rb', line 21 def struct @bam1 end |
#tid ⇒ Integer
Get the chromosome ID of the alignment. -1 if not mapped.
41 42 43 |
# File 'lib/hts/bam/record.rb', line 41 def tid @bam1[:core][:tid] end |
#tid=(tid) ⇒ Object
45 46 47 |
# File 'lib/hts/bam/record.rb', line 45 def tid=(tid) @bam1[:core][:tid] = tid end |
#to_ptr ⇒ Object
25 26 27 |
# File 'lib/hts/bam/record.rb', line 25 def to_ptr @bam1.to_ptr end |
#to_s ⇒ String
Returns a string representation of the alignment.
279 280 281 282 283 284 |
# File 'lib/hts/bam/record.rb', line 279 def to_s kstr = LibHTS::KString.new raise "Failed to format bam record" if LibHTS.sam_format1(@header.struct, @bam1, kstr) == -1 kstr[:s] end |