Как получить индексы последовательности выровненной области из выравнивания BioAlignments.jl?

Я хотел бы получить доступ к индексам данных выравнивания, которые возвращаются из функции сопряжения Джулии в BioAlignments.jl, чтобы узнать, где произошло выравнивание в контексте исходных последовательностей.

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(). Однако я хочу знать, где в исходных последовательностях, которые я предоставил в качестве входных данных, произошло выравнивание, и знать, как вызвать переменную, хранящую этот индекс. Не удалось найти это нигде в документации.


person Entangler    schedule 21.09.2020    source источник


Ответы (1)


Хотя я не использую эти библиотеки, один из подходов к таким проблемам в Джулии заключается в том, чтобы 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 библиотеки и могут меняться со временем при выпуске новых пакетов.

person Przemyslaw Szufel    schedule 21.09.2020
comment
Большое спасибо. Это именно то, что я искал. - person Entangler; 21.09.2020