1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.estimation.measurements.model;
18
19 import org.hipparchus.CalculusFieldElement;
20 import org.hipparchus.Field;
21 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
22 import org.hipparchus.geometry.euclidean.threed.Vector3D;
23 import org.orekit.signal.AdjustableEmitterSignalTimer;
24 import org.orekit.signal.FieldAdjustableEmitterSignalTimer;
25 import org.orekit.signal.FieldSignalEmissionCondition;
26 import org.orekit.signal.FieldSignalReceptionCondition;
27 import org.orekit.signal.SignalEmissionCondition;
28 import org.orekit.signal.SignalReceptionCondition;
29 import org.orekit.signal.SignalTravelTimeModel;
30 import org.orekit.time.AbsoluteDate;
31 import org.orekit.time.FieldAbsoluteDate;
32 import org.orekit.utils.FieldPVCoordinatesProvider;
33 import org.orekit.utils.PVCoordinatesProvider;
34
35
36
37
38
39
40 public abstract class AbstractAngularMeasurementModel extends AbstractSignalBasedModel {
41
42
43
44
45
46 protected AbstractAngularMeasurementModel(final SignalTravelTimeModel signalTravelTimeModel) {
47 super(signalTravelTimeModel);
48 }
49
50
51
52
53
54
55
56
57 protected Vector3D getEmitterToReceiverVector(final SignalReceptionCondition receptionCondition,
58 final PVCoordinatesProvider emitter,
59 final AbsoluteDate approxEmissionDate) {
60 final AdjustableEmitterSignalTimer signalTravelTime = getSignalTravelTimeModel().getAdjustableEmitterComputer(emitter);
61 final SignalEmissionCondition emissionCondition = signalTravelTime.computeEmissionCondition(receptionCondition,
62 approxEmissionDate);
63 final Vector3D observedPosition = emissionCondition.emitterPosition();
64 return observedPosition.subtract(receptionCondition.receiverPosition()).normalize();
65 }
66
67
68
69
70
71
72
73
74
75 protected <T extends CalculusFieldElement<T>> FieldVector3D<T> getEmitterToReceiverVector(final FieldSignalReceptionCondition<T> receptionCondition,
76 final FieldPVCoordinatesProvider<T> emitter,
77 final FieldAbsoluteDate<T> approxEmissionDate) {
78 final Field<T> field = receptionCondition.receptionDate().getField();
79 final FieldAdjustableEmitterSignalTimer<T> signalTravelTime = getSignalTravelTimeModel()
80 .getFieldAdjustableEmitterComputer(field, emitter);
81 final FieldSignalEmissionCondition<T> emissionCondition = signalTravelTime.computeEmissionCondition(receptionCondition,
82 approxEmissionDate);
83 final FieldVector3D<T> observedPosition = emissionCondition.emitterPosition();
84 return observedPosition.subtract(receptionCondition.receiverPosition());
85 }
86 }