Summary
Mission.execute_all(topk=k) applies top-k filtering independently to two outputs:
coverage_calculator_results (via execute_gnssr_coverage_calculator) and
specular_trajectory_results (via execute_specular_trajectory_calculator). The two
rankings can select different GNSS transmitters for the same receiver at the same
time step, so rank r of one output need not correspond to rank r of the other.
Cause
They rank by different RCG definitions:
- Trajectory top-k uses the all-pairs line-of-sight RCG from
get_specular_trajectory
(no field-of-view check).
- Coverage top-k uses an RCG that additionally gates on the receiver FOV and specular
radius, and is -inf where nothing is covered.
Impact
Downstream consumers that assume the two top-k outputs are aligned (e.g. joining a
trajectory rank to a coverage rank) will get mismatched transmitters. The D-SHIELD CSV
exporters are unaffected because each writes its own per-time-step source id.
Status
Intentional today — the specular trajectory is defined over all transmitter/receiver
pairs regardless of FOV, so ranking it by the coverage RCG would be wrong. Filing to
track the discrepancy and decide whether a single shared/aligned ranking is ever needed.
Documented in code: see the KNOWN ISSUE note in Mission.execute_specular_trajectory_calculator.
Summary
Mission.execute_all(topk=k)applies top-k filtering independently to two outputs:coverage_calculator_results(viaexecute_gnssr_coverage_calculator) andspecular_trajectory_results(viaexecute_specular_trajectory_calculator). The tworankings can select different GNSS transmitters for the same receiver at the same
time step, so rank r of one output need not correspond to rank r of the other.
Cause
They rank by different RCG definitions:
get_specular_trajectory(no field-of-view check).
radius, and is
-infwhere nothing is covered.Impact
Downstream consumers that assume the two top-k outputs are aligned (e.g. joining a
trajectory rank to a coverage rank) will get mismatched transmitters. The D-SHIELD CSV
exporters are unaffected because each writes its own per-time-step source id.
Status
Intentional today — the specular trajectory is defined over all transmitter/receiver
pairs regardless of FOV, so ranking it by the coverage RCG would be wrong. Filing to
track the discrepancy and decide whether a single shared/aligned ranking is ever needed.
Documented in code: see the
KNOWN ISSUEnote inMission.execute_specular_trajectory_calculator.