XYZCovarianceKey.java

  1. /* Copyright 2002-2023 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.cdm;

  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 XYZCovariance CDM covariance matrix} entries.
  23.  */
  24. public enum XYZCovarianceKey {

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

  28.     /** Object covariance matrix [1,1]. */
  29.     CX_X((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
  30.                                                              container::setCxx)),
  31.     /** Object covariance matrix [2,1]. */
  32.     CY_X((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
  33.                                                              container::setCyx)),
  34.     /** Object covariance matrix [2,2]. */
  35.     CY_Y((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
  36.                                                              container::setCyy)),
  37.     /** Object covariance matrix [3,1]. */
  38.     CZ_X((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
  39.                                                              container::setCzx)),
  40.     /** Object covariance matrix [3,2]. */
  41.     CZ_Y((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
  42.                                                              container::setCzy)),
  43.     /** Object covariance matrix [3,3]. */
  44.     CZ_Z((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
  45.                                                              container::setCzz)),
  46.     /** Object covariance matrix [4,1]. */
  47.     CXDOT_X((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  48.                                                              container::setCxdotx)),
  49.     /** Object covariance matrix [4,2]. */
  50.     CXDOT_Y((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  51.                                                              container::setCxdoty)),
  52.     /** Object covariance matrix [4,3]. */
  53.     CXDOT_Z((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  54.                                                              container::setCxdotz)),
  55.     /** Object covariance matrix [4,4]. */
  56.     CXDOT_XDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  57.                                                              container::setCxdotxdot)),
  58.     /** Object covariance matrix [5,1]. */
  59.     CYDOT_X((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  60.                                                              container::setCydotx)),
  61.     /** Object covariance matrix [5,2]. */
  62.     CYDOT_Y((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  63.                                                              container::setCydoty)),
  64.     /** Object covariance matrix [5,3]. */
  65.     CYDOT_Z((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  66.                                                              container::setCydotz)),
  67.     /** Object covariance matrix [5,4]. */
  68.     CYDOT_XDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  69.                                                              container::setCydotxdot)),
  70.     /** Object covariance matrix [5,5]. */
  71.     CYDOT_YDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  72.                                                              container::setCydotydot)),
  73.     /** Object covariance matrix [6,1]. */
  74.     CZDOT_X((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  75.                                                              container::setCzdotx)),
  76.     /** Object covariance matrix [6,2]. */
  77.     CZDOT_Y((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  78.                                                              container::setCzdoty)),
  79.     /** Object covariance matrix [6,3]. */
  80.     CZDOT_Z((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  81.                                                              container::setCzdotz)),
  82.     /** Object covariance matrix [6,4]. */
  83.     CZDOT_XDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  84.                                                              container::setCzdotxdot)),
  85.     /** Object covariance matrix [6,5]. */
  86.     CZDOT_YDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  87.                                                              container::setCzdotydot)),
  88.     /** Object covariance matrix [6,6]. */
  89.     CZDOT_ZDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  90.                                                              container::setCzdotzdot)),
  91.     /** Object covariance matrix [7,1]. */
  92.     CDRG_X((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
  93.                                                              container::setCdrgx)),
  94.     /** Object covariance matrix [7,2]. */
  95.     CDRG_Y((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
  96.                                                              container::setCdrgy)),
  97.     /** Object covariance matrix [7,3]. */
  98.     CDRG_Z((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
  99.                                                              container::setCdrgz)),
  100.     /** Object covariance matrix [7,4]. */
  101.     CDRG_XDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
  102.                                                              container::setCdrgxdot)),
  103.     /** Object covariance matrix [7,5]. */
  104.     CDRG_YDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
  105.                                                              container::setCdrgydot)),
  106.     /** Object covariance matrix [7,6]. */
  107.     CDRG_ZDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
  108.                                                              container::setCdrgzdot)),
  109.     /** Object covariance matrix [7,7]. */
  110.     CDRG_DRG((token, context, container) -> token.processAsDouble(Units.M4_PER_KG2, context.getParsedUnitsBehavior(),
  111.                                                              container::setCdrgdrg)),
  112.     /** Object covariance matrix [8,1]. */
  113.     CSRP_X((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
  114.                                                              container::setCsrpx)),
  115.     /** Object covariance matrix [8,2]. */
  116.     CSRP_Y((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
  117.                                                              container::setCsrpy)),
  118.     /** Object covariance matrix [8,3]. */
  119.     CSRP_Z((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
  120.                                                              container::setCsrpz)),
  121.     /** Object covariance matrix [8,4]. */
  122.     CSRP_XDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
  123.                                                              container::setCsrpxdot)),
  124.     /** Object covariance matrix [8,5]. */
  125.     CSRP_YDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
  126.                                                              container::setCsrpydot)),
  127.     /** Object covariance matrix [8,6]. */
  128.     CSRP_ZDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
  129.                                                              container::setCsrpzdot)),
  130.     /** Object covariance matrix [8,7]. */
  131.     CSRP_DRG((token, context, container) -> token.processAsDouble(Units.M4_PER_KG2, context.getParsedUnitsBehavior(),
  132.                                                              container::setCsrpdrg)),
  133.     /** Object covariance matrix [8,9]. */
  134.     CSRP_SRP((token, context, container) -> token.processAsDouble(Units.M4_PER_KG2, context.getParsedUnitsBehavior(),
  135.                                                              container::setCsrpsrp)),
  136.     /** Object covariance matrix [9,1]. */
  137.     CTHR_X((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  138.                                                              container::setCthrx)),
  139.     /** Object covariance matrix [9,2]. */
  140.     CTHR_Y((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  141.                                                              container::setCthry)),
  142.     /** Object covariance matrix [9,3]. */
  143.     CTHR_Z((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  144.                                                              container::setCthrz)),
  145.     /** Object covariance matrix [9,4]. */
  146.     CTHR_XDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S3, context.getParsedUnitsBehavior(),
  147.                                                              container::setCthrxdot)),
  148.     /** Object covariance matrix [9,5]. */
  149.     CTHR_YDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S3, context.getParsedUnitsBehavior(),
  150.                                                              container::setCthrydot)),
  151.     /** Object covariance matrix [9,6]. */
  152.     CTHR_ZDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S3, context.getParsedUnitsBehavior(),
  153.                                                              container::setCthrzdot)),
  154.     /** Object covariance matrix [9,7]. */
  155.     CTHR_DRG((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS2, context.getParsedUnitsBehavior(),
  156.                                                              container::setCthrdrg)),
  157.     /** Object covariance matrix [9,8]. */
  158.     CTHR_SRP((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS2, context.getParsedUnitsBehavior(),
  159.                                                              container::setCthrsrp)),
  160.     /** Object covariance matrix [9,9]. */
  161.     CTHR_THR((token, context, container) -> token.processAsDouble(Units.M2_PER_S4, context.getParsedUnitsBehavior(),
  162.                                                              container::setCthrthr));

  163.     /** Processing method. */
  164.     private final TokenProcessor processor;

  165.     /** Simple constructor.
  166.      * @param processor processing method
  167.      */
  168.     XYZCovarianceKey(final TokenProcessor processor) {
  169.         this.processor = processor;
  170.     }

  171.     /** Process one token.
  172.      * @param token token to process
  173.      * @param context context binding
  174.      * @param container container to fill
  175.      * @return true of token was accepted
  176.      */
  177.     public boolean process(final ParseToken token, final ContextBinding context, final XYZCovariance container) {
  178.         return processor.process(token, context, container);
  179.     }

  180.     /** Interface for processing one token. */
  181.     interface TokenProcessor {
  182.         /** Process one token.
  183.          * @param token token to process
  184.          * @param context context binding
  185.          * @param container container to fill
  186.          * @return true of token was accepted
  187.          */
  188.         boolean process(ParseToken token, ContextBinding context, XYZCovariance container);
  189.     }

  190. }