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)