1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.time.clocks;
18
19 import java.util.Collections;
20 import java.util.List;
21 import java.util.Map;
22 import java.util.function.DoubleFunction;
23
24 import org.hipparchus.CalculusFieldElement;
25 import org.hipparchus.analysis.differentiation.Gradient;
26 import org.orekit.time.AbsoluteDate;
27 import org.orekit.utils.ImmutableTimeStampedCache;
28 import org.orekit.utils.drivers.ParameterDriver;
29
30
31
32
33
34
35 public class SampledClockModel implements ClockModel {
36
37
38 private final ImmutableTimeStampedCache<ClockOffset> sample;
39
40
41
42
43
44 public SampledClockModel(final List<ClockOffset> sample, final int nbInterpolationPoints) {
45 this.sample = new ImmutableTimeStampedCache<>(nbInterpolationPoints, sample);
46 }
47
48
49
50
51 public ImmutableTimeStampedCache<ClockOffset> getCache() {
52 return sample;
53 }
54
55
56 @Override
57 public AbsoluteDate getValidityStart() {
58 return sample.getEarliest().getDate();
59 }
60
61
62 @Override
63 public AbsoluteDate getValidityEnd() {
64 return sample.getLatest().getDate();
65 }
66
67
68 @Override
69 public ClockOffset getOffset(final AbsoluteDate date) {
70 return new ClockOffsetHermiteInterpolator(sample.getMaxNeighborsSize()).
71 interpolate(date, sample.getNeighbors(date));
72 }
73
74
75 @Override
76 public <T extends CalculusFieldElement<T>> SampledFieldClockModel<T> toField(final DoubleFunction<T> converter) {
77 return new SampledFieldClockModel<>(sample.toField(c -> c.toField(converter)).getAll(),
78 sample.getMaxNeighborsSize());
79 }
80
81
82 @Override
83 public SampledFieldClockModel<Gradient> toGradient(final int freeParameters, final Map<String, Integer> indices) {
84 return toField(v -> Gradient.constant(freeParameters, v));
85 }
86
87
88 @Override
89 public List<ParameterDriver> getParametersDrivers() {
90 return Collections.emptyList();
91 }
92
93 }