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
# 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
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