Commit 1cf89de6 authored by Alejandro Homs Puron's avatar Alejandro Homs Puron Committed by operator for beamline
Browse files

Merge branch 'passive_recv' into 'performance'

parents e924a335 a3a92b57
Pipeline #23582 passed with stages
in 8 minutes and 51 seconds
......@@ -6,4 +6,5 @@
\#*\#
.\#*
*.pyc
build/
tango/build/
......@@ -25,7 +25,7 @@ build-noarch:
<<: *build-conda
stage: build-noarch
script:
- conda build ./conda/tango --prefix-length=80 --output-folder=dist/ --channel=http://bcu-ci.esrf.fr/stable
- conda build ./conda/tango --prefix-length=80 --output-folder=dist/ -c tango-controls --channel=http://bcu-ci.esrf.fr/stable
dependencies:
- build-linux
......@@ -46,7 +46,7 @@ deploy-devel:
only:
- branches
except:
- stable
- master
when: manual
deploy-stable:
......@@ -65,4 +65,3 @@ deploy-stable:
- linux
only:
- tags
- stable
###########################################################################
# This file is part of LImA, a Library for Image Acquisition
#
# Copyright (C) : 2009-2017
# Copyright (C) : 2009-2019
# European Synchrotron Radiation Facility
# BP 220, Grenoble 38043
# CS40220 38043 Grenoble Cedex 9
# FRANCE
#
# Contact: lima@esrf.fr
......@@ -26,8 +26,6 @@ cmake_minimum_required(VERSION 3.1)
project(slsdetector)
set(NAME slsdetector)
# Include additional modules that are used inconditionnaly
include(GNUInstallDirs)
include(GenerateExportHeader)
......@@ -58,11 +56,13 @@ if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
endif()
if (CAMERA_MASTER_PROJECT)
find_package(Lima REQUIRED)
find_package(Lima REQUIRED COMPONENTS devel tools)
endif()
# CMake additional macros
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${LIMA_CMAKE_INCLUDE_DIRS} ${CMAKE_MODULE_PATH})
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${LIMA_CMAKE_INCLUDE_DIRS} ${CMAKE_MODULE_PATH})
include(LimaTools)
# Set version
include(project_version)
......@@ -70,31 +70,11 @@ include(project_version)
# Enable python binding code compilation using sip generator
if (CAMERA_MASTER_PROJECT)
option(LIMA_ENABLE_PYTHON "compile python binding code?" OFF)
endif()
option(LIMA_ENABLE_PYTANGO_SERVER "install python tango server?" OFF)
if (LIMA_ENABLE_PYTHON)
# Find python interpreter and libs
find_package(PythonInterp)
find_package(PythonLibs)
if(${PYTHONINTERP_FOUND})
# python site-packages folder
execute_process(
COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())"
OUTPUT_VARIABLE _PYTHON_SITE_PACKAGES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
if (LIMA_ENABLE_PYTHON)
limatools_find_python_and_sip()
endif()
set(PYTHON_SITE_PACKAGES_DIR ${_PYTHON_SITE_PACKAGES_DIR} CACHE PATH "where should python modules be installed?")
find_package(SIP REQUIRED)
include(SIPMacros)
if(WIN32)
set(SIP_TAGS WIN32_PLATFORM)
elseif(UNIX)
set(SIP_TAGS POSIX_PLATFORM)
endif(WIN32)
set(SIP_EXTRA_OPTIONS -e -g)
find_package(NumPy REQUIRED)
endif()
# Additional packages
......@@ -105,9 +85,9 @@ set(SLS_DETECTOR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/slsDetectorPackage)
set(SLS_DETECTOR_SW ${SLS_DETECTOR_DIR}/slsDetectorSoftware)
set(SLS_DETECTOR_RECV ${SLS_DETECTOR_DIR}/slsReceiverSoftware)
option (USE_TEXTCLIENT "Text Client" ON)
option (USE_RECEIVER "Receiver" ON)
option (USE_GUI "GUI" OFF)
set(SLS_USE_TEXTCLIENT ON CACHE BOOL "Text Client")
set(SLS_USE_RECEIVER ON CACHE BOOL "Receiver")
set(SLS_USE_GUI OFF CACHE BOOL "GUI")
add_subdirectory(${SLS_DETECTOR_DIR})
......@@ -118,6 +98,7 @@ add_library(slsdetector SHARED
src/SlsDetectorFrameMap.cpp
src/SlsDetectorArgs.cpp
src/SlsDetectorCPUAffinity.cpp
src/SlsDetectorBebTools.cpp
src/SlsDetectorModel.cpp
src/SlsDetectorReceiver.cpp
src/SlsDetectorCamera.cpp
......@@ -155,13 +136,12 @@ message("NUMA_LIBRARY=" ${NUMA_LIBRARY})
target_link_libraries(slsdetector
PUBLIC limacore
PUBLIC slsDetectorShared slsReceiverShared zmq
PUBLIC slsDetectorShared slsReceiverShared
PUBLIC ${NUMA_LIBRARY}
)
# Binding code for python
if(LIMA_ENABLE_PYTHON)
include(LimaTools)
limatools_run_sip_for_camera(slsdetector)
endif()
......@@ -203,7 +183,10 @@ if(LIMA_ENABLE_PYTHON)
install(
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/python/
DESTINATION "${PYTHON_SITE_PACKAGES_DIR}/Lima/SlsDetector"
)
)
if (LIMA_ENABLE_PYTANGO_SERVER)
add_subdirectory(tango)
endif()
endif()
## Tests
......
......@@ -16,7 +16,7 @@ conda install -c esrf-bcu lima-camera-slsdetector
### Camera tango device server
conda install -c esrf-bcu lima-camera-slsdetector-tango
conda install -c tango-controls -c esrf-bcu lima-camera-slsdetector-tango
# LImA
......@@ -26,5 +26,6 @@ Lima is a C++ library which can be used with many different cameras. The library
## Documentation
The documentation is available [here](https://lima1.readthedocs.io/)
The documentation is available [here](https://lima.blissgarden.org)
{% set version = GIT_DESCRIBE_TAG[1:] %}
# Strip the 'v' from the version tag
{% if GIT_DESCRIBE_TAG is defined %}
{% set version = GIT_DESCRIBE_TAG[1:] %}
{% else %}
{% set version = "0.0.0" %}
{% endif %}
package:
name: lima-camera-slsdetector
......
xcopy tango\*.* %SP_DIR%\Lima\Server\camera\
cd tango
cmake -Bbuild -H. -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% -DPYTHON_SITE_PACKAGES_DIR=%SP_DIR% -DCMAKE_FIND_ROOT_PATH=%LIBRARY_PREFIX%
IF %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL%
cmake --build build --config Release --target install
IF %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL%
mkdir -p $SP_DIR/Lima/Server/camera && cp tango/*.* $SP_DIR/Lima/Server/camera
#!/bin/bash
cd tango/
cmake -Bbuild -H. -DCMAKE_INSTALL_PREFIX=$PREFIX -DPYTHON_SITE_PACKAGES_DIR=$SP_DIR -DCMAKE_FIND_ROOT_PATH=$PREFIX
cmake --build build --target install
{% set version = GIT_DESCRIBE_TAG[1:] %}
# Strip the 'v' from the version tag
{% if GIT_DESCRIBE_TAG is defined %}
{% set version = GIT_DESCRIBE_TAG[1:] %}
{% else %}
{% set version = "0.0.0" %}
{% endif %}
package:
name: lima-camera-slsdetector-tango
......@@ -12,6 +17,10 @@ build:
noarch: python
requirements:
build:
- cmake
- git
- lima-core
run:
- lima-tango-server
- lima-camera-slsdetector
......
This diff is collapsed.
......@@ -121,19 +121,24 @@ the current versions stored on the modules:
::
lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \
server_dir="executables"
server_name="eigerDetectorServer"
server="${server_dir}/${server_name}"
server_str=$(echo ${server} | sed 's:/:_:g')
full_server="/home/root/${server}"
for m in ${EIGER_MODULES}; do
ssh -x root@${m} 'ls -l executables/eigerDetectorServer*' \
> ls_executables_eigerDetectorServer_${m}.out
ssh -x root@${m} 'ls -l '${server}'*' \
> ls_${server_str}_${m}.out
done
cat ls_executables_eigerDetectorServer_${EIGER_MODULE_TOP}.out
cat ls_${server_str}_${EIGER_MODULE_TOP}.out
echo
for m in ${EIGER_MODULES}; do
ssh -x root@${m} 'md5sum executables/eigerDetectorServer*' \
> md5sum_executables_eigerDetectorServer_${m}.out
ssh -x root@${m} 'md5sum '${server}'*' \
> md5sum_${server_str}_${m}.out
done
cat md5sum_executables_eigerDetectorServer_${EIGER_MODULE_TOP}.out
cat md5sum_${server_str}_${EIGER_MODULE_TOP}.out
echo
md5sum md5sum_executables_eigerDetectorServer_beb*
md5sum md5sum_${server_str}_beb*
-rwxr-xr-x 1 root root 280601 Jan 1 01:15 executables/eigerDetectorServer
-rwxr-xr-x 1 root root 277442 Aug 26 2016 executables/eigerDetectorServer_bkp
-rwxr-xr-x 1 root root 277442 Aug 26 2016 executables/eigerDetectorServerv2.0.5.14.3
......@@ -147,24 +152,56 @@ the current versions stored on the modules:
754a871d0608c28aa7544230ca728f86 md5sum_executables_eigerDetectorServer_beb024.out
754a871d0608c28aa7544230ca728f86 md5sum_executables_eigerDetectorServer_beb025.out
Kill the running servers and disable the automatic startup:
::
lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \
for m in ${EIGER_MODULES}; do
ssh -x root@${m} killall ${server_name}
done
for m in ${EIGER_MODULES}; do
ssh -x root@${m} sed -i '"s:^#\?\('${full_server}'\).*$:#\1 \&:"' \
/etc/init.d/board_com.sh
done
Force a filesystem *sync* on each host to make the changes persistent,
just before power-cycling:
::
lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \
for m in ${EIGER_MODULES}; do
ssh -x root@${m} sync
done
Power-cycle the detector and check that no *eigerDetectorServer* is running:
::
lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \
for m in ${EIGER_MODULES}; do \
ssh -x root@${m} 'ps -ef | grep '${server}' | grep -v grep'; \
done
Backup the current version, and transfer the new version:
::
lisgeiger1:~/eiger/psi_eiger_500k_024_025/2018-04-01-1828 % \
for m in ${EIGER_MODULES}; do
ssh -x root@${m} 'mv executables/eigerDetectorServer executables/eigerDetectorServer_bkp'
ssh -x root@${m} 'mv '${server}' '${server}'_bkp'
done
SLS_DETECTOR_PACKAGE=${LIMA_DIR}/camera/slsdetector/slsDetectorPackage
eiger_servers=$(cd ${SLS_DETECTOR_PACKAGE} && find -name eigerDetectorServerv\*)
(cd ${SLS_DETECTOR_PACKAGE} && md5sum ${eiger_servers})
new_servers=$(cd ${SLS_DETECTOR_PACKAGE} && find -name ${server_name}v\*)
(cd ${SLS_DETECTOR_PACKAGE} && md5sum ${new_servers})
echo
eiger_server=${SLS_DETECTOR_PACKAGE}/$(echo "${eiger_servers}" | head -n 1)
new_server=${SLS_DETECTOR_PACKAGE}/$(echo "${new_servers}" | head -n 1)
for m in ${EIGER_MODULES}; do
scp ${eiger_server} root@${m}:executables
scp ${new_server} root@${m}:${server_dir}
done
for m in ${EIGER_MODULES}; do
ssh -x root@${m} "cp executables/$(basename ${eiger_server}) executables/eigerDetectorServer"
ssh -x root@${m} "cp ${server_dir}/$(basename ${new_server}) ${server}"
done
50ef053f1ddd0b49314479a558c9c330 ./slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.1.1.16.0
50ef053f1ddd0b49314479a558c9c330 ./serverBin/eigerDetectorServerv3.1.1.16.0
......@@ -181,18 +218,18 @@ Check that all is as expected:
this_dir="${base_dir}/$(date +%Y-%m-%d-%H%M)"
mkdir -p ${this_dir} && cd ${this_dir}
for m in ${EIGER_MODULES}; do
ssh -x root@${m} 'ls -l executables/eigerDetectorServer*' \
> ls_executables_eigerDetectorServer_${m}.out
ssh -x root@${m} 'ls -l '${server}'*' \
> ls_${server_str}_${m}.out
done
cat ls_executables_eigerDetectorServer_${EIGER_MODULE_TOP}.out
cat ls_${server_str}_${EIGER_MODULE_TOP}.out
echo
for m in ${EIGER_MODULES}; do
ssh -x root@${m} 'md5sum executables/eigerDetectorServer*' \
> md5sum_executables_eigerDetectorServer_${m}.out
ssh -x root@${m} 'md5sum '${server}'*' \
> md5sum_${server_str}_${m}.out
done
cat md5sum_executables_eigerDetectorServer_${EIGER_MODULE_TOP}.out
cat md5sum_${server_str}_${EIGER_MODULE_TOP}.out
echo
md5sum md5sum_executables_eigerDetectorServer_beb*
md5sum md5sum_${server_str}_beb*
-rwxr-xr-x 1 root root 293085 Jan 10 02:35 executables/eigerDetectorServer
-rwxr-xr-x 1 root root 280601 Jan 1 01:15 executables/eigerDetectorServer_bkp
-rwxr-xr-x 1 root root 277442 Aug 26 2016 executables/eigerDetectorServerv2.0.5.14.3
......@@ -208,8 +245,7 @@ Check that all is as expected:
4168a104e53ee71f763ed5f0e0b43859 md5sum_executables_eigerDetectorServer_beb024.out
4168a104e53ee71f763ed5f0e0b43859 md5sum_executables_eigerDetectorServer_beb025.out
Force a filesystem *sync* on each host to make the changes persistent,
just before power-cycling:
Force a another filesystem *sync*:
::
......@@ -228,12 +264,12 @@ And finally perform a *paranoid* check after power-cycling the detector:
this_dir="${base_dir}/$(date +%Y-%m-%d-%H%M)"
mkdir -p ${this_dir} && cd ${this_dir}
for m in ${EIGER_MODULES}; do
ssh -x root@${m} 'md5sum executables/eigerDetectorServer*' \
> md5sum_executables_eigerDetectorServer_${m}.out
ssh -x root@${m} 'md5sum '${server}'*' \
> md5sum_${server_str}_${m}.out
done
cd ..
for m in ${EIGER_MODULES}; do
(diff ${prev_dir}/md5sum_executables_eigerDetectorServer_${m}.out ${this_dir} &&
(diff ${prev_dir}/md5sum_${server_str}_${m}.out ${this_dir} &&
echo "${m} OK" || echo "${m} changed")
done
beb024 OK
......@@ -261,48 +297,50 @@ without the need of pressing the button in the rear panel. The latestversion of
::
lisgeiger1:~ % cd ~/eiger/fw_v18
lisgeiger1:~/eiger/fw_v18 % eiger_flash \
-m beb_fiber.bit \
-l feb_l_fx70t.bit -r feb_r_fx70t.bit \
-k simpleImage.virtex440-eiger-beb-hwid1_local \
-o ${this_dir}/eiger_flash.log ${EIGER_MODULES}
lisgeiger1:~/eiger/fw_v18 % \
this_dir="${base_dir}/$(date +%Y-%m-%d-%H%M)"
mkdir -p ${this_dir}
eiger_flash -m beb_fiber.bit \
-l feb_l_fx70t.bit -r feb_r_fx70t.bit \
-k simpleImage.virtex440-eiger-beb-hwid1_local \
-o ${this_dir}/eiger_flash.log ${EIGER_MODULES}
b69de7bbcb445d281f4ade4836028d1f beb_fiber.bit
da44706da1f11a39c2eebb2c63fff752 feb_l_fx70t.bit
d34fb69a1e4272d824bc2dea26efdd45 feb_r_fx70t.bit
1f27879faa7082f9ed2bb2b24b84ea99 simpleImage.virtex440-eiger-beb-hwid1_local
[beb024] Executing: nc -p 3000 -u beb024 3000
[beb025] Executing: nc -p 3000 -u beb025 3000
[beb024] Not in firmware flash mode ... ping'ing ...
[beb025] Not in firmware flash mode ... ping'ing ...
[beb024] ping OK ... Check ssh ...
[beb025] ping OK ... Check ssh ...
[beb024] Checking flash-mode setup files ...
[beb025] Checking flash-mode setup files ...
[beb024] Remote and local files differ!
[beb024] Local: 7f0e3fb00aa722d1b9c0b943b1870c70 boot_recovery
[beb024] Local: 89d25988ed13fbb94dd48ed4d6b49e0d z_mem
[beb024] Local: 3f95900e1928d3c59a6ec3afbc5373b0 z_mem_write
[beb024] remote: No file found!
[beb024] Copying flash-mode setup files ...
[beb025] Remote and local files differ!
[beb025] Local: 7f0e3fb00aa722d1b9c0b943b1870c70 boot_recovery
[beb025] Local: 89d25988ed13fbb94dd48ed4d6b49e0d z_mem
[beb025] Local: 3f95900e1928d3c59a6ec3afbc5373b0 z_mem_write
[beb025] remote: No file found!
[beb025] Copying flash-mode setup files ...
[beb025] Starting flash-mode (boot_recovery) ...
[beb024] Starting flash-mode (boot_recovery) ...
[beb025] Waiting for flash-mode (20 sec) ...
[beb024] Waiting for flash-mode (20 sec) ...
[beb025] Restarting Ethernet connection ...
[beb025] Waiting for connection (10 sec) ...
[beb024] Restarting Ethernet connection ...
[beb024] Waiting for connection (10 sec) ...
[beb025] Executing: nc -p 3000 -u beb025 3000
[beb024] Executing: nc -p 3000 -u beb024 3000
Hosts beb024,beb025 are not in firmware flash mode!
[beb021] Executing: nc -p 3000 -u beb021 3000
[beb020] Executing: nc -p 3000 -u beb020 3000
[beb021] Not in firmware flash mode ... ping'ing ...
[beb020] Not in firmware flash mode ... ping'ing ...
[beb021] ping OK ... Check ssh ...
[beb020] ping OK ... Check ssh ...
[beb021] Checking flash-mode setup files ...
[beb020] Checking flash-mode setup files ...
[beb021] Remote and local files differ!
[beb021] Local: 7f0e3fb00aa722d1b9c0b943b1870c70 boot_recovery
[beb021] Local: 89d25988ed13fbb94dd48ed4d6b49e0d z_mem
[beb021] Local: 3f95900e1928d3c59a6ec3afbc5373b0 z_mem_write
[beb021] remote: No file found!
[beb021] Copying flash-mode setup files ...
[beb020] Remote and local files differ!
[beb020] Local: 7f0e3fb00aa722d1b9c0b943b1870c70 boot_recovery
[beb020] Local: 89d25988ed13fbb94dd48ed4d6b49e0d z_mem
[beb020] Local: 3f95900e1928d3c59a6ec3afbc5373b0 z_mem_write
[beb020] remote: No file found!
[beb020] Copying flash-mode setup files ...
[beb020] Starting flash-mode (boot_recovery) ...
[beb021] Starting flash-mode (boot_recovery) ...
[beb020] Waiting for flash-mode (20 sec) ...
[beb021] Waiting for flash-mode (20 sec) ...
[beb020] Restarting Ethernet connection ...
[beb020] Waiting for connection (10 sec) ...
[beb021] Restarting Ethernet connection ...
[beb021] Waiting for connection (10 sec) ...
[beb020] Executing: nc -p 3000 -u beb020 3000
[beb021] Executing: nc -p 3000 -u beb021 3000
Hosts beb021,beb020 are not in firmware flash mode!
Please insert a clip into the rear panel hole until all LEDs are red,
and then wait until LED #4 blinks gren/red
Press any key to quit ...
......@@ -541,3 +579,38 @@ Console output on the FX70T FW:
.. note:: **To-Do** add a *ManualEthernetConnection* restart in case the modules are not
directly connected to the backend computer, or just not defined in the
*eiger_flash* utility.
Start the *eigerDetectorServer* and check that everything is OK:
::
lisgeiger1:~ % \
for m in ${EIGER_MODULES}; do
ssh -x root@${m} 'nohup '${server}' > /dev/null 2>&1 &'
done
Once verified that the new server runs fine with the new firmware, restore automatic startup:
::
lisgeiger1:~ % \
for m in ${EIGER_MODULES}; do
ssh -x root@${m} sed -i '"s:^#\?\('${full_server}'\).*$:\1 \&:"' \
/etc/init.d/board_com.sh
done
for m in ${EIGER_MODULES}; do
ssh -x root@${m} sync
done
Power-cycle the detector and verify that the servers start automatically:
::
lisgeiger1:~ % \
for m in ${EIGER_MODULES}; do \
ssh -x root@${m} 'ps -ef | grep '${server}' | grep -v grep'; \
done
961 root 0:00 /home/root/executables/eigerDetectorServer
965 root 0:00 /home/root/executables/eigerDetectorServer -stopserver
961 root 0:00 /home/root/executables/eigerDetectorServer
965 root 0:00 /home/root/executables/eigerDetectorServer -stopserver
SlsDetector Tango device
========================
This is the reference documentation of the PSI SlsDetector Tango device.
You can also find some useful information about the camera models/prerequisite/installation/configuration/compilation in the :ref:`SlsDetector camera plugin <camera-slsdetector>` section.
Properties
----------
=============================== =============== =============== ==============================================================
Property name Mandatory Default value Description
=============================== =============== =============== ==============================================================
config_fname Yes - Path to the SlsDetector config file
apply_corrections No True Perform corrections on each frame
high_voltage No 0 Initial detector high voltage (V)
(set to 150 if already tested)
fixed_clock_div No 0 Initial detector fixed-clock-div
threshold_energy No 0 Initial detector threshold energy (eV)
tolerate_lost_packets No True Initial tolerance to lost packets
pixel_depth_cpu_affinity_map No [] Default PixelDepthCPUAffinityMap as Python string(s) defining a dict:
{<pixel_depth>: <global_affinity>}, being global_affinity a tuple:
(<recv_list>, <lima>, <other>, <netdev_grp_list>), where recv_list
is a list of tupples in the form: (<listeners>, <port_threads>),
where listeners and port_threads are tuples of affinities,
lima and and other are affinities, and netdev_grp_list is a list of
tuples in the form:
(<comma_separated_netdev_name_list>, <rx_queue_affinity_map>), the
latter in the form of: {<queue>: (<irq>, <processing>)}.
Each affinity can be expressed by one of the functions: Mask(mask)
or CPU(<cpu1>[, ..., <cpuN>]) for independent CPU enumeration
=============================== =============== =============== ==============================================================
.. note: The Eiger detector has currently 4 threads per port.
Attributes
----------
=============================== ======= ======================= ===========================================================
Attribute name RW Type Description
=============================== ======= ======================= ===========================================================
config_fname ro DevString Path to the SlsDetector config file
hostname_list ro DevVarStringArray The list of the Eiger half-modules' hostnames
apply_corrections ro DevBoolean Pixel software corrections are applied on each frame
dac_name_list ro DevVarStringArray The list of the DAC signals' names
dac_<signal_name> rw DevVarLongArray Array with the DAC <signal_name> value for each half-module, in A/D units
dac_name_list_mv ro DevVarStringArray The list of the DAC signals' names supporting milli-volt units
dac_<signal_name>_mv rw DevVarLongArray Array with the DAC <signal_name> value for each half-module, in milli-volt units
adc_name_list ro DevVarStringArray The list of the ADC signals' names
adc_<signal_name> rw DevVarDoubleArray Array with the ADC <signal_name> value for each half-module, in user units (deg C, etc.)
pixel_depth rw DevString The image pixel bit-depth:
- **4** (not implemented in LImA yet)
- **8**
- **16**
- **32**
raw_mode rw DevBoolean Publish image as given by the Receivers (no SW reconstruction)
threshold_energy rw DevLong The energy (in eV) the pixel discriminator thresholds (Vcmp & Trim bits) is set at
high_voltage rw DevShort The detector high voltage (in V)
tx_frame_delay rw DevLong Frame Tx delay (6.2 ns units)
all_trim_bits rw DevVarLongArray Array with the pixel trimming value [0-63] for each half-module, if all the pixels in the half-module have the same trimming value, -1 otherwise
clock_div rw DevString The readout clock divider:
- **FULL_SPEED**
- **HALF_SPEED**
- **QUARTER_SPEED**
- **SUPER_SLOW_SPEED**
fixed_clock_div rw DevBoolean If active, will try to keep the same clock_div when changing pixel_depth
readout_flags rw DevString The flags affecting the readout mode (Parallel|NonParallel|Safe + StoreInRAM|Continous):
- **PARALLEL + STORE_IN_RAM**
- **PARALLEL + CONTINUOUS**
- **NON_PARALLEL + STORE_IN_RAM**
- **NON_PARALLEL + CONTINUOUS**
- **SAFE + STORE_IN_RAM**
- **SAFE + CONTINUOUS**
max_frame_rate ro DevDouble Maximum number of frames per second (kHz)
tolerate_lost_packets rw DevBoolean Allow acquisitions with incomplete frames due to overrun
pixel_depth_cpu_affinity_map rw DevString PixelDepth -> CPUAffinity map as a Python string
(see description of corresponding device property)
=============================== ======= ======================= ===========================================================
Please refer to the *PSI/SLS Eiger User's Manual* for more information about the above specfic configuration parameters.
Note: CPU-affinity control now acts, in a per-pixel_depth basis, on the following execution elements:
* Receiver listener threads
* Receiver writer threads
* Lima control & processing threads
* Other processes in the OS
* Network devices' processing tasks (kernel space)
Network devices can be grouped, each group will have the same CPU-affinity for the processing tasks.
Commands
--------
======================= =============== ======================= ===========================================
Command name Arg. in Arg. out Description
======================= =============== ======================= ===========================================
Init DevVoid DevVoid Do not use
State DevVoid DevLong Return the device state
Status DevVoid DevString Return the device state as a string
getAttrStringValueList DevString: DevVarStringArray: Return the authorized string value list for
Attribute name String value list a given attribute name
putCmd DevString DevVoid Command setting a SlsDetector parameter (no response)
getCmd DevString: DevString: Command getting a SlsDetector parameter (with response)
get command command result
getNbBadFrames DevLong: DevLong: Get the number of bad frames in the current (or last) acquisition
port_idx nb_bad_frames for the given receiver port (-1=all)
getBadFrameList DevLong: DevVarLongArray: Get the list of bad frames in the current (or last) acquisition
port_idx bad_frame_list for the given receiver port (-1=all)
======================= =============== ======================= ===========================================
//###########################################################################
// This file is part of LImA, a Library for Image Acquisition
//
// Copyright (C) : 2009-2011
// European Synchrotron Radiation Facility
// BP 220, Grenoble 38043
// FRANCE
//
// This is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This software is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, see <http://www.gnu.org/licenses/>.
//###########################################################################
#ifndef __SLS_DETECTOR_BEB_TOOLS_H
#define __SLS_DETECTOR_BEB_TOOLS_H
#include "SlsDetectorCPUAffinity.h"
namespace lima