177 lines
4.9 KiB
Python
177 lines
4.9 KiB
Python
from plotter import Plotter, U
|
|
import numpy as np
|
|
from functools import partial
|
|
import os
|
|
import pandas as pd
|
|
import tables
|
|
from turbox import *
|
|
from ismfeed import get_sinks, compute_sfr
|
|
from scipy.stats import linregress
|
|
# from astropy.modeling import models, fitting
|
|
# from astropy.stats import gaussian_fwhm_to_sigma
|
|
# from models import Rabatin
|
|
|
|
|
|
## Power spectrum
|
|
|
|
def do_pspec(pp):
|
|
try:
|
|
return pp.pspec(magnetic=False)
|
|
except:
|
|
pp.logger.error("Failed to run pspec")
|
|
|
|
|
|
|
|
def do_all_pspec(pl):
|
|
|
|
pl.map(do_pspec)
|
|
pl.turbox["slope_pspec_logrho"] = np.zeros(len(pl.turbox))
|
|
pspec = {}
|
|
k_dict = {}
|
|
|
|
for run in pl.runs:
|
|
s = 0
|
|
all_pspec = []
|
|
sel_nums = pl.get_snap_list(select={"runs":run})
|
|
for pp in sel_nums:
|
|
logkmin, logkmax = span_resolution[256]
|
|
k, power = get_pspec(pp, "logrho")
|
|
logk = np.log10(k)
|
|
mask = (logk >= logkmin) & (logk < logkmax)
|
|
all_pspec.append(power)
|
|
|
|
all_pspec = np.array(all_pspec)
|
|
k_dict[run] = k
|
|
pspec[run] = np.sum(all_pspec, axis=0) / len(sel_nums)
|
|
results = linregress(logk[mask], np.log10(pspec[run][mask]))
|
|
pl.turbox["slope_pspec_logrho"].loc[run] = results.slope
|
|
pl.turbox["pspec_logrho"] = pspec.values()
|
|
pl.turbox["pspec_k"] = k_dict.values()
|
|
|
|
|
|
def do_all_pdf(pl):
|
|
pl.map(apply_rule_pdf)
|
|
pl.study.time_rho_pdf(overwrite=True, skip_dep=False)
|
|
pl.study.avg_time_rho_pdf(overwrite=True, skip_dep=True)
|
|
|
|
pdf_data = pl.study.get_value("/comp/avg_time_rho_pdf")["median"]
|
|
q16 = pl.study.get_value("/comp/avg_time_rho_pdf")["q16"]
|
|
q84 = pl.study.get_value("/comp/avg_time_rho_pdf")["q84"]
|
|
|
|
pl.turbox["pdf_logrho_x"] = list(pdf_data[:, 1])
|
|
pl.turbox["pdf_logrho_y"] = list(pdf_data[:, 0])
|
|
pl.turbox["pdf_logrho_ymin"] = list(q84[:, 0])
|
|
pl.turbox["pdf_logrho_ymax"] = list(q16[:, 0])
|
|
|
|
logrho_mean = {}
|
|
logrho_var = {}
|
|
for run in pl.runs:
|
|
logrho = pl.turbox["pdf_logrho_x"][run]
|
|
logrho_pdf = pl.turbox["pdf_logrho_y"][run]
|
|
dV = logrho_pdf * np.diff(logrho)[0]
|
|
logrho_mean[run] = np.sum(logrho * dV)
|
|
logrho_var[run] = np.sum((logrho - logrho_mean[run])**2 * dV)
|
|
|
|
pl.turbox["mean_logrho_V"] = list(logrho_mean.values())
|
|
pl.turbox["S_logrho_V"] = list(logrho_var.values())
|
|
|
|
|
|
def add_sfr(pl, pl_grav, dep=False):
|
|
|
|
if dep:
|
|
pl_grav.study.nml("turb_params/comp_frac",overwrite=True, overwrite_dep=True)
|
|
pl_grav.study.nml("turb_params/turb_rms", overwrite=True)
|
|
pl_grav.study.sinks_from_log()
|
|
pl_grav.study.coarse_step_from_log()
|
|
get_sinks(pl_grav.study, stellar=False, sk=False)
|
|
|
|
if dep or not hasattr(pl_grav.study, "sfr"):
|
|
sfr, sfr_err = compute_sfr(pl_grav.study, target_start=0.005, target_end=0.2)
|
|
else:
|
|
sfr, sfr_err = pl_grav.study.sfr, pl_grav.study.sfr_err
|
|
|
|
|
|
pl.turbox["sfr"] = np.zeros(len(pl.runs))
|
|
pl.turbox["sfr_err"] = np.zeros(len(pl.runs))
|
|
|
|
for i, run in enumerate(pl_grav.runs):
|
|
pl.turbox["sfr"][run] = sfr[i]
|
|
pl.turbox["sfr_err"][run] = sfr_err[i]
|
|
|
|
|
|
|
|
def do_pspec_pdf_sfr(pl, pl_grav, redo=False):
|
|
|
|
build_turbox_data(pl, redo=redo)
|
|
do_all_pspec(pl)
|
|
do_all_pdf(pl)
|
|
add_sfr(pl, pl_grav, dep=redo)
|
|
pl.turbox.to_csv(f"turbox_{pl.params.out.tag}.csv")
|
|
pl.turbox.to_pickle(f"turbox_{pl.params.out.tag}.pickle")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
in_dir_grav = os.path.expanduser("~nbrucy/simus/turbox/grav")
|
|
out_dir_grav = os.path.expanduser("~nbrucy/visus/turbox/grav")
|
|
|
|
in_dir_nograv = os.path.expanduser("~nbrucy/simus/turbox/nograv")
|
|
out_dir_nograv = os.path.expanduser("~nbrucy/visus/turbox/nograv")
|
|
|
|
cs0 = 0.28834810480560674
|
|
|
|
pl_nograv = Plotter(
|
|
in_dir_nograv,
|
|
path_out=out_dir_nograv,
|
|
unit_time="turb_params/turb_T",
|
|
#time=4,
|
|
time_min=2,
|
|
time_max=8,
|
|
tag="nograv",
|
|
filter_name="n1.5*",
|
|
params="turbox_params.yml",
|
|
)
|
|
|
|
|
|
pl_nograv_L200 = Plotter(
|
|
in_dir_nograv + '/L200',
|
|
path_out=out_dir_nograv + '/L200',
|
|
unit_time="turb_params/turb_T",
|
|
#time=4,
|
|
time_min=2,
|
|
time_max=8,
|
|
tag="nograv_L200",
|
|
filter_name="*comp0.5*",
|
|
params="turbox_params.yml",
|
|
)
|
|
|
|
|
|
pl_grav = Plotter(
|
|
in_dir_grav,
|
|
path_out=out_dir_grav,
|
|
unit_time="turb_params/turb_T",
|
|
time=2,
|
|
tag="grav",
|
|
filter_name="n1.5*",
|
|
params="turbox_params.yml",
|
|
)
|
|
|
|
|
|
pl_grav_L200 = Plotter(
|
|
in_dir_grav + '/L200',
|
|
path_out=out_dir_grav + '/L200',
|
|
unit_time="turb_params/turb_T",
|
|
time=2,
|
|
tag="grav_L200",
|
|
filter_name="*comp0.5*",
|
|
params="turbox_params.yml",
|
|
)
|
|
|
|
do_pspec_pdf_sfr(pl_nograv, pl_grav, False)
|
|
do_pspec_pdf_sfr(pl_nograv_L200, pl_grav_L200, False)
|
|
|
|
|
|
|
|
|
|
|