Compare commits

..

6 Commits

Author SHA1 Message Date
4a6693de3f recepie for ctbgui 2022-05-02 12:03:59 +02:00
a891db8d06 WIP 2022-04-29 15:59:26 +02:00
36a1159f38 updated pybind11 from 2.6.2 to 2.9.2 2022-04-28 16:39:39 +02:00
98e2ddbb74 indent 2022-04-28 16:37:52 +02:00
fa12ab2858 Support external builds of python bindings, gui, ctbgui and moench stuff (#440)
Use already installed version of the slsDetectorPackage. Assumes that the library has already been built and installed either on a system wide location or pointed to by CMAKE_PREFIX_PATH
2022-04-28 16:35:29 +02:00
afeee5501c Fixpositions (#436)
* fix positions on server side

* wip

* numports wip

* wip

* jungfrau top inner interface row increment

* x, y detpos, wip

* removed eiger row indices flipping in gui (bottom flipping maintained)

* wip

* wip, jungfrau numinterfaces2

* jungfrau virtual works

* eiger, jungfrau, g2 virtual server works

* eiger positions fix, wip

* binaries in

* minor printout

* binaries in

* pointer bug

* comment to define test_mod_geometry define
2022-04-28 16:32:26 +02:00
48 changed files with 605 additions and 416 deletions

View File

@ -150,7 +150,7 @@ if (NOT TARGET slsProjectWarnings)
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5 AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5 AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
target_compile_options(slsProjectWarnings INTERFACE target_compile_options(slsProjectWarnings INTERFACE
-Wno-missing-field-initializers) -Wno-missing-field-initializers)
endif() endif()
endif() endif()

View File

@ -67,7 +67,8 @@ This document describes the differences between v7.0.0 and v6.x.x
- registerCallBackStartAcquisition gave incorrect imagesize (+120 bytes). corrected. - registerCallBackStartAcquisition gave incorrect imagesize (+120 bytes). corrected.
- registerCallBackStartAcquisition parameter is a const string reference - registerCallBackStartAcquisition parameter is a const string reference
- m3 (runnig config second time with tengiga 0, dr !=32, counters !=0x7) calculated incorrect image size expected - m3 (runnig config second time with tengiga 0, dr !=32, counters !=0x7) calculated incorrect image size expected
- fixed row column indexing (mainly for multi module Jungfrau 2 interfaces )
- eiger gui row indices not flipped anymore (fix in config)
2. Resolved Issues 2. Resolved Issues
================== ==================

View File

@ -1,9 +0,0 @@
python:
- 3.6
- 3.7
- 3.8
- 3.9
- 3.10
numpy:
- 1.17

View File

@ -1,11 +0,0 @@
# SPDX-License-Identifier: LGPL-3.0-or-other
# Copyright (C) 2021 Contributors to the SLS Detector Package
mkdir $PREFIX/lib
mkdir $PREFIX/bin
mkdir $PREFIX/include
cp build/bin/ctbGui $PREFIX/bin/.
cp build/bin/libctbRootLib.so $PREFIX/lib/.

View File

@ -1,5 +0,0 @@
# SPDX-License-Identifier: LGPL-3.0-or-other
# Copyright (C) 2021 Contributors to the SLS Detector Package
#Copy the GUI
mkdir -p $PREFIX/bin
cp build/install/bin/slsDetectorGui $PREFIX/bin/.

View File

@ -1,22 +0,0 @@
# SPDX-License-Identifier: LGPL-3.0-or-other
# Copyright (C) 2021 Contributors to the SLS Detector Package
mkdir -p $PREFIX/lib
mkdir -p $PREFIX/bin
mkdir -p $PREFIX/include/sls
# mkdir $PREFIX/include/slsDetectorPackage
#Shared and static libraries
cp build/install/lib/* $PREFIX/lib/
#Binaries
cp build/install/bin/sls_detector_acquire $PREFIX/bin/.
cp build/install/bin/sls_detector_get $PREFIX/bin/.
cp build/install/bin/sls_detector_put $PREFIX/bin/.
cp build/install/bin/sls_detector_help $PREFIX/bin/.
cp build/install/bin/slsReceiver $PREFIX/bin/.
cp build/install/bin/slsMultiReceiver $PREFIX/bin/.
cp build/install/include/sls/* $PREFIX/include/sls
cp -rv build/install/share $PREFIX

View File

@ -1,6 +0,0 @@
# SPDX-License-Identifier: LGPL-3.0-or-other
# Copyright (C) 2021 Contributors to the SLS Detector Package
#Copy the Moench executables
mkdir -p $PREFIX/bin
cp build/install/bin/moench* $PREFIX/bin/.

View File

@ -1,134 +0,0 @@
package:
name: sls_detector_software
version: {{ environ.get('GIT_DESCRIBE_TAG', '') }}
source:
- path: ..
build:
number: 0
binary_relocation: True
rpaths:
- lib/
requirements:
build:
- {{ compiler('c') }}
- {{compiler('cxx')}}
- cmake
- qwt 6.*
- qt 4.8.*
- zeromq
- 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]
- expat
host:
- libstdcxx-ng
- libgcc-ng
- zeromq
- xorg-libx11
- xorg-libice
- xorg-libxext
- xorg-libsm
- xorg-libxau
- xorg-libxrender
- xorg-libxfixes
- expat
run:
- zeromq
- libstdcxx-ng
- libgcc-ng
outputs:
- name: slsdetlib
script: copy_lib.sh
requirements:
build:
- {{ compiler('c') }}
- {{compiler('cxx')}}
- libstdcxx-ng
- libgcc-ng
- zeromq
host:
- zeromq
run:
- libstdcxx-ng
- libgcc-ng
- zeromq
- name: slsdet
script: build_pylib.sh
requirements:
build:
- python
- {{ compiler('c') }}
- {{compiler('cxx')}}
- {{ pin_subpackage('slsdetlib', exact=True) }}
- setuptools
host:
- python
- {{ pin_subpackage('slsdetlib', exact=True) }}
run:
- libstdcxx-ng
- libgcc-ng
- python
- numpy
- {{ pin_subpackage('slsdetlib', exact=True) }}
test:
imports:
- slsdet
- name: slsdetgui
script: copy_gui.sh
requirements:
build:
- {{ compiler('c') }}
- {{compiler('cxx')}}
- {{ pin_subpackage('slsdetlib', exact=True) }}
- qwt 6.*
run:
- {{ pin_subpackage('slsdetlib', exact=True) }}
- qwt 6.*
- qt 4.8.*
- expat
- name: moenchzmq
script: copy_moench.sh
requirements:
build:
- {{ compiler('c') }}
- {{compiler('cxx')}}
- {{ pin_subpackage('slsdetlib', exact=True) }}
run:
- {{ pin_subpackage('slsdetlib', exact=True) }}
- expat

View File

@ -1,3 +0,0 @@
# SPDX-License-Identifier: LGPL-3.0-or-other
# Copyright (C) 2021 Contributors to the SLS Detector Package
ctest -j2

24
conda-recipes/ctbgui/build.sh Executable file
View File

@ -0,0 +1,24 @@
# SPDX-License-Identifier: LGPL-3.0-or-other
# Copyright (C) 2021 Contributors to the SLS Detector Package
mkdir build
cd build
cmake .. \
-DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
-DSLS_USE_CTBGUI=ON \
-DSLS_EXT_BUILD=ON\
-DCMAKE_BUILD_TYPE=Release \
-DSLS_USE_HDF5=OFF\
NCORES=$(getconf _NPROCESSORS_ONLN)
echo "Building using: ${NCORES} cores"
cmake --build . -- -j${NCORES}
cmake --build . --target install
CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2
#Clean up for the next build
# cd ..
# rm -rf build

View File

@ -0,0 +1,94 @@
package:
name: ctbgui
version: {{ environ.get('GIT_DESCRIBE_TAG', '') }}
source:
- path: ../..
build:
number: 0
binary_relocation: True
rpaths:
- lib/
requirements:
build:
- {{ compiler('c') }}
- {{compiler('cxx')}}
- slsdetlib {{ environ.get('GIT_DESCRIBE_TAG', '') }}
- cmake
- root
# - qwt 6.*
# - qt 4.8.*
# - zeromq
# - 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]
# - expat
host:
- libstdcxx-ng
- libgcc-ng
- root
- slsdetlib {{ environ.get('GIT_DESCRIBE_TAG', '') }}
# - zeromq
# - xorg-libx11
# - xorg-libice
# - xorg-libxext
# - xorg-libsm
# - xorg-libxau
# - xorg-libxrender
# - xorg-libxfixes
# - expat
run:
# - zeromq
- libstdcxx-ng
- libgcc-ng
- root
# - slsdetlib {{ environ.get('GIT_DESCRIBE_TAG', '') }}
# - qwt 6.*
# - qt 4.8.*
# - expat
# - name: slsdetgui
# script: copy_gui.sh
# requirements:
# build:
# - {{ compiler('c') }}
# - {{compiler('cxx')}}
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# - qwt 6.*
# run:
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# - qwt 6.*
# - qt 4.8.*
# - expat
# - name: moenchzmq
# script: copy_moench.sh
# requirements:
# build:
# - {{ compiler('c') }}
# - {{compiler('cxx')}}
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# run:
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# - expat

View File

@ -0,0 +1,25 @@
# SPDX-License-Identifier: LGPL-3.0-or-other
# Copyright (C) 2021 Contributors to the SLS Detector Package
mkdir build
cd build
cmake .. \
-DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
-DSLS_USE_MOENCH=ON\
-DSLS_USE_TESTS=ON \
-DSLS_EXT_BUILD=ON \
-DCMAKE_BUILD_TYPE=Release \
-DSLS_USE_HDF5=OFF\
NCORES=$(getconf _NPROCESSORS_ONLN)
echo "Building using: ${NCORES} cores"
cmake --build . -- -j${NCORES}
cmake --build . --target install
CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2
#Clean up for the next build
# cd ..
# rm -rf build

View File

@ -0,0 +1,36 @@
package:
name: moenchzmq
version: {{ environ.get('GIT_DESCRIBE_TAG', '') }}
source:
- path: ../..
build:
number: 0
binary_relocation: True
rpaths:
- lib/
requirements:
build:
- {{ compiler('c') }}
- {{compiler('cxx')}}
- cmake
- libstdcxx-ng
- libgcc-ng
- zeromq
- libtiff
- slsdetlib {{ environ.get('GIT_DESCRIBE_TAG', '') }}
host:
- zeromq
- libtiff
- slsdetlib {{ environ.get('GIT_DESCRIBE_TAG', '') }}
run:
- libstdcxx-ng
- libgcc-ng
- zeromq
- libtiff
- slsdetlib {{ environ.get('GIT_DESCRIBE_TAG', '') }}

View File

@ -2,5 +2,7 @@
# Copyright (C) 2021 Contributors to the SLS Detector Package # Copyright (C) 2021 Contributors to the SLS Detector Package
echo "|<-------- starting python build" echo "|<-------- starting python build"
echo $PWD
cd python cd python
${PYTHON} setup.py install echo "folder: $PWD"
${PYTHON} setup.py install

View File

@ -0,0 +1,2 @@
python:
- 3.9

34
conda-recipes/slsdet/meta.yaml Executable file
View File

@ -0,0 +1,34 @@
package:
name: slsdet
version: {{ environ.get('GIT_DESCRIBE_TAG', '') }}
source:
- path: ../..
build:
number: 0
binary_relocation: True
rpaths:
- lib/
requirements:
build:
- python
- {{ compiler('c') }}
- {{compiler('cxx')}}
- cmake
- slsdetlib {{ environ.get('GIT_DESCRIBE_TAG', '') }}
- setuptools
host:
- python
- slsdetlib {{ environ.get('GIT_DESCRIBE_TAG', '') }}
run:
- libstdcxx-ng
- libgcc-ng
- python
- numpy
- slsdetlib {{ environ.get('GIT_DESCRIBE_TAG', '') }}

View File

@ -0,0 +1,24 @@
# SPDX-License-Identifier: LGPL-3.0-or-other
# Copyright (C) 2021 Contributors to the SLS Detector Package
mkdir build
cd build
cmake .. \
-DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
-DSLS_USE_GUI=ON \
-DSLS_EXT_BUILD=ON\
-DCMAKE_BUILD_TYPE=Release \
-DSLS_USE_HDF5=OFF\
NCORES=$(getconf _NPROCESSORS_ONLN)
echo "Building using: ${NCORES} cores"
cmake --build . -- -j${NCORES}
cmake --build . --target install
CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2
#Clean up for the next build
# cd ..
# rm -rf build

View File

@ -0,0 +1,91 @@
package:
name: slsdetgui
version: {{ environ.get('GIT_DESCRIBE_TAG', '') }}
source:
- path: ../..
build:
number: 0
binary_relocation: True
rpaths:
- lib/
requirements:
build:
- {{ compiler('c') }}
- {{compiler('cxx')}}
- slsdetlib {{ environ.get('GIT_DESCRIBE_TAG', '') }}
- cmake
- qwt 6.*
- qt 4.8.*
- zeromq
- 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]
- expat
host:
- libstdcxx-ng
- libgcc-ng
- slsdetlib {{ environ.get('GIT_DESCRIBE_TAG', '') }}
- zeromq
- xorg-libx11
- xorg-libice
- xorg-libxext
- xorg-libsm
- xorg-libxau
- xorg-libxrender
- xorg-libxfixes
- expat
run:
- zeromq
- libstdcxx-ng
- libgcc-ng
- slsdetlib {{ environ.get('GIT_DESCRIBE_TAG', '') }}
- qwt 6.*
- qt 4.8.*
- expat
# - name: slsdetgui
# script: copy_gui.sh
# requirements:
# build:
# - {{ compiler('c') }}
# - {{compiler('cxx')}}
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# - qwt 6.*
# run:
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# - qwt 6.*
# - qt 4.8.*
# - expat
# - name: moenchzmq
# script: copy_moench.sh
# requirements:
# build:
# - {{ compiler('c') }}
# - {{compiler('cxx')}}
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# run:
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# - expat

View File

@ -2,17 +2,18 @@
# Copyright (C) 2021 Contributors to the SLS Detector Package # Copyright (C) 2021 Contributors to the SLS Detector Package
mkdir build mkdir build
mkdir install
cd build cd build
cmake .. \ cmake .. \
-DCMAKE_PREFIX_PATH=$CONDA_PREFIX \ -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
-DCMAKE_INSTALL_PREFIX=install \ -DCMAKE_INSTALL_PREFIX=$PREFIX \
-DSLS_USE_TEXTCLIENT=ON \ -DSLS_USE_TEXTCLIENT=ON \
-DSLS_USE_RECEIVER=ON \ -DSLS_USE_RECEIVER=ON \
-DSLS_USE_GUI=ON \ -DSLS_USE_GUI=OFF \
-DSLS_USE_MOENCH=ON\ -DSLS_USE_MOENCH=OFF\
-DSLS_USE_TESTS=ON \ -DSLS_USE_TESTS=ON \
-DSLS_USE_PYTHON=OFF \ -DSLS_USE_PYTHON=OFF \
-DSLS_DEVEL_HEADERS=ON \
-DCMAKE_BUILD_TYPE=Release \ -DCMAKE_BUILD_TYPE=Release \
-DSLS_USE_HDF5=OFF\ -DSLS_USE_HDF5=OFF\
@ -22,3 +23,7 @@ cmake --build . -- -j${NCORES}
cmake --build . --target install cmake --build . --target install
CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2 CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2
#Clean up for the next build
# cd ..
# rm -rf build

View File

@ -0,0 +1,90 @@
package:
name: slsdetlib
version: {{ environ.get('GIT_DESCRIBE_TAG', '') }}
source:
- path: ../..
build:
number: 0
binary_relocation: True
rpaths:
- lib/
requirements:
build:
- {{ compiler('c') }}
- {{compiler('cxx')}}
- cmake
- libstdcxx-ng
- libgcc-ng
- zeromq
host:
- zeromq
run:
- libstdcxx-ng
- libgcc-ng
- zeromq
# outputs:
# - name: slsdetlib
# script: build_lib.sh
# requirements:
# build:
# - {{ compiler('c') }}
# - {{compiler('cxx')}}
# - libstdcxx-ng
# - libgcc-ng
# - zeromq
# host:
# - zeromq
# run:
# - libstdcxx-ng
# - libgcc-ng
# - zeromq
# - name: slsdet
# script: build_py.sh
# requirements:
# build:
# - python
# - {{ compiler('c') }}
# - {{compiler('cxx')}}
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# - setuptools
# host:
# - python
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# run:
# - libstdcxx-ng
# - libgcc-ng
# - python
# - numpy
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# - name: slsdetgui
# script: build_gui.sh
# requirements:
# build:
# - {{ compiler('c') }}
# - {{compiler('cxx')}}
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# - qwt 6.*
# run:
# - {{ pin_subpackage('slsdetlib', exact=True) }}
# - qwt 6.*
# - qt 4.8.*
# - expat

View File

@ -83,8 +83,12 @@ target_link_libraries(ctbGui PUBLIC
${TIFF_LIBRARIES} ${TIFF_LIBRARIES}
) )
set_target_properties(ctbGui PROPERTIES #set_target_properties(ctbGui PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin # RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
#
) #)
install(TARGETS ctbGui ctbRootLib
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

View File

@ -2060,8 +2060,8 @@ void *start_timer(void *arg) {
header->frameNumber = frameNr + iframes; header->frameNumber = frameNr + iframes;
header->packetNumber = i; header->packetNumber = i;
header->modId = 0; header->modId = 0;
header->row = detPos[X]; header->row = detPos[Y];
header->column = detPos[Y]; header->column = detPos[X];
// fill data // fill data
memcpy(packetData + sizeof(sls_detector_header), memcpy(packetData + sizeof(sls_detector_header),

View File

@ -1095,19 +1095,19 @@ int *Beb_GetDetectorPosition() { return Beb_positions; }
int Beb_SetDetectorPosition(int pos[]) { int Beb_SetDetectorPosition(int pos[]) {
if (!Beb_activated) if (!Beb_activated)
return OK; return OK;
LOG(logINFO, ("Got Position values %d %d...\n", pos[0], pos[1])); LOG(logINFO, ("Setting Position: (%d, %d)\n", pos[X], pos[Y]));
// save positions // save positions
Beb_positions[0] = pos[0]; Beb_positions[Y] = pos[Y];
Beb_positions[1] = pos[1]; Beb_positions[X] = pos[X];
// get left and right // get left and right
int posLeft[2] = {pos[0], Beb_top ? pos[1] : pos[1] + 1}; int posLeft[2] = {Beb_top ? pos[X] : pos[X] + 1, pos[Y]};
int posRight[2] = {pos[0], Beb_top ? pos[1] + 1 : pos[1]}; int posRight[2] = {Beb_top ? pos[X] + 1 : pos[X], pos[Y]};
if (Beb_quadEnable) { if (Beb_quadEnable) {
posRight[0] = 1; // right is next row posRight[Y] = 1; // right is next row
posRight[1] = 0; // right same first column posRight[X] = 0; // right same first column
} }
int ret = FAIL; int ret = FAIL;
@ -1122,7 +1122,7 @@ int Beb_SetDetectorPosition(int pos[]) {
uint32_t value = 0; uint32_t value = 0;
ret = OK; ret = OK;
// x left // x left
int posval = Beb_swap_uint16(posLeft[0]); int posval = Beb_swap_uint16(posLeft[Y]);
value = Beb_Read32(csp0base, UDP_HEADER_A_LEFT_OFST); value = Beb_Read32(csp0base, UDP_HEADER_A_LEFT_OFST);
value &= UDP_HEADER_ID_MSK; // to keep previous id value value &= UDP_HEADER_ID_MSK; // to keep previous id value
Beb_Write32(csp0base, UDP_HEADER_A_LEFT_OFST, Beb_Write32(csp0base, UDP_HEADER_A_LEFT_OFST,
@ -1134,7 +1134,7 @@ int Beb_SetDetectorPosition(int pos[]) {
ret = FAIL; ret = FAIL;
} }
// x right // x right
posval = Beb_swap_uint16(posRight[0]); posval = Beb_swap_uint16(posRight[Y]);
value = Beb_Read32(csp0base, UDP_HEADER_A_RIGHT_OFST); value = Beb_Read32(csp0base, UDP_HEADER_A_RIGHT_OFST);
value &= UDP_HEADER_ID_MSK; // to keep previous id value value &= UDP_HEADER_ID_MSK; // to keep previous id value
Beb_Write32(csp0base, UDP_HEADER_A_RIGHT_OFST, Beb_Write32(csp0base, UDP_HEADER_A_RIGHT_OFST,
@ -1147,7 +1147,7 @@ int Beb_SetDetectorPosition(int pos[]) {
} }
// y left (column) // y left (column)
posval = Beb_swap_uint16(posLeft[1]); posval = Beb_swap_uint16(posLeft[X]);
value = Beb_Read32(csp0base, UDP_HEADER_B_LEFT_OFST); value = Beb_Read32(csp0base, UDP_HEADER_B_LEFT_OFST);
value &= UDP_HEADER_Z_MSK; // to keep previous z value value &= UDP_HEADER_Z_MSK; // to keep previous z value
Beb_Write32(csp0base, UDP_HEADER_B_LEFT_OFST, Beb_Write32(csp0base, UDP_HEADER_B_LEFT_OFST,
@ -1160,7 +1160,7 @@ int Beb_SetDetectorPosition(int pos[]) {
} }
// y right // y right
posval = Beb_swap_uint16(posRight[1]); posval = Beb_swap_uint16(posRight[X]);
value = Beb_Read32(csp0base, UDP_HEADER_B_RIGHT_OFST); value = Beb_Read32(csp0base, UDP_HEADER_B_RIGHT_OFST);
value &= UDP_HEADER_Z_MSK; // to keep previous z value value &= UDP_HEADER_Z_MSK; // to keep previous z value
Beb_Write32(csp0base, UDP_HEADER_B_RIGHT_OFST, Beb_Write32(csp0base, UDP_HEADER_B_RIGHT_OFST,
@ -1176,10 +1176,10 @@ int Beb_SetDetectorPosition(int pos[]) {
Beb_close(fd, csp0base); Beb_close(fd, csp0base);
} }
if (ret == OK) { if (ret == OK) {
LOG(logINFO, ("Position set to...\n" LOG(logINFO, ("Position set to (col, row):\n"
"\tLeft: [%d, %d]\n" "\tLeft: [%d, %d]\n"
"\tRight:[%d, %d]\n", "\tRight:[%d, %d]\n",
posLeft[0], posLeft[1], posRight[0], posRight[1])); posLeft[X], posLeft[Y], posRight[X], posRight[Y]));
} }
return ret; return ret;

View File

@ -19,7 +19,7 @@
#include <pthread.h> #include <pthread.h>
#include <time.h> #include <time.h>
#endif #endif
extern int portno;
// Global variable from slsDetectorServer_funcs // Global variable from slsDetectorServer_funcs
extern int debugflag; extern int debugflag;
extern int updateFlag; extern int updateFlag;
@ -2473,9 +2473,9 @@ void *start_timer(void *arg) {
int maxPacketsPerFrame = (tgEnable ? 4 : 16) * dr; int maxPacketsPerFrame = (tgEnable ? 4 : 16) * dr;
int npixelsx = 256 * 2 * bytesPerPixel; int npixelsx = 256 * 2 * bytesPerPixel;
int databytes = 256 * 256 * 2 * bytesPerPixel; int databytes = 256 * 256 * 2 * bytesPerPixel;
int row = eiger_virtual_detPos[0]; int row = eiger_virtual_detPos[Y];
int colLeft = top ? eiger_virtual_detPos[1] : eiger_virtual_detPos[1] + 1; int colLeft = top ? eiger_virtual_detPos[X] : eiger_virtual_detPos[X] + 1;
int colRight = top ? eiger_virtual_detPos[1] + 1 : eiger_virtual_detPos[1]; int colRight = top ? eiger_virtual_detPos[X] + 1 : eiger_virtual_detPos[X];
int readNRows = getReadNRows(); int readNRows = getReadNRows();
if (readNRows == -1) { if (readNRows == -1) {
@ -2548,8 +2548,20 @@ void *start_timer(void *arg) {
} }
break; break;
case 16: case 16:
// to debug multi module geometry (row, column) in virtual servers (all pixels
// in a module set to particular value)
#ifdef TEST_MOD_GEOMETRY
if ((i % 1024) < 512) {
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
top ? (portno % 1900) : ((portno % 1900) + 1);
} else {
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
top ? ((portno % 1900) + 1) : (portno % 1900);
}
#else
*((uint16_t *)(imageData + i * sizeof(uint16_t))) = *((uint16_t *)(imageData + i * sizeof(uint16_t))) =
eiger_virtual_test_mode ? 0xFFE : (uint16_t)pixelVal; eiger_virtual_test_mode ? 0xFFE : (uint16_t)pixelVal;
#endif
break; break;
case 32: case 32:
*((uint32_t *)(imageData + i * sizeof(uint32_t))) = *((uint32_t *)(imageData + i * sizeof(uint32_t))) =

View File

@ -1917,7 +1917,7 @@ int setDetectorPosition(int pos[]) {
int ret = OK; int ret = OK;
// row // row
value = detPos[X]; value = detPos[Y];
bus_w(addr, (bus_r(addr) & ~COORD_ROW_MSK) | bus_w(addr, (bus_r(addr) & ~COORD_ROW_MSK) |
((value << COORD_ROW_OFST) & COORD_ROW_MSK)); ((value << COORD_ROW_OFST) & COORD_ROW_MSK));
valueRead = ((bus_r(addr) & COORD_ROW_MSK) >> COORD_ROW_OFST); valueRead = ((bus_r(addr) & COORD_ROW_MSK) >> COORD_ROW_OFST);
@ -1928,7 +1928,7 @@ int setDetectorPosition(int pos[]) {
} }
// col // col
value = detPos[Y]; value = detPos[X];
bus_w(addr, (bus_r(addr) & ~COORD_COL_MSK) | bus_w(addr, (bus_r(addr) & ~COORD_COL_MSK) |
((value << COORD_COL_OFST) & COORD_COL_MSK)); ((value << COORD_COL_OFST) & COORD_COL_MSK));
valueRead = ((bus_r(addr) & COORD_COL_MSK) >> COORD_COL_OFST); valueRead = ((bus_r(addr) & COORD_COL_MSK) >> COORD_COL_OFST);
@ -1939,7 +1939,8 @@ int setDetectorPosition(int pos[]) {
} }
if (ret == OK) { if (ret == OK) {
LOG(logINFO, ("\tPosition set to [%d, %d]\n", detPos[X], detPos[Y])); LOG(logINFO,
("\tPosition set to [%d, %d] #(col, row)\n", detPos[X], detPos[Y]));
} }
return ret; return ret;
@ -3095,8 +3096,8 @@ void *start_timer(void *arg) {
header->frameNumber = virtual_currentFrameNumber; header->frameNumber = virtual_currentFrameNumber;
header->packetNumber = 0; header->packetNumber = 0;
header->modId = virtual_moduleid; header->modId = virtual_moduleid;
header->row = detPos[X]; header->row = detPos[Y];
header->column = detPos[Y]; header->column = detPos[X];
// fill data // fill data
memcpy(packetData + sizeof(sls_detector_header), imageData, memcpy(packetData + sizeof(sls_detector_header), imageData,
datasize); datasize);

View File

@ -21,7 +21,7 @@
#include <pthread.h> #include <pthread.h>
#include <time.h> #include <time.h>
#endif #endif
extern int portno;
// Global variable from slsDetectorServer_funcs // Global variable from slsDetectorServer_funcs
extern int debugflag; extern int debugflag;
extern int updateFlag; extern int updateFlag;
@ -1621,6 +1621,7 @@ int configureMAC() {
int setDetectorPosition(int pos[]) { int setDetectorPosition(int pos[]) {
int ret = OK; int ret = OK;
// row, col
uint32_t innerPos[2] = {pos[X], pos[Y]}; uint32_t innerPos[2] = {pos[X], pos[Y]};
uint32_t outerPos[2] = {pos[X], pos[Y]}; uint32_t outerPos[2] = {pos[X], pos[Y]};
int selInterface = getPrimaryInterface(); int selInterface = getPrimaryInterface();
@ -1630,15 +1631,16 @@ int setDetectorPosition(int pos[]) {
("Setting detector position: 1 Interface %s \n(%d, %d)\n", ("Setting detector position: 1 Interface %s \n(%d, %d)\n",
(selInterface ? "Inner" : "Outer"), innerPos[X], innerPos[Y])); (selInterface ? "Inner" : "Outer"), innerPos[X], innerPos[Y]));
} else { } else {
++outerPos[X]; // top has row incremented by 1
++innerPos[Y];
LOG(logDEBUG, ("Setting detector position: 2 Interfaces \n" LOG(logDEBUG, ("Setting detector position: 2 Interfaces \n"
" inner top(%d, %d), outer bottom(%d, %d)\n", " inner top(%d, %d), outer bottom(%d, %d)\n",
innerPos[X], innerPos[Y], outerPos[X], outerPos[Y])); innerPos[X], innerPos[Y], outerPos[X], outerPos[Y]));
} }
detPos[0] = innerPos[0]; detPos[0] = innerPos[X];
detPos[1] = innerPos[1]; detPos[1] = innerPos[Y];
detPos[2] = outerPos[0]; detPos[2] = outerPos[X];
detPos[3] = outerPos[1]; detPos[3] = outerPos[Y];
// row // row
// outer // outer
@ -1676,8 +1678,8 @@ int setDetectorPosition(int pos[]) {
if (ret == OK) { if (ret == OK) {
if (getNumberofUDPInterfaces() == 1) { if (getNumberofUDPInterfaces() == 1) {
LOG(logINFOBLUE, LOG(logINFOBLUE, ("Position set to [%d, %d] #(col, row)\n",
("Position set to [%d, %d]\n", innerPos[X], innerPos[Y])); innerPos[X], innerPos[Y]));
} else { } else {
LOG(logINFOBLUE, (" Inner (top) position set to [%d, %d]\n", LOG(logINFOBLUE, (" Inner (top) position set to [%d, %d]\n",
innerPos[X], innerPos[Y])); innerPos[X], innerPos[Y]));
@ -2531,8 +2533,16 @@ void *start_timer(void *arg) {
if (i > 0 && i % pixelsPerPacket == 0) { if (i > 0 && i % pixelsPerPacket == 0) {
++pixelVal; ++pixelVal;
} }
// to debug multi module geometry (row, column) in virtual servers (all pixels
// in a module set to particular value)
#ifdef TEST_MOD_GEOMETRY
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
portno % 1900 + (i >= npixels / 2 ? 1 : 0);
#else
*((uint16_t *)(imageData + i * sizeof(uint16_t))) = *((uint16_t *)(imageData + i * sizeof(uint16_t))) =
virtual_image_test_mode ? 0x0FFE : (uint16_t)pixelVal; virtual_image_test_mode ? 0x0FFE : (uint16_t)pixelVal;
#endif
} }
} }
@ -2557,6 +2567,10 @@ void *start_timer(void *arg) {
int srcOffset = 0; int srcOffset = 0;
int srcOffset2 = DATA_BYTES / 2; int srcOffset2 = DATA_BYTES / 2;
int row0 = (numInterfaces == 1 ? detPos[1] : detPos[3]);
int col0 = (numInterfaces == 1 ? detPos[0] : detPos[2]);
int row1 = detPos[1];
int col1 = detPos[0];
// loop packet (128 packets) // loop packet (128 packets)
for (int i = 0; i != maxPacketsPerFrame; ++i) { for (int i = 0; i != maxPacketsPerFrame; ++i) {
@ -2576,8 +2590,8 @@ void *start_timer(void *arg) {
header->frameNumber = frameNr + iframes; header->frameNumber = frameNr + iframes;
header->packetNumber = pnum; header->packetNumber = pnum;
header->modId = 0; header->modId = 0;
header->row = detPos[0]; header->row = row0;
header->column = detPos[1]; header->column = col0;
// fill data // fill data
memcpy(packetData + sizeof(sls_detector_header), memcpy(packetData + sizeof(sls_detector_header),
@ -2603,8 +2617,8 @@ void *start_timer(void *arg) {
header->frameNumber = frameNr + iframes; header->frameNumber = frameNr + iframes;
header->packetNumber = pnum; header->packetNumber = pnum;
header->modId = 0; header->modId = 0;
header->row = detPos[2]; header->row = row1;
header->column = detPos[3]; header->column = col1;
// fill data // fill data
memcpy(packetData2 + sizeof(sls_detector_header), memcpy(packetData2 + sizeof(sls_detector_header),

View File

@ -1731,8 +1731,8 @@ void *start_timer(void *arg) {
header->frameNumber = frameNr + iframes; header->frameNumber = frameNr + iframes;
header->packetNumber = i; header->packetNumber = i;
header->modId = 0; header->modId = 0;
header->row = detPos[X]; header->row = detPos[Y];
header->column = detPos[Y]; header->column = detPos[X];
// fill data // fill data
memcpy(packetData + sizeof(sls_detector_header), memcpy(packetData + sizeof(sls_detector_header),

View File

@ -1941,7 +1941,7 @@ int setDetectorPosition(int pos[]) {
int ret = OK; int ret = OK;
// row // row
value = detPos[X]; value = detPos[Y];
bus_w(addr, (bus_r(addr) & ~COORD_ROW_MSK) | bus_w(addr, (bus_r(addr) & ~COORD_ROW_MSK) |
((value << COORD_ROW_OFST) & COORD_ROW_MSK)); ((value << COORD_ROW_OFST) & COORD_ROW_MSK));
valueRead = ((bus_r(addr) & COORD_ROW_MSK) >> COORD_ROW_OFST); valueRead = ((bus_r(addr) & COORD_ROW_MSK) >> COORD_ROW_OFST);
@ -1952,7 +1952,7 @@ int setDetectorPosition(int pos[]) {
} }
// col // col
value = detPos[Y]; value = detPos[X];
bus_w(addr, (bus_r(addr) & ~COORD_COL_MSK) | bus_w(addr, (bus_r(addr) & ~COORD_COL_MSK) |
((value << COORD_COL_OFST) & COORD_COL_MSK)); ((value << COORD_COL_OFST) & COORD_COL_MSK));
valueRead = ((bus_r(addr) & COORD_COL_MSK) >> COORD_COL_OFST); valueRead = ((bus_r(addr) & COORD_COL_MSK) >> COORD_COL_OFST);
@ -1963,7 +1963,8 @@ int setDetectorPosition(int pos[]) {
} }
if (ret == OK) { if (ret == OK) {
LOG(logINFO, ("\tPosition set to [%d, %d]\n", detPos[X], detPos[Y])); LOG(logINFO,
("\tPosition set to [%d, %d] #(col, row)\n", detPos[X], detPos[Y]));
} }
return ret; return ret;
@ -2385,8 +2386,8 @@ void *start_timer(void *arg) {
header->frameNumber = virtual_currentFrameNumber; header->frameNumber = virtual_currentFrameNumber;
header->packetNumber = i; header->packetNumber = i;
header->modId = virtual_moduleid; header->modId = virtual_moduleid;
header->row = detPos[X]; header->row = detPos[Y];
header->column = detPos[Y]; header->column = detPos[X];
// fill data // fill data
memcpy(packetData + sizeof(sls_detector_header), memcpy(packetData + sizeof(sls_detector_header),

View File

@ -39,6 +39,7 @@ extern int masterCommandLine;
#ifdef EIGERD #ifdef EIGERD
extern int topCommandLine; extern int topCommandLine;
#endif #endif
int portno = DEFAULT_PORTNO;
void error(char *msg) { perror(msg); } void error(char *msg) { perror(msg); }
@ -50,7 +51,6 @@ void sigInterruptHandler(int p) {
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
// options // options
int portno = DEFAULT_PORTNO;
isControlServer = 1; isControlServer = 1;
debugflag = 0; debugflag = 0;
updateFlag = 0; updateFlag = 0;

View File

@ -62,8 +62,8 @@ int firstUDPDestination = 0;
int configured = FAIL; int configured = FAIL;
char configureMessage[MAX_STR_LENGTH] = "udp parameters not configured yet"; char configureMessage[MAX_STR_LENGTH] = "udp parameters not configured yet";
int maxydet = -1; int maxYMods = -1;
int detectorId = -1; int moduleIndex = -1;
// Local variables // Local variables
int (*flist[NUM_DET_FUNCTIONS])(int); int (*flist[NUM_DET_FUNCTIONS])(int);
@ -81,27 +81,14 @@ char scanErrMessage[MAX_STR_LENGTH] = "";
/* initialization functions */ /* initialization functions */
int updateModeAllowedFunction(int file_des) { int updateModeAllowedFunction(int file_des) {
enum detFuncs allowedFuncs[] = {F_EXEC_COMMAND, enum detFuncs allowedFuncs[] = {
F_GET_DETECTOR_TYPE, F_EXEC_COMMAND, F_GET_DETECTOR_TYPE, F_GET_FIRMWARE_VERSION,
F_GET_FIRMWARE_VERSION, F_GET_SERVER_VERSION, F_GET_SERIAL_NUMBER, F_WRITE_REGISTER,
F_GET_SERVER_VERSION, F_READ_REGISTER, F_LOCK_SERVER, F_GET_LAST_CLIENT_IP,
F_GET_SERIAL_NUMBER, F_PROGRAM_FPGA, F_RESET_FPGA, F_CHECK_VERSION,
F_WRITE_REGISTER, F_REBOOT_CONTROLLER, F_GET_KERNEL_VERSION, F_UPDATE_KERNEL,
F_READ_REGISTER, F_UPDATE_DETECTOR_SERVER, F_GET_UPDATE_MODE, F_SET_UPDATE_MODE,
F_LOCK_SERVER, F_GET_NUM_CHANNELS, F_GET_NUM_INTERFACES, F_ACTIVATE};
F_GET_LAST_CLIENT_IP,
F_PROGRAM_FPGA,
F_RESET_FPGA,
F_CHECK_VERSION,
F_REBOOT_CONTROLLER,
F_GET_KERNEL_VERSION,
F_UPDATE_KERNEL,
F_UPDATE_DETECTOR_SERVER,
F_GET_UPDATE_MODE,
F_SET_UPDATE_MODE,
F_GET_NUM_CHANNELS,
F_GET_NUM_INTERFACES,
F_ACTIVATE};
size_t allowedFuncsSize = sizeof(allowedFuncs) / sizeof(enum detFuncs); size_t allowedFuncsSize = sizeof(allowedFuncs) / sizeof(enum detFuncs);
for (unsigned int i = 0; i < allowedFuncsSize; ++i) { for (unsigned int i = 0; i < allowedFuncsSize; ++i) {
@ -129,6 +116,7 @@ void init_detector() {
#ifdef VIRTUAL #ifdef VIRTUAL
LOG(logINFO, ("This is a VIRTUAL detector\n")); LOG(logINFO, ("This is a VIRTUAL detector\n"));
udpDetails[0].srcip = LOCALHOSTIP_INT; udpDetails[0].srcip = LOCALHOSTIP_INT;
udpDetails[0].srcip2 = LOCALHOSTIP_INT;
#endif #endif
udpDetails[0].srcport = DEFAULT_UDP_SRC_PORTNO; udpDetails[0].srcport = DEFAULT_UDP_SRC_PORTNO;
udpDetails[0].dstport = DEFAULT_UDP_DST_PORTNO; udpDetails[0].dstport = DEFAULT_UDP_DST_PORTNO;
@ -4700,7 +4688,7 @@ int get_read_n_rows(int file_des) {
} }
void calculate_and_set_position() { void calculate_and_set_position() {
if (maxydet == -1 || detectorId == -1) { if (maxYMods == -1 || moduleIndex == -1) {
ret = FAIL; ret = FAIL;
sprintf(mess, sprintf(mess,
"Could not set detector position (did not get multi size).\n"); "Could not set detector position (did not get multi size).\n");
@ -4709,21 +4697,20 @@ void calculate_and_set_position() {
} }
// calculating new position // calculating new position
int modulePorts[2] = {1, 1}; int pos[2] = {0, 0};
int portGeometry[2] = {1, 1};
// position does change for eiger and jungfrau (2 interfaces) // position does change for eiger and jungfrau (2 interfaces)
#if defined(EIGERD) #if defined(EIGERD)
modulePorts[1] = getNumberofUDPInterfaces(); // horz portGeometry[X] = getNumberofUDPInterfaces(); // horz
#elif defined(JUNGFRAUD) #elif defined(JUNGFRAUD)
modulePorts[0] = getNumberofUDPInterfaces(); // vert portGeometry[Y] = getNumberofUDPInterfaces(); // vert
#endif #endif
int maxy = maxydet * modulePorts[0]; LOG(logDEBUG1, ("moduleIndex:%d maxymods:%d portGeo.x:%d portgeo.y:%d\n",
int pos[2] = {0, 0}; moduleIndex, maxYMods, portGeometry[X], portGeometry[Y]));
// row pos[Y] = (moduleIndex % maxYMods) * portGeometry[Y];
pos[0] = (detectorId % maxy); pos[X] = (moduleIndex / maxYMods) * portGeometry[X];
// col for horiz. udp ports LOG(logINFO, ("Setting Positions (%d,%d) #(col, row)\n", pos[X], pos[Y]));
pos[1] = (detectorId / maxy) * modulePorts[1];
LOG(logDEBUG, ("Setting Positions (%d,%d)\n", pos[0], pos[1]));
if (setDetectorPosition(pos) == FAIL) { if (setDetectorPosition(pos) == FAIL) {
ret = FAIL; ret = FAIL;
sprintf(mess, "Could not set detector position.\n"); sprintf(mess, "Could not set detector position.\n");
@ -4735,8 +4722,8 @@ void calculate_and_set_position() {
if (udpDetails[0].srcmac == 0) { if (udpDetails[0].srcmac == 0) {
char dmac[MAC_ADDRESS_SIZE]; char dmac[MAC_ADDRESS_SIZE];
memset(dmac, 0, MAC_ADDRESS_SIZE); memset(dmac, 0, MAC_ADDRESS_SIZE);
sprintf(dmac, "aa:bb:cc:dd:%02x:%02x", pos[0] & 0xFF, sprintf(dmac, "aa:bb:cc:dd:%02x:%02x", pos[X] & 0xFF,
pos[1] & 0xFF); pos[Y] & 0xFF);
LOG(logINFO, ("Udp source mac address created: %s\n", dmac)); LOG(logINFO, ("Udp source mac address created: %s\n", dmac));
unsigned char a[6]; unsigned char a[6];
sscanf(dmac, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", &a[0], &a[1], &a[2], sscanf(dmac, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", &a[0], &a[1], &a[2],
@ -4755,8 +4742,8 @@ void calculate_and_set_position() {
if (udpDetails[0].srcmac2 == 0) { if (udpDetails[0].srcmac2 == 0) {
char dmac2[MAC_ADDRESS_SIZE]; char dmac2[MAC_ADDRESS_SIZE];
memset(dmac2, 0, MAC_ADDRESS_SIZE); memset(dmac2, 0, MAC_ADDRESS_SIZE);
sprintf(dmac2, "aa:bb:cc:dd:%02x:%02x", (pos[0] + 1) & 0xFF, sprintf(dmac2, "aa:bb:cc:dd:%02x:%02x", (pos[X] + 1) & 0xFF,
pos[1] & 0xFF); pos[Y] & 0xFF);
LOG(logINFO, ("Udp source mac address2 created: %s\n", dmac2)); LOG(logINFO, ("Udp source mac address2 created: %s\n", dmac2));
unsigned char a[6]; unsigned char a[6];
sscanf(dmac2, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", &a[0], &a[1], sscanf(dmac2, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", &a[0], &a[1],
@ -4784,15 +4771,16 @@ int set_detector_position(int file_des) {
if (receiveData(file_des, args, sizeof(args), INT32) < 0) if (receiveData(file_des, args, sizeof(args), INT32) < 0)
return printSocketReadError(); return printSocketReadError();
LOG(logINFO, ("Setting detector positions: [%u, %u]\n", args[0], args[1])); LOG(logDEBUG, ("Setting detector positions: [maxy:%u, modIndex:%u]\n",
args[0], args[1]));
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
// if in update mode, there is no need to do this (also detector not set // if in update mode, there is no need to do this (also detector not set
// up) // up)
if (!updateFlag && check_detector_idle("configure mac") == OK) { if (!updateFlag && check_detector_idle("configure mac") == OK) {
maxydet = args[0]; maxYMods = args[0];
detectorId = args[1]; moduleIndex = args[1];
calculate_and_set_position(); calculate_and_set_position();
} }
} }

View File

@ -602,14 +602,12 @@ void DetectorImpl::readFrameFromReceiver() {
currentSubFrameIndex = zHeader.expLength; currentSubFrameIndex = zHeader.expLength;
coordY = zHeader.row; coordY = zHeader.row;
coordX = zHeader.column; coordX = zHeader.column;
if (eiger) {
coordY = (nY - 1) - coordY;
}
flipRows = zHeader.flipRows; flipRows = zHeader.flipRows;
if (zHeader.completeImage == 0) { if (zHeader.completeImage == 0) {
completeImage = false; completeImage = false;
} }
LOG(logDEBUG1) LOG(logDEBUG1)
<< zmqSocket[isocket]->GetPortNumber() << " "
<< "Header Info:" << "Header Info:"
"\n\tcurrentFileName: " "\n\tcurrentFileName: "
<< currentFileName << "\n\tcurrentAcquisitionIndex: " << currentFileName << "\n\tcurrentAcquisitionIndex: "

View File

@ -17,12 +17,11 @@
const std::string DataStreamer::TypeName = "DataStreamer"; const std::string DataStreamer::TypeName = "DataStreamer";
DataStreamer::DataStreamer(int ind, Fifo *f, uint32_t *dr, ROI *r, uint64_t *fi, DataStreamer::DataStreamer(int ind, Fifo *f, uint32_t *dr, ROI *r, uint64_t *fi,
bool fr, slsDetectorDefs::xy nm, bool *qe, bool fr, slsDetectorDefs::xy np, bool *qe,
uint64_t *tot) uint64_t *tot)
: ThreadObject(ind, TypeName), fifo(f), dynamicRange(dr), roi(r), : ThreadObject(ind, TypeName), fifo(f), dynamicRange(dr), roi(r),
fileIndex(fi), flipRows(fr), quadEnable(qe), totalNumFrames(tot) { fileIndex(fi), flipRows(fr), numPorts(np), quadEnable(qe),
numMods.x = nm.x; totalNumFrames(tot) {
numMods.y = nm.y;
LOG(logDEBUG) << "DataStreamer " << ind << " created"; LOG(logDEBUG) << "DataStreamer " << ind << " created";
} }
@ -63,10 +62,7 @@ void DataStreamer::RecordFirstIndex(uint64_t fnum, char *buf) {
void DataStreamer::SetGeneralData(GeneralData *g) { generalData = g; } void DataStreamer::SetGeneralData(GeneralData *g) { generalData = g; }
void DataStreamer::SetNumberofModules(xy nm) { void DataStreamer::SetNumberofPorts(xy np) { numPorts = np; }
numMods.x = nm.x;
numMods.y = nm.y;
}
void DataStreamer::SetFlipRows(bool fd) { flipRows = fd; } void DataStreamer::SetFlipRows(bool fd) { flipRows = fd; }
@ -220,8 +216,8 @@ int DataStreamer::SendHeader(sls_receiver_header *rheader, uint32_t size,
zHeader.dynamicRange = *dynamicRange; zHeader.dynamicRange = *dynamicRange;
zHeader.fileIndex = *fileIndex; zHeader.fileIndex = *fileIndex;
zHeader.ndetx = numMods.x; zHeader.ndetx = numPorts.x;
zHeader.ndety = numMods.y; zHeader.ndety = numPorts.y;
zHeader.npixelsx = nx; zHeader.npixelsx = nx;
zHeader.npixelsy = ny; zHeader.npixelsy = ny;
zHeader.imageSize = size; zHeader.imageSize = size;

View File

@ -33,12 +33,12 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
* @param r roi * @param r roi
* @param fi pointer to file index * @param fi pointer to file index
* @param fr flip rows * @param fr flip rows
* @param nm number of modules in each dimension * @param nm number of ports in each dimension
* @param qe pointer to quad Enable * @param qe pointer to quad Enable
* @param tot pointer to total number of frames * @param tot pointer to total number of frames
*/ */
DataStreamer(int ind, Fifo *f, uint32_t *dr, ROI *r, uint64_t *fi, bool fr, DataStreamer(int ind, Fifo *f, uint32_t *dr, ROI *r, uint64_t *fi, bool fr,
xy nm, bool *qe, uint64_t *tot); xy np, bool *qe, uint64_t *tot);
/** /**
* Destructor * Destructor
@ -46,39 +46,11 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
*/ */
~DataStreamer(); ~DataStreamer();
/**
* Set Fifo pointer to the one given
* @param f address of Fifo pointer
*/
void SetFifo(Fifo *f); void SetFifo(Fifo *f);
/**
* Reset parameters for new acquisition
*/
void ResetParametersforNewAcquisition(const std::string &fname); void ResetParametersforNewAcquisition(const std::string &fname);
/**
* Set GeneralData pointer to the one given
* @param g address of GeneralData (Detector Data) pointer
*/
void SetGeneralData(GeneralData *g); void SetGeneralData(GeneralData *g);
void SetNumberofPorts(xy np);
/**
* Set number of detectors
* @param nm number of modules/ports in both dimensions
*/
void SetNumberofModules(xy nm);
/**
* Set Flipped rows
* @param fd flip rows enable
*/
void SetFlipRows(bool fd); void SetFlipRows(bool fd);
/**
* Set additional json header
* @param json additional json header
*/
void void
SetAdditionalJsonHeader(const std::map<std::string, std::string> &json); SetAdditionalJsonHeader(const std::map<std::string, std::string> &json);
@ -143,34 +115,16 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
int SendHeader(sls_receiver_header *rheader, uint32_t size = 0, int SendHeader(sls_receiver_header *rheader, uint32_t size = 0,
uint32_t nx = 0, uint32_t ny = 0, bool dummy = true); uint32_t nx = 0, uint32_t ny = 0, bool dummy = true);
/** type of thread */
static const std::string TypeName; static const std::string TypeName;
/** GeneralData (Detector Data) object */
const GeneralData *generalData{nullptr}; const GeneralData *generalData{nullptr};
/** Fifo structure */
Fifo *fifo; Fifo *fifo;
/** ZMQ Socket - Receiver to Client */
ZmqSocket *zmqSocket{nullptr}; ZmqSocket *zmqSocket{nullptr};
/** Pointer to dynamic range */
uint32_t *dynamicRange; uint32_t *dynamicRange;
/** ROI */
ROI *roi; ROI *roi;
/** adc Configured */
int adcConfigured{-1}; int adcConfigured{-1};
/** Pointer to file index */
uint64_t *fileIndex; uint64_t *fileIndex;
/** flip rows */
bool flipRows; bool flipRows;
/** additional json header */
std::map<std::string, std::string> additionalJsonHeader; std::map<std::string, std::string> additionalJsonHeader;
/** Used by streamer thread to update local copy (reduce number of locks /** Used by streamer thread to update local copy (reduce number of locks
@ -189,18 +143,12 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
/** Frame Number of First Frame */ /** Frame Number of First Frame */
uint64_t firstIndex{0}; uint64_t firstIndex{0};
/* File name to stream */
std::string fileNametoStream; std::string fileNametoStream;
/** Complete buffer used for roi, eg. shortGotthard */ /** Complete buffer used for roi, eg. shortGotthard */
char *completeBuffer{nullptr}; char *completeBuffer{nullptr};
/** Number of Modules in X and Y dimension */ xy numPorts{1, 1};
xy numMods{1, 1};
/** Quad Enable */
bool *quadEnable; bool *quadEnable;
/** Total number of frames */
uint64_t *totalNumFrames; uint64_t *totalNumFrames;
}; };

View File

@ -217,7 +217,7 @@ slsDetectorDefs::xy Implementation::GetPortGeometry() {
xy portGeometry{1, 1}; xy portGeometry{1, 1};
if (detType == EIGER) if (detType == EIGER)
portGeometry.x = numUDPInterfaces; portGeometry.x = numUDPInterfaces;
else // (jungfrau and gotthard2) else if (detType == JUNGFRAU)
portGeometry.y = numUDPInterfaces; portGeometry.y = numUDPInterfaces;
return portGeometry; return portGeometry;
} }
@ -226,18 +226,18 @@ void Implementation::setDetectorSize(const slsDetectorDefs::xy size) {
xy portGeometry = GetPortGeometry(); xy portGeometry = GetPortGeometry();
std::string log_message = "Detector Size (ports): ("; std::string log_message = "Detector Size (ports): (";
numModules.x = portGeometry.x * size.x; numModules = size;
numModules.y = portGeometry.y * size.y; numPorts.x = portGeometry.x * size.x;
xy nm{numModules.x, numModules.y}; numPorts.y = portGeometry.y * size.y;
if (quadEnable) { if (quadEnable) {
nm.x = 1; numPorts.x = 1;
nm.y = 2; numPorts.y = 2;
} }
for (const auto &it : dataStreamer) { for (const auto &it : dataStreamer) {
it->SetNumberofModules(nm); it->SetNumberofPorts(numPorts);
} }
LOG(logINFO) << "Detector Size (ports): " << sls::ToString(numModules); LOG(logINFO) << "Detector Size (ports): " << sls::ToString(numPorts);
} }
int Implementation::getModulePositionId() const { return modulePos; } int Implementation::getModulePositionId() const { return modulePos; }
@ -254,8 +254,16 @@ void Implementation::setModulePositionId(const int id) {
for (unsigned int i = 0; i < listener.size(); ++i) { for (unsigned int i = 0; i < listener.size(); ++i) {
uint16_t row = 0, col = 0; uint16_t row = 0, col = 0;
row = (modulePos % numModules.y) * portGeometry.y; row = (modulePos % numModules.y) * portGeometry.y;
col = (modulePos / numModules.y) * portGeometry.x + i; col = (modulePos / numModules.y) * portGeometry.x;
if (portGeometry.y == 2) {
row += i;
}
if (portGeometry.x == 2) {
col += i;
}
LOG(logDEBUG1) << i << ":numModules:" << numModules.x << ","
<< numModules.y << " portGeometry:" << portGeometry.x
<< "," << portGeometry.y;
listener[i]->SetHardCodedPosition(row, col); listener[i]->SetHardCodedPosition(row, col);
} }
} }
@ -758,12 +766,7 @@ void Implementation::StartMasterWriter() {
MasterAttributes masterAttributes; MasterAttributes masterAttributes;
masterAttributes.detType = detType; masterAttributes.detType = detType;
masterAttributes.timingMode = timingMode; masterAttributes.timingMode = timingMode;
xy nm{numModules.x, numModules.y}; masterAttributes.geometry = numPorts;
if (quadEnable) {
nm.x = 1;
nm.y = 2;
}
masterAttributes.geometry = xy(nm.x, nm.y);
masterAttributes.imageSize = generalData->imageSize; masterAttributes.imageSize = generalData->imageSize;
masterAttributes.nPixels = masterAttributes.nPixels =
xy(generalData->nPixelsX, generalData->nPixelsY); xy(generalData->nPixelsX, generalData->nPixelsY);
@ -823,12 +826,12 @@ void Implementation::StartMasterWriter() {
std::array<std::string, 2> virtualFileAndDatasetNames; std::array<std::string, 2> virtualFileAndDatasetNames;
// create virtual hdf5 file (if multiple files) // create virtual hdf5 file (if multiple files)
if (dataProcessor[0]->GetFilesInAcquisition() > 1 || if (dataProcessor[0]->GetFilesInAcquisition() > 1 ||
(numModules.x * numModules.y) > 1) { (numPorts.x * numPorts.y) > 1) {
virtualFileAndDatasetNames = virtualFileAndDatasetNames =
dataProcessor[0]->CreateVirtualFile( dataProcessor[0]->CreateVirtualFile(
filePath, fileName, fileIndex, overwriteEnable, filePath, fileName, fileIndex, overwriteEnable,
silentMode, modulePos, numUDPInterfaces, framesPerFile, silentMode, modulePos, numUDPInterfaces, framesPerFile,
numberOfTotalFrames, numModules.x, numModules.y, numberOfTotalFrames, numPorts.x, numPorts.y,
dynamicRange, &hdf5LibMutex); dynamicRange, &hdf5LibMutex);
} }
// link file in master // link file in master
@ -879,12 +882,6 @@ void Implementation::setNumberofUDPInterfaces(const int n) {
} }
if (numUDPInterfaces != n) { if (numUDPInterfaces != n) {
// reduce number of detectors to size with 1 interface
xy portGeometry = GetPortGeometry();
numModules.x /= portGeometry.x;
numModules.y /= portGeometry.y;
// clear all threads and fifos // clear all threads and fifos
listener.clear(); listener.clear();
dataProcessor.clear(); dataProcessor.clear();
@ -933,15 +930,12 @@ void Implementation::setNumberofUDPInterfaces(const int n) {
if (dataStreamEnable) { if (dataStreamEnable) {
try { try {
bool flip = flipRows; bool flip = flipRows;
xy nm{numModules.x, numModules.y};
if (quadEnable) { if (quadEnable) {
flip = (i == 1 ? true : false); flip = (i == 1 ? true : false);
nm.x = 1;
nm.y = 2;
} }
dataStreamer.push_back(sls::make_unique<DataStreamer>( dataStreamer.push_back(sls::make_unique<DataStreamer>(
i, fifo[i].get(), &dynamicRange, &roi, &fileIndex, flip, i, fifo[i].get(), &dynamicRange, &roi, &fileIndex, flip,
nm, &quadEnable, &numberOfTotalFrames)); numPorts, &quadEnable, &numberOfTotalFrames));
dataStreamer[i]->SetGeneralData(generalData); dataStreamer[i]->SetGeneralData(generalData);
dataStreamer[i]->CreateZmqSockets( dataStreamer[i]->CreateZmqSockets(
&numUDPInterfaces, streamingPort, streamingSrcIP, &numUDPInterfaces, streamingPort, streamingSrcIP,
@ -1063,15 +1057,12 @@ void Implementation::setDataStreamEnable(const bool enable) {
for (int i = 0; i < numUDPInterfaces; ++i) { for (int i = 0; i < numUDPInterfaces; ++i) {
try { try {
bool flip = flipRows; bool flip = flipRows;
xy nm{numModules.x, numModules.y};
if (quadEnable) { if (quadEnable) {
flip = (i == 1 ? true : false); flip = (i == 1 ? true : false);
nm.x = 1;
nm.y = 2;
} }
dataStreamer.push_back(sls::make_unique<DataStreamer>( dataStreamer.push_back(sls::make_unique<DataStreamer>(
i, fifo[i].get(), &dynamicRange, &roi, &fileIndex, flip, i, fifo[i].get(), &dynamicRange, &roi, &fileIndex, flip,
nm, &quadEnable, &numberOfTotalFrames)); numPorts, &quadEnable, &numberOfTotalFrames));
dataStreamer[i]->SetGeneralData(generalData); dataStreamer[i]->SetGeneralData(generalData);
dataStreamer[i]->CreateZmqSockets( dataStreamer[i]->CreateZmqSockets(
&numUDPInterfaces, streamingPort, streamingSrcIP, &numUDPInterfaces, streamingPort, streamingSrcIP,
@ -1499,18 +1490,12 @@ bool Implementation::getQuad() const { return quadEnable; }
void Implementation::setQuad(const bool b) { void Implementation::setQuad(const bool b) {
if (quadEnable != b) { if (quadEnable != b) {
quadEnable = b; quadEnable = b;
setDetectorSize(numModules);
if (!quadEnable) { if (!quadEnable) {
xy nm{numModules.x, numModules.y};
for (const auto &it : dataStreamer) { for (const auto &it : dataStreamer) {
it->SetNumberofModules(nm);
it->SetFlipRows(flipRows); it->SetFlipRows(flipRows);
} }
} else { } else {
xy nm{1, 2};
for (const auto &it : dataStreamer) {
it->SetNumberofModules(nm);
}
if (dataStreamer.size() == 2) { if (dataStreamer.size() == 2) {
dataStreamer[0]->SetFlipRows(false); dataStreamer[0]->SetFlipRows(false);
dataStreamer[1]->SetFlipRows(true); dataStreamer[1]->SetFlipRows(true);

View File

@ -290,6 +290,7 @@ class Implementation : private virtual slsDetectorDefs {
// config parameters // config parameters
detectorType detType{GENERIC}; detectorType detType{GENERIC};
xy numModules{1, 1}; xy numModules{1, 1};
xy numPorts{1, 1};
int modulePos{0}; int modulePos{0};
std::string detHostname; std::string detHostname;
bool silentMode{false}; bool silentMode{false};

View File

@ -210,6 +210,8 @@ void Listener::CreateDummySocketForUDPSocketBufferSize(int s) {
void Listener::SetHardCodedPosition(uint16_t r, uint16_t c) { void Listener::SetHardCodedPosition(uint16_t r, uint16_t c) {
row = r; row = r;
column = c; column = c;
LOG(logDEBUG1) << "Setting hardcoded position [" << index
<< "] (row: " << row << ", col: " << column << ")";
} }
void Listener::ThreadExecution() { void Listener::ThreadExecution() {

View File

@ -47,12 +47,12 @@ void printHelp() {
} }
/** /**
* Start Acquisition Call back (slsMultiReceiver writes data if file write enabled) * Start Acquisition Call back (slsMultiReceiver writes data if file write
* if registerCallBackRawDataReady or registerCallBackRawDataModifyReady registered, * enabled) if registerCallBackRawDataReady or
* users get data * registerCallBackRawDataModifyReady registered, users get data
*/ */
int StartAcq(const std::string & filePath, const std::string & fileName, uint64_t fileIndex, int StartAcq(const std::string &filePath, const std::string &fileName,
size_t imageSize, void *objectPointer) { uint64_t fileIndex, size_t imageSize, void *objectPointer) {
LOG(logINFOBLUE) << "#### StartAcq: filePath:" << filePath LOG(logINFOBLUE) << "#### StartAcq: filePath:" << filePath
<< " fileName:" << fileName << " fileIndex:" << fileIndex << " fileName:" << fileName << " fileIndex:" << fileIndex
<< " imageSize:" << imageSize << " ####"; << " imageSize:" << imageSize << " ####";
@ -61,8 +61,8 @@ int StartAcq(const std::string & filePath, const std::string & fileName, uint64_
/** Acquisition Finished Call back */ /** Acquisition Finished Call back */
void AcquisitionFinished(uint64_t framesCaught, void *objectPointer) { void AcquisitionFinished(uint64_t framesCaught, void *objectPointer) {
LOG(logINFOBLUE) << "#### AcquisitionFinished: framesCaught:" << framesCaught LOG(logINFOBLUE) << "#### AcquisitionFinished: framesCaught:"
<< " ####"; << framesCaught << " ####";
} }
/** /**
@ -76,16 +76,16 @@ void GetData(slsDetectorDefs::sls_receiver_header *header, char *dataPointer,
PRINT_IN_COLOR( PRINT_IN_COLOR(
detectorHeader.modId ? detectorHeader.modId : detectorHeader.row, detectorHeader.modId ? detectorHeader.modId : detectorHeader.row,
"#### %d GetData: ####\n" "#### %d %d GetData: ####\n"
"frameNumber: %lu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: %lu" "frameNumber: %lu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: %lu"
"\t\ttimestamp: %lu\t\tmodId: %u\t\t" "\t\ttimestamp: %lu\t\tmodId: %u\t\t"
"row: %u\t\tcolumn: %u\t\treserved: %u\t\tdebug: %u" "row: %u\t\tcolumn: %u\t\treserved: %u\t\tdebug: %u"
"\t\troundRNumber: %u\t\tdetType: %u\t\tversion: %u" "\t\troundRNumber: %u\t\tdetType: %u\t\tversion: %u"
//"\t\tpacketsMask:%s" //"\t\tpacketsMask:%s"
"\t\tfirstbytedata: 0x%x\t\tdatsize: %zu\n\n", "\t\tfirstbytedata: 0x%x\t\tdatsize: %zu\n\n",
detectorHeader.row, (long unsigned int)detectorHeader.frameNumber, detectorHeader.column, detectorHeader.row,
detectorHeader.expLength, detectorHeader.packetNumber, (long unsigned int)detectorHeader.frameNumber, detectorHeader.expLength,
(long unsigned int)detectorHeader.bunchId, detectorHeader.packetNumber, (long unsigned int)detectorHeader.bunchId,
(long unsigned int)detectorHeader.timestamp, detectorHeader.modId, (long unsigned int)detectorHeader.timestamp, detectorHeader.modId,
detectorHeader.row, detectorHeader.column, detectorHeader.reserved, detectorHeader.row, detectorHeader.column, detectorHeader.reserved,
detectorHeader.debug, detectorHeader.roundRNumber, detectorHeader.debug, detectorHeader.roundRNumber,

View File

@ -28,9 +28,9 @@ struct zmqHeader {
uint32_t jsonversion{0}; uint32_t jsonversion{0};
uint32_t dynamicRange{0}; uint32_t dynamicRange{0};
uint64_t fileIndex{0}; uint64_t fileIndex{0};
/** number of detectors in x axis */ /** number of detectors/port in x axis */
uint32_t ndetx{0}; uint32_t ndetx{0};
/** number of detectors in y axis */ /** number of detectors/port in y axis */
uint32_t ndety{0}; uint32_t ndety{0};
/** number of pixels/channels in x axis for this zmq socket */ /** number of pixels/channels in x axis for this zmq socket */
uint32_t npixelsx{0}; uint32_t npixelsx{0};

View File

@ -6,10 +6,10 @@
#define APIRECEIVER 0x220408 #define APIRECEIVER 0x220408
#define APIGUI 0x220328 #define APIGUI 0x220328
#define APICTB 0x220408 #define APICTB 0x220428
#define APIGOTTHARD 0x220408 #define APIGOTTHARD 0x220428
#define APIGOTTHARD2 0x220408 #define APIGOTTHARD2 0x220428
#define APIJUNGFRAU 0x220408 #define APIJUNGFRAU 0x220428
#define APIMYTHEN3 0x220408 #define APIMYTHEN3 0x220428
#define APIMOENCH 0x220408 #define APIMOENCH 0x220427
#define APIEIGER 0x220408 #define APIEIGER 0x220428

View File

@ -2,6 +2,7 @@
# Copyright (C) 2021 Contributors to the SLS Detector Package # Copyright (C) 2021 Contributors to the SLS Detector Package
include_directories( include_directories(
${PROJECT_SOURCE_DIR}/libs/catch ${PROJECT_SOURCE_DIR}/libs/catch
${SLS_INTERNAL_RAPIDJSON_DIR}
include include
) )