Hi all,
I noticed that in the Orekit OpmParser as of Orekit 11, maneuvers which contain no MAN_DELTA_MASS keyword are skipped altogether without raising a parse error, since they never satisfy the currentManeuver.completed() condition in processManeuverToken.
I think that this behavior should be revisited and Orekit should allow the parser to return Maneuvers with deltaMass = Double.NaN. First, IMO it is not clear in the CCSDS standard (502.0-B-3) that the MAN_DELTA_MASS keyword (or in fact any MAN_ field) is actually required. In the OPM DATA table, each MAN_ field is labeled “Optional”. The only numbered standard I see which could perhaps be interpreted to mean that all MAN_ fields are required for any maneuvers that are present is this:
3.2.4.8 Multiple sets of maneuver parameters may appear. For each maneuver, all the
maneuver parameters shall be repeated in the order shown in table 3-3.
However, I think there are two issues with this. First, if the intent of this standard was that the MAN_ fields are conditionally required if any one of them is present, then the standard would have used the “C” (Conditional) requirement instead of the “O” (Optional) requirement. Second, in the old Orekit 10 version of the OPM parser, these maneuvers were not ignored, even though this part of the standard is as far as I can tell unchanged in CCSDSv3 comapred to CCSDSv2.
Finally, I think that even if my above argument is rejected and the team decides that maneuvers must contain all MAN_ fields to be parsed and returned to the user, this should either be a configurable behavior (similar to the ParsedUnitsBehavior mechanism used to resolve unit parsing ambiguities in the CCSDDS standards) or raise a parse error that can be handled by the user instead of silently skipping the maneuver altogether. In my experience, many large satellite operators operationally publish OPM files which do not contain MAN_DELTA_MASS fields, and I think that Orekit’s silent omission of “incomplete” maneuvers is likely to cause users to misinterpret OPM files which are communicated across organizations.
I couldn’t find any discussion on this topic on the Orekit forum, so I’d like to hear the team’s opinion on the matter. Thank you!