Specification For Odin Data Live View Plugin#

Document Information

Author(s)

Ashley Neaves

Reviewer(s)

Version

1.0

Date

18/09/2018

Version

Date

Author

Comments/Changes made

1.0

18/09/2018

Ashley Neaves

Updated to change from requirements to specification

0.1

17/09/2018

Ashley Neaves

Created document

Introduction#

The Live View Plugin is a plugin for Odin Data, that provides a downscaled set of the data on an external ZMQ Publisher Socket, and thus allows for external or internal software to access a live copy of the data to display to users, if need be. It can get a subset of the data either by only publishing 1 in N frames to the socket, or by displaying a certain number of frames per second. The behaviour of this plugin is fully configurable, in the same way the other plugins for Odin Data are.

This plugin does not provide a GUI that displays the data image, only provides an interface so that a separate piece of software may display it.

References#

The following list of documents were used during the creation of this plugin, or are ones this specification is directly related to.

Specification#

Configuration#

The plugin can be configured in the same json file that the rest of the plugins are configured by. The following configuration options are available at this time:

  • live_view_socket_addr

    • A string that specifies the socket port and address the live view images will be published to.

  • per_second

    • An int that specifies how many frames should be displayed each second. Setting this value to 0 will disable the per Second option, so the plugin will ignore the time between frames shown.

  • frame_frequency

    • an int that configures the plugin to display every Nth frame. Setting this value to 0 will disable the frequency, so that the plugin ignores the frame number.

  • dataset_name

    • A string, representing a whitelist of dataset names that will be displayed by the live view. Dataset names are separated by commas, and trimmed of surrounding whitespace. Setting this to an empty string will disable this option, so the dataset value will not be considered when choosing frames to display.

Currently, the plugin is designed so that, if both per_second and frame_frequency are set, the per_second option overrides the frame_frequency. This means that the plugin will display every Nth frame as specified by the frame_frequency, unless the elapsed time between frames displayed gets larger than specified by per_second, in which case it displays the next frame no matter what.

If both frame_frequency and per_second are set to 0, no live view images will be pushed to the socket, as both methods of frame selection are disabled. If this occurs, the plugin will warn the user of this behaviour when configured, but otherwise remains loaded and a part of the data pipeline.

Data Output#

The data published on the ZMQ socket is a multipart message generated from the frame of data. It comes in two parts, a header and a data blob.

Data Blob#

The second part of the two part message is the raw pixel data copied from the data frame. Using the information provided in the header, this can produce an image in a corresponding live image viewer. The data blob is an array of bytes, and must be manipulated to get it to a 2D array that can be represented as an image.

ZMQ Socket#

The socket interface provided is a ZMQ Publish Socket, which allows multiple viewers to subscribe and receive the data. Adding extra viewers should not, according to the ZMQ specification, cause any additional load on the software, and each subscriber should get all the data published. Connection to a ZMQ socket can take a couple of seconds due to the underlying TCP connection protocol, which should be considered when designing a viewer GUI.