Several COLIBRE-project use cases need PPV (position-position-velocity) cubes of simulated galaxies. I've written code for this, and Joop seems keen that it gets added to swiftsimio. I think it might be better as a separate package, so would like to hear what others think. Some further info:
- The implementation is numba-based, similar to the existing project/visualisation backend. I'm testing it by masking particles by velocity, building a 2D map per velocity channel, stacking them into a cube, and comparing with the numba backend.
- The main use case would be for emission, which means the user needs to use the particle properties to index the CHIMES table. I don't think that step belongs in swiftsimio.
- The output has units of length on the x/y axes but velocity on the z axis. I'm not sure how to represent that cleanly with
cosmo_array as it currently stands.
- Smoothing the particles in velocity space:
- Default would be no smoothing, particles deposited into a single cell.
- Support for smoothing by particles velocity dispersion, assuming a Gaussian. COLIBRE snapshots carry velocity dispersion directly, but we could add a helper function to compute it if it's missing.
- Support for thermal broadening, would species-dependent.
- If we do this as a small separate package then we could return an object, with useful methods
- Converting units (including to RA/DEC)
- Adding noise
- Computing moment maps (integrated intensity, velocity field, dispersion)
- Writing to FITS
Several COLIBRE-project use cases need PPV (position-position-velocity) cubes of simulated galaxies. I've written code for this, and Joop seems keen that it gets added to swiftsimio. I think it might be better as a separate package, so would like to hear what others think. Some further info:
cosmo_arrayas it currently stands.