1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.utils;
18
19 import java.util.List;
20
21 import org.hipparchus.CalculusFieldElement;
22 import org.hipparchus.Field;
23 import org.hipparchus.util.MathArrays;
24 import org.orekit.errors.UnsupportedParameterException;
25 import org.orekit.time.AbsoluteDate;
26 import org.orekit.time.FieldAbsoluteDate;
27 import org.orekit.utils.TimeSpanMap.Span;
28
29
30
31
32
33
34
35 public interface ParameterDriversProvider {
36
37
38
39
40 List<ParameterDriver> getParametersDrivers();
41
42
43
44
45
46 default int getNbParametersDriversValue() {
47 int totalSpan = 0;
48 final List<ParameterDriver> allParameters = getParametersDrivers();
49 for (ParameterDriver driver : allParameters) {
50 totalSpan += driver.getNbOfValues();
51 }
52 return totalSpan;
53 }
54
55
56
57
58
59
60
61
62 default double[] getParameters() {
63
64 final List<ParameterDriver> drivers = getParametersDrivers();
65 final double[] parameters = new double[drivers.size()];
66 for (int i = 0; i < drivers.size(); ++i) {
67 parameters[i] = drivers.get(i).getValue();
68 }
69 return parameters;
70 }
71
72
73
74
75
76
77
78
79
80 default double[] getParameters(AbsoluteDate date) {
81
82 final List<ParameterDriver> drivers = getParametersDrivers();
83 final double[] parameters = new double[drivers.size()];
84 for (int i = 0; i < drivers.size(); ++i) {
85 parameters[i] = drivers.get(i).getValue(date);
86 }
87 return parameters;
88 }
89
90
91
92
93
94
95 default double[] getParametersAllValues() {
96
97 final List<ParameterDriver> drivers = getParametersDrivers();
98 final int nbParametersValues = getNbParametersDriversValue();
99 final double[] parameters = new double[nbParametersValues];
100 int paramIndex = 0;
101 for (int i = 0; i < drivers.size(); ++i) {
102 for (Span<Double> span = drivers.get(i).getValueSpanMap().getFirstSpan(); span != null; span = span.next()) {
103 parameters[paramIndex++] = span.getData();
104 }
105
106 }
107 return parameters;
108 }
109
110
111
112
113
114
115
116 default <T extends CalculusFieldElement<T>> T[] getParametersAllValues(final Field<T> field) {
117 final List<ParameterDriver> drivers = getParametersDrivers();
118 final int nbParametersValues = getNbParametersDriversValue();
119 final T[] parameters = MathArrays.buildArray(field, nbParametersValues);
120 int paramIndex = 0;
121 for (int i = 0; i < drivers.size(); ++i) {
122 for (Span<Double> span = drivers.get(i).getValueSpanMap().getFirstSpan(); span != null; span = span.next()) {
123 parameters[paramIndex++] = field.getZero().newInstance(span.getData());
124 }
125 }
126 return parameters;
127 }
128
129
130
131
132
133
134
135
136
137
138 default <T extends CalculusFieldElement<T>> T[] getParameters(final Field<T> field) {
139 final List<ParameterDriver> drivers = getParametersDrivers();
140 final T[] parameters = MathArrays.buildArray(field, drivers.size());
141 for (int i = 0; i < drivers.size(); ++i) {
142 parameters[i] = field.getZero().newInstance(drivers.get(i).getValue());
143 }
144 return parameters;
145 }
146
147
148
149
150
151
152
153
154
155 default <T extends CalculusFieldElement<T>> T[] getParameters(final Field<T> field, final FieldAbsoluteDate<T> date) {
156 final List<ParameterDriver> drivers = getParametersDrivers();
157 final T[] parameters = MathArrays.buildArray(field, drivers.size());
158 for (int i = 0; i < drivers.size(); ++i) {
159 parameters[i] = field.getZero().newInstance(drivers.get(i).getValue(date.toAbsoluteDate()));
160 }
161 return parameters;
162 }
163
164
165
166
167
168
169 default ParameterDriver getParameterDriver(final String name) {
170
171 for (final ParameterDriver driver : getParametersDrivers()) {
172 if (name.equals(driver.getName())) {
173
174 return driver;
175 }
176 }
177 throw new UnsupportedParameterException(name, getParametersDrivers());
178 }
179
180
181
182
183
184
185
186
187 default boolean isSupported(String name) {
188 for (final ParameterDriver driver : getParametersDrivers()) {
189 if (name.equals(driver.getName())) {
190
191 return true;
192 }
193 }
194
195 return false;
196 }
197 }