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(bam1_t, header) ⇒ Record

Returns a new instance of Record.



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

def initialize(bam1_t, header)
  @bam1 = bam1_t
  @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



250
251
252
253
254
255
256
257
# File 'lib/hts/bam/record.rb', line 250

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



197
198
199
200
201
202
203
# File 'lib/hts/bam/record.rb', line 197

def base(n)
  n += @bam1[:core][:l_qseq] if n < 0
  return "." if (n >= @bam1[:core][:l_qseq]) || (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



222
223
224
225
226
227
228
# File 'lib/hts/bam/record.rb', line 222

def base_qual(n)
  n += @bam1[:core][:l_qseq] if n < 0
  return 0 if (n >= @bam1[:core][:l_qseq]) || (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



80
81
82
# File 'lib/hts/bam/record.rb', line 80

def bin
  @bam1[:core][:bin]
end

#bin=(bin) ⇒ Object



84
85
86
# File 'lib/hts/bam/record.rb', line 84

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



97
98
99
100
101
# File 'lib/hts/bam/record.rb', line 97

def chrom
  return "" if tid == -1

  LibHTS.sam_hdr_tid2name(@header, tid)
end

#cigarBam::Cigar

Get the Bam::Cigar object.

Returns:



153
154
155
# File 'lib/hts/bam/record.rb', line 153

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



90
91
92
# File 'lib/hts/bam/record.rb', line 90

def endpos
  LibHTS.bam_endpos @bam1
end

#flagBam::Flag

Get Bam::Flag object of the alignment.

Returns:



232
233
234
# File 'lib/hts/bam/record.rb', line 232

def flag
  Flag.new(@bam1[:core][:flag])
end

#flag=(flag) ⇒ Object



236
237
238
239
240
241
242
243
244
245
# File 'lib/hts/bam/record.rb', line 236

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



130
131
132
# File 'lib/hts/bam/record.rb', line 130

def insert_size
  @bam1[:core][:isize]
end

#insert_size=(isize) ⇒ Object Also known as: isize=



134
135
136
# File 'lib/hts/bam/record.rb', line 134

def insert_size=(isize)
  @bam1[:core][:isize] = isize
end

#lenInteger

Get the length of the query sequence.

Returns:

  • (Integer)

    query length



190
191
192
# File 'lib/hts/bam/record.rb', line 190

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

#mapqInteger

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

Returns:

  • (Integer)

    mapping quality



143
144
145
# File 'lib/hts/bam/record.rb', line 143

def mapq
  @bam1[:core][:qual]
end

#mapq=(mapq) ⇒ Object



147
148
149
# File 'lib/hts/bam/record.rb', line 147

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



108
109
110
111
112
# File 'lib/hts/bam/record.rb', line 108

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



67
68
69
# File 'lib/hts/bam/record.rb', line 67

def mate_pos
  @bam1[:core][:mpos]
end

#mate_pos=(mpos) ⇒ Object Also known as: mpos=



71
72
73
# File 'lib/hts/bam/record.rb', line 71

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 “-”



124
125
126
# File 'lib/hts/bam/record.rb', line 124

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



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

def mtid
  @bam1[:core][:mtid]
end

#mtid=(mtid) ⇒ Object



51
52
53
# File 'lib/hts/bam/record.rb', line 51

def mtid=(mtid)
  @bam1[:core][:mtid] = mtid
end

#posInteger

Get the 0-based leftmost coordinate of the alignment.

Returns:

  • (Integer)

    0-based leftmost coordinate



57
58
59
# File 'lib/hts/bam/record.rb', line 57

def pos
  @bam1[:core][:pos]
end

#pos=(pos) ⇒ Object



61
62
63
# File 'lib/hts/bam/record.rb', line 61

def pos=(pos)
  @bam1[:core][:pos] = pos
end

#qlenInteger

Calculate query length from CIGAR.

Returns:

  • (Integer)

    query length



159
160
161
162
163
164
165
# File 'lib/hts/bam/record.rb', line 159

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

#qualArray

Get the base qualities.

Returns:

  • (Array)

    base qualities



207
208
209
210
# File 'lib/hts/bam/record.rb', line 207

def qual
  q_ptr = LibHTS.bam_get_qual(@bam1)
  q_ptr.read_array_of_uint8(@bam1[:core][:l_qseq])
end

#qual_stringString

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

Returns:

  • (String)

    base qualities



215
216
217
# File 'lib/hts/bam/record.rb', line 215

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

#rlenInteger

Calculate reference length from CIGAR.

Returns:

  • (Integer)

    reference length



169
170
171
172
173
174
# File 'lib/hts/bam/record.rb', line 169

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



178
179
180
181
182
183
184
185
# File 'lib/hts/bam/record.rb', line 178

def seq
  r = LibHTS.bam_get_seq(@bam1)
  seq = String.new
  (@bam1[:core][:l_qseq]).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 “-”



118
119
120
# File 'lib/hts/bam/record.rb', line 118

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



37
38
39
# File 'lib/hts/bam/record.rb', line 37

def tid
  @bam1[:core][:tid]
end

#tid=(tid) ⇒ Object



41
42
43
# File 'lib/hts/bam/record.rb', line 41

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.



275
276
277
278
279
280
# File 'lib/hts/bam/record.rb', line 275

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