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 org.hipparchus.linear.MatrixUtils;
20  import org.hipparchus.linear.RealMatrix;
21  import org.orekit.files.ccsds.section.CommentsContainer;
22  
23  /**
24   * Container for RTN covariance matrix data.
25   * <p>
26   * Beware that the Orekit getters and setters all rely on SI units. The parsers
27   * and writers take care of converting these SI units into CCSDS mandatory units.
28   * The {@link org.orekit.utils.units.Unit Unit} class provides useful
29   * {@link org.orekit.utils.units.Unit#fromSI(double) fromSi} and
30   * {@link org.orekit.utils.units.Unit#toSI(double) toSI} methods in case the callers
31   * already use CCSDS units instead of the API SI units. The general-purpose
32   * {@link org.orekit.utils.units.Unit Unit} class (without an 's') and the
33   * CCSDS-specific {@link org.orekit.files.ccsds.definitions.Units Units} class
34   * (with an 's') also provide some predefined units. These predefined units and the
35   * {@link org.orekit.utils.units.Unit#fromSI(double) fromSi} and
36   * {@link org.orekit.utils.units.Unit#toSI(double) toSI} conversion methods are indeed
37   * what the parsers and writers use for the conversions.
38   * </p>
39   * <p>
40   * This class has a RealMatrix as attribute which can be access with
41   * {@code getRTNCovariaxMatrix} method. Beware that there are thus two
42   * ways to modify the RTN covariance : {@code setC…} ({@code setCrr},
43   * {@code setCtr}…) which should be prioritized and
44   * {@code getRTNCovariaxMatrix.setEntry(row, col, value)}.
45   * </p>
46   * <p>
47   * The RTN Covariance Matrix is provided in the 9×9 Lower Triangular Form. All parameters
48   * of the 6×6 position/velocity submatrix are mandatory. The remaining elements will return
49   * {code NaN} if not provided.
50   * </p>
51   * @author Melina Vanel
52   * @since 11.2
53   */
54  public class RTNCovariance extends CommentsContainer {
55  
56      /** RTN covariance matrix. */
57      private final RealMatrix covarianceMatrix;
58  
59      /** Simple constructor. To update matrix value there are 2 ways to modify the RTN
60       * covariance : setC... ( setCrr, setCtr ...) which should be prioritized and
61       * getRTNCovariaxMatrix.setEntry(row, col, value).
62       * <p> The RTN Covariance Matrix is provided in the 9×9 Lower Triangular Form. All parameters of the 6×6 position/velocity submatrix
63       * are mandatory. The remaining elements will return NaN if not provided. </p>
64       */
65      public RTNCovariance() {
66          covarianceMatrix = MatrixUtils.createRealMatrix(9, 9);
67          for (int i = 0; i < covarianceMatrix.getRowDimension(); ++i) {
68              for (int j = 0; j <= i; ++j) {
69                  covarianceMatrix.setEntry(i, j, Double.NaN);
70              }
71          }
72  
73      }
74  
75      /** {@inheritDoc} */
76      @Override
77      public void validate(final double version) {
78          super.validate(version);
79          // We only check values that are mandatory in a cdm file
80          checkNotNaN(getCrr(),              RTNCovarianceKey.CR_R.name());
81          checkNotNaN(getCtr(),              RTNCovarianceKey.CT_R.name());
82          checkNotNaN(getCtt(),              RTNCovarianceKey.CT_T.name());
83          checkNotNaN(getCnr(),              RTNCovarianceKey.CN_R.name());
84          checkNotNaN(getCnt(),              RTNCovarianceKey.CN_T.name());
85          checkNotNaN(getCnn(),              RTNCovarianceKey.CN_N.name());
86          checkNotNaN(getCrdotr(),           RTNCovarianceKey.CRDOT_R.name());
87          checkNotNaN(getCrdott(),           RTNCovarianceKey.CRDOT_T.name());
88          checkNotNaN(getCrdotn(),           RTNCovarianceKey.CRDOT_N.name());
89          checkNotNaN(getCrdotrdot(),        RTNCovarianceKey.CRDOT_RDOT.name());
90          checkNotNaN(getCtdotr(),           RTNCovarianceKey.CTDOT_R.name());
91          checkNotNaN(getCtdott(),           RTNCovarianceKey.CTDOT_T.name());
92          checkNotNaN(getCtdotn(),           RTNCovarianceKey.CTDOT_N.name());
93          checkNotNaN(getCtdotrdot(),        RTNCovarianceKey.CTDOT_RDOT.name());
94          checkNotNaN(getCtdottdot(),        RTNCovarianceKey.CTDOT_TDOT.name());
95          checkNotNaN(getCndotr(),           RTNCovarianceKey.CNDOT_R.name());
96          checkNotNaN(getCndott(),           RTNCovarianceKey.CNDOT_T.name());
97          checkNotNaN(getCndotn(),           RTNCovarianceKey.CNDOT_N.name());
98          checkNotNaN(getCndotrdot(),        RTNCovarianceKey.CNDOT_RDOT.name());
99          checkNotNaN(getCndottdot(),        RTNCovarianceKey.CNDOT_TDOT.name());
100         checkNotNaN(getCndotndot(),        RTNCovarianceKey.CNDOT_NDOT.name());
101     }
102 
103     /** Set an entry in the RTN covariance matrix.
104      * <p>
105      * Both m(j, k) and m(k, j) are set.
106      * </p>
107      * @param j row index (must be between 0 and 5 (inclusive)
108      * @param k column index (must be between 0 and 5 (inclusive)
109      * @param entry value of the matrix entry
110      */
111     public void setCovarianceMatrixEntry(final int j, final int k, final double entry) {
112         covarianceMatrix.setEntry(j, k, entry);
113         covarianceMatrix.setEntry(k, j, entry);
114     }
115 
116     /**
117      * Get the RTN covariance matrix.
118      * <p> The RTN Covariance Matrix is provided in the 9×9 Lower Triangular Form. All parameters of the 6×6 position/velocity submatrix
119      * are mandatory. The remaining elements will return NaN if not provided. </p>
120      * @return the RTN covariance matrix
121      */
122     public RealMatrix getRTNCovarianceMatrix() {
123         return covarianceMatrix;
124     }
125 
126     /**
127      * Get the object [1,1] in covariance matrix (with index starting at 1).
128      * @return the object [1,1] in covariance matrix (in m²)
129      */
130     public double getCrr() {
131         return covarianceMatrix.getEntry(0, 0);
132     }
133 
134     /**
135      * Set the object [1,1] in covariance matrix (with index starting at 1).
136      * @param CRR = object [1,1] in covariance matrix (in m²)
137      */
138     public void setCrr(final double CRR) {
139         refuseFurtherComments();
140         setCovarianceMatrixEntry(0, 0, CRR);
141     }
142 
143     /**
144      * Get the object [2,1] in covariance matrix (with index starting at 1).
145      * @return the object [2,1] in covariance matrix (in m²)
146      */
147     public double getCtr() {
148         return covarianceMatrix.getEntry(1, 0);
149     }
150 
151     /**
152      * Set the object [2,1] in covariance matrix (with index starting at 1).
153      * @param CTR = object [2,1] in covariance matrix (in m²)
154      */
155     public void setCtr(final double CTR) {
156         refuseFurtherComments();
157         setCovarianceMatrixEntry(1, 0, CTR);
158     }
159 
160     /**
161      * Get the object [2,2] in covariance matrix (with index starting at 1).
162      * @return the object [2,2] in covariance matrix (in m²)
163      */
164     public double getCtt() {
165         return covarianceMatrix.getEntry(1, 1);
166     }
167 
168     /**
169      * Set the object [2,2] in covariance matrix (with index starting at 1).
170      * @param CTT = object [2,2] in covariance matrix (in m²)
171      */
172     public void setCtt(final double CTT) {
173         refuseFurtherComments();
174         setCovarianceMatrixEntry(1, 1, CTT);
175     }
176 
177     /**
178      * Get the object [3,1] in covariance matrix (with index starting at 1).
179      * @return the object [3,1] in covariance matrix (in m²)
180      */
181     public double getCnr() {
182         return covarianceMatrix.getEntry(2, 0);
183     }
184 
185     /**
186      * Set the object [3,1] in covariance matrix (with index starting at 1).
187      * @param CNR = object [3,1] in covariance matrix (in m²)
188      */
189     public void setCnr(final double CNR) {
190         refuseFurtherComments();
191         setCovarianceMatrixEntry(2, 0, CNR);
192     }
193 
194     /**
195      * Get the object [3,2] in covariance matrix (with index starting at 1).
196      * @return the object [3,2] in covariance matrix (in m²)
197      */
198     public double getCnt() {
199         return covarianceMatrix.getEntry(2, 1);
200     }
201 
202     /**
203      * Set the object [3,2] in covariance matrix (with index starting at 1).
204      * @param CNT = object [3,2] in covariance matrix (in m²)
205      */
206     public void setCnt(final double CNT) {
207         refuseFurtherComments();
208         setCovarianceMatrixEntry(2, 1, CNT);
209     }
210 
211     /**
212      * Get the object [3,3] in covariance matrix (with index starting at 1).
213      * @return the object [3,3] in covariance matrix (in m²)
214      */
215     public double getCnn() {
216         return covarianceMatrix.getEntry(2, 2);
217     }
218 
219     /**
220      * Set the object [3,3] in covariance matrix (with index starting at 1).
221      * @param CNN = object [3,3] in covariance matrix (in m²)
222      */
223     public void setCnn(final double CNN) {
224         refuseFurtherComments();
225         setCovarianceMatrixEntry(2, 2, CNN);
226     }
227 
228     /**
229      * Get the object [4,1] in covariance matrix (with index starting at 1).
230      * @return the object [4,1] in covariance matrix (in m²/s)
231      */
232     public double getCrdotr() {
233         return covarianceMatrix.getEntry(3, 0);
234     }
235 
236     /**
237      * Set the object [4,1] in covariance matrix (with index starting at 1).
238      * @param CRdotR = object [4,1] in covariance matrix (in m²/s)
239      */
240     public void setCrdotr(final double CRdotR) {
241         refuseFurtherComments();
242         setCovarianceMatrixEntry(3, 0, CRdotR);
243     }
244 
245     /**
246      * Get the object [4,2] in covariance matrix (with index starting at 1).
247      * @return the object [4,2] in covariance matrix (in m²/s)
248      */
249     public double getCrdott() {
250         return covarianceMatrix.getEntry(3, 1);
251     }
252 
253     /**
254      * Set the object [4, 2] in covariance matrix (with index starting at 1).
255      * @param CRdotT = object [4, 2] in covariance matrix (in m²/s)
256      */
257     public void setCrdott(final double CRdotT) {
258         refuseFurtherComments();
259         setCovarianceMatrixEntry(3, 1, CRdotT);
260     }
261 
262     /**
263      * Get the object [4, 3] in covariance matrix (with index starting at 1) .
264      * @return the object [4, 3] in covariance matrix (in m²/s)
265      */
266     public double getCrdotn() {
267         return covarianceMatrix.getEntry(3, 2);
268     }
269 
270     /**
271      * Set the object [4, 3] in covariance matrix (with index starting at 1).
272      * @param CRdotN = object [4,3] in covariance matrix (in m²/s)
273      */
274     public void setCrdotn(final double CRdotN) {
275         refuseFurtherComments();
276         setCovarianceMatrixEntry(3, 2, CRdotN);
277     }
278 
279     /**
280      * Get the object [4, 4] in covariance matrix (with index starting at 1).
281      * @return the object [4, 4] in covariance matrix (in m²/s²)
282      */
283     public double getCrdotrdot() {
284         return covarianceMatrix.getEntry(3, 3);
285     }
286 
287     /**
288      * Set the object [4, 4] in covariance matrix (with index starting at 1).
289      * @param CRdotRdot = object [4, 4] in covariance matrix (in m²/s²)
290      */
291     public void setCrdotrdot(final double CRdotRdot) {
292         refuseFurtherComments();
293         setCovarianceMatrixEntry(3, 3, CRdotRdot);
294     }
295 
296     /**
297      * Get the object [5, 1] in covariance matrix (with index starting at 1).
298      * @return the object [5, 1] in covariance matrix (in m²/s)
299      */
300     public double getCtdotr() {
301         return covarianceMatrix.getEntry(4, 0);
302     }
303 
304     /**
305      * Set the object [5,1] in covariance matrix (with index starting at 1).
306      * @param CTdotR = object [5,1] in covariance matrix (in m²/s)
307      */
308     public void setCtdotr(final double CTdotR) {
309         refuseFurtherComments();
310         setCovarianceMatrixEntry(4, 0, CTdotR);
311     }
312 
313     /**
314      * Get the object [5,2] in covariance matrix (with index starting at 1).
315      * @return the object [5,2] in covariance matrix (in m²/s)
316      */
317     public double getCtdott() {
318         return covarianceMatrix.getEntry(4, 1);
319     }
320 
321     /**
322      * Set the object [5,2] in covariance matrix (with index starting at 1).
323      * @param CTdotT = object [5,2] in covariance matrix (in m²/s)
324      */
325     public void setCtdott(final double CTdotT) {
326         refuseFurtherComments();
327         setCovarianceMatrixEntry(4, 1, CTdotT);
328     }
329 
330     /**
331      * Get the object [5,3] in covariance matrix (with index starting at 1).
332      * @return the object [5,3] in covariance matrix (in m²/s)
333      */
334     public double getCtdotn() {
335         return covarianceMatrix.getEntry(4, 2);
336     }
337 
338     /**
339      * Set the object [5,3] in covariance matrix (with index starting at 1).
340      * @param CTdotN = object [5,3] in covariance matrix (in m²/s)
341      */
342     public void setCtdotn(final double CTdotN) {
343         refuseFurtherComments();
344         setCovarianceMatrixEntry(4, 2, CTdotN);
345     }
346 
347     /**
348      * Get the object [5,4] in covariance matrix (with index starting at 1).
349      * @return the object [5,4] in covariance matrix (in m²/s²)
350      */
351     public double getCtdotrdot() {
352         return covarianceMatrix.getEntry(4, 3);
353     }
354 
355     /**
356      * Set the object [5,4] in covariance matrix (with index starting at 1).
357      * @param CTdotRdot = object [5,4] in covariance matrix (in m²/s²)
358      */
359     public void setCtdotrdot(final double CTdotRdot) {
360         refuseFurtherComments();
361         setCovarianceMatrixEntry(4, 3, CTdotRdot);
362     }
363 
364     /**
365      * Get the object [5,5] in covariance matrix (with index starting at 1).
366      * @return the object [5,5] in covariance matrix (in m²/s²)
367      */
368     public double getCtdottdot() {
369         return covarianceMatrix.getEntry(4, 4);
370     }
371 
372     /**
373      * Set the object [5,5] in covariance matrix (with index starting at 1).
374      * @param CTdotTdot = object [5,5] in covariance matrix (in m²/s²)
375      */
376     public void setCtdottdot(final double CTdotTdot) {
377         refuseFurtherComments();
378         setCovarianceMatrixEntry(4, 4, CTdotTdot);
379     }
380 
381     /**
382      * Get the object [6,1] in covariance matrix (with index starting at 1).
383      * @return the object [6,1] in covariance matrix (in m²/s)
384      */
385     public double getCndotr() {
386         return covarianceMatrix.getEntry(5, 0);
387     }
388 
389     /**
390      * Set the object [6,1] in covariance matrix (with index starting at 1).
391      * @param CNdotR = object [6,1] in covariance matrix (in m²/s)
392      */
393     public void setCndotr(final double CNdotR) {
394         refuseFurtherComments();
395         setCovarianceMatrixEntry(5, 0, CNdotR);
396     }
397 
398     /**
399      * Get the object [6,2] in covariance matrix (with index starting at 1).
400      * @return the object [6,2] in covariance matrix (in m²/s)
401      */
402     public double getCndott() {
403         return covarianceMatrix.getEntry(5, 1);
404     }
405 
406     /**
407      * Set the object [6,2] in covariance matrix (with index starting at 1).
408      * @param CNdotT = object [6,2] in covariance matrix (in m²/s)
409      */
410     public void setCndott(final double CNdotT) {
411         refuseFurtherComments();
412         setCovarianceMatrixEntry(5, 1, CNdotT);
413     }
414 
415     /**
416      * Get the object [6,3] in covariance matrix (with index starting at 1).
417      * @return the object [6,3] in covariance matrix (in m²/s)
418      */
419     public double getCndotn() {
420         return covarianceMatrix.getEntry(5, 2);
421     }
422 
423     /**
424      * Set the object [6,3] in covariance matrix (with index starting at 1).
425      * @param CNdotN = object [6,3] in covariance matrix (in m²/s)
426      */
427     public void setCndotn(final double CNdotN) {
428         refuseFurtherComments();
429         setCovarianceMatrixEntry(5, 2, CNdotN);
430     }
431 
432     /**
433      * Get the object [6,4] in covariance matrix (with index starting at 1).
434      * @return the object [6,4] in covariance matrix (in m²/s²)
435      */
436     public double getCndotrdot() {
437         return covarianceMatrix.getEntry(5, 3);
438     }
439 
440     /**
441      * Set the object [6,4] in covariance matrix (with index starting at 1).
442      * @param CNdotRdot = object [6,4] in covariance matrix (in m²/s²)
443      */
444     public void setCndotrdot(final double CNdotRdot) {
445         refuseFurtherComments();
446         setCovarianceMatrixEntry(5, 3, CNdotRdot);
447     }
448 
449     /**
450      * Get the object [6,5] in covariance matrix (with index starting at 1).
451      * @return the object [6,5] in covariance matrix (in m²/s²)
452      */
453     public double getCndottdot() {
454         return covarianceMatrix.getEntry(5, 4);
455     }
456 
457     /**
458      * Set the object [6,5] in covariance matrix (with index starting at 1).
459      * @param CNdotTdot = object [6,5] in covariance matrix (in m²/s²)
460      */
461     public void setCndottdot(final double CNdotTdot) {
462         refuseFurtherComments();
463         setCovarianceMatrixEntry(5, 4, CNdotTdot);
464     }
465 
466     /**
467      * Get the object [6,6] in covariance matrix (with index starting at 1).
468      * @return the object [6,6] in covariance matrix (in m²/s²)
469      */
470     public double getCndotndot() {
471         return covarianceMatrix.getEntry(5, 5);
472     }
473 
474     /**
475      * Set the object [6,6] in covariance matrix (with index starting at 1).
476      * @param CNdotNdot = object [6,6] in covariance matrix (in m²/s²)
477      */
478     public void setCndotndot(final double CNdotNdot) {
479         refuseFurtherComments();
480         setCovarianceMatrixEntry(5, 5, CNdotNdot);
481     }
482 
483     /**
484      * Get the object [7,1] in covariance matrix (with index starting at 1).
485      * @return the object [7,1] in covariance matrix (in m³/kg)
486      */
487     public double getCdrgr() {
488         return covarianceMatrix.getEntry(6, 0);
489     }
490 
491     /**
492      * Set the object [7,1] in covariance matrix (with index starting at 1).
493      * @param CDRGR = object [7,1] in covariance matrix (in m³/kg)
494      */
495     public void setCdrgr(final double CDRGR) {
496         refuseFurtherComments();
497         setCovarianceMatrixEntry(6, 0, CDRGR);
498     }
499 
500     /**
501      * Get the object [7,2] in covariance matrix.
502      * @return the object [7,2] in covariance matrix (in m³/kg)
503      */
504     public double getCdrgt() {
505         return covarianceMatrix.getEntry(6, 1);
506     }
507 
508     /**
509      * Set the object [7,2] in covariance matrix (with index starting at 1).
510      * @param CDRGT = object [7,2] in covariance matrix (in m³/kg)
511      */
512     public void setCdrgt(final double CDRGT) {
513         refuseFurtherComments();
514         setCovarianceMatrixEntry(6, 1, CDRGT);
515     }
516 
517     /**
518      * Get the object [7,3] in covariance matrix (with index starting at 1).
519      * @return the object [7,3] in covariance matrix (in m³/kg)
520      */
521     public double getCdrgn() {
522         return covarianceMatrix.getEntry(6, 2);
523     }
524 
525     /**
526      * Set the object [7,3] in covariance matrix (with index starting at 1).
527      * @param CDRGN = object [7,3] in covariance matrix (in m³/kg)
528      */
529     public void setCdrgn(final double CDRGN) {
530         refuseFurtherComments();
531         setCovarianceMatrixEntry(6, 2, CDRGN);
532     }
533 
534     /**
535      * Get the object [7,4] in covariance matrix (with index starting at 1).
536      * @return the object [7,4] in covariance matrix (in m³/(kg.s))
537      */
538     public double getCdrgrdot() {
539         return covarianceMatrix.getEntry(6, 3);
540     }
541 
542     /**
543      * Set the object [7,4] in covariance matrix (with index starting at 1).
544      * @param CDRGRdot = object [7,4] in covariance matrix (in m³/(kg.s))
545      */
546     public void setCdrgrdot(final double CDRGRdot) {
547         refuseFurtherComments();
548         setCovarianceMatrixEntry(6, 3, CDRGRdot);
549     }
550 
551     /**
552      * Get the object [7,5] in covariance matrix (with index starting at 1).
553      * @return the object [7,5] in covariance matrix (in m³/(kg.s))
554      */
555     public double getCdrgtdot() {
556         return covarianceMatrix.getEntry(6, 4);
557     }
558 
559     /**
560      * Set the object [7,5] in covariance matrix (with index starting at 1).
561      * @param CDRGTdot = object [7,5] in covariance matrix (in m³/(kg.s))
562      */
563     public void setCdrgtdot(final double CDRGTdot) {
564         refuseFurtherComments();
565         setCovarianceMatrixEntry(6, 4, CDRGTdot);
566     }
567 
568     /**
569      * Get the object [7,6] in covariance matrix (with index starting at 1).
570      * @return the object [7,6] in covariance matrix (in m³/(kg.s))
571      */
572     public double getCdrgndot() {
573         return covarianceMatrix.getEntry(6, 5);
574     }
575 
576     /**
577      * Set the object [7,6] in covariance matrix (with index starting at 1).
578      * @param CDRGNdot = object [7,6] in covariance matrix (in m³/(kg.s))
579      */
580     public void setCdrgndot(final double CDRGNdot) {
581         refuseFurtherComments();
582         setCovarianceMatrixEntry(6, 5, CDRGNdot);
583     }
584 
585     /**
586      * Get the object [7,7] in covariance matrix (with index starting at 1).
587      * @return the object [7,7] in covariance matrix (in m⁴/kg²)
588      */
589     public double getCdrgdrg() {
590         return covarianceMatrix.getEntry(6, 6);
591     }
592 
593     /**
594      * Set the object [7,7] in covariance matrix (with index starting at 1).
595      * @param CDRGDRG = object [7,7] in covariance matrix (in m⁴/kg²)
596      */
597     public void setCdrgdrg(final double CDRGDRG) {
598         refuseFurtherComments();
599         setCovarianceMatrixEntry(6, 6, CDRGDRG);
600     }
601 
602     /**
603      * Get the object [8,1] in covariance matrix (with index starting at 1).
604      * @return the object [8,1] in covariance matrix (in m³/kg)
605      */
606     public double getCsrpr() {
607         return covarianceMatrix.getEntry(7, 0);
608     }
609 
610     /**
611      * Set the object [8,1] in covariance matrix (with index starting at 1).
612      * @param CSRPR = object [8,1] in covariance matrix (in m³/kg)
613      */
614     public void setCsrpr(final double CSRPR) {
615         refuseFurtherComments();
616         setCovarianceMatrixEntry(7, 0, CSRPR);
617     }
618 
619     /**
620      * Get the object [8,2] in covariance matrix (with index starting at 1).
621      * @return the object [8,2] in covariance matrix (in m³/kg)
622      */
623     public double getCsrpt() {
624         return covarianceMatrix.getEntry(7, 1);
625     }
626 
627     /**
628      * Set the object [8,2] in covariance matrix (with index starting at 1).
629      * @param CSRPT = object [8,2] in covariance matrix (in m³/kg)
630      */
631     public void setCsrpt(final double CSRPT) {
632         refuseFurtherComments();
633         setCovarianceMatrixEntry(7, 1, CSRPT);
634     }
635 
636     /**
637      * Get the object [8,3] in covariance matrix (with index starting at 1).
638      * @return the object [8,3] in covariance matrix (in m³/kg)
639      */
640     public double getCsrpn() {
641         return covarianceMatrix.getEntry(7, 2);
642     }
643 
644     /**
645      * Set the object [8,3] in covariance matrix (with index starting at 1).
646      * @param CSRPN = object [8,3] in covariance matrix (in m³/kg)
647      */
648     public void setCsrpn(final double CSRPN) {
649         refuseFurtherComments();
650         setCovarianceMatrixEntry(7, 2, CSRPN);
651     }
652 
653     /**
654      * Get the object [8,4] in covariance matrix (with index starting at 1).
655      * @return the object [8,4] in covariance matrix (in m³/(kg.s))
656      */
657     public double getCsrprdot() {
658         return covarianceMatrix.getEntry(7, 3);
659     }
660 
661     /**
662      * Set the object [8,4] in covariance matrix (with index starting at 1).
663      * @param CSRPRdot = object [8,4] in covariance matrix (in m³/(kg.s))
664      */
665     public void setCsrprdot(final double CSRPRdot) {
666         refuseFurtherComments();
667         setCovarianceMatrixEntry(7, 3, CSRPRdot);
668     }
669 
670     /**
671      * Get the object [8,5] in covariance matrix (with index starting at 1).
672      * @return the object [8,5] in covariance matrix (in m³/(kg.s))
673      */
674     public double getCsrptdot() {
675         return covarianceMatrix.getEntry(7, 4);
676     }
677 
678     /**
679      * Set the object [8,5] in covariance matrix (with index starting at 1).
680      * @param CSRPTdot = object [8,5] in covariance matrix (in m³/(kg.s))
681      */
682     public void setCsrptdot(final double CSRPTdot) {
683         refuseFurtherComments();
684         setCovarianceMatrixEntry(7, 4, CSRPTdot);
685     }
686 
687     /**
688      * Get the object [8,6] in covariance matrix (with index starting at 1).
689      * @return the object [8,6] in covariance matrix (in m³/(kg.s))
690      */
691     public double getCsrpndot() {
692         return covarianceMatrix.getEntry(7, 5);
693     }
694 
695     /**
696      * Set the object [8,6] in covariance matrix (with index starting at 1).
697      * @param CSRPNdot = object [8,6] in covariance matrix (in m³/(kg.s))
698      */
699     public void setCsrpndot(final double CSRPNdot) {
700         refuseFurtherComments();
701         setCovarianceMatrixEntry(7, 5, CSRPNdot);
702     }
703 
704     /**
705      * Get the object [8,7] in covariance matrix (with index starting at 1).
706      * @return the object [8,7] in covariance matrix (in m⁴/kg²)
707      */
708     public double getCsrpdrg() {
709         return covarianceMatrix.getEntry(7, 6);
710     }
711 
712     /**
713      * Set the object [8,7] in covariance matrix (with index starting at 1).
714      * @param CSRPDRG = object [8,7] in covariance matrix (in m⁴/kg²)
715      */
716     public void setCsrpdrg(final double CSRPDRG) {
717         refuseFurtherComments();
718         setCovarianceMatrixEntry(7, 6, CSRPDRG);
719     }
720 
721     /**
722      * Get the object [8,8] in covariance matrix (with index starting at 1).
723      * @return the object [8,8] in covariance matrix (in m⁴/kg²)
724      */
725     public double getCsrpsrp() {
726         return covarianceMatrix.getEntry(7, 7);
727     }
728 
729     /**
730      * Set the object [8,8] in covariance matrix (with index starting at 1).
731      * @param CSRPSRP = object [8,8] in covariance matrix (in m⁴/kg²)
732      */
733     public void setCsrpsrp(final double CSRPSRP) {
734         refuseFurtherComments();
735         setCovarianceMatrixEntry(7, 7, CSRPSRP);
736     }
737 
738     /**
739      * Get the object [9,1] in covariance matrix (with index starting at 1).
740      * @return the object [9,1] in covariance matrix (in m²/s²)
741      */
742     public double getCthrr() {
743         return covarianceMatrix.getEntry(8, 0);
744     }
745 
746     /**
747      * Set the object [9,1] in covariance matrix (with index starting at 1).
748      * @param CTHRR = object [9,1] in covariance matrix (in m²/s²)
749      */
750     public void setCthrr(final double CTHRR) {
751         refuseFurtherComments();
752         setCovarianceMatrixEntry(8, 0, CTHRR);
753     }
754 
755     /**
756      * Get the object [9,2] in covariance matrix (with index starting at 1).
757      * @return the object [9,2] in covariance matrix (in m²/s²)
758      */
759     public double getCthrt() {
760         return covarianceMatrix.getEntry(8, 1);
761     }
762 
763     /**
764      * Set the object [9,2] in covariance matrix (with index starting at 1).
765      * @param CTHRT = object [9,2] in covariance matrix (in m²/s²)
766      */
767     public void setCthrt(final double CTHRT) {
768         refuseFurtherComments();
769         setCovarianceMatrixEntry(8, 1, CTHRT);
770     }
771 
772     /**
773      * Get the object [9,3] in covariance matrix (with index starting at 1).
774      * @return the object [9,3] in covariance matrix (in m²/s²)
775      */
776     public double getCthrn() {
777         return covarianceMatrix.getEntry(8, 2);
778     }
779 
780     /**
781      * Set the object [9,3] in covariance matrix (with index starting at 1).
782      * @param CTHRN = object [9,3] in covariance matrix (in m²/s²)
783      */
784     public void setCthrn(final double CTHRN) {
785         refuseFurtherComments();
786         setCovarianceMatrixEntry(8, 2, CTHRN);
787     }
788 
789     /**
790      * Get the object [9,4] in covariance matrix (with index starting at 1).
791      * @return the object [9,4] in covariance matrix (in m²/s³)
792      */
793     public double getCthrrdot() {
794         return covarianceMatrix.getEntry(8, 3);
795     }
796 
797     /**
798      * Set the object [9,4] in covariance matrix (with index starting at 1).
799      * @param CTHRRdot = object [9,4] in covariance matrix (in m²/s³)
800      */
801     public void setCthrrdot(final double CTHRRdot) {
802         refuseFurtherComments();
803         setCovarianceMatrixEntry(8, 3, CTHRRdot);
804     }
805 
806     /**
807      * Get the object [9,5] in covariance matrix (with index starting at 1).
808      * @return the object [9,5] in covariance matrix (in m²/s³)
809      */
810     public double getCthrtdot() {
811         return covarianceMatrix.getEntry(8, 4);
812     }
813 
814     /**
815      * Set the object [9,5] in covariance matrix (with index starting at 1).
816      * @param CTHRTdot = object [9,5] in covariance matrix (in m²/s³)
817      */
818     public void setCthrtdot(final double CTHRTdot) {
819         refuseFurtherComments();
820         setCovarianceMatrixEntry(8, 4, CTHRTdot);
821     }
822 
823     /**
824      * Get the object [9,6] in covariance matrix (with index starting at 1).
825      * @return the object [9,6] in covariance matrix (in m²/s³)
826      */
827     public double getCthrndot() {
828         return covarianceMatrix.getEntry(8, 5);
829     }
830 
831     /**
832      * Set the object [9,6] in covariance matrix (with index starting at 1).
833      * @param CTHRNdot = object [9,6] in covariance matrix (in m²/s³)
834      */
835     public void setCthrndot(final double CTHRNdot) {
836         refuseFurtherComments();
837         setCovarianceMatrixEntry(8, 5, CTHRNdot);
838     }
839 
840     /**
841      * Get the object [9,7] in covariance matrix (with index starting at 1).
842      * @return the object [9,7] in covariance matrix (in m³/(kg.s²))
843      */
844     public double getCthrdrg() {
845         return covarianceMatrix.getEntry(8, 6);
846     }
847 
848     /**
849      * Set the object [9,7] in covariance matrix (with index starting at 1).
850      * @param CTHRDRG = object [9,7] in covariance matrix (in m³/(kg.s²))
851      */
852     public void setCthrdrg(final double CTHRDRG) {
853         refuseFurtherComments();
854         setCovarianceMatrixEntry(8, 6, CTHRDRG);
855     }
856 
857     /**
858      * Get the object [9,8] in covariance matrix (with index starting at 1).
859      * @return the object [9,8] in covariance matrix (in m³/(kg.s²))
860      */
861     public double getCthrsrp() {
862         return covarianceMatrix.getEntry(8, 7);
863     }
864 
865     /**
866      * Set the object [9,8] in covariance matrix (with index starting at 1).
867      * @param CTHRSRP = object [9,8] in covariance matrix (in m³/(kg.s²))
868      */
869     public void setCthrsrp(final double CTHRSRP) {
870         refuseFurtherComments();
871         setCovarianceMatrixEntry(8, 7, CTHRSRP);
872     }
873 
874     /**
875      * Get the object [9,9] in covariance matrix (with index starting at 1).
876      * @return the object [9,9] in covariance matrix (in m²/s⁴)
877      */
878     public double getCthrthr() {
879         return covarianceMatrix.getEntry(8, 8);
880     }
881 
882     /**
883      * Set the object [9,9] in covariance matrix (with index starting at 1).
884      * @param CTHRTHR = object [9,9] in covariance matrix (in m²/s⁴)
885      */
886     public void setCthrthr(final double CTHRTHR) {
887         refuseFurtherComments();
888         setCovarianceMatrixEntry(8, 8, CTHRTHR);
889     }
890 
891 }