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;
19
20 import java.util.function.Supplier;
21
22 import org.hipparchus.linear.MatrixUtils;
23 import org.hipparchus.linear.RealMatrix;
24 import org.orekit.errors.OrekitException;
25 import org.orekit.errors.OrekitMessages;
26 import org.orekit.files.ccsds.definitions.FrameFacade;
27 import org.orekit.files.ccsds.section.CommentsContainer;
28 import org.orekit.files.ccsds.section.Data;
29 import org.orekit.time.AbsoluteDate;
30
31
32
33
34
35 public class CartesianCovariance extends CommentsContainer implements Data {
36
37
38 private static final String[] LABELS = {
39 "X", "Y", "Z", "X_DOT", "Y_DOT", "Z_DOT"
40 };
41
42
43 private final Supplier<FrameFacade> defaultFrameSupplier;
44
45
46 private AbsoluteDate epoch;
47
48
49 private FrameFacade referenceFrame;
50
51
52 private RealMatrix covarianceMatrix;
53
54
55
56
57
58 public CartesianCovariance(final Supplier<FrameFacade> defaultFrameSupplier) {
59 this.defaultFrameSupplier = defaultFrameSupplier;
60 covarianceMatrix = MatrixUtils.createRealMatrix(6, 6);
61 for (int i = 0; i < covarianceMatrix.getRowDimension(); ++i) {
62 for (int j = 0; j <= i; ++j) {
63 covarianceMatrix.setEntry(i, j, Double.NaN);
64 }
65 }
66 }
67
68
69 @Override
70 public void validate(final double version) {
71 super.validate(version);
72 checkNotNull(epoch, CartesianCovarianceKey.EPOCH);
73 for (int i = 0; i < covarianceMatrix.getRowDimension(); ++i) {
74 for (int j = 0; j <= i; ++j) {
75 if (Double.isNaN(covarianceMatrix.getEntry(i, j))) {
76 throw new OrekitException(OrekitMessages.CCSDS_MISSING_KEYWORD,
77 "C" + LABELS[i] + "_" + LABELS[j]);
78 }
79 }
80 }
81 }
82
83
84
85
86 public AbsoluteDate getEpoch() {
87 return epoch;
88 }
89
90
91
92
93 public void setEpoch(final AbsoluteDate epoch) {
94 refuseFurtherComments();
95 this.epoch = epoch;
96 }
97
98
99
100
101
102
103
104 public FrameFacade getReferenceFrame() {
105 return referenceFrame == null ? defaultFrameSupplier.get() : referenceFrame;
106 }
107
108
109
110
111 public void setReferenceFrame(final FrameFacade referenceFrame) {
112 refuseFurtherComments();
113 this.referenceFrame = referenceFrame;
114 }
115
116
117
118
119 public RealMatrix getCovarianceMatrix() {
120 return covarianceMatrix;
121 }
122
123
124
125
126
127
128
129
130
131 public void setCovarianceMatrixEntry(final int j, final int k, final double entry) {
132 refuseFurtherComments();
133 covarianceMatrix.setEntry(j, k, entry);
134 covarianceMatrix.setEntry(k, j, entry);
135 }
136
137 }