Starting LArPix DAQ

The LArPix DAQ System records data from LArPix.

LArPix DAQ consists of a set of executable back-end modules, plus an operator API. The system is built on top of the xylem DAQ framework. The documentation here is intented to be self-contained.

Xylem allows for a networked DAQ system, where different components live on different computers and send data and commands over the local network and/or the Internet. This documentation will assume that all components are being executed on the same machine, which will be referred to by the loopback address 127.0.0.1. If you want to use the networked functionality, simply replace 127.0.0.1 with the IP address of the machine that the script is running on. Additionally, all scripts take optional --core and --log-address arguments which default to tcp://127.0.0.1 and so will not be used in the documentation below. So you will need to pass an explicit --core and/or --log-address argument with the IP address of the DAQ Core (if it’s not running on the same machine as the script), such as --core tcp://labcomputer.university.edu.

The suggested way to run all the scripts on one machine is to use multiple terminals rather than sending scripts to the background, at least until the software becomes stable.

Startup sequence

The first step is to launch the DAQ Log, which is a plain xylem module:

python -m xylem.Log -p tcp://127.0.0.1:56789 -o log.txt

The -p argument lists the port to listen on (56789 is a convention but not required), and -o gives the location of the output file. This Log script will print INFO-level messages and higher to stdout and DEBUG-level messages and higher (i.e. all messages) to the output file. To get all messages on stdout, simply start the log, then run tail -f log.txt, which will print each line of log.txt to stdout as it arrives.

The DAQ Log is used for debugging and accountability purposes. It is not intended to be particularly useful in day-to-day (production) operation.

The first “real” LArPix DAQ component to start is the DAQ Core, which monitors and coordinates the other components:

python -m larpixdaq.core

The rest of the DAQ components can be started in any order, but the suggested order is the order of data flow:

python -m larpixdaq.producer tcp://127.0.0.1:50001 --io-config FakeIO
python -m larpixdaq.aggregator tcp://127.0.0.1:50002
python -m larpixdaq.offline_storage
python -m larpixdaq.online_monitor

Interacting with the DAQ

All of these scripts are not interactive. All interactivity is performed via an Operator object, which can be scripted or used in an interactive Python session as follows:

from larpixdaq.operator import Operator
op = Operator(core_IP_address)
for response in op.prepare_physics_run():
    # do something with each response from the Core
    print(response)
# do something with the final result, still saved as response
print("Once again, the final result is:\n", response)

The LArPix Webapp server uses this Operator API, so if you are using the webapp you do not need to start your own Operator.

About port numbers

The command-line arguments for the DAQ scripts require you to specify the port number for each component. By convention, the port numbers should start at 50001 for the first component and then increment from there. Only components which send data to other components need a port number and IP address, which is why the offline storage and online monitor don’t get one. Components using different base IP addresses (i.e. on different machines) can re-use port numbers.

The DAQ Core is automatically assigned port 50000.