• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

moeyensj / thor / 4708907600

15 Apr 2023 05:15PM UTC coverage: 48.357%. First build
4708907600

Pull #98

github

GitHub
Merge 6dfe698e9 into cc697a037
Pull Request #98: Update workflows, add Docker compose recipe, and add linting with pre-commit

956 of 956 new or added lines in 82 files covered. (100.0%)

3091 of 6392 relevant lines covered (48.36%)

0.48 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

15.0
/thor/plotting/orbits.py
1
import numpy as np
1✔
2
import plotly
1✔
3

4
from ..orbits import getPerturberState, propagateOrbits
1✔
5

6
__all__ = ["plotOrbits"]
1✔
7

8
PLANET_COLORS = {
1✔
9
    "mercury": "#7F4D21",
10
    "venus": "#E7B765",
11
    "earth": "#5B6C8B",
12
    "mars barycenter": "#D84325",
13
    "jupiter barycenter": "#DDB282",
14
    "saturn barycenter": "#E3C299",
15
    "uranus barycenter": "#82B7CE",
16
    "neptune barycenter": "#5A63F4",
17
}
18
DTS = np.arange(-60, 1, 5)
1✔
19

20

21
def addPerturber(perturber, t0, dts, color=None):
1✔
22

23
    # Set perturber's name
24
    if perturber.find("barycenter"):
×
25
        name = perturber.split(" ")[0]
×
26
    name = name.capitalize()
×
27

28
    if not isinstance(color, str):
×
29
        color = "white"
×
30

31
    perturber_data = []
×
32
    if perturber == "sun":
×
33
        trace = plotly.graph_objs.Scatter3d(
×
34
            x=[0],
35
            y=[0],
36
            z=[0],
37
            name=name,
38
            mode="markers",
39
            marker=dict(size=4, color=color),
40
        )
41
        perturber_data.append(trace)
×
42

43
    else:
44
        perturber_state_t0 = getPerturberState(perturber, t0)
×
45
        trace = plotly.graph_objs.Scatter3d(
×
46
            x=perturber_state_t0[:, 0],
47
            y=perturber_state_t0[:, 1],
48
            z=perturber_state_t0[:, 2],
49
            name=name,
50
            mode="markers",
51
            marker=dict(size=3, color=color),
52
            hovertemplate="%{text}<br>" + "x: %{x}<br>" + "y: %{y}<br>" + "z: %{z}<br>",
53
            text=["MJD [TDB]: {:.5f}".format(i) for i in t0.tdb.mjd],
54
        )
55
        perturber_data.append(trace)
×
56

57
        t1 = t0 + dts
×
58
        perturber_states = getPerturberState(perturber, t1)
×
59
        trace = plotly.graph_objs.Scatter3d(
×
60
            x=perturber_states[:, 0],
61
            y=perturber_states[:, 1],
62
            z=perturber_states[:, 2],
63
            name=name,
64
            mode="markers",
65
            marker=dict(size=1, color=color),
66
            hovertemplate="%{text}<br>" + "x: %{x}<br>" + "y: %{y}<br>" + "z: %{z}<br>",
67
            text=["MJD [TDB]: {:.5f}".format(i) for i in t1.tdb.mjd],
68
        )
69
        perturber_data.append(trace)
×
70

71
    return perturber_data
×
72

73

74
def addOrbits(orbits, dts):
1✔
75

76
    assert len(np.unique(orbits.epochs)) == 1
×
77

78
    orbit_data = []
×
79
    t1 = orbits.epochs[0] + dts
×
80
    propagated = propagateOrbits(orbits, t1)
×
81

82
    for orbit_id in orbits.ids:
×
83

