Event Broadcaster

Annotated Event Broadcaster editor
Sends events from the GUI to external applications using a ZeroMQ socket. Can be used to transmit “lightweight” information about ongoing spikes/events; if the full continuous data is needed, the ZMQ Interface should be used instead.

Plugin Type

Sink

Platforms

Windows, Linux, macOS

Built in?

No

Key Developers

Christopher Stawarz

Source Code

https://github.com/open-ephys-plugins/event-broadcaster

Installing and upgrading

The Event Broadcaster plugin is not included by default in the Open Ephys GUI. To install, use ctrl-P or ⌘P to open the Plugin Installer, browse to the “Event Broadcaster” plugin, and click the “Install” button.

The Plugin Installer also allows you to upgrade to the latest version of this plugin, if it’s already installed.

Plugin configuration

Restart connection: Resets the ZeroMQ data streaming backend

Port: Modifies the port number from which this plugin will send data.

Format: Select the event packet format (JSON or Raw Binary).

The Event Broadcaster packages and sends all incoming events and spikes, regardless of their stream of origin.

Each event is transmitted as a multi-part message, with the first part indicating the message type (0 = TTL event, 1 = spike), and the second part containing either a JSON string or a raw binary payload.

JSON Packet Format

Spikes

{
   "event_type" : "spike",
   "stream" : "stream_name",
   "source_node" : 105,
   "electrode" : "Electrode 1",
   "num_channels" : 4,
   "sample_rate" : 30000,
   "sample_number" : 193722,
   "sorted_id" : 0,
   "amp1" : 210,
   "amp2" : 150,
   "amp3" : 20,
   "amp4" : 5
}

TTL Events

{
   "event_type" : "ttl",
   "stream" : "stream_name",
   "source_node" : 101,
   "sample_rate" : 30000,
   "channel_name" : "TTL Event Channel",
   "sample_number" : 103922,
   "line" : 2,
   "state" : 1
}

Raw Binary Packet Format

When sending packets in raw binary mode, the Event Broadcaster serializes the events into the same format used internally by the GUI. For the details of the serialized spikes, refer to the source code in Event.h and Spike.h.

Receiving data in Python

See the open-ephys-python-tools repository for a more complete implementation.

import zmq
import json

url = "tcp://localhost:5557"

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect(url)

for eventType in (b'ttl', b'spike'):
   socket.setsockopt(zmq.SUBSCRIBE, eventType)

def callback(info):
   #do something with the incoming data
   print(info)

while True:
   parts = socket.recv_multipart()

   event_info = json.loads(parts[1].decode('utf-8'))

   callback(event_info)