SKA PST DSP Applications

ska_pst_dsp_disk

The implementation of the DSP.DISK software component for the Pulsar Timing product. This application is used to write beam-formed voltage data to disk as part of the AA0.5 PST Voltage Recorder. By default the data streams will be written to sub-directories in /tmp, unless the option is overridden via the -d option. Note that the O_DIRECT option will use raw/direct I/O to the file system to bypass kernel buffering but should only be used on local file systems that support it.

Usage: ska_pst_dsp_disk [options]
Create DSP Disk Recorder from the configuration file or via control command.
Quit with CTRL+C.

  -c port     port on which to accept control commands
  -d path     write output files to the recording path [default /tmp]
  -f config   ascii file containing observation configuration
  -h          print this help text
  -n          disable creation of output files, useful for testing on servers with slow file systems
  -o          use O_DIRECT for I/O transactions
  -v          verbose output

ska_pst_dsp_ft

The implementation of the DSP.FT software component for the Pulsar Timing product. This application is used to write decimated beam-formed voltage data to disk as part of the AA1 PST Flow Through mode of operation. By default the data streams will be written to sub-directories in /tmp, unless the option is overridden via the -d option. Note that the O_DIRECT option will use raw/direct I/O to the file system to bypass kernel buffering but should only be used on local file systems that support it.

Usage: ska_pst_dsp_ft [options]
Execute DSP Flow Through from the configuration file or via control command.
Quit with CTRL+C.

  -c port     port on which to accept control commands
  -d path     write output files to the recording path [default /tmp]
  -f config   ascii file containing observation configuration
  -g gpu_id   CUDA capable GPU id
  -h          print this help text
  -n          disable creation of output files, useful for testing on servers with slow file systems
  -o          use O_DIRECT for I/O transactions
  -r          record the time spent in each DSPSR operation
  -v          increase verbosity
  -V          increase verbosity of libDSPSR

ska_pst_dsp_disk_perftest

Tests the write performance of the FileWriter class when writing data from a ring buffer to the file system provided in the -d argument. The configuration options support

Usage: ska_pst_dsp_disk_perftest [options] config

  config      ascii file containing observation configuration
  -d path     write files to path [default /tmp]
  -h          print this help text
  -l nsecs    generate data stream for nsecs [default 30]
  -o          use O_DIRECT for file output
  -v          verbose output

ska_pst_dsp_disk_monitor

Test the monitoring functions of the DiskMonitor class when monitoring a file system provided by the -d option.

Usage: ska_pst_dsp_disk_monitor [options] config
Monitor the file system specified in the configuration file and report the disk available statistics. Quit with CTRL+C.

  config      ascii file containing observation configuration
  -d path     recording base path to monitor [default /tmp]
  -h          print this help text
  -v          verbose output

ska_pst_dsp_disk_rand_generate

Generate data and weights data streams, write a pseudo-random sequence to the data and weights shared-memory ring buffers defined in the config file. The configuration file must contain ascii key/value pairs that include the following parameters:

  • DATA_KEY 4-character hexadecimal key for the PSRDADA ring buffer defining the data stream

  • WEIGHTS_KEY 4-character hexidemical key for the PSRDADA ring buffer defining the weights stream

  • NCHAN Number of channels

  • NBIT Number of bits per sample

  • NDIM Number of dimensions (1=real, 2=complex)

  • NSAMP_PP Number of samples per packet/weight

  • TSAMP Sampling interval in microseconds

Usage: ska_pst_dsp_disk_rand_generate [options] config

config      ascii file containing observation configuration
-h          print this help text
-l nsecs    generate data stream for nsecs [default 15]
-v          verbose output

ska_pst_dsp_disk_rand_validate

Validate a data file written by ska_pst_dsp_disk against a predictable pseudo-random sequence. The unsigned 8-bit integer sequence is seeded using the unix epoch of the UTC_START header attribute, with the position in the sequence determined by the byte-offset from the start of the data stream.

Usage: ska_pst_dsp_disk_rand_validate [options] data_file

data_file   raw data file that will be validated against the pseudo-random sequence
-h          print this help text
-v          verbose output

ska_pst_dsp_disk_sine_analyse

Unpack the timeseries in a data and weights file to produce a denormalised time series. The application will print the frequency channel at which the maximum power is detected. Optionally dump the integrated bandpass to binary file for plotting in matplotlib.

Usage: ska_pst_dsp_disk_sine_analyse [options] data_file weights_file

data_file     raw data file that will be validated against the pseudo-random sequence
weights_file  weights file containing scale and weights corresponding to the data file
-o output     write bandpass to output file raw/binary FP ordered file
-h            print this help text
-v            verbose output

The following python code can plot the contents of the bandpass output file:

import numpy as np
import matplotlib.pyplot as plot

fptr = open("output_file.raw", "rb")
nchan = np.fromfile(fptr, dtype=np.uint32, count=1)[0]
npol = np.fromfile(fptr, dtype=np.uint32, count=1)[0]

fig, axs = plt.subplots(int(npol), 1)
fig.suptitle(f"Bandpass of {nchan} channels with {npol} polarisations")

x_axis = np.fromfile(fptr, dtype=np.float32, count=nchan)
for ipol in range(npol):
    y_axis = np.fromfile(fptr, dtype=np.float32, count=nchan
    axs[ipol].plot(x_axis, y_axis[ipol])
    axs[ipol].set_title(f"Polarisation {ipol}")
plt.xlabel("Frequency [MHz]")
fig.tight_layout()
plt.show()

ska_pst_dsp_disk_data_unpack

Read a data and weights file from disk and write an unpacked file to disk. The unpacked_file will be written in 32-bit floating point PSRDADA format in Time, Frequency, Polarisation ordering, which will allow it to be read by the default FloatUnpacker class of DSPSR.

Usage: ska_pst_dsp_disk_data_unpack [options] data_file weights_file output_dir

data_file     raw data file containing packed data samples
weights_file  weights file containing scale and weights corresponding to the data file
output_dir    directory to write the unpacked file
-h            print this help text
-o            use O_DIRECT for writing file output
-v            verbose output