CartesianCovarianceKey.java

  1. /* Copyright 2002-2024 CS GROUP
  2.  * Licensed to CS GROUP (CS) under one or more
  3.  * contributor license agreements.  See the NOTICE file distributed with
  4.  * this work for additional information regarding copyright ownership.
  5.  * CS licenses this file to You under the Apache License, Version 2.0
  6.  * (the "License"); you may not use this file except in compliance with
  7.  * the License.  You may obtain a copy of the License at
  8.  *
  9.  *   http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package org.orekit.files.ccsds.ndm.odm;

  18. import org.orekit.files.ccsds.definitions.Units;
  19. import org.orekit.files.ccsds.utils.ContextBinding;
  20. import org.orekit.files.ccsds.utils.lexical.ParseToken;
  21. import org.orekit.files.ccsds.utils.lexical.TokenType;


  22. /** Keys for {@link CartesianCovariance OPM/OMM/OCM Cartesian covariance} entries.
  23.  * @author Luc Maisonobe
  24.  * @since 11.0
  25.  */
  26. public enum CartesianCovarianceKey {

  27.     /** Comment entry. */
  28.     COMMENT((token, context, container) ->
  29.             token.getType() == TokenType.ENTRY ? container.addComment(token.getContentAsNormalizedString()) : true),

  30.     /** Epoch entry (only for OEM files). */
  31.     EPOCH((token, context, container) -> token.processAsDate(container::setEpoch, context)),

  32.     /** Coordinate system for covariance matrix. */
  33.     COV_REF_FRAME((token, context, container) -> token.processAsFrame(container::setReferenceFrame, context, true, true, true)),

  34.     /** Covariance matrix [1, 1] element. */
  35.     CX_X((token, context, container) -> token.processAsDoublyIndexedDouble(0, 0, Units.KM2, context.getParsedUnitsBehavior(),
  36.                                                                            container::setCovarianceMatrixEntry)),

  37.     /** Covariance matrix [2, 1] element. */
  38.     CY_X((token, context, container) -> token.processAsDoublyIndexedDouble(1, 0, Units.KM2, context.getParsedUnitsBehavior(),
  39.                                                                            container::setCovarianceMatrixEntry)),

  40.     /** Covariance matrix [2, 2] element. */
  41.     CY_Y((token, context, container) -> token.processAsDoublyIndexedDouble(1, 1, Units.KM2, context.getParsedUnitsBehavior(),
  42.                                                                            container::setCovarianceMatrixEntry)),

  43.     /** Covariance matrix [3, 1] element. */
  44.     CZ_X((token, context, container) -> token.processAsDoublyIndexedDouble(2, 0, Units.KM2, context.getParsedUnitsBehavior(),
  45.                                                                            container::setCovarianceMatrixEntry)),

  46.     /** Covariance matrix [3, 2] element. */
  47.     CZ_Y((token, context, container) -> token.processAsDoublyIndexedDouble(2, 1, Units.KM2, context.getParsedUnitsBehavior(),
  48.                                                                            container::setCovarianceMatrixEntry)),

  49.     /** Covariance matrix [3, 3] element. */
  50.     CZ_Z((token, context, container) -> token.processAsDoublyIndexedDouble(2, 2, Units.KM2, context.getParsedUnitsBehavior(),
  51.                                                                            container::setCovarianceMatrixEntry)),

  52.     /** Covariance matrix [4, 1] element. */
  53.     CX_DOT_X((token, context, container) -> token.processAsDoublyIndexedDouble(3, 0, Units.KM2_PER_S, context.getParsedUnitsBehavior(),
  54.                                                                                container::setCovarianceMatrixEntry)),

  55.     /** Covariance matrix [4, 2] element. */
  56.     CX_DOT_Y((token, context, container) -> token.processAsDoublyIndexedDouble(3, 1, Units.KM2_PER_S, context.getParsedUnitsBehavior(),
  57.                                                                                container::setCovarianceMatrixEntry)),

  58.     /** Covariance matrix [4, 3] element. */
  59.     CX_DOT_Z((token, context, container) -> token.processAsDoublyIndexedDouble(3, 2, Units.KM2_PER_S, context.getParsedUnitsBehavior(),
  60.                                                                                container::setCovarianceMatrixEntry)),

  61.     /** Covariance matrix [4, 4] element. */
  62.     CX_DOT_X_DOT((token, context, container) -> token.processAsDoublyIndexedDouble(3, 3, Units.KM2_PER_S2, context.getParsedUnitsBehavior(),
  63.                                                                                    container::setCovarianceMatrixEntry)),

  64.     /** Covariance matrix [5, 1] element. */
  65.     CY_DOT_X((token, context, container) -> token.processAsDoublyIndexedDouble(4, 0, Units.KM2_PER_S, context.getParsedUnitsBehavior(),
  66.                                                                                container::setCovarianceMatrixEntry)),

  67.     /** Covariance matrix [5, 2] element. */
  68.     CY_DOT_Y((token, context, container) -> token.processAsDoublyIndexedDouble(4, 1, Units.KM2_PER_S, context.getParsedUnitsBehavior(),
  69.                                                                                container::setCovarianceMatrixEntry)),

  70.     /** Covariance matrix [5, 3] element. */
  71.     CY_DOT_Z((token, context, container) -> token.processAsDoublyIndexedDouble(4, 2, Units.KM2_PER_S, context.getParsedUnitsBehavior(),
  72.                                                                                container::setCovarianceMatrixEntry)),

  73.     /** Covariance matrix [5, 4] element. */
  74.     CY_DOT_X_DOT((token, context, container) -> token.processAsDoublyIndexedDouble(4, 3, Units.KM2_PER_S2, context.getParsedUnitsBehavior(),
  75.                                                                                    container::setCovarianceMatrixEntry)),

  76.     /** Covariance matrix [5, 5] element. */
  77.     CY_DOT_Y_DOT((token, context, container) -> token.processAsDoublyIndexedDouble(4, 4, Units.KM2_PER_S2, context.getParsedUnitsBehavior(),
  78.                                                                                    container::setCovarianceMatrixEntry)),

  79.     /** Covariance matrix [6, 1] element. */
  80.     CZ_DOT_X((token, context, container) -> token.processAsDoublyIndexedDouble(5, 0, Units.KM2_PER_S, context.getParsedUnitsBehavior(),
  81.                                                                                container::setCovarianceMatrixEntry)),

  82.     /** Covariance matrix [6, 2] element. */
  83.     CZ_DOT_Y((token, context, container) -> token.processAsDoublyIndexedDouble(5, 1, Units.KM2_PER_S, context.getParsedUnitsBehavior(),
  84.                                                                                container::setCovarianceMatrixEntry)),

  85.     /** Covariance matrix [6, 3] element. */
  86.     CZ_DOT_Z((token, context, container) -> token.processAsDoublyIndexedDouble(5, 2, Units.KM2_PER_S, context.getParsedUnitsBehavior(),
  87.                                                                                container::setCovarianceMatrixEntry)),

  88.     /** Covariance matrix [6, 4] element. */
  89.     CZ_DOT_X_DOT((token, context, container) -> token.processAsDoublyIndexedDouble(5, 3, Units.KM2_PER_S2, context.getParsedUnitsBehavior(),
  90.                                                                                    container::setCovarianceMatrixEntry)),

  91.     /** Covariance matrix [6, 5] element. */
  92.     CZ_DOT_Y_DOT((token, context, container) -> token.processAsDoublyIndexedDouble(5, 4, Units.KM2_PER_S2, context.getParsedUnitsBehavior(),
  93.                                                                                    container::setCovarianceMatrixEntry)),

  94.     /** Covariance matrix [6, 6] element. */
  95.     CZ_DOT_Z_DOT((token, context, container) -> token.processAsDoublyIndexedDouble(5, 5, Units.KM2_PER_S2, context.getParsedUnitsBehavior(),
  96.                                                                                    container::setCovarianceMatrixEntry));

  97.     /** Processing method. */
  98.     private final transient TokenProcessor processor;

  99.     /** Simple constructor.
  100.      * @param processor processing method
  101.      */
  102.     CartesianCovarianceKey(final TokenProcessor processor) {
  103.         this.processor = processor;
  104.     }

  105.     /** Process one token.
  106.      * @param token token to process
  107.      * @param context context binding
  108.      * @param container container to fill
  109.      * @return true of token was accepted
  110.      */
  111.     public boolean process(final ParseToken token, final ContextBinding context, final CartesianCovariance container) {
  112.         return processor.process(token, context, container);
  113.     }

  114.     /** Interface for processing one token. */
  115.     interface TokenProcessor {
  116.         /** Process one token.
  117.          * @param token token to process
  118.          * @param context context binding
  119.          * @param container container to fill
  120.          * @return true of token was accepted
  121.          */
  122.         boolean process(ParseToken token, ContextBinding context, CartesianCovariance container);
  123.     }

  124. }