In the examples subdirectory of the powderday root directory are some example snapshots for different hydro codes suppported thusfar. This will likely change over time as the code evolves and parameter files change. Also, eventually the examples will migrate to the agora project snapshots.

For each example file there should be two parameter files that will be reasonable for the associated snapshot, though you’ll need to edit the hard linked directories that specify where (e.g.) dust files are and output should go. To run, type (in the powderday) source directory:

>python pd_front_end.py <example directory> <parameters_master_file>

Note - the .py extensions on the parameter files need to be left off.


The example simulation is a cosmological zoom simulation of a Milky Way mass galaxy that can be downloaded here (6 GB download):

To run the code, you would type:

>python pd_front_end.py examples/gadget/mw_zoom parameters_master_401 parameters_model_401

The SED (placed at z = 3 with a Planck13 cosmology) looks like:


and an example plotting code can be found in the convenience subdirectory of the powderday root directory.



Monochromatic images can be produced from powderday image output files, which are produced when IMAGING is set to true in the parameters master file. The procedure to plot an image is demonstrated in the convenience script make_image_single_wavelength.py, found in the convenience subdirectory.

If filters other than the default filter (arbitrary.filter) are used, powderday will convolve the monochromatic image outputs with each filter’s transmission function and save the result in the output directory as convolved.XXX.hdf5.

Say we’ve set the following in the parameters master file:

powderday will run at each wavelength in all of the specified filter files, and produce convolved image data for each filter.

After running:

>python pd_front_end.py examples/gadget/mw_zoom parameters_master_401 parameters_model_401

we get the standard output files, along with the convolved image data (in this case, it is named convolved.134.hdf5).

To load in the image data, use:

import h5py
f = h5py.File('convolved.134.hdf5', 'r')

Now, the image and filter data can be accessed in the hdf5 file format (thoroughly described in the h5py documentation).

Image data is stored in a 3-dimensional array, with the first axis across the filters. The image’s index is matched to its respective filter filename, stored in the filter_names dataset in the np.bytes_ format. So, if you wanted to access a convolved image and its corresponding filter name, you could do:

>>> convolved_image = f['image_data'][0]
>>> filter_name = f['filter_names'][0].astype(str)
>>> print(filter_name)

The filter’s transmission function must be accessed differently. Each filter’s transmission function is saved in its own dataset and can be called using its name:

>>> f['galex1500.filter'][...]
array([[ 1.3406205e-01,  9.0700000e-07],
       [ 1.3504851e-01,  1.1537571e-01],
       [ 1.3702143e-01,  1.7650714e-01],

The image width (float) and its units (np.bytes_ string) are stored as attributes of the image_data dataset. To plot an image, one might do something like this:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)

w = f['image_data'].attrs['width']
w_unit = f['image_data'].attrs['width_unit'].astype(str)

cax = ax.imshow(np.log(convolved_image), cmap=plt.cm.viridis,
                origin='lower', extent=[-w, w, -w, w])
ax.tick_params(axis='both', which='major', labelsize=10)
ax.set_xlabel('x ({})'.format(w_unit))
ax.set_ylabel('y ({})'.format(w_unit))
plt.colorbar(cax, label='log Luminosity (ergs/s)', format='%.0e')
plt.title("Convolved image: {}".format(filter_name))