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.errors.OrekitException;
27 import org.orekit.errors.OrekitMessages;
28 import org.orekit.files.general.AttitudeEphemerisFile;
29 import org.orekit.frames.Frame;
30 import org.orekit.time.AbsoluteDate;
31 import org.orekit.utils.AngularDerivativesFilter;
32 import org.orekit.utils.TimeStampedAngularCoordinates;
33
34
35
36
37
38 public class AttitudeStateHistory implements AttitudeEphemerisFile.AttitudeEphemerisSegment<TimeStampedAngularCoordinates> {
39
40
41 private final AttitudeStateHistoryMetadata metadata;
42
43
44 private final List<AttitudeState> states;
45
46
47
48
49
50 public AttitudeStateHistory(final AttitudeStateHistoryMetadata metadata,
51 final List<AttitudeState> states) {
52 this.metadata = metadata;
53 this.states = states;
54 }
55
56
57
58
59 public AttitudeStateHistoryMetadata getMetadata() {
60 return metadata;
61 }
62
63
64
65
66 public List<AttitudeState> getAttitudeStates() {
67 return Collections.unmodifiableList(states);
68 }
69
70
71 @Override
72 public Frame getReferenceFrame() {
73 final Frame frame = metadata.getEndpoints().getFrameA().asFrame();
74 if (frame == null) {
75 throw new OrekitException(OrekitMessages.CCSDS_INVALID_FRAME,
76 metadata.getEndpoints().getFrameA().getName());
77 }
78 return frame;
79 }
80
81
82 @Override
83 public int getInterpolationSamples() {
84 return 1;
85 }
86
87
88 @Override
89 public String getInterpolationMethod() {
90 return "linear";
91 }
92
93
94 @Override
95 public AngularDerivativesFilter getAvailableDerivatives() {
96 return states.get(0).getAvailableDerivatives();
97 }
98
99
100 @Override
101 public BoundedAttitudeProvider getAttitudeProvider() {
102 return new TabulatedProvider(getAngularCoordinates(), getInterpolationSamples(),
103 getAvailableDerivatives(), getStart(), getStop(),
104 getMetadata().getEndpoints());
105 }
106
107
108 @Override
109 public AbsoluteDate getStart() {
110 return states.get(0).getDate();
111 }
112
113
114 @Override
115 public AbsoluteDate getStop() {
116 return states.get(states.size() - 1).getDate();
117 }
118
119
120 @Override
121 public List<TimeStampedAngularCoordinates> getAngularCoordinates() {
122 return states.stream().map(os -> os.toAngular(metadata.getEulerRotSeq())).collect(Collectors.toList());
123 }
124
125 }