2021-02-03 23:07:00 +01:00
|
|
|
from os import environ
|
|
|
|
|
2020-03-31 15:39:59 +02:00
|
|
|
from graphviz import Digraph
|
|
|
|
|
2021-01-04 12:25:13 +01:00
|
|
|
from extradata import ExtraData, CollisionMeta
|
2020-03-31 15:39:59 +02:00
|
|
|
from utils import filename_from_argv
|
|
|
|
|
2020-12-27 13:40:46 +01:00
|
|
|
fn = filename_from_argv()
|
|
|
|
ed = ExtraData.load(fn.with_suffix(".extra.json"))
|
2020-03-31 15:39:59 +02:00
|
|
|
|
|
|
|
dot = Digraph(comment='Collisions')
|
2021-01-21 18:50:44 +01:00
|
|
|
interacting_objects = set()
|
2021-02-03 22:05:59 +01:00
|
|
|
for merged, originals in ed.tree.get_tree().items():
|
2020-12-27 13:40:46 +01:00
|
|
|
first_parent = True
|
2020-04-02 12:54:11 +02:00
|
|
|
for parent in originals["parents"]:
|
2021-01-04 12:25:13 +01:00
|
|
|
meta: CollisionMeta = originals["meta"]
|
|
|
|
water_ret = meta.water_retention
|
|
|
|
mass_ret = meta.mass_retention
|
2020-12-27 13:40:46 +01:00
|
|
|
if first_parent:
|
2020-03-31 15:39:59 +02:00
|
|
|
|
2020-12-27 13:40:46 +01:00
|
|
|
label = f"{water_ret:.2f}/{mass_ret:.2f}"
|
|
|
|
first_parent = False
|
|
|
|
else:
|
|
|
|
label = None
|
|
|
|
dot.edge(str(parent), str(merged), xlabel=label)
|
2021-01-21 18:50:44 +01:00
|
|
|
interacting_objects.add(parent)
|
|
|
|
interacting_objects.add(int(merged))
|
|
|
|
|
2021-02-03 22:05:59 +01:00
|
|
|
for name in ed.pdata.keys():
|
2021-01-21 18:50:44 +01:00
|
|
|
object = ed.pdata[name]
|
|
|
|
if object.type == "sun":
|
2021-02-03 22:05:59 +01:00
|
|
|
displayname = "Sun"
|
|
|
|
elif object.type == "gas giant":
|
|
|
|
displayname = "gas giant"
|
|
|
|
else:
|
|
|
|
displayname = name
|
|
|
|
try:
|
|
|
|
mass = object.total_mass
|
|
|
|
except KeyError:
|
|
|
|
mass = 0
|
|
|
|
dot.node(name=str(name), label=f"{displayname} ({object.water_mass_fraction:.2e}; {mass:.2e})",
|
2021-01-21 18:50:44 +01:00
|
|
|
shape='box' if object.type == "planetesimal" else "ellipse")
|
2021-02-03 22:05:59 +01:00
|
|
|
if object.escaped:
|
|
|
|
dot.edge(str(name), str("escaped"))
|
2020-12-27 13:40:46 +01:00
|
|
|
|
|
|
|
# dot.engine = 'neato'
|
2021-02-03 23:07:00 +01:00
|
|
|
if environ.get("CI"):
|
|
|
|
dot.save(fn.with_suffix(".gv"))
|
|
|
|
else:
|
|
|
|
dot.render(fn.with_suffix(".gv"), view=True, format="pdf")
|