Getting data from pymepix api interfaceΒΆ

First, pymepix should be installed. Then, a queue needs to be created to hold the data from the timepix camera, as well as a SPIDRController which will receive the data.

from multiprocessing import Queue
from pymepix.SPIDR.spidrcontroller import SPIDRController
from pymepix.timepixdevice import TimepixDevice
from pymepix.processing.acquisition import CentroidPipeline

# Create a queue for the data
data_queue = Queue()

# A SPIDRController is needed to receive data from the network
for x in SPIDRController():
    # Create TimepixDevice, which will record data and put it in the provided queue
    timepixDevice = TimepixDevice(x, data_queue, CentroidPipeline)
    timepixDevice.start()

In this example we will assume that only a single camera is being used. Now that it is possible to store data, it still needs to be processed.

# Example method for data processing. Your logic goes here
def onData(message_type: MessageType, event):
        print(f"Message Type: {MessageType(message_type).name}")
        print(f"Data: {event}\n")

# Example method for data collection. Needs to be started as a thread
def data_thread():
    while True:

        # This will block execution of this thread until data arrives
        value = data_queue.get()

        if value is None:
            break

        # If there is data, call our example method
        data_type, data = value
        onData(data_type, data)

Now that methods for data processing have been defined they should be executed as a new thread:

import threading

# Create and start thread for data processing
data_thread = threading.Thread(target=data_thread)
data_thread.daemon = True
data_thread.start()

Lastly, the TimepixDevice needs to start recording data

timepixDevice.start_recording("TEST.raw")

input("Press Enter to stop...")
print("Stopping")

Alternatively, it is also possible to use the provided PymepixConnection class from the pymepix module:

import pymepix
from pymepix.processing.acquisition import CentroidPipeline

pymepixConnection = pymepix.PymepixConnection(pipeline_class=CentroidPipeline)

# "onData" method still needs to be definded, as shown above
pymepixConnection.dataCallback = onData
pymepixConnection.start()
pymepixConnection.start_recording("TEST.raw")