From 58f0f0d82fef63fc163c58b39810f58ba03a09ae Mon Sep 17 00:00:00 2001 From: "dc-bahe1@cosma.dur.ac.uk" Date: Mon, 14 Jun 2021 14:05:04 +0100 Subject: [PATCH 01/12] Small updates to crossref.py --- eagle-xl/scripts/crossref.py | 419 +++++++++++++++++++++++++++++++++++ 1 file changed, 419 insertions(+) create mode 100755 eagle-xl/scripts/crossref.py diff --git a/eagle-xl/scripts/crossref.py b/eagle-xl/scripts/crossref.py new file mode 100755 index 00000000..9c608e25 --- /dev/null +++ b/eagle-xl/scripts/crossref.py @@ -0,0 +1,419 @@ +"""Routines for matching indices between two data sets.""" + +import numpy as np +import os +import time +from velociraptor import load +import h5py as h5 + + +class ReverseList: + """Class for creating and querying a reverse-index list. + + This is essentially a thin wrapper around the `create_reverse_list()` + function, but avoids the need to artificially expand the list + to deal with possible out-of-bounds queries. It creates and queries + an array containing the index for each ID value, i.e. the inverse of + the input list (which gives the ID for each index). + + Warning + ------- + It is a bad idea to instantiate this class with a key set that contains + large values in relation to the available memory: as a rough guide, + consider the limit as 1/8 * [RAM/byte]. Ignoring this will result in + undefined, slow, and likely annoying behaviour. + + Parameters + ---------- + ids : ndarray (int) + Input keys (IDs) to invert. These are assumed to be unique; + death and destruction may happen if this is not the case. + The array must be one-dimensional. Any negative values are + assumed to be dummy elements and are ignored. + delete_ids : bool, optional + Delete input keys after building reverse list (default: ``False``). + assume_positive : bool, optional + Assume that all the input values are non-negative, which speeds + up the inversion. If ``False`` (default), the code checks + explicitly which input values are non-negative and only + transcribes these to the reverse list. + compact : bool, optional + Make the reverse-index list shorter by (transparently) subtracting + the minimum ID from inputs (default: ``False``). + + Attributes + ---------- + reverse_IDs : ndarray(int) + The reverse-index array, created upon instantiation. + num_int : int + The number of keys in the input array. + """ + + def __init__(self, ids, delete_ids=False, assume_positive=False, + compact=False): + self.num_int = len(ids) + + # Find and subtract minimum (positive) value from input keys + if compact: + if assume_positive: + self.min_key = np.min(ids) + else: + ind_positive = np.nonzero(ids >= 0)[0] + self.min_key = np.min(ids[ind_positive]) + self.reverse_IDs = create_reverse_list( + ids - self.min_key, delete_ids=delete_ids, + assume_positive=assume_positive) + else: + # Invert unmodified keys + self.min_key = None + self.reverse_IDs = create_reverse_list( + ids, delete_ids=delete_ids, assume_positive=assume_positive) + + def query(self, ids, assume_valid=False): + """Find the indices of the input (external) IDs. + + Parameters + ---------- + ids : ndarray(int) + The IDs whose indices in the internal list (used to set up the + reverse list) should be determined. Out-of-bound situations are + dealt with internally. + assume_valid : bool, optional + Assume that all input IDs are within the range of the internal + reverse-index list, so that out-of-bound check can be skipped + (default: ``False``). + + Returns + ------- + indices : ndarray(int) + The indices corresponding to each input ID (-1 if not found). + + Note + ---- + This is also the object's call method, so it can be used + directly without specifying `query`. + + Example + ------- + >>> import numpy as np + >>> ids = np.array([4, 0, 5, 1]) + >>> reverse_ids = ReverseList(ids) + >>> reverse_ids(np.array([3, 4])) + array([-1, 0]) + """ + if assume_valid: + if self.min_key is None: + return self.reverse_IDs[ids] + else: + return self.reverse_IDs[ids - self.min_key] + else: + if self.min_key is None: + return query_array(self.reverse_IDs, ids) + else: + return query_array(self.reverse_IDs, ids - self.min_key) + + def __call__(self, ids, assume_valid=False): + """Alias for query function.""" + return self.query(ids, assume_valid=assume_valid) + + def query_matched(self, ids, assume_valid=False): + """Find indices eof the input (external) IDs, also listing matches. + + Parameters + ---------- + ids : ndarray(int) + The IDs whose indices in the internal list (used to set up the + reverse list) should be determined. Out-of-bound situations are + dealt with internally. + assume_valid : bool, optional + Assume that all input IDs are within the range of the internal + reverse-index list, so that out-of-bound check can be skipped + (default: ``False``). + + Returns + ------- + indices : ndarray(int) + The indices corresponding to each input ID (-1 if not found). + matches : ndarray(int) + The indices into the input `ids` array for keys that could be + matched (i.e. have a non-negative value of `indices`). + + Example + ------- + >>> import numpy as np + >>> ids = np.array([4, 0, 5, 1]) + >>> reverse_ids = ReverseList(ids) + >>> reverse_ids.query_matched(np.array([3, 4])) + array([-1, 0]), array([1]) + """ + ie_int = self.query(ids, assume_valid=assume_valid) + ie_matched = np.nonzero(ie_int >= 0)[0] + return ie_int, ie_matched + + +def create_reverse_list(ids, delete_ids=False, assume_positive=False, + max_val=None): + """Create a reverse-index list from a (unique) list of IDs. + + This gives the index for each ID value, and is thus the inverse of the + input list (which gives the ID for an index). + + Warning + ------- + It is a bad idea to call this function if the input ID list contains very + large values in relation to the available memory: as a rough guide, + consider the limit as 1/8 * [RAM/byte]. Ignoring this will result in + undefined, slow, and likely annoying behaviour. + + Parameters + ---------- + ids : ndarray (int) + Input keys (IDs) to invert. These are assumed to be unique; + death and destruction may happen if this is not the case. + The array must be one-dimensional. Any negative values are + assumed to be dummy elements and are ignored. + delete_ids : bool, optional + Delete input keys after building reverse list (default: ``False``). + assume_positive : bool, optional + Assume that all the input values are non-negative, which speeds + up the inversion. If ``False`` (default), the code checks + explicitly which input values are non-negative and only + transcribes these to the reverse list. + max_val : int, optional + Build a reverse list with at least `maxval`+1 entries (i.e. that + can be indexed by values up to `maxval`), even if this exceeds the + maximum input ID value. If ``None`` (default), the reverse list is + built up to self-indexing capacity (i.e. with max(`ids`)+1 + elements). + + Returns + ------- + rev_IDs : ndarray(int) + The reverse index list. If the input list contains fewer than + 2 billion elements, it is of type np.int32, otherwise np.int64. + + Note + ---- + For most practical purposes, it may be more convenient to directly use + the ReverseList class, or the find_id_indices() function, + to correlate IDs, both of which call this function internally. + + Example + ------- + >>> # Standard use to invert an array: + >>> import numpy as np + >>> ids = np.array([4, 0, 5, 1]) + >>> create_reverse_list(ids) + array([1, 3, -1, -1, 0, 2]) + + >>> # Including negative array values: + >>> ids = np.array([4, 0, -1, 5, 1]) + >>> create_reverse_list(ids) + array([1, 4, -1, -1, 0, 3]) + + >>> # Including use of max_val: + >>> create_reverse_list(ids, maxVal=10) + array([1, 4, -1, -1, 0, 3, -1, -1, -1, -1, -1]) + """ + # If there is no input, return an empty array + if len(ids) == 0: + if max_val is None: + return np.zeros(0, dtype=np.int32) + else: + return np.zeros(max_val+1, dtype=np.int32) - 1 + + # Find extent and required data type of output list + max_ID = ids.max() + if max_val is not None: + if max_val > max_ID: + max_ID = max_val + if len(ids) > 2e9: + dtype = np.int64 + else: + dtype = np.int32 + + # Do the actual inversion + rev_IDs = np.zeros(np.int64(max_ID+1), dtype=dtype) - 1 + if assume_positive: + rev_IDs[ids] = np.arange(len(ids)) + else: + ind_good = np.nonzero(ids >= 0)[0] + rev_IDs[ids[ind_good]] = ind_good + + # Delete input if necessary, to save space + if delete_ids: + del ids + + return rev_IDs + + +def find_id_indices(ids_ext, ids_int, max_direct=int(1e10), + sort_below=None, force_sort=False, sort_matches=True, + verbose=False): + """Find and return the locations of IDs in a reference list. + + This function can be used to translate indices in one ('external', + subject) catalogue into indices in a second ('internal', reference) + catalogue, for key sets of arbitrary length or values. If the maximum + value is below an (adjustable) threshold, the lookup is performed + via an explicit reverse-lookup list. Otherwise, the reference + list is sorted and the match done via numpy's searchsorted. + + Parameters + ---------- + ids_ext : ndarray (int) + Array of keys (IDs) whose indices in `ids_int` should be returned. + It should be unique, unless the search is guaranteed to be + executed via a reverse list. + ids_int : ndarray (int) + Internal ('reference') list of keys (IDs), assumed to be unique. + The function will search for each input ID in this array. + max_direct : int, optional + Maximum value in either key set for which a reverse-index + based match is performed, rather than a sort-based search + (default: 1e10). + sort_below : int or ``None``, optional + Maximum length of either ID list for which sort-based search is + preferred (default: 100). If ``None``, always use reverse-index + method if possible. + force_sort : bool, optional + Force a sorted search irrespective of maximum input values. This + is equivalent to, but slightly faster than, setting + `max_direct` = 0. + sort_matches : bool, optional + Explicitly sort matching indices from sort-based search in ascending + order, so that its result is identical to reverse-list based + method (default: ``True``). + verbose : bool, optional + Print timing information (default: ``False``) + + Returns + ------- + ie_int : ndarray(int) + The index in ids_int for each input ID (-1 if it could not be + located at all). + ie_matched : ndarray(int) + The input (external) ID indices that could be matched. + + Note + ---- + For large arrays, using a reverse-lookup list is typically much faster, + but may use substantial amounts of memory. For small input lists, the + sort-and-search approach may be faster because it avoids the overheads + of setting up the reverse list. + """ + # Determine whether we can use the direct (reverse-ID-list-based) method + use_direct = True + if force_sort: + use_direct = False + elif sort_below is not None: + if max(len(ids_ext), len(ids_int)) > sort_below: + use_direct = False + elif max(np.max(ids_ext), np.max(ids_int)) > max_direct: + use_direct = False + + if use_direct: + # Quick and simple way via reverse ID list: + rev_IDs = ReverseList(ids_int) + ie_int = rev_IDs.query(ids_ext) + ie_matched = np.nonzero(ie_int >= 0)[0] + + else: + # Need to identify matching IDs on an individual basis. + time_start = time.time() + sorter_int = np.argsort(ids_int) + time_sort = time.time() - time_start + + guess = np.searchsorted( + ids_int, ids_ext, sorter=sorter_int, side='right') - 1 + ie_matched = np.nonzero(ids_int[sorter_int[guess]] == ids_ext)[0] + ie_int = np.zeros(len(ids_ext), dtype=int) - 1 + ie_int[ie_matched] = sorter_int[guess[ie_matched]] + + # If desired, sort matches + if sort_matches: + ie_matched = np.sort(ie_matched) + + if verbose: + time_lookup = time.time() - time_sort + print("Sorting took {:.3f} sec." .format(time_sort)) + print("Lookup took {:.3f} sec." .format(time_lookup)) + + return ie_int, ie_matched + + +def query_array(array, indices, default=-1): + """Retrieve values from an array that may be too short. + + Parameters + ---------- + array : ndarray + The array to retrieve values from. It should be of numerical + type, and one-dimensional. + indices : ndarray(int) + Indices of array to query. + default : value, optional + The value to assign to out-of-bound indices (default: -1). + + Returns + ------- + values : ndarray + The array values of the specified indices, with out-of-bounds + indices (negative or >= len(`array`)) set to `default`. + + Example + ------- + >>> import numpy as np + >>> arr = np.array([1, 4, 0, 8]) + >>> ind = np.array([0, 2, 8]) + >>> query_array(arr, ind, default=-100) + array([1, 0, -100]) + """ + if np.min(indices) >= 0 and np.max(indices) < len(array): + return array[indices] + else: + values = np.zeros(len(indices), dtype=array.dtype) + default + ind_in_range = np.nonzero((indices < len(array)) & + (indices >= 0))[0] + values[ind_in_range] = array[indices[ind_in_range]] + return values + + +def find_vr_haloes(ids, vr_properties_name): + """Find the VR halo indices belonging to the specified particle IDs.""" + + # Need to construct the names of the two files holding the particle + # linking information. + vr_group_file = vr_properties_name.replace('properties', 'catalog_groups') + vr_particle_file = vr_properties_name.replace( + 'properties', 'catalog_particles') + + # Load particle offsets and IDs + with h5.File(vr_group_file, 'r') as f: + vr_offsets = f['Offset'][...] + vr_lengths = f['Group_Size'][...] + with h5.File(vr_particle_file, 'r') as f: + vr_ids = f['Particle_IDs'][...] + + vr_ends = vr_offsets + vr_lengths + + # Locate 'our' IDs in the VR ID list + ind_in_vr, found_in_vr = find_id_indices(ids, vr_ids) + + print(f'Located {len(found_in_vr)/len(ind_in_vr)*100:.3f}% of particles ' + f'in VR ID list...') + + # Now convert VR particle indices to halo indices + halo_guess = np.searchsorted(vr_offsets, ind_in_vr[found_in_vr], + side='right') - 1 + ind_good = np.nonzero( + (ind_in_vr[found_in_vr] >= vr_offsets[halo_guess]) & + (ind_in_vr[found_in_vr] < vr_ends[halo_guess]))[0] + + print(f'Located {len(ind_good)/len(found_in_vr)*100:.3f}% of particles ' + f'on VR ID list in a halo...') + + vr_halo = np.zeros(len(ids), dtype=int) - 1 + vr_halo[found_in_vr[ind_good]] = halo_guess[ind_good] + + return vr_halo From 6ed0cce608af91ac2d2da5ef00eef18582cba346 Mon Sep 17 00:00:00 2001 From: "dc-bahe1@cosma.dur.ac.uk" Date: Mon, 14 Jun 2021 14:06:34 +0100 Subject: [PATCH 02/12] Added stellar profile script --- eagle-xl/scripts/stellar_median_profiles.py | 310 ++++++++++++++++++++ 1 file changed, 310 insertions(+) create mode 100644 eagle-xl/scripts/stellar_median_profiles.py diff --git a/eagle-xl/scripts/stellar_median_profiles.py b/eagle-xl/scripts/stellar_median_profiles.py new file mode 100644 index 00000000..67f11ea2 --- /dev/null +++ b/eagle-xl/scripts/stellar_median_profiles.py @@ -0,0 +1,310 @@ +"""Plot the stellar mass profiles in bins of halo mass""" + +import matplotlib.pyplot as plt +import numpy as np +import unyt +import h5py as h5 + +from swiftsimio import load +from swiftpipeline.argumentparser import ScriptArgumentParser + +import crossref as cx +import velociraptor as vr + +import os + +# Set number of halo mass bins to use +num_horizontal = 3 +num_vertical = 3 +num_bins = 9 + +mbinedges_log = np.linspace(10.5, 12.75, num_bins+1) +mbinedges = 10.0**mbinedges_log + +num_radbins = 30 +radbin_range_log = [-1.0, 2.0] +dlogr = (radbin_range_log[1] - radbin_range_log[0]) / num_radbins +radbin_range_log_full = [radbin_range_log[0] - dlogr, radbin_range_log[1]] + +# Parameters for y axis scaling +Xs = [5.0, 2.5, 1.0, 5.0, 2.0, 1.0, 2.5, 1.5, 1.0] +yrange = ((0.0, 1.2), (0.0, 15.8), (0.0, 69.5)) + +def main(): + """Main function to create profiles.""" + + print("Parsing input arguments...") + arguments = ScriptArgumentParser(description="Stellar mass profiles") + plt.style.use(arguments.stylesheet_location) + colours = arguments.colour_list + names = arguments.name_list + + # Set up the SWIFTsimIO snapshot instances + snapshots = [ + load(f"{directory}/{snapshot}") for directory, snapshot in zip( + arguments.directory_list, arguments.snapshot_list) + ] + + # Get the (median) redshift of all snapshots + snap_redshifts = np.zeros(len(snapshots)) + for iisnap, isnap in enumerate(snapshots): + snap_redshifts[iisnap] = isnap.metadata.redshift + + # Set up the Velociraptor catalogue instances + catalogues = [ + vr.load(f"{directory}/{catalogue}") for directory, catalogue in zip( + arguments.directory_list, arguments.catalogue_list) + ] + + catalogue_files = [ + f"{directory}/{catalogue}" for directory, catalogue in zip( + arguments.directory_list, arguments.catalogue_list) + ] + + # Set up plot axes + print("Set up axes...") + fig, axes = setup_axes(snapshots[0]) + + # Start by plotting comparison profiles + comp_dir = os.path.dirname(os.path.realpath(__file__)) + '/comparison_data/' + comp_sets = { + 'EAGLE-Ref-L25': ('EAGLE-Ref-L25_stellar_profiles.hdf5', 'lightgrey'), + #'EAGLE-NoAGN-L25': ('EAGLE-NoAGN-L25_stellar_profiles.hdf5', 'powderblue'), + 'EAGLE-Ref-L100': ('EAGLE-Ref-L100_stellar_profiles.hdf5', 'dimgrey'), + 'TNG100-1': ('IllustrisTNG-100-1_stellar_profiles.hdf5', 'rosybrown'), + #'TNG100-2': ('IllustrisTNG-100-2_stellar_profiles.hdf5', 'peachpuff'), + } + + set_lines = [] + set_names = list(comp_sets.keys()) + set_labels = set_names[:] + for iiset, set_name in enumerate(set_names): + with h5.File(f'{comp_dir}/{comp_sets[set_name][0]}', 'r') as f: + redshifts = f['Redshifts'][...] + ind_best = np.argmin(np.abs(redshifts - np.median(snap_redshifts))) + z_best = redshifts[ind_best] + set_labels[iiset] = set_labels[iiset] + f' (z = {z_best:.1f})' + grp_name = f'z_{z_best:.3f}'.replace('.', 'p') + print(f"Using group '{grp_name}'...") + prof = f[f'{grp_name}/Profiles'][...] + edges = f[f'{grp_name}/Edges'][...] + prof_r = (edges[:-1] + edges[1:])/2 + + for ibin in range(num_bins): + set_line = axes[ibin].plot( + prof_r, prof[ibin, :] * Xs[ibin], color=comp_sets[set_name][1], + label=set_name, linestyle='--', linewidth=1)[0] + if ibin == 0: + set_lines.append(set_line) + + # Add profiles for individual snapshots + sim_lines = [] + for isnap, (snapshot, catalogue, catalogue_file, sim_name) in enumerate( + zip(snapshots, catalogues, catalogue_files, names)): + colour = None + if isnap < len(colours): + if colours[isnap] is not None: + colour = colours[isnap] + + process_snapshot(snapshot, catalogue, catalogue_file, axes, colour, + sim_lines, sim_name, isnap) + + # Add legends + sim_legend = axes[0].legend(sim_lines, names, frameon=1) + set_legend = axes[1].legend(set_lines, set_labels, loc=3, prop={'size': 5}, + frameon=1) + + set_frame = set_legend.get_frame() + set_frame.set_facecolor('white') + sim_frame = sim_legend.get_frame() + sim_frame.set_facecolor('white') + + fig.savefig(f"{arguments.output_directory}/stellar_mass_profiles.png") + + + + +def setup_axes(snapshot): + """Set up the (empty) plotting axes.""" + + fig = plt.figure(figsize=(6.0, 6.0), constrained_layout=False) + + ax = [] + for axy in range(num_horizontal-1, -1, -1): + for axx in range(num_vertical): + + # Add plot axis with correct size and position within full plot + xwidth = (0.85 - (num_horizontal - 1) * 0.01) / num_horizontal + ywidth = (0.85 - (num_horizontal - 1) * 0.01) / num_horizontal + xlow = 0.1 + xwidth * axx + 0.01 * axx + ylow = 0.1 + ywidth * axy + 0.01 * axy + ax_curr = fig.add_axes([xlow, ylow, xwidth, ywidth]) + + # Ensure that only left/bottom plots have labels + if axx > 0: + ax_curr.yaxis.label.set_visible(False) + ax_curr.yaxis.set_ticklabels([]) + if axy > 0: + ax_curr.xaxis.label.set_visible(False) + ax_curr.xaxis.set_ticklabels([]) + + ax_curr.set_xlim((-1.1, 2.0)) + if axy == 2: + ax_curr.set_ylim(yrange[0]) + elif axy == 1: + ax_curr.set_ylim(yrange[1]) + elif axy == 0: + ax_curr.set_ylim(yrange[2]) + + ibin = len(ax) + m200_low, m200_high = mbinedges_log[ibin], mbinedges_log[ibin+1] + yceil = ax_curr.get_ylim()[1] + yr = ax_curr.get_ylim()[1] - ax_curr.get_ylim()[0] + ytop = yceil * 0.965 + ax_curr.text(-0.9, ytop, + 'log $M_\mathrm{200c}$:' f'\n{m200_low:.2f} - {m200_high:.2f}', + va='top') + ax_curr.text(-0.9, ytop - yr*0.15, r'[$X =$' f'{Xs[ibin]:.1f}]', va='top', fontsize=7, color='dimgrey') + if ibin > 0: + ax_curr.text(0.8, ytop, + 'log $M_\mathrm{star,\,med}$:', va='top') + + logeps = np.log10( + snapshot.metadata.gravity_scheme[ + 'Maximal physical baryon softening length ' + '[internal units]'] + * 1e3)[0] + logpeps = np.log10( + snapshot.metadata.gravity_scheme[ + 'Maximal physical baryon softening length ' + '(Plummer equivalent) [internal units]'] + * 1e3)[0] + + plt.fill_between((-1.1, logeps), (0, 0), (yceil, yceil), + color='grey', alpha=0.15) + plt.fill_between((-1.1, logpeps), (0, 0), (yceil, yceil), + color='grey', alpha=0.15) + + # Add newly created axis to full stack + ax.append(ax_curr) + + # For simplicity, convert list of axes to a numpy array + ax = np.array(ax) + + # Set (common) x and y axis labels + fig.text(0.45, 0.06, "Galactic radius [log $r$ / pkpc]", + va='top', ha='center') + fig.text(0.05, 0.5, r"Stellar mass $M_\star\,/\,\mathrm{dlog}r\,\times X$ " + r"[$10^9$ M$_\odot$]", + va='center', ha='right', rotation=90.0) + + return fig, ax + + +def process_snapshot(snapshot, catalogue, catalogue_file, axes, colour, + sim_lines, sim_name, iisnap): + """Calculate and plot the profiles for one snapshot. + + Parameters + ---------- + snapshot : SWIFTDataset + The snapshot for which to plot the profiles. + catalogue : VELOCIRAPTOR instance + The VR catalogue to link to. + axes : ndarray(matplotlib axes) + The pre-setup plot axes + """ + + # Extract relevant star particle info and match to subhaloes + ids = snapshot.stars.particle_ids.value + aexp = 1 / (1 + catalogue.redshift) + star_pos = snapshot.stars.coordinates.to('Mpc').value * aexp + star_haloes = cx.find_vr_haloes(ids, catalogue_file) + + # Extract relevant properties from VR catalogue + vr_mstar = catalogue.masses.m_star_30kpc.to('Msun').value + vr_x = catalogue.positions.xcminpot.to('Mpc').value + vr_y = catalogue.positions.ycminpot.to('Mpc').value + vr_z = catalogue.positions.zcminpot.to('Mpc').value + vr_pos = np.vstack((vr_x, vr_y, vr_z)).T + vr_m200c = catalogue.masses.mass_200crit.to('Msun').value + vr_type = catalogue.structure_type.structuretype + + # Calculate radii for each star [kpc], accounting for periodic wrapping + boxsize = snapshot.metadata.boxsize.to('Mpc').value + star_deltapos = (star_pos - vr_pos[star_haloes, :]) + for idim in range(3): + ind_low = np.nonzero(star_deltapos[:, idim] < -boxsize[idim]/2) + star_deltapos[ind_low, idim] += boxsize[idim] + ind_high = np.nonzero(star_deltapos[:, idim] > boxsize[idim]/2) + star_deltapos[ind_high, idim] -= boxsize[idim] + star_radii = np.linalg.norm(star_deltapos, axis=1) * 1e3 + + edges = np.linspace(*radbin_range_log_full, num=num_radbins+1) + dr_bin = edges[1:] - edges[:-1] + + for ibin in range(num_bins): + m200_low, m200_high = mbinedges[ibin], mbinedges[ibin+1] + ind_bin = np.nonzero((star_haloes >= 0) & + (vr_type[star_haloes] == 10) & + (vr_m200c[star_haloes] >= m200_low) & + (vr_m200c[star_haloes] < m200_high))[0] + if len(ind_bin) == 0: continue + + logradii_bin = np.log10( + np.clip(star_radii[ind_bin], 10.0**(radbin_range_log[0] - dlogr/2), + None)) + mstar_bin = snapshot.stars.masses.to('Msun').value[ind_bin] + halo_bin = star_haloes[ind_bin] + unique_halo_bin = np.unique(halo_bin) + ngal = len(unique_halo_bin) + mstar_med = np.log10(np.median(vr_mstar[unique_halo_bin])) + + # Find median galaxy per bin + rad_sorter = np.argsort(logradii_bin) + + edge_indices = np.searchsorted(logradii_bin, edges, sorter=rad_sorter) + + profile = np.zeros(num_radbins) + for iradbin in range(num_radbins): + subind_radbin = np.arange( + edge_indices[iradbin], edge_indices[iradbin+1]) + if len(subind_radbin) == 0: continue + ind_radbin = rad_sorter[subind_radbin] + unique_haloes, uhalo_inds = np.unique( + halo_bin[ind_radbin], return_inverse=True) + bin_hist, halobin_edges = np.histogram( + uhalo_inds, bins=np.arange(len(unique_haloes)), + weights=mstar_bin[ind_radbin]) + profile[iradbin] = np.median(bin_hist) / dr_bin[iradbin] / 1e9 + + # Need to account for galaxies that have zero stars in this bin + if len(bin_hist) > ngal: + print("More haloes in bin than in total???") + raise ValueError + bin_hist_padded = np.zeros(ngal) + bin_hist_padded[:len(bin_hist)] = bin_hist + profile[iradbin] = np.median(bin_hist_padded)/dr_bin[iradbin]/1e9 + + sim_line = axes[ibin].plot(edges[:-1] + dr_bin/2, profile * Xs[ibin], + color=colour, label=sim_name)[0] + + if ibin == 0: + # Only add each simulation once to the line list. + sim_lines.append(sim_line) + else: + # Write out median stellar masses, but not in first bin because + # it would clash with the legend there. + yceil = axes[ibin].get_ylim()[1] + yr = axes[ibin].get_ylim()[1] - axes[ibin].get_ylim()[0] + ytop = yceil * 0.88 + axes[ibin].text(1.8, ytop - iisnap*0.06 * yr, f'{mstar_med:.2f}', + va='top', color=colour, ha='right') + + ylim = axes[ibin].get_ylim()[1] + + +if __name__ == '__main__': + print("Creating stellar profiles...") + main() + print("Done!") From 7d1b9e85f388b31208001a7c8fa44c6b40a8239c Mon Sep 17 00:00:00 2001 From: "dc-bahe1@cosma.dur.ac.uk" Date: Mon, 14 Jun 2021 14:41:28 +0100 Subject: [PATCH 03/12] Updates to stellar profile script to work with master script environment --- eagle-xl/scripts/stellar_median_profiles.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/eagle-xl/scripts/stellar_median_profiles.py b/eagle-xl/scripts/stellar_median_profiles.py index 67f11ea2..34188b11 100644 --- a/eagle-xl/scripts/stellar_median_profiles.py +++ b/eagle-xl/scripts/stellar_median_profiles.py @@ -36,7 +36,6 @@ def main(): print("Parsing input arguments...") arguments = ScriptArgumentParser(description="Stellar mass profiles") plt.style.use(arguments.stylesheet_location) - colours = arguments.colour_list names = arguments.name_list # Set up the SWIFTsimIO snapshot instances @@ -68,11 +67,11 @@ def main(): # Start by plotting comparison profiles comp_dir = os.path.dirname(os.path.realpath(__file__)) + '/comparison_data/' comp_sets = { - 'EAGLE-Ref-L25': ('EAGLE-Ref-L25_stellar_profiles.hdf5', 'lightgrey'), + #'EAGLE-Ref-L25': ('EAGLE-Ref-L25_stellar_profiles.hdf5', 'lightgrey'), #'EAGLE-NoAGN-L25': ('EAGLE-NoAGN-L25_stellar_profiles.hdf5', 'powderblue'), - 'EAGLE-Ref-L100': ('EAGLE-Ref-L100_stellar_profiles.hdf5', 'dimgrey'), - 'TNG100-1': ('IllustrisTNG-100-1_stellar_profiles.hdf5', 'rosybrown'), - #'TNG100-2': ('IllustrisTNG-100-2_stellar_profiles.hdf5', 'peachpuff'), + #'EAGLE-Ref-L100': ('EAGLE-Ref-L100_stellar_profiles.hdf5', 'dimgrey'), + #'TNG100-1': ('IllustrisTNG-100-1_stellar_profiles.hdf5', 'rosybrown'), + 'TNG100-2': ('IllustrisTNG-100-2_stellar_profiles.hdf5', 'peachpuff'), } set_lines = [] @@ -101,12 +100,8 @@ def main(): sim_lines = [] for isnap, (snapshot, catalogue, catalogue_file, sim_name) in enumerate( zip(snapshots, catalogues, catalogue_files, names)): - colour = None - if isnap < len(colours): - if colours[isnap] is not None: - colour = colours[isnap] - process_snapshot(snapshot, catalogue, catalogue_file, axes, colour, + process_snapshot(snapshot, catalogue, catalogue_file, axes, f'C{isnap}', sim_lines, sim_name, isnap) # Add legends From 97d0abfebf7bc5a919e31b474533929fca680881 Mon Sep 17 00:00:00 2001 From: "dc-bahe1@cosma.dur.ac.uk" Date: Mon, 14 Jun 2021 14:45:16 +0100 Subject: [PATCH 04/12] Added stellar profiles to config.yml --- eagle-xl/config.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/eagle-xl/config.yml b/eagle-xl/config.yml index 9304b08f..4f595862 100644 --- a/eagle-xl/config.yml +++ b/eagle-xl/config.yml @@ -166,4 +166,8 @@ scripts: title: Wall-clock time per time-bin section: Run Performance output_file: wallclock_timebin_hist.png - + - filename: scripts/stellar_median_profiles.py + caption: Radial distribution of stellar mass in bins of halo mass. + output_file: stellar_mass_profiles.png + section: Sizes + title: Stellar mass profiles From e67fcf680465dc1028369b1bdcd17448acef0bb0 Mon Sep 17 00:00:00 2001 From: "dc-bahe1@cosma.dur.ac.uk" Date: Mon, 14 Jun 2021 14:58:29 +0100 Subject: [PATCH 05/12] Added EAGLE-Ref-25 and TNG100-2 comparison data --- .../EAGLE-Ref-L25_stellar_profiles.hdf5 | Bin 0 -> 26400 bytes .../IllustrisTNG-100-2_stellar_profiles.hdf5 | Bin 0 -> 48016 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 eagle-xl/scripts/comparison_data/EAGLE-Ref-L25_stellar_profiles.hdf5 create mode 100644 eagle-xl/scripts/comparison_data/IllustrisTNG-100-2_stellar_profiles.hdf5 diff --git a/eagle-xl/scripts/comparison_data/EAGLE-Ref-L25_stellar_profiles.hdf5 b/eagle-xl/scripts/comparison_data/EAGLE-Ref-L25_stellar_profiles.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..7bf4e52eec28d5cc7cbe3cd4929446c004e5c7c0 GIT binary patch literal 26400 zcmeHv2{@PA7Pon>3<;UX6f)0gEwhqJnHn@`ppv0fh*FtDk-0JpkttKCznN4LLXym5 zGNeM%r*Q9c&$*p*zVEr`eCN5>_B__R_g;JYy=%Yweb?{5x0jBF)-syaG(_J66%`Q~ z5&e(L#ed%x0+0E8%3^#m|G>fp@q+YRkclMo7sN#0|A>fK7t$FP>i?yl!46GLqB+gQ z`WNLwF``k5`755qgeCbug@BHx>h|vgHdz?8@Pe#bu(O3Ik>h>|8wm-CA5v05`iGR2 z_%0>q(q(?w;&)w%#R9)0iHRuY%Pbf;G0}X>#3b_x)C=Xg7UVDEq;r=4U6X+ah^T(( zAdw6$k<2&J`2yr~so(QSNaib~T9_%M#4Za}*~}N4S0`dzsO5W^t@|qv5D{4{JC}k&+gCV3Wnn0D@}P%B4C-Q-r!o!JK%46RGqv$8OCo)*9+~-fbr^k z86;P8z>EHN@r{>xK$&~g@T_JYkkHxQeI%R*`C01-g)g$<>3Iq(&d4LCd%GlqNx~@TDN3QZ%&#JoQGXk|Vp}ypWWWgGmo;HVu-C^6dr{LzhFe zjUDj1cZJS|=~j4F?so1Y;Uz@ucu^i#^&Bp#tdkTsD}zl`dk!BFDg@(EGk(`AnLyTd z5B-Gh!j-Qv{1*e_;M6Ogve}XdAbTU^sC_38w$sTCjGqq#<-Ge`_dQ&}@5-f+!RtRC z@63+4?x9jQIKX9hrNlGzE@4g2h{_L5Nfag=FJ9mL@Cv77*4V``x z>DUe}1?}GThX%peYfq?$`WU1LTQN#M{S4PO>2IwU`wBffpY}hG10};7EPV;r z{&9cz?A_hgMd<@7jjz@bXZb*mPrk7xaRN+g-qHVhGYyRGV$Zz1Sph!F4_mF_ZGgBB z9*18fb%KEd_lp;sN5H?&BkyI`4CFqa%=L97!#sM{IPP&8WaMr-^(>AN3*(Zvha6); zkBWFdE?ZVisO)@Ad2lt7ISKYjR;@yvWe*iYJDE`aBOj&taVA_xMokbIp~nsV!Pf@r z$x&ao=g{4vuV80y!a*Z51|dGw4}?8?fx4u6aQTWh$X<9!mDHPR0dHLy*a-MK>sC*i^HTc6Tic zCi0(pZk^7JXN}0+*tq%e?v}fX&)==V#==4PoU|5?i^M*o2w00+- z*zp4d-QI6#^mU7Y zF9ap~pu1_1@+6PM>dsTZ3lR_16dS-@ptx4~b_blkQ9Ju+`8ZrHe8(I^ISaZ`(8or1#q^6d}1EFss zwvzZJw&_Dpqm%?j2KO|b5f??*D1)@s)*Bq2BpTX+@jIq7`_8v12?YUv3e zvEFZmbEQ8JxI)+Z*yKa+l(Js(P&G`8(Ik^IH3P4dnc->cUN|7Uro~X_1K91Vp80Ty z6g4Fd-Y>gEk0i+-k9e+S$Je6N+#PZJD3F)O|GsH0S{TQ!P#2ZJ9J}K!i5I1@wB85L zWGdpm(}%MJZzA^5SOU3_8lL#rl`PAlim^3kw48<2uqnNs=&G|SzM(sq5z)C3-)x|7 zq3Ke@x6A#^x4e?YXFO!Jey`VK@Dn1%b6bRPx2dl-*+v1Jnt7}teS`-MD%fbkv{P|7j$?I z;b%r1w_CTtNPE9#IoUXDe3G<0e(zV<$02g%x&$4vf9bH_RKp<_w)eIM_6lp`Mv>j4 zqm5elG;Yt{!{M7To2tq-wnYQmu8qy=#i^n2<9Ms)7{tl&^dY-bh=+YjUdfj!VX&Cn z?j1(5D6VfI>~>5F0|_a!oy-zQ=t|Kh-y@890m6c#CwcJK-?Q^?uEfOiZ?@bE3;Ck_ zfB$|RWt*>R@?TyJe*OJw|1bGVktGC{5LiNB34tX9mJs;QBM=_;J&X~0S#&RCbdL~1 zX3QRo2friebU3a|)gB;Bmj~<@o$4W^-2EOp3He-ZL;87b1djf!OIz8S2`(Akb0uF8 zsy+(uy;f3A;9>Y4G6+TAiO#TkKMee`f@K=EpyfhE|%3VTW z34#AU1Y|nw+9+p!?Vta>k?y)Uq7pvm=cgDC6K-1O3modM=J~|YP@U}RyiF?}#5#z* zq&rjL^9U9H@`ITmsc~qDD-XKDHfNvM4zK_Fev8Evov$wX z<2;LF(aqc#M|aTB(R?`(8xH5K+JqD{6G0*TkxflP77V>C_(s?M04&Uc*0{5j!R&Jd zWhwc`u#}{YL6d7`*5QTXF@4h ziAGyj6Fr0;D@PjBmzhxO5v)Kac^B^4*_xZ*i-b2<3pS^81pyP;YK~9TSHZWJMU;ug z4KlChGKyULISzV!L>I>c{^_Uv*?lD(*X?ppbBC*BCN`u=H{mha7X}laB)BYC&ZTXe z3#raR2aj@;fv?G$E(x9&5WPdlFRHj1THlpUw7q-_EiqSflv27tlC^RhZ&wdUa{9TO zX!JtB@B<}Ni*A7HRWoa4y5JQXZO%kkD};0slDM@SL5tNC=mA2hnJqA_5_v} z^(<1!uAsWHENhdh*W&x_KZfhIoOJ6gQ+LRFzE2Lf20}xKQKrehMA&X=;9N+T3mJyI z@kZ3ukh%Sc^!{}(!RMZNX^3JQbW!+-w1xFS{fT#sFZT??s?A}i-aYsTzE{~#Y^<9C zLzj@{w%$b8Tm2?c7T5rh@U zWt%j(tlCA!v*IpH){E4YSj9tlY`wkpkT2}^wLg3Kz8i2CF*F-`c!1=`^)ExVMu1pW zU1I916nLyw^Y!W6_s8=$kG^g2s{u-4er9dwHV75Aai41Khm?}Yj%TYU;F6o`YHAK* zq!bSzSoTxmv51@OUwl{K+29MAIa*A}^}0Zo&vX^u+z~`b-^qq#35R4d6WQ=IV|Aeo zffbMG++@0Xbrs(IT&lEpfC1k!7RYmD)8H#FuQ!7nWH?Z!?N>HE37eREU8`H(L+uW$ zf{d1Kpz<6(QFE^mdXvD$+VKS#21{v(Zm9vsO0vr34=X^!g?g3Xwnwmj;M)~p^n+#v zYl4Ky88D9Ud{gw&18$H_njF)P2Ugif(pCAHpc#{?SpTF1vai_>*qJmy*3|yZfwVnv z=Yc4FO5_JPe!^ZliGmo9@f=rovZlru?`(zMCye+>)my$ZoE2re{mxZSaUeTA%RR2U zeCR^kL_IPhh@ug_8m2{S@SPH;%|V~68Fr7-lR1WO3C#l@92E8hnH5SzEM{#mdr>8`ot-1AdN zTc$%Xy$*J$Jej6_{08pt%ki3W7zL@ybH{0nXCS^~4-?f870TJP7?GATVU6hMhgVR8mwTtoRHJZkKbx!q>PMsa93&8dk-Tntjb^z zAChIkr)E7T?y=G11ItgBAE#2Ih|x)!fwN!XRJFI}Eut@wE3Yzc{5cwqQsQt;niZ5eEm&~Ow<27x)EVnX}x>$%+ zyjH{0*(ck=mucd0k9`#F^jbLmiT`l#VRa;IE7OrCQ^DQ-Qs$)Bq;N+2M#D6f7+zv4 z@-EL>iy_;h`}`jWAe+Z)o-a*2SbZToDxr=Ibq8zD#MiFGO@bkj4&6*xFTWvg!ioW> z$|Tw%l*lo7B_{Dm#)BzEv`)c>MChGfy8K6Lb~1ar1$0lRqL!isJU$|IlN z0Ws%6dMCCSSd+%@>bRQ{-8mYFBc+*;Tr6FyZIlZK-W_?A#jpkkhgA3IfdmSLRy$W7 zl|c^a{SWI66;UladUlYo5i@im7?O-t(d3xc2CrA@xIOEv>(N&ls061ZE%Mco{sM`; z(qq6)dtOHJ98tkS;#8{5j7r#;yjJPLa(SdZPxDgUTn-y9uB$CdlR?t*hDO>z2^5_^ zJL7&q43o9R`${7PQ846vOC^sGHWkVk+YJAeJd26+{KNm}Jj=X)VTot?$0E6Ov4p@9 z0!s)iA+UtNpM<~?&oU3}U$7+pW9{reg0DF5&}yI{P!Zz$Fz&`T(;e>{L;TS zV$Z}H;jTxXpsp@-mLPE(k}@T`#lvG^qO@s}Ixr2^Yjug+Y{`OSZF|dVx8}gbvW=1A zjd`G{UO&phR|w}G63m5L^FVGrzjSO@Hn7Zyd{fX(hqPl`(>zUxpkZY1@C^1ACysRvT_e_^p9yn42W2-bo z75uXy<_&S#LF06g*Z?K%C+~$e) zsu~hoUj^|!tOr)=COVhHZ(#SDaPvyD4tUZr>`7+T1DKU4G3wX{W1{2C&jkjcWUB3C z7Eo!O}o@!noajYMnbAeBPpce9j)q zeeyeE`+R<7&nq8_t?0<~0+Bn~{Rap)p~ZvEl7289ns+9x5fLN6Lq`%G#wSl<)uE`kC-YBIu&x%uIuB6o&39X4hMF!yE0 zLvkA}Y4?>NXk}GumTCOw{tm`EF3zl^>!4S#AH_3FHL3ThgpT25tA4`U8 z^$6875ZL3ss#K#2g3d&p*Ox7YtmNoJ>^rhSmRZ_23lFvxQ&pHHbJYQ@ zU?B{#b+kJ(JjW+YZK)fHEjq+~{+m*3N%5H|C}*%|3t1f|IX8WFniWFlI8T z?UmYBSgUkAn7LsTT4beYW=Q(LAzZADnWqbC1sUM(&>OIpS6itQ-2iv!mJ{@}>p=Qq zv%bpq2p~j#-frD{4Xh8_89XnEhS;IgZ})2FK)|4I1*cOPh^fcBQJU332z;R|)9r*7 zdmbX28)MKQCjM!;=Pb}~w0ra93H99mB4Jg9cm~w&Y;)M@%!z$9!>y(E0ytg#@vg$tKHe2u%{$;{PoV3`MsN@{JdOy>aTkj=&}W zk8V*-qdu_N&+t6t@CQ&U3M)B7Pl{Owv3{Q$J?cz8GKh^|jnu`q4U}s9$o597p)N!O z-+w;kV9h0oc1@k?Zvgfmpx0Zbr z96B*Dxj$;eXn8JtZ7iSK&sGbSz7>f{W9_h_n517Qb_ldPe3w0-n}H1b!gPZ-75^t$zQ;t;z8eoWu&*FGeJpNE>B-bhzL zAB!nUn}_O1X`p{wr$z^9@|9)#R&2uew>T89a;jl$p8C3ITTkX2rPJ2YCWW#^;_eggQ-gq$uHfZ_ zLJ+X8uP$_Ta)X_rly$Eq{&;^E`@JZitzg(TTlV`r%c6dj>>gkDr=ei5{{pwdt~+pR zHD}`Mv~)0(ka#k)^&vP&Fv^NXSHKF^gZ7uVJ%)nXt#qj!&wzYupMwA1TF`qhIV!06 z0!}loYoOtM4y2RWcU9~v!D!ckS}wj4AY&twIH*+sDH8%V7Rs3*xWnijy<#%lkmM|> z;fn&FKEC+LN8wPZFnufOWDxZ5?i$q1cY{Yn8;f&9ejkV2yRx|D!_Rq^=9Grx#>!rh zvs-mX%8PKIQTS#R-<=3wvJ1uh93Oz~xd2k{@p54PFge>vR|mFayRC$y8sRRJ$N7sS z?NDYjR$8If1tH>@3XZ+qkm#x3a>Aw?k`Km{j*<4lUE8DXayL4lYgMvUO8sj{3Zrv) z8ukJvC>}E1dHNW39<7`SP%nXDvTuG=7P*i}RLxmZmLK z=FXQYo|M0H-}n*i&g?AAshHbOa(^b0;_WMNN%QN-59tIyo3&K0o!*1|+o50!`w!6j z_O__I;tX)_$+H=%XR~Q@M+0S&~3mln#)NK*> z3AE1^94Vif^RG+qJ-w%}7aXKVNEHj3V74V_kb7>Q6UEFkYre_~xbA7`+~r>g8>&tO zrH1CgKyaA&rAt|0ewoiHEg})<21^spvqZsJDuK)Em;1w|efut?7l#2;YMgnLoF@dd z^zx>D4hEB3B%Mbi?!i;({3JJ*2XMxvXt0mz321qGtlf!?5a3|2nKGaY_ybQeZN2va zLc&c~y^@%Ljwh8~zH{d7aF&?Hgg!EjW2(?ExPG&kg4w$L{t8z(&{RHRAq3Lda{lOV@n7o z%a5|+j{Mp{jR1P&j;6eLGmjd58L4#p8OShEqOeee;xmX^geKp+F$$er0bA<22f>H< zrs%|-PKdR1h+)0i4mZom26#8VfeEGTujjdIK|iCQswFEGils|Jd23^#O!2ycyhz?0 zpLvM*t5^l}3n_lqwrqg?o=PqH&K=<7l3z6&I1ZFl#(i0BU%|0vHgAm*1#-+j7+7CN zhuH&!D9ZsBB%D}wgMykH?feu@emNt6zQIg`Vd7$VYPFcynrkwcR%?mjYErnl%t*sa zLx>?4E&zF*lH@GLLm9?1JF# z>7BPT3xLYDbI)4F44~Imp;7dF40e_SS&<)GAc!mbOL$s0Om7t1ertFfGT%Jx^m|K$ zicbR0%Y0gaxqUTPs9&?9XZ~A%@&R6KAGfBh;}ykZ+U1uvrAnbFTWky;;D428`9EN9zncI6 literal 0 HcmV?d00001 diff --git a/eagle-xl/scripts/comparison_data/IllustrisTNG-100-2_stellar_profiles.hdf5 b/eagle-xl/scripts/comparison_data/IllustrisTNG-100-2_stellar_profiles.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..587e80095434ad3c5b01beaf0f1c253bdae2b214 GIT binary patch literal 48016 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 Date: Mon, 14 Jun 2021 15:14:09 +0100 Subject: [PATCH 06/12] Added TNG100-1 profile data --- .../IllustrisTNG-100-1_stellar_profiles.hdf5 | Bin 0 -> 48016 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 eagle-xl/scripts/comparison_data/IllustrisTNG-100-1_stellar_profiles.hdf5 diff --git a/eagle-xl/scripts/comparison_data/IllustrisTNG-100-1_stellar_profiles.hdf5 b/eagle-xl/scripts/comparison_data/IllustrisTNG-100-1_stellar_profiles.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..2cf11e9b64018a80bbbd2590d70f413d0c02393b GIT binary patch literal 48016 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 Vlr5jhBk3uTe|gNe`fp75{{UZ()MWqw literal 0 HcmV?d00001 From 1817bd986a32b27fd4a811c78332688bbe743338 Mon Sep 17 00:00:00 2001 From: "dc-bahe1@cosma.dur.ac.uk" Date: Mon, 14 Jun 2021 15:15:15 +0100 Subject: [PATCH 07/12] Updated which comparison data should be plotted for stellar profiles --- eagle-xl/scripts/stellar_median_profiles.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eagle-xl/scripts/stellar_median_profiles.py b/eagle-xl/scripts/stellar_median_profiles.py index 34188b11..502d8494 100644 --- a/eagle-xl/scripts/stellar_median_profiles.py +++ b/eagle-xl/scripts/stellar_median_profiles.py @@ -67,11 +67,11 @@ def main(): # Start by plotting comparison profiles comp_dir = os.path.dirname(os.path.realpath(__file__)) + '/comparison_data/' comp_sets = { - #'EAGLE-Ref-L25': ('EAGLE-Ref-L25_stellar_profiles.hdf5', 'lightgrey'), + 'EAGLE-Ref-L25': ('EAGLE-Ref-L25_stellar_profiles.hdf5', 'lightgrey'), #'EAGLE-NoAGN-L25': ('EAGLE-NoAGN-L25_stellar_profiles.hdf5', 'powderblue'), #'EAGLE-Ref-L100': ('EAGLE-Ref-L100_stellar_profiles.hdf5', 'dimgrey'), - #'TNG100-1': ('IllustrisTNG-100-1_stellar_profiles.hdf5', 'rosybrown'), - 'TNG100-2': ('IllustrisTNG-100-2_stellar_profiles.hdf5', 'peachpuff'), + 'TNG100-1': ('IllustrisTNG-100-1_stellar_profiles.hdf5', 'rosybrown'), + #'TNG100-2': ('IllustrisTNG-100-2_stellar_profiles.hdf5', 'peachpuff'), } set_lines = [] From c409e25b874227269fb722127c68d72d10e1a012 Mon Sep 17 00:00:00 2001 From: "dc-bahe1@cosma.dur.ac.uk" Date: Mon, 14 Jun 2021 15:19:05 +0100 Subject: [PATCH 08/12] Removed debug printing --- eagle-xl/scripts/stellar_median_profiles.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/eagle-xl/scripts/stellar_median_profiles.py b/eagle-xl/scripts/stellar_median_profiles.py index 502d8494..c5077e6c 100644 --- a/eagle-xl/scripts/stellar_median_profiles.py +++ b/eagle-xl/scripts/stellar_median_profiles.py @@ -33,7 +33,6 @@ def main(): """Main function to create profiles.""" - print("Parsing input arguments...") arguments = ScriptArgumentParser(description="Stellar mass profiles") plt.style.use(arguments.stylesheet_location) names = arguments.name_list @@ -61,7 +60,6 @@ def main(): ] # Set up plot axes - print("Set up axes...") fig, axes = setup_axes(snapshots[0]) # Start by plotting comparison profiles @@ -84,7 +82,6 @@ def main(): z_best = redshifts[ind_best] set_labels[iiset] = set_labels[iiset] + f' (z = {z_best:.1f})' grp_name = f'z_{z_best:.3f}'.replace('.', 'p') - print(f"Using group '{grp_name}'...") prof = f[f'{grp_name}/Profiles'][...] edges = f[f'{grp_name}/Edges'][...] prof_r = (edges[:-1] + edges[1:])/2 @@ -300,6 +297,4 @@ def process_snapshot(snapshot, catalogue, catalogue_file, axes, colour, if __name__ == '__main__': - print("Creating stellar profiles...") main() - print("Done!") From ea10a5a5202f43b964f3f07afc2c6901bea8255c Mon Sep 17 00:00:00 2001 From: "dc-bahe1@cosma.dur.ac.uk" Date: Tue, 15 Jun 2021 09:55:16 +0100 Subject: [PATCH 09/12] Fix to make profiles script work with new (?) VR output --- eagle-xl/scripts/stellar_median_profiles.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/eagle-xl/scripts/stellar_median_profiles.py b/eagle-xl/scripts/stellar_median_profiles.py index c5077e6c..5f98546a 100644 --- a/eagle-xl/scripts/stellar_median_profiles.py +++ b/eagle-xl/scripts/stellar_median_profiles.py @@ -214,7 +214,10 @@ def process_snapshot(snapshot, catalogue, catalogue_file, axes, colour, star_haloes = cx.find_vr_haloes(ids, catalogue_file) # Extract relevant properties from VR catalogue - vr_mstar = catalogue.masses.m_star_30kpc.to('Msun').value + try: + vr_mstar = catalogue.masses.m_star_30kpc.to('Msun').value + except AttributeError: + vr_mstar = catalogue.apertures.mass_star_30_kpc.to('Msun').value vr_x = catalogue.positions.xcminpot.to('Mpc').value vr_y = catalogue.positions.ycminpot.to('Mpc').value vr_z = catalogue.positions.zcminpot.to('Mpc').value From 21fd6c3ec239fb46084af34522a47dc6b7d4b7a2 Mon Sep 17 00:00:00 2001 From: "dc-bahe1@cosma.dur.ac.uk" Date: Tue, 15 Jun 2021 09:54:00 +0100 Subject: [PATCH 10/12] Added EAGLE Ref-L50 and FBconst-L50 profile data --- .../EAGLE-FBconst-L50_stellar_profiles.hdf5 | Bin 0 -> 48016 bytes .../EAGLE-Ref-L100_stellar_profiles.hdf5 | Bin 0 -> 48016 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 eagle-xl/scripts/comparison_data/EAGLE-FBconst-L50_stellar_profiles.hdf5 create mode 100644 eagle-xl/scripts/comparison_data/EAGLE-Ref-L100_stellar_profiles.hdf5 diff --git a/eagle-xl/scripts/comparison_data/EAGLE-FBconst-L50_stellar_profiles.hdf5 b/eagle-xl/scripts/comparison_data/EAGLE-FBconst-L50_stellar_profiles.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..16ea299acac3067518dc49cb751ab8fcd415594b GIT binary patch literal 48016 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 T&neQC0#x`#On<9@2s8d4uGc|a literal 0 HcmV?d00001 diff --git a/eagle-xl/scripts/comparison_data/EAGLE-Ref-L100_stellar_profiles.hdf5 b/eagle-xl/scripts/comparison_data/EAGLE-Ref-L100_stellar_profiles.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..6baacb353059f14a03de68bd12991075e845adfc GIT binary patch literal 48016 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

