Hi everyone,
I need to interpolate the covariance matrix provided by an OEM. Since the boundedPropagator
(returned by the OEM parser) doesn’t manage any additional state, I came up with the following “horrendous” workaround.
Unfortunately, it doesn’t work — I’m getting an Orekit exception: “reset state not allowed”. I’m wondering if I’ve done something wrong, or if there’s a simpler way to achieve what I’m trying to do.
Thanks in advance,
Davide
private static void readOEM(String fileName){
OemParser parser = new ParserBuilder().buildOemParser();
Oem oem = parser.parse(new DataSource(fileName));
String satOemName = new String();
for (String key : oem.getSatellites().keySet()){
satOemName = key;
}
List<CartesianCovariance> cartesianCovariances = oem.getSatellites().get(satOemName).getSegments().get(0).getCovarianceMatrices();
List<TimeStampedPVCoordinates> states = oem.getSatellites().get(satOemName).getSegments().get(0).getCoordinates();
OrbitBlender orbitBlender = new OrbitBlender(SmoothStepFactory.getQuintic(), oem.getSatellites().get(satOemName).getPropagator(), oem.getSatellites().get(satOemName).getPropagator().getFrame());
StateCovarianceBlender stateCovarianceBlender = new StateCovarianceBlender(SmoothStepFactory.getQuintic(), orbitBlender, oem.getSatellites().get(satOemName).getPropagator().getFrame(), OrbitType.CARTESIAN, PositionAngleType.TRUE );
List<SpacecraftState> spacecraftStates = new ArrayList<>();
List<Orbit> orbits = new ArrayList<>();
for(TimeStampedPVCoordinates state : states){
spacecraftStates.add(new SpacecraftState(new CartesianOrbit(state, oem.getSatellites().get(satOemName).getPropagator().getFrame(), oem.getSatellites().get(satOemName).getMu())));
orbits.add((new CartesianOrbit(state, oem.getSatellites().get(satOemName).getPropagator().getFrame(), oem.getSatellites().get(satOemName).getMu())));
}
TimeInterpolator<SpacecraftState> stateInterpolator = new SpacecraftStateInterpolator(5,oem.getSatellites().get(satOemName).getPropagator().getFrame() );
List<StateCovariance> covariances = new ArrayList<>();
for(CartesianCovariance cov : cartesianCovariances){
covariances.add(new StateCovariance(cov.getCovarianceMatrix(), cov.getEpoch(),null));
}
// Generate Collection time stamped pair
List<TimeStampedPair<Orbit,StateCovariance>> listPair = new ArrayList<>();
for(int i = 0; i < covariances.size(); i++){
listPair.add(new TimeStampedPair<Orbit,StateCovariance>(orbits.get(i), covariances.get(i)));
}
Ephemeris prop = new Ephemeris(spacecraftStates,stateInterpolator,covariances,stateCovarianceBlender);
prop.getCovariance(new AbsoluteDate(2025,01,01,00,0,0.0,TimeScalesFactory.getUTC()).shiftedBy(60));
}
here is the complete stack trace of the error:
org.orekit.errors.OrekitException: reset state not allowed
at org.orekit.propagation.analytical.AggregateBoundedPropagator.resetInitialState(AggregateBoundedPropagator.java:202)
at org.orekit.orbits.OrbitBlender.propagateOrbit(OrbitBlender.java:131)
at org.orekit.orbits.OrbitBlender.interpolate(OrbitBlender.java:104)
at org.orekit.orbits.OrbitBlender.interpolate(OrbitBlender.java:59)
at org.orekit.time.AbstractTimeInterpolator.interpolate(AbstractTimeInterpolator.java:94)
at org.orekit.orbits.AbstractOrbitInterpolator.interpolate(AbstractOrbitInterpolator.java:81)
at org.orekit.orbits.AbstractOrbitInterpolator.interpolate(AbstractOrbitInterpolator.java:34)
at org.orekit.propagation.AbstractStateCovarianceInterpolator.interpolateOrbit(AbstractStateCovarianceInterpolator.java:189)
at org.orekit.propagation.AbstractStateCovarianceInterpolator.interpolate(AbstractStateCovarianceInterpolator.java:129)
at org.orekit.propagation.AbstractStateCovarianceInterpolator.interpolate(AbstractStateCovarianceInterpolator.java:41)
at org.orekit.time.AbstractTimeInterpolator.interpolate(AbstractTimeInterpolator.java:94)
at org.orekit.propagation.analytical.Ephemeris.getCovariance(Ephemeris.java:340)