Note
Go to the end to download the full example code.
Create a Planet from a Star
The core workflow: create a star from spectroscopic dex measurements, calculate a derivative bulk silicate planet composition, and visualize its chemistry.
Create a Star
Stellar compositions are specified in dex notation — logarithmic abundances relative to the Sun. Positive values mean enriched, negative values mean depleted.
import stellar_geology as sg
import pandas as pd
import plotly.graph_objects as go
star = sg.Star(
stellar_dex={"Fe": 0.1, "Mg": -0.05, "Si": -0.05},
name="Example Star",
)
# View the star's composition as wt% oxides
composition = star.get_composition(units="wtpt_oxides")
print("Star composition (wt% oxides):")
for oxide, pct in composition.items():
print(f" {oxide}: {pct:.2f}%")
Star composition (wt% oxides):
SiO2: 32.01%
FeO: 46.02%
MgO: 21.97%
Calculate a dervative bulk silicate planet composition
To get from a Star() to a bulk silicate planet composition, we simply create a Planet() object from our star, which then allows us to access its bulk composition and bulk silicate composition.
planet = sg.Planet().from_star(star)
Let’s look at the bulk planet composition first
bulk = planet.get_composition(
which="bulk_planet",
units="molfrac_elements"
)
Now, the bulk _silicate_ composition
To do this, we provide a fractionation factor to partition elements between the core and bulk silicate planet via the argument alphas. alphas is a dictionary that looks like: {“Fe”: 0.3, “Ni”: 0.1}. In that case, 30% of the planet’s Fe and 10% of its Ni will go into the metallic core. “Fe” is required at a minimum, but additional elements may be passed here.
{'Si': 0.4515931220452917, 'Fe': 0.08629480080357436, 'Mg': 0.462112077151134}
Now let’s visualize these compositions
First we use stellar_geology’s ternary_plot, which is a wrapper for plotly’s go.Scatterternary. Any argu ments that you can pass to go.Scatterternary are accepted by sg.ternary_plot and will be passed along. Try passing ternary=dict(bgcolor=”#333333”) as an argument in the ternary_plot() call.
fig = sg.ternary_plot(
bsp,
a="Si",
b="Fe",
c="Mg",
title="Planetary compositions, molar fraction",
name="BSP",
width=650,
base_marker=dict(size=20, color="#ff5252",
line=dict(color="#000000", width=1.5)
),
)
fig
Add more to the plot
sg.ternary_plot() returns a plotly figure object, so we can add to the plot as we would normally with plotly’s go.Scatterternary. Let’s add our bulk planet composition.
Total running time of the script: (0 minutes 0.216 seconds)