hbNFT 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 Date: Tue, 15 Jun 2021 09:57:27 +0100 Subject: [PATCH 11/12] Fixed EAGLE-Ref-L25 profile data --- .../EAGLE-Ref-L25_stellar_profiles.hdf5 | Bin 26400 -> 48016 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/eagle-xl/scripts/comparison_data/EAGLE-Ref-L25_stellar_profiles.hdf5 b/eagle-xl/scripts/comparison_data/EAGLE-Ref-L25_stellar_profiles.hdf5 index 7bf4e52eec28d5cc7cbe3cd4929446c004e5c7c0..a038c0c61749870478333d42bbbad9f8c08c758b 100644 GIT binary patch delta 4175 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 U&%SWt_63s_ECe=taNLLk0HqNVD*ylh From edbf1d7c0cb806650c9a2e30b81a9d50ca40da46 Mon Sep 17 00:00:00 2001 From: "dc-bahe1@cosma.dur.ac.uk" Date: Tue, 15 Jun 2021 09:59:20 +0100 Subject: [PATCH 12/12] Added EAGLE-L100 line to stellar profiles script --- eagle-xl/scripts/stellar_median_profiles.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eagle-xl/scripts/stellar_median_profiles.py b/eagle-xl/scripts/stellar_median_profiles.py index 5f98546a..0b6e2b9a 100644 --- a/eagle-xl/scripts/stellar_median_profiles.py +++ b/eagle-xl/scripts/stellar_median_profiles.py @@ -67,7 +67,8 @@ def main(): comp_sets = { 'EAGLE-Ref-L25': ('EAGLE-Ref-L25_stellar_profiles.hdf5', 'lightgrey'), #'EAGLE-NoAGN-L25': ('EAGLE-NoAGN-L25_stellar_profiles.hdf5', 'powderblue'), - #'EAGLE-Ref-L100': ('EAGLE-Ref-L100_stellar_profiles.hdf5', 'dimgrey'), + #'EAGLE-FBconst-L50': ('EAGLE-FBconst-L50_stellar_profiles.hdf5', 'plum'), + 'EAGLE-Ref-L100': ('EAGLE-Ref-L100_stellar_profiles.hdf5', 'dimgrey'), 'TNG100-1': ('IllustrisTNG-100-1_stellar_profiles.hdf5', 'rosybrown'), #'TNG100-2': ('IllustrisTNG-100-2_stellar_profiles.hdf5', 'peachpuff'), }