pynbody.analysis.ionfrac.IonFractionTable#
- class pynbody.analysis.ionfrac.IonFractionTable(redshift_values, log_temp_values, log_den_values, tables)[source]#
Bases:
IonFractionTableBaseClass for calculating ion fractions from a grid of cloudy models.
Rather than use this class directly, for many uses it is simpler to use
calculate()which will use the currently loaded or default table.Methods
calculate(simulation[, ion])Calculate the ionisation fraction for the gas particles of a given simulation
from_cloudy(cloudy_path[, table, ...])Generate a table by running cloudy with the specified ionising radiation table and parameters.
load(filename)Load a table from a numpy .npz file, generated using
save()plot([ion, redshift])Use matplotlib to plot the ion fraction table for a given ion at a given redshift
save(filename)Save the table to a numpy .npz file
- __init__(redshift_values, log_temp_values, log_den_values, tables)[source]#
Initialise an ion fraction table from raw data.
Most users will instead want to use
load()to load a pre-existing table, orfrom_cloudy()to generate a new table by executing cloudy.- Parameters:
redshift_values (array_like) – Redshift values at which the tables are defined
log_temp_values (array_like) – Log10 temperature values at which the tables are defined
log_den_values (array_like) – Log10 density values at which the tables are defined
tables (dict) – Dictionary of tables, with keys being ion names and values being 3D numpy arrays of ion fraction values. The shape of each array should be (len(redshift_values), len(log_temp_values), len(log_den_values)).
- calculate(simulation, ion='ovi')[source]#
Calculate the ionisation fraction for the gas particles of a given simulation
Values are interpolated from the (rho,T) table at the appropriate redshift, and any values outside the range of the table are clamped to the nearest valid value.
- Parameters:
simulation (pynbody.snapshot.SimSnap) – The simulation snapshot to calculate the ion fractions for. The gas particles must have ‘rho’ and ‘temp’ fields.
ion (str) – The name of the ion to calculate the fraction for, e.g. HI, MgII, OVI etc. The only molecular fraction available is H2. The default is ‘ovi’. Case insensitive.
- Returns:
The ion fraction for each gas particle in the simulation, according to the table.
- Return type:
array-like
- classmethod from_cloudy(cloudy_path, table='hm12', redshift_range=(0, 15), num_redshifts=10, log_temp_range=(2.0, 8.0), num_temps=10, log_den_range=(-8.0, 2.0), num_dens=10)[source]#
Generate a table by running cloudy with the specified ionising radiation table and parameters.
This can take a long time, but the resulting table can then be saved using the
save()method and reused by callingload(). The grid is computed in parallel using the default number of processors detected bymultiprocessing.Pool. A progress bar is displayed usingtqdm.- Parameters:
cloudy_path (str) – Path to the cloudy executable
table (str) – Name of the cloudy radiation table to use. The default is ‘hm12’.
redshift_range (tuple) – Minimum and maximum redshift values to use
num_redshifts (int) – Number of redshift values to use. These are spaced equally in log(1+z).
log_temp_range (tuple) – Minimum and maximum log10 temperature values to use
num_temps (int) – Number of temperature values to use, spaced equally in log space
log_den_range (tuple) – Minimum and maximum log10 density values to use
num_dens (int) – Number of density values to use, spaced equally in log space
- classmethod load(filename)[source]#
Load a table from a numpy .npz file, generated using
save()If the file is not found, it is assumed to be a pynbody-provided table. If such a built-in table exists, the path is modified automatically to point at it. If it does not exist, an attempt is made to download it from a zenodo repository.