37 lines
3.9 KiB
JSON
37 lines
3.9 KiB
JSON
{
|
|
"id": "tle-parsing",
|
|
"title": "Two-line element parsing",
|
|
"summary": "From raw text to a structured element set: line classification, checksum verification, field extraction, and the cross checks.",
|
|
"nodes": [
|
|
{"id": "text", "label": "Input text", "kind": "data", "group": "input", "summary": "One, two, or three lines; blank lines are ignored and any of the common line endings is accepted."},
|
|
{"id": "split", "label": "Split and classify lines", "kind": "step", "group": "parse", "summary": "A leading line that does not begin with '1 ' is the satellite name; the next two lines are the data lines."},
|
|
{"id": "count", "label": "Two data lines?", "kind": "decision", "group": "parse", "summary": "The format requires exactly two data lines."},
|
|
{"id": "too_few", "label": "TooShort", "kind": "terminal", "group": "error", "summary": "Fewer than two data lines were present."},
|
|
{"id": "checksum1", "label": "Verify line 1 checksum", "kind": "step", "group": "verify", "summary": "Sum the digits and the minus signs of the first 68 columns modulo ten and compare with column 69.", "api": "verify_line_checksum"},
|
|
{"id": "checksum_ok", "label": "Checksums match?", "kind": "decision", "group": "verify", "summary": "Each line is verified independently, so a corrupted line is reported with its number."},
|
|
{"id": "checksum_fail", "label": "Checksum error", "kind": "terminal", "group": "error", "summary": "A line checksum does not match its contents.", "api": "ElementErrorKind"},
|
|
{"id": "fields1", "label": "Read line 1 fields", "kind": "step", "group": "fields", "summary": "Catalog number, classification, designator, epoch, the two derivatives, BSTAR, and the element set number."},
|
|
{"id": "fields2", "label": "Read line 2 fields", "kind": "step", "group": "fields", "summary": "Inclination, right ascension, eccentricity, argument of perigee, mean anomaly, mean motion, and the revolution number."},
|
|
{"id": "exponent", "label": "Decode exponent fields", "kind": "step", "group": "fields", "summary": "A sign, a mantissa with an assumed decimal point, an exponent sign, and one exponent digit.", "api": "ElementErrorKind"},
|
|
{"id": "epoch", "label": "Expand the two digit year", "kind": "step", "group": "fields", "summary": "Years 57 through 99 are in the twentieth century and 00 through 56 in the twenty-first.", "api": "Epoch"},
|
|
{"id": "match", "label": "Catalog numbers match?", "kind": "decision", "group": "crosscheck", "summary": "The two lines must describe the same object."},
|
|
{"id": "mismatch", "label": "MismatchedElementSet", "kind": "terminal", "group": "error", "summary": "The two lines carry different element set numbers.", "api": "ElementErrorKind"},
|
|
{"id": "element", "label": "TwoLineElement", "kind": "terminal", "group": "output", "summary": "The structured element set, with the units of the format preserved.", "api": "TwoLineElement"}
|
|
],
|
|
"edges": [
|
|
{"source": "text", "target": "split", "kind": "flow", "label": null},
|
|
{"source": "split", "target": "count", "kind": "flow", "label": null},
|
|
{"source": "count", "target": "too_few", "kind": "branch", "label": "no"},
|
|
{"source": "count", "target": "checksum1", "kind": "branch", "label": "yes"},
|
|
{"source": "checksum1", "target": "checksum_ok", "kind": "flow", "label": null},
|
|
{"source": "checksum_ok", "target": "checksum_fail", "kind": "branch", "label": "no"},
|
|
{"source": "checksum_ok", "target": "fields1", "kind": "branch", "label": "yes"},
|
|
{"source": "fields1", "target": "fields2", "kind": "flow", "label": null},
|
|
{"source": "fields2", "target": "exponent", "kind": "flow", "label": null},
|
|
{"source": "exponent", "target": "epoch", "kind": "flow", "label": null},
|
|
{"source": "epoch", "target": "match", "kind": "flow", "label": null},
|
|
{"source": "match", "target": "mismatch", "kind": "branch", "label": "no"},
|
|
{"source": "match", "target": "element", "kind": "branch", "label": "yes"}
|
|
]
|
|
}
|