1
0
Fork 0
mirror of https://github.com/Findus23/rebound-collisions.git synced 2024-09-19 15:53:48 +02:00
rebound-collisions/graph.py

39 lines
1.2 KiB
Python
Raw Normal View History

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()
2020-03-31 15:39:59 +02:00
for merged, originals in ed.tree._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))
for name in interacting_objects:
object = ed.pdata[name]
if object.type == "sun":
name = "Sun"
if object.type == "gas giant":
name = "gas giant"
dot.node(name=str(name), label=f"{name} ({object.water_mass_fraction:.2e})",
shape='box' if object.type == "planetesimal" else "ellipse")
2020-12-27 13:40:46 +01:00
# dot.engine = 'neato'
2021-01-04 12:25:13 +01:00
dot.render(fn.with_suffix(".gv"), view=True, format="svg")