1 package org.orekit.estimation;
2
3 import java.util.List;
4 import java.util.Map;
5
6 import org.hipparchus.geometry.euclidean.threed.Vector3D;
7 import org.hipparchus.util.FastMath;
8 import org.orekit.bodies.CelestialBody;
9 import org.orekit.bodies.GeodeticPoint;
10 import org.orekit.bodies.OneAxisEllipsoid;
11 import org.orekit.estimation.measurements.GroundStation;
12 import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider;
13 import org.orekit.frames.TopocentricFrame;
14 import org.orekit.models.earth.displacement.StationDisplacement;
15 import org.orekit.orbits.CartesianOrbit;
16 import org.orekit.orbits.Orbit;
17 import org.orekit.orbits.PositionAngle;
18 import org.orekit.propagation.analytical.BrouwerLyddanePropagator;
19 import org.orekit.propagation.conversion.BrouwerLyddanePropagatorBuilder;
20 import org.orekit.time.TimeScale;
21 import org.orekit.time.UT1Scale;
22 import org.orekit.utils.IERSConventions;
23 import org.orekit.utils.PVCoordinates;
24
25 public class BrouwerLyddaneContext implements StationDataProvider {
26
27 public IERSConventions conventions;
28 public OneAxisEllipsoid earth;
29 public CelestialBody sun;
30 public CelestialBody moon;
31 public UnnormalizedSphericalHarmonicsProvider gravity;
32 public TimeScale utc;
33 public UT1Scale ut1;
34 public Orbit initialOrbit;
35 public StationDisplacement[] displacements;
36 public List<GroundStation> stations;
37
38
39
40 public Map<GroundStation, GroundStation> TARstations;
41
42 public BrouwerLyddanePropagatorBuilder createBuilder(final PositionAngle angleType, final boolean perfectStart, final double dP) {
43
44 final Orbit startOrbit;
45 if (perfectStart) {
46
47 startOrbit = initialOrbit;
48 } else {
49
50 final Vector3D initialPosition = initialOrbit.getPVCoordinates().getPosition();
51 final Vector3D initialVelocity = initialOrbit.getPVCoordinates().getVelocity();
52 final Vector3D wrongPosition = initialPosition.add(new Vector3D(1000.0, 0, 0));
53 final Vector3D wrongVelocity = initialVelocity.add(new Vector3D(0, 0, 0.01));
54 startOrbit = new CartesianOrbit(new PVCoordinates(wrongPosition, wrongVelocity),
55 initialOrbit.getFrame(),
56 initialOrbit.getDate(),
57 initialOrbit.getMu());
58 }
59
60
61 final BrouwerLyddanePropagatorBuilder propagatorBuilder =
62 new BrouwerLyddanePropagatorBuilder(startOrbit, gravity, angleType, dP, BrouwerLyddanePropagator.M2);
63
64
65 return propagatorBuilder;
66
67 }
68
69 GroundStation createStation(double latitudeInDegrees, double longitudeInDegrees,
70 double altitude, String name) {
71 final GeodeticPoint gp = new GeodeticPoint(FastMath.toRadians(latitudeInDegrees),
72 FastMath.toRadians(longitudeInDegrees),
73 altitude);
74 return new GroundStation(new TopocentricFrame(earth, gp, name),
75 ut1.getEOPHistory(), displacements);
76 }
77
78 @Override
79 public List<GroundStation> getStations() {
80 return stations;
81 }
82
83 }