OrbitDeterminationWriter.java

  1. /* Copyright 2002-2021 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.odm.ocm;

  18. import java.io.IOException;

  19. import org.orekit.files.ccsds.definitions.TimeConverter;
  20. import org.orekit.files.ccsds.section.AbstractWriter;
  21. import org.orekit.files.ccsds.utils.generation.Generator;
  22. import org.orekit.utils.units.Unit;

  23. /** Writer for orbit determination data.
  24.  * @author Luc Maisonobe
  25.  * @since 11.0
  26.  */
  27. class OrbitDeterminationWriter extends AbstractWriter {

  28.     /** Orbit determination block. */
  29.     private final OrbitDetermination od;

  30.     /** Converter for dates. */
  31.     private final TimeConverter timeConverter;

  32.     /** Create a writer.
  33.      * @param orbitDetermination orbit determination to write
  34.      * @param timeConverter converter for dates
  35.      */
  36.     OrbitDeterminationWriter(final OrbitDetermination orbitDetermination,
  37.                              final TimeConverter timeConverter) {
  38.         super(OcmDataSubStructureKey.od.name(), OcmDataSubStructureKey.OD.name());
  39.         this.od            = orbitDetermination;
  40.         this.timeConverter = timeConverter;
  41.     }

  42.     /** {@inheritDoc} */
  43.     @Override
  44.     protected void writeContent(final Generator generator) throws IOException {

  45.         // orbit determination block
  46.         generator.writeComments(od.getComments());

  47.         // identifiers
  48.         generator.writeEntry(OrbitDeterminationKey.OD_ID.name(),      od.getId(),     null, false);
  49.         generator.writeEntry(OrbitDeterminationKey.OD_PREV_ID.name(), od.getPrevId(), null, false);
  50.         if (od.getMethod() != null) {
  51.             final StringBuilder builder = new StringBuilder();
  52.             builder.append(od.getMethod().getName());
  53.             if (od.getMethod().getTool() != null) {
  54.                 builder.append(':');
  55.                 builder.append(od.getMethod().getTool());
  56.             }
  57.             generator.writeEntry(OrbitDeterminationKey.OD_METHOD.name(),  builder.toString(), null, false);
  58.         }

  59.         // time
  60.         generator.writeEntry(OrbitDeterminationKey.OD_EPOCH.name(),             timeConverter, od.getEpoch(),                false);
  61.         generator.writeEntry(OrbitDeterminationKey.DAYS_SINCE_FIRST_OBS.name(), od.getTimeSinceFirstObservation(), Unit.DAY, false);
  62.         generator.writeEntry(OrbitDeterminationKey.DAYS_SINCE_LAST_OBS.name(),  od.getTimeSinceLastObservation(), Unit.DAY,  false);
  63.         generator.writeEntry(OrbitDeterminationKey.RECOMMENDED_OD_SPAN.name(),  od.getRecommendedOdSpan(), Unit.DAY,         false);
  64.         generator.writeEntry(OrbitDeterminationKey.ACTUAL_OD_SPAN.name(),       od.getActualOdSpan(), Unit.DAY,              false);

  65.         // counters
  66.         generator.writeEntry(OrbitDeterminationKey.OBS_AVAILABLE.name(),    od.getObsAvailable(),            false);
  67.         generator.writeEntry(OrbitDeterminationKey.OBS_USED.name(),         od.getObsUsed(),                 false);
  68.         generator.writeEntry(OrbitDeterminationKey.TRACKS_AVAILABLE.name(), od.getTracksAvailable(),         false);
  69.         generator.writeEntry(OrbitDeterminationKey.TRACKS_USED.name(),      od.getTracksUsed(),              false);
  70.         generator.writeEntry(OrbitDeterminationKey.MAXIMUM_OBS_GAP.name(),  od.getMaximumObsGap(), Unit.DAY, false);

  71.         // errors
  72.         generator.writeEntry(OrbitDeterminationKey.OD_EPOCH_EIGMAJ.name(),    od.getEpochEigenMaj(), Unit.METRE,        false);
  73.         generator.writeEntry(OrbitDeterminationKey.OD_EPOCH_EIGMED.name(),    od.getEpochEigenMed(), Unit.METRE,        false);
  74.         generator.writeEntry(OrbitDeterminationKey.OD_EPOCH_EIGMIN.name(),    od.getEpochEigenMin(), Unit.METRE,        false);
  75.         generator.writeEntry(OrbitDeterminationKey.OD_MAX_PRED_EIGMAJ.name(), od.getMaxPredictedEigenMaj(), Unit.METRE, false);
  76.         generator.writeEntry(OrbitDeterminationKey.OD_MIN_PRED_EIGMIN.name(), od.getMinPredictedEigenMin(), Unit.METRE, false);
  77.         generator.writeEntry(OrbitDeterminationKey.OD_CONFIDENCE.name(),      od.getConfidence(), Unit.PERCENT,         false);
  78.         generator.writeEntry(OrbitDeterminationKey.GDOP.name(),               od.getGdop(), Unit.ONE,                   false);

  79.         // parameters
  80.         generator.writeEntry(OrbitDeterminationKey.SOLVE_N.name(),         od.getSolveN(),             false);
  81.         generator.writeEntry(OrbitDeterminationKey.SOLVE_STATES.name(),    od.getSolveStates(),        false);
  82.         generator.writeEntry(OrbitDeterminationKey.CONSIDER_N.name(),      od.getConsiderN(),          false);
  83.         generator.writeEntry(OrbitDeterminationKey.CONSIDER_PARAMS.name(), od.getConsiderParameters(), false);
  84.         generator.writeEntry(OrbitDeterminationKey.SENSORS_N.name(),       od.getSensorsN(),           false);
  85.         generator.writeEntry(OrbitDeterminationKey.SENSORS.name(),         od.getSensors(),            false);

  86.         // observations
  87.         generator.writeEntry(OrbitDeterminationKey.WEIGHTED_RMS.name(),  od.getWeightedRms(), Unit.ONE, false);
  88.         generator.writeEntry(OrbitDeterminationKey.DATA_TYPES.name(),    od.getDataTypes(),             false);

  89.     }

  90. }