WODEN simulations

WODEN is C / CUDA code designed to be able to simulate low-frequency radio interferometric data. It is written to be simplistic and fast to allow all-sky simulations. Although WODEN was primarily written to simulate Murchinson Widefield Array (MWA, Tingay et al. 2013) visibilities, it is becoming less instrument-specific as time goes on. WODEN outputs uvfits files.

The unique part of WODEN is that it can simulate shapelet model sources (along with point and Gaussian) that are compatible with the RTS (Mitchell et al. 2008). These models are generated with SHApelet Modelling For Interferometers (SHAMFI), specified with the --woden_srclist option. It also includes a script to convert a multi-scale CLEAN component list out of WSClean into a WODEN-style srclist (when running WSClean use the -save-source-list option). WODEN can also produce visibilities that can be fed directly into the RTS to allow testing of calibration and modelling methodologies.

For general information on WODEN, including installation notes, in-depth operating principles, primary beam details and a user guide, see https://woden.readthedocs.io/en/latest/. This should be your first port of call to understand WODEN as this will be kept up to date before all other documentation. Read on below on for cluster specifics.

Garrawarla guide 

An example sbatch script on Garrwarla looks like the below. This will setup an 'array job' to launch 24 separate GPU process, one for each 'coarse band' (think equivalent to GPUbox files). This will simulate a high-band EoR1 observation on 'CHIPS settings, with a resolution of 80kHz and 8s, creating uvfits files that can be directly used by CHIPS. The rest of the observational settings we'll get from the metafits file. I've commented each line of the command below to explain what's it's doing - if you copy and edit this example, you'll need to get rid of the comments as they will confuse sbatch.

run_woden_EoR1.sh
#!/bin/bash --login
#SBATCH --nodes=1         ##Ask for one node per job in the array
#SBATCH --partition=gpuq  ##Use the GPU queue
#SBATCH --gres=gpu:1      ##Only ask for one GPU per process
#SBATCH --time=00:10:00   ##This simulation takes less than 10 mins per GPU
#SBATCH --account=mwaeor  ##If you aren't MWA EoR, you'll need a different account
#SBATCH --mem=10gb        ##Probably more memory that needed, but some calcs happen on CPU
#SBATCH --ntasks=1        ##Only one process per job in array
#SBATCH --array=1-24      ##Launch 24 jobs, with env variable $SLURM_ARRAY_TASK_ID=1 through 24 inclusive

module use /pawsey/mwa/software/python3/modulefiles       ##Use Chris' fancy module load things
module load woden                                         ##Load up everything you need for WODEN

cd /astro/mwaeor/jline/test_WODEN/MWA_analytic-vs-FEE     ##Where you want to run WODEN

mkdir -p data                                             ##If you want to store outputs somewhere else, make a dir

time run_woden.py \
    --ra0=60.0 --dec0=-27.0 \ ##Set the phase centre of the simulation to ra, dec = 60, -27.0 degrees
    --num_freq_channels=16 --freq_res=80e+3 \ ##Simulate 16 frequency channels per coarse band, of resolution 80kHz
    --num_time_steps=14 --time_res=8.0 \ ##Simulate 14 time steps, of resolution 8 seconds
    --cat_filename=/astro/mwaeor/jline/software/WODEN/woden-srclist_pumav3.txt \ ##Path to a WODEN-style sky model
    --metafits_filename=/astro/mwaeor/jline/software/WODEN/examples/metafits/1136380296_metafits_ppds.fits \ ##Path to a metafits file containing observational settings
    --band_nums=$SLURM_ARRAY_TASK_ID \ ##Use the array job number to simulate different coarse bands - 1 is lowest freq, 24 highest. Uses values in metafits file to set freq.
    --output_uvfits_prepend=./data/MWA_EoR1_FEE \ ##What to name the outputs. For --band_nums=1, this will make ./data/MWA_EoR1_FEE_band01.uvfits
    --primary_beam=MWA_FEE \ ##Which primary beam to use - this one uses the MWA Fully Embedded Element Beam (with no interpolation)
    --sky_crop_components ##WODEN defaults to horizon cropping sky model by SOURCE, but this catalogue happens to only have one giant SOURCE

