Class: HTS::Bam::Record

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(header, bam1_t = nil) ⇒ Record

Returns a new instance of Record.



15
16
17
18
# File 'lib/hts/bam/record.rb', line 15

def initialize(header, bam1_t = nil)
  @bam1 = bam1_t || LibHTS.bam_init1
  @header = header
end

Instance Attribute Details

#headerObject (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.

Parameters:

  • key (String) (defaults to: nil)

    tag name

Returns:

  • (String)

    value



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.

Parameters:

  • i (Integer)

    index

Returns:

  • (String)

    base



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.

Parameters:

  • i (Integer)

    index

Returns:

  • (Integer)

    base quality



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

#binInteger

Get the bin calculated by bam_reg2bin().

Returns:

  • (Integer)

    bin



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

#chromString Also known as: contig

Get the reference sequence name of the alignment. (a.k.a RNAME) ” if not mapped.

Returns:

  • (String)

    reference sequence name



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

#cigarBam::Cigar

Get the Bam::Cigar object.

Returns:



157
158
159
# File 'lib/hts/bam/record.rb', line 157

def cigar
  Cigar.new(self)
end

#endposInteger

Get the rightmost base position of the alignment on the reference genome.

Returns:

  • (Integer)

    0-based rightmost coordinate



94
95
96
# File 'lib/hts/bam/record.rb', line 94

def endpos
  LibHTS.bam_endpos @bam1
end

#flagBam::Flag

Get Bam::Flag object of the alignment.

Returns:



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_sizeInteger Also known as: isize

Get the observed template length. (a.k.a TLEN)

Returns:

  • (Integer)

    isize



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

#lenInteger

Get the length of the query sequence.

Returns:

  • (Integer)

    query length



194
195
196
# File 'lib/hts/bam/record.rb', line 194

def len
  @bam1[:core][:l_qseq]
end

#mapqInteger

Get the mapping quality of the alignment. (a.k.a MAPQ)

Returns:

  • (Integer)

    mapping quality



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_chromString Also known as: mate_contig

Get the reference sequence name of the mate. ” if not mapped.

Returns:

  • (String)

    reference sequence name



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_posInteger Also known as: mpos

Get the 0-based leftmost coordinate of the mate.

Returns:

  • (Integer)

    0-based leftmost coordinate



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_strandString

Get whether the query’s mate is on the reverse strand.

Returns:

  • (String)

    strand “+” or “-”



128
129
130
# File 'lib/hts/bam/record.rb', line 128

def mate_strand
  LibHTS.bam_is_mrev(@bam1) ? "-" : "+"
end

#mtidInteger

Get the chromosome ID of the mate. -1 if not mapped.

Returns:

  • (Integer)

    chromosome ID



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

#posInteger

Get the 0-based leftmost coordinate of the alignment.

Returns:

  • (Integer)

    0-based leftmost coordinate



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

#qlenInteger

Calculate query length from CIGAR.

Returns:

  • (Integer)

    query length



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

#qnameString

Get the read name. (a.k.a QNAME)

Returns:

  • (String)

    query template name



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

#qualArray

Get the base qualities.

Returns:

  • (Array)

    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_stringString

Get the base qualities as a string. (a.k.a QUAL) ASCII of base quality + 33.

Returns:

  • (String)

    base qualities



219
220
221
# File 'lib/hts/bam/record.rb', line 219

def qual_string
  qual.map { |q| (q + 33).chr }.join
end

#rlenInteger

Calculate reference length from CIGAR.

Returns:

  • (Integer)

    reference length



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

#seqString Also known as: sequence

Get the sequence. (a.k.a SEQ)

Returns:

  • (String)

    sequence



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

#strandString

Get whether the query is on the reverse strand.

Returns:

  • (String)

    strand “+” or “-”



122
123
124
# File 'lib/hts/bam/record.rb', line 122

def strand
  LibHTS.bam_is_rev(@bam1) ? "-" : "+"
end

#structObject

Return the FFI::Struct object.



21
22
23
# File 'lib/hts/bam/record.rb', line 21

def struct
  @bam1
end

#tidInteger

Get the chromosome ID of the alignment. -1 if not mapped.

Returns:

  • (Integer)

    chromosome ID



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_ptrObject



25
26
27
# File 'lib/hts/bam/record.rb', line 25

def to_ptr
  @bam1.to_ptr
end

#to_sString

Returns a string representation of the alignment.

Returns:

  • (String)

    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