1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.estimation.measurements.generation;
18
19 import java.util.ArrayList;
20 import java.util.Collections;
21 import java.util.List;
22 import java.util.Map;
23
24 import org.orekit.estimation.measurements.EstimationModifier;
25 import org.orekit.estimation.measurements.MultiplexedMeasurement;
26 import org.orekit.estimation.measurements.ObservableSatellite;
27 import org.orekit.estimation.measurements.ObservedMeasurement;
28 import org.orekit.propagation.sampling.OrekitStepInterpolator;
29 import org.orekit.time.AbsoluteDate;
30
31
32
33
34
35
36 public class MultiplexedMeasurementBuilder implements MeasurementBuilder<MultiplexedMeasurement> {
37
38
39 private final List<MeasurementBuilder<?>> builders;
40
41
42 private final ObservableSatellite[] satellites;
43
44
45 private final List<EstimationModifier<MultiplexedMeasurement>> modifiers;
46
47
48
49
50 public MultiplexedMeasurementBuilder(final List<MeasurementBuilder<?>> builders) {
51 this.builders = builders;
52 this.modifiers = new ArrayList<>();
53
54 final List<ObservableSatellite> list = new ArrayList<>();
55 for (final MeasurementBuilder<?> builder : builders) {
56 for (final ObservableSatellite satellite : builder.getSatellites()) {
57 if (!list.contains(satellite)) {
58 list.add(satellite);
59 }
60 }
61 }
62 this.satellites = list.toArray(new ObservableSatellite[0]);
63
64 }
65
66
67
68
69
70
71 @Override
72 public void init(final AbsoluteDate start, final AbsoluteDate end) {
73 for (final MeasurementBuilder<?> builder : builders) {
74 builder.init(start, end);
75 }
76 }
77
78
79 @Override
80 public void addModifier(final EstimationModifier<MultiplexedMeasurement> modifier) {
81 modifiers.add(modifier);
82 }
83
84
85 @Override
86 public List<EstimationModifier<MultiplexedMeasurement>> getModifiers() {
87 return Collections.unmodifiableList(modifiers);
88 }
89
90
91 @Override
92 public MultiplexedMeasurement build(final AbsoluteDate date, final Map<ObservableSatellite, OrekitStepInterpolator> interpolators) {
93
94 final List<ObservedMeasurement<?>> measurements = new ArrayList<>(builders.size());
95 for (final MeasurementBuilder<?> builder : builders) {
96 measurements.add(builder.build(date, interpolators));
97 }
98
99
100
101 final MultiplexedMeasurement measurement = new MultiplexedMeasurement(measurements);
102 for (final EstimationModifier<MultiplexedMeasurement> modifier : getModifiers()) {
103 measurement.addModifier(modifier);
104 }
105 return measurement;
106
107 }
108
109
110 @Override
111 public ObservableSatellite[] getSatellites() {
112 return satellites.clone();
113 }
114
115 }