Organize in submodules
This commit is contained in:
Binary file not shown.
+1
-1
@@ -4,7 +4,7 @@ import numpy as np
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
from baseprocessor import Rule
|
from baseprocessor import Rule
|
||||||
import snapshotprocessor
|
import snapshotprocessor
|
||||||
from mypool import MyPool
|
from utils.mypool import MyPool
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from mpi4py.futures import MPIPoolExecutor
|
from mpi4py.futures import MPIPoolExecutor
|
||||||
|
|||||||
+13
-3
@@ -10,11 +10,11 @@ from functools import partial
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
import tables
|
import tables
|
||||||
from tables import HDF5ExtError
|
from tables import HDF5ExtError, NoSuchNodeError
|
||||||
from tables.registry import class_name_dict
|
from tables.registry import class_name_dict
|
||||||
|
|
||||||
from params import default_params, load_params
|
from utils.params import default_params, load_params
|
||||||
from units import U
|
from utils.units import U
|
||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
@@ -44,6 +44,7 @@ class Rule:
|
|||||||
return self.process_fn(arg, **kwargs)
|
return self.process_fn(arg, **kwargs)
|
||||||
else:
|
else:
|
||||||
return self.process_fn(**kwargs)
|
return self.process_fn(**kwargs)
|
||||||
|
|
||||||
class BaseProcessor:
|
class BaseProcessor:
|
||||||
"""
|
"""
|
||||||
Base class for processors, should not be instanciated
|
Base class for processors, should not be instanciated
|
||||||
@@ -292,8 +293,17 @@ class HDF5Container(BaseProcessor):
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
value = node.read()
|
value = node.read()
|
||||||
|
if isinstance(unit, dict):
|
||||||
|
name = os.path.basename(node_name)
|
||||||
|
if name in unit:
|
||||||
|
unit = unit[name]
|
||||||
|
else:
|
||||||
|
unit = None
|
||||||
if not (unit is None or unit_old is None or unit_old == U.none):
|
if not (unit is None or unit_old is None or unit_old == U.none):
|
||||||
value = value * unit_old.express(unit)
|
value = value * unit_old.express(unit)
|
||||||
|
except NoSuchNodeError:
|
||||||
|
self.logger.error(f"The value {node_name} is node available", stack_info=True)
|
||||||
|
raise
|
||||||
finally:
|
finally:
|
||||||
if not open_before:
|
if not open_before:
|
||||||
self.close()
|
self.close()
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from scipy.stats import linregress
|
|||||||
from skimage.draw import line
|
from skimage.draw import line
|
||||||
|
|
||||||
from snapshotprocessor import SnapshotProcessor
|
from snapshotprocessor import SnapshotProcessor
|
||||||
from params import default_params
|
from utils.params import default_params
|
||||||
|
|
||||||
|
|
||||||
class DraggablePoint:
|
class DraggablePoint:
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
# coding: utf-8
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
import pandas as pd
|
|
||||||
from plotter import U
|
|
||||||
import snapshotprocessor
|
|
||||||
|
|
||||||
mp = 1.4 * 1.66 * 10 ** (-24) * U.g
|
|
||||||
z0 = 150 * U.pc
|
|
||||||
sink_header = [
|
|
||||||
"Id",
|
|
||||||
"M",
|
|
||||||
"dmf",
|
|
||||||
"x",
|
|
||||||
"y",
|
|
||||||
"z",
|
|
||||||
"vx",
|
|
||||||
"vy",
|
|
||||||
"vz",
|
|
||||||
"rot_period",
|
|
||||||
"lx",
|
|
||||||
"ly",
|
|
||||||
"lz",
|
|
||||||
"acc_rate",
|
|
||||||
"acc_lum",
|
|
||||||
"age",
|
|
||||||
"int_lum",
|
|
||||||
"Teff",
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def convert_coldens_s(n0):
|
|
||||||
return (np.sqrt(2 * np.pi) * mp * z0 * (n0 * U.cm ** (-3))).express(U.coldens)
|
|
||||||
|
|
||||||
|
|
||||||
convert_coldens = np.vectorize(convert_coldens_s)
|
|
||||||
|
|
||||||
|
|
||||||
def get_dispersion(dset, name):
|
|
||||||
"""
|
|
||||||
Compute dispersion from dset[name]
|
|
||||||
"""
|
|
||||||
vel = dset[name]
|
|
||||||
mass = dset["mass"]
|
|
||||||
mass_tot = np.sum(mass)
|
|
||||||
if mass_tot > 0:
|
|
||||||
mean = np.sum(mass * vel) / mass_tot
|
|
||||||
return np.sqrt(np.sum(mass * (vel - mean) ** 2) / mass_tot)
|
|
||||||
else:
|
|
||||||
return 0
|
|
||||||
|
|
||||||
def get_sinks(pp):
|
|
||||||
csv_name = f"{pp.path}/output_{pp.num:05}/sink_{pp.num:05}.csv"
|
|
||||||
return pd.read_csv(csv_name, header=None, names=sink_header)
|
|
||||||
|
|
||||||
|
|
||||||
def analyze_box(pp):
|
|
||||||
pp.cells["mass"] = snapshotprocessor.mass_func(pp.cells)
|
|
||||||
coldens = pp.get_value("/maps/coldens_z", unit=U.coldens)
|
|
||||||
sinks = get_sinks(pp)
|
|
||||||
sinks["mass"] = sinks.M
|
|
||||||
res = {}
|
|
||||||
dirs = ["x", "y", "z"]
|
|
||||||
res["time"] = pp.info["time"] * pp.info["unit_time"].express(U.Myr)
|
|
||||||
for i, dir in enumerate(dirs):
|
|
||||||
pp.cells[f"v{dir}"] = pp.cells["vel"][:, i]
|
|
||||||
res[f"sigma_{dir}"] = get_dispersion(pp.cells, f"v{dir}") * pp.info[
|
|
||||||
"unit_velocity"
|
|
||||||
].express(U.km_s)
|
|
||||||
res[f"sigma_sinks_{dir}"] = get_dispersion(sinks, f"v{dir}") * pp.info[
|
|
||||||
"unit_velocity"
|
|
||||||
].express(U.km_s)
|
|
||||||
res["coldens_mean"] = np.mean(coldens)
|
|
||||||
res["n0"] = pp.get_nml("cloud_params/dens0")
|
|
||||||
res["mass"] = np.sum(
|
|
||||||
pp.cells["mass"]
|
|
||||||
* (pp.info["unit_density"] * pp.info["unit_length"] ** 3).express(U.Msun)
|
|
||||||
)
|
|
||||||
res["coldens_initial"] = convert_coldens_s(res["n0"])
|
|
||||||
res["mass_initial"] = res["coldens_initial"] * 1e6
|
|
||||||
res["coldens_mean"] = np.mean(coldens)
|
|
||||||
res["coldens_beam"] = res["mass"] / (pp.info["unit_length"].express(U.pc)) ** 2
|
|
||||||
res["nsink"] = sinks.M.count()
|
|
||||||
res["mass_sink"] = np.sum(sinks.M)
|
|
||||||
|
|
||||||
return res
|
|
||||||
|
|
||||||
|
|
||||||
def load_wrapper(pp, fun):
|
|
||||||
"""
|
|
||||||
Wrapper to load_unload data and map function
|
|
||||||
"""
|
|
||||||
pp.load_cells(keys=["pos", "vel", "dx", "rho"])
|
|
||||||
pp.coldens("z")
|
|
||||||
res = fun(pp)
|
|
||||||
pp.unload_cells()
|
|
||||||
return res
|
|
||||||
|
|
||||||
|
|
||||||
def allinone(pp):
|
|
||||||
return load_wrapper(pp, analyze_box)
|
|
||||||
+1
-1
@@ -9,7 +9,7 @@ import numpy as np
|
|||||||
from plotter import Plotter, plt
|
from plotter import Plotter, plt
|
||||||
from snapshotprocessor import SnapshotProcessor, get_time
|
from snapshotprocessor import SnapshotProcessor, get_time
|
||||||
from studyprocessor import StudyProcessor
|
from studyprocessor import StudyProcessor
|
||||||
from params import default_params, load_params
|
from utils.params import default_params, load_params
|
||||||
|
|
||||||
fake_pp = SnapshotProcessor()
|
fake_pp = SnapshotProcessor()
|
||||||
|
|
||||||
|
|||||||
+8
-16
@@ -36,12 +36,11 @@ except ModuleNotFoundError:
|
|||||||
print("WARNING: no movie support (missing module moviepy)")
|
print("WARNING: no movie support (missing module moviepy)")
|
||||||
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
|
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
|
||||||
|
|
||||||
import pspec_read
|
|
||||||
from baseprocessor import Rule, BaseProcessor
|
from baseprocessor import Rule, BaseProcessor
|
||||||
from aggregator import Aggregator
|
from aggregator import Aggregator
|
||||||
from studyprocessor import StudyProcessor
|
from studyprocessor import StudyProcessor
|
||||||
from run_selector import RunSelector
|
from runselector import RunSelector
|
||||||
from units import U, unit_str, convert_exp
|
from utils.units import U, unit_str, convert_exp
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import lic
|
import lic
|
||||||
@@ -56,7 +55,7 @@ from astrophysix.simdm.experiment import (
|
|||||||
ParameterVisibility,
|
ParameterVisibility,
|
||||||
Simulation,
|
Simulation,
|
||||||
)
|
)
|
||||||
from ramses_astrophysix import ramses
|
from galactica.ramses_astrophysix import ramses
|
||||||
|
|
||||||
|
|
||||||
filetype_from_ext = {ext: ft for ft in FileType for ext in ft.extension_list}
|
filetype_from_ext = {ext: ft for ft in FileType for ext in ft.extension_list}
|
||||||
@@ -270,6 +269,7 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
self.nums,
|
self.nums,
|
||||||
self.path_out,
|
self.path_out,
|
||||||
self.params,
|
self.params,
|
||||||
|
tag=tag,
|
||||||
unit_time=unit_time,
|
unit_time=unit_time,
|
||||||
selector=self.selector,
|
selector=self.selector,
|
||||||
)
|
)
|
||||||
@@ -1434,15 +1434,6 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
if subname_y:
|
if subname_y:
|
||||||
hdf5_y.close()
|
hdf5_y.close()
|
||||||
|
|
||||||
def _pspec(self, name, **kwargs):
|
|
||||||
"""
|
|
||||||
Plot power spectrum (wrapper around pspec_read)
|
|
||||||
"""
|
|
||||||
del kwargs["run"]
|
|
||||||
file_pspec = self.current_processor.get_value("/hdf5/pspec")
|
|
||||||
num = self.current_processor.num
|
|
||||||
getattr(pspec_read, "pspec_" + name)(file_pspec, ".", num, **kwargs)
|
|
||||||
|
|
||||||
def _overlay_fit(self, x, y, yerr=None, kind="linear", label=None, **kwargs):
|
def _overlay_fit(self, x, y, yerr=None, kind="linear", label=None, **kwargs):
|
||||||
"""
|
"""
|
||||||
Add an overlay : fit a curve, linear or powerlaw
|
Add an overlay : fit a curve, linear or powerlaw
|
||||||
@@ -1527,7 +1518,7 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
This is where rules are defined
|
This is where rules are defined
|
||||||
"""
|
"""
|
||||||
self.rules = {
|
self.rules = {
|
||||||
"plot_arrays": PlotRule(lambda arg, **kwargs: self._plot(*arg, **kwargs), kind="comp"
|
"plot_comp": PlotRule(lambda arg, **kwargs: self._plot(*arg, **kwargs), kind="comp"
|
||||||
),
|
),
|
||||||
"plot_run": PlotRule(lambda arg, **kwargs: self._plot(*arg, **kwargs), kind="run"
|
"plot_run": PlotRule(lambda arg, **kwargs: self._plot(*arg, **kwargs), kind="run"
|
||||||
),
|
),
|
||||||
@@ -1674,7 +1665,6 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
"Density profile",
|
"Density profile",
|
||||||
dependencies=["axis", "rho_prof"],
|
dependencies=["axis", "rho_prof"],
|
||||||
),
|
),
|
||||||
"pspec": PlotRule(self, self._pspec, dependencies={"pspec": None}),
|
|
||||||
"sbeta": PlotRule(
|
"sbeta": PlotRule(
|
||||||
partial(
|
partial(
|
||||||
self._plot,
|
self._plot,
|
||||||
@@ -1965,13 +1955,15 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
self._gen_from_log("fine_step_from_log", name)
|
self._gen_from_log("fine_step_from_log", name)
|
||||||
for name in ["time", "dt", "a", "mem_cells", "mem_parts"]:
|
for name in ["time", "dt", "a", "mem_cells", "mem_parts"]:
|
||||||
self._gen_from_log("fine_step_from_log", name_y=name, name_x="fine_step")
|
self._gen_from_log("fine_step_from_log", name_y=name, name_x="fine_step")
|
||||||
|
|
||||||
|
self._gen_from_log("SN_momentum_from_log", name_x="time", name_y="SN_momentum")
|
||||||
|
|
||||||
# Dict of overlays
|
# Dict of overlays
|
||||||
self.overlays = {
|
self.overlays = {
|
||||||
"g": partial(self._overlay_vector, "g"),
|
"g": partial(self._overlay_vector, "g"),
|
||||||
"B": self._overlay_B,
|
"B": self._overlay_B,
|
||||||
"vel": self._overlay_speed,
|
"vel": self._overlay_speed,
|
||||||
"speed": self._overlay_speed,
|
"speed": self._overlay_speed,
|
||||||
"levels": self._overlay_levels,
|
"levels": self._overlay_levels,
|
||||||
"contour": self._overlay_contour,
|
"contour": self._overlay_contour,
|
||||||
"particles": self._overlay_particles,
|
"particles": self._overlay_particles,
|
||||||
|
|||||||
-374
@@ -1,374 +0,0 @@
|
|||||||
from builtins import str
|
|
||||||
|
|
||||||
import matplotlib.pyplot as P
|
|
||||||
import numpy as np
|
|
||||||
import tables as T
|
|
||||||
|
|
||||||
################################################################
|
|
||||||
# 3D
|
|
||||||
################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_rho(file, path_out, num, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d3/rho")
|
|
||||||
kbins = h5f.get_node(group, "kbins").read()
|
|
||||||
pspec = h5f.get_node(group, "pspec").read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = (k ** 2) * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^2 \mathcal{P}(\rho)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_rho_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_rho_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_B(file, path_out, num, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d3/B")
|
|
||||||
kbins = h5f.get_node(group, "kbins").read()
|
|
||||||
pspec = h5f.get_node(group, "pspec").read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = k ** 2 * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^2 \mathcal{P}(B)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_B_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_B_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_v(file, path_out, num, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d3/v")
|
|
||||||
kbins = h5f.get_node(group, "kbins").read()
|
|
||||||
pspec = h5f.get_node(group, "pspec").read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = k ** 4 * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^4 \mathcal{P}(v)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_v_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_v_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_vz(file, path_out, num, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d3/vz")
|
|
||||||
kbins = h5f.get_node(group, "kbins").read()
|
|
||||||
pspec = h5f.get_node(group, "pspec").read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = k ** 4 * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^4 \mathcal{P}(vz)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_vz_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_vz_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_cos(file, path_out, num, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d3/cos_vB")
|
|
||||||
kbins = h5f.get_node(group, "kbins").read()
|
|
||||||
pspec = h5f.get_node(group, "pspec").read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = k ** 2 * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^2 \mathcal{P}(\cos(\vec{v}.\vec{B}))$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_cos_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_cos_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_logrho(file, path_out, num, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d3/logrho")
|
|
||||||
kbins = h5f.get_node(group, "kbins").read()
|
|
||||||
pspec = h5f.get_node(group, "pspec").read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = k ** 2 * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^2 \mathcal{P}(\log(\rho))$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_logrho_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_logrho_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_kr(file, path_out, num, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d3/kr")
|
|
||||||
kbins = h5f.get_node(group, "kbins").read()
|
|
||||||
pspec = h5f.get_node(group, "pspec").read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = (k ** 4) * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^4 \mathcal{P}(\rho^{1/3}v)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_kr_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_kr_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_vc(file, path_out, num, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d3/vc")
|
|
||||||
kbins = h5f.get_node(group, "kbins").read()
|
|
||||||
pspec = h5f.get_node(group, "pspec").read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = (k ** 4) * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^4 \mathcal{P}(v_c)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_vc_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_vc_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_vs(file, path_out, num, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d3/vs")
|
|
||||||
kbins = h5f.get_node(group, "kbins").read()
|
|
||||||
pspec = h5f.get_node(group, "pspec").read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = (k ** 4) * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^4 \mathcal{P}(v_s)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_vs_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_vs_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
###################################################################
|
|
||||||
# 2D
|
|
||||||
###################################################################
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_rho_2D(file, path_out, num, plan, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d2/rho")
|
|
||||||
kbins = h5f.get_node(group, "kbins_" + str(plan)).read()
|
|
||||||
pspec = h5f.get_node(group, "pspec_" + str(plan)).read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = (k ** 1) * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k \mathcal{P}(\rho)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_rho_2D_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_rho_2D_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_B_2D(file, path_out, num, plan, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d2/B")
|
|
||||||
kbins = h5f.get_node(group, "kbins_" + str(plan)).read()
|
|
||||||
pspec = h5f.get_node(group, "pspec_" + str(plan)).read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = k ** 1 * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k \mathcal{P}(B)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_B_2D_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_B_2D_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_v_2D(file, path_out, num, plan, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d2/v")
|
|
||||||
kbins = h5f.get_node(group, "kbins_" + str(plan)).read()
|
|
||||||
pspec = h5f.get_node(group, "pspec_" + str(plan)).read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = k ** 3 * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^3 \mathcal{P}(v)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_v_2D_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_v_2D_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_vz_2D(file, path_out, num, plan, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d2/vz")
|
|
||||||
kbins = h5f.get_node(group, "kbins_" + str(plan)).read()
|
|
||||||
pspec = h5f.get_node(group, "pspec_" + str(plan)).read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = k ** 3 * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^3 \mathcal{P}(v_z)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_vz_2D_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_vz_2D_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_cos_2D(file, path_out, num, plan, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d2/cos_vB")
|
|
||||||
kbins = h5f.get_node(group, "kbins_" + str(plan)).read()
|
|
||||||
pspec = h5f.get_node(group, "pspec_" + str(plan)).read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = k * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k \mathcal{P}(\cos(\vec{v}.\vec{B}))$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_cos_2D_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_cos_2D_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_logrho_2D(file, path_out, num, plan, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d2/logrho")
|
|
||||||
kbins = h5f.get_node(group, "kbins_" + str(plan)).read()
|
|
||||||
pspec = h5f.get_node(group, "pspec_" + str(plan)).read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = k * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k \mathcal{P}(\log(\rho))$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_logrho_2D_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_logrho_2D_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_kr_2D(file, path_out, num, plan, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d2/kr")
|
|
||||||
kbins = h5f.get_node(group, "kbins_" + str(plan)).read()
|
|
||||||
pspec = h5f.get_node(group, "pspec_" + str(plan)).read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = (k ** 3) * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^3 \mathcal{P}(\rho^{1/3}v)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_kr_2D_" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_kr_2D_" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_vc_2D(file, path_out, num, plan, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d2/vc")
|
|
||||||
kbins = h5f.get_node(group, "kbins_" + str(plan)).read()
|
|
||||||
pspec = h5f.get_node(group, "pspec_" + str(plan)).read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = (k ** 3) * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^3 \mathcal{P}(v_c)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_vc_2D" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_vc_2D" + format(num, "05") + ".jpeg")
|
|
||||||
|
|
||||||
|
|
||||||
def pspec_vs_2D(file, path_out, num, plan, color="r", save=False, **kwargs):
|
|
||||||
|
|
||||||
h5f = T.open_file(file, mode="r")
|
|
||||||
group = h5f.get_node("/out_" + format(num, "05") + "/d2/vs")
|
|
||||||
kbins = h5f.get_node(group, "kbins_" + str(plan)).read()
|
|
||||||
pspec = h5f.get_node(group, "pspec_" + str(plan)).read()
|
|
||||||
h5f.close()
|
|
||||||
|
|
||||||
k = np.sqrt(kbins[1:] * kbins[:-1])
|
|
||||||
pspec = (k ** 3) * pspec
|
|
||||||
if save:
|
|
||||||
P.figure(figsize=(8, 8))
|
|
||||||
P.xlabel(r"$k$", fontsize=12)
|
|
||||||
P.ylabel(r"$k^3 \mathcal{P}(v_s)$", fontsize=12)
|
|
||||||
P.loglog(k, pspec, "-", color=color, **kwargs)
|
|
||||||
if save:
|
|
||||||
P.savefig(path_out + "pspec_vs_2D" + format(num, "05") + ".ps")
|
|
||||||
P.savefig(path_out + "pspec_vs_2D" + format(num, "05") + ".jpeg")
|
|
||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
Select snaphots with a criterion
|
Select snaphots with a criterion
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from run_selector import RunSelector
|
from runselector import RunSelector
|
||||||
from plotter import Plotter, U
|
from plotter import Plotter, U
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|||||||
@@ -34,10 +34,10 @@ from pymses.sources.hop.hop import HOP
|
|||||||
|
|
||||||
from fil_finder import FilFinder2D
|
from fil_finder import FilFinder2D
|
||||||
from scipy import fft
|
from scipy import fft
|
||||||
import pspec_new
|
from scripts import pspec as pspec
|
||||||
|
|
||||||
|
|
||||||
from units import U
|
from utils.units import U
|
||||||
from baseprocessor import (
|
from baseprocessor import (
|
||||||
HDF5Container,
|
HDF5Container,
|
||||||
Rule,
|
Rule,
|
||||||
@@ -48,7 +48,7 @@ from baseprocessor import (
|
|||||||
oct_vect_getter,
|
oct_vect_getter,
|
||||||
)
|
)
|
||||||
|
|
||||||
from run_selector import RunSelector
|
from runselector import RunSelector
|
||||||
|
|
||||||
|
|
||||||
# Getters
|
# Getters
|
||||||
@@ -212,10 +212,10 @@ def pspec(map2D):
|
|||||||
# Compute fft
|
# Compute fft
|
||||||
fmap = fft.fft2(map2D)
|
fmap = fft.fft2(map2D)
|
||||||
# Compute the power map from the fft
|
# Compute the power map from the fft
|
||||||
pmap = pspec_new.pcube(fmap)
|
pmap = pspec.pcube(fmap)
|
||||||
# Use the power map and the fft to compute the powerspectrum
|
# Use the power map and the fft to compute the powerspectrum
|
||||||
# This is typically an histogram of k weighted by the fourier transform value
|
# This is typically an histogram of k weighted by the fourier transform value
|
||||||
pspec, kbins, pspec2, fbins = pspec_new.pspectrum(pmap, kmap, kbins, 1, 0)
|
pspec, kbins, pspec2, fbins = pspec.pspectrum(pmap, kmap, kbins, 1, 0)
|
||||||
# Return bin center and power spectrum
|
# Return bin center and power spectrum
|
||||||
return 0.5 * (kbins[1:] + kbins[:-1]), pspec
|
return 0.5 * (kbins[1:] + kbins[:-1]), pspec
|
||||||
|
|
||||||
@@ -1434,10 +1434,10 @@ class SnapshotProcessor(HDF5Container):
|
|||||||
|
|
||||||
return {key: df[key].values for key in df}
|
return {key: df[key].values for key in df}
|
||||||
|
|
||||||
def _pspec(self, overwrite_file=False, **kwargs):
|
def pspec(self, overwrite_file=False, **kwargs):
|
||||||
outfile = self.pspec_filename
|
outfile = self.pspec_filename
|
||||||
if overwrite_file or not os.path.exists(self.pspec_filename):
|
if overwrite_file or not os.path.exists(self.pspec_filename):
|
||||||
pspec_new.pspec(repo=self.path, iouts=[self.num], outfile=outfile, **kwargs)
|
pspec.pspec(repo=self.path, iouts=[self.num], outfile=outfile, **kwargs)
|
||||||
return np.array([self.pspec_filename])
|
return np.array([self.pspec_filename])
|
||||||
|
|
||||||
def _write_particles(self):
|
def _write_particles(self):
|
||||||
@@ -1754,7 +1754,7 @@ class SnapshotProcessor(HDF5Container):
|
|||||||
"vz_gas": "unit_velocity",
|
"vz_gas": "unit_velocity",
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
"pspec": Rule(self._pspec, "Power spectrum", "/hdf5"),
|
"pspec": Rule(self.pspec, "Power spectrum", "/hdf5"),
|
||||||
"write_particles": Rule(self._write_particles, "Particles file", "/hdf5"
|
"write_particles": Rule(self._write_particles, "Particles file", "/hdf5"
|
||||||
),
|
),
|
||||||
"write_cells": Rule(self._write_cells, "Cells file", "/hdf5"),
|
"write_cells": Rule(self._write_cells, "Cells file", "/hdf5"),
|
||||||
|
|||||||
+37
-3
@@ -12,9 +12,9 @@ from scipy.stats import linregress
|
|||||||
from baseprocessor import Rule, HDF5Container
|
from baseprocessor import Rule, HDF5Container
|
||||||
from aggregator import Aggregator
|
from aggregator import Aggregator
|
||||||
from snapshotprocessor import SnapshotProcessor
|
from snapshotprocessor import SnapshotProcessor
|
||||||
from run_selector import RunSelector
|
from runselector import RunSelector
|
||||||
from params import default_params
|
from utils.params import default_params
|
||||||
from units import U
|
from utils.units import U
|
||||||
|
|
||||||
|
|
||||||
class StudyProcessor(Aggregator, HDF5Container):
|
class StudyProcessor(Aggregator, HDF5Container):
|
||||||
@@ -452,6 +452,31 @@ class StudyProcessor(Aggregator, HDF5Container):
|
|||||||
series["turb_energy"][run].append(np.nan)
|
series["turb_energy"][run].append(np.nan)
|
||||||
return series
|
return series
|
||||||
|
|
||||||
|
def _extract_SN_Mom_from_log(self, series, log_filename, run):
|
||||||
|
cmd_grep = f"grep -e 'SN momentum' -e 'Fine step' {log_filename}"
|
||||||
|
content = os.popen(cmd_grep).readlines()
|
||||||
|
block_err = []
|
||||||
|
time = 0
|
||||||
|
for i in range(0, len(content)):
|
||||||
|
try:
|
||||||
|
if content[i][1:5] == "Fine":
|
||||||
|
data = content[i].replace("=", " ").split()
|
||||||
|
time = np.float(data[4])
|
||||||
|
elif content[i][1:3] == "SN" :
|
||||||
|
series["time"][run].append(time)
|
||||||
|
series["SN_momentum"][run].append(np.float(content[i].split()[-1]))
|
||||||
|
else:
|
||||||
|
raise ValueError("Wrong start of line")
|
||||||
|
except (AssertionError, ValueError, IndexError):
|
||||||
|
block_err.append(i)
|
||||||
|
|
||||||
|
if len(block_err) > 0:
|
||||||
|
self.logger.warning(
|
||||||
|
f"Error encountered in parsing {log_filename} (grepped blocks {block_err})"
|
||||||
|
)
|
||||||
|
return series
|
||||||
|
|
||||||
|
|
||||||
def get_logs(self, run):
|
def get_logs(self, run):
|
||||||
glob_str = f"{self.path}/{run}/{self.params.input.log_prefix}*"
|
glob_str = f"{self.path}/{run}/{self.params.input.log_prefix}*"
|
||||||
logs = glob.glob(glob_str)
|
logs = glob.glob(glob_str)
|
||||||
@@ -815,6 +840,15 @@ class StudyProcessor(Aggregator, HDF5Container):
|
|||||||
"id": U.none,
|
"id": U.none,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
"SN_momentum_from_log": Rule(
|
||||||
|
partial(self._from_log, ["time", "SN_momentum"], self._extract_SN_Mom_from_log),
|
||||||
|
group="/series",
|
||||||
|
unit={"time": "unit_time", "SN_momentum" : {"unit_mass" : 1, "unit_velocity" : 1}},
|
||||||
|
description={
|
||||||
|
"time": "Time",
|
||||||
|
"SN_momentum": "Injected momentum",
|
||||||
|
},
|
||||||
|
),
|
||||||
"turb_power": Rule(
|
"turb_power": Rule(
|
||||||
self._turb_power,
|
self._turb_power,
|
||||||
group="/series/rms_from_log",
|
group="/series/rms_from_log",
|
||||||
|
|||||||
@@ -0,0 +1,160 @@
|
|||||||
|
"""
|
||||||
|
Toolbox for the TURBOX project (simulation part).
|
||||||
|
|
||||||
|
By Noé Brucy and Corentin Le Yuehlic, 2022
|
||||||
|
|
||||||
|
Compute and plot eta_d, from the slope of the logdensity power spectrum
|
||||||
|
"""
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
from plotter import U
|
||||||
|
from baseprocessor import Rule
|
||||||
|
from matplotlib import pyplot as plt
|
||||||
|
import pandas as pd
|
||||||
|
import tables
|
||||||
|
from scipy.stats import linregress
|
||||||
|
|
||||||
|
|
||||||
|
def get_pspec(pp, field:str, dim:int=3):
|
||||||
|
"""Read power spectruù
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
pp : SnapshotProcessor
|
||||||
|
field : str
|
||||||
|
field to get
|
||||||
|
dim : int, optional
|
||||||
|
dimension (2 or 3), by default 3
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
tupple (np.array, np.array)
|
||||||
|
wave number and correponding powers
|
||||||
|
"""
|
||||||
|
h5file = tables.File(pp.pspec_filename)
|
||||||
|
path = f"/out_{pp.num:05}/d{dim}/{field}"
|
||||||
|
node = h5file.get_node(path)
|
||||||
|
kbins = node.kbins.read()
|
||||||
|
pspec = node.pspec.read()
|
||||||
|
h5file.close()
|
||||||
|
k = (kbins[:-1] + kbins[1:]) / 2
|
||||||
|
return k, pspec
|
||||||
|
|
||||||
|
|
||||||
|
span_resolution = {
|
||||||
|
256: (0.8, 1.1),
|
||||||
|
512: (0.5, 1.7),
|
||||||
|
1024: (0.4, 1.7)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def get_slope(pp, field:str, resol:int, plotdebug:bool=False):
|
||||||
|
"""Get the slope of the Power specturm using linear regression in the selected range
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
pp : Snapshotprocessor
|
||||||
|
field : str
|
||||||
|
field name
|
||||||
|
resol : int
|
||||||
|
resolution (number of cells on 1 side of the simulation cube)
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
tuple (float, float)
|
||||||
|
Slope, square value of the correlation coefficient
|
||||||
|
"""
|
||||||
|
# Trustworthy span od the power spectrum in log10(k) as a function of the resolution
|
||||||
|
|
||||||
|
logkmin, logkmax = span_resolution[resol]
|
||||||
|
k, power = get_pspec(pp, field)
|
||||||
|
logk, logpower = np.log10(k), np.log10(power)
|
||||||
|
mask = (logk >= logkmin) & (logk < logkmax)
|
||||||
|
results = linregress(logk[mask], logpower[mask])
|
||||||
|
if plotdebug:
|
||||||
|
plt.figure()
|
||||||
|
plt.plot(logk, logpower)
|
||||||
|
plt.plot(logk[mask], results.slope*logk[mask]+ results.intercept, lw=3, ls=":", color="k")
|
||||||
|
pp.logger.info(f"Fit results in get_slope({field}, {resol}): slope:{results.slope:.2f}, b:{results.intercept:.2f}, R2:{results.rvalue**2:.2f}")
|
||||||
|
if results.rvalue**2 < 0.8:
|
||||||
|
pp.logger.warning(f"Bad fit in get_slope({field}, {resol}) with {logkmin} <= logk < {logkmax}")
|
||||||
|
pp.logger.warning(f"log(k) is \n {logk[mask]}")
|
||||||
|
pp.logger.warning(f"log(power) is \n {logpower[mask]}")
|
||||||
|
|
||||||
|
return results.slope, results.intercept, results.rvalue**2
|
||||||
|
|
||||||
|
def build_suite(pl, redo=False, cs0=0.28834810480560674):
|
||||||
|
"""Compute an array of parameter for each run in the Plotter pl
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
pl : Plotter
|
||||||
|
redo : bool, optional
|
||||||
|
redo the comptutation of the velocity dispersion, by default False
|
||||||
|
cs0 : float, optional
|
||||||
|
Sound speed in the simulations, by default 0.28834810480560674
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
pd.Dataframe
|
||||||
|
dataframe with the properties of the simulation
|
||||||
|
"""
|
||||||
|
|
||||||
|
df = dict()
|
||||||
|
df["snapshots"] = pl.nums.values()
|
||||||
|
df["n0"] = pl.study.get_nml("galbox_params/dens0").values()
|
||||||
|
df["turbinit"] = pl.study.get_nml("galbox_params/turb").values()
|
||||||
|
df["solver"] = pl.study.get_nml("hydro_params/riemann").values()
|
||||||
|
df["slope"] = pl.study.get_nml("hydro_params/slope_type").values()
|
||||||
|
df["res"] = pl.study.get_nml("amr_params/levelmin").values()
|
||||||
|
df["frms"] = pl.study.get_nml("turb_params/turb_rms").values()
|
||||||
|
df["seed"] = pl.study.get_nml("turb_params/turb_seed").values()
|
||||||
|
|
||||||
|
df["comp"] = pl.study.get_nml("turb_params/comp_frac").values()
|
||||||
|
df["L"] = pl.study.get_nml("amr_params/boxlen").values()
|
||||||
|
|
||||||
|
df["T_turb"] = (np.array(list(pl.study.get_nml("turb_params/turb_T").values()))
|
||||||
|
* pl.study.info["unit_time"].express(U.Myr))
|
||||||
|
df = pd.DataFrame(df, index=pl.runs)
|
||||||
|
|
||||||
|
if redo:
|
||||||
|
pl.study.avg_time_sigma("x", overwrite_dep=False)
|
||||||
|
pl.study.avg_time_sigma("y", overwrite_dep=False)
|
||||||
|
pl.study.avg_time_sigma("z", overwrite_dep=False)
|
||||||
|
pl.study.time(overwrite=True)
|
||||||
|
|
||||||
|
for ax in ["x", "y", "z"]:
|
||||||
|
df[f"sigma_{ax}"] = np.array(list(map(
|
||||||
|
lambda x : x.T[0],
|
||||||
|
[pl.study.get_value(f"/series/time_sigma_{ax}",
|
||||||
|
unit=U.km_s)[run] for run in pl.runs])))
|
||||||
|
|
||||||
|
df["sigma_all"] = df[f"sigma_x"]**2 + df[f"sigma_y"]**2 + df[f"sigma_z"]**2
|
||||||
|
df["sigma_all"] = list(map(np.sqrt, df["sigma_all"].values))
|
||||||
|
df["Mach_all"] = list(map(lambda v: v/cs0, df["sigma_all"].values))
|
||||||
|
df["time"] = list(map(lambda x : x.T[0],
|
||||||
|
[pl.study.get_value(f"/series/time", unit=U.Myr)[run]
|
||||||
|
for run in pl.runs]))
|
||||||
|
|
||||||
|
df["sigma"] = list(map(lambda l: np.mean(l), df["sigma_all"].values))
|
||||||
|
df["Mach"] = df["sigma"] / cs0
|
||||||
|
df["turnover"] = (df["L"] * U.pc.express(U.km) / (2 * df["sigma"]))* U.s.express(U.Myr)
|
||||||
|
|
||||||
|
return df
|
||||||
|
|
||||||
|
|
||||||
|
def rho_pdf(pp):
|
||||||
|
pp.load_cells()
|
||||||
|
rho = pp.cells["rho"] * pp.info["unit_density"].express(U.H_cc)
|
||||||
|
rho_0 = np.mean(rho)
|
||||||
|
print(rho_0)
|
||||||
|
s = np.log(rho/rho_0)
|
||||||
|
values, edges = np.histogram(s, bins=300, range=(-15, 11),
|
||||||
|
density=True)
|
||||||
|
pp.unload_cells()
|
||||||
|
centers = 0.5 * (edges[1:] + edges[:-1])
|
||||||
|
return (np.stack([values, centers]), {"logbins": True})
|
||||||
|
|
||||||
|
rule_pdf=Rule(rho_pdf, "Density PDF", name="rho_pdf", group="/hist")
|
||||||
|
def apply_rule_pdf(pp):
|
||||||
|
return pp.process(rule_pdf, pp, overwrite=True)
|
||||||
@@ -33,7 +33,7 @@ def params_from_file(filename):
|
|||||||
|
|
||||||
|
|
||||||
def default_params():
|
def default_params():
|
||||||
return params_from_file(_dir_path + "/params.yml")
|
return params_from_file(_dir_path + "/../params.yml")
|
||||||
|
|
||||||
|
|
||||||
def load_params(filename):
|
def load_params(filename):
|
||||||
Reference in New Issue
Block a user