Ordering.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.odm.ocm;

  18. /** Keys for {@link OrbitCovariance} elements ordering.
  19.  * @author Luc Maisonobe
  20.  * @since 11.0
  21.  */
  22. public enum Ordering {

  23.     /** Lower Triangular Matrix. */
  24.     LTM {

  25.         /** {@inheritDoc} */
  26.         @Override
  27.         int nbElements(final int dimension) {
  28.             return (dimension * (dimension + 1)) / 2;
  29.         }

  30.         /** {@inheritDoc} */
  31.         @Override
  32.         void update(final CovarianceIndexer indexer) {
  33.             final int i = indexer.getRow();
  34.             final int j = indexer.getColumn();
  35.             if (j < i) {
  36.                 // continue on same row
  37.                 indexer.setColumn(j + 1);
  38.             } else {
  39.                 // start new row
  40.                 indexer.setRow(i + 1);
  41.                 indexer.setColumn(0);
  42.             }
  43.         }

  44.     },

  45.     /** Upper Triangular Matrix. */
  46.     UTM {

  47.         /** {@inheritDoc} */
  48.         @Override
  49.         int nbElements(final int dimension) {
  50.             return (dimension * (dimension + 1)) / 2;
  51.         }

  52.         /** {@inheritDoc} */
  53.         @Override
  54.         void update(final CovarianceIndexer indexer) {
  55.             final int i = indexer.getRow();
  56.             final int j = indexer.getColumn();
  57.             if (j + 1 < indexer.getDimension()) {
  58.                 // continue on same row
  59.                 indexer.setColumn(j + 1);
  60.             } else {
  61.                 // start new row
  62.                 indexer.setRow(i + 1);
  63.                 indexer.setColumn(i + 1);
  64.             }
  65.         }

  66.     },

  67.     /** Full symmetric Matrix. */
  68.     FULL {

  69.         /** {@inheritDoc} */
  70.         @Override
  71.         int nbElements(final int dimension) {
  72.             return dimension * dimension;
  73.         }

  74.         /** {@inheritDoc} */
  75.         @Override
  76.         void update(final CovarianceIndexer indexer) {
  77.             final int i = indexer.getRow();
  78.             final int j = indexer.getColumn();
  79.             if (j + 1 < indexer.getDimension()) {
  80.                 // continue on same row
  81.                 indexer.setColumn(j + 1);
  82.             } else {
  83.                 // start new row
  84.                 indexer.setRow(i + 1);
  85.                 indexer.setColumn(0);
  86.             }
  87.         }

  88.     },

  89.     /** Lower Triangular Matrix conflated with cross-correlation terms. */
  90.     LTMWCC {

  91.         /** {@inheritDoc} */
  92.         @Override
  93.         int nbElements(final int dimension) {
  94.             return FULL.nbElements(dimension);
  95.         }

  96.         /** {@inheritDoc} */
  97.         @Override
  98.         void update(final CovarianceIndexer indexer) {
  99.             FULL.update(indexer);
  100.             indexer.setCrossCorrelation(indexer.getColumn() > indexer.getRow());
  101.         }

  102.     },

  103.     /** Upper Triangular Matrix conflated with cross-correlation terms. */
  104.     UTMWCC {

  105.         /** {@inheritDoc} */
  106.         @Override
  107.         int nbElements(final int dimension) {
  108.             return FULL.nbElements(dimension);
  109.         }

  110.         /** {@inheritDoc} */
  111.         @Override
  112.         void update(final CovarianceIndexer indexer) {
  113.             FULL.update(indexer);
  114.             indexer.setCrossCorrelation(indexer.getRow() > indexer.getColumn());
  115.         }

  116.     };

  117.     /** Get number of ordered elements.
  118.      * @param dimension matrix dimension
  119.      * @return number of ordered elements
  120.      */
  121.     abstract int nbElements(int dimension);

  122.     /** Update indexer.
  123.      * @param indexer index to update for handling next element
  124.      */
  125.     abstract void update(CovarianceIndexer indexer);

  126. }