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.List;
21 import java.util.SortedSet;
22 import java.util.TreeSet;
23
24 import org.orekit.estimation.measurements.ObservableSatellite;
25 import org.orekit.estimation.measurements.ObservedMeasurement;
26 import org.orekit.propagation.Propagator;
27 import org.orekit.propagation.PropagatorsParallelizer;
28 import org.orekit.propagation.SpacecraftState;
29 import org.orekit.propagation.sampling.MultiSatStepHandler;
30 import org.orekit.propagation.sampling.OrekitStepInterpolator;
31 import org.orekit.time.AbsoluteDate;
32
33
34
35
36
37
38 public class Generator {
39
40
41 private final List<Propagator> propagators;
42
43
44 private final List<Scheduler<?>> schedulers;
45
46
47
48 public Generator() {
49 this.propagators = new ArrayList<>();
50 this.schedulers = new ArrayList<>();
51 }
52
53
54
55
56
57 public ObservableSatellite addPropagator(final Propagator propagator) {
58 propagators.add(propagator);
59 return new ObservableSatellite(propagators.size() - 1);
60 }
61
62
63
64
65
66 public Propagator getPropagator(final ObservableSatellite satellite) {
67 return propagators.get(satellite.getPropagatorIndex());
68 }
69
70
71
72
73
74 public <T extends ObservedMeasurement<T>> void addScheduler(final Scheduler<T> scheduler) {
75 schedulers.add(scheduler);
76 }
77
78
79
80
81
82
83 public SortedSet<ObservedMeasurement<?>> generate(final AbsoluteDate start, final AbsoluteDate end) {
84
85
86 for (final Scheduler<?> scheduler : schedulers) {
87 scheduler.init(start, end);
88 }
89
90
91 final GeneratorHandler handler = new GeneratorHandler(schedulers);
92 final PropagatorsParallelizer parallelizer = new PropagatorsParallelizer(propagators, handler);
93
94
95 parallelizer.propagate(start, end);
96
97 return handler.getMeasurements();
98
99 }
100
101
102 private static class GeneratorHandler implements MultiSatStepHandler {
103
104
105 private final List<Scheduler<?>> schedulers;
106
107
108 private final SortedSet<ObservedMeasurement<?>> measurements;
109
110
111
112
113 GeneratorHandler(final List<Scheduler<?>> schedulers) {
114 this.schedulers = schedulers;
115 this.measurements = new TreeSet<>();
116 }
117
118
119 @Override
120 public void init(final List<SpacecraftState> states0, final AbsoluteDate t) {
121 for (final Scheduler<?> scheduler : schedulers) {
122 scheduler.init(states0.get(0).getDate(), t);
123 }
124 }
125
126
127 @Override
128 public void handleStep(final List<OrekitStepInterpolator> interpolators) {
129 for (final Scheduler<?> scheduler : schedulers) {
130 measurements.addAll(scheduler.generate(interpolators));
131 }
132 }
133
134
135
136
137 public SortedSet<ObservedMeasurement<?>> getMeasurements() {
138 return measurements;
139 }
140
141 }
142
143 }