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.ArrayList;
20 import java.util.List;
21 import java.util.Map;
22
23 import org.hipparchus.CalculusFieldElement;
24 import org.hipparchus.analysis.differentiation.Gradient;
25 import org.orekit.errors.OrekitException;
26 import org.orekit.errors.OrekitMessages;
27 import org.orekit.time.AbsoluteDate;
28 import org.orekit.time.FieldAbsoluteDate;
29 import org.orekit.utils.ParameterDriver;
30 import org.orekit.utils.TimeSpanMap;
31
32
33
34
35
36
37
38 public class AggregatedClockModel implements ClockModel {
39
40
41 private final TimeSpanMap<ClockModel> models;
42
43
44
45
46 public AggregatedClockModel(final TimeSpanMap<ClockModel> models) {
47 this.models = models;
48 }
49
50
51
52
53 public TimeSpanMap<ClockModel> getModels() {
54 return models;
55 }
56
57
58 @Override
59 public AbsoluteDate getValidityStart() {
60 return models.getFirstNonNullSpan().getStart();
61 }
62
63
64 @Override
65 public AbsoluteDate getValidityEnd() {
66 return models.getLastNonNullSpan().getEnd();
67 }
68
69
70 @Override
71 public List<ParameterDriver> getParametersDrivers() {
72 final List<ParameterDriver> drivers = new ArrayList<>();
73 models.forEach(model -> drivers.addAll(model.getParametersDrivers()));
74 return drivers;
75 }
76
77
78 @Override
79 public ClockOffset getOffset(final AbsoluteDate date) {
80 return getModel(date).getOffset(date);
81 }
82
83
84 @Override
85 public <T extends CalculusFieldElement<T>> FieldClockOffset<T> getFieldOffset(final FieldAbsoluteDate<T> date) {
86 return getModel(date.toAbsoluteDate()).getFieldOffset(date);
87 }
88
89
90 @Override
91 public FieldClockModel<Gradient> getFieldModel(final int freeParameters,
92 final Map<String, Integer> indices, final AbsoluteDate date) {
93 return getModel(date).getFieldModel(freeParameters, indices, date);
94 }
95
96
97
98
99
100
101
102 private ClockModel getModel(final AbsoluteDate date) {
103 final ClockModel clockModel = models.get(date);
104 if (clockModel == null) {
105
106
107 throw new OrekitException(OrekitMessages.NO_DATA_GENERATED, date);
108 }
109 return clockModel;
110 }
111
112 }