Using the Python Tools#

Several python scripts in this area can be used to emulate parts of the Percival data acquisition system. This is a summary of the tools and instructions on how to operate them. There are two options for using the tools:

  • Create a virtual python environment, then install packages and the tools into it.

  • Install required python packages and set PYTHONPATH to point at the appropriate location

The virtual environment is the preferred solution since it does not require system privileges to install packages.

NOTE The h5py python bindings require the HDF5 libraries to be installed on your system (see above). If not installed into a standard location, set the environment variable HDF5_DIR to point to the installation, prior to either installation method. See the h5py install instructions for more information.

Installing a Virtual Python Environment#

Ensure you have virtualenv installed in your python environment first. Then create and activate a new virtualenv - and finally install the required dependencies with the following commands:

# Ensure you are in the "build" directory created above otherwise move into it
cd <project root>/build

# First create the virtual environment.
# This need to be done only once for your working copy
virtualenv -p /path/to/favourite/python venv

# Activate the venv - this need to be done for each shell you work in
source venv/bin/activate

# Move into the python directory to install
cd lib/python

# Install the required dependencies.
# This step is only required once for each virtualenv
pip install -r requirements.txt

# Install the tools into the environment
# The develop argument allows the underlying tools to be updated from the source in the
# build step without requiring the setup script to be run-executed each time
python setup.py develop

# Move back to the "build" directory
cd ../..

Having set up the virtual environment and installed packages and tools, it can be subsequently reused simply by activating it with the source venv/bin/activate command. The virtual env can be exited with the command deactivate at any time.

The setup.py script creates command-line entry points for the tools in the virtual environment, which can be invoked directly, as shown in the descriptions below.

Installing the required python packages manually#

This option is less preferred since system privileges are typically required to install packages and it is necessary to ensure that PYTHONPATH is set appropriately. The following steps are required:

# Install required python packages using pip. This requires system
# privileges typically, e.g. sudo
# If pip is not installed in your python environment, packages can also be
# downloaded and installed manually: seek local expert advice for this if
# necessary
pip install posix_ipc
pip install pysnmp
pip install numpy
pip install h5py
pip install pyzmq

# Set the PYTHONPATH to point at the location of the tools
export PYTHONPATH=<project root>/build/lib/python

The pyzmq python bindings for ZeroMQ do not require ZeroMQ to be installed, although this is requried to build and run the compiled applications. There is, however, a potential conflict between pyzmq and ZeroMQ v3 libraries on RedHat-based systems, causing python tools to fail when importing the bindings. If this occurs, delete the bindings with the command pip unintall pyzmq and reinstall with pip install pyzmq --install-option='--zmq=bundled' to force installation of a local ZeroMQ library.

NOTE: unlike in the virtual environment, this installation method does not create command-line entry points for the python tools. In this case, invoking them requires python to run with a module entry instead. For instance port_counters ... becomes python -m port_counters ....

Available python tools#

The following describe the available tools, and their configurations.

frame_producer

This tool generates a simulated UDP packet stream, allowing the FrameReceiver to tested without mezzanine hardware.

(venv) $ frame_producer --help

usage: frame_producer [-h] [--destaddr [DESTADDR [DESTADDR ...]]]
                      [--frames FRAMES] [--interval INTERVAL] [--display]

FrameProducer - generate a simulated UDP frame data stream

optional arguments:
  -h, --help            show this help message and exit
  --destaddr [DESTADDR [DESTADDR ...]]
                        list destination host(s) IP address:port (e.g.
                        0.0.0.1:8081)
  --frames FRAMES, -n FRAMES
                        select number of frames to transmit
  --interval INTERVAL, -t INTERVAL
                        select frame interval in seconds
  --display, -d         Enable diagnostic display of generated image

NOTE: multiple destination address are supported.

For example, to transmit three frames total to frame receivers on three separate hosts:

(venv) $ frame_producer --destaddr 10.1.0.1:8000 10.1.0.2:8000 10.1.0.3:8000 --frames=3 --interval=0.1

Starting Percival data transmission to: ['10.1.0.1', '10.1.0.2', '10.1.0.3']
frame:  0
  Sent Image frame: 0 subframe: 0 packets: 424 bytes: 2112368  to 10.1.0.1:8000
  Sent Image frame: 0 subframe: 1 packets: 424 bytes: 2112368  to 10.1.0.1:8000
  Sent Reset frame: 0 subframe: 0 packets: 424 bytes: 2112368  to 10.1.0.1:8001
  Sent Reset frame: 0 subframe: 1 packets: 424 bytes: 2112368  to 10.1.0.1:8001
frame:  1
  Sent Image frame: 1 subframe: 0 packets: 424 bytes: 2112368  to 10.1.0.2:8000
  Sent Image frame: 1 subframe: 1 packets: 424 bytes: 2112368  to 10.1.0.2:8000
  Sent Reset frame: 1 subframe: 0 packets: 424 bytes: 2112368  to 10.1.0.2:8001
  Sent Reset frame: 1 subframe: 1 packets: 424 bytes: 2112368  to 10.1.0.2:8001
frame:  2
  Sent Image frame: 2 subframe: 0 packets: 424 bytes: 2112368  to 10.1.0.3:8000
  Sent Image frame: 2 subframe: 1 packets: 424 bytes: 2112368  to 10.1.0.3:8000
  Sent Reset frame: 2 subframe: 0 packets: 424 bytes: 2112368  to 10.1.0.3:8001
  Sent Reset frame: 2 subframe: 1 packets: 424 bytes: 2112368  to 10.1.0.3:8001
3 frames completed, 25348416 bytes sent in 0.601 secs