如何从 BioAlignments.jl 比对中检索比对区域的序列索引?

How do I retrieve the sequence indices of an aligned region from a BioAlignments.jl alignment?

我想访问从 BioAlignments.jl 中的 Julia pairalign 函数返回的比对数据的索引,以了解比对在原始序列的上下文中发生的位置。

using BioAlignments
using BioSequences
scoremodel = AffineGapScoreModel(EDNAFULL, gap_open=-5, gap_extend=-1);
my_alignment = pairalign(LocalAlignment(),dna"ATATTAGGTATTGATTATTGTACGCGGCCCGGC" , dna"TTGATTATTGT", scoremodel)
alignment(my_alignment)

例如,这样的脚本将输出一个对齐对象,我可以从中通过 score() 函数访问分数。但是,我想知道在我作为输入提供的原始序列中,对齐发生在何处,并知道如何调用存储该索引的变量。似乎无法在文档中的任何地方找到它。

虽然我不使用这些库,但在 Julia 中解决此类问题的方法之一是 dump 这样的对象,结果可以找到所需信息的位置。

julia> dump(alignment(my_alignment))
PairwiseAlignment{LongSequence{DNAAlphabet{4}},LongSequence{DNAAlphabet{4}}}
  a: AlignedSequence{LongSequence{DNAAlphabet{4}}}
    seq: LongSequence{DNAAlphabet{4}}
      data: Array{UInt64}((3,)) UInt64[0x8814881844188181, 0x4422244242184881, 0x0000000000000002]
      part: UnitRange{Int64}
        start: Int64 1
        stop: Int64 33
      shared: Bool false
    aln: Alignment
      anchors: Array{AlignmentAnchor}((2,))
        1: AlignmentAnchor
          seqpos: Int64 10
          refpos: Int64 0
          op: Operation OP_START
        2: AlignmentAnchor
          seqpos: Int64 21
          refpos: Int64 11
          op: Operation OP_SEQ_MATCH
      firstref: Int64 1
      lastref: Int64 11
  b: LongSequence{DNAAlphabet{4}}
    data: Array{UInt64}((1,)) UInt64[0x0000084881881488]
    part: UnitRange{Int64}
      start: Int64 1
      stop: Int64 11
    shared: Bool false

现在您可以看到您需要的信息在哪里:

julia> alignment(my_alignment).a.aln.anchors
2-element Array{AlignmentAnchor,1}:
 AlignmentAnchor(10, 0, '0')
 AlignmentAnchor(21, 11, '=')

这种方法的缺点是数据结构通常不是库的一部分 API 并且可能会随着新包的发布而改变。