diff --git a/examples/GEAR/ZoomIn/halo_distribution.py b/examples/GEAR/ZoomIn/halo_distribution.py deleted file mode 100644 index 4824c20952cf1b602f784c11aca4fa6442798b81..0000000000000000000000000000000000000000 --- a/examples/GEAR/ZoomIn/halo_distribution.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env - -from yt.extensions.astro_analysis.halo_analysis.api import HaloCatalog -import matplotlib.pyplot as plt -import numpy as np - -Nbins = 20 - - -def savePlot(data): - plt.figure() - plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=0.5) - markers = ["s", "o"] - d_min = None - d_max = None - for d in data[0]: - if d_min is None or d.min() < d_min: - d_min = d.min() - if d_max is None or d.max() > d_max: - d_max = d.max() - - for i, d in enumerate(data[0]): - plt.hist(d, Nbins, histtype="step", log=True, range=[d_min, d_max]) - - plt.xlabel("$\mathrm{Mass\ \mathrm{(M_{\odot})}}$", fontsize='large') - plt.ylabel(r"$\mathrm{Number}\ o\mathrm{f}\ \mathrm{Halos}$", fontsize='large') - plt.legend(data[1], loc=4, frameon=True, ncol=2, fancybox=True) - leg = plt.gca().get_legend() - ltext = leg.get_texts() - plt.setp(ltext, fontsize='small') - plt.grid(True) - - plt.savefig("halo_distribution.png") - - -def doPlot(f, name, i): - hc = HaloCatalog(data_ds=f, finder_method="fof") - hc.create() - - masses = np.zeros(len(hc.catalog)) - for i, halo in enumerate(hc.catalog): - masses[i] = halo["particle_mass"].in_units("Msun") - - return masses diff --git a/examples/GEAR/ZoomIn/make_image.py b/examples/GEAR/ZoomIn/make_image.py index a87c523ba5ec35cab96aa2f227bf2ac02720442f..efee7dec18d54c7444d4abba54241fd3ee0536da 100644 --- a/examples/GEAR/ZoomIn/make_image.py +++ b/examples/GEAR/ZoomIn/make_image.py @@ -1,21 +1,13 @@ #!/usr/bin/env python3 import yt -import sys import projection_plot -import velocity_plot import phase_plot -import halo_distribution -import metal_plot import add_fields import star_plot -import profile_plot import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import AxesGrid from yt.units import kpc -import numpy as np - -# Parameters swift = "swift_final.hdf5" gear = "h050_final.hdf5" @@ -27,26 +19,14 @@ do_hydro = True do_stars = True do_feedback = True do_plot = { - # DMO - "projection_mass": do_dmo, - "velocity": do_dmo, - "halo_distribution": True, # very slow - "profile": do_dmo, # hydro "projection_density": do_hydro, "projection_temperature": do_hydro, - "phase_1d_density": do_hydro, - "phase_1d_temperature": do_hydro, "phase_2d": do_hydro, - "metals": do_hydro, # stars "SFR": do_stars, - "projection_mass_stars": do_stars, # feedback "abundances": do_feedback, - "projection_metals": do_feedback, - "iron_distribution": do_feedback, - "mass_distribution": do_feedback } # Generate the figures @@ -55,9 +35,6 @@ figsize = (100, 100) figures = { "projection_density": plt.figure(figsize=figsize), "projection_temperature": plt.figure(figsize=figsize), - "projection_metals": plt.figure(figsize=figsize), - "projection_mass": plt.figure(figsize=figsize), - "projection_mass_stars": plt.figure(figsize=figsize), "phase_2d": plt.figure(figsize=figsize) } @@ -77,37 +54,17 @@ axes = { figures["projection_temperature"], fig_size, subgrid, add_all=True, share_all=True, cbar_mode="single", cbar_size="2%", cbar_pad=0.02), - "projection_mass": AxesGrid( - figures["projection_mass"], fig_size, subgrid, - add_all=True, share_all=True, cbar_mode="single", - cbar_size="2%", cbar_pad=0.02), - "projection_mass_stars": AxesGrid( - figures["projection_mass_stars"], fig_size, subgrid, - add_all=True, share_all=True, cbar_mode="single", - cbar_size="2%", cbar_pad=0.02), "phase_2d": AxesGrid( figures["phase_2d"], fig_size, subgrid, axes_pad=0.05, add_all=True, share_all=True, cbar_mode="single", cbar_size="2%", cbar_pad=0.05, aspect=False), - "projection_metals": AxesGrid( - figures["projection_metals"], fig_size, subgrid, - add_all=True, share_all=True, cbar_mode="single", - cbar_size="2%", cbar_pad=0.02), } # Data data = { - "phase_1d_density": ([], []), - "phase_1d_temperature": ([], []), - "halo_distribution": ([], []), - "velocity": ([], []), - "metals": ([], []), "SFR": ([], []), - "profile": ([], []), "abundances": ([], []), - "iron_distribution": ([], []), - "mass_distribution": ([], []), } names = [] @@ -121,62 +78,17 @@ def savePlot(): projection_plot.savePlot(figures["projection_temperature"], "temperature") - if do_plot["projection_metals"]: - projection_plot.savePlot(figures["projection_metals"], - "metals") - - if do_plot["projection_mass"]: - projection_plot.savePlot(figures["projection_mass"], - "mass") - - if do_plot["projection_mass_stars"]: - projection_plot.savePlot(figures["projection_mass_stars"], - "mass_stars") - - if do_plot["phase_1d_density"]: - data["phase_1d_density"][1].extend(names) - phase_plot.save1DPlotDensity(data["phase_1d_density"]) - - if do_plot["phase_1d_temperature"]: - data["phase_1d_temperature"][1].extend(names) - phase_plot.save1DPlotTemperature(data["phase_1d_temperature"]) - if do_plot["phase_2d"]: phase_plot.save2DPlot(figures["phase_2d"]) - # halo distribution - if do_plot["halo_distribution"]: - data["halo_distribution"][1].extend(names) - halo_distribution.savePlot(data["halo_distribution"]) - - if do_plot["velocity"]: - data["velocity"][1].extend(names) - velocity_plot.save1DPlot(data["velocity"]) - - if do_plot["metals"]: - data["metals"][1].extend(names) - metal_plot.save1DPlot(data["metals"]) - if do_plot["SFR"]: data["SFR"][1].extend(names) star_plot.saveSFRPlot(data["SFR"]) - if do_plot["profile"]: - data["profile"][1].extend(names) - profile_plot.savePlot(data["profile"]) - if do_plot["abundances"]: data["abundances"][1].extend(names) star_plot.saveAbundancesPlot(data["abundances"]) - if do_plot["iron_distribution"]: - data["iron_distribution"][1].extend(names) - star_plot.saveIronDistributionPlot(data["iron_distribution"]) - - if do_plot["mass_distribution"]: - data["mass_distribution"][1].extend(names) - star_plot.saveMassDistributionPlot(data["mass_distribution"]) - def doPlot(filename, i, name, center): names.append(name) @@ -215,72 +127,19 @@ def doPlot(filename, i, name, center): f, name, i, figures["projection_temperature"], axes["projection_temperature"]) - if do_plot["projection_metals"]: - projection_plot.doMetalsPlot( - f, name, i, figures["projection_metals"], - axes["projection_metals"]) - - # Do mass projection plot - if do_plot["projection_mass"]: - projection_plot.doMassPlot( - f, name, i, figures["projection_mass"], - axes["projection_mass"], "all") - - # Do stellar mass projection plot - if do_plot["projection_mass_stars"]: - projection_plot.doMassPlot( - f, name, i, figures["projection_mass_stars"], - axes["projection_mass_stars"], "stars") - - # 1D Phase plot - if do_plot["phase_1d_density"]: - p = phase_plot.do1DPlotDensity(f, name, i) - data["phase_1d_density"][0].append(p) - - if do_plot["phase_1d_temperature"]: - p = phase_plot.do1DPlotTemperature(f, name, i) - data["phase_1d_temperature"][0].append(p) - # 2D Phase plot if do_plot["phase_2d"]: phase_plot.do2DPlot(f, name, i, figures["phase_2d"], axes["phase_2d"]) - # halo distribution - if do_plot["halo_distribution"]: - m = halo_distribution.doPlot(f, name, i) - data["halo_distribution"][0].append(m) - - # Velocity plot - if do_plot["velocity"]: - p = velocity_plot.do1DPlot(f, name, i) - data["velocity"][0].append(p) - - # metal plot - if do_plot["metals"]: - p = metal_plot.do1DPlot(f, name, i) - data["metals"][0].append(p) - if do_plot["SFR"]: p = star_plot.doSFRPlot(f, name, i) data["SFR"][0].append(p) - if do_plot["profile"]: - p = profile_plot.doPlot(f, name, i) - data["profile"][0].append(p) - if do_plot["abundances"]: p = star_plot.doAbundancesPlot(f, name, i) data["abundances"][0].append(p) - if do_plot["iron_distribution"]: - p = star_plot.doIronDistributionPlot(f, name, i) - data["iron_distribution"][0].append(p) - - if do_plot["mass_distribution"]: - p = star_plot.doMassDistributionPlot(f, name, i) - data["mass_distribution"][0].append(p) - return center diff --git a/examples/GEAR/ZoomIn/metal_plot.py b/examples/GEAR/ZoomIn/metal_plot.py deleted file mode 100644 index 467bef8af8254f658ebb92c6e4188b840034bd9e..0000000000000000000000000000000000000000 --- a/examples/GEAR/ZoomIn/metal_plot.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python3 - -import yt -import matplotlib.pyplot as plt - - -def save1DPlot(profiles): - plt.figure(figsize=(8, 8)) - plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=0.5) - markers = ["s", "o"] - for i, p in enumerate(profiles[0]): - z = p.x.in_units("") - m = p["Masses"].in_units("Msun").d - plt.plot(z, m, linestyle="-", marker=markers[i], - markeredgecolor='none', linewidth=1.2, alpha=0.8) - plt.semilogx() - plt.semilogy() - - plt.xlabel(r"Metal fraction", fontsize='large') - plt.ylabel("$\mathrm{Mass\ (Msun)}$", fontsize='large') - plt.legend(profiles[1], loc=4, frameon=True, ncol=2, fancybox=True) - leg = plt.gca().get_legend() - ltext = leg.get_texts() - plt.setp(ltext, fontsize='small') - plt.grid(True) - - plt.savefig("metals.png", bbox_inches='tight', pad_inches=0.03, dpi=300) - - -def do1DPlot(f, name, i): - sp = f.sphere(f.center, f.width) - # Because ParticleProfilePlot doesn't exist, I will do the following trick. - p = yt.create_profile(sp, ("PartType0", "Metallicity"), - ("PartType0", "Masses"), - weight_field=None, n_bins=50, - accumulation=False) - - return p diff --git a/examples/GEAR/ZoomIn/phase_plot.py b/examples/GEAR/ZoomIn/phase_plot.py index c6c6e1d1a3765837e520de5c855e028bd47987e9..83fdc973669e87ec2f8534daff981cd9716a1b3d 100644 --- a/examples/GEAR/ZoomIn/phase_plot.py +++ b/examples/GEAR/ZoomIn/phase_plot.py @@ -17,56 +17,6 @@ def save2DPlot(fig): pad_inches=0.03, dpi=300) -def save1DPlotDensity(profiles): - plt.figure(figsize=(8, 8)) - plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=0.5) - markers = ["s", "o"] - for i, p in enumerate(profiles[0]): - rho = p.x.in_units("g/cm**3").d - mass = p["Masses"].in_units("Msun").d - mass[mass == 0] = np.nan - plt.plot(rho, mass, linestyle="-", marker=markers[i], - markeredgecolor='none', linewidth=1.2, alpha=0.8) - plt.semilogx() - plt.semilogy() - - plt.xlabel("$\mathrm{Density\ (g/cm^3)}$", fontsize='large') - plt.ylabel(r"$\mathrm{Mass}\/\mathrm{(M_{\odot})}$", fontsize='large') - plt.legend(profiles[1], loc=4, frameon=True, ncol=2, fancybox=True) - leg = plt.gca().get_legend() - ltext = leg.get_texts() - plt.setp(ltext, fontsize='small') - plt.grid(True) - - plt.savefig("phase_1d_density.png", bbox_inches='tight', - pad_inches=0.03, dpi=300) - - -def save1DPlotTemperature(profiles): - plt.figure(figsize=(8, 8)) - plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=0.5) - markers = ["s", "o"] - for i, p in enumerate(profiles[0]): - rho = p.x.in_units("K").d - mass = p["Masses"].in_units("Msun").d - mass[mass == 0] = np.nan - plt.plot(rho, mass, linestyle="-", marker=markers[i], - markeredgecolor='none', linewidth=1.2, alpha=0.8) - plt.semilogx() - plt.semilogy() - - plt.xlabel("$\mathrm{Temperature\ K}$", fontsize='large') - plt.ylabel(r"$\mathrm{Mass}\/\mathrm{(M_{\odot})}$", fontsize='large') - plt.legend(profiles[1], loc=4, frameon=True, ncol=2, fancybox=True) - leg = plt.gca().get_legend() - ltext = leg.get_texts() - plt.setp(ltext, fontsize='small') - plt.grid(True) - - plt.savefig("phase_1d_temperature.png", bbox_inches='tight', - pad_inches=0.03, dpi=300) - - def do2DPlot(f, name, i, fig, axes): p = yt.PhasePlot( f, ("PartType0", "density"), ("PartType0", "Temperature"), @@ -118,22 +68,3 @@ def do2DPlot(f, name, i, fig, axes): line = ln.Line2D(x_ticks, [y]*N, linestyle=":", linewidth=0.6, color="k", alpha=0.7) plot.axes.add_line(line) - - -def do1DPlotDensity(f, name, i): - sp = f.sphere(f.center, f.width) - # Because ParticleProfilePlot doesn't exist, I will do the following trick. - p = yt.create_profile(sp, ("PartType0", "density"), - ("PartType0", "Masses"), weight_field=None, - n_bins=40, accumulation=False) - return p - - -def do1DPlotTemperature(f, name, i): - sp = f.sphere(f.center, f.width) - # Because ParticleProfilePlot doesn't exist, I will do the following trick. - p = yt.create_profile(sp, ("PartType0", "Temperature"), - ("PartType0", "Masses"), weight_field=None, - n_bins=40, accumulation=False) - - return p diff --git a/examples/GEAR/ZoomIn/profile_plot.py b/examples/GEAR/ZoomIn/profile_plot.py deleted file mode 100644 index dcabf608d1e60fc9a59bae494b4db14a26e3956d..0000000000000000000000000000000000000000 --- a/examples/GEAR/ZoomIn/profile_plot.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 - -import yt -from yt.units import Msun, kpc -import matplotlib.pyplot as plt - -limits_mass = (1e3 * Msun, 1e7 * Msun) - - -def savePlot(profiles): - plt.figure(figsize=(8, 8)) - plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=0.5) - markers = ["s", "o"] - for i, p in enumerate(profiles[0]): - r = p.x.in_units("pc").d - mass = p["Masses"].in_units("Msun").d - plt.plot(r, mass, linestyle="-", marker=markers[i], - markeredgecolor='none', linewidth=1.2, alpha=0.8) - plt.semilogx() - plt.semilogy() - - plt.xlabel(r"$\mathrm{Radius}\/\mathrm{(pc)}$", fontsize='large') - plt.ylabel("$\mathrm{Integrated}\ \mathrm{mass}\ (Msun)}$", - fontsize='large') - plt.legend(profiles[1], loc=4, frameon=True, ncol=2, fancybox=True) - leg = plt.gca().get_legend() - ltext = leg.get_texts() - plt.setp(ltext, fontsize='small') - plt.grid(True) - - plt.savefig("integrated_mass.png", bbox_inches='tight', - pad_inches=0.03, dpi=300) - - -def doPlot(f, name, i): - sp = f.sphere(f.center, f.width) - # Because ParticleProfilePlot doesn't exist, I will do the following trick. - p = yt.create_profile(sp, "particle_radius", "Masses", - weight_field=None, n_bins=50, - accumulation=True) - - return p diff --git a/examples/GEAR/ZoomIn/projection_plot.py b/examples/GEAR/ZoomIn/projection_plot.py index f77da7057b65b0ec7fecf2f0066a6eac77c3f720..d50e31b1421927145c13edaf77800117cfcc69d1 100644 --- a/examples/GEAR/ZoomIn/projection_plot.py +++ b/examples/GEAR/ZoomIn/projection_plot.py @@ -176,162 +176,3 @@ def doTemperaturePlot(f, name, i, fig, axes): # Add code name at = AnchoredText(name, loc=2, prop=dict(size=6), frameon=True) plot.axes.add_artist(at) - - -def doMassPlot(f, name, i, fig, axes, parttype): - """ - Generate a mass projection (including dark matter) plot. - - Parameters - ---------- - - f: yt dataset - The data set to use in the projection - - name: str - The name to print on the plot - - i: int - The index of the plot - - fig: matplotlib figure - The figure to use - - axes: list - The list of axes to use for the plot - - parttype: str - The name of the particle type to use - """ - if parttype == "stars": - if name == "GEAR": - parttype = "PartType1" - else: - parttype = "PartType4" - - direction = "x" - field = (parttype, "Masses") - - # compute the projection - p = yt.ParticleProjectionPlot(f, direction, field, center=f.center, - width=f.width) - - # # Compute the limits - p.set_unit("Masses", "Msun") - data = p.to_fits_data()["Masses"].data - global limits_mass - if limits_mass is None: - dmin = np.nanmin(data) - if np.nanmin(data) == 0: - dmin = 1e-6 * np.nanmax(data) - else: - dmin *= 0.5 - dmax = np.nanmax(data) * 2 - limits_mass = (dmin, dmax) - else: - if limits_mass[0] > np.nanmin(data): - print("WARNING: data below min", np.nanmin(data)) - if limits_mass[1] < np.nanmax(data): - print("WARNING: data above max", np.nanmax(data)) - - # Adjust the plot - p.set_cmap(field=field, cmap=cmap_mass) - # p.set_log(field, True) - p.set_zlim(field, limits_mass[0], limits_mass[1]) - - # Draw it into the correct figure - plot = p.plots[field] - - plot.figure = fig - plot.axes = axes[i].axes - - # Add code name - at = AnchoredText(name, loc=2, prop=dict(size=6), frameon=True) - plot.axes.add_artist(at) - - # plot color bar - if i != 0: - plot.cax = axes.cbar_axes[0] - p.hide_axes() - p._setup_plots() - - # Add code name - at = AnchoredText(name, loc=2, prop=dict(size=6), frameon=True) - plot.axes.add_artist(at) - - -def doMetalsPlot(f, name, i, fig, axes): - """ - Generate a metal projection plot. - - Parameters - ---------- - - f: yt dataset - The data set to use in the projection - - name: str - The name to print on the plot - - i: int - The index of the plot - - fig: matplotlib figure - The figure to use - - axes: list - The list of axes to use for the plot - """ - direction = "x" - field = ("PartType0", "Metallicity") - - # compute the projection - p = yt.ProjectionPlot(f, direction, field, center=f.center, - width=f.width, buff_size=(800, 800), - weight_field=("PartType0", "Density")) - - # Compute the limits - # p.set_unit("metallicity", "g / cm**2") - data = p.to_fits_data()["Metallicity"].data - global limits_metals - if limits_metals is None: - limits_metals = (data.min(), data.max()) - if limits_metals[0] > data.min(): - print("WARNING: data below min", data.min()) - if limits_metals[1] < data.max(): - print("WARNING: data above max", data.max()) - - # Adjust the plot - p.set_cmap(field=field, cmap=cmap_metals) - p.set_log(field, True) - if limits_metals[0] != limits_metals[1]: - p.set_zlim(field, limits_metals[0], limits_metals[1]) - - # Draw it into the correct figure - plot = p.plots[field] - - plot.figure = fig - plot.axes = axes[i].axes - - # Add code name - at = AnchoredText(name, loc=2, prop=dict(size=6), frameon=True) - plot.axes.add_artist(at) - - # plot color bar - if i != 0: - plot.cax = axes.cbar_axes[0] - p.hide_axes() - p._setup_plots() - - if i == 0: - z = 1. / f.scale_factor - 1. - text = "Redshift = %.2g" % z - prop = { - "color": "w" - } - at = AnchoredText(text, loc=3, prop=prop, frameon=False) - plot.axes.add_artist(at) - - # Add code name - at = AnchoredText(name, loc=2, prop=dict(size=6), frameon=True) - plot.axes.add_artist(at) diff --git a/examples/GEAR/ZoomIn/star_plot.py b/examples/GEAR/ZoomIn/star_plot.py index a171642f759f4a7fa8634d651e5bd9b79f1ac5a3..855784bfa929126a368b23663e3d305c04001c4a 100644 --- a/examples/GEAR/ZoomIn/star_plot.py +++ b/examples/GEAR/ZoomIn/star_plot.py @@ -144,134 +144,3 @@ def doAbundancesPlot(f, name, i): fe = getElement(f, sp, name, "Fe") return mg, fe - - -def saveIronDistributionPlot(profiles): - plt.figure(figsize=(8, 8)) - plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=0.5) - - fe_max = max(p.max() for p in profiles[0]) - fe_min = min(p.min() for p in profiles[0]) - fe_min = np.log10((fe_min + 1e-10) / fe_sol_abund) - fe_max = np.log10(fe_max / fe_sol_abund) - - for i, p in enumerate(profiles[0]): - fe = np.log10(p / fe_sol_abund) - - plt.hist(fe, bins=20, range=[fe_min, fe_max], histtype="step", - density=True, alpha=0.8) - - plt.xlabel('[Fe / H]') - plt.ylabel("Fraction of stars") - plt.legend(profiles[1]) - plt.savefig("iron_distribution.png") - - -def doIronDistributionPlot(f, name, i): - sp = f.sphere(f.center, f.width) - # Because ParticleProfilePlot doesn't exist, I will do the following trick. - fe = getElement(f, sp, name, "Fe") - return fe - - -def saveMassDistributionPlot(profiles): - # Do the time - stars - plt.figure(figsize=(8, 8)) - plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=0.5) - markers = ["s", "o"] - zorder = [2.5, 2.] - - for i, p in enumerate(profiles[0]): - plt.plot(p["birth_time"], p["stars"], marker=markers[i], - markeredgecolor="none", linestyle="", alpha=0.8, - zorder=zorder[i]) - plt.semilogx() - plt.semilogy() - - plt.xlabel("Star formation time (Gyr)", fontsize='large') - plt.ylabel("Mass of the star $(M_{\odot})$", fontsize='large') - plt.legend(profiles[1], frameon=True, ncol=2, fancybox=True) - leg = plt.gca().get_legend() - ltext = leg.get_texts() - plt.setp(ltext, fontsize='small') - plt.grid(True) - - plt.savefig("mass_lost_stars.png", bbox_inches='tight', - pad_inches=0.03, dpi=300) - - # Do the stars - plt.figure(figsize=(8, 8)) - plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=0.5) - - mass_max = max(p["stars"].max() for p in profiles[0]) - mass_min = min(p["stars"].min() for p in profiles[0]) - - for i, mass in enumerate(profiles[0]): - plt.hist(mass["stars"], bins=100, range=[mass_min, mass_max], - histtype="step", density=True, alpha=0.8) - plt.semilogx() - plt.semilogy() - - plt.xlabel("Mass of the stars $(M_{\odot})$", fontsize='large') - plt.ylabel("Fraction of stars", fontsize='large') - plt.legend(profiles[1], frameon=True, ncol=2, fancybox=True) - leg = plt.gca().get_legend() - ltext = leg.get_texts() - plt.setp(ltext, fontsize='small') - plt.grid(True) - - plt.savefig("mass_distribution_stars.png", bbox_inches='tight', - pad_inches=0.03, dpi=300) - - # Do the gas - plt.figure(figsize=(8, 8)) - plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=0.5) - - mass_max = max(p["gas"].max() for p in profiles[0]) - mass_min = min(p["gas"].min() for p in profiles[0]) - - for i, mass in enumerate(profiles[0]): - plt.hist(mass["gas"], bins=100, range=[mass_min, mass_max], - histtype="step", density=True, alpha=0.8) - plt.semilogx() - plt.semilogy() - - plt.xlabel("Mass of the gas $(M_{\odot})$", fontsize='large') - plt.ylabel("Fraction of gas", fontsize='large') - plt.legend(profiles[1], frameon=True, ncol=2, fancybox=True) - leg = plt.gca().get_legend() - ltext = leg.get_texts() - plt.setp(ltext, fontsize='small') - plt.grid(True) - - plt.savefig("mass_distribution_gas.png", bbox_inches='tight', - pad_inches=0.03, dpi=300) - - -def doMassDistributionPlot(f, name, i): - sp = f.sphere(f.center, f.width) - - gas = sp[("PartType0", "Masses")].in_units("Msun").d - - if name == "GEAR": - stars = sp[("PartType1", "Masses")].in_units("Msun").d - a = sp["PartType1", "StarFormationTime"] - else: - stars = sp[("PartType4", "Masses")].in_units("Msun").d - a = sp["PartType4", "BirthScaleFactors"] - - cosmo = Cosmology(hubble_constant=f.hubble_constant, - omega_matter=f.omega_matter, - omega_lambda=f.omega_lambda) - z = np.array(1. / a - 1.) - with Pool() as p: - formation_time = p.map( - partial(cosmo.lookback_time, z_f=1e6), z) - formation_time = f.arr(list(formation_time), "s").in_units("Gyr") - - d = { - "gas": gas, - "stars": stars, - "birth_time": formation_time - } - return d diff --git a/examples/GEAR/ZoomIn/velocity_plot.py b/examples/GEAR/ZoomIn/velocity_plot.py deleted file mode 100644 index 5e1f5cf0fd8e3ccb22cd9e5999a83c75c5f878f6..0000000000000000000000000000000000000000 --- a/examples/GEAR/ZoomIn/velocity_plot.py +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env python3 - -import yt -import matplotlib.pyplot as plt - -DMO = True - - -def save1DPlot(profiles): - plt.figure(figsize=(8, 8)) - plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=0.5) - markers = ["s", "o"] - for i, p in enumerate(profiles[0]): - velocity = p.x.in_units("km/s").d - mass = p["Masses"].in_units("Msun").d - plt.plot(velocity, mass, linestyle="-", marker=markers[i], - markeredgecolor='none', linewidth=1.2, alpha=0.8) - plt.semilogx() - plt.semilogy() - - plt.xlabel("$\mathrm{Velocity\ (km/s)}$", fontsize='large') - if DMO: - plt.ylabel(r"$\mathrm{Mass}\/\mathrm{all}\/\mathrm{(M_{\odot})}$", - fontsize='large') - else: - plt.ylabel(r"$\mathrm{Mass}\/\mathrm{Gas}\/\mathrm{(M_{\odot})}$", - fontsize='large') - plt.legend(profiles[1], loc=4, frameon=True, ncol=2, fancybox=True) - leg = plt.gca().get_legend() - ltext = leg.get_texts() - plt.setp(ltext, fontsize='small') - plt.grid(True) - - plt.savefig("velocity.png", bbox_inches='tight', pad_inches=0.03, dpi=300) - - -def do1DPlot(f, name, i): - global DMO - part_type = "all" - if f.particle_type_counts["PartType0"] != 0: - DMO = False - part_type = "PartType0" - - sp = f.sphere("c", f.width) - - # Because ParticleProfilePlot doesn't exist, I will do the following trick. - p = yt.create_profile(sp, (part_type, "particle_velocity_magnitude"), - (part_type, "Masses"), - weight_field=None, n_bins=50, - accumulation=False) - - return p