Planetary Parameters#
Planetary Mass Parameters#
Celestial Body |
Mass [kg] |
\(\mu\) [km3/s2] |
Mass Fraction in Solar System |
---|---|---|---|
Sun |
1.98842 × 1030 kg |
1.32712 × 1011 km3/s2 |
9.98657 × 10-1 |
Mercury |
3.30101 × 1023 kg |
2.20319 × 104 km3/s2 |
1.65789 × 10-7 |
Venus |
4.86732 × 1024 kg |
3.24859 × 105 km3/s2 |
2.44455 × 10-6 |
Earth |
5.97219 × 1024 kg |
3.98600 × 105 km3/s2 |
2.99946 × 10-6 |
Moon |
7.34581 × 1022 kg |
4.90280 × 103 km3/s2 |
3.68934 × 10-8 |
Mars |
6.41693 × 1023 kg |
4.28284 × 104 km3/s2 |
3.22282 × 10-7 |
Jupiter |
1.89852 × 1027 kg |
1.26713 × 108 km3/s2 |
9.53510 × 10-4 |
Saturn |
5.68460 × 1026 kg |
3.79406 × 107 km3/s2 |
2.85502 × 10-4 |
Uranus |
8.68192 × 1025 kg |
5.79456 × 106 km3/s2 |
4.36039 × 10-5 |
Neptune |
1.02431 × 1026 kg |
6.83653 × 106 km3/s2 |
5.14447 × 10-5 |
Pluto |
1.46158 × 1022 kg |
9.75500 × 102 km3/s2 |
7.34061 × 10-9 |
The data in Table 8 is generated by the following script, using data from [PFWB21]:
Show code cell content
from dataclasses import dataclass
import pint
from IPython.display import display
from myst_nb.ext.glue import GLUE_PREFIX
units = pint.UnitRegistry()
Q_ = units.Quantity
@dataclass
class CelestialObject:
G = 6.67428e-11 * units("m**3 / (kg * s**2)")
identifier: str
name: str
GM_in_au: pint.Quantity
GM_ratio: pint.Quantity
GM_in_km: pint.Quantity
mass: pint.Quantity | None = None
mass_fraction: pint.Quantity | None = None
def compute_mass(self):
self.mass = (self.GM_in_km / self.G).to("kg")
def format_units(self, obj):
initial_format = format(obj, ".5~EH")
mantissa, remainder = initial_format.split("E")
remainder = remainder.split(" ", maxsplit=1)
exponent = remainder[0]
if len(remainder) == 1:
units = ""
else:
units = " " + remainder[1]
sign = exponent[0] if exponent[0] == "-" else ""
value = int(exponent[1:])
return f"{mantissa} × 10<sup>{sign}{value}</sup>{units}" # noqa: RUF001
def glue(self):
assert self.mass is not None, "Mass has not been computed"
assert self.mass_fraction is not None, "Mass fraction has not been computed"
metadata = {"scrapbook": {"mime_prefix": GLUE_PREFIX}}
for attr in ("GM_in_km", "mass", "mass_fraction"):
metadata["scrapbook"]["name"] = f"{self.name}_{attr}"
display(
{GLUE_PREFIX + "text/html": self.format_units(getattr(self, attr))},
raw=True,
metadata=metadata,
)
object_identifier_map = {
"GM1": "Mercury",
"GM2": "Venus",
"GM3": "Earth",
"GM4": "Mars",
"GM5": "Jupiter",
"GM6": "Saturn",
"GM7": "Uranus",
"GM8": "Neptune",
"GM9": "Pluto",
"GMS": "Sun",
"GMM": "Moon",
"GMB": "Earth-Moon-Barycenter",
}
celestial_objects = {}
# https://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/planets/de440_tech-comments.txt
# Mass parameter (GM) for Sun, Moon, and Planets:
# AU**3/DAY**2 GMSun/GM(I) KM**3/SEC**2
data = """\
GM1 4.9125001948893182e-11 6023657.944929 22031.868551
GM2 7.2434523326441187e-10 408523.718656 324858.592000
GM3 8.8876924467071022e-10 332946.048773 398600.435507
GM4 9.5495488297258119e-11 3098703.546737 42828.375816
GM5 2.8253458252257917e-07 1047.348631 126712764.100000
GM6 8.4597059933762903e-08 3497.901801 37940584.841800
GM7 1.2920265649682399e-08 22902.950783 5794556.400000
GM8 1.5243573478851939e-08 19412.259776 6836527.100580
GM9 2.1750964648933581e-12 136045556.167380 975.500000
GMS 2.9591220828411956e-04 1.000000 132712440041.279419
GMM 1.0931894624024351e-11 27068702.952351 4902.800118
GMB 8.9970113929473466e-10 328900.559708 403503.235625
"""
for line in data.splitlines():
identifier, GM_in_au, GM_ratio, GM_in_km = line.split()
name = object_identifier_map[identifier]
c_object = CelestialObject(
identifier,
name,
Q_(GM_in_au + "au**3/day**2"),
Q_(GM_ratio + "kg/kg"),
Q_(GM_in_km + "km**3/s**2"),
)
c_object.compute_mass()
celestial_objects[name] = c_object
total_mass = sum(c.mass for c in celestial_objects.values())
for c in celestial_objects.values():
c.mass_fraction = c.mass / total_mass
c.glue()
Planetary Radius Parameters#
Celestial Body |
Mean radius (km) |
Equatorial radius (km) |
Polar radius (km) |
---|---|---|---|
Sun |
— |
695700 |
— |
Mercury |
2439.4 ± 0.1 |
2440.53 ± 0.04 |
2438.26 ± 0.04 |
Venus |
6051.8 ± 1.0 |
Same |
Same |
Earth |
6371.0084 ± 0.0001 |
6378.1366 ± 0.0001 |
6356.7519 ± 0.0001 |
Moon |
1737.4 |
— |
— |
Mars |
3389.50 ± 0.2 |
3396.19 ± 0.1 |
3376.20 ± 0.1 |
Jupiter |
69911 ± 6 |
71492 ± 4 |
66854 ± 10 |
Saturn |
58232 ± 6 |
60268 ± 4 |
54364 ± 10 |
Uranus |
25362 ± 7 |
25559 ± 4 |
24973 ± 20 |
Neptune |
24622 ± 19 |
24764 ± 15 |
24341 ± 30 |
Pluto |
1188.3 ± 1.6 |
— |
— |
The data in Table 9 is generated by the following script, using data from [AAAHearn+18, AAC+19]:
Show code cell content
import csv
from IPython.display import display
from myst_nb.ext.glue import GLUE_PREFIX
# Data source: https://link.springer.com/article/10.1007/s10569-017-9805-5/tables/5
planet_data = """\
Planet,Mean radius (km),Equatorial radius (km),Polar radius (km),RMS deviation from spheroid (km),Maximum elevation (km),Maximum depression (km)
Sun,,695700,,,,
Mercury,2439.4 ± 0.1,2440.53 ± 0.04,2438.26 ± 0.04,1.0,4.6,2.5
Venus,6051.8 ± 1.0,Same,Same,1.0,11,2
Earth,6371.0084 ± 0.0001,6378.1366 ± 0.0001,6356.7519 ± 0.0001,3.57,8.85,11.52
Mars,3389.50 ± 0.2,3396.19 ± 0.1,3376.20 ± 0.1,3.0,22.64 ± 0.1,7.55 ± 0.1
Mars,3389.50 ± 0.2,3396.19 ± 0.1,N 3373.19 ± 0.1,3.0,22.64 ± 0.1,7.55 ± 0.1
Mars,3389.50 ± 0.2,3396.19 ± 0.1,S 3379.21 ± 0.1,3.0,22.64 ± 0.1,7.55 ± 0.1
Jupiter,69911 ± 6,71492 ± 4,66854 ± 10,62.1,31,102
Saturn,58232 ± 6,60268 ± 4,54364 ± 10,102.9,8,205
Uranus,25362 ± 7,25559 ± 4,24973 ± 20,16.8,28,0
Neptune,24622 ± 19,24764 ± 15,24341 ± 30,8.0,14,0
""" # noqa: E501
# Data source: https://link.springer.com/article/10.1007/s10569-017-9805-5/tables/6
moon_data = """\
Planet,Unnamed: 1,Satellite,Mean radius (km),Subplanetary equatorial radius (km),Along orbit equatorial radius (km),Polar radius (km),RMS deviation from ellipsoid (km),Maximum elevation (km),Maximum depression (km)
Earth,,Moon,1737.4,Same,Same,Same,2.5,7.5,5.6
Mars,I,Phobos,11.08 ± 0.04,13.0,11.4,9.1,0.5,,
Mars,II,Deimos,6.2 ± 0.25,7.8,6.0,5.1,0.2,,
Jupiter,XVI,Metis,21.5 ± 4,30,20,17,,,
Jupiter,XV,Adrastea,8.2 ± 4,10,8,7,,,
Jupiter,V,Amalthea,83.5 ± 3,125,73,64,3.2,,
Jupiter,XIV,Thebe,49.3 ± 4,58,49,42,,,
Jupiter,I,Io,1821.49,1829.4,1819.4,1815.7,,13.0,3.0
Jupiter,II,Europa,1560.8 ± 0.3,1562.6,1560.3,1559.5,0.32,,
Jupiter,III,Ganymede,2631.2± 1.7,Same,Same,Same,,,
Jupiter,IV,Callisto,2410.3± 1.5,Same,Same,Same,0.6,,
Jupiter,XIII,Leda,5,,,,,,
Jupiter,VI,Himalia,85 ± 10,,,,,,
Jupiter,X,Lysithea,12,,,,,,
Jupiter,VII,Elara,40 ± 10,,,,,,
Jupiter,XII,Ananke,10,,,,,,
Jupiter,XI,Carme,15,,,,,,
Jupiter,VIII,Pasiphae,18,,,,,,
Jupiter,IX,Sinope,14,,,,,,
Saturn,XVIII,Pan,14.0 ± 1.2,17.2 ± 1.7,15.4 ± 1.2,10.4 ± 0.9,,,
Saturn,XXXV,Daphnis,3.8 ± 0.8,4.6 ± 0.7,4.5 ± 0.9,2.8 ± 0.8,,,
Saturn,XV,Atlas,15.1 ± 0.8,20.5 ± 0.9,17.8 ± 0.7,9.4 ± 0.8,,,
Saturn,XVI,Prometheus,43.1 ± 1.2,68.2 ± 0.8,41.6 ± 1.8,28.2 ± 0.8,,,
Saturn,XVII,Pandora,40.6 ± 1.5,52.2 ± 1.8,40.8 ± 2.0,31.5 ± 0.9,,,
Saturn,XI,Epimetheus,58.2 ± 1.2,64.9 ± 1.3,57.3 ± 2.5,53.0 ± 0.5,,,
Saturn,X,Janus,89.2 ± 0.8,101.7 ± 1.6,93.0 ± 0.7,76.3 ± 0.4,,,
Saturn,I,Mimas,198.2 ± 0.4,207.8 ± 0.5,196.7 ± 0.5,190.6 ± 0.3,,,
Saturn,LIII,Aegaeon,0.33 ± 0.06,0.7 ± 0.05,0.25 ± 0.06,0.2 ± 0.08,,,
Saturn,XXXII,Methone,1.45 ± 0.03,1.94 ± 0.02,1.29 ± 0.04,1.21 ± 0.02,,,
Saturn,XLIX,Anthe,0.5,,,,,,
Saturn,XXXIII,Pallene,2.23 ± 0.07,2.88 ± 0.07,2.08 ± 0.07,1.8 ± 0.07,,,
Saturn,II,Enceladus,252.1 ± 0.2,256.6 ± 0.6,251.4 ± 0.2,248.3 ± 0.2,0.4,,
Saturn,III,Tethys,531.0 ± 0.6,538.4± 0.3,528.3 ± 1.1,526.3 ± 0.6,,,
Saturn,XIII,Telesto,12.4 ± 0.4,16.3 ± 0.5,11.8 ± 0.3,9.8 ± 0.3,,,
Saturn,XIV,Calypso,9.6 ± 0.6,15.3 ± 0.3,9.3 ± 2.2,6.3 ± 0.6,,,
Saturn,IV,Dione,561.4 ± 0.4,563.4 ± 0.6,561.3 ± 0.5,559.6 ± 0.4,0.5,,
Saturn,XII,Helene,18.0 ± 0.4,22.5 ± 0.5,19.6 ± 0.3,13.3 ± 0.2,,,
Saturn,XXXIV,Polydeuces,1.3 ± 0.4,1.5 ± 0.6,1.2 ± 0.4,1.0 ± 0.2,,,
Saturn,V,Rhea,763.5 ± 0.6,765.0 ± 0.7,763.1 ± 0.6,762.4 ± 0.6,,,
Saturn,VI,Titan,2575.0,2575.15 ± 0.02,2574.78 ± 0.06,2574.47 ± 0.06,0.26,,
Saturn,VII,Hyperion,135 ± 4,180.1 ± 2.0,133.0 ± 4.5,102.7 ± 4.5,,,
Saturn,VIII,Iapetus,734.3 ± 2.8,745.7 ± 2.9,745.7 ± 2.9,712.1 ± 1.6,,,
Saturn,IX,Phoebe,106.5 ± 0.7,109.4 ± 1.4,108.5 ± 0.6,101.8 ± 0.3,,,
Uranus,VI,Cordelia,13 ± 2,,,,,,
Uranus,VII,Ophelia,15 ± 2,,,,,,
Uranus,VIII,Bianca,21 ± 3,,,,,,
Uranus,IX,Cressida,31 ± 4,,,,,,
Uranus,X,Desdemona,27 ± 3,,,,,,
Uranus,XI,Juliet,42 ± 5,,,,,,
Uranus,XII,Portia,54 ± 6,,,,,,
Uranus,XIII,Rosalind,27 ± 4,,,,,,
Uranus,XIV,Belinda,33 ± 4,,,,,,
Uranus,XV,Puck,77 ± 51.9,,,,1.9,,
Uranus,V,Miranda,235.8 ± 0.7,240.4 ± 0.6,234.2 ± 0.9,232.9 ± 1.2,1.6,5.0,8.0
Uranus,I,Ariel,578.9 ± 0.6,581.1 ± 0.9,577.9 ± 0.6,577.7 ± 1.0,0.9,4.0,4.0
Uranus,II,Umbriel,584.7 ± 2.8,Same,Same,Same,2.6,,6.0
Uranus,III,Titania,788.9 ± 1.8,Same,Same,Same,1.3,4.0,
Uranus,IV,Oberon,761.4 ± 2.6,Same,Same,Same,1.5,12.0,2.0
Neptune,III,Naiad,29 ± 6,,,,,,
Neptune,IV,Thalassa,40 ± 8,,,,,,
Neptune,V,Despina,74 ± 10,,,,,,
Neptune,VI,Galatea,79 ± 12,,,,,,
Neptune,VII,Larissa,96 ± 7,104,,89,2.9,6.0,5.0
Neptune,VIII,Proteus,208 ± 8,218,208,201,7.9,18.0,13.0
Neptune,I,Triton,1352.6 ± 2.4,,,,,,
Neptune,II,Nereid,170 ± 25,,,,,,
""" # noqa: E501
# Data source: https://link.springer.com/article/10.1007/s10569-017-9805-5/tables/7
dwarf_data = """\
Body,Mean radius (km),Radii measured along principal axes.x (km),Radii measured along principal axes.y (km),Radii measured along principal axes.z (km),Unnamed: 5
(1) Ceres,470,487.3,487.3,446,(a)
(4) Vesta,,289 ± 5,280 ± 5,229 ± 5,
(16) Psyche,113 ± 23,139.5 ± 10%,116 ± 10%,94.5 ± 10%,(b)
(21) Lutetia,52.5 ± 2.5,62.0 ± 2.5,50.5 ± 2.0,46.5 ± 6.5,
(52) Europa,157.5 ± 7,189.5 ± 16,165 ± 8,124.5 ± 10,
(243) Ida,15.65 ± 0.6,26.8,12.0,7.6,
(253) Mathilde,26.5 ± 1.3,33,24,23,
(433) Eros,8.45 ± 0.02,17.0,5.5,5.5,
(511) Davida,150,180,147,127,(c)
(951) Gaspr,6.1 ± 0.4,9.1,5.2,4.4,
(2867) Šteins,2.70,3.24,2.73,2.04,
(4179) Toutatis,,2.13,1.015,0.85,
(25143) Itokawa,,0.268,0.147,0.104,
(134340) Pluto,1188.3 ± 1.6,Same,Same,Same,
(134340) Pluto: I Charon,606.0 ± 1.0,Same,Same,Same,
1P/Halley,,8.0 ± 0.5,4.0 ± 0.25,4.0 ± 0.25,
9P/Tempel 1,3.0 ± 0.1,3.7,2.5,,(d)
19P/Borrelly,4.22 ± 0.05,3.5 ± 0.2,–,–,(e)
67P/Churyumov–Gerasimenko,1.65,2.40,1.55,1.20,(f)
81P/Wild 2,1.975,2.7,1.9,1.5,
103P/Hartley 2,0.58,0.34,1.16,1.16,(g)
""" # noqa: E501, RUF001
def glue(row: dict[str, str], name: str, object: str) -> None:
meta_name = f"{object}_{name.replace(' ', '_').replace('(', '').replace(')', '')}"
value = row[name]
display(
{GLUE_PREFIX + "text/html": value},
raw=True,
metadata={"scrapbook": {"mime_prefix": GLUE_PREFIX, "name": meta_name}},
)
reader = csv.DictReader(planet_data.splitlines())
did_mars = False
for row in reader:
if did_mars and row["Planet"] == "Mars":
continue
elif row["Planet"] == "Mars":
did_mars = True
glue(row, "Mean radius (km)", row["Planet"])
glue(row, "Equatorial radius (km)", row["Planet"])
glue(row, "Polar radius (km)", row["Planet"])
reader = csv.DictReader(moon_data.splitlines())
# Just want Earth's Moon
glue(next(reader), "Mean radius (km)", object="Moon")
reader = csv.DictReader(dwarf_data.splitlines())
for row in reader:
body = row["Body"]
if "Pluto" not in body or "Charon" in body:
continue
body = body.split()[1]
glue(row, "Mean radius (km)", object="Pluto")
Planetary Orbital elements#
Celestial Body |
Semi-Major Axis (km) |
Perihelion (km) |
Aphelion (km) |
Period (days) |
Velocity (km/s) |
Eccentricity |
Inclination (degrees) |
---|---|---|---|---|---|---|---|
Mercury |
5.79091 × 107 |
4.60009 × 107 |
6.98173 × 107 |
87.97 |
47.87 |
0.20564 |
7.01 |
Venus |
1.08209 × 108 |
1.07477 × 108 |
1.08940 × 108 |
224.70 |
35.02 |
0.00676 |
3.39 |
Earth |
1.49598 × 108 |
1.47100 × 108 |
1.52096 × 108 |
365.26 |
29.78 |
0.01670 |
0.00 |
Moon |
3.83398 × 105 |
3.62106 × 105 |
4.04689 × 105 |
27.18 |
1.03 |
0.05555 |
23.71 |
Mars |
2.27939 × 108 |
2.06645 × 108 |
2.49233 × 108 |
686.97 |
24.13 |
0.09342 |
1.85 |
Jupiter |
7.78321 × 108 |
7.40603 × 108 |
8.16038 × 108 |
4332.52 |
13.06 |
0.04846 |
1.30 |
Saturn |
1.42910 × 109 |
1.35096 × 109 |
1.50724 × 109 |
10783.05 |
9.64 |
0.05468 |
2.49 |
Uranus |
2.87479 × 109 |
2.73854 × 109 |
3.01104 × 109 |
30768.84 |
6.79 |
0.04739 |
0.77 |
Neptune |
4.50489 × 109 |
4.46384 × 109 |
4.54594 × 109 |
60357.05 |
5.43 |
0.00911 |
1.77 |
Pluto |
5.91540 × 109 |
4.44212 × 109 |
7.38868 × 109 |
90821.51 |
4.74 |
0.24906 |
17.14 |
The data in Table 10 is generated by the following script, using data from [PFWB21, Rho19]:
Show code cell content
import re
from datetime import datetime
from pathlib import Path
import numpy as np
from dateutil import tz
from dateutil.rrule import DAILY, rrule
from IPython.display import display
from myst_nb.ext.glue import GLUE_PREFIX
from skyfield.elementslib import OsculatingElements, osculating_elements_of
from skyfield.framelib import build_ecliptic_matrix
from skyfield.iokit import Loader, load_file
from skyfield.units import Distance, Velocity
class CelestialObject:
def __init__(
self, identifier: int | None, name: str, elems: OsculatingElements
) -> None:
self.identifier = identifier
self.name = name
self.aphelion: np.float64 = np.average(elems.apoapsis_distance.km)
self.semimajor_axis: np.float64 = np.average(elems.semi_major_axis.km)
self.perihelion: np.float64 = np.average(elems.periapsis_distance.km)
self.period_in_days: np.float64 = np.average(elems.period_in_days)
self.orbital_velocity: np.float64 = np.sqrt(elems._mu / self.semimajor_axis)
self.eccentricity: np.float64 = np.average(elems.eccentricity)
self.inclination: np.float64 = np.average(elems.inclination.degrees)
def format_units(self, obj: float):
initial_format = format(obj, ".5E")
mantissa, exponent = initial_format.split("E")
sign = exponent[0] if exponent[0] == "-" else ""
value = int(exponent[1:])
return f"{mantissa} × 10<sup>{sign}{value}</sup>" # noqa: RUF001
def glue(self):
metadata = {"scrapbook": {"mime_prefix": GLUE_PREFIX}}
for attr in ("aphelion", "semimajor_axis", "perihelion"):
metadata["scrapbook"]["name"] = f"{self.name}_{attr}"
display(
{GLUE_PREFIX + "text/html": self.format_units(getattr(self, attr))},
raw=True,
metadata=metadata,
)
for attr in (
"period_in_days",
"orbital_velocity",
"inclination",
):
metadata["scrapbook"]["name"] = f"{self.name}_{attr}"
display(
{GLUE_PREFIX + "text/html": f"{getattr(self, attr):.2F}"},
raw=True,
metadata=metadata,
)
metadata["scrapbook"]["name"] = f"{self.name}_eccentricity"
display(
{GLUE_PREFIX + "text/html": f"{self.eccentricity:.5F}"},
raw=True,
metadata=metadata,
)
def parse_pck_file(filename: Path) -> dict[int | None, float]:
m = re.compile(
r"^\s+BODY(?P<identifier>\d+)_GM\s+=\s+\(\s(?P<value>[\d.ED+-]+)\s\)$"
)
lines = iter(filename.read_text().splitlines())
for line in lines:
if "begindata" in line:
break
GM_dict: dict[int | None, float] = {None: 0.0}
for line in lines:
mat = m.search(line)
if mat is not None:
identifier = mat.group("identifier")
value = mat.group("value")
if isinstance(value, str) and isinstance(identifier, str):
identifier = int(identifier)
value = value.replace("D", "E")
GM_dict[identifier] = float(value)
else:
raise ValueError(value)
return GM_dict
HERE = Path.cwd() # .joinpath("reference", "scripts")
if HERE.name == "reference":
HERE /= "scripts"
elif HERE.name == "orbital-mechanics":
HERE = HERE.joinpath("reference", "scripts")
GM_dict = parse_pck_file(HERE / "gm_Horizons.pck")
planets = load_file(HERE / "excerpt.bsp")
load = Loader(HERE)
ts = load.timescale()
start_date = datetime(1770, 10, 29, tzinfo=tz.UTC)
end_date = datetime(2271, 11, 1, tzinfo=tz.UTC)
dates: list[datetime] = list(rrule(DAILY, dtstart=start_date, until=end_date))
t = ts.from_datetimes(dates)
ecliptic_frame = build_ecliptic_matrix(t)
sun = planets["Sun"]
for planet_name in (
"Mercury",
"Venus",
"Earth",
"Mars",
"Jupiter",
"Saturn",
"Uranus",
"Neptune",
"Pluto",
):
planet = planet_name + " Barycenter"
position = (planets[planet] - sun).at(t)
# This is broken, see
# https://github.com/skyfielders/python-skyfield/issues/655#issuecomment-960377889
# osculating_elements_of(position, ecliptic_frame)
# So we have to do things manually
elems = OsculatingElements(
Distance(np.einsum("mnr,nr->mr", ecliptic_frame, position.position.au)), # type: ignore
Velocity(np.einsum("mnr,nr->mr", ecliptic_frame, position.velocity.au_per_d)), # type: ignore
position.t,
GM_dict[position.center] + GM_dict[position.target],
)
c_object = CelestialObject(position.target, planet_name, elems)
c_object.glue()
position = (planets["Moon"] - planets["Earth"]).at(t)
elems = osculating_elements_of(position)
c_object = CelestialObject(position.target, "Moon", elems)
c_object.glue()