84
        trace = plotly.graph_objs.Scatter3d(
×
85
            x=orbits.cartesian[np.where(orbits.ids == orbit_id)[0], 0],
86
            y=orbits.cartesian[np.where(orbits.ids == orbit_id)[0], 1],
87
            z=orbits.cartesian[np.where(orbits.ids == orbit_id)[0], 2],
88
            name=orbit_id,
89
            mode="markers",
90
            marker=dict(size=2, color="white"),
91
            hovertemplate="%{text}<br>" + "x: %{x}<br>" + "y: %{y}<br>" + "z: %{z}<br>",
92
            text=["MJD [TDB]: {:.5f}".format(i) for i in t1.tdb.mjd],
93
        )
94
        orbit_data.append(trace)
×
95

96
        propagated_mask = propagated["orbit_id"] == orbit_id
×
97
        trace = plotly.graph_objs.Scatter3d(
×
98
            x=propagated[propagated_mask]["x"].values,
99
            y=propagated[propagated_mask]["y"].values,
100
            z=propagated[propagated_mask]["z"].values,
101
            name=orbit_id,
102
            mode="markers",
103
            marker=dict(size=1, color="white"),
104
            hovertemplate="%{text}<br>" + "x: %{x}<br>" + "y: %{y}<br>" + "z: %{z}<br>",
105
            text=["MJD [TDB]: {:.5f}".format(i) for i in t1.tdb.mjd],
106
        )
107
        orbit_data.append(trace)
×
108

109
    return orbit_data
×
110

111

112
def plotOrbits(
1✔
113
    orbits,
114
    dts=DTS,
115
    inner_planets=True,
116
    outer_planets=True,
117
    limits=None,
118
    grid=True,
119
):
120

121
    if grid:
×
122
        gridcolor = "rgb(96,96,96)"
×
123
        zerolinecolor = gridcolor
×
124
    else:
125
        gridcolor = "rgba(0,0,0,0)"
×
126
        zerolinecolor = "rgba(0,0,0,0)"
×
127

128
    data = []
×
129
    data += addOrbits(orbits, dts)
×
130

131
    if not isinstance(limits, tuple) or not isinstance(limits, list):
×
132
        if outer_planets:
×
133
            limits = (-50, 50)
×
134
        else:
135
            limits = (-5, 5)
×
136

137
    t0 = orbits.epochs[:1]
×
138
    data += addPerturber("sun", t0, dts, color="#FFD581")
×
139

140
    if inner_planets:
×
141
        for perturber in ["mercury", "venus", "earth", "mars barycenter"]:
×
142
            data += addPerturber(perturber, t0, dts, color=PLANET_COLORS[perturber])
×
143

144
    if outer_planets:
×
145
        for perturber in [
×
146
            "jupiter barycenter",
147
            "saturn barycenter",
148
            "uranus barycenter",
149
            "neptune barycenter",
150
        ]:
151
            data += addPerturber(perturber, t0, dts, color=PLANET_COLORS[perturber])
×
152

153
    layout = dict(
×
154
        width=1000,
155
        height=1000,
156
        autosize=False,
157
        title="",
158
        scene=dict(
159
            xaxis=dict(
160
                title="x [au]",
161
                gridcolor=gridcolor,
162
                zerolinecolor=zerolinecolor,
163
                showbackground=False,
164
                range=limits,
165
            ),
166
            yaxis=dict(
167
                title="y [au]",
168
                gridcolor=gridcolor,
169
                zerolinecolor=zerolinecolor,
170
                showbackground=False,
171
                range=limits,
172
            ),
173
            zaxis=dict(
174
                title="z [au]",
175
                gridcolor=gridcolor,
176
                zerolinecolor=zerolinecolor,
177
                showbackground=False,
178
                range=limits,
179
            ),
180
            aspectratio=dict(x=1, y=1, z=1),
181
        ),
182
        font_color="white",
183
        plot_bgcolor="rgb(0,0,0)",
184
        paper_bgcolor="rgba(0,0,0)",
185
        showlegend=False,
186
    )
187

188
    fig = plotly.graph_objs.Figure(data=data, layout=layout)
×
189
    plotly.offline.iplot(fig)
×
190
    return fig
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc