Positions¶
The only position field in GFA1 is the pos field in the C lines.
This represents the starting position of the contained segment in the
container segment and is 0-based.
Some fields in GFA2 E lines (beg1, beg2, end1, end2) and F lines
(s_beg, s_end, f_beg, f_end) are positions. According to the
specification, they are 0-based and represent virtual ticks before and
after each string in the sequence. Thus ranges are represented similarly
to the Python range conventions: e.g. a 1-character prefix of a sequence
will have begin 0 and end 1.
Last positions in GFA2¶
The GFA2 positions must contain an additional string ($) appended to
the integer, if (and only if) they are the last position in the segment
sequence. These particular positions are represented in Gfapy as
instances of the class LastPos.
To create a lastpos instance, the constructor can be used with an integer, or the string representation (which must end with the dollar sign, otherwise an integer is returned):
>>> str(gfapy.LastPos(12))
'12$'
>>> gfapy.LastPos("12")
12
>>> str(gfapy.LastPos("12"))
'12'
>>> gfapy.LastPos("12$")
gfapy.LastPos(12)
>>> str(gfapy.LastPos("12$"))
'12$'
Subtracting an integer from a lastpos returns a lastpos if 0 subtracted, an integer otherwise. This allows to do some arithmetic on positions without making them invalid.
>>> gfapy.LastPos(12) - 0
gfapy.LastPos(12)
>>> gfapy.LastPos(12) - 1
11
The functions islastpos() and
isfirstpos() allow to
determine if a position value is 0 (first), or the last position, using
the same syntax for lastpos and integer instances.
>>> gfapy.isfirstpos(0)
True
>>> gfapy.islastpos(0)
False
>>> gfapy.isfirstpos(12)
False
>>> gfapy.islastpos(12)
False
>>> gfapy.islastpos(gfapy.LastPos("12"))
False
>>> gfapy.islastpos(gfapy.LastPos("12$"))
True