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
41
42
43 static boolean findByName(final List<ParameterDriver> driversList, final String name) {
44 for (final ParameterDriver d : driversList) {
45 if (d.getName().equals(name)) {
46 return true;
47 }
48 }
49 return false;
50 }
51
52
53
54
55 List<ParameterDriver> getParametersDrivers();
56
57
58
59
60
61 default int getNbParametersDriversValue() {
62 int totalSpan = 0;
63 final List<ParameterDriver> allParameters = getParametersDrivers();
64 for (ParameterDriver driver : allParameters) {
65 totalSpan += driver.getNbOfValues();
66 }
67 return totalSpan;
68 }
69
70
71
72
73
74
75
76
77 default double[] getParameters() {
78
79 final List<ParameterDriver> drivers = getParametersDrivers();
80 final double[] parameters = new double[drivers.size()];
81 for (int i = 0; i < drivers.size(); ++i) {
82 parameters[i] = drivers.get(i).getValue();
83 }
84 return parameters;
85 }
86
87
88
89
90
91
92
93
94
95 default double[] getParameters(AbsoluteDate date) {
96
97 final List<ParameterDriver> drivers = getParametersDrivers();
98 final double[] parameters = new double[drivers.size()];
99 for (int i = 0; i < drivers.size(); ++i) {
100 parameters[i] = drivers.get(i).getValue(date);
101 }
102 return parameters;
103 }
104
105
106
107
108
109
110 default double[] getParametersAllValues() {
111
112 final List<ParameterDriver> drivers = getParametersDrivers();
113 final int nbParametersValues = getNbParametersDriversValue();
114 final double[] parameters = new double[nbParametersValues];
115 int paramIndex = 0;
116 for (ParameterDriver driver : drivers) {
117 for (Span<Double> span = driver.getValueSpanMap().getFirstSpan(); span != null; span = span.next()) {
118 parameters[paramIndex++] = span.getData();
119 }
120
121 }
122 return parameters;
123 }
124
125
126
127
128
129
130
131 default <T extends CalculusFieldElement<T>> T[] getParametersAllValues(final Field<T> field) {
132 final List<ParameterDriver> drivers = getParametersDrivers();
133 final int nbParametersValues = getNbParametersDriversValue();
134 final T[] parameters = MathArrays.buildArray(field, nbParametersValues);
135 int paramIndex = 0;
136 for (ParameterDriver driver : drivers) {
137 for (Span<Double> span = driver.getValueSpanMap().getFirstSpan(); span != null; span = span.next()) {
138 parameters[paramIndex++] = field.getZero().newInstance(span.getData());
139 }
140 }
141 return parameters;
142 }
143
144
145
146
147
148
149
150
151
152
153 default <T extends CalculusFieldElement<T>> T[] getParameters(final Field<T> field) {
154 final List<ParameterDriver> drivers = getParametersDrivers();
155 final T[] parameters = MathArrays.buildArray(field, drivers.size());
156 for (int i = 0; i < drivers.size(); ++i) {
157 parameters[i] = field.getZero().newInstance(drivers.get(i).getValue());
158 }
159 return parameters;
160 }
161
162
163
164
165
166
167
168
169
170 default <T extends CalculusFieldElement<T>> T[] getParameters(final Field<T> field, final FieldAbsoluteDate<T> date) {
171 final List<ParameterDriver> drivers = getParametersDrivers();
172 final T[] parameters = MathArrays.buildArray(field, drivers.size());
173 for (int i = 0; i < drivers.size(); ++i) {
174 parameters[i] = field.getZero().newInstance(drivers.get(i).getValue(date.toAbsoluteDate()));
175 }
176 return parameters;
177 }
178
179
180
181
182
183
184 default ParameterDriver getParameterDriver(final String name) {
185
186 for (final ParameterDriver driver : getParametersDrivers()) {
187 if (name.equals(driver.getName())) {
188
189 return driver;
190 }
191 }
192 throw new UnsupportedParameterException(name, getParametersDrivers());
193 }
194
195
196
197
198
199
200
201
202 default boolean isSupported(String name) {
203 for (final ParameterDriver driver : getParametersDrivers()) {
204 if (name.equals(driver.getName())) {
205
206 return true;
207 }
208 }
209
210 return false;
211 }
212 }