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 18 package org.orekit.files.ccsds.ndm.odm.ocm; 19 20 import java.util.List; 21 22 import org.orekit.files.ccsds.definitions.FrameFacade; 23 import org.orekit.files.ccsds.definitions.OrbitRelativeFrame; 24 import org.orekit.files.ccsds.section.CommentsContainer; 25 import org.orekit.time.AbsoluteDate; 26 import org.orekit.utils.units.Unit; 27 28 /** Metadata for covariance history. 29 * <p> 30 * Beware that the Orekit getters and setters all rely on SI units. The parsers 31 * and writers take care of converting these SI units into CCSDS mandatory units. 32 * The {@link org.orekit.utils.units.Unit Unit} class provides useful 33 * {@link org.orekit.utils.units.Unit#fromSI(double) fromSi} and 34 * {@link org.orekit.utils.units.Unit#toSI(double) toSI} methods in case the callers 35 * already use CCSDS units instead of the API SI units. The general-purpose 36 * {@link org.orekit.utils.units.Unit Unit} class (without an 's') and the 37 * CCSDS-specific {@link org.orekit.files.ccsds.definitions.Units Units} class 38 * (with an 's') also provide some predefined units. These predefined units and the 39 * {@link org.orekit.utils.units.Unit#fromSI(double) fromSi} and 40 * {@link org.orekit.utils.units.Unit#toSI(double) toSI} conversion methods are indeed 41 * what the parsers and writers use for the conversions. 42 * </p> 43 * @author Luc Maisonobe 44 * @since 11.0 45 */ 46 public class OrbitCovarianceHistoryMetadata extends CommentsContainer { 47 48 /** Covariance identification number. */ 49 private String covID; 50 51 /** Identification number of previous covariance. */ 52 private String covPrevID; 53 54 /** Identification number of next covariance. */ 55 private String covNextID; 56 57 /** Basis of this covariance time history data. */ 58 private String covBasis; 59 60 /** Identification number of the covariance determination or simulation upon which this covariance is based. */ 61 private String covBasisID; 62 63 /** Reference frame of the covariance. */ 64 private FrameFacade covReferenceFrame; 65 66 /** Epoch of the covariance reference frame. */ 67 private AbsoluteDate covFrameEpoch; 68 69 /** Minimum scale factor to apply to achieve realism. */ 70 private double covScaleMin; 71 72 /** Maximum scale factor to apply to achieve realism. */ 73 private double covScaleMax; 74 75 /** Measure of confidence in covariance error matching reality. */ 76 private double covConfidence; 77 78 /** Covariance element set type. */ 79 private OrbitElementsType covType; 80 81 /** Covariance ordering. */ 82 private Ordering covOrdering; 83 84 /** Units of covariance element set. */ 85 private List<Unit> covUnits; 86 87 /** Simple constructor. 88 * @param epochT0 T0 epoch from file metadata 89 */ 90 public OrbitCovarianceHistoryMetadata(final AbsoluteDate epochT0) { 91 // we don't call the setXxx() methods in order to avoid 92 // calling refuseFurtherComments as a side effect 93 covBasis = null; 94 covReferenceFrame = new FrameFacade(null, null, 95 OrbitRelativeFrame.TNW_INERTIAL, null, 96 OrbitRelativeFrame.TNW_INERTIAL.name()); 97 covFrameEpoch = epochT0; 98 covScaleMin = Double.NaN; 99 covScaleMax = Double.NaN; 100 covConfidence = Double.NaN; 101 covType = OrbitElementsType.CARTPV; 102 covOrdering = Ordering.LTM; 103 } 104 105 /** {@inheritDoc} */ 106 @Override 107 public void validate(final double version) { 108 super.validate(version); 109 if (covUnits != null) { 110 Unit.ensureCompatible(covType.toString(), covType.getUnits(), false, covUnits); 111 } 112 } 113 114 /** Get covariance identification number. 115 * @return covariance identification number 116 */ 117 public String getCovID() { 118 return covID; 119 } 120 121 /** Set covariance identification number. 122 * @param covID covariance identification number 123 */ 124 public void setCovID(final String covID) { 125 refuseFurtherComments(); 126 this.covID = covID; 127 } 128 129 /** Get identification number of previous covariance. 130 * @return identification number of previous covariance 131 */ 132 public String getCovPrevID() { 133 return covPrevID; 134 } 135 136 /** Set identification number of previous covariance. 137 * @param covPrevID identification number of previous covariance 138 */ 139 public void setCovPrevID(final String covPrevID) { 140 refuseFurtherComments(); 141 this.covPrevID = covPrevID; 142 } 143 144 /** Get identification number of next covariance. 145 * @return identification number of next covariance 146 */ 147 public String getCovNextID() { 148 return covNextID; 149 } 150 151 /** Set identification number of next covariance. 152 * @param covNextID identification number of next covariance 153 */ 154 public void setCovNextID(final String covNextID) { 155 refuseFurtherComments(); 156 this.covNextID = covNextID; 157 } 158 159 /** Get basis of this covariance time history data. 160 * @return basis of this covariance time history data 161 */ 162 public String getCovBasis() { 163 return covBasis; 164 } 165 166 /** Set basis of this covariance time history data. 167 * @param covBasis basis of this covariance time history data 168 */ 169 public void setCovBasis(final String covBasis) { 170 refuseFurtherComments(); 171 this.covBasis = covBasis; 172 } 173 174 /** Get identification number of the orbit determination or simulation upon which this covariance is based. 175 * @return identification number of the orbit determination or simulation upon which this covariance is based 176 */ 177 public String getCovBasisID() { 178 return covBasisID; 179 } 180 181 /** Set identification number of the orbit determination or simulation upon which this covariance is based. 182 * @param covBasisID identification number of the orbit determination or simulation upon which this covariance is based 183 */ 184 public void setCovBasisID(final String covBasisID) { 185 refuseFurtherComments(); 186 this.covBasisID = covBasisID; 187 } 188 189 /** Get reference frame of the covariance. 190 * @return reference frame of the covariance 191 */ 192 public FrameFacade getCovReferenceFrame() { 193 return covReferenceFrame; 194 } 195 196 /** Set reference frame of the covariance. 197 * @param covReferenceFrame the reference frame to be set 198 */ 199 public void setCovReferenceFrame(final FrameFacade covReferenceFrame) { 200 refuseFurtherComments(); 201 this.covReferenceFrame = covReferenceFrame; 202 } 203 204 /** Get epoch of the {@link #getCovReferenceFrame() covariance reference frame}. 205 * @return epoch of the {@link #getCovReferenceFrame() covariance reference frame} 206 */ 207 public AbsoluteDate getCovFrameEpoch() { 208 return covFrameEpoch; 209 } 210 211 /** Set epoch of the {@link #getCovReferenceFrame() covariance reference frame}. 212 * @param covFrameEpoch epoch of the {@link #getCovReferenceFrame() covariance reference frame} 213 */ 214 public void setCovFrameEpoch(final AbsoluteDate covFrameEpoch) { 215 refuseFurtherComments(); 216 this.covFrameEpoch = covFrameEpoch; 217 } 218 219 /** Set the minimum scale factor to apply to achieve realism. 220 * @param covScaleMin minimum scale factor to apply to achieve realism 221 */ 222 public void setCovScaleMin(final double covScaleMin) { 223 this.covScaleMin = covScaleMin; 224 } 225 226 /** Get the minimum scale factor to apply to achieve realism. 227 * @return minimum scale factor to apply to achieve realism 228 */ 229 public double getCovScaleMin() { 230 return covScaleMin; 231 } 232 233 /** Set the maximum scale factor to apply to achieve realism. 234 * @param covScaleMax maximum scale factor to apply to achieve realism 235 */ 236 public void setCovScaleMax(final double covScaleMax) { 237 this.covScaleMax = covScaleMax; 238 } 239 240 /** Get the maximum scale factor to apply to achieve realism. 241 * @return maximum scale factor to apply to achieve realism 242 */ 243 public double getCovScaleMax() { 244 return covScaleMax; 245 } 246 247 /** Set the measure of confidence in covariance error matching reality. 248 * @param covConfidence measure of confidence in covariance error matching reality 249 */ 250 public void setCovConfidence(final double covConfidence) { 251 this.covConfidence = covConfidence; 252 } 253 254 /** Get the measure of confidence in covariance error matching reality. 255 * @return measure of confidence in covariance error matching reality 256 */ 257 public double getCovConfidence() { 258 return covConfidence; 259 } 260 261 /** Get covariance element set type. 262 * @return covariance element set type 263 */ 264 public OrbitElementsType getCovType() { 265 return covType; 266 } 267 268 /** Set covariance element set type. 269 * @param covType covariance element set type 270 */ 271 public void setCovType(final OrbitElementsType covType) { 272 refuseFurtherComments(); 273 this.covType = covType; 274 } 275 276 /** Get covariance ordering. 277 * @return covariance ordering 278 */ 279 public Ordering getCovOrdering() { 280 return covOrdering; 281 } 282 283 /** Set covariance ordering. 284 * @param covOrdering covariance ordering 285 */ 286 public void setCovOrdering(final Ordering covOrdering) { 287 refuseFurtherComments(); 288 this.covOrdering = covOrdering; 289 } 290 291 /** Get covariance element set units. 292 * @return covariance element set units 293 */ 294 public List<Unit> getCovUnits() { 295 return covUnits; 296 } 297 298 /** Set covariance element set units. 299 * @param covUnits covariance element set units 300 */ 301 public void setCovUnits(final List<Unit> covUnits) { 302 refuseFurtherComments(); 303 this.covUnits = covUnits; 304 } 305 306 }