Merge branch 'developer' into jf_h5reader

This commit is contained in:
hinger_v 2024-12-02 15:06:48 +01:00
commit 7608d6392c
21 changed files with 173 additions and 168 deletions

View File

@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.14)
project(slsDetectorPackage)
# Read VERSION file into project version
set(VERSION_FILE "${CMAKE_SOURCE_DIR}/VERSION")
set(VERSION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/VERSION")
file(READ "${VERSION_FILE}" VERSION_CONTENT)
string(STRIP "${VERSION_CONTENT}" PROJECT_VERSION_STRING)
set(PROJECT_VERSION ${PROJECT_VERSION_STRING})
@ -304,19 +304,20 @@ if (SLS_USE_INTEGRATION_TESTS)
endif (SLS_USE_INTEGRATION_TESTS)
if (SLS_USE_PYTHON)
find_package (Python 3.6 COMPONENTS Interpreter Development)
find_package (Python 3.8 COMPONENTS Interpreter Development)
if(SLS_FETCH_PYBIND11_FROM_GITHUB)
FetchContent_Declare(
pybind11
GIT_REPOSITORY https://github.com/pybind/pybind11
GIT_TAG v2.11.0
GIT_TAG v2.13.6
)
else()
# https://github.com/pybind/pybind11/releases
FetchContent_Declare(
pybind11
URL ${CMAKE_SOURCE_DIR}/libs/pybind11/v2.11.0.tar.gz
URL_HASH MD5=90c4946e87c64d8d8fc0ae4edf35d780
URL ${CMAKE_CURRENT_SOURCE_DIR}/libs/pybind11/v2.13.6.tar.gz
URL_HASH MD5=a04dead9c83edae6d84e2e343da7feeb
)
endif()
FetchContent_MakeAvailable(pybind11)
@ -354,6 +355,4 @@ if(SLS_MASTER_PROJECT)
set(CMAKE_INSTALL_DIR "share/cmake/${PROJECT_NAME}")
set(PROJECT_LIBRARIES slsSupportShared slsDetectorShared slsReceiverShared)
include(cmake/package_config.cmake)
endif()
install(FILES ${CMAKE_SOURCE_DIR}/VERSION DESTINATION ${CMAKE_INSTALL_PREFIX})
endif()

124
README.md
View File

@ -2,7 +2,11 @@
Before building from source make sure that you have the [software wiki](https://slsdetectorgroup.github.io/devdoc/dependencies.html) installed. If installing using conda, conda will manage the dependencies. Avoid also installing packages with pip.
## Documentaion
Detailed documentation can be found in the [software wiki](https://slsdetectorgroup.github.io/devdoc/index.html) and on the [official site](https://www.psi.ch/en/detectors/software).
Detailed documentation including installation can be found in the [software wiki](https://slsdetectorgroup.github.io/devdoc/index.html).
Different releases can be found on the [official site](https://www.psi.ch/en/lxn/software-releases).
Firmware compatiblity can be found in [firmware page](https://github.com/slsdetectorgroup/slsDetectorFirmware)
## Installation
@ -42,33 +46,20 @@ conda search slsdet
conda search slsdetgui
```
### 2. Build from source
## 2. Build from source
##### 2.1 Download Source Code from github
### 2.1 Download Source Code from github
```
git clone https://github.com/slsdetectorgroup/slsDetectorPackage.git --branch 7.0.0
```
**Pybind for Python**<br>
* **v7.0.0+**:
pybind11 packaged into 'libs/pybind'. No longer a submodule. No need for "recursive" or "submodule update".
* **Older versions**:
pybind11 is a submodule. Must be cloned using "recursive" and updated when switching between versions using the following commands.
```
# clone using recursive to get pybind11 submodule
git clone --recursive https://github.com/slsdetectorgroup/slsDetectorPackage.git
# update submodule when switching between releases
cd slsDetectorPackage
git submodule update --init
```
##### 2.2 Build from source
> **Note:** For v6.x.x of slsDetectorPackage and older, refer [pybind11 notes on cloning](#Pybind-and-Zeromq).
###### Build using CMake
### 2.2 Build from source
### Build using CMake
```
# outside slsDetecorPackage folder
@ -94,26 +85,28 @@ Instead of the cmake command, one can use ccmake to get a list of options to con
ccmake ..
# choose the options
# first press [c] - configure
# first press [c] - configure (unil you see [g])
# then press [g] - generate
```
|Example cmake options|Comment|
|---|---|
| -DSLS_USE_PYTHON=ON | Python |
| -DPython_FIND_VIRTUALENV=ONLY | Python from only the conda environment |
| -DZeroMQ_HINT=/usr/lib64 | Use system zmq instead |
| -DPython_FIND_VIRTUALENV=ONLY | Python from only the conda env |
| -DSLS_USE_GUI=ON | GUI |
| -DSLS_USE_HDF5=ON | HDF5 |
| -DSLS_USE_SIMULATOR=ON | Simulator |
> **Note:** For v7.x.x of slsDetectorPackage and older, refer [zeromq notes for cmake option to hint library location](#Pybind-and-Zeromq).
###### Build using in-built cmk.sh script
### Build using in-built cmk.sh script
```
The binaries are generated in slsDetectorPackage/build/bin directory.
Usage: ./cmk.sh [-b] [-c] [-d <HDF5 directory>] [e] [g] [-h] [i] [-j <Number of threads>]
[-k <CMake command>] [-l <Install directory>] [m] [n] [-p] [-q <Zmq hint directory>]
[r] [s] [t] [u] [z]
Usage: $0 [-b] [-c] [-d <HDF5 directory>] [-e] [-g] [-h] [-i]
[-j <Number of threads>] [-k <CMake command>] [-l <Install directory>]
[-m] [-n] [-p] [-r] [-s] [-t] [-u] [-z]
-[no option]: only make
-b: Builds/Rebuilds CMake files normal mode
-c: Clean
@ -128,14 +121,13 @@ Usage: ./cmk.sh [-b] [-c] [-d <HDF5 directory>] [e] [g] [-h] [i] [-j <Number of
-m: Manuals
-n: Manuals without compiling doxygen (only rst)
-p: Builds/Rebuilds Python API
-q: Zmq hint directory
-r: Build/Rebuilds only receiver
-s: Simulator
-t: Build/Rebuilds only text client
-u: Chip Test Gui
-z: Moench zmq processor
# display all options
./cmk.sh -?
@ -145,11 +137,14 @@ Usage: ./cmk.sh [-b] [-c] [-d <HDF5 directory>] [e] [g] [-h] [i] [-j <Number of
# new build, python and compile in parallel:
./cmk.sh -cbpj5
#To use the system zmq (/usr/lib64) instead
./cmk.sh -cbj5 -q /usr/lib64
#For rebuilding only certain sections
./cmk.sh -tg #only text client and gui
./cmk.sh -r #only receiver
```
###### Build on old distributions
> **Note:** For v7.x.x of slsDetectorPackage and older, refer [zeromq notes for cmk script option to hint library location](#Pybind-and-Zeromq).
### Build on old distributions
If your linux distribution doesn't come with a C++11 compiler (gcc>4.8) then
it's possible to install a newer gcc using conda and build the slsDetectorPackage
@ -166,7 +161,10 @@ cmake ../slsDetectorPackage -DCMAKE_PREFIX_PATH=$CONDA_PREFIX
make -j12
```
###### Build slsDetectorGui (Qt5)
> **Note:** For v7.x.x of slsDetectorPackage and older, refer [zeromq notes for dependencies for conda](#Pybind-and-Zeromq).
### Build slsDetectorGui (Qt5)
1. Using pre-built binary on conda
```
@ -180,7 +178,14 @@ yum install qt5-qtbase-devel.x86_64
yum install qt5-qtsvg-devel.x86_64
```
3. Using conda
3. Using system installation on RHEL8
```
yum install qt5-qtbase-devel.x86_64
yum install qt5-qtsvg-devel.x86_64
yum install expat-devel.x86_64
```
4. Using conda
```
#Add channels for dependencies and our library
conda config --add channels conda-forge
@ -208,13 +213,15 @@ cd slsDetectorPackage
./cmk.sh -cbgj9
```
###### Build documentation from package
> **Note:** For v7.x.x of slsDetectorPackage and older, refer [zeromq notes for dependencies for conda](#Pybind-and-Zeromq).
### Build documentation from package
The documentation for the slsDetectorPackage is build using a combination
of Doxygen, Sphinx and Breathe. The easiest way to install the dependencies
is to use conda
```
conda create -n myenv python sphinx_rtd_theme breathe
conda create -n myenv python=3.12 sphinx sphinx_rtd_theme breathe doxygen numpy
```
```
@ -228,6 +235,47 @@ make rst # rst only, saves time in case the API did not change
```
## Pybind and Zeromq
### Pybind11 for Python
**v8.0.0+**:
pybind11 is built
* by default from tar file in repo (libs/pybind/v2.1x.0.tar.gz)
* or use advanced option SLS_FETCH_PYBIND11_FROM_GITHUB [link].
* v9.0.0+: pybind11 (v2.13.6)
* v8.x.x : pybind11 (v2.11.0)
**v7.x.x**:
pybind11 packaged into libs/pybind. No longer a submodule. No need for “recursive” or “submodule update”.
**Older versions**:
pybind11 is a submodule. Must be cloned using “recursive” and updated when switching between versions using the following commands.
```
# Note: Only for v6.x.x versions and older
# clone using recursive to get pybind11 submodule
git clone --recursive https://github.com/slsdetectorgroup/slsDetectorPackage.git
# update submodule when switching between releases
cd slsDetectorPackage
git submodule update --init
```
### Zeromq
**v8.0.0+**:
zeromq (v4.3.4) is built
* by default from tar file in repo (libs/libzmq/libzmq-4.3.4.tar.gz)
* or use advanced option SLS_FETCH_ZMQ_FROM_GITHUB [link].
**v7.x.x and older**:
zeromq-devel must be installed and one can hint its location using
* cmake option:-DZeroMQ_HINT=/usr/lib64 or
* option -q in cmk.sh script: : ./cmk.sh -cbj5 -q /usr/lib64
* zeromq dependency added when installing using conda
## Support
dhanya.thattil@psi.ch
erik.frojdh@psi.ch
erik.frojdh@psi.ch

View File

@ -8,7 +8,4 @@ cd python
# copy VERSION into slsdet for installation
cp ../VERSION slsdet/VERSION
# to be used to get project version in meta.yaml
export SLS_DET_VERSION=$(cat python/slsdet/VERSION)
${PYTHON} setup.py install

View File

@ -1,10 +1,6 @@
{% set version = environ.get('SLS_DET_VERSION', '0.0.0') %}
package:
name: sls_detector_software
version: "{{ version }}"
version: {{ environ.get('GIT_DESCRIBE_TAG', '') }}
source:
@ -79,12 +75,13 @@ outputs:
- {{compiler('cxx')}}
- {{ pin_subpackage('slsdetlib', exact=True) }}
- setuptools
- pybind11=2.11
- pybind11=2.13
host:
- python
- {{ pin_subpackage('slsdetlib', exact=True) }}
- pybind11=2.11
- setuptools
- pybind11=2.13
run:

View File

@ -64,7 +64,6 @@ set(SPHINX_SOURCE_FILES
src/binaryfileformat.rst
src/hdf5fileformat.rst
src/zmqjsonheaderformat.rst
src/ctbframeformat.rst
)
foreach(filename ${SPHINX_SOURCE_FILES})

View File

@ -1,81 +0,0 @@
Chip Test Board Frame Format
================================
Contents of a frame
--------------------
Each frame consists of 3 types of data in the following order:
.. code-block:: text
# only data from enabled modes are included
[ Analog Data ]
[ Digital Data ]
[ Transceiver Data ]
Each Data type is further divided into:
.. code-block:: text
[ Sample 0 for all enabled Channels ]
[ Sample 1 for all enabled Channels ]
...
[ Sample N for all enabled Channels ]
Digital data
-------------------
The chip test board sends out all digital data.
Only the receiver can filter them using the command `rx_dbitlist <commandline.html#term-rx_dbitlist-all-or-i0-i1-i2-...>`_.
.. code-block:: text
# filtered and reordered digital data from receiver
# Any signal that is not a byte is filled with 0's to make up a byte
[all samples of list signal 0]
[all samples of list signal 1]
...
[all samples of list signal N]
Parameters of readout modes
---------------------------------
.. list-table::
:widths: 25 40 20 30
:header-rows: 1
* - Readout mode
- Enable Channels
- Number of samples
- Number of bytes
* - Analog
- 1G: `adcenable <commandline.htmlterm-adcenable-bitmask>`_
10G: `adcenable10g <commandline.htmlterm-adcenable10g-bitmask>`_
- `asamples <commandline.html#term-asamples-n_samples>`_
- 2 bytes per channel,
max 32 channels
* - Digital
- `rx_dbitlist <commandline.html#term-rx_dbitlist-all-or-i0-i1-i2-...>`_
[filtered only by receiver, module sends out all digital data]
- `dsamples <commandline.html#term-dsamples-n_value>`_
- 1 bit per signal,
max 64 signals
* - Transceiver
- `transceiverenable <commandline.html#term-transceiverenable-bitmask>`_
- `tsamples <commandline.html#term-tsamples-n_value>`_
- 8 bytes per channel,
max 4 channels

View File

@ -20,8 +20,8 @@ the shared libraries these are needed:
Python bindings
-----------------------
* Python > 3.6
* pybind11 2.11.0 (packaged in libs)
* Python >= 3.8
* pybind11 2.13.6 (packaged in libs)
.. note ::

View File

@ -12,7 +12,7 @@ Welcome to slsDetectorPackage's documentation!
For further documentation, visit the official page: https://www.psi.ch/en/detectors/documentation
.. toctree::
:maxdepth: 1
:maxdepth: 3
:caption: Installation:
installation
@ -88,7 +88,6 @@ Welcome to slsDetectorPackage's documentation!
fileformat
slsreceiverheaderformat
ctbframeformat
masterfileattributes
binaryfileformat
hdf5fileformat

View File

@ -1,9 +1,4 @@
.. warning ::
Before building from source make sure that you have the
:doc:`dependencies <../dependencies>` installed. If installing using conda, conda will
manage the dependencies. Avoid also installing packages with pip.
.. _Installation:
@ -11,8 +6,18 @@
Installation
===============
One can either install pre-built binaries using conda or build from source.
.. warning ::
Before building from source make sure that you have the
:doc:`dependencies <../dependencies>` installed. If installing using conda, conda will
manage the dependencies. Avoid also installing packages with pip.
Install binaries using conda
-------------------------------
----------------------------------
Conda is not only useful to manage python environments but can also
be used as a user space package manager. Dates in the tag (for eg. 2020.07.23.dev0)
@ -55,7 +60,7 @@ We have three different packages available:
Build from source
-------------------
----------------------
1. Download Source Code from github
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -75,8 +80,10 @@ Build from source
2. Build from Source
^^^^^^^^^^^^^^^^^^^^^^^^^^
One can either build using cmake or use the in-built cmk.sh script.
Build using CMake
^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
@ -103,7 +110,7 @@ Instead of the cmake command, one can use ccmake to get a list of options to con
ccmake ..
# choose the options
# first press [c] - configure (maybe multiple times till you see [g])
# first press [c] - configure (until you see [g])
# then press [g] - generate
@ -123,7 +130,7 @@ Example cmake options Comment
Build using in-built cmk.sh script
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
@ -173,7 +180,7 @@ Build using in-built cmk.sh script
Build on old distributions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If your linux distribution doesn't come with a C++11 compiler (gcc>4.8) then
it's possible to install a newer gcc using conda and build the slsDetectorPackage
@ -198,7 +205,7 @@ using this compiler
Build slsDetectorGui (Qt5)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. Using pre-built binary on conda
@ -259,7 +266,7 @@ Build slsDetectorGui (Qt5)
Build this documentation
^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The documentation for the slsDetectorPackage is build using a combination
of Doxygen, Sphinx and Breathe. The easiest way to install the dependencies
@ -282,16 +289,18 @@ is to use conda
Pybind and Zeromq
^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. _pybind for different slsDetectorPackage versions:
| **Pybind for Python**
| v8.0.0+:
| pybind11 (v2.11.0) is built
| * by default from tar file in repo (libs/pybind/v2.11.0.tar.gz)
| **Pybind11 for Python**
| v8.0.0+:
| pybind11 is built
| * by default from tar file in repo (libs/pybind/v2.1x.0.tar.gz)
| * or use advanced option SLS_FETCH_PYBIND11_FROM_GITHUB [`link <https://github.com/pybind/pybind11>`__].
| * v9.0.0+: pybind11 (v2.13.6)
| * v8.x.x : pybind11 (v2.11.0)
|
| v7.x.x:
| pybind11 packaged into 'libs/pybind'. No longer a submodule. No need for "recursive" or "submodule update".

View File

@ -6,7 +6,7 @@ Getting Started
Which Python?
--------------------
We require at least Python 3.6 and strongly recommended that you don't use the system
We require at least Python 3.8 and strongly recommended that you don't use the system
Python installation. The examples in this documentation uses `conda
<https://docs.conda.io/en/latest/miniconda.html>`_ since it provides good support
also for non Python packages but there are also other alternatives like, pyenv.

View File

@ -394,6 +394,14 @@ Missing first frame or next frame after a delay
Connect the data link from the Module directly to receiver pc or to a private network.
Mythen3
--------
Detector status is waiting even in auto timing mode
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Check if the control board or the flat band cable is connected properly. If not, connect them properly and try again.
Jungfrau
---------

Binary file not shown.

Binary file not shown.

View File

@ -11,4 +11,6 @@ slsDetectorPackage/8.0.1_rh7 stable cmake/3.15.5 Qt/5.12.10
slsDetectorPackage/8.0.1_rh8 stable cmake/3.15.5 Qt/5.12.10
slsDetectorPackage/8.0.2_rh7 stable cmake/3.15.5 Qt/5.12.10
slsDetectorPackage/8.0.2_rh8 stable cmake/3.15.5 Qt/5.12.10
slsDetectorPackage/9.0.0_rh8 stable cmake/3.15.5 Qt/5.12.10

View File

@ -64,7 +64,7 @@ configure_file( scripts/test_virtual.py
${CMAKE_BINARY_DIR}/test_virtual.py
)
configure_file( ${CMAKE_SOURCE_DIR}/VERSION
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/../VERSION
${CMAKE_BINARY_DIR}/bin/slsdet/VERSION
)

View File

@ -1505,6 +1505,7 @@ fi
if [[ ${IS_GET} -eq 0 ]]; then
if [[ "${cword}" == "2" ]]; then
FCN_RETURN=""
IS_PATH=1
fi
fi
return 0
@ -1514,6 +1515,7 @@ FCN_RETURN=""
if [[ ${IS_GET} -eq 1 ]]; then
if [[ "${cword}" == "2" ]]; then
FCN_RETURN=""
IS_PATH=1
fi
fi
return 0

View File

@ -1429,6 +1429,7 @@ fi
if [[ ${IS_GET} -eq 0 ]]; then
if [[ "${cword}" == "2" ]]; then
FCN_RETURN=""
IS_PATH=1
fi
fi
return 0
@ -1438,6 +1439,7 @@ FCN_RETURN=""
if [[ ${IS_GET} -eq 1 ]]; then
if [[ "${cword}" == "2" ]]; then
FCN_RETURN=""
IS_PATH=1
fi
fi
return 0

View File

@ -3884,8 +3884,8 @@ patternX:
require_det_id: true
function: setPattern
input: [ 'args[0]' ]
arg_types: [special::path]
input_types: [ std::string ]
cast_input: [ false ]
output: [ 'args.front()' ]
patword:

View File

@ -6539,7 +6539,7 @@ patternX:
PUT:
args:
- arg_types:
- std::string
- special::path
argc: 1
cast_input:
- false

View File

@ -3319,6 +3319,12 @@ TEST_CASE("reg", "[.cmdcall]") {
auto det_type = det.getDetectorType().squash();
if (det_type != defs::EIGER) {
uint32_t addr = 0x64;
if (det_type == defs::MYTHEN3) {
addr = 0x80;
}
if (det_type == defs::GOTTHARD2) {
addr = 0x20;
}
std::string saddr = ToStringHex(addr);
auto prev_val = det.readRegister(addr);
{
@ -3369,6 +3375,12 @@ TEST_CASE("setbit", "[.cmdcall]") {
auto det_type = det.getDetectorType().squash();
if (det_type != defs::EIGER) {
uint32_t addr = 0x64;
if (det_type == defs::MYTHEN3) {
addr = 0x80;
}
if (det_type == defs::GOTTHARD2) {
addr = 0x20;
}
std::string saddr = ToStringHex(addr);
auto prev_val = det.readRegister(addr);
{
@ -3393,6 +3405,12 @@ TEST_CASE("clearbit", "[.cmdcall]") {
auto det_type = det.getDetectorType().squash();
if (det_type != defs::EIGER) {
uint32_t addr = 0x64;
if (det_type == defs::MYTHEN3) {
addr = 0x80;
}
if (det_type == defs::GOTTHARD2) {
addr = 0x20;
}
std::string saddr = ToStringHex(addr);
auto prev_val = det.readRegister(addr);
{
@ -3417,6 +3435,12 @@ TEST_CASE("getbit", "[.cmdcall]") {
auto det_type = det.getDetectorType().squash();
if (det_type != defs::EIGER) {
uint32_t addr = 0x64;
if (det_type == defs::MYTHEN3) {
addr = 0x80;
}
if (det_type == defs::GOTTHARD2) {
addr = 0x20;
}
std::string saddr = ToStringHex(addr);
auto prev_val = det.readRegister(addr);
{

View File

@ -1,8 +1,6 @@
// SPDX-License-Identifier: LGPL-3.0-or-other
// Copyright (C) 2021 Contributors to the SLS Detector Package
/** API versions */
#define APIRECEIVER "developer 0x241014"
#define APILIB "developer 0x241021"
#define APICTB "developer 0x241107"
#define APIGOTTHARD "developer 0x241107"
#define APIGOTTHARD2 "developer 0x241107"
@ -10,4 +8,6 @@
#define APIXILINXCTB "developer 0x241107"
#define APIEIGER "developer 0x241107"
#define APIJUNGFRAU "developer 0x241120"
#define APIMYTHEN3 "developer 0x241121"
#define APIMYTHEN3 "developer 0x241121"
#define APILIB "developer 0x241122"
#define APIRECEIVER "developer 0x241122"