Position() gives the 0-based position of the start of the read (that is, it's the start position in the genome). PositionEnd() is not the (1-based) stop position in the genome as I think most people would expect. It's computed as:
b->core.pos + GetCigar().NumQueryConsumed()
Which mixes the read-coordinate system (number of query bases consumed) with the genome coordinate system (core.pos).
I would suggest:
b->core.pos + GetCigar().NumReferenceConsumed()
instead, which gives the stop position in the genome of the read.
Position() gives the 0-based position of the start of the read (that is, it's the start position in the genome). PositionEnd() is not the (1-based) stop position in the genome as I think most people would expect. It's computed as:
b->core.pos + GetCigar().NumQueryConsumed()
Which mixes the read-coordinate system (number of query bases consumed) with the genome coordinate system (core.pos).
I would suggest:
b->core.pos + GetCigar().NumReferenceConsumed()
instead, which gives the stop position in the genome of the read.
-August