1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.orekit.files.ccsds.ndm.adm.acm;
19
20 import java.util.Collections;
21 import java.util.List;
22 import java.util.stream.Collectors;
23
24 import org.orekit.attitudes.BoundedAttitudeProvider;
25 import org.orekit.attitudes.TabulatedProvider;
26 import org.orekit.files.general.AttitudeEphemerisFile;
27 import org.orekit.frames.Frame;
28 import org.orekit.time.AbsoluteDate;
29 import org.orekit.utils.AngularDerivativesFilter;
30 import org.orekit.utils.TimeStampedAngularCoordinates;
31
32
33
34
35
36 public class AttitudeStateHistory implements AttitudeEphemerisFile.AttitudeEphemerisSegment<TimeStampedAngularCoordinates> {
37
38
39 private final AttitudeStateHistoryMetadata metadata;
40
41
42 private final List<AttitudeState> states;
43
44
45
46
47
48 public AttitudeStateHistory(final AttitudeStateHistoryMetadata metadata,
49 final List<AttitudeState> states) {
50 this.metadata = metadata;
51 this.states = states;
52 }
53
54
55
56
57 public AttitudeStateHistoryMetadata getMetadata() {
58 return metadata;
59 }
60
61
62
63
64 public List<AttitudeState> getAttitudeStates() {
65 return Collections.unmodifiableList(states);
66 }
67
68
69 @Override
70 public Frame getReferenceFrame() {
71 return metadata.getEndpoints().getFrameMapper()
72 .buildCcsdsFrame(metadata.getEndpoints().getFrameA(), null);
73 }
74
75
76 @Override
77 public int getInterpolationSamples() {
78 return 1;
79 }
80
81
82 @Override
83 public String getInterpolationMethod() {
84 return "linear";
85 }
86
87
88 @Override
89 public AngularDerivativesFilter getAvailableDerivatives() {
90 return states.getFirst().getAvailableDerivatives();
91 }
92
93
94 @Override
95 public BoundedAttitudeProvider getAttitudeProvider() {
96 return new TabulatedProvider(getAngularCoordinates(), getInterpolationSamples(),
97 getAvailableDerivatives(), getStart(), getStop(),
98 getMetadata().getEndpoints());
99 }
100
101
102 @Override
103 public AbsoluteDate getStart() {
104 return states.getFirst().getDate();
105 }
106
107
108 @Override
109 public AbsoluteDate getStop() {
110 return states.getLast().getDate();
111 }
112
113
114 @Override
115 public List<TimeStampedAngularCoordinates> getAngularCoordinates() {
116 return states.stream().map(os -> os.toAngular(metadata.getEulerRotSeq())).collect(Collectors.toList());
117 }
118
119 }