Commit eed3675f authored by Luc Maisonobe's avatar Luc Maisonobe

Renamed a few classes in orbit determination.

Measurement -> ObservedMeasurement
Evaluation      -> EstimatedMeasurement
EvaluationModifier -> EstimationModifier
parent 9a4cae6e
......@@ -28,7 +28,7 @@
package org.orekit.estimation.measurements #ECEBD8 {
interface Measurement {
interface ObservedMeasurement {
+getDimension()
+isEnabled()
+setEnabled()
......@@ -38,11 +38,11 @@
+getBaseWeight()
+addModifier(modifier)
+getModifiers()
+evaluate(iteration, count, state)
+estimate(iteration, evaluation, state)
}
class Evaluation {
+getMeasurement()
class EstimatedMeasurement {
+getObservedMeasurement()
+getIteration()
+getState()
+getTimeOffset()
......@@ -52,34 +52,32 @@
+[get|set]ParameterDerivatives()
}
interface EvaluationModifier {
interface EstimationModifier {
+getParametersDrivers()
+modify(evaluation)
+modify(estimated)
}
class "..." as OtherModifier
Measurement *--> "*" EvaluationModifier
Measurement --> Evaluation : create
Evaluation <-- EvaluationModifier : modify
ObservedMeasurement *--> "*" EstimationModifier
ObservedMeasurement --> EstimatedMeasurement : create
EstimatedMeasurement <-- EstimationModifier : modify
class "..." as OtherMeasurement
OtherMeasurement ..|> Measurement
Range ..|> Measurement
RangeRate ..|> Measurement
AzimuthElevation ..|> Measurement
PV ..|> Measurement
EvaluationModifier <|.. Bias
EvaluationModifier <|.. CardanAntennaMount
EvaluationModifier <|.. OutlierFilter
EvaluationModifier <|.. OtherModifier
OtherMeasurement ..|> ObservedMeasurement
Range ..|> ObservedMeasurement
RangeRate ..|> ObservedMeasurement
Angular ..|> ObservedMeasurement
PV ..|> ObservedMeasurement
EstimationModifier <|.. Bias
EstimationModifier <|.. OutlierFilter
EstimationModifier <|.. Tropo
EstimationModifier <|.. Iono
}
package mission.specific #C4D2C5 {
class CustomModifier #D5E0D5/E2EBE2
class CustomMeasurement #D5E0D5/E2EBE2
Measurement <|-- CustomMeasurement
EvaluationModifier <|-- CustomModifier
ObservedMeasurement <|-- CustomMeasurement
EstimationModifier <|-- CustomModifier
}
@enduml
......@@ -26,27 +26,28 @@
skinparam ClassFontSize 11
skinparam PackageFontSize 12
package org.hipparchus.optim.nonlinear.vector.leastsquares #ECEBD8 {
package org.hipparchus #ECEBD8 {
interface LeastSquaresOptimizer
interface LeastSquaresProblem
LeastSquaresOptimizer -right-> LeastSquaresProblem : optimize
}
package org.orekit #ECEBD8 {
package propagation #DDEBD8 {
interface Propagator
package event #CEEBD8 {
Propagator --> DateDetector : monitors
}
}
package estimation #DDEBD8 {
package measurements #CEEBD8 {
class EstimatedMeasurement
interface ObservedMeasurement {
+estimate(state)
}
ObservedMeasurement --> EstimatedMeasurement
}
package leastsquares #CEEBD8 {
class MeasurementHandler
class ODProblem
class BatchLSEstimator {
+addMeasurement(measurement)
+getOrbitalParametersDrivers()
......@@ -56,29 +57,20 @@
+estimate()
}
interface BatchLSObserver {
+iterationPerformed()
}
class ODProblem
class MeasurementHandler
ODProblem *--> MeasurementHandler
ODProblem --> Propagator : run
MeasurementHandler <-- DateDetector : triggers
BatchLSEstimator *-right-> ODProblem
LeastSquaresProblem <|-- ODProblem
LeastSquaresOptimizer <-- BatchLSEstimator : run
BatchLSEstimator *--> BatchLSObserver
LeastSquaresProblem <|.. ODProblem
ODProblem --> EstimatedMeasurement
MeasurementHandler o--> ObservedMeasurement
}
package measurements #CEEBD8 {
interface Measurement {
+evaluate(state)
}
MeasurementHandler o--> Measurement
}
package propagation #DDEBD8 {
interface Propagator
MeasurementHandler <-- Propagator : triggers
Propagator <-- ODProblem : run
}
}
}
......
......@@ -58,12 +58,12 @@
ParametersDriver <-- BatchLSEstimator : change normalized value
package measurement #CEEBD8 {
interface Measurement {
interface ObservedMeasurement {
+getParametersDrivers()
}
class GroundStation
Range ..|> Measurement
RangeRate ..|> Measurement
Range ..|> ObservedMeasurement
RangeRate ..|> ObservedMeasurement
GroundStation "1" <--o Range
GroundStation "1" <--o RangeRate
ParameterObserver <..* GroundStation : East/North/Zenith offsets
......
......@@ -18,7 +18,7 @@ package org.orekit.estimation.leastsquares;
import org.hipparchus.optim.nonlinear.vector.leastsquares.LeastSquaresProblem;
import org.orekit.errors.OrekitException;
import org.orekit.estimation.measurements.EvaluationsProvider;
import org.orekit.estimation.measurements.EstimationsProvider;
import org.orekit.orbits.Orbit;
import org.orekit.utils.ParameterDriversList;
......@@ -51,7 +51,7 @@ public interface BatchLSObserver {
ParameterDriversList estimatedOrbitalParameters,
ParameterDriversList estimatedPropagatorParameters,
ParameterDriversList estimatedMeasurementsParameters,
EvaluationsProvider evaluationsProvider,
EstimationsProvider evaluationsProvider,
LeastSquaresProblem.Evaluation lspEvaluation)
throws OrekitException;
......
......@@ -17,13 +17,13 @@
package org.orekit.estimation.leastsquares;
import org.orekit.errors.OrekitException;
import org.orekit.estimation.measurements.Measurement;
import org.orekit.estimation.measurements.ObservedMeasurement;
import org.orekit.propagation.SpacecraftState;
import org.orekit.propagation.events.DateDetector;
import org.orekit.propagation.events.handlers.EventHandler;
/** Bridge between {@link org.orekit.propagation.events.EventDetector events} and
* {@link Measurement measurements}.
* {@link ObservedMeasurement measurements}.
* @author Luc Maisonobe
* @since 8.0
*/
......@@ -33,7 +33,7 @@ class MeasurementHandler implements EventHandler<DateDetector> {
private final Model model;
/** Underlying measurement. */
private final Measurement<?> measurement;
private final ObservedMeasurement<?> measurement;
/** Index of the first measurement component in the model. */
private final int index;
......@@ -43,7 +43,7 @@ class MeasurementHandler implements EventHandler<DateDetector> {
* @param measurement underlying measurement
* @param index index of the first measurement component in the model
*/
MeasurementHandler(final Model model, final Measurement<?> measurement, final int index) {
MeasurementHandler(final Model model, final ObservedMeasurement<?> measurement, final int index) {
this.model = model;
this.measurement = measurement;
this.index = index;
......@@ -56,7 +56,7 @@ class MeasurementHandler implements EventHandler<DateDetector> {
throws OrekitException {
// fetch the evaluated measurement to the estimator
model.fetchEvaluatedMeasurement(index, measurement.evaluate(model.getIterationsCount(),
model.fetchEvaluatedMeasurement(index, measurement.estimate(model.getIterationsCount(),
model.getEvaluationsCount(),
s));
......
......@@ -31,8 +31,8 @@ import org.hipparchus.util.Incrementor;
import org.hipparchus.util.Pair;
import org.orekit.errors.OrekitException;
import org.orekit.errors.OrekitExceptionWrapper;
import org.orekit.estimation.measurements.Evaluation;
import org.orekit.estimation.measurements.Measurement;
import org.orekit.estimation.measurements.EstimatedMeasurement;
import org.orekit.estimation.measurements.ObservedMeasurement;
import org.orekit.orbits.Orbit;
import org.orekit.propagation.Propagator;
import org.orekit.propagation.SpacecraftState;
......@@ -45,7 +45,7 @@ import org.orekit.time.AbsoluteDate;
import org.orekit.utils.ParameterDriver;
import org.orekit.utils.ParameterDriversList;
/** Bridge between {@link Measurement measurements} and {@link
/** Bridge between {@link ObservedMeasurement measurements} and {@link
* org.hipparchus.fitting.leastsquares.LeastSquaresProblem
* least squares problems}.
* @author Luc Maisonobe
......@@ -63,7 +63,7 @@ class Model implements MultivariateJacobianFunction {
private final NumericalPropagatorBuilder propagatorBuilder;
/** Measurements. */
private final List<Measurement<?>> measurements;
private final List<ObservedMeasurement<?>> measurements;
/** Estimated measurements parameters. */
private final ParameterDriversList estimatedMeasurementsParameters;
......@@ -72,7 +72,7 @@ class Model implements MultivariateJacobianFunction {
private final Map<String, Integer> parameterColumns;
/** Last evaluations. */
private final Map<Measurement<?>, Evaluation<?>> evaluations;
private final Map<ObservedMeasurement<?>, EstimatedMeasurement<?>> evaluations;
/** Observer to be notified at orbit changes. */
private final ModelObserver observer;
......@@ -106,7 +106,7 @@ class Model implements MultivariateJacobianFunction {
* @exception OrekitException if some propagator parameter cannot be set properly
*/
Model(final NumericalPropagatorBuilder propagatorBuilder,
final List<Measurement<?>> measurements, final ParameterDriversList estimatedMeasurementsParameters,
final List<ObservedMeasurement<?>> measurements, final ParameterDriversList estimatedMeasurementsParameters,
final ModelObserver observer)
throws OrekitException {
......@@ -114,12 +114,12 @@ class Model implements MultivariateJacobianFunction {
this.measurements = measurements;
this.estimatedMeasurementsParameters = estimatedMeasurementsParameters;
this.parameterColumns = new HashMap<String, Integer>(estimatedMeasurementsParameters.getDrivers().size());
this.evaluations = new IdentityHashMap<Measurement<?>, Evaluation<?>>(measurements.size());
this.evaluations = new IdentityHashMap<ObservedMeasurement<?>, EstimatedMeasurement<?>>(measurements.size());
this.observer = observer;
// allocate vector and matrix
int rows = 0;
for (final Measurement<?> measurement : measurements) {
for (final ObservedMeasurement<?> measurement : measurements) {
rows += measurement.getDimension();
}
......@@ -250,10 +250,10 @@ class Model implements MultivariateJacobianFunction {
// set up events to handle measurements
int p = 0;
for (final Measurement<?> measurement : measurements) {
for (final ObservedMeasurement<?> measurement : measurements) {
if (measurement.isEnabled()) {
AbsoluteDate md = measurement.getDate();
final Evaluation<?> previousEvaluation = evaluations.get(measurement);
final EstimatedMeasurement<?> previousEvaluation = evaluations.get(measurement);
if (previousEvaluation != null) {
// pre-compensate signal transit time
md = md.shiftedBy(-previousEvaluation.getTimeOffset());
......@@ -296,14 +296,14 @@ class Model implements MultivariateJacobianFunction {
* @param evaluation measurement evaluation
* @exception OrekitException if Jacobians cannot be computed
*/
void fetchEvaluatedMeasurement(final int index, final Evaluation<?> evaluation)
void fetchEvaluatedMeasurement(final int index, final EstimatedMeasurement<?> evaluation)
throws OrekitException {
// compute weighted residuals
evaluations.put(evaluation.getMeasurement(), evaluation);
final double[] evaluated = evaluation.getValue();
final double[] observed = evaluation.getMeasurement().getObservedValue();
final double[] sigma = evaluation.getMeasurement().getTheoreticalStandardDeviation();
evaluations.put(evaluation.getObservedMeasurement(), evaluation);
final double[] evaluated = evaluation.getEstimatedValue();
final double[] observed = evaluation.getObservedMeasurement().getObservedValue();
final double[] sigma = evaluation.getObservedMeasurement().getTheoreticalStandardDeviation();
final double[] weight = evaluation.getCurrentWeight();
for (int i = 0; i < evaluated.length; ++i) {
value.setEntry(index + i, weight[i] * (evaluated[i] - observed[i]) / sigma[i]);
......@@ -352,7 +352,7 @@ class Model implements MultivariateJacobianFunction {
}
// Jacobian of the measurement with respect to measurements parameters
final Measurement<?> measurement = evaluation.getMeasurement();
final ObservedMeasurement<?> measurement = evaluation.getObservedMeasurement();
for (final ParameterDriver driver : measurement.getParametersDrivers()) {
if (driver.isSelected()) {
final double[] aMPm = evaluation.getParameterDerivatives(driver);
......
......@@ -18,8 +18,8 @@ package org.orekit.estimation.leastsquares;
import java.util.Map;
import org.orekit.estimation.measurements.Evaluation;
import org.orekit.estimation.measurements.Measurement;
import org.orekit.estimation.measurements.EstimatedMeasurement;
import org.orekit.estimation.measurements.ObservedMeasurement;
import org.orekit.orbits.Orbit;
/** Observer for {@link Model model} calls.
......@@ -34,10 +34,10 @@ interface ModelObserver {
/** Notification callback for orbit changes.
* @param orbit current estimated orbit
* @param evaluations map of measurements evaluations resulting from
* @param estimations map of measurements estimations resulting from
* the current estimated orbit (this is an unmodifiable view of the
* current evaluations, its content is changed at each iteration)
* current estimations, its content is changed at each iteration)
*/
void modelCalled(Orbit orbit, Map<Measurement<?>, Evaluation<?>> evaluations);
void modelCalled(Orbit orbit, Map<ObservedMeasurement<?>, EstimatedMeasurement<?>> estimations);
}
......@@ -18,12 +18,12 @@
* The leastsquares package provides an implementation of a batch least
* squares estimator engine to perform an orbit determination.
* Users will typically create one instance of this object, register all
* observation data as {@link org.orekit.estimation.measurements.Measurement
* observation data as {@link org.orekit.estimation.measurements.ObservedMeasurement
* measurements} with their included {@link
* org.orekit.estimation.measurements.EvaluationModifier modifiers}, and
* org.orekit.estimation.measurements.EstimationModifier modifiers}, and
* run the {@link org.orekit.estimation.leastsquares.BatchLSEstimator least
* squares estimator}. At the end of the process, the orbital state and the
* estimated parameters will be available.
* squares estimator}. At the end of the process, a fully configured propagator
* will be available, as well as all estimated parameters individually.
* @since 8.0
* @author Luc Maisonobe
* @author Thierry Ceolin
......
......@@ -30,7 +30,8 @@ import org.orekit.utils.ParameterDriver;
* @author Luc Maisonobe
* @since 8.0
*/
public abstract class AbstractMeasurement<T extends Measurement<T>> implements Measurement<T> {
public abstract class AbstractMeasurement<T extends ObservedMeasurement<T>>
implements ObservedMeasurement<T> {
/** List of the supported parameters. */
private final List<ParameterDriver> supportedParameters;
......@@ -48,7 +49,7 @@ public abstract class AbstractMeasurement<T extends Measurement<T>> implements M
private final double[] baseWeight;
/** Modifiers that apply to the measurement.*/
private final List<EvaluationModifier<T>> modifiers;
private final List<EstimationModifier<T>> modifiers;
/** Enabling status. */
private boolean enabled;
......@@ -83,7 +84,7 @@ public abstract class AbstractMeasurement<T extends Measurement<T>> implements M
baseWeight
};
this.modifiers = new ArrayList<EvaluationModifier<T>>();
this.modifiers = new ArrayList<EstimationModifier<T>>();
setEnabled(true);
}
......@@ -111,7 +112,7 @@ public abstract class AbstractMeasurement<T extends Measurement<T>> implements M
this.sigma = sigma.clone();
this.baseWeight = baseWeight.clone();
this.modifiers = new ArrayList<EvaluationModifier<T>>();
this.modifiers = new ArrayList<EstimationModifier<T>>();
setEnabled(true);
}
......@@ -152,36 +153,36 @@ public abstract class AbstractMeasurement<T extends Measurement<T>> implements M
return baseWeight.clone();
}
/** Compute the theoretical value.
/** Estimate the theoretical value.
* <p>
* The theoretical value does not have <em>any</em> modifiers applied.
* </p>
* @param iteration iteration number
* @param count evaluations counter
* @param evaluation evaluation number
* @param state orbital state at measurement date
* @return theoretical value
* @exception OrekitException if value cannot be computed
* @see #evaluate(int, int, SpacecraftState)
* @see #estimate(int, int, SpacecraftState)
*/
protected abstract Evaluation<T> theoreticalEvaluation(final int iteration, final int count,
final SpacecraftState state)
protected abstract EstimatedMeasurement<T> theoreticalEvaluation(final int iteration, final int evaluation,
final SpacecraftState state)
throws OrekitException;
/** {@inheritDoc} */
@Override
public Evaluation<T> evaluate(final int iteration, final int count,
final SpacecraftState state)
public EstimatedMeasurement<T> estimate(final int iteration, final int evaluation,
final SpacecraftState state)
throws OrekitException {
// compute the theoretical value
final Evaluation<T> evaluation = theoreticalEvaluation(iteration, count, state);
final EstimatedMeasurement<T> estimation = theoreticalEvaluation(iteration, evaluation, state);
// apply the modifiers
for (final EvaluationModifier<T> modifier : modifiers) {
modifier.modify(evaluation);
for (final EstimationModifier<T> modifier : modifiers) {
modifier.modify(estimation);
}
return evaluation;
return estimation;
}
......@@ -199,7 +200,7 @@ public abstract class AbstractMeasurement<T extends Measurement<T>> implements M
/** {@inheritDoc} */
@Override
public void addModifier(final EvaluationModifier<T> modifier)
public void addModifier(final EstimationModifier<T> modifier)
throws OrekitException {
// combine the measurement parameters and the modifier parameters
......@@ -211,7 +212,7 @@ public abstract class AbstractMeasurement<T extends Measurement<T>> implements M
/** {@inheritDoc} */
@Override
public List<EvaluationModifier<T>> getModifiers() {
public List<EstimationModifier<T>> getModifiers() {
return Collections.unmodifiableList(modifiers);
}
......
......@@ -68,8 +68,8 @@ public class Angular extends AbstractMeasurement<Angular> {
/** {@inheritDoc} */
@Override
protected Evaluation<Angular> theoreticalEvaluation(final int iteration, final int count,
final SpacecraftState state)
protected EstimatedMeasurement<Angular> theoreticalEvaluation(final int iteration, final int evaluation,
final SpacecraftState state)
throws OrekitException {
// take propagation time into account
......@@ -109,11 +109,12 @@ public class Angular extends AbstractMeasurement<Angular> {
final DerivativeStructure azimuth = baseAzimuth.add(twoPiWrap);
final DerivativeStructure elevation = staSat.dotProduct(zenith).divide(staSat.getNorm()).asin();
// prepare the evaluation
final Evaluation<Angular> evaluation = new Evaluation<Angular>(this, iteration, count, transitState);
// prepare the estimation
final EstimatedMeasurement<Angular> estimated =
new EstimatedMeasurement<Angular>(this, iteration, evaluation, transitState);
// azimuth - elevation values
evaluation.setValue(azimuth.getValue(), elevation.getValue());
estimated.setEstimatedValue(azimuth.getValue(), elevation.getValue());
// partial derivatives of azimuth with respect to state
final AngularCoordinates ac = iner2Body.getInverse().getAngular();
......@@ -150,7 +151,7 @@ public class Angular extends AbstractMeasurement<Angular> {
dElOndPtmp.getZ() * dt
};
evaluation.setStateDerivatives(dAzOndP, dElOndP);
estimated.setStateDerivatives(dAzOndP, dElOndP);
if (station.getEastOffsetDriver().isSelected() ||
station.getNorthOffsetDriver().isSelected() ||
......@@ -161,24 +162,24 @@ public class Angular extends AbstractMeasurement<Angular> {
// with respect to reference station topocentric frame
if (station.getEastOffsetDriver().isSelected()) {
evaluation.setParameterDerivatives(station.getEastOffsetDriver(),
estimated.setParameterDerivatives(station.getEastOffsetDriver(),
azimuth.getPartialDerivative(0, 0, 0, 1, 0, 0),
elevation.getPartialDerivative(0, 0, 0, 1, 0, 0));
}
if (station.getNorthOffsetDriver().isSelected()) {
evaluation.setParameterDerivatives(station.getNorthOffsetDriver(),
estimated.setParameterDerivatives(station.getNorthOffsetDriver(),
azimuth.getPartialDerivative(0, 0, 0, 0, 1, 0),
elevation.getPartialDerivative(0, 0, 0, 0, 1, 0));
}
if (station.getZenithOffsetDriver().isSelected()) {
evaluation.setParameterDerivatives(station.getZenithOffsetDriver(),
estimated.setParameterDerivatives(station.getZenithOffsetDriver(),
azimuth.getPartialDerivative(0, 0, 0, 0, 0, 1),
elevation.getPartialDerivative(0, 0, 0, 0, 0, 1));
}
}
return evaluation;
return estimated;
}
}
......@@ -28,12 +28,12 @@ import org.orekit.utils.ParameterDriver;
* @author Luc Maisonobe
* @since 8.0
*/
public class Bias<T extends Measurement<T>> implements EvaluationModifier<T> {
public class Bias<T extends ObservedMeasurement<T>> implements EstimationModifier<T> {
/** Parameters holding the bias value components. */
private final List<ParameterDriver> drivers;
/** IPartial derivatives. */
/** Partial derivatives. */
private final double[][] derivatives;
/** Simple constructor.
......@@ -65,7 +65,7 @@ public class Bias<T extends Measurement<T>> implements EvaluationModifier<T> {
/** {@inheritDoc}
* <p>
* For a bias, there are {@link Measurement#getDimension()} parameter drivers,
* For a bias, there are {@link ObservedMeasurement#getDimension()} parameter drivers,
* sorted in components order.
* </p>
*/
......@@ -76,19 +76,19 @@ public class Bias<T extends Measurement<T>> implements EvaluationModifier<T> {
/** {@inheritDoc} */
@Override
public void modify(final Evaluation<T> evaluation) {
public void modify(final EstimatedMeasurement<T> estimated) {
// apply the bias to the measurement value
final double[] measurementValue = evaluation.getValue();
final double[] value = estimated.getEstimatedValue();
for (int i = 0; i < drivers.size(); ++i) {
final ParameterDriver driver = drivers.get(i);
measurementValue[i] += driver.getValue();
value[i] += driver.getValue();
if (driver.isSelected()) {
// add the partial derivatives
evaluation.setParameterDerivatives(driver, derivatives[i]);
estimated.setParameterDerivatives(driver, derivatives[i]);
}
}
evaluation.setValue(measurementValue);
estimated.setEstimatedValue(value);
}
......
......@@ -26,15 +26,15 @@ import org.orekit.time.AbsoluteDate;
import org.orekit.time.TimeStamped;
import org.orekit.utils.ParameterDriver;
/** Class holding a theoretical evaluation of one {@link Measurement measurement}.
/** Class holding an estimated theoretical value associated to an {@link ObservedMeasurement observed measurement}.
* @param <T> the type of the measurement
* @author Luc Maisonobe
* @since 8.0
*/
public class Evaluation<T extends Measurement<T>> implements TimeStamped {
public class EstimatedMeasurement<T extends ObservedMeasurement<T>> implements TimeStamped {
/** Associated measurement. */
private final T measurement;
/** Associated observed measurement. */
private final T observedMeasurement;
/** Iteration number. */
private final int iteration;
......@@ -45,8 +45,8 @@ public class Evaluation<T extends Measurement<T>> implements TimeStamped {
/** State of the spacecraft. */
private final SpacecraftState state;
/** Simulated value. */
private double[] value;
/** Estimated value. */
private double[] estimatedValue;
/** Current weight. */
private double[] currentWeight;
......@@ -58,32 +58,32 @@ public class Evaluation<T extends Measurement<T>> implements TimeStamped {
private final Map<ParameterDriver, double[]> parametersDerivatives;
/** Simple constructor.
* @param measurement associated measurement
* @param observedMeasurement associated observed measurement
* @param iteration iteration number
* @param count evaluations counter
* @param state state of the spacecraft
*/
public Evaluation(final T measurement,
final int iteration, final int count,
final SpacecraftState state) {
this.measurement = measurement;
public EstimatedMeasurement(final T observedMeasurement,
final int iteration, final int count,
final SpacecraftState state) {
this.observedMeasurement = observedMeasurement;
this.iteration = iteration;
this.count = count;
this.state = state;
this.parametersDerivatives = new IdentityHashMap<ParameterDriver, double[]>();
}
/** Get the associated measurement.
* @return associated measurement
/** Get the associated observed measurement.
* @return associated observed measurement
*/
public T getMeasurement() {
return measurement;
public T getObservedMeasurement() {
return observedMeasurement;
}
/** {@inheritDoc} */
@Override
public AbsoluteDate getDate() {
return measurement.getDate();
return observedMeasurement.getDate();
}
/** Get the iteration number.
......@@ -111,32 +111,32 @@ public class Evaluation<T extends Measurement<T>> implements TimeStamped {
* @return time offset from state date to measurement date
*/
public double getTimeOffset() {
return measurement.getDate().durationFrom(state.getDate());
return observedMeasurement.getDate().durationFrom(state.getDate());
}
/** Get the simulated value.
* @return simulated value
/** Get the estimated value.
* @return estimated value
*/
public double[] getValue() {
return value.clone();
public double[] getEstimatedValue() {
return estimatedValue.clone();
}
/** Set the simulated value.
* @param value simulated value