RTNCovarianceKey.java

  1. /* Copyright 2002-2022 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 RTNCovariance CDM covariance matrix} entries.
  23.  * @author Melina Vanel
  24.  * @since 11.2
  25.  */
  26. public enum RTNCovarianceKey {

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

  30.     /** Object covariance matrix [1,1]. */
  31.     CR_R((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
  32.                                                              container::setCrr)),
  33.     /** Object covariance matrix [2,1]. */
  34.     CT_R((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
  35.                                                              container::setCtr)),
  36.     /** Object covariance matrix [2,2]. */
  37.     CT_T((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
  38.                                                              container::setCtt)),
  39.     /** Object covariance matrix [3,1]. */
  40.     CN_R((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
  41.                                                              container::setCnr)),
  42.     /** Object covariance matrix [3,2]. */
  43.     CN_T((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
  44.                                                              container::setCnt)),
  45.     /** Object covariance matrix [3,3]. */
  46.     CN_N((token, context, container) -> token.processAsDouble(Units.M2, context.getParsedUnitsBehavior(),
  47.                                                              container::setCnn)),
  48.     /** Object covariance matrix [4,1]. */
  49.     CRDOT_R((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  50.                                                              container::setCrdotr)),
  51.     /** Object covariance matrix [4,2]. */
  52.     CRDOT_T((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  53.                                                              container::setCrdott)),
  54.     /** Object covariance matrix [4,3]. */
  55.     CRDOT_N((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  56.                                                              container::setCrdotn)),
  57.     /** Object covariance matrix [4,4]. */
  58.     CRDOT_RDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  59.                                                              container::setCrdotrdot)),
  60.     /** Object covariance matrix [5,1]. */
  61.     CTDOT_R((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  62.                                                              container::setCtdotr)),
  63.     /** Object covariance matrix [5,2]. */
  64.     CTDOT_T((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  65.                                                              container::setCtdott)),
  66.     /** Object covariance matrix [5,3]. */
  67.     CTDOT_N((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  68.                                                              container::setCtdotn)),
  69.     /** Object covariance matrix [5,4]. */
  70.     CTDOT_RDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  71.                                                              container::setCtdotrdot)),
  72.     /** Object covariance matrix [5,5]. */
  73.     CTDOT_TDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  74.                                                              container::setCtdottdot)),
  75.     /** Object covariance matrix [6,1]. */
  76.     CNDOT_R((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  77.                                                              container::setCndotr)),
  78.     /** Object covariance matrix [6,2]. */
  79.     CNDOT_T((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  80.                                                              container::setCndott)),
  81.     /** Object covariance matrix [6,3]. */
  82.     CNDOT_N((token, context, container) -> token.processAsDouble(Units.M2_PER_S, context.getParsedUnitsBehavior(),
  83.                                                              container::setCndotn)),
  84.     /** Object covariance matrix [6,4]. */
  85.     CNDOT_RDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  86.                                                              container::setCndotrdot)),
  87.     /** Object covariance matrix [6,5]. */
  88.     CNDOT_TDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  89.                                                              container::setCndottdot)),
  90.     /** Object covariance matrix [6,6]. */
  91.     CNDOT_NDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  92.                                                              container::setCndotndot)),
  93.     /** Object covariance matrix [7,1]. */
  94.     CDRG_R((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
  95.                                                              container::setCdrgr)),
  96.     /** Object covariance matrix [7,2]. */
  97.     CDRG_T((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
  98.                                                              container::setCdrgt)),
  99.     /** Object covariance matrix [7,3]. */
  100.     CDRG_N((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
  101.                                                              container::setCdrgn)),
  102.     /** Object covariance matrix [7,4]. */
  103.     CDRG_RDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
  104.                                                              container::setCdrgrdot)),
  105.     /** Object covariance matrix [7,5]. */
  106.     CDRG_TDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
  107.                                                              container::setCdrgtdot)),
  108.     /** Object covariance matrix [7,6]. */
  109.     CDRG_NDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
  110.                                                              container::setCdrgndot)),
  111.     /** Object covariance matrix [7,7]. */
  112.     CDRG_DRG((token, context, container) -> token.processAsDouble(Units.M4_PER_KG2, context.getParsedUnitsBehavior(),
  113.                                                              container::setCdrgdrg)),
  114.     /** Object covariance matrix [8,1]. */
  115.     CSRP_R((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
  116.                                                              container::setCsrpr)),
  117.     /** Object covariance matrix [8,2]. */
  118.     CSRP_T((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
  119.                                                              container::setCsrpt)),
  120.     /** Object covariance matrix [8,3]. */
  121.     CSRP_N((token, context, container) -> token.processAsDouble(Units.M3_PER_KG, context.getParsedUnitsBehavior(),
  122.                                                              container::setCsrpn)),
  123.     /** Object covariance matrix [8,4]. */
  124.     CSRP_RDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
  125.                                                              container::setCsrprdot)),
  126.     /** Object covariance matrix [8,5]. */
  127.     CSRP_TDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
  128.                                                              container::setCsrptdot)),
  129.     /** Object covariance matrix [8,6]. */
  130.     CSRP_NDOT((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS, context.getParsedUnitsBehavior(),
  131.                                                              container::setCsrpndot)),
  132.     /** Object covariance matrix [8,7]. */
  133.     CSRP_DRG((token, context, container) -> token.processAsDouble(Units.M4_PER_KG2, context.getParsedUnitsBehavior(),
  134.                                                              container::setCsrpdrg)),
  135.     /** Object covariance matrix [8,9]. */
  136.     CSRP_SRP((token, context, container) -> token.processAsDouble(Units.M4_PER_KG2, context.getParsedUnitsBehavior(),
  137.                                                              container::setCsrpsrp)),
  138.     /** Object covariance matrix [9,1]. */
  139.     CTHR_R((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  140.                                                              container::setCthrr)),
  141.     /** Object covariance matrix [9,2]. */
  142.     CTHR_T((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  143.                                                              container::setCthrt)),
  144.     /** Object covariance matrix [9,3]. */
  145.     CTHR_N((token, context, container) -> token.processAsDouble(Units.M2_PER_S2, context.getParsedUnitsBehavior(),
  146.                                                              container::setCthrn)),
  147.     /** Object covariance matrix [9,4]. */
  148.     CTHR_RDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S3, context.getParsedUnitsBehavior(),
  149.                                                              container::setCthrrdot)),
  150.     /** Object covariance matrix [9,5]. */
  151.     CTHR_TDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S3, context.getParsedUnitsBehavior(),
  152.                                                              container::setCthrtdot)),
  153.     /** Object covariance matrix [9,6]. */
  154.     CTHR_NDOT((token, context, container) -> token.processAsDouble(Units.M2_PER_S3, context.getParsedUnitsBehavior(),
  155.                                                              container::setCthrndot)),
  156.     /** Object covariance matrix [9,7]. */
  157.     CTHR_DRG((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS2, context.getParsedUnitsBehavior(),
  158.                                                              container::setCthrdrg)),
  159.     /** Object covariance matrix [9,8]. */
  160.     CTHR_SRP((token, context, container) -> token.processAsDouble(Units.M3_PER_KGS2, context.getParsedUnitsBehavior(),
  161.                                                              container::setCthrsrp)),
  162.     /** Object covariance matrix [9,9]. */
  163.     CTHR_THR((token, context, container) -> token.processAsDouble(Units.M2_PER_S4, context.getParsedUnitsBehavior(),
  164.                                                              container::setCthrthr));

  165.     /** Processing method. */
  166.     private final TokenProcessor processor;

  167.     /** Simple constructor.
  168.      * @param processor processing method
  169.      */
  170.     RTNCovarianceKey(final TokenProcessor processor) {
  171.         this.processor = processor;
  172.     }

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

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

  192. }