1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.orekit.files.ccsds.ndm.odm.ocm;
19
20 import java.util.List;
21
22 import org.hipparchus.linear.MatrixUtils;
23 import org.hipparchus.linear.RealMatrix;
24 import org.orekit.time.AbsoluteDate;
25 import org.orekit.time.TimeStamped;
26 import org.orekit.utils.units.Unit;
27
28
29
30
31
32 public class OrbitCovariance implements TimeStamped {
33
34
35 private final OrbitElementsType type;
36
37
38 private final AbsoluteDate date;
39
40
41 private final RealMatrix matrix;
42
43
44
45
46
47
48
49
50 public OrbitCovariance(final OrbitElementsType type, final Ordering ordering, final AbsoluteDate date,
51 final String[] fields, final int first) {
52 final List<Unit> units = type.getUnits();
53 this.type = type;
54 this.date = date;
55 this.matrix = MatrixUtils.createRealMatrix(units.size(), units.size());
56 final CovarianceIndexer indexer = new CovarianceIndexer(units.size());
57 for (int k = 0; first + k < fields.length; ++k) {
58 if (!indexer.isCrossCorrelation()) {
59 final int i = indexer.getRow();
60 final int j = indexer.getColumn();
61 final double raw = Double.parseDouble(fields[first + k]);
62 final double converted = units.get(i).toSI(units.get(j).toSI(raw));
63 matrix.setEntry(i, j, converted);
64 if (i != j) {
65 matrix.setEntry(j, i, converted);
66 }
67 }
68 ordering.update(indexer);
69 }
70 }
71
72
73 @Override
74 public AbsoluteDate getDate() {
75 return date;
76 }
77
78
79
80
81 public RealMatrix getMatrix() {
82 return matrix;
83 }
84
85
86
87
88 public OrbitElementsType getType() {
89 return type;
90 }
91
92 }