In-built Receiver

The receiver essentially listens to UDP data packets sent out by the detector. It’s main features are:

  • Listening: Receives UDP data from the detector.

  • Writing to File: Optionally writes received data to disk.

  • Streaming via ZMQ: Optionally streams out the data using ZeroMQ.

Each of these operations runs asynchronously and in parallel for each UDP port.

Note

  • Can be run on the same or different machine as the client.

  • Can be configured by the client. (set file name/ discard policy, get progress etc.)

  • Has to be started before the client runs any receiver specific command.

Receiver Variants

There are three main receiver types. How to start them is described below.

Receiver Type

slsReceiver

slsMultiReceiver

slsFrameSynchronizer

Modules Supported

1

Multiple

Multiple

Internal Architecture

Threads per porttt

Multiple child processes of slsReceiver

Multi-threading of slsReceiver

ZMQ Streaming

Disabled by default

Disabled by default

Enabled, not optional

ZMQ Synchronization

No

No

Yes, across ports

Image Reconstruction

No

No

No

Starting up the Receiver

For a Single Module
slsReceiver # default port 1954

slsReceiver -t2012 # custom port 2012
For Multiple Modules
# each receiver (for each module) requires a unique tcp port (if all on same machine)

# option 1 (one for each module)
slsReceiver
slsReceiver -t1955

# option 2
slsMultiReceiver 2012 2

# option 3
slsFrameSynchronizer 2012 2

Client Commands

  • Client commands to the receiver begin with rx_ or f_ (file commands).

  • rx_hostname has to be the first command to the receiver so the client knows which receiver process to communicate with.

  • Can use ‘auto’ for udp_dstip if using 1GbE interface or the virtual simulators.

To know more about detector receiver setup in the config file, please check out the detector-receiver UDP configuration in the config file and the detector udp format.

The following are the different ways to establish contact using rx_hostname command.

# ---single module---

# default receiver port at 1954
rx_hostname xxx

# custom receiver port
rx_hostname xxx:1957 # option 1

rx_tcpport 1957  # option 2
rx_hostname xxx


# ---multi module---

# using increasing tcp ports
rx_tcpport 1955
rx_hostname xxx

# custom ports
rx_hostname xxx:1955+xxx:1958+ # option 1

0:rx_tcpport 1954 # option 2
1:rx_tcpport 1955
2:rx_tcpport 1956
rx_hostname xxx

# custom ports on different receiver machines
0:rx_tcpport 1954
0:rx_hostname xxx
1:rx_tcpport 1955
1:rx_hostname yyyrxr
Example commands:
# to get a list of receiver commands (these dont include file commands)
sls_detector_get list | grep rx_

# some file commands are:
fwrite
foverwrite
findex
fpath
fname
fmaster
fformat

# to get help on a single commands
sls_detector_get -h rx_framescaught

Example of a config file using in-built receiver

# detector hostname
hostname bchip052+bchip053+

# udp destination port (receiver)
# sets increasing destination udp ports starting at 50004
udp_dstport 50004

# udp destination ip (receiver)
0:udp_dstip 10.0.1.100
1:udp_dstip 10.0.2.100

# udp source ip (same subnet as udp_dstip)
0:udp_srcip 10.0.1.184
1:udp_srcip 10.0.2.184

# udp destination mac - not required (picked up from udp_dstip)
#udp_dstmac 22:47:d5:48:ad:ef

# connects to receivers at increasing tcp port starting at 1954
rx_hostname mpc3434
# same as rx_hostname mpc3434:1954+mpc3434:1955+

Performance

Please refer to Receiver PC Tuning options and slsReceiver Tuning under Troubleshooting.

Using Callbacks

One can get a callback in the receiver for each frame to:
  • manipulate the data that will be written to file, or

  • disable file writing in slsReceiver and take care of the data for each call back

When handling callbacks, the control should be returned as soon as possible, to prevent packet loss from fifo being full.

Example
  • main cpp file

  • cmake file.

  • how to install the slsDetectorPackage with cmake is provided here.

  • compile the example e4-rxr by:

    cmake ../path/to/your/source -DCMAKE_PREFIX_PATH=/path/to/sls/install
    make