// There are several types of Edit:
// - *matches*: from_length == to_length; sequence is empty
// - *snps*: from_length == to_length; sequence = alt
// - *deletions*: to_length == 0 && from_length > to_length; sequence is empty
// - *insertions*: from_length < to_length; sequence = alt
{ "edit": [ { "from_length": 1, "to_length": 1 }, { "from_length": 1 },
{ "from_length": 9, "to_length": 9 } ], "position": { "node_id": "44265274" }, "rank": "22"}
// A position in the graph is a node, direction, and offset.
// The node is stored by ID, and the offset is 0-based and counts from the start of the node in the specified orientation.
// The direction specifies which orientation of the node we are considering, the forward (as stored) or reverse complement.
//
// Example:
//
// seq+ G A T T A C A
// offset+ → 0 1 2 3 4 5 6 7
//
// seq- C T A A T G T
// offset- → 0 1 2 3 4 5 6 7
//
// Or both at once:
//
// offset- 7 6 5 4 3 2 1 0 ←
// seq+ G A T T A C A
// offset+ → 0 1 2 3 4 5 6 7
vg convert --threads $task.cpus $vg --gam-to-gaf $gam > ${prefix}.gaf