mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-19 18:40:01 +02:00
replaced udp socket
This commit is contained in:
parent
3ea9b86bf5
commit
f1bce15a57
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,6 +7,7 @@ bin/
|
|||||||
*.out
|
*.out
|
||||||
*.toc
|
*.toc
|
||||||
*.o
|
*.o
|
||||||
|
*.so
|
||||||
.*
|
.*
|
||||||
build
|
build
|
||||||
RELEASE.txt
|
RELEASE.txt
|
||||||
|
28
.travis.yml
28
.travis.yml
@ -4,39 +4,25 @@ language: cpp
|
|||||||
|
|
||||||
os: linux
|
os: linux
|
||||||
|
|
||||||
env:
|
dist: bionic
|
||||||
matrix:
|
|
||||||
- CONDA_PY=3.6
|
|
||||||
- CONDA_PY=3.7
|
|
||||||
- CONDA_PY=3.8
|
|
||||||
|
|
||||||
|
|
||||||
dist: trusty
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- sudo apt-get update
|
- sudo apt-get update
|
||||||
- ldd --version
|
- ldd --version
|
||||||
- wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh;
|
- wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh;
|
||||||
- bash miniconda.sh -b -p $HOME/miniconda
|
- bash miniconda.sh -b -p $HOME/miniconda
|
||||||
- export PATH="$HOME/miniconda/bin:$PATH"
|
- source "$HOME/miniconda/etc/profile.d/conda.sh"
|
||||||
- rm -f miniconda.sh
|
- rm -f miniconda.sh
|
||||||
- hash -r
|
- hash -r
|
||||||
- conda config --set always_yes yes --set changeps1 no
|
- conda config --set always_yes yes --set changeps1 no
|
||||||
- conda config --add channels conda-forge
|
- conda config --add channels conda-forge
|
||||||
- conda config --add channels slsdetectorgroup
|
- conda config --add channels slsdetectorgroup
|
||||||
- conda update conda
|
- conda update -q conda
|
||||||
- conda update --all
|
|
||||||
- conda install conda-build=3.17
|
|
||||||
- conda install anaconda-client
|
|
||||||
- conda install conda-verify
|
|
||||||
|
|
||||||
# Useful for debugging any issues with conda
|
|
||||||
- conda info -a
|
- conda info -a
|
||||||
|
|
||||||
|
# Useful for debugging any issues with conda
|
||||||
# Replace dep1 dep2 ... with your dependencies
|
- conda create -q -n testenv conda-build anaconda-client conda-verify
|
||||||
- conda create -q -n test-environment python=$CONDA_PY
|
- conda activate testenv
|
||||||
- source activate test-environment
|
|
||||||
- conda-build .
|
- conda-build .
|
||||||
|
|
||||||
script:
|
script:
|
||||||
@ -45,7 +31,7 @@ script:
|
|||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
provider: script
|
provider: script
|
||||||
script: find $HOME/miniconda/conda-bld/${TRAVIS_OS_NAME}-64 -name "*.tar.bz2" -exec anaconda -t $CONDA_TOKEN upload --force {} \;
|
script: find $HOME/miniconda/envs/testenv/conda-bld/${TRAVIS_OS_NAME}-64 -name "*.tar.bz2" -exec anaconda -t $CONDA_TOKEN upload --force {} \;
|
||||||
on:
|
on:
|
||||||
branch: developer
|
branch: developer
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
cmake_minimum_required(VERSION 3.11)
|
cmake_minimum_required(VERSION 3.12)
|
||||||
project(slsDetectorPackage)
|
project(slsDetectorPackage)
|
||||||
set(PROJECT_VERSION 5.0.0)
|
set(PROJECT_VERSION 5.0.0)
|
||||||
include(CheckIPOSupported)
|
include(CheckIPOSupported)
|
||||||
@ -126,7 +126,7 @@ install(TARGETS slsProjectOptions slsProjectWarnings rapidjson
|
|||||||
)
|
)
|
||||||
|
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
set(CMAKE_INSTALL_RPATH "$ORIGIN")
|
set(CMAKE_INSTALL_RPATH $ORIGIN)
|
||||||
# set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
# set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
||||||
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
||||||
|
|
||||||
@ -174,6 +174,7 @@ if (SLS_USE_INTEGRATION_TESTS)
|
|||||||
endif (SLS_USE_INTEGRATION_TESTS)
|
endif (SLS_USE_INTEGRATION_TESTS)
|
||||||
|
|
||||||
if (SLS_USE_PYTHON)
|
if (SLS_USE_PYTHON)
|
||||||
|
set(PYBIND11_CPP_STANDARD -std=c++11)
|
||||||
add_subdirectory(libs/pybind11)
|
add_subdirectory(libs/pybind11)
|
||||||
add_subdirectory(python)
|
add_subdirectory(python)
|
||||||
endif(SLS_USE_PYTHON)
|
endif(SLS_USE_PYTHON)
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
mkdir build
|
mkdir build
|
||||||
mkdir install
|
mkdir install
|
||||||
cd build
|
cd build
|
||||||
@ -6,7 +7,7 @@ cmake .. \
|
|||||||
-DCMAKE_INSTALL_PREFIX=install \
|
-DCMAKE_INSTALL_PREFIX=install \
|
||||||
-DSLS_USE_TEXTCLIENT=ON \
|
-DSLS_USE_TEXTCLIENT=ON \
|
||||||
-DSLS_USE_RECEIVER=ON \
|
-DSLS_USE_RECEIVER=ON \
|
||||||
-DSLS_USE_GUI=OFF \
|
-DSLS_USE_GUI=ON \
|
||||||
-DSLS_USE_TESTS=ON \
|
-DSLS_USE_TESTS=ON \
|
||||||
-DSLS_USE_PYTHON=OFF \
|
-DSLS_USE_PYTHON=OFF \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
@ -1,14 +1,4 @@
|
|||||||
|
|
||||||
# mkdir $PREFIX/lib
|
echo "|<-------- starting python build"
|
||||||
# mkdir $PREFIX/include
|
|
||||||
|
|
||||||
|
|
||||||
# #Shared and static libraries
|
|
||||||
# cp build/bin/_sls_detector* $PREFIX/lib/.
|
|
||||||
|
|
||||||
|
|
||||||
# #Binaries
|
|
||||||
# cp -r build/bin/sls_detector $PREFIX/lib/.
|
|
||||||
|
|
||||||
cd python
|
cd python
|
||||||
${PYTHON} setup.py install
|
${PYTHON} setup.py install
|
7
conda-recepie/conda_build_config.yaml
Normal file
7
conda-recepie/conda_build_config.yaml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
python:
|
||||||
|
- 3.6
|
||||||
|
- 3.7
|
||||||
|
- 3.8
|
||||||
|
|
||||||
|
numpy:
|
||||||
|
- 1.17
|
9
conda-recepie/copy_ctbgui.sh
Normal file
9
conda-recepie/copy_ctbgui.sh
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
mkdir $PREFIX/lib
|
||||||
|
mkdir $PREFIX/bin
|
||||||
|
mkdir $PREFIX/include
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cp build/bin/ctbGui $PREFIX/bin/.
|
||||||
|
cp build/bin/libctbRootLib.so $PREFIX/lib/.
|
||||||
|
|
@ -1,15 +1,3 @@
|
|||||||
|
#Copy the GUI
|
||||||
mkdir $PREFIX/lib
|
|
||||||
mkdir $PREFIX/bin
|
mkdir $PREFIX/bin
|
||||||
mkdir $PREFIX/include
|
|
||||||
|
|
||||||
#No libs for gui?
|
|
||||||
|
|
||||||
#Binaries
|
|
||||||
cp build/bin/gui_client $PREFIX/bin/.
|
|
||||||
cp build/bin/slsDetectorGui $PREFIX/bin/.
|
cp build/bin/slsDetectorGui $PREFIX/bin/.
|
||||||
|
|
||||||
|
|
||||||
#Which headers do we need for development??
|
|
||||||
|
|
||||||
# cp include/some_lib.h $PREFIX/include/.
|
|
@ -8,6 +8,7 @@ source:
|
|||||||
|
|
||||||
build:
|
build:
|
||||||
number: 1
|
number: 1
|
||||||
|
binary_relocation: True
|
||||||
rpaths:
|
rpaths:
|
||||||
- lib/
|
- lib/
|
||||||
|
|
||||||
@ -16,10 +17,9 @@ requirements:
|
|||||||
- {{ compiler('c') }}
|
- {{ compiler('c') }}
|
||||||
- {{compiler('cxx')}}
|
- {{compiler('cxx')}}
|
||||||
- cmake
|
- cmake
|
||||||
# - qwt 6.* #require qt5 investigate befor activating gui
|
- qwt 6.*
|
||||||
# - qt=4.8.7=7
|
- qt 4.8.*
|
||||||
- zeromq=4.2.5=hfc679d8_5
|
- zeromq
|
||||||
- pyzmq
|
|
||||||
- xorg-libx11
|
- xorg-libx11
|
||||||
- xorg-libice
|
- xorg-libice
|
||||||
- xorg-libxext
|
- xorg-libxext
|
||||||
@ -51,70 +51,46 @@ requirements:
|
|||||||
|
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
- name: sls_detector_lib
|
- name: slsdetlib
|
||||||
script: copy_lib.sh
|
script: copy_lib.sh
|
||||||
|
|
||||||
- name: sls_detector
|
requirements:
|
||||||
|
run:
|
||||||
|
- libstdcxx-ng
|
||||||
|
- libgcc-ng
|
||||||
|
- zeromq
|
||||||
|
|
||||||
|
- name: slsdet
|
||||||
|
|
||||||
script: build_pylib.sh
|
script: build_pylib.sh
|
||||||
|
|
||||||
requirements:
|
requirements:
|
||||||
build:
|
build:
|
||||||
|
- python
|
||||||
- {{ compiler('c') }}
|
- {{ compiler('c') }}
|
||||||
- {{compiler('cxx')}}
|
- {{compiler('cxx')}}
|
||||||
- python {{ python }}
|
- {{ pin_subpackage('slsdetlib', exact=True) }}
|
||||||
- setuptools
|
- setuptools
|
||||||
- sls_detector_lib
|
|
||||||
- pyzmq
|
|
||||||
- pybind11 2.4
|
|
||||||
host:
|
host:
|
||||||
- python
|
- python
|
||||||
- pybind11 2.4
|
|
||||||
- pyzmq
|
run:
|
||||||
- sls_detector_lib
|
|
||||||
- libstdcxx-ng
|
- libstdcxx-ng
|
||||||
- libgcc-ng
|
- libgcc-ng
|
||||||
run:
|
|
||||||
- python
|
- python
|
||||||
- numpy
|
- numpy
|
||||||
- sls_detector_lib=developer
|
- {{ pin_subpackage('slsdetlib', exact=True) }}
|
||||||
- pyzmq
|
|
||||||
- libstdcxx-ng
|
|
||||||
- libgcc-ng
|
|
||||||
test:
|
test:
|
||||||
imports:
|
imports:
|
||||||
- sls_detector
|
- slsdet
|
||||||
|
|
||||||
# requirements:
|
- name: slsdetgui
|
||||||
# build:
|
script: copy_gui.sh
|
||||||
# - {{ compiler('c') }}
|
requirements:
|
||||||
# - {{compiler('cxx')}}
|
run:
|
||||||
|
- {{ pin_subpackage('slsdetlib', exact=True) }}
|
||||||
# - name: sls_detector_gui
|
- qwt 6.*
|
||||||
# version: "refactor"
|
- qt 4.8.*
|
||||||
# script: copy_gui.sh
|
|
||||||
# requirements:
|
|
||||||
# build:
|
|
||||||
# - {{ compiler('c') }}
|
|
||||||
# - {{compiler('cxx')}}
|
|
||||||
# - cmake
|
|
||||||
# - qwt 6.*
|
|
||||||
# - qt=4.8.7=7
|
|
||||||
# - zeromq=4.2.5=hfc679d8_5
|
|
||||||
# - pyzmq
|
|
||||||
# - xorg-libx11
|
|
||||||
# - xorg-libice
|
|
||||||
# - xorg-libxext
|
|
||||||
# - xorg-libsm
|
|
||||||
# - xorg-libxau
|
|
||||||
# - xorg-libxrender
|
|
||||||
# - xorg-libxfixes
|
|
||||||
# - {{ cdt('mesa-libgl-devel') }} # [linux]
|
|
||||||
# - {{ cdt('mesa-libegl-devel') }} # [linux]
|
|
||||||
# - {{ cdt('mesa-dri-drivers') }} # [linux]
|
|
||||||
# - {{ cdt('libselinux') }} # [linux]
|
|
||||||
# - {{ cdt('libxdamage') }} # [linux]
|
|
||||||
# - {{ cdt('libxxf86vm') }} # [linux]
|
|
||||||
# run:
|
|
||||||
# - sls_detector_lib=refactor
|
|
||||||
# - qwt 6.*
|
|
||||||
# - qt=4.8.7=7
|
|
||||||
|
@ -71,6 +71,11 @@ target_link_libraries(ctbRootLib PUBLIC
|
|||||||
${ROOT_EXE_LINKER_FLAGS}
|
${ROOT_EXE_LINKER_FLAGS}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set_target_properties(
|
||||||
|
ctbRootLib PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
||||||
|
)
|
||||||
|
|
||||||
target_link_libraries(ctbGui PUBLIC
|
target_link_libraries(ctbGui PUBLIC
|
||||||
slsDetectorShared
|
slsDetectorShared
|
||||||
slsSupportLib
|
slsSupportLib
|
||||||
@ -80,4 +85,5 @@ target_link_libraries(ctbGui PUBLIC
|
|||||||
|
|
||||||
set_target_properties(ctbGui PROPERTIES
|
set_target_properties(ctbGui PROPERTIES
|
||||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
||||||
|
|
||||||
)
|
)
|
@ -12,7 +12,7 @@ file writing etc.
|
|||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
from sls_detector import Eiger
|
from slsdet import Eiger
|
||||||
|
|
||||||
d = Eiger()
|
d = Eiger()
|
||||||
threshold = range(0, 2000, 200)
|
threshold = range(0, 2000, 200)
|
||||||
|
@ -1,20 +1,22 @@
|
|||||||
|
|
||||||
pybind11_add_module(_sls_detector
|
# find_package (Python COMPONENTS Interpreter Development)
|
||||||
|
|
||||||
|
pybind11_add_module(_slsdet
|
||||||
src/main.cpp
|
src/main.cpp
|
||||||
src/enums.cpp
|
src/enums.cpp
|
||||||
src/detector.cpp
|
src/detector.cpp
|
||||||
src/network.cpp
|
src/network.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(_sls_detector PUBLIC
|
target_link_libraries(_slsdet PUBLIC
|
||||||
slsDetectorShared
|
slsDetectorShared
|
||||||
slsReceiverShared
|
slsReceiverShared
|
||||||
slsSupportLib
|
slsSupportLib
|
||||||
zmq )
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
set_target_properties(_sls_detector PROPERTIES
|
set_target_properties(_slsdet PROPERTIES
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -38,8 +40,8 @@ set( PYTHON_FILES
|
|||||||
)
|
)
|
||||||
|
|
||||||
foreach(FILE ${PYTHON_FILES})
|
foreach(FILE ${PYTHON_FILES})
|
||||||
configure_file( sls_detector/${FILE}
|
configure_file( slsdet/${FILE}
|
||||||
${CMAKE_BINARY_DIR}/bin/sls_detector/${FILE} )
|
${CMAKE_BINARY_DIR}/bin/slsdet/${FILE} )
|
||||||
|
|
||||||
endforeach(FILE ${PYTHON_FILES})
|
endforeach(FILE ${PYTHON_FILES})
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import sys
|
|||||||
import setuptools
|
import setuptools
|
||||||
import os
|
import os
|
||||||
|
|
||||||
__version__ = 'refactor'
|
__version__ = 'udp'
|
||||||
|
|
||||||
|
|
||||||
def get_conda_path():
|
def get_conda_path():
|
||||||
@ -19,31 +19,32 @@ def get_conda_path():
|
|||||||
return os.environ['CONDA_PREFIX']
|
return os.environ['CONDA_PREFIX']
|
||||||
|
|
||||||
|
|
||||||
class get_pybind_include(object):
|
# class get_pybind_include(object):
|
||||||
"""Helper class to determine the pybind11 include path
|
# """Helper class to determine the pybind11 include path
|
||||||
The purpose of this class is to postpone importing pybind11
|
# The purpose of this class is to postpone importing pybind11
|
||||||
until it is actually installed, so that the ``get_include()``
|
# until it is actually installed, so that the ``get_include()``
|
||||||
method can be invoked. """
|
# method can be invoked. """
|
||||||
|
|
||||||
def __init__(self, user=False):
|
# def __init__(self, user=False):
|
||||||
self.user = user
|
# self.user = user
|
||||||
|
|
||||||
def __str__(self):
|
# def __str__(self):
|
||||||
import pybind11
|
# import pybind11
|
||||||
return pybind11.get_include(self.user)
|
# return pybind11.get_include(self.user)
|
||||||
|
|
||||||
|
|
||||||
ext_modules = [
|
ext_modules = [
|
||||||
Extension(
|
Extension(
|
||||||
'_sls_detector',
|
'_slsdet',
|
||||||
['src/main.cpp',
|
['src/main.cpp',
|
||||||
'src/enums.cpp',
|
'src/enums.cpp',
|
||||||
'src/detector.cpp',
|
'src/detector.cpp',
|
||||||
'src/network.cpp'],
|
'src/network.cpp'],
|
||||||
include_dirs=[
|
include_dirs=[
|
||||||
# Path to pybind11 headers
|
# Path to pybind11 headers
|
||||||
get_pybind_include(),
|
# get_pybind_include(),
|
||||||
get_pybind_include(user=True),
|
# get_pybind_include(user=True),
|
||||||
|
os.path.join('../libs/pybind11/include'),
|
||||||
os.path.join(get_conda_path(), 'include/slsDetectorPackage'),
|
os.path.join(get_conda_path(), 'include/slsDetectorPackage'),
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -109,20 +110,28 @@ class BuildExt(build_ext):
|
|||||||
opts.append('/DVERSION_INFO=\\"%s\\"' % self.distribution.get_version())
|
opts.append('/DVERSION_INFO=\\"%s\\"' % self.distribution.get_version())
|
||||||
for ext in self.extensions:
|
for ext in self.extensions:
|
||||||
ext.extra_compile_args = opts
|
ext.extra_compile_args = opts
|
||||||
|
|
||||||
|
print('**************************************************')
|
||||||
|
print(ct)
|
||||||
|
print(opts)
|
||||||
|
print('**************************************************')
|
||||||
build_ext.build_extensions(self)
|
build_ext.build_extensions(self)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_shared_lib():
|
||||||
|
return [f for f in os.listdir('.') if '_slsdet' in f]
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='sls_detector',
|
name='slsdet',
|
||||||
version=__version__,
|
version=__version__,
|
||||||
author='Erik Frojdh',
|
author='Erik Frojdh',
|
||||||
author_email='erik.frojdh@psi.ch',
|
author_email='erik.frojdh@psi.ch',
|
||||||
url='https://github.com/slsdetectorgroup/sls_detector',
|
url='https://github.com/slsdetectorgroup/slsDetectorPackage',
|
||||||
description='Detector API for SLS Detector Group detectors',
|
description='Detector API for SLS Detector Group detectors',
|
||||||
long_description='',
|
long_description='',
|
||||||
packages=find_packages(exclude=['contrib', 'docs', 'tests']),
|
packages=find_packages(exclude=['contrib', 'docs', 'tests']),
|
||||||
ext_modules=ext_modules,
|
ext_modules=ext_modules,
|
||||||
install_requires=['pybind11>=2.2'],
|
|
||||||
cmdclass={'build_ext': BuildExt},
|
cmdclass={'build_ext': BuildExt},
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
)
|
)
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
# from .detector import Detector, DetectorError, free_shared_memory
|
|
||||||
from .eiger import Eiger
|
|
||||||
from .ctb import Ctb
|
|
||||||
from .dacs import DetectorDacs, Dac
|
|
||||||
from .detector import Detector
|
|
||||||
from .jungfrau import Jungfrau
|
|
||||||
from .mythen3 import Mythen3
|
|
||||||
# from .jungfrau_ctb import JungfrauCTB
|
|
||||||
# from _sls_detector import DetectorApi
|
|
||||||
|
|
||||||
import _sls_detector
|
|
||||||
|
|
||||||
defs = _sls_detector.slsDetectorDefs
|
|
||||||
runStatus = _sls_detector.slsDetectorDefs.runStatus
|
|
||||||
speedLevel = _sls_detector.slsDetectorDefs.speedLevel
|
|
||||||
timingMode = _sls_detector.slsDetectorDefs.timingMode
|
|
||||||
dacIndex = _sls_detector.slsDetectorDefs.dacIndex
|
|
||||||
detectorType = _sls_detector.slsDetectorDefs.detectorType
|
|
||||||
detectorSettings = _sls_detector.slsDetectorDefs.detectorSettings
|
|
||||||
readoutMode = _sls_detector.slsDetectorDefs.readoutMode
|
|
||||||
|
|
||||||
IpAddr = _sls_detector.IpAddr
|
|
||||||
MacAddr = _sls_detector.MacAddr
|
|
23
python/slsdet/__init__.py
Executable file
23
python/slsdet/__init__.py
Executable file
@ -0,0 +1,23 @@
|
|||||||
|
# from .detector import Detector, DetectorError, free_shared_memory
|
||||||
|
from .eiger import Eiger
|
||||||
|
from .ctb import Ctb
|
||||||
|
from .dacs import DetectorDacs, Dac
|
||||||
|
from .detector import Detector
|
||||||
|
from .jungfrau import Jungfrau
|
||||||
|
from .mythen3 import Mythen3
|
||||||
|
# from .jungfrau_ctb import JungfrauCTB
|
||||||
|
# from _slsdet import DetectorApi
|
||||||
|
|
||||||
|
import _slsdet
|
||||||
|
|
||||||
|
defs = _slsdet.slsDetectorDefs
|
||||||
|
runStatus = _slsdet.slsDetectorDefs.runStatus
|
||||||
|
speedLevel = _slsdet.slsDetectorDefs.speedLevel
|
||||||
|
timingMode = _slsdet.slsDetectorDefs.timingMode
|
||||||
|
dacIndex = _slsdet.slsDetectorDefs.dacIndex
|
||||||
|
detectorType = _slsdet.slsDetectorDefs.detectorType
|
||||||
|
detectorSettings = _slsdet.slsDetectorDefs.detectorSettings
|
||||||
|
readoutMode = _slsdet.slsDetectorDefs.readoutMode
|
||||||
|
|
||||||
|
IpAddr = _slsdet.IpAddr
|
||||||
|
MacAddr = _slsdet.MacAddr
|
@ -1,8 +1,8 @@
|
|||||||
from .detector import Detector
|
from .detector import Detector
|
||||||
from .utils import element_if_equal
|
from .utils import element_if_equal
|
||||||
from .dacs import DetectorDacs
|
from .dacs import DetectorDacs
|
||||||
import _sls_detector
|
import _slsdet
|
||||||
dacIndex = _sls_detector.slsDetectorDefs.dacIndex
|
dacIndex = _slsdet.slsDetectorDefs.dacIndex
|
||||||
from .detector_property import DetectorProperty
|
from .detector_property import DetectorProperty
|
||||||
|
|
||||||
class CtbDacs(DetectorDacs):
|
class CtbDacs(DetectorDacs):
|
@ -1,9 +1,9 @@
|
|||||||
from .detector_property import DetectorProperty
|
from .detector_property import DetectorProperty
|
||||||
from functools import partial
|
from functools import partial
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import _sls_detector
|
import _slsdet
|
||||||
from .detector import freeze
|
from .detector import freeze
|
||||||
dacIndex = _sls_detector.slsDetectorDefs.dacIndex
|
dacIndex = _slsdet.slsDetectorDefs.dacIndex
|
||||||
class Dac(DetectorProperty):
|
class Dac(DetectorProperty):
|
||||||
"""
|
"""
|
||||||
This class represents a dac on the detector. One instance handles all
|
This class represents a dac on the detector. One instance handles all
|
@ -1,5 +1,5 @@
|
|||||||
from _sls_detector import CppDetectorApi
|
from _slsdet import CppDetectorApi
|
||||||
from _sls_detector import slsDetectorDefs
|
from _slsdet import slsDetectorDefs
|
||||||
|
|
||||||
runStatus = slsDetectorDefs.runStatus
|
runStatus = slsDetectorDefs.runStatus
|
||||||
speedLevel = slsDetectorDefs.speedLevel
|
speedLevel = slsDetectorDefs.speedLevel
|
@ -11,8 +11,8 @@ from .detector import Detector
|
|||||||
|
|
||||||
# from .adcs import Adc, DetectorAdcs
|
# from .adcs import Adc, DetectorAdcs
|
||||||
from .dacs import DetectorDacs
|
from .dacs import DetectorDacs
|
||||||
import _sls_detector
|
import _slsdet
|
||||||
dacIndex = _sls_detector.slsDetectorDefs.dacIndex
|
dacIndex = _slsdet.slsDetectorDefs.dacIndex
|
||||||
from .detector_property import DetectorProperty
|
from .detector_property import DetectorProperty
|
||||||
# from .utils import element_if_equal
|
# from .utils import element_if_equal
|
||||||
# from sls_detector.errors import DetectorValueError, DetectorError
|
# from sls_detector.errors import DetectorValueError, DetectorError
|
@ -9,8 +9,8 @@ from .detector import Detector, freeze
|
|||||||
|
|
||||||
# from .adcs import Adc, DetectorAdcs
|
# from .adcs import Adc, DetectorAdcs
|
||||||
from .dacs import DetectorDacs
|
from .dacs import DetectorDacs
|
||||||
import _sls_detector
|
import _slsdet
|
||||||
dacIndex = _sls_detector.slsDetectorDefs.dacIndex
|
dacIndex = _slsdet.slsDetectorDefs.dacIndex
|
||||||
from .detector_property import DetectorProperty
|
from .detector_property import DetectorProperty
|
||||||
|
|
||||||
# @freeze
|
# @freeze
|
@ -9,8 +9,8 @@ from .detector import Detector, freeze
|
|||||||
|
|
||||||
# from .adcs import Adc, DetectorAdcs
|
# from .adcs import Adc, DetectorAdcs
|
||||||
from .dacs import DetectorDacs
|
from .dacs import DetectorDacs
|
||||||
import _sls_detector
|
import _slsdet
|
||||||
dacIndex = _sls_detector.slsDetectorDefs.dacIndex
|
dacIndex = _slsdet.slsDetectorDefs.dacIndex
|
||||||
from .detector_property import DetectorProperty
|
from .detector_property import DetectorProperty
|
||||||
|
|
||||||
# vcassh 1200,
|
# vcassh 1200,
|
@ -5,7 +5,7 @@ but not directly used in controlling the detector
|
|||||||
|
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
import _sls_detector #C++ lib
|
import _slsdet #C++ lib
|
||||||
import functools
|
import functools
|
||||||
|
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ def list_to_bitmask(values):
|
|||||||
return mask
|
return mask
|
||||||
|
|
||||||
def to_geo(value):
|
def to_geo(value):
|
||||||
if isinstance(value, _sls_detector.xy):
|
if isinstance(value, _slsdet.xy):
|
||||||
return Geometry(x = value.x, y = value.y)
|
return Geometry(x = value.x, y = value.y)
|
||||||
else:
|
else:
|
||||||
raise ValueError("Can only convert sls_detector.xy")
|
raise ValueError("Can only convert sls_detector.xy")
|
@ -2,7 +2,7 @@ C++ API
|
|||||||
=====================================================
|
=====================================================
|
||||||
|
|
||||||
|
|
||||||
.. py:currentmodule:: _sls_detector
|
.. py:currentmodule:: _slsdet
|
||||||
|
|
||||||
.. autoclass:: DetectorApi
|
.. autoclass:: DetectorApi
|
||||||
:members:
|
:members:
|
||||||
|
@ -610,6 +610,8 @@ void init_det(py::module &m) {
|
|||||||
py::arg() = Positions{})
|
py::arg() = Positions{})
|
||||||
.def("writeAdcRegister", &Detector::writeAdcRegister, py::arg(),
|
.def("writeAdcRegister", &Detector::writeAdcRegister, py::arg(),
|
||||||
py::arg(), py::arg() = Positions{})
|
py::arg(), py::arg() = Positions{})
|
||||||
|
.def("getInitialChecks", &Detector::getInitialChecks)
|
||||||
|
.def("setInitialChecks", &Detector::setInitialChecks, py::arg())
|
||||||
.def("getControlPort", &Detector::getControlPort,
|
.def("getControlPort", &Detector::getControlPort,
|
||||||
py::arg() = Positions{})
|
py::arg() = Positions{})
|
||||||
.def("setControlPort", &Detector::setControlPort, py::arg(),
|
.def("setControlPort", &Detector::setControlPort, py::arg(),
|
||||||
|
@ -19,7 +19,7 @@ void init_enums(py::module &);
|
|||||||
void init_experimental(py::module &);
|
void init_experimental(py::module &);
|
||||||
void init_det(py::module &);
|
void init_det(py::module &);
|
||||||
void init_network(py::module &);
|
void init_network(py::module &);
|
||||||
PYBIND11_MODULE(_sls_detector, m) {
|
PYBIND11_MODULE(_slsdet, m) {
|
||||||
m.doc() = R"pbdoc(
|
m.doc() = R"pbdoc(
|
||||||
C/C++ API
|
C/C++ API
|
||||||
-----------------------
|
-----------------------
|
||||||
|
@ -16,12 +16,12 @@ def d():
|
|||||||
|
|
||||||
|
|
||||||
def test_acq_call(d, mocker):
|
def test_acq_call(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.acq')
|
m = mocker.patch('_slsdet.DetectorApi.acq')
|
||||||
d.acq()
|
d.acq()
|
||||||
m.assert_called_once_with()
|
m.assert_called_once_with()
|
||||||
|
|
||||||
def test_busy_call(d, mocker):
|
def test_busy_call(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getAcquiringFlag')
|
m = mocker.patch('_slsdet.DetectorApi.getAcquiringFlag')
|
||||||
m.return_value = False
|
m.return_value = False
|
||||||
assert d.busy == False
|
assert d.busy == False
|
||||||
|
|
||||||
@ -31,103 +31,103 @@ def test_assign_to_detector_type(d):
|
|||||||
d.detector_type = 'Eiger'
|
d.detector_type = 'Eiger'
|
||||||
|
|
||||||
def test_det_type(d, mocker):
|
def test_det_type(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getDetectorType')
|
m = mocker.patch('_slsdet.DetectorApi.getDetectorType')
|
||||||
m.return_value = 'Eiger'
|
m.return_value = 'Eiger'
|
||||||
assert d.detector_type == 'Eiger'
|
assert d.detector_type == 'Eiger'
|
||||||
|
|
||||||
def test_set_dynamic_range_4(d, mocker):
|
def test_set_dynamic_range_4(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setDynamicRange')
|
m = mocker.patch('_slsdet.DetectorApi.setDynamicRange')
|
||||||
d.dynamic_range = 4
|
d.dynamic_range = 4
|
||||||
m.assert_called_with(4)
|
m.assert_called_with(4)
|
||||||
|
|
||||||
def test_set_dynamic_range_8(d, mocker):
|
def test_set_dynamic_range_8(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setDynamicRange')
|
m = mocker.patch('_slsdet.DetectorApi.setDynamicRange')
|
||||||
d.dynamic_range = 8
|
d.dynamic_range = 8
|
||||||
m.assert_called_with(8)
|
m.assert_called_with(8)
|
||||||
|
|
||||||
|
|
||||||
def test_set_dynamic_range_16(d, mocker):
|
def test_set_dynamic_range_16(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setDynamicRange')
|
m = mocker.patch('_slsdet.DetectorApi.setDynamicRange')
|
||||||
d.dynamic_range = 16
|
d.dynamic_range = 16
|
||||||
m.assert_called_with(16)
|
m.assert_called_with(16)
|
||||||
|
|
||||||
def test_set_dynamic_range_32(d, mocker):
|
def test_set_dynamic_range_32(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setDynamicRange')
|
m = mocker.patch('_slsdet.DetectorApi.setDynamicRange')
|
||||||
d.dynamic_range = 32
|
d.dynamic_range = 32
|
||||||
m.assert_called_with(32)
|
m.assert_called_with(32)
|
||||||
|
|
||||||
def test_set_dynamic_range_raises_exception(d, mocker):
|
def test_set_dynamic_range_raises_exception(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.setDynamicRange')
|
mocker.patch('_slsdet.DetectorApi.setDynamicRange')
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
d.dynamic_range = 17
|
d.dynamic_range = 17
|
||||||
|
|
||||||
def test_get_dynamic_range_32(d, mocker):
|
def test_get_dynamic_range_32(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getDynamicRange')
|
m = mocker.patch('_slsdet.DetectorApi.getDynamicRange')
|
||||||
m.return_value = 32
|
m.return_value = 32
|
||||||
dr = d.dynamic_range
|
dr = d.dynamic_range
|
||||||
assert dr == 32
|
assert dr == 32
|
||||||
|
|
||||||
def test_eiger_matrix_reset(d, mocker):
|
def test_eiger_matrix_reset(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getCounterBit')
|
m = mocker.patch('_slsdet.DetectorApi.getCounterBit')
|
||||||
m.return_value = True
|
m.return_value = True
|
||||||
assert d.eiger_matrix_reset == True
|
assert d.eiger_matrix_reset == True
|
||||||
|
|
||||||
def test_set_eiger_matrix_reset(d, mocker):
|
def test_set_eiger_matrix_reset(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setCounterBit')
|
m = mocker.patch('_slsdet.DetectorApi.setCounterBit')
|
||||||
d.eiger_matrix_reset = True
|
d.eiger_matrix_reset = True
|
||||||
m.assert_called_once_with(True)
|
m.assert_called_once_with(True)
|
||||||
|
|
||||||
|
|
||||||
def test_get_exposure_time(d, mocker):
|
def test_get_exposure_time(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getExposureTime')
|
m = mocker.patch('_slsdet.DetectorApi.getExposureTime')
|
||||||
m.return_value = 100000000
|
m.return_value = 100000000
|
||||||
assert d.exposure_time == 0.1
|
assert d.exposure_time == 0.1
|
||||||
|
|
||||||
def test_set_exposure_time(d, mocker):
|
def test_set_exposure_time(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setExposureTime')
|
m = mocker.patch('_slsdet.DetectorApi.setExposureTime')
|
||||||
d.exposure_time = 1.5
|
d.exposure_time = 1.5
|
||||||
m.assert_called_once_with(1500000000)
|
m.assert_called_once_with(1500000000)
|
||||||
|
|
||||||
def test_set_exposure_time_less_than_zero(d, mocker):
|
def test_set_exposure_time_less_than_zero(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.setExposureTime')
|
mocker.patch('_slsdet.DetectorApi.setExposureTime')
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
d.exposure_time = -7
|
d.exposure_time = -7
|
||||||
|
|
||||||
|
|
||||||
def test_get_file_index(d, mocker):
|
def test_get_file_index(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getFileIndex')
|
m = mocker.patch('_slsdet.DetectorApi.getFileIndex')
|
||||||
m.return_value = 8
|
m.return_value = 8
|
||||||
assert d.file_index == 8
|
assert d.file_index == 8
|
||||||
|
|
||||||
def test_set_file_index(d, mocker):
|
def test_set_file_index(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setFileIndex')
|
m = mocker.patch('_slsdet.DetectorApi.setFileIndex')
|
||||||
d.file_index = 9
|
d.file_index = 9
|
||||||
m.assert_called_with(9)
|
m.assert_called_with(9)
|
||||||
|
|
||||||
|
|
||||||
def test_set_file_index_raises_on_neg(d, mocker):
|
def test_set_file_index_raises_on_neg(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.setFileIndex')
|
mocker.patch('_slsdet.DetectorApi.setFileIndex')
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
d.file_index = -9
|
d.file_index = -9
|
||||||
|
|
||||||
|
|
||||||
def test_get_file_name(d, mocker):
|
def test_get_file_name(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getFileName')
|
m = mocker.patch('_slsdet.DetectorApi.getFileName')
|
||||||
d.file_name
|
d.file_name
|
||||||
m.assert_called_once_with()
|
m.assert_called_once_with()
|
||||||
|
|
||||||
def test_set_file_name(d, mocker):
|
def test_set_file_name(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setFileName')
|
m = mocker.patch('_slsdet.DetectorApi.setFileName')
|
||||||
d.file_name = 'hej'
|
d.file_name = 'hej'
|
||||||
m.assert_called_once_with('hej')
|
m.assert_called_once_with('hej')
|
||||||
|
|
||||||
def test_get_file_path(d, mocker):
|
def test_get_file_path(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getFilePath')
|
m = mocker.patch('_slsdet.DetectorApi.getFilePath')
|
||||||
d.file_path
|
d.file_path
|
||||||
m.assert_called_once_with()
|
m.assert_called_once_with()
|
||||||
|
|
||||||
def test_set_file_path_when_path_exists(d, mocker):
|
def test_set_file_path_when_path_exists(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setFilePath')
|
m = mocker.patch('_slsdet.DetectorApi.setFilePath')
|
||||||
#To avoid raising an exception because path is not there
|
#To avoid raising an exception because path is not there
|
||||||
mock_os = mocker.patch('os.path.exists')
|
mock_os = mocker.patch('os.path.exists')
|
||||||
mock_os.return_value = True
|
mock_os.return_value = True
|
||||||
@ -135,25 +135,25 @@ def test_set_file_path_when_path_exists(d, mocker):
|
|||||||
m.assert_called_once_with('/path/to/something/')
|
m.assert_called_once_with('/path/to/something/')
|
||||||
|
|
||||||
def test_set_file_path_raises_when_not_exists(d, mocker):
|
def test_set_file_path_raises_when_not_exists(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.setFilePath')
|
mocker.patch('_slsdet.DetectorApi.setFilePath')
|
||||||
mock_os = mocker.patch('os.path.exists')
|
mock_os = mocker.patch('os.path.exists')
|
||||||
mock_os.return_value = False
|
mock_os.return_value = False
|
||||||
with pytest.raises(FileNotFoundError):
|
with pytest.raises(FileNotFoundError):
|
||||||
d.file_path = '/path/to/something/'
|
d.file_path = '/path/to/something/'
|
||||||
|
|
||||||
def test_get_file_write(d, mocker):
|
def test_get_file_write(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getFileWrite')
|
m = mocker.patch('_slsdet.DetectorApi.getFileWrite')
|
||||||
m.return_value = False
|
m.return_value = False
|
||||||
assert d.file_write == False
|
assert d.file_write == False
|
||||||
|
|
||||||
def test_set_file_write(d, mocker):
|
def test_set_file_write(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setFileWrite')
|
m = mocker.patch('_slsdet.DetectorApi.setFileWrite')
|
||||||
d.file_write = True
|
d.file_write = True
|
||||||
m.assert_called_once_with(True)
|
m.assert_called_once_with(True)
|
||||||
|
|
||||||
|
|
||||||
def test_get_firmware_version(d, mocker):
|
def test_get_firmware_version(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getFirmwareVersion')
|
m = mocker.patch('_slsdet.DetectorApi.getFirmwareVersion')
|
||||||
m.return_value = 20
|
m.return_value = 20
|
||||||
assert d.firmware_version == 20
|
assert d.firmware_version == 20
|
||||||
|
|
||||||
@ -162,38 +162,38 @@ def test_cannot_set_fw_version(d):
|
|||||||
d.firmware_version = 20
|
d.firmware_version = 20
|
||||||
|
|
||||||
def test_get_high_voltage_call_signature(d, mocker):
|
def test_get_high_voltage_call_signature(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getDac')
|
m = mocker.patch('_slsdet.DetectorApi.getDac')
|
||||||
d.high_voltage
|
d.high_voltage
|
||||||
m.assert_called_once_with('vhighvoltage', -1)
|
m.assert_called_once_with('vhighvoltage', -1)
|
||||||
|
|
||||||
def test_get_high_voltage(d, mocker):
|
def test_get_high_voltage(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getDac')
|
m = mocker.patch('_slsdet.DetectorApi.getDac')
|
||||||
m.return_value = 80
|
m.return_value = 80
|
||||||
assert d.high_voltage == 80
|
assert d.high_voltage == 80
|
||||||
|
|
||||||
#self._api.setDac('vhighvoltage', -1, voltage)
|
#self._api.setDac('vhighvoltage', -1, voltage)
|
||||||
def test_set_high_voltage(d, mocker):
|
def test_set_high_voltage(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setDac')
|
m = mocker.patch('_slsdet.DetectorApi.setDac')
|
||||||
d.high_voltage = 80
|
d.high_voltage = 80
|
||||||
m.assert_called_once_with('vhighvoltage', -1, 80)
|
m.assert_called_once_with('vhighvoltage', -1, 80)
|
||||||
|
|
||||||
def test_decode_hostname_two_names(d, mocker):
|
def test_decode_hostname_two_names(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getHostname')
|
m = mocker.patch('_slsdet.DetectorApi.getHostname')
|
||||||
m.return_value = 'beb059+beb048+'
|
m.return_value = 'beb059+beb048+'
|
||||||
assert d.hostname == ['beb059', 'beb048']
|
assert d.hostname == ['beb059', 'beb048']
|
||||||
|
|
||||||
def test_decode_hostname_four_names(d, mocker):
|
def test_decode_hostname_four_names(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getHostname')
|
m = mocker.patch('_slsdet.DetectorApi.getHostname')
|
||||||
m.return_value = 'beb059+beb048+beb120+beb153+'
|
m.return_value = 'beb059+beb048+beb120+beb153+'
|
||||||
assert d.hostname == ['beb059', 'beb048', 'beb120', 'beb153']
|
assert d.hostname == ['beb059', 'beb048', 'beb120', 'beb153']
|
||||||
|
|
||||||
def test_decode_hostname_blank(d, mocker):
|
def test_decode_hostname_blank(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getHostname')
|
m = mocker.patch('_slsdet.DetectorApi.getHostname')
|
||||||
m.return_value = ''
|
m.return_value = ''
|
||||||
assert d.hostname == []
|
assert d.hostname == []
|
||||||
|
|
||||||
def test_get_image_size_gives_correct_size(d, mocker):
|
def test_get_image_size_gives_correct_size(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getImageSize')
|
m = mocker.patch('_slsdet.DetectorApi.getImageSize')
|
||||||
m.return_value = (512,1024)
|
m.return_value = (512,1024)
|
||||||
im_size = d.image_size
|
im_size = d.image_size
|
||||||
assert im_size.rows == 512
|
assert im_size.rows == 512
|
||||||
@ -202,7 +202,7 @@ def test_get_image_size_gives_correct_size(d, mocker):
|
|||||||
|
|
||||||
|
|
||||||
def test_load_config(d, mocker):
|
def test_load_config(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.readConfigurationFile')
|
m = mocker.patch('_slsdet.DetectorApi.readConfigurationFile')
|
||||||
#To avoid raising an exception because path is not there
|
#To avoid raising an exception because path is not there
|
||||||
mock_os = mocker.patch('os.path.isfile')
|
mock_os = mocker.patch('os.path.isfile')
|
||||||
mock_os.return_value = True
|
mock_os.return_value = True
|
||||||
@ -210,14 +210,14 @@ def test_load_config(d, mocker):
|
|||||||
m.assert_called_once_with('/path/to/my/file.config')
|
m.assert_called_once_with('/path/to/my/file.config')
|
||||||
|
|
||||||
def test_load_config_raises_when_file_is_not_found(d, mocker):
|
def test_load_config_raises_when_file_is_not_found(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.readConfigurationFile')
|
mocker.patch('_slsdet.DetectorApi.readConfigurationFile')
|
||||||
mock_os = mocker.patch('os.path.isfile')
|
mock_os = mocker.patch('os.path.isfile')
|
||||||
mock_os.return_value = False
|
mock_os.return_value = False
|
||||||
with pytest.raises(FileNotFoundError):
|
with pytest.raises(FileNotFoundError):
|
||||||
d.load_config('/path/to/my/file.config')
|
d.load_config('/path/to/my/file.config')
|
||||||
|
|
||||||
def test_load_parameters(d, mocker):
|
def test_load_parameters(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.readParametersFile')
|
m = mocker.patch('_slsdet.DetectorApi.readParametersFile')
|
||||||
#To avoid raising an exception because path is not there
|
#To avoid raising an exception because path is not there
|
||||||
mock_os = mocker.patch('os.path.isfile')
|
mock_os = mocker.patch('os.path.isfile')
|
||||||
mock_os.return_value = True
|
mock_os.return_value = True
|
||||||
@ -225,7 +225,7 @@ def test_load_parameters(d, mocker):
|
|||||||
m.assert_called_once_with('/path/to/my/file.par')
|
m.assert_called_once_with('/path/to/my/file.par')
|
||||||
|
|
||||||
def test_load_parameters_raises_when_file_is_not_found(d, mocker):
|
def test_load_parameters_raises_when_file_is_not_found(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.readParametersFile')
|
mocker.patch('_slsdet.DetectorApi.readParametersFile')
|
||||||
mock_os = mocker.patch('os.path.isfile')
|
mock_os = mocker.patch('os.path.isfile')
|
||||||
mock_os.return_value = False
|
mock_os.return_value = False
|
||||||
with pytest.raises(FileNotFoundError):
|
with pytest.raises(FileNotFoundError):
|
||||||
@ -233,14 +233,14 @@ def test_load_parameters_raises_when_file_is_not_found(d, mocker):
|
|||||||
|
|
||||||
#getDetectorGeometry
|
#getDetectorGeometry
|
||||||
def test_get_module_geometry_gives_correct_size(d, mocker):
|
def test_get_module_geometry_gives_correct_size(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getDetectorGeometry')
|
m = mocker.patch('_slsdet.DetectorApi.getDetectorGeometry')
|
||||||
m.return_value = (13,7)
|
m.return_value = (13,7)
|
||||||
g = d.module_geometry
|
g = d.module_geometry
|
||||||
assert g.vertical == 7
|
assert g.vertical == 7
|
||||||
assert g.horizontal == 13
|
assert g.horizontal == 13
|
||||||
|
|
||||||
def test_get_module_geometry_access(d, mocker):
|
def test_get_module_geometry_access(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getDetectorGeometry')
|
m = mocker.patch('_slsdet.DetectorApi.getDetectorGeometry')
|
||||||
m.return_value = (12,3)
|
m.return_value = (12,3)
|
||||||
assert d.module_geometry[0] == 12
|
assert d.module_geometry[0] == 12
|
||||||
assert d.module_geometry[1] == 3
|
assert d.module_geometry[1] == 3
|
||||||
@ -248,237 +248,237 @@ def test_get_module_geometry_access(d, mocker):
|
|||||||
assert d.module_geometry.horizontal == 12
|
assert d.module_geometry.horizontal == 12
|
||||||
|
|
||||||
def test_get_n_frames(d, mocker):
|
def test_get_n_frames(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getNumberOfFrames')
|
m = mocker.patch('_slsdet.DetectorApi.getNumberOfFrames')
|
||||||
m.return_value = 3
|
m.return_value = 3
|
||||||
assert d.n_frames == 3
|
assert d.n_frames == 3
|
||||||
|
|
||||||
def test_set_n_frames(d, mocker):
|
def test_set_n_frames(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setNumberOfFrames')
|
m = mocker.patch('_slsdet.DetectorApi.setNumberOfFrames')
|
||||||
d.n_frames = 9
|
d.n_frames = 9
|
||||||
m.assert_called_once_with(9)
|
m.assert_called_once_with(9)
|
||||||
|
|
||||||
def test_set_n_frames_raises_on_neg(d, mocker):
|
def test_set_n_frames_raises_on_neg(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.setNumberOfFrames')
|
mocker.patch('_slsdet.DetectorApi.setNumberOfFrames')
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
d.n_frames = -1
|
d.n_frames = -1
|
||||||
|
|
||||||
def test_set_n_frames_raises_on_zero(d, mocker):
|
def test_set_n_frames_raises_on_zero(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.setNumberOfFrames')
|
mocker.patch('_slsdet.DetectorApi.setNumberOfFrames')
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
d.n_frames = 0
|
d.n_frames = 0
|
||||||
|
|
||||||
def test_get_n_modules(d, mocker):
|
def test_get_n_modules(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getNumberOfDetectors')
|
m = mocker.patch('_slsdet.DetectorApi.getNumberOfDetectors')
|
||||||
m.return_value = 12
|
m.return_value = 12
|
||||||
assert d.n_modules == 12
|
assert d.n_modules == 12
|
||||||
|
|
||||||
def test_get_period_time(d, mocker):
|
def test_get_period_time(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getPeriod')
|
m = mocker.patch('_slsdet.DetectorApi.getPeriod')
|
||||||
m.return_value = 130000000
|
m.return_value = 130000000
|
||||||
assert d.period == 0.13
|
assert d.period == 0.13
|
||||||
|
|
||||||
def test_set_period_time(d, mocker):
|
def test_set_period_time(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setPeriod')
|
m = mocker.patch('_slsdet.DetectorApi.setPeriod')
|
||||||
d.period = 1.953
|
d.period = 1.953
|
||||||
m.assert_called_once_with(1953000000)
|
m.assert_called_once_with(1953000000)
|
||||||
|
|
||||||
def test_set_period_time_less_than_zero(d, mocker):
|
def test_set_period_time_less_than_zero(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.setPeriod')
|
mocker.patch('_slsdet.DetectorApi.setPeriod')
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
d.period = -7
|
d.period = -7
|
||||||
|
|
||||||
def test_pulse_chip_call(d, mocker):
|
def test_pulse_chip_call(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.pulseChip')
|
m = mocker.patch('_slsdet.DetectorApi.pulseChip')
|
||||||
d.pulse_chip(15)
|
d.pulse_chip(15)
|
||||||
m.assert_called_once_with(15)
|
m.assert_called_once_with(15)
|
||||||
|
|
||||||
def test_pulse_chip_call_minus_one(d, mocker):
|
def test_pulse_chip_call_minus_one(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.pulseChip')
|
m = mocker.patch('_slsdet.DetectorApi.pulseChip')
|
||||||
d.pulse_chip(-1)
|
d.pulse_chip(-1)
|
||||||
m.assert_called_once_with(-1)
|
m.assert_called_once_with(-1)
|
||||||
|
|
||||||
def test_pulse_chip_asserts_on_smaller_than_minus_one(d, mocker):
|
def test_pulse_chip_asserts_on_smaller_than_minus_one(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.pulseChip')
|
mocker.patch('_slsdet.DetectorApi.pulseChip')
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
d.pulse_chip(-3)
|
d.pulse_chip(-3)
|
||||||
#--------------------------------------------------------------------subexptime
|
#--------------------------------------------------------------------subexptime
|
||||||
def test_get_sub_exposure_time(d, mocker):
|
def test_get_sub_exposure_time(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getSubExposureTime')
|
m = mocker.patch('_slsdet.DetectorApi.getSubExposureTime')
|
||||||
m.return_value = 2370000
|
m.return_value = 2370000
|
||||||
assert d.sub_exposure_time == 0.00237
|
assert d.sub_exposure_time == 0.00237
|
||||||
|
|
||||||
|
|
||||||
def test_set_sub_exposure_time(d, mocker):
|
def test_set_sub_exposure_time(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setSubExposureTime')
|
m = mocker.patch('_slsdet.DetectorApi.setSubExposureTime')
|
||||||
d.sub_exposure_time = 0.002
|
d.sub_exposure_time = 0.002
|
||||||
m.assert_called_once_with(2000000)
|
m.assert_called_once_with(2000000)
|
||||||
|
|
||||||
def test_set_sub_exposure_time_raises_on_zero(d, mocker):
|
def test_set_sub_exposure_time_raises_on_zero(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.setSubExposureTime')
|
mocker.patch('_slsdet.DetectorApi.setSubExposureTime')
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
d.sub_exposure_time = 0
|
d.sub_exposure_time = 0
|
||||||
|
|
||||||
#-------------------------------------------------------------Rate correction
|
#-------------------------------------------------------------Rate correction
|
||||||
def test_get_rate_correction(d, mocker):
|
def test_get_rate_correction(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getRateCorrection')
|
m = mocker.patch('_slsdet.DetectorApi.getRateCorrection')
|
||||||
m.return_value = [132,129]
|
m.return_value = [132,129]
|
||||||
assert d.rate_correction == [132,129]
|
assert d.rate_correction == [132,129]
|
||||||
|
|
||||||
def test_set_rate_correction(d, mocker):
|
def test_set_rate_correction(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setRateCorrection')
|
m = mocker.patch('_slsdet.DetectorApi.setRateCorrection')
|
||||||
mock_n = mocker.patch('_sls_detector.DetectorApi.getNumberOfDetectors')
|
mock_n = mocker.patch('_slsdet.DetectorApi.getNumberOfDetectors')
|
||||||
mock_n.return_value = 3
|
mock_n.return_value = 3
|
||||||
d.rate_correction = [123,90,50]
|
d.rate_correction = [123,90,50]
|
||||||
m.assert_called_once_with([123,90,50])
|
m.assert_called_once_with([123,90,50])
|
||||||
|
|
||||||
def test_set_rate_correction_raises_on_wrong_number_of_values(d, mocker):
|
def test_set_rate_correction_raises_on_wrong_number_of_values(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.setRateCorrection')
|
mocker.patch('_slsdet.DetectorApi.setRateCorrection')
|
||||||
mock_n = mocker.patch('_sls_detector.DetectorApi.getNumberOfDetectors')
|
mock_n = mocker.patch('_slsdet.DetectorApi.getNumberOfDetectors')
|
||||||
mock_n.return_value = 4
|
mock_n.return_value = 4
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
d.rate_correction = [123,90,50]
|
d.rate_correction = [123,90,50]
|
||||||
|
|
||||||
#----------------------------------------------------------------Readout clock
|
#----------------------------------------------------------------Readout clock
|
||||||
def test_get_readout_clock_0(d, mocker):
|
def test_get_readout_clock_0(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed')
|
m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed')
|
||||||
m.return_value = 0
|
m.return_value = 0
|
||||||
assert d.readout_clock == 'Full Speed'
|
assert d.readout_clock == 'Full Speed'
|
||||||
|
|
||||||
def test_get_readout_clock_1(d, mocker):
|
def test_get_readout_clock_1(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed')
|
m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed')
|
||||||
m.return_value = 1
|
m.return_value = 1
|
||||||
assert d.readout_clock == 'Half Speed'
|
assert d.readout_clock == 'Half Speed'
|
||||||
|
|
||||||
def test_get_readout_clock_2(d, mocker):
|
def test_get_readout_clock_2(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed')
|
m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed')
|
||||||
m.return_value = 2
|
m.return_value = 2
|
||||||
assert d.readout_clock == 'Quarter Speed'
|
assert d.readout_clock == 'Quarter Speed'
|
||||||
|
|
||||||
def test_get_readout_clock_3(d, mocker):
|
def test_get_readout_clock_3(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed')
|
m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed')
|
||||||
m.return_value = 3
|
m.return_value = 3
|
||||||
assert d.readout_clock == 'Super Slow Speed'
|
assert d.readout_clock == 'Super Slow Speed'
|
||||||
|
|
||||||
def test_set_readout_clock_0(d, mocker):
|
def test_set_readout_clock_0(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed')
|
m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed')
|
||||||
d.readout_clock = 'Full Speed'
|
d.readout_clock = 'Full Speed'
|
||||||
m.assert_called_once_with(0)
|
m.assert_called_once_with(0)
|
||||||
|
|
||||||
def test_set_readout_clock_1(d, mocker):
|
def test_set_readout_clock_1(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed')
|
m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed')
|
||||||
d.readout_clock = 'Half Speed'
|
d.readout_clock = 'Half Speed'
|
||||||
m.assert_called_once_with(1)
|
m.assert_called_once_with(1)
|
||||||
|
|
||||||
def test_set_readout_clock_2(d, mocker):
|
def test_set_readout_clock_2(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed')
|
m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed')
|
||||||
d.readout_clock = 'Quarter Speed'
|
d.readout_clock = 'Quarter Speed'
|
||||||
m.assert_called_once_with(2)
|
m.assert_called_once_with(2)
|
||||||
|
|
||||||
def test_set_readout_clock_3(d, mocker):
|
def test_set_readout_clock_3(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed')
|
m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed')
|
||||||
d.readout_clock = 'Super Slow Speed'
|
d.readout_clock = 'Super Slow Speed'
|
||||||
m.assert_called_once_with(3)
|
m.assert_called_once_with(3)
|
||||||
|
|
||||||
#----------------------------------------------------------------rx_datastream
|
#----------------------------------------------------------------rx_datastream
|
||||||
def test_get_rx_datastream(d, mocker):
|
def test_get_rx_datastream(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getRxDataStreamStatus')
|
m = mocker.patch('_slsdet.DetectorApi.getRxDataStreamStatus')
|
||||||
m.return_value = False
|
m.return_value = False
|
||||||
assert d.rx_datastream == False
|
assert d.rx_datastream == False
|
||||||
|
|
||||||
def test_set_rx_datastream(d, mocker):
|
def test_set_rx_datastream(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setRxDataStreamStatus')
|
m = mocker.patch('_slsdet.DetectorApi.setRxDataStreamStatus')
|
||||||
d.rx_datastream = True
|
d.rx_datastream = True
|
||||||
m.assert_called_once_with(True)
|
m.assert_called_once_with(True)
|
||||||
|
|
||||||
def test_get_rx_zmqip(d, mocker):
|
def test_get_rx_zmqip(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter')
|
m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter')
|
||||||
d.rx_zmqip
|
d.rx_zmqip
|
||||||
m.assert_called_once_with('rx_zmqip')
|
m.assert_called_once_with('rx_zmqip')
|
||||||
|
|
||||||
def test_get_rx_zmqport_call(d, mocker):
|
def test_get_rx_zmqport_call(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter')
|
m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter')
|
||||||
d.rx_zmqport
|
d.rx_zmqport
|
||||||
m.assert_called_once_with('rx_zmqport')
|
m.assert_called_once_with('rx_zmqport')
|
||||||
|
|
||||||
def test_get_rx_zmqport_decode(d, mocker):
|
def test_get_rx_zmqport_decode(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter')
|
m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter')
|
||||||
m.return_value = '30001+30003+'
|
m.return_value = '30001+30003+'
|
||||||
assert d.rx_zmqport == [30001, 30002, 30003, 30004]
|
assert d.rx_zmqport == [30001, 30002, 30003, 30004]
|
||||||
|
|
||||||
def test_get_rx_zmqport_empty(d, mocker):
|
def test_get_rx_zmqport_empty(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter')
|
m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter')
|
||||||
m.return_value = ''
|
m.return_value = ''
|
||||||
assert d.rx_zmqport == []
|
assert d.rx_zmqport == []
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------status
|
#--------------------------------------------------------------------status
|
||||||
def test_status_call(d, mocker):
|
def test_status_call(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getRunStatus')
|
m = mocker.patch('_slsdet.DetectorApi.getRunStatus')
|
||||||
d.status
|
d.status
|
||||||
m.assert_called_once_with()
|
m.assert_called_once_with()
|
||||||
|
|
||||||
def test_start_acq_call(d, mocker):
|
def test_start_acq_call(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.startAcquisition')
|
m = mocker.patch('_slsdet.DetectorApi.startAcquisition')
|
||||||
d.start_acq()
|
d.start_acq()
|
||||||
m.assert_called_once_with()
|
m.assert_called_once_with()
|
||||||
|
|
||||||
def test_stop_acq_call(d, mocker):
|
def test_stop_acq_call(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.stopAcquisition')
|
m = mocker.patch('_slsdet.DetectorApi.stopAcquisition')
|
||||||
d.stop_acq()
|
d.stop_acq()
|
||||||
m.assert_called_once_with()
|
m.assert_called_once_with()
|
||||||
|
|
||||||
#--------------------------------------------------------------------subexptime
|
#--------------------------------------------------------------------subexptime
|
||||||
def test_get_sub_exposure_time(d, mocker):
|
def test_get_sub_exposure_time(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getSubExposureTime')
|
m = mocker.patch('_slsdet.DetectorApi.getSubExposureTime')
|
||||||
m.return_value = 2370000
|
m.return_value = 2370000
|
||||||
assert d.sub_exposure_time == 0.00237
|
assert d.sub_exposure_time == 0.00237
|
||||||
|
|
||||||
|
|
||||||
def test_set_sub_exposure_time(d, mocker):
|
def test_set_sub_exposure_time(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setSubExposureTime')
|
m = mocker.patch('_slsdet.DetectorApi.setSubExposureTime')
|
||||||
d.sub_exposure_time = 0.002
|
d.sub_exposure_time = 0.002
|
||||||
m.assert_called_once_with(2000000)
|
m.assert_called_once_with(2000000)
|
||||||
|
|
||||||
def test_set_sub_exposure_time_raises_on_zero(d, mocker):
|
def test_set_sub_exposure_time_raises_on_zero(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.setSubExposureTime')
|
mocker.patch('_slsdet.DetectorApi.setSubExposureTime')
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
d.sub_exposure_time = 0
|
d.sub_exposure_time = 0
|
||||||
|
|
||||||
#------------------------------------------------------------------timing mode
|
#------------------------------------------------------------------timing mode
|
||||||
def test_get_timing_mode(d, mocker):
|
def test_get_timing_mode(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getTimingMode')
|
m = mocker.patch('_slsdet.DetectorApi.getTimingMode')
|
||||||
d.timing_mode
|
d.timing_mode
|
||||||
m.assert_called_once_with()
|
m.assert_called_once_with()
|
||||||
|
|
||||||
def test_set_timing_mode(d, mocker):
|
def test_set_timing_mode(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setTimingMode')
|
m = mocker.patch('_slsdet.DetectorApi.setTimingMode')
|
||||||
d.timing_mode = 'auto'
|
d.timing_mode = 'auto'
|
||||||
m.assert_called_once_with('auto')
|
m.assert_called_once_with('auto')
|
||||||
|
|
||||||
#----------------------------------------------------------------vthreshold
|
#----------------------------------------------------------------vthreshold
|
||||||
def test_get_vthreshold(d, mocker):
|
def test_get_vthreshold(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getDac')
|
m = mocker.patch('_slsdet.DetectorApi.getDac')
|
||||||
d.vthreshold
|
d.vthreshold
|
||||||
m.assert_called_once_with('vthreshold', -1)
|
m.assert_called_once_with('vthreshold', -1)
|
||||||
|
|
||||||
def test_set_vthreshold(d, mocker):
|
def test_set_vthreshold(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setDac')
|
m = mocker.patch('_slsdet.DetectorApi.setDac')
|
||||||
d.vthreshold = 1675
|
d.vthreshold = 1675
|
||||||
m.assert_called_once_with('vthreshold', -1, 1675)
|
m.assert_called_once_with('vthreshold', -1, 1675)
|
||||||
|
|
||||||
#----------------------------------------------------------------trimbits
|
#----------------------------------------------------------------trimbits
|
||||||
def test_get_trimbits(d, mocker):
|
def test_get_trimbits(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.getAllTrimbits')
|
m = mocker.patch('_slsdet.DetectorApi.getAllTrimbits')
|
||||||
d.trimbits
|
d.trimbits
|
||||||
m.assert_called_once_with()
|
m.assert_called_once_with()
|
||||||
|
|
||||||
def test_set_trimbits(d, mocker):
|
def test_set_trimbits(d, mocker):
|
||||||
m = mocker.patch('_sls_detector.DetectorApi.setAllTrimbits')
|
m = mocker.patch('_slsdet.DetectorApi.setAllTrimbits')
|
||||||
d.trimbits = 15
|
d.trimbits = 15
|
||||||
m.assert_called_once_with(15)
|
m.assert_called_once_with(15)
|
||||||
|
|
||||||
def test_set_trimbits_raises_outside_range(d, mocker):
|
def test_set_trimbits_raises_outside_range(d, mocker):
|
||||||
mocker.patch('_sls_detector.DetectorApi.setAllTrimbits')
|
mocker.patch('_slsdet.DetectorApi.setAllTrimbits')
|
||||||
|
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
d.trimbits = 69
|
d.trimbits = 69
|
||||||
|
@ -15,7 +15,7 @@ from pytest_mock import mocker
|
|||||||
import sys
|
import sys
|
||||||
sys.path.append('/home/l_frojdh/slsdetectorgrup/sls_detector')
|
sys.path.append('/home/l_frojdh/slsdetectorgrup/sls_detector')
|
||||||
|
|
||||||
import _sls_detector
|
import _slsdet
|
||||||
from sls_detector.errors import DetectorValueError, DetectorError
|
from sls_detector.errors import DetectorValueError, DetectorError
|
||||||
from sls_detector.utils import all_equal, element_if_equal
|
from sls_detector.utils import all_equal, element_if_equal
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ def test_set_counters_single(d, mocker):
|
|||||||
|
|
||||||
|
|
||||||
# def test_busy_call(d, mocker):
|
# def test_busy_call(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getAcquiringFlag')
|
# m = mocker.patch('_slsdet.DetectorApi.getAcquiringFlag')
|
||||||
# m.return_value = False
|
# m.return_value = False
|
||||||
# assert d.busy == False
|
# assert d.busy == False
|
||||||
|
|
||||||
@ -73,34 +73,34 @@ def test_set_counters_single(d, mocker):
|
|||||||
# d.detector_type = 'Eiger'
|
# d.detector_type = 'Eiger'
|
||||||
|
|
||||||
# def test_det_type(d, mocker):
|
# def test_det_type(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getDetectorType')
|
# m = mocker.patch('_slsdet.DetectorApi.getDetectorType')
|
||||||
# m.return_value = 'Eiger'
|
# m.return_value = 'Eiger'
|
||||||
# assert d.detector_type == 'Eiger'
|
# assert d.detector_type == 'Eiger'
|
||||||
|
|
||||||
|
|
||||||
# def test_get_exposure_time(d, mocker):
|
# def test_get_exposure_time(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getExposureTime')
|
# m = mocker.patch('_slsdet.DetectorApi.getExposureTime')
|
||||||
# m.return_value = 100000000
|
# m.return_value = 100000000
|
||||||
# assert d.exposure_time == 0.1
|
# assert d.exposure_time == 0.1
|
||||||
|
|
||||||
# def test_set_exposure_time(d, mocker):
|
# def test_set_exposure_time(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setExposureTime')
|
# m = mocker.patch('_slsdet.DetectorApi.setExposureTime')
|
||||||
# d.exposure_time = 1.5
|
# d.exposure_time = 1.5
|
||||||
# m.assert_called_once_with(1500000000)
|
# m.assert_called_once_with(1500000000)
|
||||||
|
|
||||||
# def test_set_exposure_time_less_than_zero(d, mocker):
|
# def test_set_exposure_time_less_than_zero(d, mocker):
|
||||||
# mocker.patch('_sls_detector.DetectorApi.setExposureTime')
|
# mocker.patch('_slsdet.DetectorApi.setExposureTime')
|
||||||
# with pytest.raises(DetectorValueError):
|
# with pytest.raises(DetectorValueError):
|
||||||
# d.exposure_time = -7
|
# d.exposure_time = -7
|
||||||
|
|
||||||
|
|
||||||
# def test_get_file_index(d, mocker):
|
# def test_get_file_index(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getFileIndex')
|
# m = mocker.patch('_slsdet.DetectorApi.getFileIndex')
|
||||||
# m.return_value = 8
|
# m.return_value = 8
|
||||||
# assert d.file_index == 8
|
# assert d.file_index == 8
|
||||||
|
|
||||||
# def test_set_file_index(d, mocker):
|
# def test_set_file_index(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setFileIndex')
|
# m = mocker.patch('_slsdet.DetectorApi.setFileIndex')
|
||||||
# d.file_index = 9
|
# d.file_index = 9
|
||||||
# m.assert_called_with(9)
|
# m.assert_called_with(9)
|
||||||
|
|
||||||
@ -112,28 +112,28 @@ def test_set_counters_single(d, mocker):
|
|||||||
# assert d.dynamic_range == -100
|
# assert d.dynamic_range == -100
|
||||||
|
|
||||||
# def test_set_file_index_raises_on_neg(d, mocker):
|
# def test_set_file_index_raises_on_neg(d, mocker):
|
||||||
# mocker.patch('_sls_detector.DetectorApi.setFileIndex')
|
# mocker.patch('_slsdet.DetectorApi.setFileIndex')
|
||||||
# with pytest.raises(ValueError):
|
# with pytest.raises(ValueError):
|
||||||
# d.file_index = -9
|
# d.file_index = -9
|
||||||
|
|
||||||
|
|
||||||
# def test_get_file_name(d, mocker):
|
# def test_get_file_name(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getFileName')
|
# m = mocker.patch('_slsdet.DetectorApi.getFileName')
|
||||||
# d.file_name
|
# d.file_name
|
||||||
# m.assert_called_once_with()
|
# m.assert_called_once_with()
|
||||||
|
|
||||||
# def test_set_file_name(d, mocker):
|
# def test_set_file_name(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setFileName')
|
# m = mocker.patch('_slsdet.DetectorApi.setFileName')
|
||||||
# d.file_name = 'hej'
|
# d.file_name = 'hej'
|
||||||
# m.assert_called_once_with('hej')
|
# m.assert_called_once_with('hej')
|
||||||
|
|
||||||
# def test_get_file_path(d, mocker):
|
# def test_get_file_path(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getFilePath')
|
# m = mocker.patch('_slsdet.DetectorApi.getFilePath')
|
||||||
# d.file_path
|
# d.file_path
|
||||||
# m.assert_called_once_with()
|
# m.assert_called_once_with()
|
||||||
|
|
||||||
# def test_set_file_path_when_path_exists(d, mocker):
|
# def test_set_file_path_when_path_exists(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setFilePath')
|
# m = mocker.patch('_slsdet.DetectorApi.setFilePath')
|
||||||
# #To avoid raising an exception because path is not there
|
# #To avoid raising an exception because path is not there
|
||||||
# mock_os = mocker.patch('os.path.exists')
|
# mock_os = mocker.patch('os.path.exists')
|
||||||
# mock_os.return_value = True
|
# mock_os.return_value = True
|
||||||
@ -141,25 +141,25 @@ def test_set_counters_single(d, mocker):
|
|||||||
# m.assert_called_once_with('/path/to/something/')
|
# m.assert_called_once_with('/path/to/something/')
|
||||||
|
|
||||||
# def test_set_file_path_raises_when_not_exists(d, mocker):
|
# def test_set_file_path_raises_when_not_exists(d, mocker):
|
||||||
# mocker.patch('_sls_detector.DetectorApi.setFilePath')
|
# mocker.patch('_slsdet.DetectorApi.setFilePath')
|
||||||
# mock_os = mocker.patch('os.path.exists')
|
# mock_os = mocker.patch('os.path.exists')
|
||||||
# mock_os.return_value = False
|
# mock_os.return_value = False
|
||||||
# with pytest.raises(FileNotFoundError):
|
# with pytest.raises(FileNotFoundError):
|
||||||
# d.file_path = '/path/to/something/'
|
# d.file_path = '/path/to/something/'
|
||||||
|
|
||||||
# def test_get_file_write(d, mocker):
|
# def test_get_file_write(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getFileWrite')
|
# m = mocker.patch('_slsdet.DetectorApi.getFileWrite')
|
||||||
# m.return_value = False
|
# m.return_value = False
|
||||||
# assert d.file_write == False
|
# assert d.file_write == False
|
||||||
|
|
||||||
# def test_set_file_write(d, mocker):
|
# def test_set_file_write(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setFileWrite')
|
# m = mocker.patch('_slsdet.DetectorApi.setFileWrite')
|
||||||
# d.file_write = True
|
# d.file_write = True
|
||||||
# m.assert_called_once_with(True)
|
# m.assert_called_once_with(True)
|
||||||
|
|
||||||
|
|
||||||
# def test_get_firmware_version(d, mocker):
|
# def test_get_firmware_version(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getFirmwareVersion')
|
# m = mocker.patch('_slsdet.DetectorApi.getFirmwareVersion')
|
||||||
# m.return_value = 20
|
# m.return_value = 20
|
||||||
# assert d.firmware_version == 20
|
# assert d.firmware_version == 20
|
||||||
|
|
||||||
@ -168,38 +168,38 @@ def test_set_counters_single(d, mocker):
|
|||||||
# d.firmware_version = 20
|
# d.firmware_version = 20
|
||||||
|
|
||||||
# def test_get_high_voltage_call_signature(d, mocker):
|
# def test_get_high_voltage_call_signature(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getDac')
|
# m = mocker.patch('_slsdet.DetectorApi.getDac')
|
||||||
# d.high_voltage
|
# d.high_voltage
|
||||||
# m.assert_called_once_with('vhighvoltage', -1)
|
# m.assert_called_once_with('vhighvoltage', -1)
|
||||||
|
|
||||||
# def test_get_high_voltage(d, mocker):
|
# def test_get_high_voltage(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getDac')
|
# m = mocker.patch('_slsdet.DetectorApi.getDac')
|
||||||
# m.return_value = 80
|
# m.return_value = 80
|
||||||
# assert d.high_voltage == 80
|
# assert d.high_voltage == 80
|
||||||
|
|
||||||
# #self._api.setDac('vhighvoltage', -1, voltage)
|
# #self._api.setDac('vhighvoltage', -1, voltage)
|
||||||
# def test_set_high_voltage(d, mocker):
|
# def test_set_high_voltage(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setDac')
|
# m = mocker.patch('_slsdet.DetectorApi.setDac')
|
||||||
# d.high_voltage = 80
|
# d.high_voltage = 80
|
||||||
# m.assert_called_once_with('vhighvoltage', -1, 80)
|
# m.assert_called_once_with('vhighvoltage', -1, 80)
|
||||||
|
|
||||||
# def test_decode_hostname_two_names(d, mocker):
|
# def test_decode_hostname_two_names(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getHostname')
|
# m = mocker.patch('_slsdet.DetectorApi.getHostname')
|
||||||
# m.return_value = 'beb059+beb048+'
|
# m.return_value = 'beb059+beb048+'
|
||||||
# assert d.hostname == ['beb059', 'beb048']
|
# assert d.hostname == ['beb059', 'beb048']
|
||||||
|
|
||||||
# def test_decode_hostname_four_names(d, mocker):
|
# def test_decode_hostname_four_names(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getHostname')
|
# m = mocker.patch('_slsdet.DetectorApi.getHostname')
|
||||||
# m.return_value = 'beb059+beb048+beb120+beb153+'
|
# m.return_value = 'beb059+beb048+beb120+beb153+'
|
||||||
# assert d.hostname == ['beb059', 'beb048', 'beb120', 'beb153']
|
# assert d.hostname == ['beb059', 'beb048', 'beb120', 'beb153']
|
||||||
|
|
||||||
# def test_decode_hostname_blank(d, mocker):
|
# def test_decode_hostname_blank(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getHostname')
|
# m = mocker.patch('_slsdet.DetectorApi.getHostname')
|
||||||
# m.return_value = ''
|
# m.return_value = ''
|
||||||
# assert d.hostname == []
|
# assert d.hostname == []
|
||||||
|
|
||||||
# def test_get_image_size_gives_correct_size(d, mocker):
|
# def test_get_image_size_gives_correct_size(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getImageSize')
|
# m = mocker.patch('_slsdet.DetectorApi.getImageSize')
|
||||||
# m.return_value = (512,1024)
|
# m.return_value = (512,1024)
|
||||||
# im_size = d.image_size
|
# im_size = d.image_size
|
||||||
# assert im_size.rows == 512
|
# assert im_size.rows == 512
|
||||||
@ -208,7 +208,7 @@ def test_set_counters_single(d, mocker):
|
|||||||
|
|
||||||
|
|
||||||
# def test_load_config(d, mocker):
|
# def test_load_config(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.readConfigurationFile')
|
# m = mocker.patch('_slsdet.DetectorApi.readConfigurationFile')
|
||||||
# #To avoid raising an exception because path is not there
|
# #To avoid raising an exception because path is not there
|
||||||
# mock_os = mocker.patch('os.path.isfile')
|
# mock_os = mocker.patch('os.path.isfile')
|
||||||
# mock_os.return_value = True
|
# mock_os.return_value = True
|
||||||
@ -216,14 +216,14 @@ def test_set_counters_single(d, mocker):
|
|||||||
# m.assert_called_once_with('/path/to/my/file.config')
|
# m.assert_called_once_with('/path/to/my/file.config')
|
||||||
|
|
||||||
# def test_load_config_raises_when_file_is_not_found(d, mocker):
|
# def test_load_config_raises_when_file_is_not_found(d, mocker):
|
||||||
# mocker.patch('_sls_detector.DetectorApi.readConfigurationFile')
|
# mocker.patch('_slsdet.DetectorApi.readConfigurationFile')
|
||||||
# mock_os = mocker.patch('os.path.isfile')
|
# mock_os = mocker.patch('os.path.isfile')
|
||||||
# mock_os.return_value = False
|
# mock_os.return_value = False
|
||||||
# with pytest.raises(FileNotFoundError):
|
# with pytest.raises(FileNotFoundError):
|
||||||
# d.load_config('/path/to/my/file.config')
|
# d.load_config('/path/to/my/file.config')
|
||||||
|
|
||||||
# def test_load_parameters(d, mocker):
|
# def test_load_parameters(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.readParametersFile')
|
# m = mocker.patch('_slsdet.DetectorApi.readParametersFile')
|
||||||
# #To avoid raising an exception because path is not there
|
# #To avoid raising an exception because path is not there
|
||||||
# mock_os = mocker.patch('os.path.isfile')
|
# mock_os = mocker.patch('os.path.isfile')
|
||||||
# mock_os.return_value = True
|
# mock_os.return_value = True
|
||||||
@ -231,7 +231,7 @@ def test_set_counters_single(d, mocker):
|
|||||||
# m.assert_called_once_with('/path/to/my/file.par')
|
# m.assert_called_once_with('/path/to/my/file.par')
|
||||||
|
|
||||||
# def test_load_parameters_raises_when_file_is_not_found(d, mocker):
|
# def test_load_parameters_raises_when_file_is_not_found(d, mocker):
|
||||||
# mocker.patch('_sls_detector.DetectorApi.readParametersFile')
|
# mocker.patch('_slsdet.DetectorApi.readParametersFile')
|
||||||
# mock_os = mocker.patch('os.path.isfile')
|
# mock_os = mocker.patch('os.path.isfile')
|
||||||
# mock_os.return_value = False
|
# mock_os.return_value = False
|
||||||
# with pytest.raises(FileNotFoundError):
|
# with pytest.raises(FileNotFoundError):
|
||||||
@ -239,14 +239,14 @@ def test_set_counters_single(d, mocker):
|
|||||||
|
|
||||||
# #getDetectorGeometry
|
# #getDetectorGeometry
|
||||||
# def test_get_module_geometry_gives_correct_size(d, mocker):
|
# def test_get_module_geometry_gives_correct_size(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getDetectorGeometry')
|
# m = mocker.patch('_slsdet.DetectorApi.getDetectorGeometry')
|
||||||
# m.return_value = (13,7)
|
# m.return_value = (13,7)
|
||||||
# g = d.module_geometry
|
# g = d.module_geometry
|
||||||
# assert g.vertical == 7
|
# assert g.vertical == 7
|
||||||
# assert g.horizontal == 13
|
# assert g.horizontal == 13
|
||||||
|
|
||||||
# def test_get_module_geometry_access(d, mocker):
|
# def test_get_module_geometry_access(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getDetectorGeometry')
|
# m = mocker.patch('_slsdet.DetectorApi.getDetectorGeometry')
|
||||||
# m.return_value = (12,3)
|
# m.return_value = (12,3)
|
||||||
# assert d.module_geometry[0] == 12
|
# assert d.module_geometry[0] == 12
|
||||||
# assert d.module_geometry[1] == 3
|
# assert d.module_geometry[1] == 3
|
||||||
@ -259,12 +259,12 @@ def test_set_counters_single(d, mocker):
|
|||||||
# assert t.vertical == 0
|
# assert t.vertical == 0
|
||||||
|
|
||||||
# def test_get_n_frames(d, mocker):
|
# def test_get_n_frames(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getNumberOfFrames')
|
# m = mocker.patch('_slsdet.DetectorApi.getNumberOfFrames')
|
||||||
# m.return_value = 3
|
# m.return_value = 3
|
||||||
# assert d.n_frames == 3
|
# assert d.n_frames == 3
|
||||||
|
|
||||||
# def test_set_n_frames(d, mocker):
|
# def test_set_n_frames(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setNumberOfFrames')
|
# m = mocker.patch('_slsdet.DetectorApi.setNumberOfFrames')
|
||||||
# d.n_frames = 9
|
# d.n_frames = 9
|
||||||
# m.assert_called_once_with(9)
|
# m.assert_called_once_with(9)
|
||||||
|
|
||||||
@ -272,12 +272,12 @@ def test_set_counters_single(d, mocker):
|
|||||||
# assert d.n_frames == -100
|
# assert d.n_frames == -100
|
||||||
|
|
||||||
# def test_set_n_frames_raises_on_neg(d, mocker):
|
# def test_set_n_frames_raises_on_neg(d, mocker):
|
||||||
# mocker.patch('_sls_detector.DetectorApi.setNumberOfFrames')
|
# mocker.patch('_slsdet.DetectorApi.setNumberOfFrames')
|
||||||
# with pytest.raises(DetectorValueError):
|
# with pytest.raises(DetectorValueError):
|
||||||
# d.n_frames = -1
|
# d.n_frames = -1
|
||||||
|
|
||||||
# def test_set_n_frames_raises_on_zero(d, mocker):
|
# def test_set_n_frames_raises_on_zero(d, mocker):
|
||||||
# mocker.patch('_sls_detector.DetectorApi.setNumberOfFrames')
|
# mocker.patch('_slsdet.DetectorApi.setNumberOfFrames')
|
||||||
# with pytest.raises(DetectorValueError):
|
# with pytest.raises(DetectorValueError):
|
||||||
# d.n_frames = 0
|
# d.n_frames = 0
|
||||||
|
|
||||||
@ -285,12 +285,12 @@ def test_set_counters_single(d, mocker):
|
|||||||
# assert d.n_cycles == -100
|
# assert d.n_cycles == -100
|
||||||
|
|
||||||
# def test_set_n_cycles_raises_on_zero(d, mocker):
|
# def test_set_n_cycles_raises_on_zero(d, mocker):
|
||||||
# mocker.patch('_sls_detector.DetectorApi.setCycles')
|
# mocker.patch('_slsdet.DetectorApi.setCycles')
|
||||||
# with pytest.raises(DetectorValueError):
|
# with pytest.raises(DetectorValueError):
|
||||||
# d.n_cycles = 0
|
# d.n_cycles = 0
|
||||||
|
|
||||||
# def test_set_n_cycles(d, mocker):
|
# def test_set_n_cycles(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setCycles')
|
# m = mocker.patch('_slsdet.DetectorApi.setCycles')
|
||||||
# d.n_cycles = 56
|
# d.n_cycles = 56
|
||||||
# m.assert_called_once_with(56)
|
# m.assert_called_once_with(56)
|
||||||
|
|
||||||
@ -300,12 +300,12 @@ def test_set_counters_single(d, mocker):
|
|||||||
# assert d.n_measurements == -100
|
# assert d.n_measurements == -100
|
||||||
|
|
||||||
# def test_set_n_measurements_raises_on_zero(d, mocker):
|
# def test_set_n_measurements_raises_on_zero(d, mocker):
|
||||||
# mocker.patch('_sls_detector.DetectorApi.setNumberOfMeasurements')
|
# mocker.patch('_slsdet.DetectorApi.setNumberOfMeasurements')
|
||||||
# with pytest.raises(DetectorValueError):
|
# with pytest.raises(DetectorValueError):
|
||||||
# d.n_measurements = 0
|
# d.n_measurements = 0
|
||||||
|
|
||||||
# def test_set_n_measurements(d, mocker):
|
# def test_set_n_measurements(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setNumberOfMeasurements')
|
# m = mocker.patch('_slsdet.DetectorApi.setNumberOfMeasurements')
|
||||||
# d.n_measurements = 560
|
# d.n_measurements = 560
|
||||||
# m.assert_called_once_with(560)
|
# m.assert_called_once_with(560)
|
||||||
|
|
||||||
@ -313,33 +313,33 @@ def test_set_counters_single(d, mocker):
|
|||||||
# assert d.n_modules == 0
|
# assert d.n_modules == 0
|
||||||
|
|
||||||
# def test_get_n_modules(d, mocker):
|
# def test_get_n_modules(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getNumberOfDetectors')
|
# m = mocker.patch('_slsdet.DetectorApi.getNumberOfDetectors')
|
||||||
# m.return_value = 12
|
# m.return_value = 12
|
||||||
# assert d.n_modules == 12
|
# assert d.n_modules == 12
|
||||||
|
|
||||||
# def test_get_period_time(d, mocker):
|
# def test_get_period_time(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getPeriod')
|
# m = mocker.patch('_slsdet.DetectorApi.getPeriod')
|
||||||
# m.return_value = 130000000
|
# m.return_value = 130000000
|
||||||
# assert d.period == 0.13
|
# assert d.period == 0.13
|
||||||
|
|
||||||
# def test_set_period_time(d, mocker):
|
# def test_set_period_time(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setPeriod')
|
# m = mocker.patch('_slsdet.DetectorApi.setPeriod')
|
||||||
# d.period = 1.953
|
# d.period = 1.953
|
||||||
# m.assert_called_once_with(1953000000)
|
# m.assert_called_once_with(1953000000)
|
||||||
|
|
||||||
# def test_set_period_time_less_than_zero(d, mocker):
|
# def test_set_period_time_less_than_zero(d, mocker):
|
||||||
# mocker.patch('_sls_detector.DetectorApi.setPeriod')
|
# mocker.patch('_slsdet.DetectorApi.setPeriod')
|
||||||
# with pytest.raises(ValueError):
|
# with pytest.raises(ValueError):
|
||||||
# d.period = -7
|
# d.period = -7
|
||||||
|
|
||||||
|
|
||||||
# def test_get_online(d, mocker):
|
# def test_get_online(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getOnline')
|
# m = mocker.patch('_slsdet.DetectorApi.getOnline')
|
||||||
# d.online
|
# d.online
|
||||||
# m.assert_called_once_with()
|
# m.assert_called_once_with()
|
||||||
|
|
||||||
# def test_set_online(d, mocker):
|
# def test_set_online(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setOnline')
|
# m = mocker.patch('_slsdet.DetectorApi.setOnline')
|
||||||
# d.online = True
|
# d.online = True
|
||||||
# m.assert_called_once_with(True)
|
# m.assert_called_once_with(True)
|
||||||
|
|
||||||
@ -347,116 +347,116 @@ def test_set_counters_single(d, mocker):
|
|||||||
# assert d.last_client_ip == ''
|
# assert d.last_client_ip == ''
|
||||||
|
|
||||||
# def test_last_cliten_ip_call(d, mocker):
|
# def test_last_cliten_ip_call(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getLastClientIP')
|
# m = mocker.patch('_slsdet.DetectorApi.getLastClientIP')
|
||||||
# d.last_client_ip
|
# d.last_client_ip
|
||||||
# m.assert_called_once_with()
|
# m.assert_called_once_with()
|
||||||
|
|
||||||
# #-------------------------------------------------------------Rate correction
|
# #-------------------------------------------------------------Rate correction
|
||||||
# def test_get_rate_correction(d, mocker):
|
# def test_get_rate_correction(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getRateCorrection')
|
# m = mocker.patch('_slsdet.DetectorApi.getRateCorrection')
|
||||||
# m.return_value = [132,129]
|
# m.return_value = [132,129]
|
||||||
# assert d.rate_correction == [132,129]
|
# assert d.rate_correction == [132,129]
|
||||||
|
|
||||||
# def test_set_rate_correction(d, mocker):
|
# def test_set_rate_correction(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setRateCorrection')
|
# m = mocker.patch('_slsdet.DetectorApi.setRateCorrection')
|
||||||
# mock_n = mocker.patch('_sls_detector.DetectorApi.getNumberOfDetectors')
|
# mock_n = mocker.patch('_slsdet.DetectorApi.getNumberOfDetectors')
|
||||||
# mock_n.return_value = 3
|
# mock_n.return_value = 3
|
||||||
# d.rate_correction = [123,90,50]
|
# d.rate_correction = [123,90,50]
|
||||||
# m.assert_called_once_with([123,90,50])
|
# m.assert_called_once_with([123,90,50])
|
||||||
|
|
||||||
# def test_set_rate_correction_raises_on_wrong_number_of_values(d, mocker):
|
# def test_set_rate_correction_raises_on_wrong_number_of_values(d, mocker):
|
||||||
# mocker.patch('_sls_detector.DetectorApi.setRateCorrection')
|
# mocker.patch('_slsdet.DetectorApi.setRateCorrection')
|
||||||
# mock_n = mocker.patch('_sls_detector.DetectorApi.getNumberOfDetectors')
|
# mock_n = mocker.patch('_slsdet.DetectorApi.getNumberOfDetectors')
|
||||||
# mock_n.return_value = 4
|
# mock_n.return_value = 4
|
||||||
# with pytest.raises(ValueError):
|
# with pytest.raises(ValueError):
|
||||||
# d.rate_correction = [123,90,50]
|
# d.rate_correction = [123,90,50]
|
||||||
|
|
||||||
# #----------------------------------------------------------------Readout clock
|
# #----------------------------------------------------------------Readout clock
|
||||||
# def test_get_readout_clock_0(d, mocker):
|
# def test_get_readout_clock_0(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed')
|
# m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed')
|
||||||
# m.return_value = 0
|
# m.return_value = 0
|
||||||
# assert d.readout_clock == 'Full Speed'
|
# assert d.readout_clock == 'Full Speed'
|
||||||
|
|
||||||
# def test_get_readout_clock_1(d, mocker):
|
# def test_get_readout_clock_1(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed')
|
# m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed')
|
||||||
# m.return_value = 1
|
# m.return_value = 1
|
||||||
# assert d.readout_clock == 'Half Speed'
|
# assert d.readout_clock == 'Half Speed'
|
||||||
|
|
||||||
# def test_get_readout_clock_2(d, mocker):
|
# def test_get_readout_clock_2(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed')
|
# m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed')
|
||||||
# m.return_value = 2
|
# m.return_value = 2
|
||||||
# assert d.readout_clock == 'Quarter Speed'
|
# assert d.readout_clock == 'Quarter Speed'
|
||||||
|
|
||||||
# def test_get_readout_clock_3(d, mocker):
|
# def test_get_readout_clock_3(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed')
|
# m = mocker.patch('_slsdet.DetectorApi.getReadoutClockSpeed')
|
||||||
# m.return_value = 3
|
# m.return_value = 3
|
||||||
# assert d.readout_clock == 'Super Slow Speed'
|
# assert d.readout_clock == 'Super Slow Speed'
|
||||||
|
|
||||||
# def test_set_readout_clock_0(d, mocker):
|
# def test_set_readout_clock_0(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed')
|
# m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed')
|
||||||
# d.readout_clock = 'Full Speed'
|
# d.readout_clock = 'Full Speed'
|
||||||
# m.assert_called_once_with(0)
|
# m.assert_called_once_with(0)
|
||||||
|
|
||||||
# def test_set_readout_clock_1(d, mocker):
|
# def test_set_readout_clock_1(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed')
|
# m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed')
|
||||||
# d.readout_clock = 'Half Speed'
|
# d.readout_clock = 'Half Speed'
|
||||||
# m.assert_called_once_with(1)
|
# m.assert_called_once_with(1)
|
||||||
|
|
||||||
# def test_set_readout_clock_2(d, mocker):
|
# def test_set_readout_clock_2(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed')
|
# m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed')
|
||||||
# d.readout_clock = 'Quarter Speed'
|
# d.readout_clock = 'Quarter Speed'
|
||||||
# m.assert_called_once_with(2)
|
# m.assert_called_once_with(2)
|
||||||
|
|
||||||
# def test_set_readout_clock_3(d, mocker):
|
# def test_set_readout_clock_3(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed')
|
# m = mocker.patch('_slsdet.DetectorApi.setReadoutClockSpeed')
|
||||||
# d.readout_clock = 'Super Slow Speed'
|
# d.readout_clock = 'Super Slow Speed'
|
||||||
# m.assert_called_once_with(3)
|
# m.assert_called_once_with(3)
|
||||||
|
|
||||||
# #----------------------------------------------------------------rx_datastream
|
# #----------------------------------------------------------------rx_datastream
|
||||||
# def test_get_rx_datastream(d, mocker):
|
# def test_get_rx_datastream(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getRxDataStreamStatus')
|
# m = mocker.patch('_slsdet.DetectorApi.getRxDataStreamStatus')
|
||||||
# m.return_value = False
|
# m.return_value = False
|
||||||
# assert d.rx_datastream == False
|
# assert d.rx_datastream == False
|
||||||
|
|
||||||
# def test_set_rx_datastream(d, mocker):
|
# def test_set_rx_datastream(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setRxDataStreamStatus')
|
# m = mocker.patch('_slsdet.DetectorApi.setRxDataStreamStatus')
|
||||||
# d.rx_datastream = True
|
# d.rx_datastream = True
|
||||||
# m.assert_called_once_with(True)
|
# m.assert_called_once_with(True)
|
||||||
|
|
||||||
# def test_get_rx_zmqip(d, mocker):
|
# def test_get_rx_zmqip(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter')
|
# m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter')
|
||||||
# d.rx_zmqip
|
# d.rx_zmqip
|
||||||
# m.assert_called_once_with('rx_zmqip')
|
# m.assert_called_once_with('rx_zmqip')
|
||||||
|
|
||||||
# def test_get_rx_zmqport_call(d, mocker):
|
# def test_get_rx_zmqport_call(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter')
|
# m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter')
|
||||||
# d.rx_zmqport
|
# d.rx_zmqport
|
||||||
# m.assert_called_once_with('rx_zmqport')
|
# m.assert_called_once_with('rx_zmqport')
|
||||||
|
|
||||||
# def test_get_rx_zmqport_decode(d, mocker):
|
# def test_get_rx_zmqport_decode(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter')
|
# m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter')
|
||||||
# m.return_value = ['30001', '30003']
|
# m.return_value = ['30001', '30003']
|
||||||
# assert d.rx_zmqport == [30001, 30003]
|
# assert d.rx_zmqport == [30001, 30003]
|
||||||
|
|
||||||
# def test_get_rx_zmqport_empty(d, mocker):
|
# def test_get_rx_zmqport_empty(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter')
|
# m = mocker.patch('_slsdet.DetectorApi.getNetworkParameter')
|
||||||
# m.return_value = ''
|
# m.return_value = ''
|
||||||
# assert d.rx_zmqport == []
|
# assert d.rx_zmqport == []
|
||||||
|
|
||||||
|
|
||||||
# #--------------------------------------------------------------------status
|
# #--------------------------------------------------------------------status
|
||||||
# def test_status_call(d, mocker):
|
# def test_status_call(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getRunStatus')
|
# m = mocker.patch('_slsdet.DetectorApi.getRunStatus')
|
||||||
# d.status
|
# d.status
|
||||||
# m.assert_called_once_with()
|
# m.assert_called_once_with()
|
||||||
|
|
||||||
# def test_start_detecor(d, mocker):
|
# def test_start_detecor(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.startAcquisition')
|
# m = mocker.patch('_slsdet.DetectorApi.startAcquisition')
|
||||||
# d.start_detector()
|
# d.start_detector()
|
||||||
# m.assert_called_once_with()
|
# m.assert_called_once_with()
|
||||||
|
|
||||||
# def test_stop_acq_call(d, mocker):
|
# def test_stop_acq_call(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.stopAcquisition')
|
# m = mocker.patch('_slsdet.DetectorApi.stopAcquisition')
|
||||||
# d.stop_detector()
|
# d.stop_detector()
|
||||||
# m.assert_called_once_with()
|
# m.assert_called_once_with()
|
||||||
|
|
||||||
@ -464,23 +464,23 @@ def test_set_counters_single(d, mocker):
|
|||||||
|
|
||||||
# #------------------------------------------------------------------timing mode
|
# #------------------------------------------------------------------timing mode
|
||||||
# def test_get_timing_mode(d, mocker):
|
# def test_get_timing_mode(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getTimingMode')
|
# m = mocker.patch('_slsdet.DetectorApi.getTimingMode')
|
||||||
# d.timing_mode
|
# d.timing_mode
|
||||||
# m.assert_called_once_with()
|
# m.assert_called_once_with()
|
||||||
|
|
||||||
# def test_set_timing_mode(d, mocker):
|
# def test_set_timing_mode(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setTimingMode')
|
# m = mocker.patch('_slsdet.DetectorApi.setTimingMode')
|
||||||
# d.timing_mode = 'auto'
|
# d.timing_mode = 'auto'
|
||||||
# m.assert_called_once_with('auto')
|
# m.assert_called_once_with('auto')
|
||||||
|
|
||||||
# #----------------------------------------------------------------vthreshold
|
# #----------------------------------------------------------------vthreshold
|
||||||
# def test_get_vthreshold(d, mocker):
|
# def test_get_vthreshold(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.getDac')
|
# m = mocker.patch('_slsdet.DetectorApi.getDac')
|
||||||
# d.vthreshold
|
# d.vthreshold
|
||||||
# m.assert_called_once_with('vthreshold', -1)
|
# m.assert_called_once_with('vthreshold', -1)
|
||||||
|
|
||||||
# def test_set_vthreshold(d, mocker):
|
# def test_set_vthreshold(d, mocker):
|
||||||
# m = mocker.patch('_sls_detector.DetectorApi.setDac')
|
# m = mocker.patch('_slsdet.DetectorApi.setDac')
|
||||||
# d.vthreshold = 1675
|
# d.vthreshold = 1675
|
||||||
# m.assert_called_once_with('vthreshold', -1, 1675)
|
# m.assert_called_once_with('vthreshold', -1, 1675)
|
||||||
|
|
||||||
|
@ -19,3 +19,18 @@ target_link_libraries(result
|
|||||||
set_target_properties(result PROPERTIES
|
set_target_properties(result PROPERTIES
|
||||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_executable(udp udp.cpp)
|
||||||
|
target_link_libraries(udp
|
||||||
|
slsDetectorShared
|
||||||
|
slsSupportLib
|
||||||
|
pthread
|
||||||
|
rt
|
||||||
|
fmt
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(udp PROPERTIES
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
65
sample/udp.cpp
Normal file
65
sample/udp.cpp
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#include "UdpRxSocket.h"
|
||||||
|
#include "sls_detector_defs.h"
|
||||||
|
#include <chrono>
|
||||||
|
#include <fmt/format.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <thread>
|
||||||
|
#include "network_utils.h"
|
||||||
|
|
||||||
|
// Assume packages arrive in order
|
||||||
|
|
||||||
|
// Assume frame nr starts from 0
|
||||||
|
|
||||||
|
using header_t = slsDetectorDefs::sls_detector_header;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
fmt::print("Hej!\n");
|
||||||
|
|
||||||
|
|
||||||
|
constexpr ssize_t packet_size = 4144;
|
||||||
|
constexpr ssize_t payload_size = packet_size - sizeof(header_t);
|
||||||
|
int port = 50012;
|
||||||
|
|
||||||
|
char * buffer = new char[packet_size];
|
||||||
|
|
||||||
|
sls::UdpRxSocket s(port, packet_size, "10.1.1.107");
|
||||||
|
int n = 0;
|
||||||
|
while(true){
|
||||||
|
// s.ReceiveDataOnly(buffer);
|
||||||
|
if (s.ReceivePacket())
|
||||||
|
std::cout << n++ << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// auto header = reinterpret_cast<header_t *>(s.buffer());
|
||||||
|
// char *data = s.buffer() + sizeof(header_t);
|
||||||
|
// fmt::print("buffer start: {}\nheader: {}\ndata: {}\n", fmt::ptr(s.buffer()),
|
||||||
|
// fmt::ptr(header), fmt::ptr(data));
|
||||||
|
|
||||||
|
// int n = 0;
|
||||||
|
|
||||||
|
// fmt::print("Buffer size: {}\n", s.buffer_size());
|
||||||
|
// std::vector<uint16_t> image(n_pixels);
|
||||||
|
// char *image_data = (char *)image.data();
|
||||||
|
// uint64_t frame_nr = 0;
|
||||||
|
// while (true) {
|
||||||
|
|
||||||
|
// if (s.ReceivePacket()) {
|
||||||
|
|
||||||
|
// // fmt::print("frame: {} pkt: {} dst: {}\n", header->frameNumber,
|
||||||
|
// // header->packetNumber, header->packetNumber*payload_size);
|
||||||
|
// if (header->frameNumber != frame_nr) {
|
||||||
|
// // dispatch frame
|
||||||
|
// fmt::print("frame {} done! got: {} pkgs\n", frame_nr, n);
|
||||||
|
// frame_nr = header->frameNumber;
|
||||||
|
// n = 0;
|
||||||
|
// std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||||
|
// }
|
||||||
|
// ++n;
|
||||||
|
// memcpy(image_data + header->packetNumber * payload_size, data,
|
||||||
|
// payload_size);
|
||||||
|
|
||||||
|
// } else {
|
||||||
|
// std::cout << "timeout\n";
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
@ -1,5 +1,8 @@
|
|||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
|
||||||
|
find_package(PNG REQUIRED)
|
||||||
|
find_package(ZLIB REQUIRED)
|
||||||
|
|
||||||
set(SOURCES
|
set(SOURCES
|
||||||
slsDetectorPlotting/src/SlsQt1DPlot.cxx
|
slsDetectorPlotting/src/SlsQt1DPlot.cxx
|
||||||
slsDetectorPlotting/src/SlsQt1DZoomer.cxx
|
slsDetectorPlotting/src/SlsQt1DZoomer.cxx
|
||||||
@ -89,8 +92,8 @@ target_link_libraries(slsDetectorGui PUBLIC
|
|||||||
${QT_QTCORE_LIBRARIES}
|
${QT_QTCORE_LIBRARIES}
|
||||||
${QT_QTGUI_LIBRARIES}
|
${QT_QTGUI_LIBRARIES}
|
||||||
${QWT_LIBRARIES}
|
${QWT_LIBRARIES}
|
||||||
png
|
PNG::PNG
|
||||||
z
|
ZLIB::ZLIB
|
||||||
Qt4::QtOpenGL
|
Qt4::QtOpenGL
|
||||||
Qt4::QtSvg
|
Qt4::QtSvg
|
||||||
)
|
)
|
||||||
|
@ -28,7 +28,7 @@ target_compile_definitions(jungfrauDetectorServer_virtual
|
|||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(jungfrauDetectorServer_virtual
|
target_link_libraries(jungfrauDetectorServer_virtual
|
||||||
PUBLIC pthread rt
|
PUBLIC pthread rt slsProjectOptions slsProjectWarnings
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(jungfrauDetectorServer_virtual PROPERTIES
|
set_target_properties(jungfrauDetectorServer_virtual PROPERTIES
|
||||||
|
@ -33,6 +33,8 @@ target_link_libraries(slsDetectorShared PUBLIC
|
|||||||
slsProjectWarnings
|
slsProjectWarnings
|
||||||
slsSupportLib
|
slsSupportLib
|
||||||
${ZeroMQ_LIBRARIES}
|
${ZeroMQ_LIBRARIES}
|
||||||
|
pthread
|
||||||
|
rt
|
||||||
)
|
)
|
||||||
|
|
||||||
set(PUBLICHEADERS
|
set(PUBLICHEADERS
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "container_utils.h" // For sls::make_unique<>
|
#include "container_utils.h" // For sls::make_unique<>
|
||||||
#include "genericSocket.h"
|
#include "genericSocket.h"
|
||||||
#include "sls_detector_exceptions.h"
|
#include "sls_detector_exceptions.h"
|
||||||
|
#include "UdpRxSocket.h"
|
||||||
|
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
@ -147,7 +148,6 @@ void Listener::SetGeneralData(GeneralData* g) {
|
|||||||
|
|
||||||
|
|
||||||
void Listener::CreateUDPSockets() {
|
void Listener::CreateUDPSockets() {
|
||||||
|
|
||||||
if (!(*activated)) {
|
if (!(*activated)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -163,7 +163,7 @@ void Listener::CreateUDPSockets() {
|
|||||||
ShutDownUDPSocket();
|
ShutDownUDPSocket();
|
||||||
|
|
||||||
try{
|
try{
|
||||||
udpSocket = sls::make_unique<genericSocket>(*udpPortNumber, genericSocket::UDP,
|
udpSocket = sls::make_unique<SELECTED_SOCKET>(*udpPortNumber, genericSocket::UDP,
|
||||||
generalData->packetSize, ((*eth).length() ? (*eth).c_str() : nullptr), generalData->headerPacketSize,
|
generalData->packetSize, ((*eth).length() ? (*eth).c_str() : nullptr), generalData->headerPacketSize,
|
||||||
*udpSocketBufferSize);
|
*udpSocketBufferSize);
|
||||||
FILE_LOG(logINFO) << index << ": UDP port opened at port " << *udpPortNumber;
|
FILE_LOG(logINFO) << index << ": UDP port opened at port " << *udpPortNumber;
|
||||||
@ -213,7 +213,7 @@ void Listener::CreateDummySocketForUDPSocketBufferSize(int64_t s) {
|
|||||||
|
|
||||||
//create dummy socket
|
//create dummy socket
|
||||||
try {
|
try {
|
||||||
genericSocket g(*udpPortNumber, genericSocket::UDP,
|
SELECTED_SOCKET g(*udpPortNumber, genericSocket::UDP,
|
||||||
generalData->packetSize, ((*eth).length() ? (*eth).c_str() : nullptr), generalData->headerPacketSize,
|
generalData->packetSize, ((*eth).length() ? (*eth).c_str() : nullptr), generalData->headerPacketSize,
|
||||||
*udpSocketBufferSize);
|
*udpSocketBufferSize);
|
||||||
|
|
||||||
|
@ -16,6 +16,13 @@
|
|||||||
class GeneralData;
|
class GeneralData;
|
||||||
class Fifo;
|
class Fifo;
|
||||||
class genericSocket;
|
class genericSocket;
|
||||||
|
namespace sls{
|
||||||
|
class UdpRxSocket;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// #define SELECTED_SOCKET genericSocket
|
||||||
|
#define SELECTED_SOCKET sls::UdpRxSocket
|
||||||
|
|
||||||
class Listener : private virtual slsDetectorDefs, public ThreadObject {
|
class Listener : private virtual slsDetectorDefs, public ThreadObject {
|
||||||
|
|
||||||
@ -187,7 +194,7 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject {
|
|||||||
std::atomic<runStatus>* status;
|
std::atomic<runStatus>* status;
|
||||||
|
|
||||||
/** UDP Socket - Detector to Receiver */
|
/** UDP Socket - Detector to Receiver */
|
||||||
std::unique_ptr<genericSocket> udpSocket;
|
std::unique_ptr<SELECTED_SOCKET> udpSocket;
|
||||||
|
|
||||||
/** UDP Port Number */
|
/** UDP Port Number */
|
||||||
uint32_t* udpPortNumber;
|
uint32_t* udpPortNumber;
|
||||||
|
@ -58,6 +58,7 @@ set_target_properties(slsSupportLib PROPERTIES
|
|||||||
target_link_libraries(slsSupportLib
|
target_link_libraries(slsSupportLib
|
||||||
slsProjectOptions
|
slsProjectOptions
|
||||||
slsProjectWarnings
|
slsProjectWarnings
|
||||||
|
${ZeroMQ_LIBRARIES}
|
||||||
rapidjson)
|
rapidjson)
|
||||||
|
|
||||||
if (SLS_USE_TESTS)
|
if (SLS_USE_TESTS)
|
||||||
|
151
slsSupportLib/include/UdpRxSocket.h
Normal file
151
slsSupportLib/include/UdpRxSocket.h
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
UdpRxSocket provies socket control to receive
|
||||||
|
data on a udp socket.
|
||||||
|
|
||||||
|
It provides a drop in replacement for
|
||||||
|
genericSocket. But please be careful since
|
||||||
|
this might be deprecated in the future
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "genericSocket.h"
|
||||||
|
#include "network_utils.h"
|
||||||
|
#include "sls_detector_exceptions.h"
|
||||||
|
#include <cstdint>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace sls {
|
||||||
|
|
||||||
|
class UdpRxSocket {
|
||||||
|
const ssize_t packet_size;
|
||||||
|
char *buff;
|
||||||
|
int fd = -1;
|
||||||
|
|
||||||
|
public:
|
||||||
|
UdpRxSocket(int port, ssize_t packet_size, const char *hostname = nullptr,
|
||||||
|
ssize_t buffer_size = 0)
|
||||||
|
: packet_size(packet_size) {
|
||||||
|
/* hostname = nullptr -> wildcard */
|
||||||
|
|
||||||
|
struct addrinfo hints;
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.ai_family = AF_UNSPEC;
|
||||||
|
hints.ai_socktype = SOCK_DGRAM;
|
||||||
|
hints.ai_protocol = 0;
|
||||||
|
hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
|
||||||
|
struct addrinfo *res = 0;
|
||||||
|
|
||||||
|
const std::string portname = std::to_string(port);
|
||||||
|
if (getaddrinfo(hostname, portname.c_str(), &hints, &res)) {
|
||||||
|
throw RuntimeError("Failed at getaddrinfo with " +
|
||||||
|
std::string(hostname));
|
||||||
|
}
|
||||||
|
fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
|
||||||
|
if (fd == -1) {
|
||||||
|
throw RuntimeError("Failed to create UDP RX socket");
|
||||||
|
}
|
||||||
|
if (bind(fd, res->ai_addr, res->ai_addrlen) == -1) {
|
||||||
|
throw RuntimeError("Failed to bind UDP RX socket");
|
||||||
|
}
|
||||||
|
freeaddrinfo(res);
|
||||||
|
|
||||||
|
// If we get a specified buffer size that is larger than the set one
|
||||||
|
// we set it. Otherwise we leave it there since it could have been
|
||||||
|
// set by the rx_udpsocksize command
|
||||||
|
if (buffer_size) {
|
||||||
|
auto current = getBufferSize() / 2;
|
||||||
|
if (current < buffer_size) {
|
||||||
|
setBufferSize(buffer_size);
|
||||||
|
if (getBufferSize() / 2 < buffer_size) {
|
||||||
|
FILE_LOG(logWARNING)
|
||||||
|
<< "Could not set buffer size. Got: "
|
||||||
|
<< getBufferSize() / 2 << " instead of " << buffer_size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Allocate at the end to avoid memory leak if we throw
|
||||||
|
buff = new char[packet_size];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delegating constructor to allow drop in replacement for old socket class
|
||||||
|
// This one might be removed in the future
|
||||||
|
UdpRxSocket(unsigned short int const port_number,
|
||||||
|
genericSocket::communicationProtocol p,
|
||||||
|
int ps = DEFAULT_PACKET_SIZE, const char *eth = NULL,
|
||||||
|
int hsize = 0, uint64_t buf_size = SOCKET_BUFFER_SIZE)
|
||||||
|
: UdpRxSocket(port_number, ps, InterfaceNameToIp(eth).str().c_str(),
|
||||||
|
buf_size) {}
|
||||||
|
|
||||||
|
~UdpRxSocket() {
|
||||||
|
delete[] buff;
|
||||||
|
Shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *LastPacket() const noexcept { return buff; }
|
||||||
|
constexpr ssize_t getPacketSize() const noexcept { return packet_size; }
|
||||||
|
|
||||||
|
bool ReceivePacket() noexcept {
|
||||||
|
auto bytes_received =
|
||||||
|
recvfrom(fd, buff, packet_size, 0, nullptr, nullptr);
|
||||||
|
return bytes_received == packet_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReceivePacket(char *dst) noexcept {
|
||||||
|
auto bytes_received =
|
||||||
|
recvfrom(fd, buff, packet_size, 0, nullptr, nullptr);
|
||||||
|
return bytes_received == packet_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only for backwards compatibility this function will be removed during
|
||||||
|
// refactoring of the receiver
|
||||||
|
ssize_t ReceiveDataOnly(char *dst) {
|
||||||
|
auto r = recvfrom(fd, dst, packet_size, 0, nullptr, nullptr);
|
||||||
|
constexpr ssize_t eiger_header_packet =
|
||||||
|
40; // only detector that has this
|
||||||
|
if (r == eiger_header_packet) {
|
||||||
|
FILE_LOG(logWARNING) << "Got header pkg";
|
||||||
|
r = recvfrom(fd, dst, packet_size, 0, nullptr, nullptr);
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
ssize_t getBufferSize() const {
|
||||||
|
uint64_t ret_size = 0;
|
||||||
|
socklen_t optlen = sizeof(uint64_t);
|
||||||
|
if (getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &ret_size, &optlen) == -1)
|
||||||
|
return -1;
|
||||||
|
else
|
||||||
|
return ret_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only for backwards compatibility will be removed
|
||||||
|
ssize_t getActualUDPSocketBufferSize() const { return getBufferSize(); }
|
||||||
|
|
||||||
|
// Only for backwards compatibility will be removed
|
||||||
|
void ShutDownSocket() { Shutdown(); }
|
||||||
|
|
||||||
|
void setBufferSize(ssize_t size) {
|
||||||
|
socklen_t optlen = sizeof(size);
|
||||||
|
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, optlen)) {
|
||||||
|
throw RuntimeError("Could not set socket buffer size");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Shutdown() {
|
||||||
|
shutdown(fd, SHUT_RDWR);
|
||||||
|
if (fd >= 0) {
|
||||||
|
close(fd);
|
||||||
|
fd = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace sls
|
@ -62,7 +62,7 @@ class MacAddr {
|
|||||||
IpAddr HostnameToIp(const char *hostname);
|
IpAddr HostnameToIp(const char *hostname);
|
||||||
std::string IpToInterfaceName(const std::string& ip);
|
std::string IpToInterfaceName(const std::string& ip);
|
||||||
MacAddr InterfaceNameToMac(const std::string& inf);
|
MacAddr InterfaceNameToMac(const std::string& inf);
|
||||||
|
IpAddr InterfaceNameToIp(const std::string& ifn);
|
||||||
std::ostream &operator<<(std::ostream &out, const IpAddr &addr);
|
std::ostream &operator<<(std::ostream &out, const IpAddr &addr);
|
||||||
std::ostream &operator<<(std::ostream &out, const MacAddr &addr);
|
std::ostream &operator<<(std::ostream &out, const MacAddr &addr);
|
||||||
|
|
||||||
|
@ -1,34 +1,31 @@
|
|||||||
#include "sls_detector_exceptions.h"
|
#include "sls_detector_exceptions.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <arpa/inet.h>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <ifaddrs.h>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <sstream>
|
#include <net/if.h>
|
||||||
#include <sys/prctl.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
#include <sstream>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/prctl.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <ifaddrs.h>
|
|
||||||
#include <net/if.h>
|
|
||||||
|
|
||||||
#include "network_utils.h"
|
#include "network_utils.h"
|
||||||
|
|
||||||
namespace sls {
|
namespace sls {
|
||||||
|
|
||||||
|
|
||||||
IpAddr::IpAddr(const std::string &address) {
|
IpAddr::IpAddr(const std::string &address) {
|
||||||
inet_pton(AF_INET, address.c_str(), &addr_);
|
inet_pton(AF_INET, address.c_str(), &addr_);
|
||||||
}
|
}
|
||||||
|
|
||||||
IpAddr::IpAddr(const char *address) { inet_pton(AF_INET, address, &addr_); }
|
IpAddr::IpAddr(const char *address) { inet_pton(AF_INET, address, &addr_); }
|
||||||
|
|
||||||
std::string IpAddr::str() const {
|
std::string IpAddr::str() const { return arr().data(); }
|
||||||
return arr().data();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::array<char, INET_ADDRSTRLEN> IpAddr::arr() const {
|
std::array<char, INET_ADDRSTRLEN> IpAddr::arr() const {
|
||||||
std::array<char, INET_ADDRSTRLEN> ipstring{};
|
std::array<char, INET_ADDRSTRLEN> ipstring{};
|
||||||
@ -122,6 +119,35 @@ std::string IpToInterfaceName(const std::string &ip) {
|
|||||||
return std::string(buf);
|
return std::string(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IpAddr InterfaceNameToIp(const std::string &ifn) {
|
||||||
|
struct ifaddrs *ifaddr, *ifa;
|
||||||
|
// int family, s;
|
||||||
|
char host[NI_MAXHOST];
|
||||||
|
|
||||||
|
if (getifaddrs(&ifaddr) == -1) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
|
||||||
|
if (ifa->ifa_addr == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
auto s = getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in), host,
|
||||||
|
NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
|
||||||
|
|
||||||
|
if ((strcmp(ifa->ifa_name, ifn.c_str()) == 0) &&
|
||||||
|
(ifa->ifa_addr->sa_family == AF_INET)) {
|
||||||
|
if (s != 0) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
freeifaddrs(ifaddr);
|
||||||
|
return IpAddr{host};
|
||||||
|
}
|
||||||
|
|
||||||
MacAddr InterfaceNameToMac(const std::string &inf) {
|
MacAddr InterfaceNameToMac(const std::string &inf) {
|
||||||
// TODO! Copied from genericSocket needs to be refactored!
|
// TODO! Copied from genericSocket needs to be refactored!
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
@ -133,13 +159,13 @@ MacAddr InterfaceNameToMac(const std::string& inf) {
|
|||||||
strncpy(ifr.ifr_name, inf.c_str(), sizeof(ifr.ifr_name) - 1);
|
strncpy(ifr.ifr_name, inf.c_str(), sizeof(ifr.ifr_name) - 1);
|
||||||
ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '\0';
|
ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '\0';
|
||||||
|
|
||||||
|
|
||||||
if (-1 == ioctl(sock, SIOCGIFHWADDR, &ifr)) {
|
if (-1 == ioctl(sock, SIOCGIFHWADDR, &ifr)) {
|
||||||
perror("ioctl(SIOCGIFHWADDR) ");
|
perror("ioctl(SIOCGIFHWADDR) ");
|
||||||
return MacAddr{};
|
return MacAddr{};
|
||||||
}
|
}
|
||||||
for (int j = 0, k = 0; j < 6; j++) {
|
for (int j = 0, k = 0; j < 6; j++) {
|
||||||
k+=snprintf(mac+k, mac_len-k-1, j ? ":%02X" : "%02X",
|
k += snprintf(
|
||||||
|
mac + k, mac_len - k - 1, j ? ":%02X" : "%02X",
|
||||||
(int)(unsigned int)(unsigned char)ifr.ifr_hwaddr.sa_data[j]);
|
(int)(unsigned int)(unsigned char)ifr.ifr_hwaddr.sa_data[j]);
|
||||||
}
|
}
|
||||||
mac[mac_len - 1] = '\0';
|
mac[mac_len - 1] = '\0';
|
||||||
@ -148,7 +174,6 @@ MacAddr InterfaceNameToMac(const std::string& inf) {
|
|||||||
close(sock);
|
close(sock);
|
||||||
}
|
}
|
||||||
return MacAddr(mac);
|
return MacAddr(mac);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace sls
|
} // namespace sls
|
||||||
|
@ -8,4 +8,5 @@ target_sources(tests PRIVATE
|
|||||||
${CMAKE_CURRENT_SOURCE_DIR}/test-FixedCapacityContainer.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test-FixedCapacityContainer.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test-ToString.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test-ToString.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test-TypeTraits.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test-TypeTraits.cpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/test-UdpRxSocket.cpp
|
||||||
)
|
)
|
89
slsSupportLib/tests/test-UdpRxSocket.cpp
Normal file
89
slsSupportLib/tests/test-UdpRxSocket.cpp
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
#include "UdpRxSocket.h"
|
||||||
|
#include "catch.hpp"
|
||||||
|
#include "sls_detector_exceptions.h"
|
||||||
|
#include <future>
|
||||||
|
#include <thread>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
int open_socket(int port) {
|
||||||
|
const char *host = nullptr; // localhost
|
||||||
|
|
||||||
|
// Create a socket for sending
|
||||||
|
struct addrinfo hints;
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.ai_family = AF_UNSPEC;
|
||||||
|
hints.ai_socktype = SOCK_DGRAM;
|
||||||
|
hints.ai_protocol = 0;
|
||||||
|
hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
|
||||||
|
struct addrinfo *res = 0;
|
||||||
|
|
||||||
|
const std::string portname = std::to_string(port);
|
||||||
|
if (getaddrinfo(host, portname.c_str(), &hints, &res)) {
|
||||||
|
throw sls::RuntimeError("Failed at getaddrinfo with " +
|
||||||
|
std::string(host));
|
||||||
|
}
|
||||||
|
int fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
|
||||||
|
if (fd == -1) {
|
||||||
|
throw sls::RuntimeError("Failed to create UDP RX socket");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (connect(fd, res->ai_addr, res->ai_addrlen)){
|
||||||
|
throw sls::RuntimeError("Failed to connect socket");
|
||||||
|
}
|
||||||
|
freeaddrinfo(res);
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Receive a packet on localhost") {
|
||||||
|
constexpr int port = 50001;
|
||||||
|
|
||||||
|
std::vector<int> data_to_send{4, 5, 3, 2, 5, 7, 2, 3};
|
||||||
|
ssize_t packet_size =
|
||||||
|
sizeof(decltype(data_to_send)::value_type) * data_to_send.size();
|
||||||
|
sls::UdpRxSocket udpsock{port, packet_size};
|
||||||
|
|
||||||
|
|
||||||
|
int fd = open_socket(port);
|
||||||
|
// int n = sendto(fd, data_to_send.data(), packet_size, 0, res->ai_addr,
|
||||||
|
// res->ai_addrlen);
|
||||||
|
|
||||||
|
auto n = write(fd, data_to_send.data(), packet_size);
|
||||||
|
CHECK(n == packet_size);
|
||||||
|
CHECK(udpsock.ReceivePacket());
|
||||||
|
close(fd);
|
||||||
|
// Copy data from buffer and compare values
|
||||||
|
std::vector<int> data_received(data_to_send.size());
|
||||||
|
memcpy(data_received.data(), udpsock.LastPacket(), udpsock.getPacketSize());
|
||||||
|
CHECK(data_received.size() == data_to_send.size()); // sanity check
|
||||||
|
for (size_t i = 0; i != data_to_send.size(); ++i) {
|
||||||
|
CHECK(data_to_send[i] == data_received[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Shutdown socket without hanging") {
|
||||||
|
constexpr int port = 50001;
|
||||||
|
constexpr ssize_t packet_size = 8000;
|
||||||
|
sls::UdpRxSocket s{port, packet_size};
|
||||||
|
|
||||||
|
// Start a thread and wait for package
|
||||||
|
// if the socket is left open we would block
|
||||||
|
std::future<bool> ret =
|
||||||
|
std::async(static_cast<bool (sls::UdpRxSocket::*)()>(
|
||||||
|
&sls::UdpRxSocket::ReceivePacket),
|
||||||
|
&s);
|
||||||
|
|
||||||
|
s.Shutdown();
|
||||||
|
auto r = ret.get();
|
||||||
|
|
||||||
|
CHECK(r == false); // since we didn't get the packet
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Too small packet"){
|
||||||
|
constexpr int port = 50001;
|
||||||
|
sls::UdpRxSocket s(port, 2*sizeof(uint32_t));
|
||||||
|
auto fd = open_socket(port);
|
||||||
|
uint32_t val = 10;
|
||||||
|
write(fd, &val, sizeof(val));
|
||||||
|
CHECK(s.ReceivePacket() == false);
|
||||||
|
close(fd);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user