Simply run this with the command

$ sbatch run_woden_EoR1.sh

and it will launch your 24 GPU jobs separately.

WODEN options

For an idea of what you can do with WODEN, here is the --help from run_woden.py. Most options can be read in automagically from a metafits file (again, check out https://woden.readthedocs.io/en/latest/ for examples and explanations on how to run WODEN).

$ FREQUENCY OPTIONS:
  --band_nums BAND_NUMS
                        Defaults to running 24 coarse bands. Alternatively, enter
                        required numbers delineated by commas, e.g. --band_nums=1,7,9
  --lowest_channel_freq LOWEST_CHANNEL_FREQ
                        Set the frequency (Hz) of the lowest channel for band 1. If
                        using a metafits file, this will override the frequency in the
                        metafits
  --coarse_band_width COARSE_BAND_WIDTH
                        Set the width of each coarse band If using a metafits file,
                        this will override the frequency in the metafits
  --num_freq_channels NUM_FREQ_CHANNELS
                        Number of fine frequency channels to simulate - defaults to
                        --coarse_band_width / --freq_res
  --freq_res FREQ_RES   Fine channel frequnecy resolution (Hz) - will default to what
                        is in the metafits

TIME OPTIONS:
  --num_time_steps NUM_TIME_STEPS
                        The number of time steps to simualte. Defaults to how many are
                        inthe metafits if using metafits
  --time_res TIME_RES   Time resolution (s) - will default to what is in the metafits
                        if the metafits if using metafits

OBSERVATION OPTIONS:
  --ra0 RA0             RA of the desired phase centre (deg)
  --dec0 DEC0           Dec of the desired phase centre (deg)
  --date DATE           Initial UTC date of the observatio in format YYYY-MM-
                        DDThh:mm:ss This is used to set the LST and array precession.
                        This is set automatically when reading a metafits but including
                        this will override the date in the metafits

TELESCOPE OPTIONS:
  --latitude LATITUDE   Latitude (deg) of the array - defaults to MWA at -26.7033194444
  --longitude LONGITUDE
                        Longitude (deg) of the array - defaults to MWA at 116.670813889
  --array_height ARRAY_HEIGHT
                        Height (m) of the array above sea level - defaults to MWA at
                        377.0
  --array_layout ARRAY_LAYOUT
                        Instead of reading the array layout from the metafits file,
                        read from a text file. Store antenna positions as offset from
                        array centre, in east, north, height coords (metres)
  --primary_beam PRIMARY_BEAM
                        Which primary beam to use in the simulation.
                        Options are:
                        	 - MWA_FEE (MWA fully embedded element model)
                        	 - MWA_analy (MWA analytic model)
                        	 - Gaussian (Analytic symmetric Gaussian)
                        		 see --gauss_beam_FWHM and
                        		 and --gauss_beam_ref_freq for
                        		 fine control
                        	 - EDA2 (Analytic dipole with a ground mesh) 
                        	 - none (Don't use a primary beam at all)
                        Defaults to --primary_beam=none
  --gauss_beam_FWHM GAUSS_BEAM_FWHM
                        The FWHM of the Gaussian beam in deg - WODEN defaults to using
                        20 deg if this is not set
  --gauss_beam_ref_freq GAUSS_BEAM_REF_FREQ
                        The frequency at which the gauss beam FWHM is set at. If not
                        set, WODEN will default to 150MHz.
  --gauss_ra_point GAUSS_RA_POINT
                        The initial RA (deg) to point the Gaussian beam at. This will
                        be used to calculate an hour angle at which the beam will
                        remain pointed at for the duration of the observation. Defaults
                        to the RA of the metafits if available, or the RA of the phase
                        centre if not
  --gauss_dec_point GAUSS_DEC_POINT
                        The initial Dec (deg) to point the Gaussian beam at. Defaults
                        to the Dec of the metafits if available, or the Dec of the
                        phase centre if not
  --hdf5_beam_path HDF5_BEAM_PATH
                        Location of the hdf5 file holding the FEE beam coefficients
  --MWA_FEE_delays MWA_FEE_DELAYS
                        A list of 16 delays to point the MWA primary beam 
                        model enter as as list like: 
                        	--MWA_FEE_delays=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
                        for a zenith pointing. This is read directly from
                        the metafits if using a metafits file
  --telescope_name TELESCOPE_NAME
                        Name of telescope written out to the uvfits file, defaults to
                        MWA

INPUT/OUTPUT OPTIONS:
  --cat_filename CAT_FILENAME
                        Path to WODEN style sky model
  --metafits_filename METAFITS_FILENAME
                        MWA style metafits file to base the simulation on. Array
                        layout, frequency and time parameters are all set by this
                        option, but can be overridden using other arguments
  --output_uvfits_prepend OUTPUT_UVFITS_PREPEND
                        Prepend name for uvfits - will append band%02d.uvfits %band_num
                        at the end. Defaults to "output".
  --sky_crop_components
                        WODEN will crop out sky model information that is below the
                        horizon for the given LST. By default, for each SOURCE in the
                        sky model, if any COMPONENT is below the horizon, the entire
                        source will be flagged. If --sky_crop_components is included
                        WODEN will include any COMPONENT above the horizon, regardless
                        of which SOURCE it belongs to.

SIMULATOR OPTIONS:
  --remove_phase_tracking
                        By adding this flag, remove the phase tracking of the
                        visibilities - use this to feed uvfits into the RTS
  --no_tidy             Defaults to deleting output binary files from woden and json
                        files. Add this flag to not delete those files
  --chunking_size CHUNKING_SIZE
                        The chunk size to break up the point sources into for
                        processing - defaults to 0 (use default chunking in WODEN)
  --dry_run             Add this to NOT call the WODEN executable - this will just
                        write out the .json file and do nothing else


Alternative Garrawarla script

Provided by Himanshu Tiwari

#!/bin/bash --login
#SBATCH --nodes=1         ##Ask for one node per job in the array
#SBATCH --partition=gpuq  ##Use the GPU queue
#SBATCH --gres=gpu:1      ##Only ask for one GPU per process
#SBATCH --time=00:10:00   ##This simulation takes less than 10 mins per GPU
#SBATCH --account=mwaeor  ##If you aren't MWA EoR, you'll need a different account
#SBATCH --mem=10gb        ##Probably more memory that needed, but some calcs happen on CPU
#SBATCH --ntasks=1        ##Only one process per job in array
#SBATCH --array=1-24      ##Launch 24 jobs, with env variable $SLURM_ARRAY_TASK_ID=1 through 24 inclusive
 
module use /pawsey/mwa/software/python3/modulefiles       
module load singularity                                   ##Load up singularity

mkdir -p data                                             ##If you want to store outputs somewhere else, make a dir

singularity exec --nv path/to/woden/dockerimage run_woden.py \
    --ra0=60.0 --dec0=-27.0 \ ##Set the phase centre of the simulation to ra, dec = 60, -27.0 degrees
    --num_freq_channels=16 --freq_res=80e+3 \ ##Simulate 16 frequency channels per coarse band, of resolution 80kHz
    --num_time_steps=14 --time_res=8.0 \ ##Simulate 14 time steps, of resolution 8 seconds
    --cat_filename=/astro/mwaeor/jline/software/WODEN/woden-srclist_pumav3.txt \ ##Path to a WODEN-style sky model
    --metafits_filename=/astro/mwaeor/jline/software/WODEN/examples/metafits/1136380296_metafits_ppds.fits \ ##Path to a metafits file containing observational settings
    --band_nums=$SLURM_ARRAY_TASK_ID \ ##Use the array job number to simulate different coarse bands - 1 is lowest freq, 24 highest. Uses values in metafits file to set freq.
    --output_uvfits_prepend=./data/MWA_EoR1_FEE \ ##What to name the outputs. For --band_nums=1, this will make ./data/MWA_EoR1_FEE_band01.uvfits
    --primary_beam=MWA_FEE \ ##Which primary beam to use - this one uses the MWA Fully Embedded Element Beam (with no interpolation)
    --sky_crop_components ##WODEN defaults to horizon cropping sky model by SOURCE, but this catalogue happens to only have one giant SOURCE