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