Files
sf_daq_buffer/README.md
T
babic_a 8c1182e412 Update documentation regarding naming of buffer files
Clarify how the path of the files are constructed and
what names should be used to avoid confusion.
2020-07-20 10:54:56 +02:00

6.2 KiB

sf_daq_buffer

Overview of current architecture and component interaction.

Overview image

Architecture

Software

Linux configuration

Build

To compile this repo you will need to install the following packages on RH7:

  • devtoolset-9
  • cmake3
  • zeromq-devel
  • hdf5-devel
yum install devtoolset-9
yum install cmake3
yum install zeromq-devel
yum install hdf5-devel

Step by step procedure to build the repo:

scl enable devtoolset-9 bash
git clone https://github.com/paulscherrerinstitute/sf_daq_buffer.git
cd sf_daq_buffer
mkdir build
cd build/
cmake3 ..
make

It is recommended to create symbolic links to the executables you will be using inside your PATH.

Example:

ln -s "$(pwd)""/""sf_buffer" /usr/bin/sf_buffer
ln -s "$(pwd)""/""sf_stream" /usr/bin/sf_stream
ln -s "$(pwd)""/""sf_writer" /usr/bin/sf_writer

Warnings

Zeromq

Zeromq version 4.1.4 (default on RH7) has a LINGER bug. Sometimes, the last message is not sent (the connection gets dropped before the message is in the buffer). Since we use PUSH/PULL to modulate the sf_replay speed, this is a key functionality we are using.

Please install a later version:

cd /etc/yum.repos.d/
wget https://download.opensuse.org/repositories/network:messaging:zeromq:release-stable/RHEL_7/network:messaging:zeromq:release-stable.repo
yum remove zeromq
yum remove openpgm
yum install libsodium-devel
yum install zeromq-devel

Terminology

In order to unify the way we write code and talk about concept the following terminology definitions should be followed:

  • frame (data from a single module)
  • image (data of the assembled image)
  • start_pulse_id and stop_pulse_id (not end_pulse_id) is used to determine the inclusive range (both start and stop pulse_id are included) of pulses.
  • detector_folder (root folder of the buffer for a specific detector on disk)
  • module_name (name of one module inside the detector_folder)
  • data_folder (folder where we group more buffer files based on pulse_id range)

Data location in buffer

The written by sf_buffer are saved to:

[detector_folder]/[module_name]/[data_folder]/[data_file].bin

  • detector_folder should always be passed as an absolute path.
  • module_name is usually composed like "M00", "M01".
  • data_folder and data_file are automatically calculated based on the current pulse_id, FOLDER_MOD and FILE_MOD attributes.
// FOLDER_MOD = 100000
int data_folder = (pulse_id % FOLDER_MOD) * FOLDER_MOD; 
// FILE_MOD = 1000
int data_file = (pulse_id % FILE_MOD) * FILE_MOD; 

FOLDER_MOD == 100000 means that each data_folder will contain data for 100000 pulses, while FILE_MOD == 1000 means that each file inside the data_folder will contain 1000 pulses. The total number of data_files in each data_folder will therefore be FILE_MOD / FOLDER_MOD = 100.