2022-01-29 20:39:00 +01:00
|
|
|
import random
|
|
|
|
from os.path import expanduser
|
2021-04-05 17:39:40 +02:00
|
|
|
from sys import argv
|
2021-03-03 15:06:50 +01:00
|
|
|
|
2022-01-29 20:39:00 +01:00
|
|
|
import numpy as np
|
2021-01-21 16:45:31 +01:00
|
|
|
from matplotlib import pyplot as plt
|
|
|
|
from scipy.constants import mega
|
|
|
|
|
|
|
|
from extradata import ExtraData, CollisionMeta
|
2022-01-29 20:39:00 +01:00
|
|
|
from utils import filename_from_argv, create_figure, plot_settings, mode_from_fn, scenario_colors
|
2021-05-03 16:16:28 +02:00
|
|
|
|
|
|
|
plot_settings()
|
2021-01-21 16:45:31 +01:00
|
|
|
|
2021-04-05 17:39:40 +02:00
|
|
|
dotsize = 1.5
|
2021-01-21 16:45:31 +01:00
|
|
|
|
2022-01-29 20:39:00 +01:00
|
|
|
angle_label = "Impact angle [deg]"
|
2021-01-21 16:45:31 +01:00
|
|
|
v_label = "v/v_esc"
|
2022-01-29 20:39:00 +01:00
|
|
|
time_label = "Time [Myr]"
|
2021-01-21 16:45:31 +01:00
|
|
|
|
|
|
|
fig1, ax1 = create_figure()
|
|
|
|
|
|
|
|
ax1.set_xlabel(angle_label)
|
|
|
|
ax1.set_ylabel(v_label)
|
|
|
|
|
|
|
|
fig2, ax2 = create_figure()
|
|
|
|
|
|
|
|
ax2.set_xlabel(time_label)
|
|
|
|
ax2.set_ylabel(angle_label)
|
|
|
|
ax2.set_xscale("log")
|
|
|
|
|
|
|
|
fig3, ax3 = create_figure()
|
|
|
|
|
|
|
|
ax3.set_xlabel(time_label)
|
|
|
|
ax3.set_ylabel(v_label)
|
|
|
|
ax3.set_xscale("log")
|
|
|
|
|
2021-02-03 21:37:42 +01:00
|
|
|
fig4, ax4 = create_figure()
|
|
|
|
ax4.set_xscale("log")
|
|
|
|
ax4.set_yscale("log")
|
2021-01-21 16:45:31 +01:00
|
|
|
|
2021-02-03 21:37:42 +01:00
|
|
|
ax4.set_xlabel(time_label)
|
|
|
|
ax4.set_ylabel("water loss")
|
2022-01-29 20:39:00 +01:00
|
|
|
|
|
|
|
fig5, ax5 = create_figure()
|
|
|
|
ax5.set_xscale("log")
|
|
|
|
ax5.set_yscale("log")
|
|
|
|
|
|
|
|
ax5.set_xlabel(time_label)
|
|
|
|
ax5.set_ylabel("mantle loss")
|
|
|
|
|
|
|
|
fig6, ax6 = create_figure()
|
|
|
|
ax6.set_xscale("log")
|
|
|
|
ax6.set_yscale("log")
|
|
|
|
|
|
|
|
ax6.set_xlabel(time_label)
|
|
|
|
ax6.set_ylabel("core loss")
|
|
|
|
|
|
|
|
fig7, ax7 = create_figure()
|
|
|
|
ax7.set_xlabel(angle_label)
|
|
|
|
|
2021-05-03 16:16:28 +02:00
|
|
|
sum = 0
|
2022-01-29 20:39:00 +01:00
|
|
|
all_angles = []
|
|
|
|
files = argv[1:]
|
|
|
|
random.seed(1)
|
|
|
|
random.shuffle(files)
|
|
|
|
for file in files:
|
2021-04-05 17:39:40 +02:00
|
|
|
fn = filename_from_argv(file)
|
|
|
|
print(fn)
|
|
|
|
try:
|
|
|
|
ed = ExtraData.load(fn)
|
|
|
|
except:
|
|
|
|
print("skipping")
|
|
|
|
continue
|
|
|
|
vs = []
|
|
|
|
angles = []
|
|
|
|
water_loss = []
|
2022-01-29 20:39:00 +01:00
|
|
|
mantle_loss = []
|
|
|
|
core_loss = []
|
2021-04-05 17:39:40 +02:00
|
|
|
times = []
|
|
|
|
|
|
|
|
for collision in ed.tree.get_tree().values():
|
2021-05-03 16:16:28 +02:00
|
|
|
sum += 1
|
2021-04-05 17:39:40 +02:00
|
|
|
meta: CollisionMeta = collision["meta"]
|
|
|
|
vs.append(meta.input.velocity_esc)
|
|
|
|
angles.append(meta.input.alpha)
|
|
|
|
loss = 1 - meta.water_retention
|
|
|
|
if loss == 0:
|
|
|
|
loss = 1e-5 # TODO: proper fix for log-log
|
|
|
|
water_loss.append(loss)
|
2022-01-29 20:39:00 +01:00
|
|
|
mantle_loss.append(1 - meta.mantle_retention)
|
|
|
|
core_loss.append(1 - meta.core_retention)
|
2021-04-05 17:39:40 +02:00
|
|
|
times.append(meta.time / mega)
|
|
|
|
|
2022-01-29 20:39:00 +01:00
|
|
|
mode = mode_from_fn(fn)
|
|
|
|
|
|
|
|
kwargs = {
|
|
|
|
"s": dotsize,
|
|
|
|
"color": scenario_colors[mode],
|
|
|
|
"alpha": .5
|
|
|
|
}
|
|
|
|
ax1.scatter(angles, vs, **kwargs)
|
|
|
|
ax2.scatter(times, angles, **kwargs)
|
|
|
|
ax3.scatter(times, vs, **kwargs)
|
|
|
|
if mode != "pm":
|
|
|
|
ax4.scatter(times, water_loss, **kwargs)
|
|
|
|
ax5.scatter(times, mantle_loss, **kwargs)
|
|
|
|
ax6.scatter(times, core_loss, **kwargs)
|
|
|
|
all_angles.extend(angles)
|
2021-04-05 17:39:40 +02:00
|
|
|
ax4.autoscale(enable=True, axis='y')
|
2022-01-29 20:50:48 +01:00
|
|
|
all_angles = np.asarray(all_angles)
|
2022-01-29 20:39:00 +01:00
|
|
|
|
2022-01-29 20:50:48 +01:00
|
|
|
hist, bins = np.histogram(all_angles, bins=50)
|
|
|
|
width = bins[1] - bins[0]
|
2022-01-29 20:39:00 +01:00
|
|
|
center = (bins[:-1] + bins[1:]) / 2
|
2022-01-29 20:50:48 +01:00
|
|
|
ax7.bar(center, hist, align="center", width=width)
|
2022-01-29 20:39:00 +01:00
|
|
|
xs = np.linspace(0, 90, 1000)
|
2022-01-29 20:50:48 +01:00
|
|
|
ys = np.sin(np.radians(xs) * 2) * np.sum(np.radians(width) * hist)
|
2022-01-29 20:39:00 +01:00
|
|
|
ax7.plot(xs, ys, c="C1")
|
|
|
|
|
|
|
|
print()
|
|
|
|
print(all_angles.mean())
|
|
|
|
|
|
|
|
for i, fig in enumerate([fig1, fig2, fig3, fig4, fig5, fig6, fig7]):
|
2021-05-03 16:16:28 +02:00
|
|
|
fig.tight_layout()
|
2022-01-29 20:39:00 +01:00
|
|
|
fig.savefig(expanduser(f"~/tmp/collision{i}.pdf"))
|
|
|
|
|
2021-05-03 16:16:28 +02:00
|
|
|
print(sum)
|
2021-01-21 16:45:31 +01:00
|
|
|
plt.show()
|