From 49e5fff86f84e0a181822a53df2dece4a1c9ce88 Mon Sep 17 00:00:00 2001
From: loikki <loic.hausammann@protonmail.ch>
Date: Wed, 15 Apr 2020 09:08:35 +0200
Subject: [PATCH] ZoomIn: remove plot script

---
 examples/GEAR/ZoomIn/add_fields.py      |  89 ------------
 examples/GEAR/ZoomIn/cleanupSwift.py    |  71 ----------
 examples/GEAR/ZoomIn/make_image.py      | 151 --------------------
 examples/GEAR/ZoomIn/phase_plot.py      |  70 ----------
 examples/GEAR/ZoomIn/projection_plot.py | 178 ------------------------
 examples/GEAR/ZoomIn/star_plot.py       | 146 -------------------
 6 files changed, 705 deletions(-)
 delete mode 100644 examples/GEAR/ZoomIn/add_fields.py
 delete mode 100644 examples/GEAR/ZoomIn/cleanupSwift.py
 delete mode 100644 examples/GEAR/ZoomIn/make_image.py
 delete mode 100644 examples/GEAR/ZoomIn/phase_plot.py
 delete mode 100644 examples/GEAR/ZoomIn/projection_plot.py
 delete mode 100644 examples/GEAR/ZoomIn/star_plot.py

