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.cdm;
18
19 import java.util.List;
20
21 import org.orekit.files.ccsds.ndm.odm.UserDefined;
22 import org.orekit.files.ccsds.section.CommentsContainer;
23 import org.orekit.files.ccsds.section.Data;
24
25 /**
26 * Container for Conjunction Data Message data.
27 * @author Melina Vanel
28 * @since 11.2
29 */
30 public class CdmData implements Data {
31
32 /** General comments block. */
33 private final CommentsContainer commentsBlock;
34
35 /** Quaternion block. */
36 private ODParameters ODParametersBlock;
37
38 /** Euler angles block. */
39 private AdditionalParameters additionalParametersBlock;
40
41 /** Spin-stabilized block. */
42 private final StateVector stateVectorBlock;
43
44 /** Spacecraft parameters block. */
45 private RTNCovariance covarianceMatrixBlock;
46
47 /** XYZ covariance block. */
48 private final XYZCovariance xyzCovarianceMatrixBlock;
49
50 /** Sigma/Eigenvectors covariance block. */
51 private final SigmaEigenvectorsCovariance sig3EigVec3CovarianceBlock;
52
53 /** Type of alternate covariance, if present. */
54 private AltCovarianceType altCovarianceType;
55
56 /** Additional Covariance Metadata block. */
57 private AdditionalCovarianceMetadata additionalCovMetadata;
58
59 /** The block containing the user defined parameters. */
60 private UserDefined userDefinedBlock;
61
62
63
64
65
66 /** Default constructor.
67 * @param commentsBlock general comments block
68 * @param ODParametersBlock OD parameters block (may be null)
69 * @param additionalParametersBlock additionnal parameters block (may be null)
70 * @param stateVectorBlock state vector block
71 * @param covarianceMatrixBlock covariance matrix in RTN coordinates frame block
72 * @param xyzCovarianceBlock XYZ covariance matrix block
73 * @param sig3EigVec3CovarianceBlock sigma/eigenvector covariance block
74 * @param altCovarianceType type of alternate covariance
75 * @param additionalCovMetadata additional covariance metadata
76 */
77 private CdmData(final CommentsContainer commentsBlock,
78 final ODParameters ODParametersBlock,
79 final AdditionalParameters additionalParametersBlock,
80 final StateVector stateVectorBlock,
81 final RTNCovariance covarianceMatrixBlock,
82 final XYZCovariance xyzCovarianceBlock,
83 final SigmaEigenvectorsCovariance sig3EigVec3CovarianceBlock,
84 final AltCovarianceType altCovarianceType,
85 final AdditionalCovarianceMetadata additionalCovMetadata) {
86 this.commentsBlock = commentsBlock;
87 this.ODParametersBlock = ODParametersBlock;
88 this.additionalParametersBlock = additionalParametersBlock;
89 this.stateVectorBlock = stateVectorBlock;
90 this.covarianceMatrixBlock = covarianceMatrixBlock;
91 this.xyzCovarianceMatrixBlock = xyzCovarianceBlock;
92 this.sig3EigVec3CovarianceBlock = sig3EigVec3CovarianceBlock;
93 this.altCovarianceType = altCovarianceType;
94 this.additionalCovMetadata = additionalCovMetadata;
95 this.userDefinedBlock = null;
96 }
97
98 /** Constructor with RTN covariance.
99 * @param commentsBlock general comments block
100 * @param ODParametersBlock OD parameters block (may be null)
101 * @param additionalParametersBlock additionnal parameters block (may be null)
102 * @param stateVectorBlock state vector block
103 * @param covarianceMatrixBlock covariance matrix in RTN coordinates frame block
104
105 */
106 public CdmData(final CommentsContainer commentsBlock,
107 final ODParameters ODParametersBlock,
108 final AdditionalParameters additionalParametersBlock,
109 final StateVector stateVectorBlock,
110 final RTNCovariance covarianceMatrixBlock) {
111 this(commentsBlock, ODParametersBlock, additionalParametersBlock, stateVectorBlock,
112 covarianceMatrixBlock, null, null, null, null);
113 }
114
115 /** Constructor with RTN covariance.
116 * @param commentsBlock general comments block
117 * @param ODParametersBlock OD parameters block (may be null)
118 * @param additionalParametersBlock additionnal parameters block (may be null)
119 * @param stateVectorBlock state vector block
120 * @param covarianceMatrixBlock covariance matrix in RTN coordinates frame block
121 * @param additionalCovMetadata additional covariance metadata
122 */
123 public CdmData(final CommentsContainer commentsBlock,
124 final ODParameters ODParametersBlock,
125 final AdditionalParameters additionalParametersBlock,
126 final StateVector stateVectorBlock,
127 final RTNCovariance covarianceMatrixBlock,
128 final AdditionalCovarianceMetadata additionalCovMetadata) {
129 this(commentsBlock, ODParametersBlock, additionalParametersBlock, stateVectorBlock,
130 covarianceMatrixBlock, null, null, null, additionalCovMetadata);
131 }
132
133 /** Constructor with RTN and XYZ covariance.
134 * @param commentsBlock general comments block
135 * @param ODParametersBlock OD parameters block (may be null)
136 * @param additionalParametersBlock additionnal parameters block (may be null)
137 * @param stateVectorBlock state vector block
138 * @param covarianceMatrixBlock covariance matrix in RTN coordinates frame block
139 * @param xyzCovarianceBlock XYZ covariance matrix block
140 * @param additionalCovMetadata additional covariance metadata
141 */
142 public CdmData(final CommentsContainer commentsBlock,
143 final ODParameters ODParametersBlock,
144 final AdditionalParameters additionalParametersBlock,
145 final StateVector stateVectorBlock,
146 final RTNCovariance covarianceMatrixBlock,
147 final XYZCovariance xyzCovarianceBlock,
148 final AdditionalCovarianceMetadata additionalCovMetadata) {
149 this(commentsBlock, ODParametersBlock, additionalParametersBlock, stateVectorBlock,
150 covarianceMatrixBlock, xyzCovarianceBlock, null, AltCovarianceType.XYZ, additionalCovMetadata);
151 }
152
153 /** Constructor with RTN and sigma/eigenvector covariance.
154 * @param commentsBlock general comments block
155 * @param ODParametersBlock OD parameters block (may be null)
156 * @param additionalParametersBlock additionnal parameters block (may be null)
157 * @param stateVectorBlock state vector block
158 * @param covarianceMatrixBlock covariance matrix in RTN coordinates frame block
159 * @param sig3EigVec3CovarianceBlock sigma/eigenvector covariance block
160 * @param additionalCovMetadata additional covariance metadata
161 */
162 public CdmData(final CommentsContainer commentsBlock,
163 final ODParameters ODParametersBlock,
164 final AdditionalParameters additionalParametersBlock,
165 final StateVector stateVectorBlock,
166 final RTNCovariance covarianceMatrixBlock,
167 final SigmaEigenvectorsCovariance sig3EigVec3CovarianceBlock,
168 final AdditionalCovarianceMetadata additionalCovMetadata) {
169 this(commentsBlock, ODParametersBlock, additionalParametersBlock, stateVectorBlock,
170 covarianceMatrixBlock, null, sig3EigVec3CovarianceBlock, AltCovarianceType.CSIG3EIGVEC3, additionalCovMetadata);
171 }
172
173 /** {@inheritDoc} */
174 @Override
175 public void validate(final double version) {
176 if (ODParametersBlock != null) {
177 ODParametersBlock.validate(version);
178 }
179 if (additionalParametersBlock != null) {
180 additionalParametersBlock.validate(version);
181 }
182 stateVectorBlock.validate(version);
183
184 // covariance options
185 if (altCovarianceType == null) {
186 covarianceMatrixBlock.validate(version);
187 } else if (altCovarianceType == AltCovarianceType.XYZ) {
188 xyzCovarianceMatrixBlock.validate(version);
189 } else if (altCovarianceType == AltCovarianceType.CSIG3EIGVEC3) {
190 sig3EigVec3CovarianceBlock.validate(version);
191 }
192
193 }
194
195 /** Get the comments.
196 * @return comments
197 */
198 public List<String> getComments() {
199 return commentsBlock.getComments();
200 }
201
202 /** Get the OD parameters logical block.
203 * @return OD parameters block (may be null)
204 */
205 public ODParameters getODParametersBlock() {
206 return ODParametersBlock;
207 }
208
209 /** Set the OD parameters logical block.
210 * @param ODParametersBlock the OD Parameters logical block
211 */
212 public void setODParametersBlock(final ODParameters ODParametersBlock) {
213 this.ODParametersBlock = ODParametersBlock;
214 }
215
216 /** Get the additional parameters logical block.
217 * @return additional parameters block (may be null)
218 */
219 public AdditionalParameters getAdditionalParametersBlock() {
220 return additionalParametersBlock;
221 }
222
223 /** Set the additional parameters logical block.
224 * @param additionalParametersBlock the additional parameters logical block
225 */
226 public void setAdditionalParametersBlock(final AdditionalParameters additionalParametersBlock) {
227 this.additionalParametersBlock = additionalParametersBlock;
228 }
229
230 /** Get the state vector logical block.
231 * @return state vector block
232 */
233 public StateVector getStateVectorBlock() {
234 return stateVectorBlock;
235 }
236
237 /** Get the covariance matrix logical block.
238 * <p> The RTN Covariance Matrix is provided in the 9×9 Lower Triangular Form. All parameters of the 6×6 position/velocity submatrix
239 * are mandatory. The remaining elements will return NaN if not provided. </p>
240 * @return covariance matrix block
241 */
242 public RTNCovariance getRTNCovarianceBlock() {
243 return covarianceMatrixBlock;
244 }
245
246 /** Get the Covariance Matrix in the XYZ Coordinate Frame (defined by value of {@link CdmMetadataKey#ALT_COV_REF_FRAME}).
247 * <p> This block is not mandatory and on condition that {@link CdmMetadataKey#ALT_COV_TYPE} = {@link AltCovarianceType#XYZ}.
248 * <p> This method will return null if the block is not defined in the CDM. </p>
249 * @return XYZ covariance matrix block
250 */
251 public XYZCovariance getXYZCovarianceBlock() {
252 return xyzCovarianceMatrixBlock;
253 }
254
255 /** Get the Sigma / Eigenvector covariance logical block.
256 * <p> This block is not mandatory and on condition that {@link CdmMetadataKey#ALT_COV_TYPE} = {@link AltCovarianceType#CSIG3EIGVEC3}.
257 * <p> This method will return null if the block is not defined in the CDM. </p>
258 * @return the Sigma / Eigenvector covariance block
259 */
260 public SigmaEigenvectorsCovariance getSig3EigVec3CovarianceBlock() {
261 return sig3EigVec3CovarianceBlock;
262 }
263
264 /** Get the additional covariance metadata logical block.
265 * <p> This method will return null if the block is not defined in the CDM. </p>
266 * @return the additional covariance metadata logical block
267 */
268 public AdditionalCovarianceMetadata getAdditionalCovMetadataBlock() {
269 return additionalCovMetadata;
270 }
271
272 /** Set the additional covariance metadata logical block.
273 * @param covarianceMatrixBlock the additional covariance metadata logical block
274 */
275 public void setCovarianceMatrixBlock(final RTNCovariance covarianceMatrixBlock) {
276 this.covarianceMatrixBlock = covarianceMatrixBlock;
277 }
278
279 /** Get the user defined logical block.
280 * <p> This method will return null if the block is not defined in the CDM. </p>
281 * @return the additional covariance metadata logical block
282 */
283 public UserDefined getUserDefinedBlock() {
284 return userDefinedBlock;
285 }
286
287 /** Set the user defined logical block.
288 * <p> This block is added at the end of the CDM parsing as common to both Object 1 and 2. </p>
289 * @param userDefinedBlock the user defined block to set
290 */
291 public void setUserDefinedBlock(final UserDefined userDefinedBlock) {
292 this.userDefinedBlock = userDefinedBlock;
293 }
294 }
295