package fr.cs.examples.estimation; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.text.ParseException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.NoSuchElementException; import java.util.SortedSet; import java.util.TreeSet; import java.util.regex.Pattern; import org.hipparchus.exception.LocalizedCoreFormats; import org.hipparchus.geometry.euclidean.threed.Vector3D; import org.hipparchus.linear.QRDecomposer; import org.hipparchus.optim.nonlinear.vector.leastsquares.GaussNewtonOptimizer; import org.hipparchus.optim.nonlinear.vector.leastsquares.LeastSquaresOptimizer; import org.hipparchus.optim.nonlinear.vector.leastsquares.LeastSquaresProblem; import org.hipparchus.optim.nonlinear.vector.leastsquares.LevenbergMarquardtOptimizer; import org.hipparchus.stat.descriptive.StreamingStatistics; import org.hipparchus.util.FastMath; import org.hipparchus.util.Precision; import org.orekit.attitudes.AttitudeProvider; import org.orekit.attitudes.BodyCenterPointing; import org.orekit.attitudes.LofOffset; import org.orekit.attitudes.NadirPointing; import org.orekit.attitudes.YawCompensation; import org.orekit.attitudes.YawSteering; import org.orekit.bodies.CelestialBody; import org.orekit.bodies.CelestialBodyFactory; import org.orekit.bodies.GeodeticPoint; import org.orekit.bodies.OneAxisEllipsoid; import org.orekit.data.DataProvidersManager; import org.orekit.data.DirectoryCrawler; import org.orekit.errors.OrekitException; import org.orekit.errors.OrekitMessages; import org.orekit.estimation.leastsquares.BatchLSEstimator; import org.orekit.estimation.leastsquares.BatchLSObserver; import org.orekit.estimation.measurements.AngularAzEl; import org.orekit.estimation.measurements.EstimatedMeasurement; import org.orekit.estimation.measurements.EstimationsProvider; import org.orekit.estimation.measurements.GroundStation; import org.orekit.estimation.measurements.ObservableSatellite; import org.orekit.estimation.measurements.ObservedMeasurement; import org.orekit.estimation.measurements.PV; import org.orekit.estimation.measurements.Range; import org.orekit.estimation.measurements.RangeRate; import org.orekit.estimation.measurements.modifiers.*; import org.orekit.forces.PolynomialParametricAcceleration; import org.orekit.forces.drag.DragForce; import org.orekit.forces.drag.DragSensitive; import org.orekit.forces.drag.IsotropicDrag; import org.orekit.forces.gravity.HolmesFeatherstoneAttractionModel; import org.orekit.forces.gravity.OceanTides; import org.orekit.forces.gravity.Relativity; import org.orekit.forces.gravity.SolidTides; import org.orekit.forces.gravity.ThirdBodyAttraction; import org.orekit.forces.gravity.potential.GravityFieldFactory; import org.orekit.forces.gravity.potential.NormalizedSphericalHarmonicsProvider; import org.orekit.forces.radiation.IsotropicRadiationSingleCoefficient; import org.orekit.forces.radiation.RadiationSensitive; import org.orekit.forces.radiation.SolarRadiationPressure; import org.orekit.frames.EOPHistory; import org.orekit.frames.Frame; import org.orekit.frames.FramesFactory; import org.orekit.frames.LOFType; import org.orekit.frames.TopocentricFrame; import org.orekit.gnss.Frequency; import org.orekit.gnss.MeasurementType; import org.orekit.gnss.ObservationData; import org.orekit.gnss.ObservationDataSet; import org.orekit.gnss.RinexLoader; import org.orekit.gnss.SatelliteSystem; import org.orekit.models.AtmosphericRefractionModel; import org.orekit.models.earth.EarthITU453AtmosphereRefraction; import org.orekit.models.earth.atmosphere.Atmosphere; import org.orekit.models.earth.atmosphere.DTM2000; import org.orekit.models.earth.atmosphere.data.MarshallSolarActivityFutureEstimation; import org.orekit.models.earth.displacement.OceanLoading; import org.orekit.models.earth.displacement.OceanLoadingCoefficientsBLQFactory; import org.orekit.models.earth.displacement.StationDisplacement; import org.orekit.models.earth.displacement.TidalDisplacement; import org.orekit.models.earth.ionosphere.IonosphericModel; import org.orekit.models.earth.ionosphere.KlobucharIonoCoefficientsLoader; import org.orekit.models.earth.ionosphere.KlobucharIonoModel; import org.orekit.models.earth.troposphere.DiscreteTroposphericModel; import org.orekit.models.earth.troposphere.EstimatedTroposphericModel; import org.orekit.models.earth.troposphere.GlobalMappingFunctionModel; import org.orekit.models.earth.troposphere.MappingFunction; import org.orekit.models.earth.troposphere.NiellMappingFunctionModel; import org.orekit.models.earth.troposphere.SaastamoinenModel; import org.orekit.orbits.CartesianOrbit; import org.orekit.orbits.CircularOrbit; import org.orekit.orbits.EquinoctialOrbit; import org.orekit.orbits.KeplerianOrbit; import org.orekit.orbits.Orbit; import org.orekit.orbits.PositionAngle; import org.orekit.propagation.SpacecraftState; import org.orekit.propagation.analytical.tle.TLE; import org.orekit.propagation.analytical.tle.TLEPropagator; import org.orekit.propagation.conversion.DormandPrince853IntegratorBuilder; import org.orekit.propagation.conversion.NumericalPropagatorBuilder; import org.orekit.time.AbsoluteDate; import org.orekit.time.DateComponents; import org.orekit.time.TimeScalesFactory; import org.orekit.utils.Constants; import org.orekit.utils.IERSConventions; import org.orekit.utils.PVCoordinates; import org.orekit.utils.ParameterDriver; import org.orekit.utils.ParameterDriversList; import fr.cs.examples.KeyValueFileParser; public class StationData { /** Container for stations-related data. */ /** Ground station. */ public final GroundStation station; /** Range sigma. */ public final double rangeSigma; /** Range bias (may be null if bias is fixed to zero). */ public final Bias<Range> rangeBias; /** Range rate sigma. */ public final double rangeRateSigma; /** Range rate bias (may be null if bias is fixed to zero). */ public final Bias<RangeRate> rangeRateBias; /** Azimuth-elevation sigma. */ public final double[] azElSigma; /** Azimuth-elevation bias (may be null if bias is fixed to zero). */ public final Bias<AngularAzEl> azELBias; /** Elevation refraction correction (may be null). */ public final AngularRadioRefractionModifier refractionCorrection; /** Tropospheric correction (may be null). */ public final RangeTroposphericDelayModifier rangeTroposphericCorrection; public final RangeRateTroposphericDelayModifier rangeRateTroposphericCorrection; /** Simple constructor. * @param station ground station * @param rangeSigma range sigma * @param rangeBias range bias (may be null if bias is fixed to zero) * @param rangeRateSigma range rate sigma * @param rangeRateBias range rate bias (may be null if bias is fixed to zero) * @param azElSigma azimuth-elevation sigma * @param azELBias azimuth-elevation bias (may be null if bias is fixed to zero) * @param refractionCorrection refraction correction for elevation (may be null) * @param rangeTroposphericCorrection tropospheric correction for the range (may be null) * @param rangeRateTroposphericCorrection */ public StationData(final GroundStation station, final double rangeSigma, final Bias<Range> rangeBias, final double rangeRateSigma, final Bias<RangeRate> rangeRateBias, final double[] azElSigma, final Bias<AngularAzEl> azELBias, final AngularRadioRefractionModifier refractionCorrection, final RangeTroposphericDelayModifier rangeTroposphericCorrection, RangeRateTroposphericDelayModifier rangeRateTroposphericCorrection) { this.station = station; this.rangeSigma = rangeSigma; this.rangeBias = rangeBias; this.rangeRateSigma = rangeRateSigma; this.rangeRateBias = rangeRateBias; this.azElSigma = azElSigma.clone(); this.azELBias = azELBias; this.refractionCorrection = refractionCorrection; this.rangeTroposphericCorrection = rangeTroposphericCorrection; this.rangeRateTroposphericCorrection = rangeRateTroposphericCorrection; } }