diff --git a/examples/GEAR/ZoomIn/add_fields.py b/examples/GEAR/ZoomIn/add_fields.py
deleted file mode 100644
index c95a9995c0..0000000000
--- a/examples/GEAR/ZoomIn/add_fields.py
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/env python3
-
-import numpy as np
-import yt.utilities.physical_constants as constants
-from yt.mods import YTArray
-
-
-def addMassDeposit(f):
-    f.add_deposited_particle_field(("all", "Masses"), "sum")
-
-
-def addTemperature(f):
-    """
-    Add the temperature field.
-
-    Parameters
-    ----------
-
-    f: yt dataset
-        The dataset that needs the temperature
-    """
-
-    def calc_mu_table_local(temperature):
-        """
-        From grackle/src/python/utilities/convenience.py: Calculate a tabulated
-        approximation to mean molecular weight (valid for data that used
-        Grackle 2.0 or below)
-        """
-        tt = np.array([1.0e+01, 1.0e+02, 1.0e+03, 1.0e+04, 1.3e+04, 2.1e+04,
-                       3.4e+04, 6.3e+04, 1.0e+05, 1.0e+09])
-        mt = np.array([1.18701555, 1.15484424, 1.09603514, 0.9981496,
-                       0.96346395, 0.65175895, 0.6142901, 0.6056833, 0.5897776,
-                       0.58822635])
-        logttt = np.log(temperature)
-        # linear interpolation in log-log space
-        logmu = np.interp(logttt, np.log(tt), np.log(mt))
-        return np.exp(logmu)
-
-    temperature_values = []
-    mu_values = []
-    T_over_mu_values = []
-    current_temperature = 1e1
-    final_temperature = 1e7
-    dlogT = 0.1
-
-    while current_temperature < final_temperature:
-        temperature_values.append(current_temperature)
-        current_mu = calc_mu_table_local(current_temperature)
-        mu_values.append(current_mu)
-        T_over_mu_values.append(current_temperature/current_mu)
-        current_temperature = np.exp(np.log(current_temperature)+dlogT)
-
-    def convert_T_over_mu_to_T(T_over_mu):
-        logT_over_mu = np.log(T_over_mu)
-        # linear interpolation in log-log space
-        logT = np.interp(logT_over_mu, np.log(T_over_mu_values),
-                         np.log(temperature_values))
-        return np.exp(logT)
-
-    def _Temperature_3(field, data):
-        gamma = 5.0/3.0
-        T_over_mu = (data["PartType0", "InternalEnergy"] * (gamma-1)
-                     * constants.mass_hydrogen_cgs /
-                     constants.boltzmann_constant_cgs).in_units('K').d  # T/mu
-        return YTArray(convert_T_over_mu_to_T(T_over_mu), 'K')  # now T
-    f.add_field(("PartType0", "Temperature"), function=_Temperature_3,
-                particle_type=True, force_override=True, units="K")
-
-
-def addMetals(f):
-    def _metallicity(field, data):
-        if len(data["PartType0", "Metals"].shape) == 1:
-            return data["PartType0", "Metals"]
-        else:
-            # in_units("") turned out to be crucial!;
-            # otherwise code_metallicity will be used
-            return data["PartType0", "Metals"][:, -1].in_units("")
-
-    # We are creating ("Gas", "Metallicity") here, different from
-    # ("Gas", "metallicity") which is auto-generated by yt
-    # but doesn't work properly
-    f.add_field(("PartType0", "Metallicity"), function=_metallicity,
-                display_name="Metal mass fraction", particle_type=True,
-                take_log=True, units="")
-
-    def _density_squared(field, data):
-        return data[("PartType0", "density")]**2
-    f.add_field(("PartType0", "density_squared"), function=_density_squared,
-                particle_type=True, units="g**2/cm**6")
diff --git a/examples/GEAR/ZoomIn/cleanupSwift.py b/examples/GEAR/ZoomIn/cleanupSwift.py
deleted file mode 100644
index 99618b19a8..0000000000
--- a/examples/GEAR/ZoomIn/cleanupSwift.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env python3
-
-# ./translate_particles.py filename output_name
-from h5py import File
-import sys
-from shutil import copyfile
-
-NPartType = 6
-filename = sys.argv[-2]
-out = sys.argv[-1]
-
-copyfile(filename, out)
-
-f = File(out, "a")
-
-# read cosmological parameters
-a = f["Cosmology"].attrs["Scale-factor"][0]
-h = f["Cosmology"].attrs["h"][0]
-
-# add little h in the boxsize
-f["Header"].attrs["BoxSize"] = f["Header"].attrs["BoxSize"][0] * h
-
-# avoid the snapshot to be taken for SWIFT
-del f["Header"].attrs["Code"]
-
-# Update the fields (name + cosmo)
-for i in range(NPartType):
-    name = "PartType%i" % i
-    if name not in f:
-        continue
-
-    if "SmoothingLengths" in f[name]:
-        grp = f[name + "/SmoothingLengths"]
-        grp[:] *= 1.823
-
-    # fix issue due to the name of densities
-    fields = [
-        ("Coordinates", "Coordinates", h),
-        ("Masses", "Masses", h),
-        ("InitialMass", "BirthMasses", h),
-        ("StarInitMass", "BirthMasses", h),
-        ("Velocities", "Velocities", 1. / a**0.5),
-        ("Density", "Densities", 1. / h**2),
-        ("Entropies", "Entropies", 1.),
-        ("InternalEnergy", "InternalEnergies", 1. / a**2),
-        ("SmoothingLength", "SmoothingLengths", h),
-        ("Metals", "SmoothedElementAbundances", 1.)
-    ]
-
-    # create links
-    for field in fields:
-        if field[1] in f[name] and field[0] not in f[name]:
-            f[name + "/" + field[0]] = f[name + "/" + field[1]]
-
-    # apply unit transform
-    for field in fields:
-        field_name = name + "/" + field[0]
-        if field[0] in f[name]:
-            f[field_name][:] *= field[2]
-
-
-# update cosmological parameters in order to be consistent with GEAR
-cosmo = f["Cosmology"].attrs
-head = f["Header"].attrs
-head["Redshift"] = float(cosmo["Redshift"])
-head["OmegaLambda"] = cosmo["Omega_lambda"]
-head["Omega0"] = cosmo["Omega_m"]
-head["HubbleParam"] = cosmo["h"][0]
-head["Time"] = float(a)
-
-f.close()
diff --git a/examples/GEAR/ZoomIn/make_image.py b/examples/GEAR/ZoomIn/make_image.py
deleted file mode 100644
index efee7dec18..0000000000
--- a/examples/GEAR/ZoomIn/make_image.py
+++ /dev/null
@@ -1,151 +0,0 @@
-#!/usr/bin/env python3
-
-import yt
-import projection_plot
-import phase_plot
-import add_fields
-import star_plot
-import matplotlib.pyplot as plt
-from mpl_toolkits.axes_grid1 import AxesGrid
-from yt.units import kpc
-
-swift = "swift_final.hdf5"
-gear = "h050_final.hdf5"
-
-width = 50 * kpc
-
-do_dmo = True
-do_hydro = True
-do_stars = True
-do_feedback = True
-do_plot = {
-    # hydro
-    "projection_density": do_hydro,
-    "projection_temperature": do_hydro,
-    "phase_2d": do_hydro,
-    # stars
-    "SFR": do_stars,
-    # feedback
-    "abundances": do_feedback,
-}
-
-# Generate the figures
-
-figsize = (100, 100)
-figures = {
-    "projection_density": plt.figure(figsize=figsize),
-    "projection_temperature": plt.figure(figsize=figsize),
-    "phase_2d": plt.figure(figsize=figsize)
-}
-
-# define global variables
-scale_factor = None
-
-# Generate the axes
-
-fig_size = (0.01, 0.01, 0.99, 0.99)
-subgrid = (1, 2)
-axes = {
-    "projection_density": AxesGrid(
-        figures["projection_density"], fig_size, subgrid,
-        add_all=True, share_all=True, cbar_mode="single",
-        cbar_size="2%", cbar_pad=0.02),
-    "projection_temperature": AxesGrid(
-        figures["projection_temperature"], 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),
-}
-
-
-# Data
-data = {
-    "SFR": ([], []),
-    "abundances": ([], []),
-}
-
-names = []
-
-
-def savePlot():
-    if do_plot["projection_density"]:
-        projection_plot.savePlot(figures["projection_density"],
-                                 "density")
-    if do_plot["projection_temperature"]:
-        projection_plot.savePlot(figures["projection_temperature"],
-                                 "temperature")
-
-    if do_plot["phase_2d"]:
-        phase_plot.save2DPlot(figures["phase_2d"])
-
-    if do_plot["SFR"]:
-        data["SFR"][1].extend(names)
-        star_plot.saveSFRPlot(data["SFR"])
-
-    if do_plot["abundances"]:
-        data["abundances"][1].extend(names)
-        star_plot.saveAbundancesPlot(data["abundances"])
-
-
-def doPlot(filename, i, name, center):
-    names.append(name)
-
-    f = yt.load(filename)
-
-    if center is None:
-        center = f.find_max("Density")[1]
-
-    f.center = center
-    f.width = width * f.scale_factor
-
-    if (do_plot["projection_temperature"] or do_plot["phase_2d"]):
-        add_fields.addTemperature(f)
-    add_fields.addMassDeposit(f)
-
-    if (do_plot["projection_metals"] or do_plot["metals"]):
-        add_fields.addMetals(f)
-
-    global scale_factor
-    if scale_factor is None:
-        scale_factor = f.scale_factor
-    else:
-        if abs(scale_factor - f.scale_factor) > scale_factor * 1e-2:
-            raise Exception("Error: the snapshots are not at the same time")
-
-    # Do density projection plot
-    if do_plot["projection_density"]:
-        projection_plot.doDensityPlot(
-            f, name, i, figures["projection_density"],
-            axes["projection_density"])
-
-    # Do temperature projection plot
-    if do_plot["projection_temperature"]:
-        projection_plot.doTemperaturePlot(
-            f, name, i, figures["projection_temperature"],
-            axes["projection_temperature"])
-
-    # 2D Phase plot
-    if do_plot["phase_2d"]:
-        phase_plot.do2DPlot(f, name, i, figures["phase_2d"],
-                            axes["phase_2d"])
-
-    if do_plot["SFR"]:
-        p = star_plot.doSFRPlot(f, name, i)
-        data["SFR"][0].append(p)
-
-    if do_plot["abundances"]:
-        p = star_plot.doAbundancesPlot(f, name, i)
-        data["abundances"][0].append(p)
-
-    return center
-
-
-center = None
-# center = np.array([1724.33547783, 1802.56263082, 1785.09893269])
-center = doPlot(gear, 1, "GEAR", center=center)
-center = None
-doPlot(swift, 0, "SWIFT", center=center)
-savePlot()
diff --git a/examples/GEAR/ZoomIn/phase_plot.py b/examples/GEAR/ZoomIn/phase_plot.py
deleted file mode 100644
index 83fdc97366..0000000000
--- a/examples/GEAR/ZoomIn/phase_plot.py
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env python3
-
-import yt
-from yt.units import Msun, amu, cm, K, kpc
-from matplotlib.offsetbox import AnchoredText
-import matplotlib.pyplot as plt
-import matplotlib.lines as ln
-import numpy as np
-
-limits_temperature = (1e1 * K, 1e5 * K)
-limits_density = (1e-7 * amu / cm**3, 1e7 * amu / cm**3)
-limits_mass = (1e3 * Msun, 1e7 * Msun)
-
-
-def save2DPlot(fig):
-    fig.savefig("phase_2d.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"),
-        ("PartType0", "mass"),
-        weight_field=None, x_bins=300, y_bins=300)
-
-    plt.title("Scale Factor %g" % f.scale_factor)
-
-    # Set the unit system
-    p.set_log("density", True)
-    p.set_unit("density", "amu / cm**3")
-    p.set_xlim(limits_density[0],
-               limits_density[1])
-
-    p.set_log("Temperature", True)
-    p.set_unit("Temperature", "K")
-    p.set_ylim(limits_temperature[0],
-               limits_temperature[1])
-
-    p.set_log("mass", True)
-    p.set_unit("mass", "Msun")
-    p.set_zlim("mass", limits_mass[0],
-               limits_mass[1])
-
-    plot = p.plots[("PartType0", "mass")]
-
-    plot.figure = fig
-    plot.axes = axes[i].axes
-
-    # plot color bar
-    if i != 0:
-        plot.cax = axes.cbar_axes[0]
-        # p.hide_axes()
-    p._setup_plots()
-
-    at = AnchoredText(name, loc=2, prop=dict(size=6), frameon=True)
-    plot.axes.add_artist(at)
-
-    # Make a grid
-    x_ticks = plot.axes.get_xticks()
-    y_ticks = plot.axes.get_yticks()
-    for x in x_ticks:
-        N = len(y_ticks)
-        line = ln.Line2D([x]*N, y_ticks, linestyle=":", linewidth=0.6,
-                         color="k", alpha=0.7)
-        plot.axes.add_line(line)
-    for y in y_ticks:
-        N = len(x_ticks)
-        line = ln.Line2D(x_ticks, [y]*N, linestyle=":", linewidth=0.6,
-                         color="k", alpha=0.7)
-        plot.axes.add_line(line)
diff --git a/examples/GEAR/ZoomIn/projection_plot.py b/examples/GEAR/ZoomIn/projection_plot.py
deleted file mode 100644
index d50e31b142..0000000000
--- a/examples/GEAR/ZoomIn/projection_plot.py
+++ /dev/null
@@ -1,178 +0,0 @@
-#!/usr/bin/env python3
-
-import yt
-from yt.units import kpc, g, cm, K
-from matplotlib.offsetbox import AnchoredText
-import numpy as np
-
-cmap_density = "algae"
-cmap_temperature = "magma"
-cmap_mass = "inferno"
-cmap_metals = "coolwarm"
-limits_density = (1e-10 * g / cm**2, 1e2 * g / cm**2)
-limits_temperature = (10 * K, 1e5 * K)
-limits_metals = None
-limits_mass = None
-
-
-def savePlot(fig, field):
-    """
-    Save the plot into a file.
-
-    Parameters
-    ----------
-
-    fig: matplotlib figure
-        The figure to save
-
-    field: str
-        The name of the field in the plot
-    """
-    fig.savefig("projection_%s.png" % field, bbox_inches="tight",
-                pad_inches=0.03, dpi=300)
-
-
-def doDensityPlot(f, name, i, fig, axes):
-    """
-    Generate a density 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", "density")
-
-    # compute the projection
-    p = yt.ProjectionPlot(f, direction, field, center=f.center,
-                          width=f.width, buff_size=(800, 800))
-
-    # Compute the limits
-    p.set_unit("density", "g / cm**2")
-    data = p.to_fits_data()["density"].data
-    if limits_density[0] > data.min():
-        print("WARNING: data below min", data.min())
-    if limits_density[1] < data.max():
-        print("WARNING: data above max", data.max())
-
-    # Adjust the plot
-    p.set_cmap(field=field, cmap=cmap_density)
-    p.set_log(field, True)
-    p.set_zlim(field, limits_density[0], limits_density[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)
-
-
-def doTemperaturePlot(f, name, i, fig, axes):
-    """
-    Generate a temperature 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", "Temperature")
-    a = f.scale_factor
-
-    # compute the projection
-    p = yt.ProjectionPlot(f, direction, field, center=f.center,
-                          weight_field="density",
-                          width=f.width, buff_size=(800, 800))
-
-    # Compute the limits
-    p.set_unit("Temperature", "K")
-    data = p.to_fits_data()["Temperature"].data
-    if limits_temperature[0] > data.min():
-        print("WARNING: data below min", data.min())
-    if limits_temperature[1] < data.max():
-        print("WARNING: data above max", data.max())
-
-    # Adjust the plot
-    p.set_cmap(field=field, cmap=cmap_temperature)
-    p.set_log(field, True)
-    p.set_zlim(field, limits_temperature[0], limits_temperature[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
deleted file mode 100644
index 855784bfa9..0000000000
--- a/examples/GEAR/ZoomIn/star_plot.py
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/env python3
-
-import matplotlib.pyplot as plt
-import numpy as np
-from yt.units import Msun
-from yt.utilities.cosmology import Cosmology
-from multiprocessing import Pool
-from functools import partial
-from h5py import File
-
-fe_sol_abund = 1.76603e-3
-mg_sol_abund = 9.24316e-4
-
-
-def saveSFRPlot(profiles):
-    plt.figure(figsize=(8, 8))
-    plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=0.5)
-    markers = ["s", "o"]
-
-    sfr_fig = plt.figure()
-    mstar_fig = plt.figure()
-
-    # get the boundary
-    t_max = None
-    for p in profiles[0]:
-        if t_max is None:
-            t_max = p[1].max()
-        else:
-            tmp = p[1].max()
-            if t_max < tmp:
-                t_max = tmp
-    t_max = float(t_max)
-
-    for i, p in enumerate(profiles[0]):
-        masses = p[0]
-        form_time = p[1]
-        time_range = [0, t_max]
-        n_bins = 100
-        hist, bins = np.histogram(form_time, bins=n_bins, range=time_range)
-        inds = np.digitize(form_time, bins=bins)
-        time = (bins[:-1] + bins[1:])/2
-
-        sfr = np.array([masses[inds == j+1].sum()/(bins[j+1]-bins[j])
-                        for j in range(len(time))])
-        sfr[sfr == 0] = np.nan
-
-        sfr /= 1e9  # convert M / Gyr -> M / yr
-
-        plt.figure(sfr_fig.number)
-        plt.plot(time, sfr, linestyle="-", marker=markers[i],
-                 markeredgecolor="none", linewidth=1.2, alpha=0.8)
-
-        mstars = np.array([masses[inds == j+1].sum()
-                           for j in range(len(time))])
-        mstars = np.cumsum(mstars) / 1e6
-        plt.figure(mstar_fig.number)
-        plt.plot(time, mstars, linestyle="-",
-                 markeredgecolor="none", linewidth=1.2, alpha=0.8)
-
-    plt.figure(sfr_fig.number)
-    plt.xlabel('Time  [Gyr]')
-    plt.ylabel('SFR  [M$_\odot$ yr$^{-1}$]')
-    plt.legend(profiles[1])
-    plt.savefig("sfr.png")
-
-    plt.figure(mstar_fig.number)
-    plt.xlabel('Time  [Gyr]')
-    plt.ylabel('Stellar mass [$10^6$ M$_\odot$]')
-    plt.legend(profiles[1])
-    plt.savefig("mstars.png")
-
-
-def doSFRPlot(f, name, i):
-    sp = f.sphere(f.center, f.width)
-    if name == "GEAR":
-        masses = (sp["PartType1", "StarInitMass"] * 1e10 * Msun).in_units("Msun")
-        a = sp["PartType1", "StarFormationTime"]
-    else:
-        masses = (sp["PartType4", "StarInitMass"] * 1e10 * Msun).in_units("Msun")
-        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")
-
-    return masses, formation_time
-
-
-def saveAbundancesPlot(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]):
-        mg = np.log10(p[0] / mg_sol_abund)
-        fe = np.log10(p[1] / fe_sol_abund)
-
-        plt.plot(fe, mg - fe, linestyle="", marker=markers[i],
-                 markeredgecolor="none", alpha=0.8, markersize=3)
-
-    plt.xlabel('[Fe / H]')
-    plt.ylabel('[Mg / Fe]')
-    plt.legend(profiles[1])
-    plt.savefig("abundances.png")
-
-    plt.xlim([-4, 0.5])
-    plt.ylim([-1, 1.5])
-
-    plt.savefig("abundances_zoom.png")
-
-
-def getElement(f, sp, name, el):
-    if name == "GEAR":
-        metals = sp["PartType1", "StarMetals"]
-        h = File(f.filename_template, "r")
-        names = h["Header"].attrs["ChimieLabels"]
-        names = names.split(b",")
-        # remove garbage
-        names = names[:-2]
-        # bytes to unicode
-        names = [name.decode() for name in names]
-        h.close()
-    else:
-        metals = sp["PartType4", "ElementAbundances"]
-        h = File(f.filename_template, "r")
-        sub = h["SubgridScheme"].attrs
-        names = []
-        for i in range(metals.shape[1]):
-            name = sub["Element %i" % i].decode()
-            names.append(name)
-
-    ind = names.index(el)
-    return metals[:, ind]
-
-
-def doAbundancesPlot(f, name, i):
-    sp = f.sphere(f.center, f.width)
-
-    mg = getElement(f, sp, name, "Mg")
-    fe = getElement(f, sp, name, "Fe")
-
-    return mg, fe
-- 
GitLab