diff --git a/src/bam/record.jl b/src/bam/record.jl index b545600..b861d1f 100644 --- a/src/bam/record.jl +++ b/src/bam/record.jl @@ -91,7 +91,7 @@ function Base.empty!(record::Record) record.tlen = 0 #Note: data will be overwritten and indexed using data_size. - + return record end @@ -436,7 +436,9 @@ function alignment(record::Record)::BioAlignments.Alignment end seqpos = 0 refpos = position(record) - 1 - anchors = [BioAlignments.AlignmentAnchor(seqpos, refpos, BioAlignments.OP_START)] + alnpos = 0 + + anchors = [BioAlignments.AlignmentAnchor(seqpos, refpos, alnpos, BioAlignments.OP_START)] for (op, len) in zip(cigar_rle(record)...) if BioAlignments.ismatchop(op) seqpos += len @@ -448,7 +450,8 @@ function alignment(record::Record)::BioAlignments.Alignment else error("operation $(op) is not supported") end - push!(anchors, BioAlignments.AlignmentAnchor(seqpos, refpos, op)) + alnpos += len + push!(anchors, BioAlignments.AlignmentAnchor(seqpos, refpos, alnpos, op)) end return BioAlignments.Alignment(anchors) end diff --git a/test/test_bam.jl b/test/test_bam.jl index beb6d03..b5823ed 100644 --- a/test/test_bam.jl +++ b/test/test_bam.jl @@ -79,10 +79,10 @@ @test BAM.flag(record) === UInt16(16) @test BAM.cigar(record) == "27M1D73M" @test BAM.alignment(record) == Alignment([ - AlignmentAnchor( 0, 1, OP_START), - AlignmentAnchor( 27, 28, OP_MATCH), - AlignmentAnchor( 27, 29, OP_DELETE), - AlignmentAnchor(100, 102, OP_MATCH)]) + AlignmentAnchor( 0, 1, 0, OP_START), + AlignmentAnchor( 27, 28, 27, OP_MATCH), + AlignmentAnchor( 27, 29, 28, OP_DELETE), + AlignmentAnchor(100, 102, 101, OP_MATCH)]) @test record["XG"] == 1 @test record["XM"] == 5 @test record["XN"] == 0 diff --git a/test/test_sam.jl b/test/test_sam.jl index 195288d..e1c09bb 100644 --- a/test/test_sam.jl +++ b/test/test_sam.jl @@ -104,10 +104,10 @@ @test SAM.flag(record) == 16 @test SAM.cigar(record) == "27M1D73M" @test SAM.alignment(record) == Alignment([ - AlignmentAnchor( 0, 1, OP_START), - AlignmentAnchor( 27, 28, OP_MATCH), - AlignmentAnchor( 27, 29, OP_DELETE), - AlignmentAnchor(100, 102, OP_MATCH)]) + AlignmentAnchor( 0, 1, 0, OP_START), + AlignmentAnchor( 27, 28, 27, OP_MATCH), + AlignmentAnchor( 27, 29, 28, OP_DELETE), + AlignmentAnchor(100, 102, 101, OP_MATCH)]) @test record["XG"] == 1 @test record["XM"] == 5 @test record["XN"] == 0