1 /* Copyright 2002-2025 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
19 /** Keys for {@link OrbitCovariance} elements ordering.
20 * @author Luc Maisonobe
21 * @since 11.0
22 */
23 public enum Ordering {
24
25 /** Lower Triangular Matrix. */
26 LTM {
27
28 /** {@inheritDoc} */
29 @Override
30 int nbElements(final int dimension) {
31 return (dimension * (dimension + 1)) / 2;
32 }
33
34 /** {@inheritDoc} */
35 @Override
36 void update(final CovarianceIndexer indexer) {
37 final int i = indexer.getRow();
38 final int j = indexer.getColumn();
39 if (j < i) {
40 // continue on same row
41 indexer.setColumn(j + 1);
42 } else {
43 // start new row
44 indexer.setRow(i + 1);
45 indexer.setColumn(0);
46 }
47 }
48
49 },
50
51 /** Upper Triangular Matrix. */
52 UTM {
53
54 /** {@inheritDoc} */
55 @Override
56 int nbElements(final int dimension) {
57 return (dimension * (dimension + 1)) / 2;
58 }
59
60 /** {@inheritDoc} */
61 @Override
62 void update(final CovarianceIndexer indexer) {
63 final int i = indexer.getRow();
64 final int j = indexer.getColumn();
65 if (j + 1 < indexer.getDimension()) {
66 // continue on same row
67 indexer.setColumn(j + 1);
68 } else {
69 // start new row
70 indexer.setRow(i + 1);
71 indexer.setColumn(i + 1);
72 }
73 }
74
75 },
76
77 /** Full symmetric Matrix. */
78 FULL {
79
80 /** {@inheritDoc} */
81 @Override
82 int nbElements(final int dimension) {
83 return dimension * dimension;
84 }
85
86 /** {@inheritDoc} */
87 @Override
88 void update(final CovarianceIndexer indexer) {
89 final int i = indexer.getRow();
90 final int j = indexer.getColumn();
91 if (j + 1 < indexer.getDimension()) {
92 // continue on same row
93 indexer.setColumn(j + 1);
94 } else {
95 // start new row
96 indexer.setRow(i + 1);
97 indexer.setColumn(0);
98 }
99 }
100
101 },
102
103 /** Lower Triangular Matrix conflated with cross-correlation terms. */
104 LTMWCC {
105
106 /** {@inheritDoc} */
107 @Override
108 int nbElements(final int dimension) {
109 return FULL.nbElements(dimension);
110 }
111
112 /** {@inheritDoc} */
113 @Override
114 void update(final CovarianceIndexer indexer) {
115 FULL.update(indexer);
116 indexer.setCrossCorrelation(indexer.getColumn() > indexer.getRow());
117 }
118
119 },
120
121 /** Upper Triangular Matrix conflated with cross-correlation terms. */
122 UTMWCC {
123
124 /** {@inheritDoc} */
125 @Override
126 int nbElements(final int dimension) {
127 return FULL.nbElements(dimension);
128 }
129
130 /** {@inheritDoc} */
131 @Override
132 void update(final CovarianceIndexer indexer) {
133 FULL.update(indexer);
134 indexer.setCrossCorrelation(indexer.getRow() > indexer.getColumn());
135 }
136
137 };
138
139 /** Get number of ordered elements.
140 * @param dimension matrix dimension
141 * @return number of ordered elements
142 */
143 abstract int nbElements(int dimension);
144
145 /** Update indexer.
146 * @param indexer index to update for handling next element
147 */
148 abstract void update(CovarianceIndexer indexer);
149
150 }