From d046e29862a5f534116ac53bb61edfff6a67a761 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Fri, 22 Nov 2024 11:50:03 +0100 Subject: [PATCH] udpated docs for 9.0.0 --- ToString.html | 35 +- _sources/binaryfileformat.rst.txt | 438 +++++++++ _sources/commandline.rst.txt | 18 +- _sources/ctbframeformat.rst.txt | 81 ++ _sources/dependencies.rst.txt | 2 +- _sources/fileformat.rst.txt | 62 ++ _sources/firmware.rst.txt | 4 +- _sources/hdf5fileformat.rst.txt | 89 ++ _sources/index.rst.txt | 17 + _sources/installation.rst.txt | 24 +- _sources/masterfileattributes.rst.txt | 408 +++++++++ _sources/slsreceiver.rst.txt | 239 ----- _sources/slsreceiverheaderformat.rst.txt | 40 + _sources/troubleshooting.rst.txt | 8 + _sources/udpheader.rst.txt | 23 +- _sources/zmqjsonheaderformat.rst.txt | 137 +++ binaryfileformat.html | 611 +++++++++++++ commandline.html | 777 ++++++++-------- consuming.html | 25 +- container_utils.html | 25 +- ctbframeformat.html | 269 ++++++ dependencies.html | 27 +- detector.html | 289 +++--- examples.html | 25 +- fileformat.html | 247 +++++ firmware.html | 41 +- genindex.html | 705 +++++++++++--- hdf5fileformat.html | 273 ++++++ index.html | 91 +- installation.html | 70 +- masterfileattributes.html | 807 ++++++++++++++++ objects.inv | Bin 35688 -> 38971 bytes pydetector.html | 1060 +++++++++++----------- pyenums.html | 26 +- pyexamples.html | 25 +- pygettingstarted.html | 25 +- quick_start_guide.html | 25 +- receiver_api.html | 60 +- receivers.html | 25 +- result.html | 25 +- search.html | 25 +- searchindex.js | 2 +- serverdefaults.html | 571 ++++++------ servers.html | 25 +- serverupgrade.html | 25 +- slsreceiver.html | 294 +----- slsreceiverheaderformat.html | 220 +++++ troubleshooting.html | 40 +- type_traits.html | 27 +- udpconfig.html | 25 +- udpdetspec.html | 25 +- udpheader.html | 58 +- virtualserver.html | 25 +- zmqjsonheaderformat.html | 352 +++++++ 54 files changed, 6821 insertions(+), 2071 deletions(-) create mode 100644 _sources/binaryfileformat.rst.txt create mode 100644 _sources/ctbframeformat.rst.txt create mode 100644 _sources/fileformat.rst.txt create mode 100644 _sources/hdf5fileformat.rst.txt create mode 100644 _sources/masterfileattributes.rst.txt create mode 100644 _sources/slsreceiverheaderformat.rst.txt create mode 100644 _sources/zmqjsonheaderformat.rst.txt create mode 100644 binaryfileformat.html create mode 100644 ctbframeformat.html create mode 100644 fileformat.html create mode 100644 hdf5fileformat.html create mode 100644 masterfileattributes.html create mode 100644 slsreceiverheaderformat.html create mode 100644 zmqjsonheaderformat.html diff --git a/ToString.html b/ToString.html index aaeda54..2abc8ac 100644 --- a/ToString.html +++ b/ToString.html @@ -1,13 +1,15 @@ - + ToString — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
- 8.0.2 + 9.0.0
@@ -100,6 +102,19 @@
  • Receivers
  • slsReceiver/ slsMultiReceiver
  • +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    • Troubleshooting
    • @@ -317,6 +332,16 @@

      ToStringtemplate<>
      defs::polarity StringTo(const std::string &s)

      +
      +
      +template<>
      defs::timingInfoDecoder StringTo(const std::string &s)
      +
      + +
      +
      +template<>
      defs::collectionMode StringTo(const std::string &s)
      +
      +
      template<>
      uint8_t StringTo(const std::string &s)
      diff --git a/_sources/binaryfileformat.rst.txt b/_sources/binaryfileformat.rst.txt new file mode 100644 index 0000000..67f041a --- /dev/null +++ b/_sources/binaryfileformat.rst.txt @@ -0,0 +1,438 @@ +Binary File Format +==================== + +This is the default file format that can be configured using command `fformat `_. + + .. code-block:: bash + + sls_detector_put fformat binary + + +Master File +-------------- + +* File Name: [fpath]/[fname]_master_[findex].json :ref:`Details here` + +* It is in json format and created for every acquisition. + +* It contains :ref:`attributes` relevant to the acquisition. This can vary with detector type shown in :ref:`master json file examples ` here. + +* It shows the :ref:`**SLS Receiver Header** ` format used in data files. + +* Enabled/disabled using command `fmaster `_. + + +Data File +---------- + +* File Name: [fpath]/[fname]_dx_fy_[findex].raw :ref:`Details here` + +* It store multiple frames sequentially, with total number of frames determined by `rx_framesperfile `_ parameter. + +* Each frame includes a :ref:`**sls_receiver_header** ` structure, followed by the actual frame data. + + + +.. _json master file examples: + +JSON Master File Examples +--------------------------------------------------- + +Eiger +^^^^^ + +.. code-block:: text + + { + "Version": 7.2, + "Timestamp": "Wed Nov 13 15:46:30 2024", + "Detector Type": "Eiger", + "Timing Mode": "auto", + "Geometry": { + "x": 2, + "y": 1 + }, + "Image Size in bytes": 262144, + "Pixels": { + "x": 512, + "y": 256 + }, + "Max Frames Per File": 10000, + "Frame Discard Policy": "nodiscard", + "Frame Padding": 1, + "Scan Parameters": "[disabled]", + "Total Frames": 1, + "Receiver Roi": { + "xmin": 4294967295, + "xmax": 4294967295, + "ymin": 4294967295, + "ymax": 4294967295 + }, + "Dynamic Range": 16, + "Ten Giga": 0, + "Exptime": "1s", + "Period": "1s", + "Threshold Energy": -1, + "Sub Exptime": "2.62144ms", + "Sub Period": "2.62144ms", + "Quad": 0, + "Number of rows": 256, + "Rate Corrections": "[0]", + "Frames in File": 1, + "Frame Header Format": { + "Frame Number": "8 bytes", + "SubFrame Number/ExpLength": "4 bytes", + "Packet Number": "4 bytes", + "Bunch ID": "8 bytes", + "Timestamp": "8 bytes", + "Module Id": "2 bytes", + "Row": "2 bytes", + "Column": "2 bytes", + "Reserved": "2 bytes", + "Debug": "4 bytes", + "Round Robin Number": "2 bytes", + "Detector Type": "1 byte", + "Header Version": "1 byte", + "Packets Caught Mask": "64 bytes" + } + } + + + +Jungfrau +^^^^^^^^ + +.. code-block:: text + + { + "Version": 7.2, + "Timestamp": "Wed Nov 13 13:03:53 2024", + "Detector Type": "Jungfrau", + "Timing Mode": "auto", + "Geometry": { + "x": 1, + "y": 1 + }, + "Image Size in bytes": 1048576, + "Pixels": { + "x": 1024, + "y": 512 + }, + "Max Frames Per File": 10000, + "Frame Discard Policy": "nodiscard", + "Frame Padding": 1, + "Scan Parameters": "[disabled]", + "Total Frames": 1000, + "Receiver Roi": { + "xmin": 4294967295, + "xmax": 4294967295, + "ymin": 4294967295, + "ymax": 4294967295 + }, + "Exptime": "10us", + "Period": "2ms", + "Number of UDP Interfaces": 1, + "Number of rows": 512, + "Frames in File": 10, + "Frame Header Format": { + "Frame Number": "8 bytes", + "SubFrame Number/ExpLength": "4 bytes", + "Packet Number": "4 bytes", + "Bunch ID": "8 bytes", + "Timestamp": "8 bytes", + "Module Id": "2 bytes", + "Row": "2 bytes", + "Column": "2 bytes", + "Reserved": "2 bytes", + "Debug": "4 bytes", + "Round Robin Number": "2 bytes", + "Detector Type": "1 byte", + "Header Version": "1 byte", + "Packets Caught Mask": "64 bytes" + } + } + + +Gotthard2 +^^^^^^^^^^^^ + +.. code-block:: text + + { + "Version": 7.2, + "Timestamp": "Wed Nov 13 14:18:17 2024", + "Detector Type": "Gotthard2", + "Timing Mode": "auto", + "Geometry": { + "x": 1, + "y": 1 + }, + "Image Size in bytes": 2560, + "Pixels": { + "x": 1280, + "y": 1 + }, + "Max Frames Per File": 20000, + "Frame Discard Policy": "nodiscard", + "Frame Padding": 1, + "Scan Parameters": "[disabled]", + "Total Frames": 10, + "Receiver Roi": { + "xmin": 4294967295, + "xmax": 4294967295, + "ymin": 4294967295, + "ymax": 4294967295 + }, + "Exptime": "0ns", + "Period": "0ns", + "Burst Mode": "burst_internal", + "Frames in File": 10, + "Frame Header Format": { + "Frame Number": "8 bytes", + "SubFrame Number/ExpLength": "4 bytes", + "Packet Number": "4 bytes", + "Bunch ID": "8 bytes", + "Timestamp": "8 bytes", + "Module Id": "2 bytes", + "Row": "2 bytes", + "Column": "2 bytes", + "Reserved": "2 bytes", + "Debug": "4 bytes", + "Round Robin Number": "2 bytes", + "Detector Type": "1 byte", + "Header Version": "1 byte", + "Packets Caught Mask": "64 bytes" + } + } + +Mythen3 +^^^^^^^ + +.. code-block:: text + + { + "Version": 7.2, + "Timestamp": "Wed Nov 13 14:39:14 2024", + "Detector Type": "Mythen3", + "Timing Mode": "auto", + "Geometry": { + "x": 1, + "y": 1 + }, + "Image Size in bytes": 15360, + "Pixels": { + "x": 3840, + "y": 1 + }, + "Max Frames Per File": 10000, + "Frame Discard Policy": "nodiscard", + "Frame Padding": 1, + "Scan Parameters": "[disabled]", + "Total Frames": 1, + "Receiver Roi": { + "xmin": 4294967295, + "xmax": 4294967295, + "ymin": 4294967295, + "ymax": 4294967295 + }, + "Dynamic Range": 32, + "Ten Giga": 1, + "Period": "2ms", + "Counter Mask": "0x7", + "Exptime1": "0.1s", + "Exptime2": "0.1s", + "Exptime3": "0.1s", + "GateDelay1": "0ns", + "GateDelay2": "0ns", + "GateDelay3": "0ns", + "Gates": 1, + "Threshold Energies": "[-1, -1, -1]", + "Frames in File": 1, + "Frame Header Format": { + "Frame Number": "8 bytes", + "SubFrame Number/ExpLength": "4 bytes", + "Packet Number": "4 bytes", + "Bunch ID": "8 bytes", + "Timestamp": "8 bytes", + "Module Id": "2 bytes", + "Row": "2 bytes", + "Column": "2 bytes", + "Reserved": "2 bytes", + "Debug": "4 bytes", + "Round Robin Number": "2 bytes", + "Detector Type": "1 byte", + "Header Version": "1 byte", + "Packets Caught Mask": "64 bytes" + } + } + + +Moench +^^^^^^ + +.. code-block:: text + + { + "Version": 7.2, + "Timestamp": "Wed Nov 13 14:41:32 2024", + "Detector Type": "Moench", + "Timing Mode": "auto", + "Geometry": { + "x": 1, + "y": 1 + }, + "Image Size in bytes": 320000, + "Pixels": { + "x": 400, + "y": 400 + }, + "Max Frames Per File": 100000, + "Frame Discard Policy": "discardpartial", + "Frame Padding": 1, + "Scan Parameters": "[disabled]", + "Total Frames": 1, + "Receiver Roi": { + "xmin": 4294967295, + "xmax": 4294967295, + "ymin": 4294967295, + "ymax": 4294967295 + }, + "Exptime": "10us", + "Period": "2ms", + "Number of UDP Interfaces": 1, + "Number of rows": 400, + "Frames in File": 1, + "Frame Header Format": { + "Frame Number": "8 bytes", + "SubFrame Number/ExpLength": "4 bytes", + "Packet Number": "4 bytes", + "Bunch ID": "8 bytes", + "Timestamp": "8 bytes", + "Module Id": "2 bytes", + "Row": "2 bytes", + "Column": "2 bytes", + "Reserved": "2 bytes", + "Debug": "4 bytes", + "Round Robin Number": "2 bytes", + "Detector Type": "1 byte", + "Header Version": "1 byte", + "Packets Caught Mask": "64 bytes" + } + } + +Gotthard I +^^^^^^^^^^^ + +.. code-block:: text + + { + "Version": 7.2, + "Timestamp": "Wed Nov 13 15:16:19 2024", + "Detector Type": "Gotthard", + "Timing Mode": "auto", + "Geometry": { + "x": 1, + "y": 1 + }, + "Image Size in bytes": 2560, + "Pixels": { + "x": 1280, + "y": 1 + }, + "Max Frames Per File": 20000, + "Frame Discard Policy": "nodiscard", + "Frame Padding": 1, + "Scan Parameters": "[disabled]", + "Total Frames": 1, + "Receiver Roi": { + "xmin": 4294967295, + "xmax": 4294967295, + "ymin": 4294967295, + "ymax": 4294967295 + }, + "Exptime": "1.00001ms", + "Period": "1s", + "Detector Roi": { + "xmin": 4294967295, + "xmax": 4294967295 + }, + "Frames in File": 1, + "Frame Header Format": { + "Frame Number": "8 bytes", + "SubFrame Number/ExpLength": "4 bytes", + "Packet Number": "4 bytes", + "Bunch ID": "8 bytes", + "Timestamp": "8 bytes", + "Module Id": "2 bytes", + "Row": "2 bytes", + "Column": "2 bytes", + "Reserved": "2 bytes", + "Debug": "4 bytes", + "Round Robin Number": "2 bytes", + "Detector Type": "1 byte", + "Header Version": "1 byte", + "Packets Caught Mask": "64 bytes" + } + } + +Chip Test Board +^^^^^^^^^^^^^^^ + +.. code-block:: text + + { + "Version": 7.2, + "Timestamp": "Wed Nov 13 15:32:59 2024", + "Detector Type": "ChipTestBoard", + "Timing Mode": "auto", + "Geometry": { + "x": 1, + "y": 1 + }, + "Image Size in bytes": 48018, + "Pixels": { + "x": 3, + "y": 1 + }, + "Max Frames Per File": 20000, + "Frame Discard Policy": "nodiscard", + "Frame Padding": 1, + "Scan Parameters": "[disabled]", + "Total Frames": 1, + "Receiver Roi": { + "xmin": 4294967295, + "xmax": 4294967295, + "ymin": 4294967295, + "ymax": 4294967295 + }, + "Exptime": "0ns", + "Period": "0.18s", + "Ten Giga": 0, + "ADC Mask": "0x2202", + "Analog Flag": 1, + "Analog Samples": 8003, + "Digital Flag": 0, + "Digital Samples": 1000, + "Dbit Offset": 0, + "Dbit Bitset": 0, + "Transceiver Mask": "0x3", + "Transceiver Flag": 0, + "Transceiver Samples": 1, + "Frames in File": 1, + "Frame Header Format": { + "Frame Number": "8 bytes", + "SubFrame Number/ExpLength": "4 bytes", + "Packet Number": "4 bytes", + "Bunch ID": "8 bytes", + "Timestamp": "8 bytes", + "Module Id": "2 bytes", + "Row": "2 bytes", + "Column": "2 bytes", + "Reserved": "2 bytes", + "Debug": "4 bytes", + "Round Robin Number": "2 bytes", + "Detector Type": "1 byte", + "Header Version": "1 byte", + "Packets Caught Mask": "64 bytes" + } + } diff --git a/_sources/commandline.rst.txt b/_sources/commandline.rst.txt index fb4e9f8..4b54da9 100644 --- a/_sources/commandline.rst.txt +++ b/_sources/commandline.rst.txt @@ -8,7 +8,7 @@ Commands can be used either with sls_detector_get or sls_detector_put .. code-block:: - sls_detector_get vrf + sls_detector_get exptime Help -------- @@ -24,6 +24,16 @@ Help # get help for a particular command sls_detector_get -h fpath sls_detector_help fpath + + # list of deprecated commands + list deprecated + + # autocompletion + # bash_autocomplete.sh or zsh_autocomplete.sh must be sourced from the + # main package folder to enable auto completion of commands and arguments + # for the command line on that shell. + source bash_autocomplete.sh + Commands @@ -32,14 +42,14 @@ Commands .. include:: ../commands.rst -Depreciated commands +Deprecated commands ------------------------ .. note :: All the dac commands are preceded with the **dac** command. Use command **daclist** to get correct list of dac command arguments for current detector. -.. csv-table:: Depreciated commands - :file: ../depreciated.csv +.. csv-table:: Deprecated commands + :file: ../deprecated.csv :widths: 35, 35 :header-rows: 1 diff --git a/_sources/ctbframeformat.rst.txt b/_sources/ctbframeformat.rst.txt new file mode 100644 index 0000000..b782583 --- /dev/null +++ b/_sources/ctbframeformat.rst.txt @@ -0,0 +1,81 @@ +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 `_. + + .. 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 `_ + + 10G: `adcenable10g `_ + - `asamples `_ + - 2 bytes per channel, + + max 32 channels + * - Digital + - `rx_dbitlist `_ + + [filtered only by receiver, module sends out all digital data] + - `dsamples `_ + - 1 bit per signal, + + max 64 signals + * - Transceiver + - `transceiverenable `_ + - `tsamples `_ + - 8 bytes per channel, + + max 4 channels + + diff --git a/_sources/dependencies.rst.txt b/_sources/dependencies.rst.txt index 457ca12..7649ab3 100644 --- a/_sources/dependencies.rst.txt +++ b/_sources/dependencies.rst.txt @@ -21,7 +21,7 @@ Python bindings ----------------------- * Python > 3.6 - * pybind11 2.11.0 (packaged in libs) + * pybind11 2.13.0 (packaged in libs) .. note :: diff --git a/_sources/fileformat.rst.txt b/_sources/fileformat.rst.txt new file mode 100644 index 0000000..f35498d --- /dev/null +++ b/_sources/fileformat.rst.txt @@ -0,0 +1,62 @@ +File format +================================ + +If `fwrite `_ is enabled, the receiver will write data to files. + +Number of Files +---------------- + +Every acquisition will create a master file and data files. + +An acquisition can have multiple data files for a single frame. The number of files is determined by the number of UDP ports per module and the number of modules. + + * Every modules has its own receiver process. Every receiver process can have 1 or 2 UDP ports. + * Each UDP port will create its own file. Therefore, each receiver can write 1 or 2 files. + * So, for example a detector with 4 modules with 2 UDP ports each will create a total of 8 files with file names containing UDP port index **'_d0'** to **'_d7'**. + +A new file containing **'_f[file_index]'** in file name is also created when reaching the maximum frames per file. Configured using `rx_framesperfile `_. + +.. _file name format: + +Naming +------- +| Master File Name: [fpath]/[fname]_master_[findex].[ext] + + +| Data File Name: [fpath]/[fname]_dx_fy_[findex].[ext] + + * fpath: file path set using command `fpath `_. Default: '/' + * fname: file name prefix using command `fname `_. Default: "run" + * findex: acquisition index using command `findex `_. Automatically incremented for every acquisition with `sls_detector_acquire `_ (if `fwrite `_ enabled). + * x: unique udp port index. New file per UDP port. + * y: file index. New file created after reaching max frames per file. + * ext: file extension. Default: "raw"(data file) or "json"(master file) + + +Some file name examples: + + .. code-block:: bash + + # first file + path-to-file/run_d0_f0_0.raw + + # first file for second UDP port + path-to-file/run_d1_f0_0.raw + + # second file after reaching max frames in first file + path-to-file/run_d0_f1_0.raw + + # second acquisition, first file + path-to-file/run_d0_f0_1.raw + + +Formats +-------- + +There are 2 file formats supported by the receiver: + + * Binary - extension .json (master file) or .raw (data files) + * HDF5 - extension .h5 + +The default is binary. HDF5 can be enabled by compiling the package with HDF5 option enabled. The file format is set using the command `fformat `_. + diff --git a/_sources/firmware.rst.txt b/_sources/firmware.rst.txt index 0651fe0..165991c 100644 --- a/_sources/firmware.rst.txt +++ b/_sources/firmware.rst.txt @@ -98,7 +98,7 @@ Upgrade * 6.1.2 server has a fix for seamless fpga programming - * We recommend first updating the on-board detector server to 6.1.2 (with client 6.1.x) using command 'updatedetectorserver' or 'copydetectorserver'. + * We recommend first updating the on-board detector server to 6.1.2 (with client 6.1.x) using command `updatedetectorserver `_. * Then use command 'programfpga' to only update firmware or use command 'update' to update firmware and server to the latest release. @@ -257,7 +257,7 @@ Upgrade * 6.1.2 server has a fix for seamless fpga programming - * We recommend first updating the on-board detector server to 6.1.2 (with client 6.1.x) using command 'updatedetectorserver' or 'copydetectorserver'. + * We recommend first updating the on-board detector server to 6.1.2 (with client 6.1.x) using command `updatedetectorserver `_. * Then use command 'programfpga' to only update firmware or use command 'update' to update firmware and server to the latest release. diff --git a/_sources/hdf5fileformat.rst.txt b/_sources/hdf5fileformat.rst.txt new file mode 100644 index 0000000..892cde3 --- /dev/null +++ b/_sources/hdf5fileformat.rst.txt @@ -0,0 +1,89 @@ + + +HDF5 File Format +================================ + +Compilation +------------- + +#. Compile the package with HDF5 option enabled + + #. Using cmk script: ./cmk.sh -hj9 -d [path of hdf5 dir] (-d is optional and for custom installation folder) + + #. Enable using cmake option **-DSLS_USE_HDF5=ON** and **-DCMAKE_INSTALL_PREFIX=/path/to/custom/hdf/installation** (optional). + + +Setup +------- + +#. Start Receiver process + +#. Load config file + +#. Set file format using command `fformat `_. + + .. code-block:: bash + + sls_detector_put fformat hdf5 + + +Master File +------------- + +* File Name: [fpath]/[fname]_master_[findex].h5 :ref:`Details here` + +* It contains :ref:`attributes` relevant to the acquisition. This can vary with detector type. + +.. code-block:: text + + / # Root level + |---> entry # entry group + | |---> data # data group + | |---> column # dataset of each sls_receiver_header member + | |---> data + | |---> detector header version + | |---> detector specific 1 + | |---> detector specific 2 + | |---> detector specific 3 + | |---> detector specific 4 + | |---> detector type + | |---> exp length or sub exposure time + | |---> frame number + | |---> mod id + | |---> packets caught + | |---> packets caught bit mask + | |---> row + | |---> timestamp + | |---> instrument # instrument group + | |---> beam # beam group + | |---> detector # detector group + | |---> Master File Attribute 1 # dataset of each master file attribute + | |---> Master File Attribute 2 + | |---> Master File Attribute 3 + | |---> Master File Attribute .. + | |---> sample # sample group + + +If more than 1 data file per frame: + * The dataset of each :ref:`**SLS Receiver Header** ` member is a virtual dataset. + * **data** dataset is a virtual dataset. + + +More details regarding master file attributes can be found :ref:`here`. + +Data File +----------- + +* File Name: [fpath]/[fname]_dx_fy_[findex].h5 :ref:`Details here` + + +Virtual Data File +------------------ + +* File Name: [fpath]/[fname]_virtual_[findex].h5 :ref:`Details here` + +* For multiple modules, a virtual file linking data from all the modules is created. The individual files are expected to be present. + +* It is linked in the master file. + + diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt index 1bdca9d..25503e7 100644 --- a/_sources/index.rst.txt +++ b/_sources/index.rst.txt @@ -82,6 +82,23 @@ Welcome to slsDetectorPackage's documentation! receivers slsreceiver +.. toctree:: + :caption: Receiver Files + :maxdepth: 3 + + fileformat + slsreceiverheaderformat + ctbframeformat + masterfileattributes + binaryfileformat + hdf5fileformat + +.. toctree:: + :caption: Receiver ZMQ Stream + :maxdepth: 2 + + zmqjsonheaderformat + .. toctree:: :caption: Troubleshooting diff --git a/_sources/installation.rst.txt b/_sources/installation.rst.txt index c871785..7cc24bb 100644 --- a/_sources/installation.rst.txt +++ b/_sources/installation.rst.txt @@ -201,6 +201,7 @@ Build slsDetectorGui (Qt5) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. Using pre-built binary on conda + .. code-block:: bash conda create -n myenv slsdetgui=7.0.0 @@ -208,13 +209,22 @@ Build slsDetectorGui (Qt5) 2. Using system installation on RHEL7 + .. code-block:: bash yum install qt5-qtbase-devel.x86_64 yum install qt5-qtsvg-devel.x86_64 +3. Using system installation on RHEL8 + + .. code-block:: bash + + yum install qt5-qtbase-devel.x86_64 + yum install qt5-qtsvg-devel.x86_64 + yum install expat-devel.x86_64 + +4. Using conda -3. Using conda .. code-block:: bash #Add channels for dependencies and our library @@ -277,11 +287,13 @@ 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 `__]. +| * v9.0.0+: pybind11 (v2.13.0) +| * 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". @@ -312,7 +324,7 @@ Pybind and Zeromq | * or use advanced option SLS_FETCH_ZMQ_FROM_GITHUB [`link `__]. | | v7.x.x and older: -| zeromq must be installed and one can hint its location using +| 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 diff --git a/_sources/masterfileattributes.rst.txt b/_sources/masterfileattributes.rst.txt new file mode 100644 index 0000000..887129b --- /dev/null +++ b/_sources/masterfileattributes.rst.txt @@ -0,0 +1,408 @@ + +.. _master file attributes: +Master File Attributes +======================= + +These attributes are the same in binary and HDF5 file, but vary depending on detector type. + + +Eiger +^^^^^ + + +-----------------------+-------------------------------------------------+ + | **Key** | **Description** | + +-----------------------+-------------------------------------------------+ + | Version | Version of the master file | + | | Current value:8.0 | + +-----------------------+-------------------------------------------------+ + | Timestamp | Timestamp of creation of master file | + +-----------------------+-------------------------------------------------+ + | Detector Type | Detector type | + +-----------------------+-------------------------------------------------+ + | Timing Mode | Timing Mode | + +-----------------------+-------------------------------------------------+ + | Geometry | Number of UDP ports in x and y dimension for | + | | complete detector | + +-----------------------+-------------------------------------------------+ + | Image Size in bytes | Image size in bytes per UDP port | + +-----------------------+-------------------------------------------------+ + | Pixels | Number of pixels in x and y dimension | + | | per UDP port | + +-----------------------+-------------------------------------------------+ + | Max Frames Per File | Maximum frames per file | + +-----------------------+-------------------------------------------------+ + | Frame Discard Policy | Receiever Frame discard policy | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Frame Padding | Receiver Frame padding enable | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Scan Parameters | Scanning mode on detector | + +-----------------------+-------------------------------------------------+ + | Total Frames | Total number of frames and triggers expected | + +-----------------------+-------------------------------------------------+ + | Receiver Roi | Receiver ROI in file including xmax and ymax | + +-----------------------+-------------------------------------------------+ + | Dynamic Range | Bits per pixel | + +-----------------------+-------------------------------------------------+ + | Ten Giga | 10GbE enable for data | + +-----------------------+-------------------------------------------------+ + | Exptime | Exposure time | + +-----------------------+-------------------------------------------------+ + | Period | Period between frames | + +-----------------------+-------------------------------------------------+ + | Threshold Energy | Threshold energy | + +-----------------------+-------------------------------------------------+ + | Sub Exptime | Sub exposure time in 32 bit mode | + +-----------------------+-------------------------------------------------+ + | Sub Period | Sub period between frames in 32 bit mode | + +-----------------------+-------------------------------------------------+ + | Quad | Quad enable (hardware) | + +-----------------------+-------------------------------------------------+ + | Number of rows | Number of rows enabled for readout | + +-----------------------+-------------------------------------------------+ + | Rate Corrections | Rate Corrections | + +-----------------------+-------------------------------------------------+ + | Frames in File | Number of frames written to file by Receiver 0 | + +-----------------------+-------------------------------------------------+ + | Frame Header Format | Expected frame header format for the data files | + +-----------------------+-------------------------------------------------+ + + +Jungfrau +^^^^^^^^ + + +-----------------------+-------------------------------------------------+ + | **Key** | **Description** | + +-----------------------+-------------------------------------------------+ + | Version | Version of the master file | + | | Current value:8.0 | + +-----------------------+-------------------------------------------------+ + | Timestamp | Timestamp of creation of master file | + +-----------------------+-------------------------------------------------+ + | Detector Type | Detector type | + +-----------------------+-------------------------------------------------+ + | Timing Mode | Timing Mode | + +-----------------------+-------------------------------------------------+ + | Geometry | Number of UDP ports in x and y dimension for | + | | complete detector | + +-----------------------+-------------------------------------------------+ + | Image Size in bytes | Image size in bytes per UDP port | + +-----------------------+-------------------------------------------------+ + | Pixels | Number of pixels in x and y dimension | + | | per UDP port | + +-----------------------+-------------------------------------------------+ + | Max Frames Per File | Maximum frames per file | + +-----------------------+-------------------------------------------------+ + | Frame Discard Policy | Receiever Frame discard policy | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Frame Padding | Receiver Frame padding enable | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Scan Parameters | Scanning mode on detector | + +-----------------------+-------------------------------------------------+ + | Total Frames | Total number of frames and triggers expected | + +-----------------------+-------------------------------------------------+ + | Receiver Roi | Receiver ROI in file including xmax and ymax | + +-----------------------+-------------------------------------------------+ + | Exptime | Exposure time | + +-----------------------+-------------------------------------------------+ + | Period | Period between frames | + +-----------------------+-------------------------------------------------+ + | Number of UDP | Number of UDP Interfaces enabled per module | + | Interfaces | | + +-----------------------+-------------------------------------------------+ + | Number of rows | Number of rows enabled for readout | + +-----------------------+-------------------------------------------------+ + | Frames in File | Number of frames written to file by Receiver 0 | + +-----------------------+-------------------------------------------------+ + | Frame Header Format | Expected frame header format for the data files | + +-----------------------+-------------------------------------------------+ + +Gotthard II +^^^^^^^^^^^^ + + +-----------------------+-------------------------------------------------+ + | **Key** | **Description** | + +-----------------------+-------------------------------------------------+ + | Version | Version of the master file | + | | Current value:8.0 | + +-----------------------+-------------------------------------------------+ + | Timestamp | Timestamp of creation of master file | + +-----------------------+-------------------------------------------------+ + | Detector Type | Detector type | + +-----------------------+-------------------------------------------------+ + | Timing Mode | Timing Mode | + +-----------------------+-------------------------------------------------+ + | Geometry | Number of UDP ports in x and y dimension for | + | | complete detector | + +-----------------------+-------------------------------------------------+ + | Image Size in bytes | Image size in bytes per UDP port | + +-----------------------+-------------------------------------------------+ + | Pixels | Number of pixels in x and y dimension | + | | per UDP port | + +-----------------------+-------------------------------------------------+ + | Max Frames Per File | Maximum frames per file | + +-----------------------+-------------------------------------------------+ + | Frame Discard Policy | Receiever Frame discard policy | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Frame Padding | Receiver Frame padding enable | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Scan Parameters | Scanning mode on detector | + +-----------------------+-------------------------------------------------+ + | Total Frames | Total number of frames and triggers expected | + +-----------------------+-------------------------------------------------+ + | Receiver Roi | Receiver ROI in file including xmax and ymax | + +-----------------------+-------------------------------------------------+ + | Exptime | Exposure time | + +-----------------------+-------------------------------------------------+ + | Period | Period between frames | + +-----------------------+-------------------------------------------------+ + | Burst Mode | Burst mode of detector | + +-----------------------+-------------------------------------------------+ + | Frames in File | Number of frames written to file by Receiver 0 | + +-----------------------+-------------------------------------------------+ + | Frame Header Format | Expected frame header format for the data files | + +-----------------------+-------------------------------------------------+ + +Mythen3 +^^^^^^^ + + + +-----------------------+-------------------------------------------------+ + | **Key** | **Description** | + +-----------------------+-------------------------------------------------+ + | Version | Version of the master file | + | | Current value:8.0 | + +-----------------------+-------------------------------------------------+ + | Timestamp | Timestamp of creation of master file | + +-----------------------+-------------------------------------------------+ + | Detector Type | Detector type | + +-----------------------+-------------------------------------------------+ + | Timing Mode | Timing Mode | + +-----------------------+-------------------------------------------------+ + | Geometry | Number of UDP ports in x and y dimension for | + | | complete detector | + +-----------------------+-------------------------------------------------+ + | Image Size in bytes | Image size in bytes per UDP port | + +-----------------------+-------------------------------------------------+ + | Pixels | Number of pixels in x and y dimension | + | | per UDP port | + +-----------------------+-------------------------------------------------+ + | Max Frames Per File | Maximum frames per file | + +-----------------------+-------------------------------------------------+ + | Frame Discard Policy | Receiever Frame discard policy | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Frame Padding | Receiver Frame padding enable | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Scan Parameters | Scanning mode on detector | + +-----------------------+-------------------------------------------------+ + | Total Frames | Total number of frames and triggers expected | + +-----------------------+-------------------------------------------------+ + | Receiver Roi | Receiver ROI in file including xmax and ymax | + +-----------------------+-------------------------------------------------+ + | Dynamic Range | Bits per pixel | + +-----------------------+-------------------------------------------------+ + | Ten Giga | 10GbE enable for data | + +-----------------------+-------------------------------------------------+ + | Period | Period between frames | + +-----------------------+-------------------------------------------------+ + | Counter Mask | Mask of counters enabled | + +-----------------------+-------------------------------------------------+ + | Exptime1 | Exposure time of counter 1 | + +-----------------------+-------------------------------------------------+ + | Exptime2 | Exposure time of counter 2 | + +-----------------------+-------------------------------------------------+ + | Exptime3 | Exposure time of counter 3 | + +-----------------------+-------------------------------------------------+ + | GateDelay1 | Gate delay of counter 1 | + +-----------------------+-------------------------------------------------+ + | GateDelay2 | Gate delay of counter 2 | + +-----------------------+-------------------------------------------------+ + | GateDelay3 | Gate delay of counter 3 | + +-----------------------+-------------------------------------------------+ + | Gates | Number of gates | + +-----------------------+-------------------------------------------------+ + | Threshold energies | Threshold energy of all 3 counters | + +-----------------------+-------------------------------------------------+ + | Frames in File | Number of frames written to file by Receiver 0 | + +-----------------------+-------------------------------------------------+ + | Frame Header Format | Expected frame header format for the data files | + +-----------------------+-------------------------------------------------+ + + +Moench +^^^^^^ + + +-----------------------+-------------------------------------------------+ + | **Key** | **Description** | + +-----------------------+-------------------------------------------------+ + | Version | Version of the master file | + | | Current value:8.0 | + +-----------------------+-------------------------------------------------+ + | Timestamp | Timestamp of creation of master file | + +-----------------------+-------------------------------------------------+ + | Detector Type | Detector type | + +-----------------------+-------------------------------------------------+ + | Timing Mode | Timing Mode | + +-----------------------+-------------------------------------------------+ + | Geometry | Number of UDP ports in x and y dimension for | + | | complete detector | + +-----------------------+-------------------------------------------------+ + | Image Size in bytes | Image size in bytes per UDP port | + +-----------------------+-------------------------------------------------+ + | Pixels | Number of pixels in x and y dimension | + | | per UDP port | + +-----------------------+-------------------------------------------------+ + | Max Frames Per File | Maximum frames per file | + +-----------------------+-------------------------------------------------+ + | Frame Discard Policy | Receiever Frame discard policy | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Frame Padding | Receiver Frame padding enable | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Scan Parameters | Scanning mode on detector | + +-----------------------+-------------------------------------------------+ + | Total Frames | Total number of frames and triggers expected | + +-----------------------+-------------------------------------------------+ + | Receiver Roi | Receiver ROI in file including xmax and ymax | + +-----------------------+-------------------------------------------------+ + | Exptime | Exposure time | + +-----------------------+-------------------------------------------------+ + | Period | Period between frames | + +-----------------------+-------------------------------------------------+ + | Number of UDP | Number of UDP Interfaces enabled per module | + | Interfaces | | + +-----------------------+-------------------------------------------------+ + | Number of rows | Number of rows enabled for readout | + +-----------------------+-------------------------------------------------+ + | Frames in File | Number of frames written to file by Receiver 0 | + +-----------------------+-------------------------------------------------+ + | Frame Header Format | Expected frame header format for the data files | + +-----------------------+-------------------------------------------------+ + +Gotthard I +^^^^^^^^^^^ + + +-----------------------+-------------------------------------------------+ + | **Key** | **Description** | + +-----------------------+-------------------------------------------------+ + | Version | Version of the master file | + | | Current value:8.0 | + +-----------------------+-------------------------------------------------+ + | Timestamp | Timestamp of creation of master file | + +-----------------------+-------------------------------------------------+ + | Detector Type | Detector type | + +-----------------------+-------------------------------------------------+ + | Timing Mode | Timing Mode | + +-----------------------+-------------------------------------------------+ + | Geometry | Number of UDP ports in x and y dimension for | + | | complete detector | + +-----------------------+-------------------------------------------------+ + | Image Size in bytes | Image size in bytes per UDP port | + +-----------------------+-------------------------------------------------+ + | Pixels | Number of pixels in x and y dimension | + | | per UDP port | + +-----------------------+-------------------------------------------------+ + | Max Frames Per File | Maximum frames per file | + +-----------------------+-------------------------------------------------+ + | Frame Discard Policy | Receiever Frame discard policy | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Frame Padding | Receiver Frame padding enable | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Scan Parameters | Scanning mode on detector | + +-----------------------+-------------------------------------------------+ + | Total Frames | Total number of frames and triggers expected | + +-----------------------+-------------------------------------------------+ + | Receiver Roi | Receiver ROI in file including xmax and ymax | + +-----------------------+-------------------------------------------------+ + | Exptime | Exposure time | + +-----------------------+-------------------------------------------------+ + | Period | Period between frames | + +-----------------------+-------------------------------------------------+ + | Detector Roi | Roi in detector restricted to an ADC. | + | | Includes xmax | + +-----------------------+-------------------------------------------------+ + | Burst Mode | Burst mode of detector | + +-----------------------+-------------------------------------------------+ + | Frames in File | Number of frames written to file by Receiver 0 | + +-----------------------+-------------------------------------------------+ + | Frame Header Format | Expected frame header format for the data files | + +-----------------------+-------------------------------------------------+ + +Chip Test Board +^^^^^^^^^^^^^^^ + + + +-----------------------+-------------------------------------------------+ + | **Key** | **Description** | + +-----------------------+-------------------------------------------------+ + | Version | Version of the master file | + | | Current value:8.0 | + +-----------------------+-------------------------------------------------+ + | Timestamp | Timestamp of creation of master file | + +-----------------------+-------------------------------------------------+ + | Detector Type | Detector type | + +-----------------------+-------------------------------------------------+ + | Timing Mode | Timing Mode | + +-----------------------+-------------------------------------------------+ + | Geometry | Number of UDP ports in x and y dimension for | + | | complete detector | + +-----------------------+-------------------------------------------------+ + | Image Size in bytes | Image size in bytes per UDP port | + +-----------------------+-------------------------------------------------+ + | Pixels | Number of pixels in x and y dimension | + | | per UDP port | + +-----------------------+-------------------------------------------------+ + | Max Frames Per File | Maximum frames per file | + +-----------------------+-------------------------------------------------+ + | Frame Discard Policy | Receiever Frame discard policy | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Frame Padding | Receiver Frame padding enable | + | | for partial frames | + +-----------------------+-------------------------------------------------+ + | Scan Parameters | Scanning mode on detector | + +-----------------------+-------------------------------------------------+ + | Total Frames | Total number of frames and triggers expected | + +-----------------------+-------------------------------------------------+ + | Receiver Roi | Receiver ROI in file including xmax and ymax | + +-----------------------+-------------------------------------------------+ + | Exptime | Exposure time | + +-----------------------+-------------------------------------------------+ + | Period | Period between frames | + +-----------------------+-------------------------------------------------+ + | Ten Giga | Ten giga enable | + +-----------------------+-------------------------------------------------+ + | ADC Mask | Mask of channels enabled in ADC | + +-----------------------+-------------------------------------------------+ + | Analog Flag | Analog readout enable | + +-----------------------+-------------------------------------------------+ + | Analog Samples | Number of analog samples | + +-----------------------+-------------------------------------------------+ + | Digital Flag | Digital readout enable | + +-----------------------+-------------------------------------------------+ + | Digital Samples | Number of digital samples | + +-----------------------+-------------------------------------------------+ + | Dbit Offset | Digital offset of valid data in bytes | + +-----------------------+-------------------------------------------------+ + | Dbit Bitset | Digital 64 bit mask of bits enabled in receiver | + +-----------------------+-------------------------------------------------+ + | Transceiver Mask | Mask of channels enabled in Transceiver | + +-----------------------+-------------------------------------------------+ + | Transceiver Flag | Transceiver readout enable | + +-----------------------+-------------------------------------------------+ + | Transceiver Samples | Number of transceiver samples | + +-----------------------+-------------------------------------------------+ + | Frames in File | Number of frames written to file by Receiver 0 | + +-----------------------+-------------------------------------------------+ + | Frame Header Format | Expected frame header format for the data files | + +-----------------------+-------------------------------------------------+ diff --git a/_sources/slsreceiver.rst.txt b/_sources/slsreceiver.rst.txt index 0cccaf0..0413eb1 100644 --- a/_sources/slsreceiver.rst.txt +++ b/_sources/slsreceiver.rst.txt @@ -91,245 +91,6 @@ Client Commands sls_detector_get -h rx_framescaught -ZMQ: Json Header Format ------------------------- - - -**Change in field names from slsDetectorPackage v6.x.x to v7.0.0** - -* detSpec1 <- bunchId -* detSpec2 <- reserved -* detSpec3 <- debug -* detSpec4 <- roundRNumber - - -**Format** - - .. code-block:: bash - - { - "jsonversion": unsigned int, - "bitmode": unsigned int, - "fileIndex": unsigned long int, - "detshape": [ - unsigned int, - unsigned int - ], - "shape": [ - unsigned int, - unsigned int - ], - "size": unsigned int, - "acqIndex": unsigned long int, - "frameIndex": unsigned long int, - "progress": double, - "fname": string, - "data": unsigned int, - "completeImage": unsigned int, - - "frameNumber": unsigned long long int, - "expLength": unsigned int, - "packetNumber": unsigned int, - "detSpec1": unsigned long int, - "timestamp": unsigned long int, - "modId": unsigned int, - "row": unsigned int, - "column": unsigned int, - "detSpec2": unsigned int, - "detSpec3": unsigned int, - "detSpec4": unsigned int, - "detType": unsigned int, - "version": unsigned int, - - "flipRows": unsigned int, - "quad": unsigned int, - "addJsonHeader": { - string : string - } - } - - +--------------+----------------------------------------------+ - | Field | Description | - +--------------+----------------------------------------------+ - | jsonversion | Version of the json header. | - | | Value at 4 for v6.x.x and v7.x.x | - +--------------+----------------------------------------------+ - | bitmode | Bits per pixel [4|8|16|32] | - +--------------+----------------------------------------------+ - | fileIndex | Current file acquisition index | - +--------------+----------------------------------------------+ - | detshape | Geometry of the entire detector | - +--------------+----------------------------------------------+ - | shape | Geometry of the current port streamed out | - +--------------+----------------------------------------------+ - | size | Size of image of current port in bytesout | - +--------------+----------------------------------------------+ - | acqIndex | Frame number from the detector (redundant) | - +--------------+----------------------------------------------+ - | frameIndex | Frame number of current acquisition | - | | (Starting at 0) | - +--------------+----------------------------------------------+ - | progress | Progress of current acquisition in % | - +--------------+----------------------------------------------+ - | fname | Current file name | - +--------------+----------------------------------------------+ - | data | 1 if there is data following | - | | 0 if dummy header | - +--------------+----------------------------------------------+ - | completeImage| 1 if no missing packets for this frame | - | | in this port, else 0 | - +--------------+----------------------------------------------+ - | frameNumber | Frame number | - | | [From detector udp header] | - +--------------+----------------------------------------------+ - | expLength | subframe number (32 bit eiger) | - | | or real time exposure time in 100ns (others) | - | | [From detector udp header] | - +--------------+----------------------------------------------+ - | packetNumber | Number of packets caught for that frame | - +--------------+----------------------------------------------+ - | detSpec1 | See :ref:`here` | - | | [From detector udp header] | - +--------------+----------------------------------------------+ - | timestamp | Timestamp with 10 MHz clock | - | | [From detector udp header] | - +--------------+----------------------------------------------+ - | modId | Module Id | - | | [From detector udp header] | - +--------------+----------------------------------------------+ - | row | Row number in detector | - | | [From detector udp header] | - +--------------+----------------------------------------------+ - | column | Column number in detector | - | | [From detector udp header] | - +--------------+----------------------------------------------+ - | detSpec2 | See :ref:`here` | - | | [From detector udp header] | - +--------------+----------------------------------------------+ - | detSpec3 | See :ref:`here` | - | | [From detector udp header] | - +--------------+----------------------------------------------+ - | detSpec4 | See :ref:`here` | - | | [From detector udp header] | - +--------------+----------------------------------------------+ - | detType | Detector type enum | - | detSpec3 | See :ref:`Detector enum` | - | | [From detector udp header] | - +--------------+----------------------------------------------+ - | version | Detector header version. At 2 | - | | [From detector udp header] | - +--------------+----------------------------------------------+ - | flipRows | 1 if rows should be flipped. | - | | Usually for Eiger bottom. | - +--------------+----------------------------------------------+ - | quad | 1 if its an Eiger quad. | - +--------------+----------------------------------------------+ - | addJsonHeader| Optional custom parameters that is required | - | | for processing code. | - +--------------+----------------------------------------------+ - - -SLS Receiver Header Format --------------------------- - -It is 112 bytes and consists of: - * 48 bytes of the SLS Detector Header (described in :ref:`the current detector header `) - * 64 bytes of packet mask - -.. code-block:: cpp - - typedef struct { - uint64_t frameNumber; - uint32_t expLength; - uint32_t packetNumber; - uint64_t detSpec1; - uint64_t timestamp; - uint16_t modId; - uint16_t row; - uint16_t column; - uint16_t detSpec2; - uint32_t detSpec3; - uint16_t detSpec4; - uint8_t detType; - uint8_t version; - } sls_detector_header; - - struct sls_receiver_header { - sls_detector_header detHeader; /**< is the detector header */ - sls_bitset packetsMask; /**< is the packets caught bit mask */ - }; - - -.. note :: - - | The packetNumber in the SLS Receiver Header will be modified to number of packets caught by receiver for that frame. For eg. Jungfrau will have 128 packets per frame. If it is less, then this is a partial frame due to missing packets. - - | Furthermore, the bit mask will specify which packets have been received. - - - - -File format --------------- - -Master file is in json format. - -The file name format is [fpath]/[fname]_dx_fy_[findex].raw, where x is module index and y is file index. **fname** is file name prefix and by default "run". **fpath** is '/' by default. - - -Each acquisition will have an increasing acquisition index or findex (if file write enabled). This can be retrieved by using **findex** command. - - -Each acquisition can have multiple files (the file index number **y**), with **rx_framesperfile** being the maximum number of frames per file. The default varies for each detector type. - - -Some file name examples: - - .. code-block:: bash - - # first file - path-to-file/run_d0_f0_0.raw - - # second file after reaching max frames in first file - path-to-file/run_d0_f1_0.raw - - # second acquisition, first file - path-to-file/run_d0_f0_1.raw - - -Each acquisition will create a master file that can be enabled/disabled using **fmaster**. This should have parameters relevant to the acquisition. - - -**Binary file format** - -This is the default file format. - - -Each data file will consist of frames, each consisting of slsReceiver Header followed by data for 1 frame. - - -Master file is of ASCII format and will also include the format of the slsReceiver Header. - - -**HDF5 file formats** - -#. Compile the package with HDF5 option enabled - - #. Using cmk script: ./cmk.sh -hj9 -d [path of hdf5 dir] - - #. Enable using cmake **-DCMAKE_INSTALL_PREFIX=/path/to/hdf/installation** and **-DSLS_USE_HDF5=ON** - -#. Start Receiver process - -#. Load config file - -#. Set file format from client or in config file - .. code-block:: bash - - sls_detector_put fformat hdf5 - - -| For multiple, modules, a virtual file linking all the modules is created. Both the data files and virtual files are linked in the master file. Performance diff --git a/_sources/slsreceiverheaderformat.rst.txt b/_sources/slsreceiverheaderformat.rst.txt new file mode 100644 index 0000000..9449db8 --- /dev/null +++ b/_sources/slsreceiverheaderformat.rst.txt @@ -0,0 +1,40 @@ + +.. _sls receiver header format: + +SLS Receiver Header Format +==================================================== + +It is 112 bytes and consists of: + * 48 bytes of the SLS Detector Header + * 64 bytes of packet mask + +.. code-block:: cpp + + typedef struct { + uint64_t frameNumber; + uint32_t expLength; + uint32_t packetNumber; + uint64_t detSpec1; + uint64_t timestamp; + uint16_t modId; + uint16_t row; + uint16_t column; + uint16_t detSpec2; + uint32_t detSpec3; + uint16_t detSpec4; + uint8_t detType; + uint8_t version; + } sls_detector_header; + + struct sls_receiver_header { + sls_detector_header detHeader; /**< is the detector header */ + sls_bitset packetsMask; /**< is the packets caught bit mask */ + }; + + + +| **sls_detector_header** (described in :ref:`the current detector header `) + +| The **packetNumber** from detector UDP header is modified in **sls_receiver_header** to number of packets caught by receiver for that frame and the bit mask for each packet caught is the **packetsMask**. The packetsMask is a total of 512 bits due to the largest number of packets per frame among our detectors. + +| For eg. Jungfrau has 128 packets per frame. If **packetNumeber** is 128, then this frame is complete. If it is 127 or less, it is a partial frame due to missing packets. If one would still like to use it, the **packetsMask** will specify which packet has been received or is missing. diff --git a/_sources/troubleshooting.rst.txt b/_sources/troubleshooting.rst.txt index 6521484..041f34b 100644 --- a/_sources/troubleshooting.rst.txt +++ b/_sources/troubleshooting.rst.txt @@ -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 --------- diff --git a/_sources/udpheader.rst.txt b/_sources/udpheader.rst.txt index 04f3a5a..56e59a3 100644 --- a/_sources/udpheader.rst.txt +++ b/_sources/udpheader.rst.txt @@ -3,7 +3,7 @@ Format ======= -The UDP data format for the packets consist of a common header for all detectors, followed by the data for that one packet. +The UDP data format for the packets consist of a common header of 48 bytes for all detectors, followed by the data for that one packet. Current Version @@ -11,6 +11,25 @@ Current Version **v2.0 (slsDetectorPackage v7.0.0+)** +.. code-block:: cpp + + typedef struct { + uint64_t frameNumber; + uint32_t expLength; + uint32_t packetNumber; + uint64_t detSpec1; + uint64_t timestamp; + uint16_t modId; + uint16_t row; + uint16_t column; + uint16_t detSpec2; + uint32_t detSpec3; + uint16_t detSpec4; + uint8_t detType; + uint8_t version; + } sls_detector_header; + + .. table:: <---------------------------------------------------- 8 bytes per row ---------------------------------------------> :align: center :widths: 30,30,30,15,15 @@ -63,6 +82,8 @@ Description * **version**: current version of the detector header (0x2). +.. _detector enum: + Detector Enum -------------- diff --git a/_sources/zmqjsonheaderformat.rst.txt b/_sources/zmqjsonheaderformat.rst.txt new file mode 100644 index 0000000..c898f97 --- /dev/null +++ b/_sources/zmqjsonheaderformat.rst.txt @@ -0,0 +1,137 @@ +ZMQ: Json Header Format +======================== + + +**Change in field names from slsDetectorPackage v6.x.x to v7.0.0** + +* detSpec1 <- bunchId +* detSpec2 <- reserved +* detSpec3 <- debug +* detSpec4 <- roundRNumber + + +**Format** + + .. code-block:: bash + + { + "jsonversion": unsigned int, + "bitmode": unsigned int, + "fileIndex": unsigned long int, + "detshape": [ + unsigned int, + unsigned int + ], + "shape": [ + unsigned int, + unsigned int + ], + "size": unsigned int, + "acqIndex": unsigned long int, + "frameIndex": unsigned long int, + "progress": double, + "fname": string, + "data": unsigned int, + "completeImage": unsigned int, + + "frameNumber": unsigned long long int, + "expLength": unsigned int, + "packetNumber": unsigned int, + "detSpec1": unsigned long int, + "timestamp": unsigned long int, + "modId": unsigned int, + "row": unsigned int, + "column": unsigned int, + "detSpec2": unsigned int, + "detSpec3": unsigned int, + "detSpec4": unsigned int, + "detType": unsigned int, + "version": unsigned int, + + "flipRows": unsigned int, + "quad": unsigned int, + "addJsonHeader": { + string : string + } + } + + +--------------+----------------------------------------------+ + | Field | Description | + +--------------+----------------------------------------------+ + | jsonversion | Version of the json header. | + | | Value at 4 for v6.x.x and v7.x.x | + +--------------+----------------------------------------------+ + | bitmode | Bits per pixel [4|8|16|32] | + +--------------+----------------------------------------------+ + | fileIndex | Current file acquisition index | + +--------------+----------------------------------------------+ + | detshape | Geometry of the entire detector | + +--------------+----------------------------------------------+ + | shape | Geometry of the current port streamed out | + +--------------+----------------------------------------------+ + | size | Size of image of current port in bytesout | + +--------------+----------------------------------------------+ + | acqIndex | Frame number from the detector (redundant) | + +--------------+----------------------------------------------+ + | frameIndex | Frame number of current acquisition | + | | (Starting at 0) | + +--------------+----------------------------------------------+ + | progress | Progress of current acquisition in % | + +--------------+----------------------------------------------+ + | fname | Current file name | + +--------------+----------------------------------------------+ + | data | 1 if there is data following | + | | 0 if dummy header | + +--------------+----------------------------------------------+ + | completeImage| 1 if no missing packets for this frame | + | | in this port, else 0 | + +--------------+----------------------------------------------+ + | frameNumber | Frame number | + | | [From detector udp header] | + +--------------+----------------------------------------------+ + | expLength | subframe number (32 bit eiger) | + | | or real time exposure time in 100ns (others) | + | | [From detector udp header] | + +--------------+----------------------------------------------+ + | packetNumber | Number of packets caught for that frame | + +--------------+----------------------------------------------+ + | detSpec1 | See :ref:`here` | + | | [From detector udp header] | + +--------------+----------------------------------------------+ + | timestamp | Timestamp with 10 MHz clock | + | | [From detector udp header] | + +--------------+----------------------------------------------+ + | modId | Module Id | + | | [From detector udp header] | + +--------------+----------------------------------------------+ + | row | Row number in detector | + | | [From detector udp header] | + +--------------+----------------------------------------------+ + | column | Column number in detector | + | | [From detector udp header] | + +--------------+----------------------------------------------+ + | detSpec2 | See :ref:`here` | + | | [From detector udp header] | + +--------------+----------------------------------------------+ + | detSpec3 | See :ref:`here` | + | | [From detector udp header] | + +--------------+----------------------------------------------+ + | detSpec4 | See :ref:`here` | + | | [From detector udp header] | + +--------------+----------------------------------------------+ + | detType | Detector type enum | + | detSpec3 | See :ref:`Detector enum` | + | | [From detector udp header] | + +--------------+----------------------------------------------+ + | version | Detector header version. At 2 | + | | [From detector udp header] | + +--------------+----------------------------------------------+ + | flipRows | 1 if rows should be flipped. | + | | Usually for Eiger bottom. | + +--------------+----------------------------------------------+ + | quad | 1 if its an Eiger quad. | + +--------------+----------------------------------------------+ + | addJsonHeader| Optional custom parameters that is required | + | | for processing code. | + +--------------+----------------------------------------------+ + diff --git a/binaryfileformat.html b/binaryfileformat.html new file mode 100644 index 0000000..1cab5f5 --- /dev/null +++ b/binaryfileformat.html @@ -0,0 +1,611 @@ + + + + + + + Binary File Format — slsDetectorPackage documentation + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + +
      +
      +
      + +
      +
      +
      +
      + +
      +

      Binary File Format

      +

      This is the default file format that can be configured using command fformat.

      +
      +
      sls_detector_put fformat binary
      +
      +
      +
      +
      +

      Master File

      + +
      +
      +

      Data File

      +
        +
      • File Name: [fpath]/[fname]_dx_fy_[findex].raw Details here

      • +
      • It store multiple frames sequentially, with total number of frames determined by rx_framesperfile parameter.

      • +
      • Each frame includes a **sls_receiver_header** structure, followed by the actual frame data.

      • +
      +
      +
      +

      JSON Master File Examples

      +
      +

      Eiger

      +
      {
      +    "Version": 7.2,
      +    "Timestamp": "Wed Nov 13 15:46:30 2024",
      +    "Detector Type": "Eiger",
      +    "Timing Mode": "auto",
      +    "Geometry": {
      +        "x": 2,
      +        "y": 1
      +    },
      +    "Image Size in bytes": 262144,
      +    "Pixels": {
      +        "x": 512,
      +        "y": 256
      +    },
      +    "Max Frames Per File": 10000,
      +    "Frame Discard Policy": "nodiscard",
      +    "Frame Padding": 1,
      +    "Scan Parameters": "[disabled]",
      +    "Total Frames": 1,
      +    "Receiver Roi": {
      +        "xmin": 4294967295,
      +        "xmax": 4294967295,
      +        "ymin": 4294967295,
      +        "ymax": 4294967295
      +    },
      +    "Dynamic Range": 16,
      +    "Ten Giga": 0,
      +    "Exptime": "1s",
      +    "Period": "1s",
      +    "Threshold Energy": -1,
      +    "Sub Exptime": "2.62144ms",
      +    "Sub Period": "2.62144ms",
      +    "Quad": 0,
      +    "Number of rows": 256,
      +    "Rate Corrections": "[0]",
      +    "Frames in File": 1,
      +    "Frame Header Format": {
      +        "Frame Number": "8 bytes",
      +        "SubFrame Number/ExpLength": "4 bytes",
      +        "Packet Number": "4 bytes",
      +        "Bunch ID": "8 bytes",
      +        "Timestamp": "8 bytes",
      +        "Module Id": "2 bytes",
      +        "Row": "2 bytes",
      +        "Column": "2 bytes",
      +        "Reserved": "2 bytes",
      +        "Debug": "4 bytes",
      +        "Round Robin Number": "2 bytes",
      +        "Detector Type": "1 byte",
      +        "Header Version": "1 byte",
      +        "Packets Caught Mask": "64 bytes"
      +    }
      +}
      +
      +
      +
      +
      +

      Jungfrau

      +
      {
      +    "Version": 7.2,
      +    "Timestamp": "Wed Nov 13 13:03:53 2024",
      +    "Detector Type": "Jungfrau",
      +    "Timing Mode": "auto",
      +    "Geometry": {
      +        "x": 1,
      +        "y": 1
      +    },
      +    "Image Size in bytes": 1048576,
      +    "Pixels": {
      +        "x": 1024,
      +        "y": 512
      +    },
      +    "Max Frames Per File": 10000,
      +    "Frame Discard Policy": "nodiscard",
      +    "Frame Padding": 1,
      +    "Scan Parameters": "[disabled]",
      +    "Total Frames": 1000,
      +    "Receiver Roi": {
      +        "xmin": 4294967295,
      +        "xmax": 4294967295,
      +        "ymin": 4294967295,
      +        "ymax": 4294967295
      +    },
      +    "Exptime": "10us",
      +    "Period": "2ms",
      +    "Number of UDP Interfaces": 1,
      +    "Number of rows": 512,
      +    "Frames in File": 10,
      +    "Frame Header Format": {
      +        "Frame Number": "8 bytes",
      +        "SubFrame Number/ExpLength": "4 bytes",
      +        "Packet Number": "4 bytes",
      +        "Bunch ID": "8 bytes",
      +        "Timestamp": "8 bytes",
      +        "Module Id": "2 bytes",
      +        "Row": "2 bytes",
      +        "Column": "2 bytes",
      +        "Reserved": "2 bytes",
      +        "Debug": "4 bytes",
      +        "Round Robin Number": "2 bytes",
      +        "Detector Type": "1 byte",
      +        "Header Version": "1 byte",
      +        "Packets Caught Mask": "64 bytes"
      +    }
      +}
      +
      +
      +
      +
      +

      Gotthard2

      +
      {
      +    "Version": 7.2,
      +    "Timestamp": "Wed Nov 13 14:18:17 2024",
      +    "Detector Type": "Gotthard2",
      +    "Timing Mode": "auto",
      +    "Geometry": {
      +        "x": 1,
      +        "y": 1
      +    },
      +    "Image Size in bytes": 2560,
      +    "Pixels": {
      +        "x": 1280,
      +        "y": 1
      +    },
      +    "Max Frames Per File": 20000,
      +    "Frame Discard Policy": "nodiscard",
      +    "Frame Padding": 1,
      +    "Scan Parameters": "[disabled]",
      +    "Total Frames": 10,
      +    "Receiver Roi": {
      +        "xmin": 4294967295,
      +        "xmax": 4294967295,
      +        "ymin": 4294967295,
      +        "ymax": 4294967295
      +    },
      +    "Exptime": "0ns",
      +    "Period": "0ns",
      +    "Burst Mode": "burst_internal",
      +    "Frames in File": 10,
      +    "Frame Header Format": {
      +        "Frame Number": "8 bytes",
      +        "SubFrame Number/ExpLength": "4 bytes",
      +        "Packet Number": "4 bytes",
      +        "Bunch ID": "8 bytes",
      +        "Timestamp": "8 bytes",
      +        "Module Id": "2 bytes",
      +        "Row": "2 bytes",
      +        "Column": "2 bytes",
      +        "Reserved": "2 bytes",
      +        "Debug": "4 bytes",
      +        "Round Robin Number": "2 bytes",
      +        "Detector Type": "1 byte",
      +        "Header Version": "1 byte",
      +        "Packets Caught Mask": "64 bytes"
      +    }
      +}
      +
      +
      +
      +
      +

      Mythen3

      +
      {
      +    "Version": 7.2,
      +    "Timestamp": "Wed Nov 13 14:39:14 2024",
      +    "Detector Type": "Mythen3",
      +    "Timing Mode": "auto",
      +    "Geometry": {
      +        "x": 1,
      +        "y": 1
      +    },
      +    "Image Size in bytes": 15360,
      +    "Pixels": {
      +        "x": 3840,
      +        "y": 1
      +    },
      +    "Max Frames Per File": 10000,
      +    "Frame Discard Policy": "nodiscard",
      +    "Frame Padding": 1,
      +    "Scan Parameters": "[disabled]",
      +    "Total Frames": 1,
      +    "Receiver Roi": {
      +        "xmin": 4294967295,
      +        "xmax": 4294967295,
      +        "ymin": 4294967295,
      +        "ymax": 4294967295
      +    },
      +    "Dynamic Range": 32,
      +    "Ten Giga": 1,
      +    "Period": "2ms",
      +    "Counter Mask": "0x7",
      +    "Exptime1": "0.1s",
      +    "Exptime2": "0.1s",
      +    "Exptime3": "0.1s",
      +    "GateDelay1": "0ns",
      +    "GateDelay2": "0ns",
      +    "GateDelay3": "0ns",
      +    "Gates": 1,
      +    "Threshold Energies": "[-1, -1, -1]",
      +    "Frames in File": 1,
      +    "Frame Header Format": {
      +        "Frame Number": "8 bytes",
      +        "SubFrame Number/ExpLength": "4 bytes",
      +        "Packet Number": "4 bytes",
      +        "Bunch ID": "8 bytes",
      +        "Timestamp": "8 bytes",
      +        "Module Id": "2 bytes",
      +        "Row": "2 bytes",
      +        "Column": "2 bytes",
      +        "Reserved": "2 bytes",
      +        "Debug": "4 bytes",
      +        "Round Robin Number": "2 bytes",
      +        "Detector Type": "1 byte",
      +        "Header Version": "1 byte",
      +        "Packets Caught Mask": "64 bytes"
      +    }
      +}
      +
      +
      +
      +
      +

      Moench

      +
      {
      +    "Version": 7.2,
      +    "Timestamp": "Wed Nov 13 14:41:32 2024",
      +    "Detector Type": "Moench",
      +    "Timing Mode": "auto",
      +    "Geometry": {
      +        "x": 1,
      +        "y": 1
      +    },
      +    "Image Size in bytes": 320000,
      +    "Pixels": {
      +        "x": 400,
      +        "y": 400
      +    },
      +    "Max Frames Per File": 100000,
      +    "Frame Discard Policy": "discardpartial",
      +    "Frame Padding": 1,
      +    "Scan Parameters": "[disabled]",
      +    "Total Frames": 1,
      +    "Receiver Roi": {
      +        "xmin": 4294967295,
      +        "xmax": 4294967295,
      +        "ymin": 4294967295,
      +        "ymax": 4294967295
      +    },
      +    "Exptime": "10us",
      +    "Period": "2ms",
      +    "Number of UDP Interfaces": 1,
      +    "Number of rows": 400,
      +    "Frames in File": 1,
      +    "Frame Header Format": {
      +        "Frame Number": "8 bytes",
      +        "SubFrame Number/ExpLength": "4 bytes",
      +        "Packet Number": "4 bytes",
      +        "Bunch ID": "8 bytes",
      +        "Timestamp": "8 bytes",
      +        "Module Id": "2 bytes",
      +        "Row": "2 bytes",
      +        "Column": "2 bytes",
      +        "Reserved": "2 bytes",
      +        "Debug": "4 bytes",
      +        "Round Robin Number": "2 bytes",
      +        "Detector Type": "1 byte",
      +        "Header Version": "1 byte",
      +        "Packets Caught Mask": "64 bytes"
      +    }
      +}
      +
      +
      +
      +
      +

      Gotthard I

      +
      {
      +    "Version": 7.2,
      +    "Timestamp": "Wed Nov 13 15:16:19 2024",
      +    "Detector Type": "Gotthard",
      +    "Timing Mode": "auto",
      +    "Geometry": {
      +        "x": 1,
      +        "y": 1
      +    },
      +    "Image Size in bytes": 2560,
      +    "Pixels": {
      +        "x": 1280,
      +        "y": 1
      +    },
      +    "Max Frames Per File": 20000,
      +    "Frame Discard Policy": "nodiscard",
      +    "Frame Padding": 1,
      +    "Scan Parameters": "[disabled]",
      +    "Total Frames": 1,
      +    "Receiver Roi": {
      +        "xmin": 4294967295,
      +        "xmax": 4294967295,
      +        "ymin": 4294967295,
      +        "ymax": 4294967295
      +    },
      +    "Exptime": "1.00001ms",
      +    "Period": "1s",
      +    "Detector Roi": {
      +        "xmin": 4294967295,
      +        "xmax": 4294967295
      +    },
      +    "Frames in File": 1,
      +    "Frame Header Format": {
      +        "Frame Number": "8 bytes",
      +        "SubFrame Number/ExpLength": "4 bytes",
      +        "Packet Number": "4 bytes",
      +        "Bunch ID": "8 bytes",
      +        "Timestamp": "8 bytes",
      +        "Module Id": "2 bytes",
      +        "Row": "2 bytes",
      +        "Column": "2 bytes",
      +        "Reserved": "2 bytes",
      +        "Debug": "4 bytes",
      +        "Round Robin Number": "2 bytes",
      +        "Detector Type": "1 byte",
      +        "Header Version": "1 byte",
      +        "Packets Caught Mask": "64 bytes"
      +    }
      +}
      +
      +
      +
      +
      +

      Chip Test Board

      +
      {
      +    "Version": 7.2,
      +    "Timestamp": "Wed Nov 13 15:32:59 2024",
      +    "Detector Type": "ChipTestBoard",
      +    "Timing Mode": "auto",
      +    "Geometry": {
      +        "x": 1,
      +        "y": 1
      +    },
      +    "Image Size in bytes": 48018,
      +    "Pixels": {
      +        "x": 3,
      +        "y": 1
      +    },
      +    "Max Frames Per File": 20000,
      +    "Frame Discard Policy": "nodiscard",
      +    "Frame Padding": 1,
      +    "Scan Parameters": "[disabled]",
      +    "Total Frames": 1,
      +    "Receiver Roi": {
      +        "xmin": 4294967295,
      +        "xmax": 4294967295,
      +        "ymin": 4294967295,
      +        "ymax": 4294967295
      +    },
      +    "Exptime": "0ns",
      +    "Period": "0.18s",
      +    "Ten Giga": 0,
      +    "ADC Mask": "0x2202",
      +    "Analog Flag": 1,
      +    "Analog Samples": 8003,
      +    "Digital Flag": 0,
      +    "Digital Samples": 1000,
      +    "Dbit Offset": 0,
      +    "Dbit Bitset": 0,
      +    "Transceiver Mask": "0x3",
      +    "Transceiver Flag": 0,
      +    "Transceiver Samples": 1,
      +    "Frames in File": 1,
      +    "Frame Header Format": {
      +        "Frame Number": "8 bytes",
      +        "SubFrame Number/ExpLength": "4 bytes",
      +        "Packet Number": "4 bytes",
      +        "Bunch ID": "8 bytes",
      +        "Timestamp": "8 bytes",
      +        "Module Id": "2 bytes",
      +        "Row": "2 bytes",
      +        "Column": "2 bytes",
      +        "Reserved": "2 bytes",
      +        "Debug": "4 bytes",
      +        "Round Robin Number": "2 bytes",
      +        "Detector Type": "1 byte",
      +        "Header Version": "1 byte",
      +        "Packets Caught Mask": "64 bytes"
      +    }
      +}
      +
      +
      +
      +
      +
      + + +
      +
      + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/commandline.html b/commandline.html index 771927b..39da3fa 100644 --- a/commandline.html +++ b/commandline.html @@ -1,13 +1,15 @@ - + Command line interface — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
      - 8.0.2 + 9.0.0

  • Quick Start Guide
  • @@ -106,6 +108,19 @@
  • Receivers
  • slsReceiver/ slsMultiReceiver
  • +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    + + + + + + + \ No newline at end of file diff --git a/dependencies.html b/dependencies.html index a75a002..a7366d5 100644 --- a/dependencies.html +++ b/dependencies.html @@ -1,13 +1,15 @@ - + Dependencies — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
    - 8.0.2 + 9.0.0
    @@ -109,6 +111,19 @@
  • Receivers
  • slsReceiver/ slsMultiReceiver
  • +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    diff --git a/detector.html b/detector.html index 9335820..d812025 100644 --- a/detector.html +++ b/detector.html @@ -1,13 +1,15 @@ - + Detector — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
    - 8.0.2 + 9.0.0
    @@ -100,6 +102,19 @@
  • Receivers
  • slsReceiver/ slsMultiReceiver
  • +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    • Troubleshooting
    • @@ -161,10 +176,24 @@

      Detector -
      -void freeSharedMemory()
      -

      Free the shared memory of this detector and all modules belonging to it

      -
      +
      +Detector(const Detector &other) = delete
      +
      + +
      +
      +Detector &operator=(const Detector &other) = delete
      +
      + +
      +
      +Detector(Detector &&other) noexcept
      +
      + +
      +
      +Detector &operator=(Detector &&other) noexcept
      +
      @@ -209,8 +238,7 @@

      Detector
      std::string getPackageVersion() const
      -

      package git branch

      -

      +
      @@ -262,7 +290,7 @@

      Detector
      Result<defs::detectorType> getDetectorType(Positions pos = {}) const
      -

      Options: EIGER, JUNGFRAU, GOTTHARD, MOENCH, MYTHEN3, GOTTHARD2, CHIPTESTBOARD

      +

      Options: EIGER, JUNGFRAU, GOTTHARD, MOENCH, MYTHEN3, GOTTHARD2, CHIPTESTBOARD, XILINX_CHIPTESTBOARD

      @@ -564,7 +592,7 @@

      Detector
      Result<ns> getExptime(Positions pos = {}) const
      -

      [Gotthard][Jungfrau][Moench][Eiger][CTB][Gotthard2]

      +

      [Gotthard][Jungfrau][Moench][Eiger][CTB][Xilinx CTB][Gotthard2]

      [Mythen3] use function with gate index

      @@ -572,7 +600,7 @@

      Detector
      void setExptime(ns t, Positions pos = {})
      -

      [Gotthard][Jungfrau][Moench][Eiger][CTB][Gotthard2]

      +

      [Gotthard][Jungfrau][Moench][Eiger][CTB][Xilinx CTB][Gotthard2]

      [Mythen3] sets exptime for all gate signals. To specify gate index, use function with gate index

      @@ -590,37 +618,37 @@

      Detector
      Result<ns> getDelayAfterTrigger(Positions pos = {}) const
      -

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2]

      +

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2][Xilinx CTB]

      void setDelayAfterTrigger(ns value, Positions pos = {})
      -

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2]

      +

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2][Xilinx CTB]

      Result<int64_t> getNumberOfFramesLeft(Positions pos = {}) const
      -

      [Gotthard][Jungfrau][Moench][CTB][Mythen3] [Gotthard2] only in continuous auto mode

      +

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Xilinx CTB] [Gotthard2] only in continuous auto mode

      Result<int64_t> getNumberOfTriggersLeft(Positions pos = {}) const
      -

      [Gotthard][Jungfrau][Moench][CTB][Mythen3] Only when external trigger used

      +

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Xilinx CTB] Only when external trigger used

      Result<ns> getPeriodLeft(Positions pos = {}) const
      -

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] [Gotthard2] only in continuous mode

      +

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2][Xilinx CTB] [Gotthard2] only in continuous mode

      Result<ns> getDelayAfterTriggerLeft(Positions pos = {}) const
      -

      [Gotthard][Jungfrau][Moench][CTB][Mythen3] [Gotthard2] only in continuous mode

      +

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Xilinx CTB] [Gotthard2] only in continuous mode

      @@ -634,7 +662,7 @@

      Detector @@ -651,10 +679,10 @@

      Detector
      void setTimingMode(defs::timingMode value, Positions pos = {})
      -

      [Gotthard][Jungfrau][Moench][Gotthard][CTB][Gotthard2] Options: AUTO_TIMING, TRIGGER_EXPOSURE

      +

      [Gotthard][Jungfrau][Moench][Gotthard][CTB][Gotthard2][Xilinx CTB] Options: AUTO_TIMING, TRIGGER_EXPOSURE

      [Mythen3] Options: AUTO_TIMING, TRIGGER_EXPOSURE, GATED, TRIGGER_GATED

      -[Eiger] Options: AUTO_TIMING, TRIGGER_EXPOSURE, GATED, BURST_TRIGGER

      + [Eiger] Options: AUTO_TIMING, TRIGGER_EXPOSURE, GATED, BURST_TRIGGER

      @@ -666,13 +694,13 @@

      Detector
      Result<defs::speedLevel> getReadoutSpeed(Positions pos = {}) const
      -

      [Eiger][Jungfrau][Moench][Gotthard2]

      +

      [Eiger][Jungfrau][Moench][Gotthard2][Mythen3]

      void setReadoutSpeed(defs::speedLevel value, Positions pos = {})
      -

      [Eiger][Jungfrau][Moench][Gotthard2] [Jungfrau] Options: FULL_SPEED, HALF_SPEED (Default), QUARTER_SPEED

      +

      [Eiger][Jungfrau][Moench][Gotthard2] [Jungfrau][Mythen3] Options: FULL_SPEED, HALF_SPEED (Default), QUARTER_SPEED

      [Moench] Options: FULL_SPEED (Default)

      [Eiger] Options: FULL_SPEED (Default), HALF_SPEED, QUARTER_SPEED

      [Gotthard2] Options: G2_108MHZ (Default), G2_144MHZ

      @@ -772,7 +800,9 @@

      Detector
      void setClockPhase(int clkIndex, int value, Positions pos = {})
      -

      [Mythen3][Gotthard2] absolute phase shift

      +

      [Mythen3][Gotthard2] absolute phase shift

      +

      [Gotthard2] clkIndex: 0-5, [Mythen3] clkIndex 0 only

      +

      @@ -790,7 +820,9 @@

      Detector
      void setClockPhaseinDegrees(int clkIndex, int value, Positions pos = {})
      -

      [Mythen3][Gotthard2]

      +

      [Mythen3][Gotthard2]

      +

      [Gotthard2] clkIndex: 0-5, [Mythen3] clkIndex 0 only

      +

      @@ -802,7 +834,9 @@

      Detector
      void setClockDivider(int clkIndex, int value, Positions pos = {})
      -

      [Mythen3][Gotthard2] Must be greater than 1.

      +

      [Mythen3][Gotthard2] Must be greater than 1.

      +

      [Gotthard2] clkIndex: 0-5, [Mythen3] clkIndex 0 only

      +

      @@ -819,17 +853,18 @@

      Detector
      Result<bool> getPowerChip(Positions pos = {}) const
      -

      [Jungfrau][Moench][Mythen3][Gotthard2]

      +

      [Jungfrau][Moench][Mythen3][Gotthard2][Xilinx Ctb]

      void setPowerChip(bool on, Positions pos = {})
      -

      [Jungfrau][Moench][Mythen3][Gotthard2] Power the chip.

      +

      [Jungfrau][Moench][Mythen3][Gotthard2][Xilinx Ctb] Power the chip.

      Default is disabled.

      [Jungfrau][Moench] Default is disabled. Get will return power status. Can be off if temperature event occured (temperature over temp_threshold with temp_control enabled. Will configure chip (only chip v1.1)

      [Mythen3][Gotthard2] Default is 1. If module not connected or wrong module, powerchip will fail.

      -

      + +[Xilinx CTB] Default is 0. Also configures chip if powered on.

      @@ -855,7 +890,7 @@

      Detector
      Result<int> getTemperature(defs::dacIndex index, Positions pos = {}) const
      -

      (Degrees) [Mythen3][Gotthard2] Options: TEMPERATURE_FPGA [Gotthard] Options: TEMPERATURE_ADC, TEMPERATURE_FPGA

      +

      (Degrees) [Mythen3][Gotthard2][Xilinx Ctb] Options: TEMPERATURE_FPGA [Gotthard] Options: TEMPERATURE_ADC, TEMPERATURE_FPGA

      [Jungfrau][Moench] Options: TEMPERATURE_ADC, TEMPERATURE_FPGA

      [Eiger] Options: TEMPERATURE_FPGA, TEMPERATURE_FPGAEXT, TEMPERATURE_10GE, TEMPERATURE_DCDC, TEMPERATURE_SODL, TEMPERATURE_SODR, TEMPERATURE_FPGA2, TEMPERATURE_FPGA3

      [CTB] Options: SLOW_ADC_TEMP

      @@ -956,7 +991,7 @@

      Detector
      void setFilterResistor(int value, Positions pos = {})
      -

      [Gotthard2][Jungfrau] Set filter resistor. Increasing values for increasing resistance.

      +

      [Gotthard2][Jungfrau] Set

      filter resistor. Increasing values for increasing resistance.

      [Gotthard2] Options: [0|1|2|3]. Default is 0.

      [Jungfrau] Options: [0|1]. Default is 1.

      @@ -1091,13 +1126,13 @@

      Detector
      Result<uint64_t> getNextFrameNumber(Positions pos = {}) const
      -

      [Eiger][Jungfrau][Moench][CTB]

      +

      [Eiger][Jungfrau][Moench][CTB][Xilinx CTB][Gotthard2]

      void setNextFrameNumber(uint64_t value, Positions pos = {})
      -

      [Eiger][Jungfrau][Moench][CTB] Stopping acquisition might result in different frame numbers for different modules.

      +

      [Eiger][Jungfrau][Moench][CTB][Xilinx CTB][Gotthard2] Stopping acquisition might result in different frame numbers for different modules. So, after stopping, next frame number (max + 1) is set for all the modules afterwards.

      @@ -1412,7 +1447,7 @@

      Detector
      void setTransmissionDelay(int step)
      -

      [Eiger][Jungfrau][Moench][Mythen3] Set transmission delay for all modules in the detector using the step size provided.Sets up

      +

      [Eiger][Jungfrau][Moench][Mythen3] Set

      transmission delay for all modules in the detector using the step size provided.Sets up

      \t\t[Eiger] txdelay_left to (2 * mod_index * n_delay),

      \t\t[Eiger] txdelay_right to ((2 * mod_index + 1) * n_delay) and

      \t\t[Eiger] txdelay_frame to (2 *num_modules * n_delay)

      @@ -1605,7 +1640,7 @@

      Detector
      void setFilePath(const std::string &fpath, Positions pos = {})
      -

      Default is “/”If path does not exist, it will try to create it

      +

      Default is “/”. If path does not exist and fwrite enabled, it will try to create it at start of acquisition.

      @@ -1638,7 +1673,7 @@

      Detector
      void setFileWrite(bool value, Positions pos = {})
      -

      default enabled

      +

      default disabled

      @@ -1748,21 +1783,6 @@

      Detector -
      -Result<IpAddr> getRxZmqIP(Positions pos = {}) const
      -

      - -
      -
      -void setRxZmqIP(const IpAddr ip, Positions pos = {})
      -

      Zmq Ip Address from which data is to be streamed out of the receiver.

      -

      Also restarts receiver zmq streaming if enabled.

      -

      Default is from rx_hostname.

      -

      Modified only when using an intermediate process between receiver.

      -

      -
      -
      Result<uint16_t> getClientZmqPort(Positions pos = {}) const
      @@ -2004,7 +2024,7 @@

      Detector
      void setThresholdTemperature(int temp, Positions pos = {})
      -

      [Jungfrau][Moench]Set threshold temperature in degrees. If temperature crosses threshold temperature and temperature control is enabled (default is disabled), power to chip will be switched off and temperature event will be set.

      +

      [Jungfrau][Moench]Set

      threshold temperature in degrees. If temperature crosses threshold temperature and temperature control is enabled (default is disabled), power to chip will be switched off and temperature event will be set.

      To power on chip again, temperature has to be less than threshold temperature and temperature event has to be cleared.

      @@ -2148,6 +2168,30 @@

      Detector +
      +Result<defs::timingInfoDecoder> getTimingInfoDecoder(Positions pos = {}) const
      +

      [Jungfrau]

      +
      + +
      +
      +void setTimingInfoDecoder(defs::timingInfoDecoder value, Positions pos = {})
      +

      [Jungfrau] Advanced Command!

      +
      + +
      +
      +Result<defs::collectionMode> getCollectionMode(Positions pos = {}) const
      +

      [Jungfrau]

      +
      + +
      +
      +void setCollectionMode(defs::collectionMode value, Positions pos = {})
      +

      [Jungfrau]

      +
      +

    Gotthard Specific

    @@ -2530,13 +2574,13 @@

    Detector
    Result<int> getPower(defs::dacIndex index, Positions pos = {}) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    void setPower(defs::dacIndex index, int value, Positions pos = {})
    -

    [CTB] mV [Ctb] Options: V_LIMIT, V_POWER_A, V_POWER_B, V_POWER_C, V_POWER_D, V_POWER_IO, V_POWER_CHIP

    +

    [CTB][Xilinx CTB] mV [Ctb][Xilinx CTB] Options: V_LIMIT, V_POWER_A, V_POWER_B, V_POWER_C, V_POWER_D, V_POWER_IO, V_POWER_CHIP

    @@ -2580,13 +2624,13 @@

    Detector
    Result<uint32_t> getTransceiverEnableMask(Positions pos = {}) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    void setTransceiverEnableMask(uint32_t mask, Positions pos = {})
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    @@ -2604,25 +2648,25 @@

    Detector
    Result<int> getNumberOfTransceiverSamples(Positions pos = {}) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    void setNumberOfTransceiverSamples(int value, Positions pos = {})
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    Result<defs::readoutMode> getReadoutMode(Positions pos = {}) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    void setReadoutMode(defs::readoutMode value, Positions pos = {})
    -

    [CTB] Options: ANALOG_ONLY (default), DIGITAL_ONLY, ANALOG_AND_DIGITAL, TRANSCEIVER_ONLY, DIGITAL_AND_TRANSCEIVER

    +

    [CTB] Options: ANALOG_ONLY (default), DIGITAL_ONLY, ANALOG_AND_DIGITAL, TRANSCEIVER_ONLY, DIGITAL_AND_TRANSCEIVER [Xilinx CTB] Options: TRANSCEIVER_ONLY (default)

    @@ -2652,7 +2696,7 @@

    Detector
    Result<int> getSlowADC(defs::dacIndex index, Positions pos = {}) const
    -

    [CTB] Options: SLOW_ADC0 - SLOW_ADC7 in uV

    +

    [CTB][Xilinx CTB] Options: SLOW_ADC0 - SLOW_ADC7 in uV

    @@ -2726,149 +2770,151 @@

    Detector
    void setDacNames(const std::vector<std::string> names)
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    std::vector<std::string> getDacNames() const
    -
    +

    [CTB][Xilinx CTB]

    +
    defs::dacIndex getDacIndex(const std::string &name) const
    -
    +

    [CTB][Xilinx CTB]

    +
    void setDacName(const defs::dacIndex i, const std::string &name)
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    std::string getDacName(const defs::dacIndex i) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    void setAdcNames(const std::vector<std::string> names)
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    std::vector<std::string> getAdcNames() const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    int getAdcIndex(const std::string &name) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    void setAdcName(const int i, const std::string &name)
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    std::string getAdcName(const int i) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    void setSignalNames(const std::vector<std::string> names)
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    std::vector<std::string> getSignalNames() const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    int getSignalIndex(const std::string &name) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    void setSignalName(const int i, const std::string &name)
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    std::string getSignalName(const int i) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    void setPowerNames(const std::vector<std::string> names)
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    std::vector<std::string> getPowerNames() const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    defs::dacIndex getPowerIndex(const std::string &name) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    void setPowerName(const defs::dacIndex i, const std::string &name)
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    std::string getPowerName(const defs::dacIndex i) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    void setSlowADCNames(const std::vector<std::string> names)
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    std::vector<std::string> getSlowADCNames() const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    defs::dacIndex getSlowADCIndex(const std::string &name) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    void setSlowADCName(const defs::dacIndex i, const std::string &name)
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    std::string getSlowADCName(const defs::dacIndex i) const
    -

    [CTB]

    +

    [CTB][Xilinx CTB]

    @@ -2877,7 +2923,7 @@

    Detector
    Result<std::string> getPatterFileName(Positions pos = {}) const
    -

    [CTB][Mythen3] Gets the pattern file name including path of the last pattern uploaded.

    +

    [CTB][Mythen3][Xilinx CTB] Gets the pattern file name including path of the last pattern uploaded.

    Returns an empty if nothing was uploaded or via a server default file

    @@ -2885,19 +2931,19 @@

    Detector
    void setPattern(const std::string &fname, Positions pos = {})
    -

    [CTB][Mythen3] Loads ASCII pattern file directly to server (instead of executing line by line)

    +

    [CTB][Mythen3][Xilinx CTB] Loads ASCII pattern file directly to server (instead of executing line by line)

    void setPattern(const Pattern &pat, Positions pos = {})
    -

    [CTB][Mythen3] Loads pattern parameters structure directly to server

    +

    [CTB][Mythen3][Xilinx CTB] Loads pattern parameters structure directly to server

    void savePattern(const std::string &fname)
    -

    [CTB][Mythen3] [Ctb][Mythen3] Saves pattern to file (ascii).

    +

    [CTB][Mythen3][Xilinx CTB] Saves pattern to file (ascii).

    [Ctb] Also executes pattern.

    @@ -2923,19 +2969,19 @@

    Detector
    Result<uint64_t> getPatternWord(int addr, Positions pos = {})
    -

    [CTB][Mythen3] same as executing for ctb

    +

    [CTB][Mythen3][Xilinx CTB] same as executing for ctb

    void setPatternWord(int addr, uint64_t word, Positions pos = {})
    -

    [CTB] Caution: If word is -1 reads the addr (same as executing the pattern) [Mythen3]

    +

    [CTB][Xilinx CTB] Caution: If word is -1 reads the addr (same as executing the pattern) [Mythen3]

    Result<std::array<int, 2>> getPatternLoopAddresses(int level, Positions pos = {}) const
    -

    [CTB][Mythen3] Options: level: -1 (complete pattern) and 0-2 levels

    +

    [CTB][Mythen3][Xilinx CTB] Options: level: -1 (complete pattern) and 0-2 levels

    Returns

    array of start address and stop address

    @@ -2946,67 +2992,67 @@

    Detector
    void setPatternLoopAddresses(int level, int start, int stop, Positions pos = {})
    -

    [CTB][Mythen3] Options: level: -1 (complete pattern) and 0-2 levels

    +

    [CTB][Mythen3][Xilinx CTB] Options: level: -1 (complete pattern) and 0-2 levels

    Result<int> getPatternLoopCycles(int level, Positions pos = {}) const
    -

    [CTB][Mythen3] Options: level: -1 (complete pattern) and 0-2 levels

    +

    [CTB][Mythen3][Xilinx CTB] Options: level: -1 (complete pattern) and 0-2 levels

    void setPatternLoopCycles(int level, int n, Positions pos = {})
    -

    [CTB][Mythen3] n: 0-2, level: -1 (complete pattern) and 0-2 levels

    +

    [CTB][Mythen3][Xilinx CTB] n: 0-2, level: -1 (complete pattern) and 0-2 levels

    Result<int> getPatternWaitAddr(int level, Positions pos = {}) const
    -

    [CTB][Mythen3]

    +

    [CTB][Mythen3][Xilinx CTB]

    void setPatternWaitAddr(int level, int addr, Positions pos = {})
    -

    [CTB][Mythen3] Options: level 0-2

    +

    [CTB][Mythen3][Xilinx CTB] Options: level 0-2

    Result<uint64_t> getPatternWaitTime(int level, Positions pos = {}) const
    -

    [CTB][Mythen3]

    +

    [CTB][Mythen3][Xilinx CTB]

    void setPatternWaitTime(int level, uint64_t t, Positions pos = {})
    -

    [CTB][Mythen3] Options: level 0-2

    +

    [CTB][Mythen3][Xilinx CTB] Options: level 0-2

    Result<uint64_t> getPatternMask(Positions pos = {})
    -

    [CTB][Mythen3]

    +

    [CTB][Mythen3][Xilinx CTB]

    void setPatternMask(uint64_t mask, Positions pos = {})
    -

    [CTB][Mythen3] Selects the bits that will have a pattern mask applied to the selected patmask for every pattern.

    +

    [CTB][Mythen3][Xilinx CTB] Selects the bits that will have a pattern mask applied to the selected patmask for every pattern.

    Result<uint64_t> getPatternBitMask(Positions pos = {}) const
    -

    [CTB][Mythen3]

    +

    [CTB][Mythen3][Xilinx CTB]

    void setPatternBitMask(uint64_t mask, Positions pos = {})
    -

    [CTB][Mythen3] Sets the mask applied to every pattern to the selected bits

    +

    [CTB][Mythen3][Xilinx CTB] Sets the mask applied to every pattern to the selected bits

    @@ -3066,7 +3112,7 @@

    Detector
    void resetFPGA(Positions pos = {})
    -

    [Jungfrau][Moench][CTB] Advanced user Function!

    +

    [Jungfrau][Moench][CTB][Xilinx CTB] Advanced user Function!

    @@ -3088,7 +3134,7 @@

    Detector
    void rebootController(Positions pos = {})
    -

    [Jungfrau][Moench][Gotthard][CTB][Mythen3][Gotthard2] Advanced user Function!

    +

    [Jungfrau][Moench][Gotthard][CTB][Mythen3][Gotthard2][Xilinx CTB] Advanced user Function!

    @@ -3124,8 +3170,8 @@

    Detector -
    -void writeRegister(uint32_t addr, uint32_t val, Positions pos = {})
    +
    +void writeRegister(uint32_t addr, uint32_t val, bool validate = false, Positions pos = {})

    Advanced user Function!

    Goes to stop server. Hence, can be called while calling blocking

    acquire()

    .

    @@ -3134,14 +3180,14 @@

    Detector -
    -void setBit(uint32_t addr, int bitnr, Positions pos = {})
    +
    +void setBit(uint32_t addr, int bitnr, bool validate = false, Positions pos = {})

    Advanced user Function!

    -
    -void clearBit(uint32_t addr, int bitnr, Positions pos = {})
    +
    +void clearBit(uint32_t addr, int bitnr, bool validate = false, Positions pos = {})

    Advanced user Function!

    @@ -3250,19 +3296,19 @@

    Detector
    Result<int64_t> getNumberOfFramesFromStart(Positions pos = {}) const
    -

    [Jungfrau][Moench][Mythen3][CTB] [Gotthard2] only in continuous mode

    +

    [Jungfrau][Moench][Mythen3][CTB][Xilinx CTB] [Gotthard2] only in continuous mode

    Result<ns> getActualTime(Positions pos = {}) const
    -

    [Jungfrau][Moench][Mythen3][CTB] Get time from detector start [Gotthard2] not in burst and auto mode

    +

    [Jungfrau][Moench][Mythen3][CTB][Xilinx CTB] Get time from detector start [Gotthard2] not in burst and auto mode

    Result<ns> getMeasurementTime(Positions pos = {}) const
    -

    [Jungfrau][Moench][Mythen3][CTB] Get timestamp at a frame start [Gotthard2] not in burst and auto mode

    +

    [Jungfrau][Moench][Mythen3][CTB][Xilinx CTB] Get timestamp at a frame start [Gotthard2] not in burst and auto mode

    @@ -3271,6 +3317,15 @@

    Detector +

    Public Functions

    +
    +
    +void configureTransceiver(Positions pos = {})
    +

    [Xilinx Ctb]

    +
    +

    diff --git a/examples.html b/examples.html index 19958ff..fb11136 100644 --- a/examples.html +++ b/examples.html @@ -1,13 +1,15 @@ - + Examples — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
    - 8.0.2 + 9.0.0
    @@ -107,6 +109,19 @@
  • Receivers
  • slsReceiver/ slsMultiReceiver
  • +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

  • Ctb
  • Firmware Troubleshooting with blackfin +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

  • @@ -426,7 +441,7 @@

    Upgrade

    In case you have had issues in the past with programming via software:

    @@ -454,15 +469,15 @@

    Upgrade

    Ctb

    -
    -

    Download

    +
    +

    Download

    • detector server corresponding to package in slsDetectorPackage/serverBin

    • pof files

    -
    -

    Upgrade

    +
    +

    Upgrade

    Check firmware troubleshooting if you run into issues while programming firmware.

    Program from console
    # Always ensure that the client and server software are of the same release.
    diff --git a/genindex.html b/genindex.html
    index 29411be..83a595a 100644
    --- a/genindex.html
    +++ b/genindex.html
    @@ -1,12 +1,14 @@
     
    -
    +
     
       
       
       Index — slsDetectorPackage  documentation
    -      
    -      
    -      
    +      
    +      
    +      
    +
    +  
       
    @@ -34,7 +36,7 @@
                 slsDetectorPackage
               
                   
    - 8.0.2 + 9.0.0
    @@ -97,6 +99,19 @@
  • Receivers
  • slsReceiver/ slsMultiReceiver
  • +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

  • clkdiv (slsdet.Detector property)
  • - - +
      @@ -1237,7 +1264,7 @@

      M

  • maxclkphaseshift (slsdet.Detector property)
  • -
  • maxclkphaseshift [n_clock (0-5)] +
  • maxclkphaseshift [n_clock]
  • maxdbitphaseshift @@ -1311,10 +1338,12 @@

    P

  • parallel [0, 1]
  • -
  • parameters (slsdet.Detector property) -
  • -
  • parameters [fname] +
  • parameters + +
  • partialreset (slsdet.Detector property)
  • partialreset [0, 1] @@ -1337,18 +1366,24 @@

    P

  • patloop [0-6] [start addr] [stop addr]
  • -
  • patloop0 (slsdet.Detector property) -
  • -
  • patloop0 Depreciated command. Use patloop. -
  • -
  • patloop1 (slsdet.Detector property) -
  • -
  • patloop1 Depreciated command. Use patloop. +
  • patloop0 + +
  • +
  • patloop1 + +
  • +
  • patloop2 + +
  • patmask (slsdet.Detector property)
  • patmask [64 bit mask] @@ -1357,62 +1392,80 @@

    P

  • patnloop [0-6] [n_cycles]
  • -
  • patnloop0 (slsdet.Detector property) -
  • -
  • patnloop0 Depreciated command. Use patnloop. -
  • -
  • patnloop1 (slsdet.Detector property) -
  • -
  • patnloop1 Depreciated command. Use patnloop. +
  • patnloop0 + +
  • +
  • patnloop1 + +
  • +
  • patnloop2 + +
  • patsetbit (slsdet.Detector property)
  • patsetbit [64 bit mask]
  • pattern (slsdet.Detector property) -
  • - - + @@ -1454,6 +1537,10 @@

    Q

    +
    @@ -1463,107 +1550,219 @@

    R

    - + @@ -1572,6 +1771,10 @@

    S

    + -
    @@ -3103,98 +3372,226 @@

    S

    T

    + -

    U

    @@ -3202,38 +3599,92 @@

    V

    - + @@ -238,71 +253,71 @@

    Mythen3

    - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + @@ -316,9 +331,15 @@

    Mythen3

    - + + + + + + + @@ -340,41 +361,41 @@

    Mythen3

    - - - - + - + - + - + - + - + - + - + - + - + - - + + + + + @@ -468,7 +489,7 @@

    Gotthard2

    - + @@ -489,53 +510,59 @@

    Gotthard2

    + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + @@ -578,15 +605,21 @@

    Gotthard2

    - + + + + - + - + + + + @@ -913,162 +946,165 @@

    Moench

    moenchDetectorServer

    + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1258,85 +1294,88 @@

    Ctb

    - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1655,74 +1694,80 @@

    Jungfrau

    + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + @@ -1756,190 +1801,199 @@

    Jungfrau

    - + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2013,90 +2067,93 @@

    Gotthard

    + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/servers.html b/servers.html index 59456f4..be8a3b4 100644 --- a/servers.html +++ b/servers.html @@ -1,13 +1,15 @@ - + Getting Started — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
    - 8.0.2 + 9.0.0
    @@ -105,6 +107,19 @@
  • Receivers
  • slsReceiver/ slsMultiReceiver
  • +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    • Troubleshooting
    • diff --git a/serverupgrade.html b/serverupgrade.html index 06d7dda..fe50e9a 100644 --- a/serverupgrade.html +++ b/serverupgrade.html @@ -1,13 +1,15 @@ - + Upgrade — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
      - 8.0.2 + 9.0.0
    +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    • Troubleshooting
    • @@ -232,268 +244,6 @@

      Client Commands -

      ZMQ: Json Header Format

      -

      Change in field names from slsDetectorPackage v6.x.x to v7.0.0

      -
        -
      • detSpec1 <- bunchId

      • -
      • detSpec2 <- reserved

      • -
      • detSpec3 <- debug

      • -
      • detSpec4 <- roundRNumber

      • -
      -

      Format

      -
      -
      -
      {
      -    "jsonversion": unsigned int,
      -    "bitmode": unsigned int,
      -    "fileIndex": unsigned long int,
      -    "detshape": [
      -        unsigned int,
      -        unsigned int
      -    ],
      -    "shape": [
      -        unsigned int,
      -        unsigned int
      -    ],
      -    "size": unsigned int,
      -    "acqIndex": unsigned long int,
      -    "frameIndex": unsigned long int,
      -    "progress": double,
      -    "fname": string,
      -    "data": unsigned int,
      -    "completeImage": unsigned int,
      -
      -    "frameNumber": unsigned long long int,
      -    "expLength": unsigned int,
      -    "packetNumber": unsigned int,
      -    "detSpec1": unsigned long int,
      -    "timestamp": unsigned long int,
      -    "modId": unsigned int,
      -    "row": unsigned int,
      -    "column": unsigned int,
      -    "detSpec2": unsigned int,
      -    "detSpec3": unsigned int,
      -    "detSpec4": unsigned int,
      -    "detType": unsigned int,
      -    "version": unsigned int,
      -
      -    "flipRows": unsigned int,
      -    "quad": unsigned int,
      -    "addJsonHeader": {
      -        string : string
      -    }
      -}
      -
      -
      -
      -

    +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

  • Quick Start Guide
      @@ -327,9 +342,6 @@

      Welcome to slsDetectorPackage’s documentation!slsReceiver/ slsMultiReceiver @@ -337,6 +349,63 @@

      Welcome to slsDetectorPackage’s documentation! +

      Receiver Files

      +
      + +
      +

      Receiver ZMQ Stream

      + +
      +

      Troubleshooting

      + +
    • Using system installation on RHEL7

      +
      +
      yum install qt5-qtbase-devel.x86_64
      +yum install qt5-qtsvg-devel.x86_64
      +
      +
      +
    • -
    • -
      Using system installation on RHEL7
      yum install qt5-qtbase-devel.x86_64
      +
    • 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
       
      -
    • -
      +
    • -
    • -
      Using conda
      #Add channels for dependencies and our library
      +
    • Using conda

      +
      +
      #Add channels for dependencies and our library
       conda config --add channels conda-forge
       conda config --add channels slsdetectorgroup
       conda config --set channel_priority strict
      @@ -376,8 +401,7 @@ 

      Build slsDetectorGui (Qt5) -cbgj9

      -
    • -
      +
    • @@ -406,14 +430,18 @@

      Build this documentation

      Pybind and Zeromq

      -
      Pybind for Python
      +
      Pybind11 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 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.0)
      +
      * 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”.
      @@ -445,7 +473,7 @@

      Pybind and Zeromqv7.x.x and older:

      -
      zeromq must be installed and one can hint its location using
      +
      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
      diff --git a/masterfileattributes.html b/masterfileattributes.html new file mode 100644 index 0000000..2a4824d --- /dev/null +++ b/masterfileattributes.html @@ -0,0 +1,807 @@ + + + + + + + Master File Attributes — slsDetectorPackage documentation + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + +
      +
      +
      + +
      +
      +
      +
      + +
      +

      Master File Attributes

      +

      These attributes are the same in binary and HDF5 file, but vary depending on detector type.

      +
      +

      Eiger

      +
      +
      ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      Key

      Description

      Version

      Version of the master file +Current value:8.0

      Timestamp

      Timestamp of creation of master file

      Detector Type

      Detector type

      Timing Mode

      Timing Mode

      Geometry

      Number of UDP ports in x and y dimension for +complete detector

      Image Size in bytes

      Image size in bytes per UDP port

      Pixels

      Number of pixels in x and y dimension +per UDP port

      Max Frames Per File

      Maximum frames per file

      Frame Discard Policy

      Receiever Frame discard policy +for partial frames

      Frame Padding

      Receiver Frame padding enable +for partial frames

      Scan Parameters

      Scanning mode on detector

      Total Frames

      Total number of frames and triggers expected

      Receiver Roi

      Receiver ROI in file including xmax and ymax

      Dynamic Range

      Bits per pixel

      Ten Giga

      10GbE enable for data

      Exptime

      Exposure time

      Period

      Period between frames

      Threshold Energy

      Threshold energy

      Sub Exptime

      Sub exposure time in 32 bit mode

      Sub Period

      Sub period between frames in 32 bit mode

      Quad

      Quad enable (hardware)

      Number of rows

      Number of rows enabled for readout

      Rate Corrections

      Rate Corrections

      Frames in File

      Number of frames written to file by Receiver 0

      Frame Header Format

      Expected frame header format for the data files

      +
      +
      +
      +

      Jungfrau

      +
      +
      ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      Key

      Description

      Version

      Version of the master file +Current value:8.0

      Timestamp

      Timestamp of creation of master file

      Detector Type

      Detector type

      Timing Mode

      Timing Mode

      Geometry

      Number of UDP ports in x and y dimension for +complete detector

      Image Size in bytes

      Image size in bytes per UDP port

      Pixels

      Number of pixels in x and y dimension +per UDP port

      Max Frames Per File

      Maximum frames per file

      Frame Discard Policy

      Receiever Frame discard policy +for partial frames

      Frame Padding

      Receiver Frame padding enable +for partial frames

      Scan Parameters

      Scanning mode on detector

      Total Frames

      Total number of frames and triggers expected

      Receiver Roi

      Receiver ROI in file including xmax and ymax

      Exptime

      Exposure time

      Period

      Period between frames

      Number of UDP +Interfaces

      Number of UDP Interfaces enabled per module

      Number of rows

      Number of rows enabled for readout

      Frames in File

      Number of frames written to file by Receiver 0

      Frame Header Format

      Expected frame header format for the data files

      +
      +
      +
      +

      Gotthard II

      +
      +
      ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      Key

      Description

      Version

      Version of the master file +Current value:8.0

      Timestamp

      Timestamp of creation of master file

      Detector Type

      Detector type

      Timing Mode

      Timing Mode

      Geometry

      Number of UDP ports in x and y dimension for +complete detector

      Image Size in bytes

      Image size in bytes per UDP port

      Pixels

      Number of pixels in x and y dimension +per UDP port

      Max Frames Per File

      Maximum frames per file

      Frame Discard Policy

      Receiever Frame discard policy +for partial frames

      Frame Padding

      Receiver Frame padding enable +for partial frames

      Scan Parameters

      Scanning mode on detector

      Total Frames

      Total number of frames and triggers expected

      Receiver Roi

      Receiver ROI in file including xmax and ymax

      Exptime

      Exposure time

      Period

      Period between frames

      Burst Mode

      Burst mode of detector

      Frames in File

      Number of frames written to file by Receiver 0

      Frame Header Format

      Expected frame header format for the data files

      +
      +
      +
      +

      Mythen3

      +
      +
      ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      Key

      Description

      Version

      Version of the master file +Current value:8.0

      Timestamp

      Timestamp of creation of master file

      Detector Type

      Detector type

      Timing Mode

      Timing Mode

      Geometry

      Number of UDP ports in x and y dimension for +complete detector

      Image Size in bytes

      Image size in bytes per UDP port

      Pixels

      Number of pixels in x and y dimension +per UDP port

      Max Frames Per File

      Maximum frames per file

      Frame Discard Policy

      Receiever Frame discard policy +for partial frames

      Frame Padding

      Receiver Frame padding enable +for partial frames

      Scan Parameters

      Scanning mode on detector

      Total Frames

      Total number of frames and triggers expected

      Receiver Roi

      Receiver ROI in file including xmax and ymax

      Dynamic Range

      Bits per pixel

      Ten Giga

      10GbE enable for data

      Period

      Period between frames

      Counter Mask

      Mask of counters enabled

      Exptime1

      Exposure time of counter 1

      Exptime2

      Exposure time of counter 2

      Exptime3

      Exposure time of counter 3

      GateDelay1

      Gate delay of counter 1

      GateDelay2

      Gate delay of counter 2

      GateDelay3

      Gate delay of counter 3

      Gates

      Number of gates

      Threshold energies

      Threshold energy of all 3 counters

      Frames in File

      Number of frames written to file by Receiver 0

      Frame Header Format

      Expected frame header format for the data files

      +
      +
      +
      +

      Moench

      +
      +
      ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      Key

      Description

      Version

      Version of the master file +Current value:8.0

      Timestamp

      Timestamp of creation of master file

      Detector Type

      Detector type

      Timing Mode

      Timing Mode

      Geometry

      Number of UDP ports in x and y dimension for +complete detector

      Image Size in bytes

      Image size in bytes per UDP port

      Pixels

      Number of pixels in x and y dimension +per UDP port

      Max Frames Per File

      Maximum frames per file

      Frame Discard Policy

      Receiever Frame discard policy +for partial frames

      Frame Padding

      Receiver Frame padding enable +for partial frames

      Scan Parameters

      Scanning mode on detector

      Total Frames

      Total number of frames and triggers expected

      Receiver Roi

      Receiver ROI in file including xmax and ymax

      Exptime

      Exposure time

      Period

      Period between frames

      Number of UDP +Interfaces

      Number of UDP Interfaces enabled per module

      Number of rows

      Number of rows enabled for readout

      Frames in File

      Number of frames written to file by Receiver 0

      Frame Header Format

      Expected frame header format for the data files

      +
      +
      +
      +

      Gotthard I

      +
      +
      ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      Key

      Description

      Version

      Version of the master file +Current value:8.0

      Timestamp

      Timestamp of creation of master file

      Detector Type

      Detector type

      Timing Mode

      Timing Mode

      Geometry

      Number of UDP ports in x and y dimension for +complete detector

      Image Size in bytes

      Image size in bytes per UDP port

      Pixels

      Number of pixels in x and y dimension +per UDP port

      Max Frames Per File

      Maximum frames per file

      Frame Discard Policy

      Receiever Frame discard policy +for partial frames

      Frame Padding

      Receiver Frame padding enable +for partial frames

      Scan Parameters

      Scanning mode on detector

      Total Frames

      Total number of frames and triggers expected

      Receiver Roi

      Receiver ROI in file including xmax and ymax

      Exptime

      Exposure time

      Period

      Period between frames

      Detector Roi

      Roi in detector restricted to an ADC. +Includes xmax

      Burst Mode

      Burst mode of detector

      Frames in File

      Number of frames written to file by Receiver 0

      Frame Header Format

      Expected frame header format for the data files

      +
      +
      +
      +

      Chip Test Board

      +
      +
      ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      Key

      Description

      Version

      Version of the master file +Current value:8.0

      Timestamp

      Timestamp of creation of master file

      Detector Type

      Detector type

      Timing Mode

      Timing Mode

      Geometry

      Number of UDP ports in x and y dimension for +complete detector

      Image Size in bytes

      Image size in bytes per UDP port

      Pixels

      Number of pixels in x and y dimension +per UDP port

      Max Frames Per File

      Maximum frames per file

      Frame Discard Policy

      Receiever Frame discard policy +for partial frames

      Frame Padding

      Receiver Frame padding enable +for partial frames

      Scan Parameters

      Scanning mode on detector

      Total Frames

      Total number of frames and triggers expected

      Receiver Roi

      Receiver ROI in file including xmax and ymax

      Exptime

      Exposure time

      Period

      Period between frames

      Ten Giga

      Ten giga enable

      ADC Mask

      Mask of channels enabled in ADC

      Analog Flag

      Analog readout enable

      Analog Samples

      Number of analog samples

      Digital Flag

      Digital readout enable

      Digital Samples

      Number of digital samples

      Dbit Offset

      Digital offset of valid data in bytes

      Dbit Bitset

      Digital 64 bit mask of bits enabled in receiver

      Transceiver Mask

      Mask of channels enabled in Transceiver

      Transceiver Flag

      Transceiver readout enable

      Transceiver Samples

      Number of transceiver samples

      Frames in File

      Number of frames written to file by Receiver 0

      Frame Header Format

      Expected frame header format for the data files

      +
      +
      +
      + + +
      +
      + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv index cf1353473c1881e38317683ea464cacebe86ff71..2f9db8ef6c7d5353dbb1af76cf9c57ae4ff6a7c2 100644 GIT binary patch delta 38753 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 delta 35432 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 Y`1iKGzx~^{16T{as{q#j2jB+Pltrn)@c;k- diff --git a/pydetector.html b/pydetector.html index 8326b60..7a8b499 100644 --- a/pydetector.html +++ b/pydetector.html @@ -1,13 +1,15 @@ - + Detector — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
      - 8.0.2 + 9.0.0
      @@ -96,9 +98,12 @@
    • Detector.clkdiv
    • Detector.clkfreq
    • Detector.clkphase
    • +
    • Detector.collectionmode
    • Detector.column
    • Detector.compdisabletime
    • Detector.config
    • +
    • Detector.configtransceiver()
    • +
    • Detector.configureTransceiver()
    • Detector.counters
    • Detector.currentsource
    • Detector.daclist
    • @@ -138,7 +143,6 @@
    • Detector.framesl
    • Detector.frametime
    • Detector.free()
    • -
    • Detector.freeSharedMemory()
    • Detector.fwrite
    • Detector.gaincaps
    • Detector.gainmode
    • @@ -181,6 +185,7 @@
    • Detector.getClockFrequency()
    • Detector.getClockPhase()
    • Detector.getClockPhaseinDegrees()
    • +
    • Detector.getCollectionMode()
    • Detector.getColumn()
    • Detector.getComparatorDisableTime()
    • Detector.getControlPort()
    • @@ -335,7 +340,6 @@
    • Detector.getRxZmqDataStream()
    • Detector.getRxZmqFrequency()
    • Detector.getRxZmqHwm()
    • -
    • Detector.getRxZmqIP()
    • Detector.getRxZmqPort()
    • Detector.getRxZmqStartingFrame()
    • Detector.getRxZmqTimer()
    • @@ -375,6 +379,7 @@
    • Detector.getTenGigaFlowControl()
    • Detector.getThresholdEnergy()
    • Detector.getThresholdTemperature()
    • +
    • Detector.getTimingInfoDecoder()
    • Detector.getTimingMode()
    • Detector.getTimingModeList()
    • Detector.getTimingSource()
    • @@ -510,7 +515,6 @@
    • Detector.rx_version
    • Detector.rx_zmqfreq
    • Detector.rx_zmqhwm
    • -
    • Detector.rx_zmqip
    • Detector.rx_zmqport
    • Detector.rx_zmqstartfnum
    • Detector.rx_zmqstream
    • @@ -551,6 +555,7 @@
    • Detector.setClockDivider()
    • Detector.setClockPhase()
    • Detector.setClockPhaseinDegrees()
    • +
    • Detector.setCollectionMode()
    • Detector.setColumn()
    • Detector.setComparatorDisableTime()
    • Detector.setControlPort()
    • @@ -661,7 +666,6 @@
    • Detector.setRxZmqDataStream()
    • Detector.setRxZmqFrequency()
    • Detector.setRxZmqHwm()
    • -
    • Detector.setRxZmqIP()
    • Detector.setRxZmqPort()
    • Detector.setRxZmqStartingFrame()
    • Detector.setRxZmqTimer()
    • @@ -688,6 +692,7 @@
    • Detector.setTenGigaFlowControl()
    • Detector.setThresholdEnergy()
    • Detector.setThresholdTemperature()
    • +
    • Detector.setTimingInfoDecoder()
    • Detector.setTimingMode()
    • Detector.setTimingSource()
    • Detector.setTop()
    • @@ -737,6 +742,7 @@
    • Detector.tengiga
    • Detector.threshold
    • Detector.timing
    • +
    • Detector.timing_info_decoder
    • Detector.timinglist
    • Detector.timingsource
    • Detector.top
    • @@ -829,6 +835,19 @@
    • Receivers
    • slsReceiver/ slsMultiReceiver
    +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    • Troubleshooting
    • @@ -1105,12 +1124,12 @@

      Detector
      -clearBit(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +clearBit(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: bool = False, arg3: list[int] = []) None
      -clearROI(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +clearROI(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None
      @@ -1120,7 +1139,7 @@

      Detector
      -clearUDPDestinations(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +clearUDPDestinations(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None

      @@ -1144,6 +1163,8 @@

      Detector property clkdiv

      [Gotthard2][Mythen3] Clock Divider of all clocks. Must be greater than 1.

      +

      [Gotthard2] Clock index range: 0-5

      +

      [Mythen3] Clock index range: 0

      Example

      >>> d.clkdiv[0] = 20
       >>> d.clkdiv
      @@ -1161,6 +1182,8 @@ 

      Detector property clkfreq

      [Gotthard2][Mythen3] Frequency of clock in Hz.

      +

      [Gotthard2] Clock index range: 0-5

      +

      [Mythen3] Clock index range: 0

      Setter

      Not implemented. Use clkdiv to set frequency

      @@ -1177,6 +1200,8 @@

      Detector property clkphase

      [Gotthard2][Mythen3] Phase shift of all clocks.

      +

      [Gotthard2] Clock index range: 0-5

      +

      [Mythen3] Clock index range: 0

      Example

      >>> d.clkphase[0] = 20
       >>> d.clkphase
      @@ -1190,6 +1215,13 @@ 

      Detector +
      +property collectionmode
      +

      [Jungfrau] Sets collection mode to HOLE or ELECTRON. Default is HOLE. +Enum: collectionMode

      +

      +
      property column
      @@ -1262,6 +1294,21 @@

      Detector +
      +configtransceiver()
      +

      [Xilinx Ctb] Waits for transceiver to be aligned.

      +
      +

      Note

      +

      Chip had to be configured (powered on) before this.

      +
      +

      + +
      +
      +configureTransceiver(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None
      +
      +
      property counters
      @@ -1338,7 +1385,7 @@

      Detector
      property delay
      -

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] Delay after trigger, accepts either a value in seconds, DurationWrapper or datetime.timedelta

      +

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2][Xilinx Ctb] Delay after trigger, accepts either a value in seconds, DurationWrapper or datetime.timedelta

      Getter

      always returns in seconds. To get in DurationWrapper, use getDelayAfterTrigger

      @@ -1377,7 +1424,7 @@

      Detector
      property delayl
      -

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] Delay left after trigger during acquisition, accepts either a value in seconds, datetime.timedelta or DurationWrapper

      +

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2][Xilinx Ctb] Delay left after trigger during acquisition, accepts either a value in seconds, datetime.timedelta or DurationWrapper

      @@ -1465,17 +1512,17 @@

      Detector
      -executeBusTest(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +executeBusTest(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None

      -executeCommand(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) List[str]
      +executeCommand(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) list[str]
      -executeFirmwareTest(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +executeFirmwareTest(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None
      @@ -1657,7 +1704,7 @@

      Detector

      Note

      -

      If path does not exist, it will try to create it.

      +

      If path does not exist and fwrite enabled, it will try to create it at start of acquisition.

      Example

      d.fpath = ‘/tmp/run_20201705’

      @@ -1666,7 +1713,7 @@

      Detector
      property framecounter
      -

      [Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of frames from start run control.

      +

      [Jungfrau][Moench][Mythen3][Gotthard2][CTB][Xilinx Ctb] Number of frames from start run control.

      Note

      [Gotthard2] only in continuous mode.

      @@ -1693,7 +1740,7 @@

      Detector
      property framesl
      -

      [Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of frames left in acquisition.

      +

      [Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB][Xilinx CTB] Number of frames left in acquisition.

      Note

      [Gotthard2] only in continuous auto mode.

      @@ -1708,7 +1755,7 @@

      Detector
      property frametime
      -

      [Jungfrau][Moench][Mythen3][Gotthard2][CTB] Timestamp at a frame start.

      +

      [Jungfrau][Moench][Mythen3][Gotthard2][CTB][Xilinx Ctb] Timestamp at a frame start.

      Note

      [Gotthard2] not in burst and auto mode.

      @@ -1721,15 +1768,10 @@

      Detector -
      -freeSharedMemory(self: _slsdet.CppDetectorApi) None
      -

      -
      property fwrite
      -

      Enable or disable receiver file write. Default is enabled.

      +

      Enable or disable receiver file write. Default is disabled.

      @@ -1829,57 +1871,57 @@

      Detector
      -getADCClock(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getADCClock(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]

      -getADCConfiguration(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) List[int]
      +getADCConfiguration(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) list[int]
      -getADCEnableMask(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getADCEnableMask(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getADCInvert(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getADCInvert(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getADCPhase(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getADCPhase(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getADCPhaseInDegrees(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getADCPhaseInDegrees(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getADCPipeline(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getADCPipeline(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getADCVpp(self: _slsdet.CppDetectorApi, arg0: bool = False, arg1: List[int] = []) List[int]
      +getADCVpp(self: _slsdet.CppDetectorApi, arg0: bool = False, arg1: list[int] = []) list[int]
      -getAcquisitionIndex(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getAcquisitionIndex(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getActive(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getActive(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getActualTime(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getActualTime(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      @@ -1894,37 +1936,37 @@

      Detector
      -getAdcNames(self: _slsdet.CppDetectorApi) List[str]
      +getAdcNames(self: _slsdet.CppDetectorApi) list[str]

      -getAdditionalJsonHeader(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[Dict[str, str]]
      +getAdditionalJsonHeader(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[dict[str, str]]
      -getAdditionalJsonParameter(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) List[str]
      +getAdditionalJsonParameter(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) list[str]
      -getAllThresholdEnergy(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[Annotated[List[int], FixedSize(3)]]
      +getAllThresholdEnergy(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[Annotated[list[int], FixedSize(3)]]
      -getAllTrimbits(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getAllTrimbits(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getAnalogPulsing(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getAnalogPulsing(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getAutoComparatorDisable(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getAutoComparatorDisable(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      @@ -1932,39 +1974,39 @@

      DetectorgetBadChannels(*args, **kwargs)

      Overloaded function.

        -
      1. getBadChannels(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) -> None

      2. -
      3. getBadChannels(self: _slsdet.CppDetectorApi, arg0: List[int] = []) -> List[List[int]]

      4. +
      5. getBadChannels(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) -> None

      6. +
      7. getBadChannels(self: _slsdet.CppDetectorApi, arg0: list[int] = []) -> list[list[int]]

      -getBit(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) List[int]
      +getBit(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) list[int]
      -getBurstMode(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.burstMode]
      +getBurstMode(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.burstMode]
      -getBurstPeriod(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getBurstPeriod(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getCDSGain(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getCDSGain(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getChipStatusRegister(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getChipStatusRegister(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getChipVersion(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[float]
      +getChipVersion(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[float]
      @@ -1979,82 +2021,87 @@

      Detector
      -getClientZmqIp(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[sls::IpAddr]
      +getClientZmqIp(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[sls::IpAddr]

      -getClientZmqPort(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getClientZmqPort(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getClockDivider(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[int]
      +getClockDivider(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[int]
      -getClockFrequency(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[int]
      +getClockFrequency(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[int]
      -getClockPhase(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[int]
      +getClockPhase(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[int]
      -getClockPhaseinDegrees(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[int]
      +getClockPhaseinDegrees(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[int] +
      + +
      +
      +getCollectionMode(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.collectionMode]
      -getColumn(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getColumn(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getComparatorDisableTime(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getComparatorDisableTime(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getControlPort(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getControlPort(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getCounterMask(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getCounterMask(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getCurrentSource(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[slsDetectorDefs::currentSrcParameters]
      +getCurrentSource(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[slsDetectorDefs::currentSrcParameters]
      -getDAC(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: bool = False, arg2: List[int] = []) List[int]
      +getDAC(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: bool = False, arg2: list[int] = []) list[int]
      -getDBITClock(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getDBITClock(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getDBITPhase(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getDBITPhase(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getDBITPhaseInDegrees(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getDBITPhaseInDegrees(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getDBITPipeline(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getDBITPipeline(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      @@ -2064,7 +2111,7 @@

      Detector
      -getDacList(self: _slsdet.CppDetectorApi) List[_slsdet.slsDetectorDefs.dacIndex]
      +getDacList(self: _slsdet.CppDetectorApi) list[_slsdet.slsDetectorDefs.dacIndex]

      @@ -2074,12 +2121,12 @@

      Detector
      -getDacNames(self: _slsdet.CppDetectorApi) List[str]
      +getDacNames(self: _slsdet.CppDetectorApi) list[str]

      -getDataStream(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.portPosition, arg1: List[int] = []) List[bool]
      +getDataStream(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.portPosition, arg1: list[int] = []) list[bool]
      @@ -2087,64 +2134,64 @@

      DetectorgetDefaultDac(*args, **kwargs)

      Overloaded function.

        -
      1. getDefaultDac(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: List[int] = []) -> List[int]

      2. -
      3. getDefaultDac(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: _slsdet.slsDetectorDefs.detectorSettings, arg2: List[int] = []) -> List[int]

      4. +
      5. getDefaultDac(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: list[int] = []) -> list[int]

      6. +
      7. getDefaultDac(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: _slsdet.slsDetectorDefs.detectorSettings, arg2: list[int] = []) -> list[int]

      -getDelayAfterTrigger(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getDelayAfterTrigger(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getDelayAfterTriggerLeft(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getDelayAfterTriggerLeft(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getDestinationUDPIP(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[sls::IpAddr]
      +getDestinationUDPIP(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[sls::IpAddr]
      -getDestinationUDPIP2(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[sls::IpAddr]
      +getDestinationUDPIP2(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[sls::IpAddr]
      -getDestinationUDPList(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[sls::UdpDestination]
      +getDestinationUDPList(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[sls::UdpDestination]
      -getDestinationUDPMAC(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[sls::MacAddr]
      +getDestinationUDPMAC(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[sls::MacAddr]
      -getDestinationUDPMAC2(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[sls::MacAddr]
      +getDestinationUDPMAC2(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[sls::MacAddr]
      -getDestinationUDPPort(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getDestinationUDPPort(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getDestinationUDPPort2(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getDestinationUDPPort2(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getDetectorLock(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getDetectorLock(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getDetectorServerVersion(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[str]
      +getDetectorServerVersion(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[str]
      @@ -2154,27 +2201,27 @@

      Detector
      -getDetectorStatus(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.runStatus]
      +getDetectorStatus(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.runStatus]

      -getDetectorType(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.detectorType]
      +getDetectorType(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.detectorType]
      -getDigitalPulsing(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getDigitalPulsing(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getDynamicRange(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getDynamicRange(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getDynamicRangeList(self: _slsdet.CppDetectorApi) List[int]
      +getDynamicRangeList(self: _slsdet.CppDetectorApi) list[int]
      @@ -2182,109 +2229,109 @@

      DetectorgetExptime(*args, **kwargs)

      Overloaded function.

        -
      1. getExptime(self: _slsdet.CppDetectorApi, arg0: List[int] = []) -> List[DurationWrapper]

      2. -
      3. getExptime(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) -> List[DurationWrapper]

      4. +
      5. getExptime(self: _slsdet.CppDetectorApi, arg0: list[int] = []) -> list[DurationWrapper]

      6. +
      7. getExptime(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) -> list[DurationWrapper]

      -getExptimeForAllGates(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[Annotated[List[DurationWrapper], FixedSize(3)]]
      +getExptimeForAllGates(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[Annotated[list[DurationWrapper], FixedSize(3)]]
      -getExptimeLeft(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getExptimeLeft(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getExternalSampling(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getExternalSampling(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getExternalSamplingSource(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getExternalSamplingSource(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getExternalSignalFlags(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[_slsdet.slsDetectorDefs.externalSignalFlag]
      +getExternalSignalFlags(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[_slsdet.slsDetectorDefs.externalSignalFlag]
      -getFileFormat(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.fileFormat]
      +getFileFormat(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.fileFormat]
      -getFileNamePrefix(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[str]
      +getFileNamePrefix(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[str]
      -getFileOverWrite(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getFileOverWrite(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getFilePath(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[str]
      +getFilePath(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[str]
      -getFileWrite(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getFileWrite(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getFilterResistor(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getFilterResistor(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getFirmwareVersion(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getFirmwareVersion(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getFirstUDPDestination(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getFirstUDPDestination(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getFlipRows(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getFlipRows(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getFramesCaught(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[List[int]]
      +getFramesCaught(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[list[int]]
      -getFramesPerFile(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getFramesPerFile(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getFrontEndFirmwareVersion(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.fpgaPosition, arg1: List[int] = []) List[int]
      +getFrontEndFirmwareVersion(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.fpgaPosition, arg1: list[int] = []) list[int]
      -getGainCaps(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getGainCaps(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getGainMode(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.gainMode]
      +getGainMode(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.gainMode]
      -getGainModeList(self: _slsdet.CppDetectorApi) List[_slsdet.slsDetectorDefs.gainMode]
      +getGainModeList(self: _slsdet.CppDetectorApi) list[_slsdet.slsDetectorDefs.gainMode]
      @@ -2294,37 +2341,37 @@

      Detector
      -getGateDelay(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[DurationWrapper]
      +getGateDelay(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[DurationWrapper]

      -getGateDelayForAllGates(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[Annotated[List[DurationWrapper], FixedSize(3)]]
      +getGateDelayForAllGates(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[Annotated[list[DurationWrapper], FixedSize(3)]]
      -getHardwareVersion(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[str]
      +getHardwareVersion(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[str]
      -getHighVoltage(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getHighVoltage(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getHostname(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[str]
      +getHostname(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[str]
      -getImageTestMode(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getImageTestMode(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getIndividualRxROIs(self: _slsdet.CppDetectorApi, arg0: List[int]) List[slsDetectorDefs::ROI]
      +getIndividualRxROIs(self: _slsdet.CppDetectorApi, arg0: list[int]) list[slsDetectorDefs::ROI]
      @@ -2334,37 +2381,37 @@

      Detector
      -getInjectChannel(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[Annotated[List[int], FixedSize(2)]]
      +getInjectChannel(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[Annotated[list[int], FixedSize(2)]]

      -getInterpolation(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getInterpolation(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getInterruptSubframe(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getInterruptSubframe(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getKernelVersion(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[str]
      +getKernelVersion(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[str]
      -getLEDEnable(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getLEDEnable(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getLastClientIP(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[sls::IpAddr]
      +getLastClientIP(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[sls::IpAddr]
      -getMaster(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getMaster(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      @@ -2374,42 +2421,42 @@

      Detector
      -getMaxADCPhaseShift(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getMaxADCPhaseShift(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]

      -getMaxClockPhaseShift(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[int]
      +getMaxClockPhaseShift(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[int]
      -getMaxDBITPhaseShift(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getMaxDBITPhaseShift(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getMeasuredCurrent(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: List[int] = []) List[int]
      +getMeasuredCurrent(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: list[int] = []) list[int]
      -getMeasuredPeriod(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getMeasuredPeriod(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getMeasuredPower(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: List[int] = []) List[int]
      +getMeasuredPower(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: list[int] = []) list[int]
      -getMeasuredSubFramePeriod(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getMeasuredSubFramePeriod(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getMeasurementTime(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getMeasurementTime(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      @@ -2419,107 +2466,107 @@

      Detector
      -getModuleId(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getModuleId(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]

      -getModuleSize(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.xy]
      +getModuleSize(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.xy]
      -getNextFrameNumber(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNextFrameNumber(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumMissingPackets(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[List[int]]
      +getNumMissingPackets(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[list[int]]
      -getNumberOfAdditionalStorageCells(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfAdditionalStorageCells(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberOfAnalogSamples(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfAnalogSamples(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberOfBursts(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfBursts(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberOfBurstsLeft(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfBurstsLeft(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberOfDigitalSamples(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfDigitalSamples(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberOfFilterCells(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfFilterCells(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberOfFrames(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfFrames(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberOfFramesFromStart(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfFramesFromStart(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberOfFramesLeft(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfFramesLeft(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberOfGates(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfGates(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberOfTransceiverSamples(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfTransceiverSamples(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberOfTriggers(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfTriggers(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberOfTriggersLeft(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberOfTriggersLeft(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberofUDPDestinations(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberofUDPDestinations(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getNumberofUDPInterfaces(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getNumberofUDPInterfaces(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getOnChipDAC(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: int, arg2: List[int] = []) List[int]
      +getOnChipDAC(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: int, arg2: list[int] = []) list[int]
      -getOverFlowMode(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getOverFlowMode(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      @@ -2529,92 +2576,92 @@

      Detector
      -getParallelMode(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getParallelMode(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]

      -getPartialFramesPadding(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getPartialFramesPadding(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getPartialReset(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getPartialReset(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getPatterFileName(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[str]
      +getPatterFileName(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[str]
      -getPatternBitMask(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getPatternBitMask(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getPatternIOControl(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getPatternIOControl(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getPatternLoopAddresses(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[Annotated[List[int], FixedSize(2)]]
      +getPatternLoopAddresses(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[Annotated[list[int], FixedSize(2)]]
      -getPatternLoopCycles(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[int]
      +getPatternLoopCycles(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[int]
      -getPatternMask(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getPatternMask(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getPatternWaitAddr(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[int]
      +getPatternWaitAddr(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[int]
      -getPatternWaitTime(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[int]
      +getPatternWaitTime(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[int]
      -getPatternWord(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[int]
      +getPatternWord(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[int]
      -getPedestalMode(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[slsDetectorDefs::pedestalParameters]
      +getPedestalMode(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[slsDetectorDefs::pedestalParameters]
      -getPeriod(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getPeriod(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getPeriodLeft(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getPeriodLeft(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getPolarity(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.polarity]
      +getPolarity(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.polarity]
      -getPower(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: List[int] = []) List[int]
      +getPower(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: list[int] = []) list[int]
      -getPowerChip(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getPowerChip(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      @@ -2624,7 +2671,7 @@

      Detector
      -getPowerList(self: _slsdet.CppDetectorApi) List[_slsdet.slsDetectorDefs.dacIndex]
      +getPowerList(self: _slsdet.CppDetectorApi) list[_slsdet.slsDetectorDefs.dacIndex]

      @@ -2634,117 +2681,117 @@

      Detector
      -getPowerNames(self: _slsdet.CppDetectorApi) List[str]
      +getPowerNames(self: _slsdet.CppDetectorApi) list[str]

      -getPumpProbe(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getPumpProbe(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getQuad(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getQuad(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getROI(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[slsDetectorDefs::ROI]
      +getROI(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[slsDetectorDefs::ROI]
      -getRUNClock(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getRUNClock(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getRateCorrection(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getRateCorrection(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getReadNRows(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getReadNRows(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getReadoutMode(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.readoutMode]
      +getReadoutMode(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.readoutMode]
      -getReadoutSpeed(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.speedLevel]
      +getReadoutSpeed(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.speedLevel]
      -getReadoutSpeedList(self: _slsdet.CppDetectorApi) List[_slsdet.slsDetectorDefs.speedLevel]
      +getReadoutSpeedList(self: _slsdet.CppDetectorApi) list[_slsdet.slsDetectorDefs.speedLevel]
      -getReceiverStatus(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.runStatus]
      +getReceiverStatus(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.runStatus]
      -getReceiverVersion(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[str]
      +getReceiverVersion(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[str]
      -getRow(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getRow(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getRxArping(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getRxArping(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getRxCurrentFrameIndex(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[List[int]]
      +getRxCurrentFrameIndex(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[list[int]]
      -getRxDbitList(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[List[int]]
      +getRxDbitList(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[list[int]]
      -getRxDbitOffset(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getRxDbitOffset(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getRxFifoDepth(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getRxFifoDepth(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getRxFrameDiscardPolicy(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.frameDiscardPolicy]
      +getRxFrameDiscardPolicy(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.frameDiscardPolicy]
      -getRxHostname(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[str]
      +getRxHostname(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[str]
      -getRxLastClientIP(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[sls::IpAddr]
      +getRxLastClientIP(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[sls::IpAddr]
      -getRxLock(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getRxLock(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getRxPort(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getRxPort(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      @@ -2754,97 +2801,92 @@

      Detector
      -getRxRealUDPSocketBufferSize(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getRxRealUDPSocketBufferSize(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]

      -getRxSilentMode(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getRxSilentMode(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getRxThreadIds(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[Annotated[List[int], FixedSize(9)]]
      +getRxThreadIds(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[Annotated[list[int], FixedSize(9)]]
      -getRxUDPSocketBufferSize(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getRxUDPSocketBufferSize(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getRxZmqDataStream(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getRxZmqDataStream(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getRxZmqFrequency(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getRxZmqFrequency(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getRxZmqHwm(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      -
      - -
      -
      -getRxZmqIP(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[sls::IpAddr]
      +getRxZmqHwm(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getRxZmqPort(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getRxZmqPort(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getRxZmqStartingFrame(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getRxZmqStartingFrame(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getRxZmqTimer(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getRxZmqTimer(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getSYNCClock(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getSYNCClock(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getScan(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[slsDetectorDefs::scanParameters]
      +getScan(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[slsDetectorDefs::scanParameters]
      -getScanErrorMessage(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[str]
      +getScanErrorMessage(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[str]
      -getSelectedUDPInterface(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getSelectedUDPInterface(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getSerialNumber(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getSerialNumber(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getSettings(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.detectorSettings]
      +getSettings(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.detectorSettings]
      -getSettingsList(self: _slsdet.CppDetectorApi) List[_slsdet.slsDetectorDefs.detectorSettings]
      +getSettingsList(self: _slsdet.CppDetectorApi) list[_slsdet.slsDetectorDefs.detectorSettings]
      -getSettingsPath(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[str]
      +getSettingsPath(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[str]
      @@ -2864,12 +2906,12 @@

      Detector
      -getSignalNames(self: _slsdet.CppDetectorApi) List[str]
      +getSignalNames(self: _slsdet.CppDetectorApi) list[str]

      -getSlowADC(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: List[int] = []) List[int]
      +getSlowADC(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: list[int] = []) list[int]
      @@ -2879,7 +2921,7 @@

      Detector
      -getSlowADCList(self: _slsdet.CppDetectorApi) List[_slsdet.slsDetectorDefs.dacIndex]
      +getSlowADCList(self: _slsdet.CppDetectorApi) list[_slsdet.slsDetectorDefs.dacIndex]

      @@ -2889,127 +2931,132 @@

      Detector
      -getSlowADCNames(self: _slsdet.CppDetectorApi) List[str]
      +getSlowADCNames(self: _slsdet.CppDetectorApi) list[str]

      -getSourceUDPIP(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[sls::IpAddr]
      +getSourceUDPIP(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[sls::IpAddr]
      -getSourceUDPIP2(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[sls::IpAddr]
      +getSourceUDPIP2(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[sls::IpAddr]
      -getSourceUDPMAC(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[sls::MacAddr]
      +getSourceUDPMAC(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[sls::MacAddr]
      -getSourceUDPMAC2(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[sls::MacAddr]
      +getSourceUDPMAC2(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[sls::MacAddr]
      -getStopPort(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getStopPort(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getStorageCellDelay(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getStorageCellDelay(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getStorageCellStart(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getStorageCellStart(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getSubDeadTime(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getSubDeadTime(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getSubExptime(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[DurationWrapper]
      +getSubExptime(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[DurationWrapper]
      -getSynchronization(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getSynchronization(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getTemperature(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: List[int] = []) List[int]
      +getTemperature(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: list[int] = []) list[int]
      -getTemperatureControl(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getTemperatureControl(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getTemperatureEvent(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getTemperatureEvent(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getTemperatureList(self: _slsdet.CppDetectorApi) List[_slsdet.slsDetectorDefs.dacIndex]
      +getTemperatureList(self: _slsdet.CppDetectorApi) list[_slsdet.slsDetectorDefs.dacIndex]
      -getTenGiga(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getTenGiga(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getTenGigaADCEnableMask(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getTenGigaADCEnableMask(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getTenGigaFlowControl(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getTenGigaFlowControl(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getThresholdEnergy(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getThresholdEnergy(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getThresholdTemperature(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getThresholdTemperature(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int] +
      + +
      +
      +getTimingInfoDecoder(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.timingInfoDecoder]
      -getTimingMode(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.timingMode]
      +getTimingMode(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.timingMode]
      -getTimingModeList(self: _slsdet.CppDetectorApi) List[_slsdet.slsDetectorDefs.timingMode]
      +getTimingModeList(self: _slsdet.CppDetectorApi) list[_slsdet.slsDetectorDefs.timingMode]
      -getTimingSource(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.timingSourceType]
      +getTimingSource(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.timingSourceType]
      -getTop(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getTop(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getTransceiverEnableMask(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getTransceiverEnableMask(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      @@ -3019,32 +3066,32 @@

      Detector
      -getTransmissionDelayFrame(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getTransmissionDelayFrame(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]

      -getTransmissionDelayLeft(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getTransmissionDelayLeft(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getTransmissionDelayRight(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[int]
      +getTransmissionDelayRight(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[int]
      -getTrimEnergies(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[List[int]]
      +getTrimEnergies(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[list[int]]
      -getUpdateMode(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getUpdateMode(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      -getUseReceiverFlag(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getUseReceiverFlag(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      @@ -3054,28 +3101,28 @@

      Detector
      -getVeto(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +getVeto(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]

      -getVetoAlgorithm(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.streamingInterface, arg1: List[int] = []) List[_slsdet.slsDetectorDefs.vetoAlgorithm]
      +getVetoAlgorithm(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.streamingInterface, arg1: list[int] = []) list[_slsdet.slsDetectorDefs.vetoAlgorithm]
      -getVetoPhoton(self: _slsdet.CppDetectorApi, arg0: int, arg1: str, arg2: List[int] = []) None
      +getVetoPhoton(self: _slsdet.CppDetectorApi, arg0: int, arg1: str, arg2: list[int] = []) None
      -getVetoStream(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[_slsdet.slsDetectorDefs.streamingInterface]
      +getVetoStream(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[_slsdet.slsDetectorDefs.streamingInterface]
      property hardwareversion
      -

      [Jungfrau][Moench][Gotthard2][Myhten3][Gotthard][Ctb] Hardware version of detector.

      +

      Hardware version of detector.

      [Eiger] Hardware version of front FPGA on detector.

      @@ -3186,7 +3233,7 @@

      Detector
      -isVirtualDetectorServer(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[bool]
      +isVirtualDetectorServer(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[bool]
      @@ -3219,7 +3266,7 @@

      Detector
      -loadDefaultPattern(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +loadDefaultPattern(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None

      @@ -3228,13 +3275,13 @@

      Detector
    • loadParameters(self: _slsdet.CppDetectorApi, arg0: str) -> None

    • -
    • loadParameters(self: _slsdet.CppDetectorApi, arg0: List[str]) -> None

    • +
    • loadParameters(self: _slsdet.CppDetectorApi, arg0: list[str]) -> None

    • -loadTrimbits(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) None
      +loadTrimbits(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) None
      @@ -3265,6 +3312,8 @@

      Detector property maxclkphaseshift

      [Gotthard2][Mythen3] Absolute maximum Phase shift of clocks.

      +

      [Gotthard2] Clock index range: 0-5

      +

      [Mythen3] Clock index range: 0

      Setter

      Not Implemented

      @@ -3331,7 +3380,7 @@

      Detector
      property nextframenumber
      -

      [Eiger][Jungfrau][Moench][CTB] Next frame number. Stopping acquisition might result in different frame numbers for different modules.

      +

      [Eiger][Jungfrau][Moench][CTB][Xilinx CTB][Gotthard2] Next frame number. Stopping acquisition might result in different frame numbers for different modules. So, after stopping, next frame number (max + 1) is set for all the modules afterwards.

      @@ -3412,7 +3461,7 @@

      Detector
      property patfname
      -

      [Ctb][Mythen3] Gets the pattern file name including path of the last pattern uploaded. Returns an empty if nothing was uploaded or via a server default +

      [Ctb][Mythen3][Xilinx Ctb] Gets the pattern file name including path of the last pattern uploaded. Returns an empty if nothing was uploaded or via a server default file

      @@ -3431,7 +3480,7 @@

      Detector
      property patlimits
      -

      [Ctb][Mythen3] Limits (start and stop address) of complete pattern.

      +

      [Ctb][Mythen3][Xilinx Ctb] Limits (start and stop address) of complete pattern.

      Example

      >>> d.patlimits = [0x0, 0x18c]
       >>> d.patlimits
      @@ -3445,7 +3494,7 @@ 

      Detector
      property patloop
      -

      [Ctb][Mythen3] Limits (start and stop address) of the loop provided.

      +

      [Ctb][Mythen3][Xilinx Ctb] Limits (start and stop address) of the loop provided.

      Example

      >>> d.patloop[0] = [5, 20]
       >>> d.patloop[0]
      @@ -3461,7 +3510,7 @@ 

      Detector
      property patloop0
      -

      [Ctb][Mythen3] Limits (start and stop address) of loop 0.

      +

      [Ctb][Mythen3][Xilinx Ctb] Limits (start and stop address) of loop 0.

      Example

      >>> d.patloop0 = [0x0, 0x18c]
       >>> d.patloop0
      @@ -3475,7 +3524,7 @@ 

      Detector
      property patloop1
      -

      [Ctb][Mythen3] Limits (start and stop address) of loop 1.

      +

      [Ctb][Mythen3][Xilinx Ctb] Limits (start and stop address) of loop 1.

      Example

      >>> d.patloop1 = [0x0, 0x18c]
       >>> d.patloop1
      @@ -3489,7 +3538,7 @@ 

      Detector
      property patloop2
      -

      [Ctb][Mythen3] Limits (start and stop address) of loop 2.

      +

      [Ctb][Mythen3][Xilinx Ctb] Limits (start and stop address) of loop 2.

      Example

      >>> d.patloop2 = [0x0, 0x18c]
       >>> d.patloop2
      @@ -3503,7 +3552,7 @@ 

      Detector
      property patmask
      -

      [Ctb][Mythen3] Selects the bits that will have a pattern mask applied to the selected patmask for every pattern.

      +

      [Ctb][Mythen3][Xilinx Ctb] Selects the bits that will have a pattern mask applied to the selected patmask for every pattern.

      Example

      >>> d.patmask = 0x8f0effff6dbffdbf
       >>> hex(d.patmask)
      @@ -3515,7 +3564,7 @@ 

      Detector
      property patnloop
      -

      [Ctb][Mythen3] Number of cycles of the loop provided.

      +

      [Ctb][Mythen3][Xilinx Ctb] Number of cycles of the loop provided.

      Example

      >>> d.patnloop[0] = 5
       >>> d.patnloop[0]
      @@ -3531,25 +3580,25 @@ 

      Detector
      property patnloop0
      -

      [Ctb][Mythen3] Number of cycles of loop 0.

      +

      [Ctb][Mythen3][Xilinx Ctb] Number of cycles of loop 0.

      property patnloop1
      -

      [Ctb][Mythen3] Number of cycles of loop 1.

      +

      [Ctb][Mythen3][Xilinx Ctb] Number of cycles of loop 1.

      property patnloop2
      -

      [Ctb][Mythen3] Number of cycles of loop 2.

      +

      [Ctb][Mythen3][Xilinx Ctb] Number of cycles of loop 2.

      property patsetbit
      -

      [Ctb][Mythen3] Sets the mask applied to every pattern to the selected bits.

      +

      [Ctb][Mythen3][Xilinx Ctb] Sets the mask applied to every pattern to the selected bits.

      Example

      >>> d.patsetbit = 0x8f0effff6dbffdbf
       >>> hex(d.patsetbit)
      @@ -3561,7 +3610,7 @@ 

      Detector
      property pattern
      -

      [Mythen3][Ctb] Loads ASCII pattern file directly to server (instead of executing line by line).

      +

      [Mythen3][Ctb][Xilinx Ctb] Loads ASCII pattern file directly to server (instead of executing line by line).

      Getter

      Not Implemented

      @@ -3576,7 +3625,7 @@

      Detector
      property patwait
      -

      [Ctb][Mythen3] Wait address of loop level provided.

      +

      [Ctb][Mythen3][Xilinx Ctb] Wait address of loop level provided.

      Example

      >>> d.patwait[0] = 5
       >>> d.patwait[0]
      @@ -3592,7 +3641,7 @@ 

      Detector
      property patwait0
      -

      [Ctb][Mythen3] Wait 0 address.

      +

      [Ctb][Mythen3][Xilinx Ctb] Wait 0 address.

      Example

      >>> d.patwait0 = 0xaa
       >>> d.patwait0
      @@ -3606,7 +3655,7 @@ 

      Detector
      property patwait1
      -

      [Ctb][Mythen3] Wait 1 address.

      +

      [Ctb][Mythen3][Xilinx Ctb] Wait 1 address.

      Example

      >>> d.patwait1 = 0xaa
       >>> d.patwait1
      @@ -3620,7 +3669,7 @@ 

      Detector
      property patwait2
      -

      [Ctb][Mythen3] Wait 2 address.

      +

      [Ctb][Mythen3][Xilinx Ctb] Wait 2 address.

      Example

      >>> d.patwait2 = 0xaa
       >>> d.patwait2
      @@ -3634,7 +3683,7 @@ 

      Detector
      property patwaittime
      -

      [Ctb][Mythen3] Wait time in clock cycles of loop level provided.

      +

      [Ctb][Mythen3][Xilinx Ctb] Wait time in clock cycles of loop level provided.

      Example

      >>> d.patwaittime[0] = 5
       >>> d.patwaittime[0]
      @@ -3650,19 +3699,19 @@ 

      Detector
      property patwaittime0
      -

      [Ctb][Mythen3] Wait 0 time in clock cycles.

      +

      [Ctb][Mythen3][Xilinx Ctb] Wait 0 time in clock cycles.

      property patwaittime1
      -

      [Ctb][Mythen3] Wait 1 time in clock cycles.

      +

      [Ctb][Mythen3][Xilinx Ctb] Wait 1 time in clock cycles.

      property patwaittime2
      -

      [Ctb][Mythen3] Wait 2 time in clock cycles.

      +

      [Ctb][Mythen3][Xilinx Ctb] Wait 2 time in clock cycles.

      @@ -3721,7 +3770,7 @@

      Detector
      property periodl
      -

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] Period left for current frame.

      +

      [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2][Xilinx Ctb] Period left for current frame.

      Note

      [Gotthard2] only in continuous mode.

      @@ -3764,11 +3813,12 @@

      Detector
      property powerchip
      -

      [Jungfrau][Moench][Mythen3][Gotthard2] Power the chip.

      +

      [Jungfrau][Moench][Mythen3][Gotthard2][Xilinx Ctb] Power the chip.

      Note

      [Jungfrau][Moench] Default is disabled. Get will return power status. Can be off if temperature event occured (temperature over temp_threshold with temp_control enabled. Will configure chip (only chip v1.1).

      -

      [Mythen3][Gotthard2] Default is 1. If module not connected or wrong module, powerchip will fail.

      +

      [Mythen3][Gotthard2] Default is 1. If module not connected or wrong module, powerchip will fail. +[Xilinx Ctb] Default is 0. Also configures the chip if powered on.

      @@ -3786,27 +3836,27 @@

      Detector
      -printRxConfiguration(self: _slsdet.CppDetectorApi, arg0: List[int] = []) List[str]
      +printRxConfiguration(self: _slsdet.CppDetectorApi, arg0: list[int] = []) list[str]

      -programFPGA(self: _slsdet.CppDetectorApi, arg0: str, arg1: bool, arg2: List[int] = []) None
      +programFPGA(self: _slsdet.CppDetectorApi, arg0: str, arg1: bool, arg2: list[int] = []) None
      -pulseChip(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +pulseChip(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -pulsePixel(self: _slsdet.CppDetectorApi, arg0: int, arg1: _slsdet.xy, arg2: List[int] = []) None
      +pulsePixel(self: _slsdet.CppDetectorApi, arg0: int, arg1: _slsdet.xy, arg2: list[int] = []) None
      -pulsePixelNMove(self: _slsdet.CppDetectorApi, arg0: int, arg1: _slsdet.xy, arg2: List[int] = []) None
      +pulsePixelNMove(self: _slsdet.CppDetectorApi, arg0: int, arg1: _slsdet.xy, arg2: list[int] = []) None
      @@ -3849,7 +3899,7 @@

      Detector
      -readRegister(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) List[int]
      +readRegister(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) list[int]

      @@ -3878,7 +3928,7 @@

      Detector

      Note

      -

      [Jungfrau][Moench] FULL_SPEED, HALF_SPEED (Default), QUARTER_SPEED +

      [Jungfrau][Moench][Mythen3] FULL_SPEED, HALF_SPEED (Default), QUARTER_SPEED [Eiger] FULL_SPEED (Default), HALF_SPEED, QUARTER_SPEED [Moench] FULL_SPEED (Default), HALF_SPEED, QUARTER_SPEED [Gottthard2] G2_108MHZ (Default), G2_144MHZ @@ -3895,12 +3945,12 @@

      Detector
      -rebootController(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +rebootController(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None

      -reconfigureUDPDestination(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +reconfigureUDPDestination(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None
      @@ -3927,17 +3977,17 @@

      Detector
      -resetFPGA(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +resetFPGA(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None

      -resetTemperatureEvent(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +resetTemperatureEvent(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None
      -resetToDefaultDacs(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +resetToDefaultDacs(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      @@ -3952,8 +4002,10 @@

      Detector

      Note

      -

      Options: ANALOG_ONLY, DIGITAL_ONLY, ANALOG_AND_DIGITAL, TRANSCEIVER_ONLY, DIGITAL_AND_TRANSCEIVER -Default: ANALOG_ONLY

      +

      [CTB] Options: ANALOG_ONLY, DIGITAL_ONLY, ANALOG_AND_DIGITAL, TRANSCEIVER_ONLY, DIGITAL_AND_TRANSCEIVER +[CTB] Default: ANALOG_ONLY +[Xilinx CTB] Options: TRANSCEIVER_ONLY +[Xilinx CTB] Default: TRANSCEIVER_ONLY

      Example

      >>> d.romode = readoutMode.ANALOG_ONLY
      @@ -3978,7 +4030,7 @@ 

      Detector
      property runtime
      -

      [Jungfrau][Moench][Mythen3][Gotthard2][CTB] Time from detector start up.

      +

      [Jungfrau][Moench][Mythen3][Gotthard2][CTB][Xilinx Ctb] Time from detector start up.

      Note

      [Gotthard2] not in burst and auto mode.

      @@ -4265,24 +4317,6 @@

      Detector -
      -property rx_zmqip
      -

      Zmq Ip Address from which data is to be streamed out of the receiver.

      -
      -

      Note

      -

      Also restarts receiver zmq streaming if enabled.

      -

      Default is from rx_hostname.

      -

      Modified only when using an intermediate process after receiver.

      -
      -

      Example

      -
      >>> d.rx_zmqip
      -192.168.0.101
      ->>> d.rx_zmqip = '192.168.0.101'
      -
      -
      -

      -
      property rx_zmqport
      @@ -4335,7 +4369,7 @@

      Detector
      -saveTrimbits(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) None
      +saveTrimbits(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) None

      @@ -4353,7 +4387,7 @@

      Detector
      -selectUDPInterface(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +selectUDPInterface(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None

      @@ -4368,7 +4402,7 @@

      Detector
      -sendSoftwareTrigger(self: _slsdet.CppDetectorApi, arg0: bool = False, arg1: List[int] = []) None
      +sendSoftwareTrigger(self: _slsdet.CppDetectorApi, arg0: bool = False, arg1: list[int] = []) None

      @@ -4379,52 +4413,52 @@

      Detector
      -setADCClock(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setADCClock(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None

      -setADCConfiguration(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: int, arg3: List[int] = []) None
      +setADCConfiguration(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: int, arg3: list[int] = []) None
      -setADCEnableMask(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setADCEnableMask(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setADCInvert(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setADCInvert(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setADCPhase(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setADCPhase(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setADCPhaseInDegrees(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setADCPhaseInDegrees(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setADCPipeline(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setADCPipeline(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setADCVpp(self: _slsdet.CppDetectorApi, arg0: int, arg1: bool = False, arg2: List[int] = []) None
      +setADCVpp(self: _slsdet.CppDetectorApi, arg0: int, arg1: bool = False, arg2: list[int] = []) None
      -setAcquisitionIndex(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setAcquisitionIndex(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setActive(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setActive(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      @@ -4434,32 +4468,32 @@

      Detector
      -setAdcNames(self: _slsdet.CppDetectorApi, arg0: List[str]) None
      +setAdcNames(self: _slsdet.CppDetectorApi, arg0: list[str]) None

      -setAdditionalJsonHeader(self: _slsdet.CppDetectorApi, arg0: Dict[str, str], arg1: List[int] = []) None
      +setAdditionalJsonHeader(self: _slsdet.CppDetectorApi, arg0: dict[str, str], arg1: list[int] = []) None
      -setAdditionalJsonParameter(self: _slsdet.CppDetectorApi, arg0: str, arg1: str, arg2: List[int] = []) None
      +setAdditionalJsonParameter(self: _slsdet.CppDetectorApi, arg0: str, arg1: str, arg2: list[int] = []) None
      -setAllTrimbits(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setAllTrimbits(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setAnalogPulsing(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setAnalogPulsing(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setAutoComparatorDisable(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setAutoComparatorDisable(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      @@ -4467,30 +4501,30 @@

      DetectorsetBadChannels(*args, **kwargs)

      Overloaded function.

        -
      1. setBadChannels(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) -> None

      2. -
      3. setBadChannels(self: _slsdet.CppDetectorApi, arg0: List[int], arg1: List[int] = []) -> None

      4. -
      5. setBadChannels(self: _slsdet.CppDetectorApi, arg0: List[List[int]]) -> None

      6. +
      7. setBadChannels(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) -> None

      8. +
      9. setBadChannels(self: _slsdet.CppDetectorApi, arg0: list[int], arg1: list[int] = []) -> None

      10. +
      11. setBadChannels(self: _slsdet.CppDetectorApi, arg0: list[list[int]]) -> None

      -setBit(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +setBit(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: bool = False, arg3: list[int] = []) None
      -setBurstMode(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.burstMode, arg1: List[int] = []) None
      +setBurstMode(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.burstMode, arg1: list[int] = []) None
      -setBurstPeriod(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: List[int] = []) None
      +setBurstPeriod(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: list[int] = []) None
      -setCDSGain(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setCDSGain(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      @@ -4500,7 +4534,7 @@

      Detector
      -setClientZmqIp(self: _slsdet.CppDetectorApi, arg0: sls::IpAddr, arg1: List[int] = []) None
      +setClientZmqIp(self: _slsdet.CppDetectorApi, arg0: sls::IpAddr, arg1: list[int] = []) None

      @@ -4510,67 +4544,72 @@

      Detector
      -setClockDivider(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +setClockDivider(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) None

      -setClockPhase(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +setClockPhase(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) None
      -setClockPhaseinDegrees(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +setClockPhaseinDegrees(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) None +
      + +
      +
      +setCollectionMode(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.collectionMode, arg1: list[int] = []) None
      -setColumn(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setColumn(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setComparatorDisableTime(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: List[int] = []) None
      +setComparatorDisableTime(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: list[int] = []) None
      -setControlPort(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setControlPort(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setCounterMask(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setCounterMask(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setCurrentSource(self: _slsdet.CppDetectorApi, arg0: slsDetectorDefs::currentSrcParameters, arg1: List[int] = []) None
      +setCurrentSource(self: _slsdet.CppDetectorApi, arg0: slsDetectorDefs::currentSrcParameters, arg1: list[int] = []) None
      -setDAC(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: int, arg2: bool = False, arg3: List[int] = []) None
      +setDAC(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: int, arg2: bool = False, arg3: list[int] = []) None
      -setDBITClock(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setDBITClock(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setDBITPhase(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setDBITPhase(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setDBITPhaseInDegrees(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setDBITPhaseInDegrees(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setDBITPipeline(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setDBITPipeline(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      @@ -4580,12 +4619,12 @@

      Detector
      -setDacNames(self: _slsdet.CppDetectorApi, arg0: List[str]) None
      +setDacNames(self: _slsdet.CppDetectorApi, arg0: list[str]) None

      -setDataStream(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.portPosition, arg1: bool, arg2: List[int] = []) None
      +setDataStream(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.portPosition, arg1: bool, arg2: list[int] = []) None
      @@ -4593,29 +4632,29 @@

      DetectorsetDefaultDac(*args, **kwargs)

      Overloaded function.

        -
      1. setDefaultDac(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: int, arg2: List[int] = []) -> None

      2. -
      3. setDefaultDac(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: int, arg2: _slsdet.slsDetectorDefs.detectorSettings, arg3: List[int] = []) -> None

      4. +
      5. setDefaultDac(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: int, arg2: list[int] = []) -> None

      6. +
      7. setDefaultDac(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: int, arg2: _slsdet.slsDetectorDefs.detectorSettings, arg3: list[int] = []) -> None

      -setDefaultRateCorrection(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +setDefaultRateCorrection(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None
      -setDelayAfterTrigger(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: List[int] = []) None
      +setDelayAfterTrigger(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: list[int] = []) None
      -setDestinationUDPIP(self: _slsdet.CppDetectorApi, arg0: sls::IpAddr, arg1: List[int] = []) None
      +setDestinationUDPIP(self: _slsdet.CppDetectorApi, arg0: sls::IpAddr, arg1: list[int] = []) None
      -setDestinationUDPIP2(self: _slsdet.CppDetectorApi, arg0: sls::IpAddr, arg1: List[int] = []) None
      +setDestinationUDPIP2(self: _slsdet.CppDetectorApi, arg0: sls::IpAddr, arg1: list[int] = []) None
      @@ -4625,12 +4664,12 @@

      Detector
      -setDestinationUDPMAC(self: _slsdet.CppDetectorApi, arg0: sls::MacAddr, arg1: List[int] = []) None
      +setDestinationUDPMAC(self: _slsdet.CppDetectorApi, arg0: sls::MacAddr, arg1: list[int] = []) None

      -setDestinationUDPMAC2(self: _slsdet.CppDetectorApi, arg0: sls::MacAddr, arg1: List[int] = []) None
      +setDestinationUDPMAC2(self: _slsdet.CppDetectorApi, arg0: sls::MacAddr, arg1: list[int] = []) None
      @@ -4645,7 +4684,7 @@

      Detector
      -setDetectorLock(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setDetectorLock(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None

      @@ -4655,12 +4694,12 @@

      Detector
      -setDigitalIODelay(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +setDigitalIODelay(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) None

      -setDigitalPulsing(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setDigitalPulsing(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      @@ -4673,79 +4712,79 @@

      DetectorsetExptime(*args, **kwargs)

      Overloaded function.

        -
      1. setExptime(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: List[int] = []) -> None

      2. -
      3. setExptime(self: _slsdet.CppDetectorApi, arg0: int, arg1: DurationWrapper, arg2: List[int] = []) -> None

      4. +
      5. setExptime(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: list[int] = []) -> None

      6. +
      7. setExptime(self: _slsdet.CppDetectorApi, arg0: int, arg1: DurationWrapper, arg2: list[int] = []) -> None

      -setExternalSampling(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setExternalSampling(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setExternalSamplingSource(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setExternalSamplingSource(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setExternalSignalFlags(self: _slsdet.CppDetectorApi, arg0: int, arg1: _slsdet.slsDetectorDefs.externalSignalFlag, arg2: List[int] = []) None
      +setExternalSignalFlags(self: _slsdet.CppDetectorApi, arg0: int, arg1: _slsdet.slsDetectorDefs.externalSignalFlag, arg2: list[int] = []) None
      -setFileFormat(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.fileFormat, arg1: List[int] = []) None
      +setFileFormat(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.fileFormat, arg1: list[int] = []) None
      -setFileNamePrefix(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) None
      +setFileNamePrefix(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) None
      -setFileOverWrite(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setFileOverWrite(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setFilePath(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) None
      +setFilePath(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) None
      -setFileWrite(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setFileWrite(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setFilterResistor(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setFilterResistor(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setFirstUDPDestination(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setFirstUDPDestination(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setFlipRows(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setFlipRows(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setFramesPerFile(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setFramesPerFile(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setGainCaps(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setGainCaps(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setGainMode(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.gainMode, arg1: List[int] = []) None
      +setGainMode(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.gainMode, arg1: list[int] = []) None
      @@ -4755,22 +4794,22 @@

      Detector
      -setGateDelay(self: _slsdet.CppDetectorApi, arg0: int, arg1: DurationWrapper, arg2: List[int] = []) None
      +setGateDelay(self: _slsdet.CppDetectorApi, arg0: int, arg1: DurationWrapper, arg2: list[int] = []) None

      -setHighVoltage(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setHighVoltage(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setHostname(self: _slsdet.CppDetectorApi, arg0: List[str]) None
      +setHostname(self: _slsdet.CppDetectorApi, arg0: list[str]) None
      -setImageTestMode(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setImageTestMode(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      @@ -4780,22 +4819,22 @@

      Detector
      -setInjectChannel(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +setInjectChannel(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) None

      -setInterpolation(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setInterpolation(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setInterruptSubframe(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setInterruptSubframe(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setLEDEnable(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setLEDEnable(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      @@ -4810,7 +4849,7 @@

      Detector
      -setNextFrameNumber(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setNextFrameNumber(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None

      @@ -4820,7 +4859,7 @@

      Detector
      -setNumberOfAnalogSamples(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setNumberOfAnalogSamples(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None

      @@ -4830,12 +4869,12 @@

      Detector
      -setNumberOfDigitalSamples(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setNumberOfDigitalSamples(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None

      -setNumberOfFilterCells(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setNumberOfFilterCells(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      @@ -4845,12 +4884,12 @@

      Detector
      -setNumberOfGates(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setNumberOfGates(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None

      -setNumberOfTransceiverSamples(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setNumberOfTransceiverSamples(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      @@ -4860,32 +4899,32 @@

      Detector
      -setNumberofUDPInterfaces(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setNumberofUDPInterfaces(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None

      -setOnChipDAC(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: int, arg2: int, arg3: List[int] = []) None
      +setOnChipDAC(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: int, arg2: int, arg3: list[int] = []) None
      -setOverFlowMode(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setOverFlowMode(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setParallelMode(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setParallelMode(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setPartialFramesPadding(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setPartialFramesPadding(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setPartialReset(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setPartialReset(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      @@ -4893,74 +4932,74 @@

      DetectorsetPattern(*args, **kwargs)

      Overloaded function.

        -
      1. setPattern(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) -> None

      2. -
      3. setPattern(self: _slsdet.CppDetectorApi, arg0: sls::Pattern, arg1: List[int] = []) -> None

      4. +
      5. setPattern(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) -> None

      6. +
      7. setPattern(self: _slsdet.CppDetectorApi, arg0: sls::Pattern, arg1: list[int] = []) -> None

      -setPatternBitMask(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setPatternBitMask(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setPatternIOControl(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setPatternIOControl(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setPatternLoopAddresses(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: int, arg3: List[int] = []) None
      +setPatternLoopAddresses(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: int, arg3: list[int] = []) None
      -setPatternLoopCycles(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +setPatternLoopCycles(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) None
      -setPatternMask(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setPatternMask(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setPatternWaitAddr(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +setPatternWaitAddr(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) None
      -setPatternWaitTime(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +setPatternWaitTime(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) None
      -setPatternWord(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +setPatternWord(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) None
      -setPedestalMode(self: _slsdet.CppDetectorApi, arg0: slsDetectorDefs::pedestalParameters, arg1: List[int] = []) None
      +setPedestalMode(self: _slsdet.CppDetectorApi, arg0: slsDetectorDefs::pedestalParameters, arg1: list[int] = []) None
      -setPeriod(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: List[int] = []) None
      +setPeriod(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: list[int] = []) None
      -setPolarity(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.polarity, arg1: List[int] = []) None
      +setPolarity(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.polarity, arg1: list[int] = []) None
      -setPower(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: int, arg2: List[int] = []) None
      +setPower(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.dacIndex, arg1: int, arg2: list[int] = []) None
      -setPowerChip(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setPowerChip(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      @@ -4970,12 +5009,12 @@

      Detector
      -setPowerNames(self: _slsdet.CppDetectorApi, arg0: List[str]) None
      +setPowerNames(self: _slsdet.CppDetectorApi, arg0: list[str]) None

      -setPumpProbe(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setPumpProbe(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      @@ -4990,57 +5029,57 @@

      Detector
      -setRUNClock(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setRUNClock(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None

      -setRateCorrection(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: List[int] = []) None
      +setRateCorrection(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: list[int] = []) None
      -setReadNRows(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setReadNRows(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setReadoutMode(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.readoutMode, arg1: List[int] = []) None
      +setReadoutMode(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.readoutMode, arg1: list[int] = []) None
      -setReadoutSpeed(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.speedLevel, arg1: List[int] = []) None
      +setReadoutSpeed(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.speedLevel, arg1: list[int] = []) None
      -setRow(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setRow(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setRxArping(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setRxArping(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setRxDbitList(self: _slsdet.CppDetectorApi, arg0: List[int], arg1: List[int] = []) None
      +setRxDbitList(self: _slsdet.CppDetectorApi, arg0: list[int], arg1: list[int] = []) None
      -setRxDbitOffset(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setRxDbitOffset(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setRxFifoDepth(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setRxFifoDepth(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setRxFrameDiscardPolicy(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.frameDiscardPolicy, arg1: List[int] = []) None
      +setRxFrameDiscardPolicy(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.frameDiscardPolicy, arg1: list[int] = []) None
      @@ -5048,14 +5087,14 @@

      DetectorsetRxHostname(*args, **kwargs)

      Overloaded function.

        -
      1. setRxHostname(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) -> None

      2. -
      3. setRxHostname(self: _slsdet.CppDetectorApi, arg0: List[str]) -> None

      4. +
      5. setRxHostname(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) -> None

      6. +
      7. setRxHostname(self: _slsdet.CppDetectorApi, arg0: list[str]) -> None

      -setRxLock(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setRxLock(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      @@ -5070,22 +5109,22 @@

      Detector
      -setRxSilentMode(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setRxSilentMode(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None

      -setRxUDPSocketBufferSize(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setRxUDPSocketBufferSize(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setRxZmqDataStream(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setRxZmqDataStream(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setRxZmqFrequency(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setRxZmqFrequency(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      @@ -5093,11 +5132,6 @@

      DetectorsetRxZmqHwm(self: _slsdet.CppDetectorApi, arg0: int) None

      -
      -
      -setRxZmqIP(self: _slsdet.CppDetectorApi, arg0: sls::IpAddr, arg1: List[int] = []) None
      -
      -
      setRxZmqPort(self: _slsdet.CppDetectorApi, arg0: int, arg1: int = -1) None
      @@ -5105,12 +5139,12 @@

      Detector
      -setRxZmqStartingFrame(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setRxZmqStartingFrame(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None

      -setRxZmqTimer(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setRxZmqTimer(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      @@ -5120,12 +5154,12 @@

      Detector
      -setSettings(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.detectorSettings, arg1: List[int] = []) None
      +setSettings(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.detectorSettings, arg1: list[int] = []) None

      -setSettingsPath(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) None
      +setSettingsPath(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) None
      @@ -5135,7 +5169,7 @@

      Detector
      -setSignalNames(self: _slsdet.CppDetectorApi, arg0: List[str]) None
      +setSignalNames(self: _slsdet.CppDetectorApi, arg0: list[str]) None

      @@ -5145,52 +5179,52 @@

      Detector
      -setSlowADCNames(self: _slsdet.CppDetectorApi, arg0: List[str]) None
      +setSlowADCNames(self: _slsdet.CppDetectorApi, arg0: list[str]) None

      -setSourceUDPIP(self: _slsdet.CppDetectorApi, arg0: sls::IpAddr, arg1: List[int] = []) None
      +setSourceUDPIP(self: _slsdet.CppDetectorApi, arg0: sls::IpAddr, arg1: list[int] = []) None
      -setSourceUDPIP2(self: _slsdet.CppDetectorApi, arg0: sls::IpAddr, arg1: List[int] = []) None
      +setSourceUDPIP2(self: _slsdet.CppDetectorApi, arg0: sls::IpAddr, arg1: list[int] = []) None
      -setSourceUDPMAC(self: _slsdet.CppDetectorApi, arg0: sls::MacAddr, arg1: List[int] = []) None
      +setSourceUDPMAC(self: _slsdet.CppDetectorApi, arg0: sls::MacAddr, arg1: list[int] = []) None
      -setSourceUDPMAC2(self: _slsdet.CppDetectorApi, arg0: sls::MacAddr, arg1: List[int] = []) None
      +setSourceUDPMAC2(self: _slsdet.CppDetectorApi, arg0: sls::MacAddr, arg1: list[int] = []) None
      -setStopPort(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setStopPort(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setStorageCellDelay(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: List[int] = []) None
      +setStorageCellDelay(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: list[int] = []) None
      -setStorageCellStart(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setStorageCellStart(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setSubDeadTime(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: List[int] = []) None
      +setSubDeadTime(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: list[int] = []) None
      -setSubExptime(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: List[int] = []) None
      +setSubExptime(self: _slsdet.CppDetectorApi, arg0: DurationWrapper, arg1: list[int] = []) None
      @@ -5200,22 +5234,22 @@

      Detector
      -setTemperatureControl(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setTemperatureControl(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None

      -setTenGiga(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setTenGiga(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setTenGigaADCEnableMask(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setTenGigaADCEnableMask(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setTenGigaFlowControl(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setTenGigaFlowControl(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      @@ -5223,34 +5257,39 @@

      DetectorsetThresholdEnergy(*args, **kwargs)

      Overloaded function.

        -
      1. setThresholdEnergy(self: _slsdet.CppDetectorApi, arg0: int, arg1: _slsdet.slsDetectorDefs.detectorSettings = <detectorSettings.STANDARD: 0>, arg2: bool = True, arg3: List[int] = []) -> None

      2. -
      3. setThresholdEnergy(self: _slsdet.CppDetectorApi, arg0: Annotated[List[int], FixedSize(3)], arg1: _slsdet.slsDetectorDefs.detectorSettings = <detectorSettings.STANDARD: 0>, arg2: bool = True, arg3: List[int] = []) -> None

      4. +
      5. setThresholdEnergy(self: _slsdet.CppDetectorApi, arg0: int, arg1: _slsdet.slsDetectorDefs.detectorSettings = <detectorSettings.STANDARD: 0>, arg2: bool = True, arg3: list[int] = []) -> None

      6. +
      7. setThresholdEnergy(self: _slsdet.CppDetectorApi, arg0: Annotated[list[int], FixedSize(3)], arg1: _slsdet.slsDetectorDefs.detectorSettings = <detectorSettings.STANDARD: 0>, arg2: bool = True, arg3: list[int] = []) -> None

      -setThresholdTemperature(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setThresholdTemperature(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None +
      + +
      +
      +setTimingInfoDecoder(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.timingInfoDecoder, arg1: list[int] = []) None
      -setTimingMode(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.timingMode, arg1: List[int] = []) None
      +setTimingMode(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.timingMode, arg1: list[int] = []) None
      -setTimingSource(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.timingSourceType, arg1: List[int] = []) None
      +setTimingSource(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.timingSourceType, arg1: list[int] = []) None
      -setTop(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setTop(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setTransceiverEnableMask(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setTransceiverEnableMask(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      @@ -5260,57 +5299,57 @@

      Detector
      -setTransmissionDelayFrame(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setTransmissionDelayFrame(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None

      -setTransmissionDelayLeft(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setTransmissionDelayLeft(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setTransmissionDelayRight(self: _slsdet.CppDetectorApi, arg0: int, arg1: List[int] = []) None
      +setTransmissionDelayRight(self: _slsdet.CppDetectorApi, arg0: int, arg1: list[int] = []) None
      -setTrimEnergies(self: _slsdet.CppDetectorApi, arg0: List[int], arg1: List[int] = []) None
      +setTrimEnergies(self: _slsdet.CppDetectorApi, arg0: list[int], arg1: list[int] = []) None
      -setUpdateMode(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setUpdateMode(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setVeto(self: _slsdet.CppDetectorApi, arg0: bool, arg1: List[int] = []) None
      +setVeto(self: _slsdet.CppDetectorApi, arg0: bool, arg1: list[int] = []) None
      -setVetoAlgorithm(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.vetoAlgorithm, arg1: _slsdet.slsDetectorDefs.streamingInterface, arg2: List[int] = []) None
      +setVetoAlgorithm(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.vetoAlgorithm, arg1: _slsdet.slsDetectorDefs.streamingInterface, arg2: list[int] = []) None
      -setVetoFile(self: _slsdet.CppDetectorApi, arg0: int, arg1: str, arg2: List[int] = []) None
      +setVetoFile(self: _slsdet.CppDetectorApi, arg0: int, arg1: str, arg2: list[int] = []) None
      -setVetoPhoton(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: int, arg3: str, arg4: List[int] = []) None
      +setVetoPhoton(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: int, arg3: str, arg4: list[int] = []) None
      -setVetoReference(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +setVetoReference(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) None
      -setVetoStream(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.streamingInterface, arg1: List[int] = []) None
      +setVetoStream(self: _slsdet.CppDetectorApi, arg0: _slsdet.slsDetectorDefs.streamingInterface, arg1: list[int] = []) None
      @@ -5397,7 +5436,7 @@

      Detector
      -startDetector(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +startDetector(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None

      @@ -5407,7 +5446,7 @@

      Detector
      -startPattern(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +startPattern(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None

      @@ -5437,7 +5476,7 @@

      Detector
      -stopDetector(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +stopDetector(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None

      @@ -5697,12 +5736,19 @@

      Detector

      Note

      Default: AUTO_TIMING

      -

      [Jungfrau][Moench][Gotthard][Ctb][Gotthard2] AUTO_TIMING, TRIGGER_EXPOSURE

      +

      [Jungfrau][Moench][Gotthard][Ctb][Gotthard2][Xilinx Ctb] AUTO_TIMING, TRIGGER_EXPOSURE

      [Mythen3] AUTO_TIMING, TRIGGER_EXPOSURE, GATED, TRIGGER_GATED

      [Eiger] AUTO_TIMING, TRIGGER_EXPOSURE, GATED, BURST_TRIGGER

      +
      +
      +property timing_info_decoder
      +

      [Jungfrau] [Jungfrau] Advanced Command and only for SWISSFEL and SHINE. Sets the bunch id or timing info decoder. Default is SWISSFEL. +Enum: timingInfoDecoder

      +
      +
      property timinglist
      @@ -5734,7 +5780,7 @@

      Detector
      property transceiverenable
      -

      [Ctb] Transceiver Enable Mask. Enable for each 4 transceiver channel.

      +

      [CTB][Xilinx CTB] Transceiver Enable Mask. Enable for each 4 transceiver channel.

      @@ -5751,7 +5797,7 @@

      Detector
      property triggersl
      -

      [Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of triggers left in acquisition.

      +

      [Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB][Xilinx CTB] Number of triggers left in acquisition.

      Note

      Only when external trigger used.

      @@ -5809,7 +5855,7 @@

      Detector
      property tsamples
      -

      [CTB] Number of transceiver samples expected.

      +

      [CTB][Xilinx CTB] Number of transceiver samples expected.

      @@ -6049,17 +6095,17 @@

      Detector
      -updateDetectorServer(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) None
      +updateDetectorServer(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) None

      -updateFirmwareAndServer(self: _slsdet.CppDetectorApi, arg0: str, arg1: str, arg2: List[int] = []) None
      +updateFirmwareAndServer(self: _slsdet.CppDetectorApi, arg0: str, arg1: str, arg2: list[int] = []) None
      -updateKernel(self: _slsdet.CppDetectorApi, arg0: str, arg1: List[int] = []) None
      +updateKernel(self: _slsdet.CppDetectorApi, arg0: str, arg1: list[int] = []) None
      @@ -6076,31 +6122,31 @@

      Detector
      property v_a
      -

      [Ctb] Power supply a in mV.

      +

      [Ctb][Xilinx Ctb] Power supply a in mV.

      property v_b
      -

      [Ctb] Power supply b in mV.

      +

      [Ctb][Xilinx Ctb] Power supply b in mV.

      property v_c
      -

      [Ctb] Power supply c in mV.

      +

      [Ctb][Xilinx Ctb] Power supply c in mV.

      property v_d
      -

      [Ctb] Power supply d in mV.

      +

      [Ctb][Xilinx Ctb] Power supply d in mV.

      property v_io
      -

      [Ctb] Power supply io in mV. Minimum 1200 mV.

      +

      [Ctb][Xilinx Ctb] Power supply io in mV. Minimum 1200 mV.

      Note

      Must be the first power regulator to be set after fpga reset (on-board detector server start up).

      @@ -6110,12 +6156,12 @@

      Detector
      property v_limit
      -

      [Ctb] Soft limit for power supplies (ctb only) and DACS in mV.

      +

      [Ctb][Xilinx Ctb] Soft limit for power supplies (ctb only) and DACS in mV.

      -validateUDPConfiguration(self: _slsdet.CppDetectorApi, arg0: List[int] = []) None
      +validateUDPConfiguration(self: _slsdet.CppDetectorApi, arg0: list[int] = []) None
      @@ -6229,12 +6275,12 @@

      Detector
      -writeAdcRegister(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +writeAdcRegister(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: list[int] = []) None

      -writeRegister(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: List[int] = []) None
      +writeRegister(self: _slsdet.CppDetectorApi, arg0: int, arg1: int, arg2: bool = False, arg3: list[int] = []) None
      diff --git a/pyenums.html b/pyenums.html index 6ea6720..9aeb7fe 100644 --- a/pyenums.html +++ b/pyenums.html @@ -1,13 +1,15 @@ - + Enums — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
      - 8.0.2 + 9.0.0

    +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    • Troubleshooting
    • diff --git a/pygettingstarted.html b/pygettingstarted.html index 1e8887e..a28ca42 100644 --- a/pygettingstarted.html +++ b/pygettingstarted.html @@ -1,13 +1,15 @@ - + Getting Started — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
      - 8.0.2 + 9.0.0
    +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    • Troubleshooting
    • diff --git a/quick_start_guide.html b/quick_start_guide.html index da8deeb..25a3a66 100644 --- a/quick_start_guide.html +++ b/quick_start_guide.html @@ -1,13 +1,15 @@ - + Quick Start Guide — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
      - 8.0.2 + 9.0.0
    +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    • Troubleshooting
    • diff --git a/receiver_api.html b/receiver_api.html index 0f09057..ebf5631 100644 --- a/receiver_api.html +++ b/receiver_api.html @@ -1,13 +1,15 @@ - + Receiver — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
      - 8.0.2 + 9.0.0
    +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

  • REQRD_FRMWRE_VRSN

    0x230124

    0x241113

    KERNEL_DATE_VRSN

    Mon May 10 18:00:21 CEST 2021

    TEMPERATURE_FILE_NAME

    /sys/class/hwmon/hwmon0/temp1_input

    DAC_MAX_MV

    DAC_MIN_MV

    0

    DAC_MAX_MV

    2048

    TYPE_MYTHEN3_MODULE_VAL

    TYPE_MYTHEN3_MODULE_VAL

    93

    TYPE_TOLERANCE

    TYPE_TOLERANCE

    5

    TYPE_NO_MODULE_STARTING_VAL

    TYPE_NO_MODULE_STARTING_VAL

    800

    MAX_EXT_SIGNALS

    MAX_EXT_SIGNALS

    8

    DEFAULT_PATTERN_FILE

    DEFAULT_PATTERN_FILE

    DefaultPattern_mythen3.txt

    DEFAULT_INTERNAL_GATES

    DEFAULT_INTERNAL_GATES

    1

    DEFAULT_EXTERNAL_GATES

    DEFAULT_EXTERNAL_GATES

    1

    DEFAULT_DYNAMIC_RANGE

    DEFAULT_DYNAMIC_RANGE

    32

    DEFAULT_NUM_FRAMES

    DEFAULT_NUM_FRAMES

    1

    DEFAULT_NUM_CYCLES

    DEFAULT_NUM_CYCLES

    1

    DEFAULT_GATE_WIDTH

    DEFAULT_GATE_WIDTH

    100 * 1000 * 1000

    DEFAULT_GATE_DELAY

    DEFAULT_GATE_DELAY

    0

    DEFAULT_PERIOD

    DEFAULT_PERIOD

    2 * 1000 * 1000

    DEFAULT_DELAY_AFTER_TRIGGER

    DEFAULT_DELAY_AFTER_TRIGGER

    0

    DEFAULT_HIGH_VOLTAGE

    DEFAULT_HIGH_VOLTAGE

    0

    DEFAULT_TIMING_MODE

    DEFAULT_TIMING_MODE

    AUTO_TIMING

    DEFAULT_SETTINGS

    DEFAULT_SETTINGS

    STANDARD

    DEFAULT_TRIMBIT_VALUE

    DEFAULT_TRIMBIT_VALUE

    0

    DEFAULT_COUNTER_DISABLED_VTH_VAL

    DEFAULT_COUNTER_DISABLED_VTH_VAL

    2800

    DEFAULT_READOUT_C0

    10

    DEFAULT_READOUT_C1

    10

    DEFAULT_READOUT_SPEED

    HALF_SPEED

    DEFAULT_SYSTEM_C0

    10

    DEFAULT_TRIMMING_RUN_CLKDIV

    40

    DEFAULT_READOUT_C0_STARTUP

    FULL_SPEED_CLKDIV

    10

    HALF_SPEED_CLKDIV

    20

    QUARTER_SPEED_CLKDIV

    40

    DEFAULT_ASIC_LATCHING_NUM_PULSES

    10

    FIXED_PLL_FREQUENCY

    020000000

    READOUT_PLL_VCO_FREQ_HZ

    1000000000

    SYSTEM_PLL_VCO_FREQ_HZ

    SYSTEM_PLL_VCO_FREQ_HZ

    1000000000

    MAX_NUM_DESERIALIZERS

    MAX_NUM_DESERIALIZERS

    40

    BIT16_MASK

    BIT16_MASK

    0xFFFF

    MAX_TRIMBITS_VALUE

    MAX_TRIMBITS_VALUE

    63

    NUMSETTINGS

    NUMSETTINGS

    3

    NSPECIALDACS

    NSPECIALDACS

    2

    SPECIALDACINDEX

    SPECIALDACINDEX

    {M_VRPREAMP, M_VRSHAPER};

    SPECIAL_DEFAULT_STANDARD_DAC_VALS

    SPECIAL_DEFAULT_STANDARD_DAC_VALS

    { 1100, 1280 }

    SPECIAL_DEFAULT_FAST_DAC_VALS

    SPECIAL_DEFAULT_FAST_DAC_VALS

    { 300, 1500 }

    SPECIAL_DEFAULT_HIGHGAIN_DAC_VALS

    SPECIAL_DEFAULT_HIGHGAIN_DAC_VALS

    { 1300, 1100 }

    NUM_CLOCKS_TO_SET

    3

    NUM_CLOCKS_TO_SET

    1

    SYSTEM_PLL

    1

    UDP_IP_HEADER_LENGTH_BYTES

    28

    REQRD_FRMWRE_VRSN

    0x221123

    0x241003

    KERNEL_DATE_VRSN

    Mon May 10 18:00:21 CEST 2021

    CTRL_SRVR_INIT_TIME_US

    3 * 1000 * 1000

    CTRL_SRVR_INIT_TIME_US

    300 * 1000

    NCHAN

    NCHAN

    128

    NCHIP

    NCHIP

    10

    NDAC

    NDAC

    16

    NADC

    NADC

    32

    ONCHIP_NDAC

    ONCHIP_NDAC

    7

    DYNAMIC_RANGE

    DYNAMIC_RANGE

    16

    HV_SOFT_MAX_VOLTAGE

    HV_SOFT_MAX_VOLTAGE

    500

    HV_HARD_MAX_VOLTAGE

    HV_HARD_MAX_VOLTAGE

    530

    HV_DRIVER_FILE_NAME

    HV_DRIVER_FILE_NAME

    /etc/devlinks/hvdac

    DAC_DRIVER_FILE_NAME

    DAC_DRIVER_FILE_NAME

    /etc/devlinks/dac

    ONCHIP_DAC_DRIVER_FILE_NAME

    ONCHIP_DAC_DRIVER_FILE_NAME

    /etc/devlinks/chipdac

    TYPE_FILE_NAME

    TYPE_FILE_NAME

    /etc/devlinks/type

    TEMPERATURE_FILE_NAME

    TEMPERATURE_FILE_NAME

    /tmp/temp.txt

    TEMPERATURE_FILE_NAME

    TEMPERATURE_FILE_NAME

    /sys/class/hwmon/hwmon0/temp1_input

    CONFIG_FILE

    CONFIG_FILE

    config_gotthard2.txt

    DAC_MIN_MV

    0

    DAC_MAX_MV

    2048

    INITIAL_STARTUP_WAIT

    1 * 1000 * 1000

    DEFAULT_BURST_MODE

    WAIT_HIGH_VOLTAGE_SETTLE_TIME_S

    10

    DEFAULT_BURST_MODE

    BURST_INTERNAL

    DEFAULT_FILTER_RESISTOR

    DEFAULT_FILTER_RESISTOR

    0

    DEFAILT_CDS_GAIN

    DEFAILT_CDS_GAIN

    0

    DEFAULT_FRAME_NUMBER

    1

    DEFAULT_NUM_FRAMES

    1

    CTRL_SRVR_INIT_TIME_US

    2 * 1000 * 1000

    CTRL_SRVR_INIT_TIME_US

    300 * 1000

    NCHAN

    NCHAN

    400 * 400

    NCHIP

    NCHIP

    1

    NDAC

    NDAC

    8

    DYNAMIC_RANGE

    DYNAMIC_RANGE

    16

    NUM_BYTES_PER_PIXEL

    NUM_BYTES_PER_PIXEL

    DYNAMIC_RANGE / 8

    DATA_BYTES

    DATA_BYTES

    NCHIP * NCHAN * NUM_BYTES_PER_PIXEL

    CLK_RUN

    CLK_RUN

    40

    ADC_CLK_INDEX

    ADC_CLK_INDEX

    0

    DEFAULT_NUM_FRAMES

    DEFAULT_NUM_FRAMES

    1

    DEFAULT_STARTING_FRAME_NUMBER

    DEFAULT_STARTING_FRAME_NUMBER

    1

    DEFAULT_NUM_CYCLES

    DEFAULT_NUM_CYCLES

    1

    DEFAULT_EXPTIME

    DEFAULT_EXPTIME

    10 * 1000

    DEFAULT_PERIOD

    DEFAULT_PERIOD

    2 * 1000 * 1000

    DEFAULT_DELAY

    DEFAULT_DELAY

    0

    DEFAULT_HIGH_VOLTAGE

    DEFAULT_HIGH_VOLTAGE

    0

    DEFAULT_TIMING_MODE

    DEFAULT_TIMING_MODE

    AUTO_TIMING

    DEFAULT_SETTINGS

    DEFAULT_SETTINGS

    G4_HIGHGAIN

    DEFAULT_TX_UDP_PORT

    DEFAULT_TX_UDP_PORT

    0x7e9a

    DEFAULT_TMP_THRSHLD

    DEFAULT_TMP_THRSHLD

    65 * 1000

    DEFAULT_FLIP_ROWS

    DEFAULT_FLIP_ROWS

    0

    DEFAULT_SPEED

    DEFAULT_SPEED

    HALF_SPEED

    DEFAULT_PARALLEL_ENABLE

    DEFAULT_PARALLEL_ENABLE

    0

    HIGHVOLTAGE_MIN

    HIGHVOLTAGE_MIN

    60

    HIGHVOLTAGE_MAX

    HIGHVOLTAGE_MAX

    200

    DAC_MIN_MV

    DAC_MIN_MV

    0

    DAC_MAX_MV

    DAC_MAX_MV

    2500

    MAX_FILTER_CELL_VAL

    MAX_FILTER_CELL_VAL

    12

    READ_N_ROWS_MULTIPLE

    READ_N_ROWS_MULTIPLE

    16

    MIN_ROWS_PER_READOUT

    MIN_ROWS_PER_READOUT

    16

    MAX_ROWS_PER_READOUT

    MAX_ROWS_PER_READOUT

    400

    ROWS_PER_PACKET

    ROWS_PER_PACKET

    8

    MAX_TIMESLOT_VAL

    MAX_TIMESLOT_VAL

    0x1F

    MAX_THRESHOLD_TEMP_VAL

    MAX_THRESHOLD_TEMP_VAL

    127999

    ASIC_FILTER_MAX_RES_VALUE

    ASIC_FILTER_MAX_RES_VALUE

    1

    MAX_SELECT_CHIP10_VAL

    MAX_SELECT_CHIP10_VAL

    63

    MAX_PHASE_SHIFTS

    MAX_PHASE_SHIFTS

    200

    BIT16_MASK

    BIT16_MASK

    0xFFFF

    ADC_DECMT_QUARTER_SPEED

    ADC_DECMT_QUARTER_SPEED

    0x3

    ADC_DECMT_HALF_SPEED

    ADC_DECMT_HALF_SPEED

    0x1

    ADC_DECMT_FULL_SPEED

    ADC_DECMT_FULL_SPEED

    0x0

    ADC_PHASE_DEG_QUARTER_SPEED

    ADC_PHASE_DEG_QUARTER_SPEED

    0

    ADC_PHASE_DEG_HALF_SPEED

    ADC_PHASE_DEG_HALF_SPEED

    0

    ADC_PHASE_DEG_FULL_SPEED

    ADC_PHASE_DEG_FULL_SPEED

    150

    ADC_OFST_QUARTER_SPEED

    ADC_OFST_QUARTER_SPEED

    0x12

    ADC_OFST_HALF_SPEED

    ADC_OFST_HALF_SPEED

    0x12

    ADC_OFST_FULL_SPEED

    ADC_OFST_FULL_SPEED

    0x12

    ADC_PORT_INVERT_VAL

    ADC_PORT_INVERT_VAL

    0x55555555

    SAMPLE_ADC_FULL_SPEED

    SAMPLE_ADC_FULL_SPEED

    SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL

    IP_HEADER_SIZE

    IP_HEADER_SIZE

    20

    UDP_IP_HEADER_LENGTH_BYTES

    UDP_IP_HEADER_LENGTH_BYTES

    28

    MASTER_NAMES

    MASTER_NAMES

    hardware, master, slave

    NUMSETTINGS

    NUMSETTINGS

    0

    MAX_TRANSCEIVER_MASK

    0xF

    UDP_HEADER_MAX_FRAME_VALUE

    MAX_TRANSCEIVER_SAMPLES

    0xFFFF

    UDP_HEADER_MAX_FRAME_VALUE

    0xFFFFFFFFFFFF

    HIGHVOLTAGE_MIN

    HIGHVOLTAGE_MIN

    60

    HIGHVOLTAGE_MAX

    HIGHVOLTAGE_MAX

    200

    DAC_MIN_MV

    DAC_MIN_MV

    0

    DAC_MAX_MV

    DAC_MAX_MV

    2500

    VCHIP_MIN_MV

    VCHIP_MIN_MV

    1673

    VCHIP_MAX_MV

    VCHIP_MAX_MV

    2668

    POWER_RGLTR_MIN

    POWER_RGLTR_MIN

    636

    POWER_RGLTR_MAX

    POWER_RGLTR_MAX

    2638

    VCHIP_POWER_INCRMNT

    VCHIP_POWER_INCRMNT

    200

    VIO_MIN_MV

    VIO_MIN_MV

    1200

    DIGITAL_IO_DELAY_MAXIMUM_PS

    DIGITAL_IO_DELAY_MAXIMUM_PS

    OUTPUT_DELAY_0_OTPT_STTNG_MSK >> OUTPUT_DELAY_0_OTPT_STTNG_OFST) * OUTPUT_DELAY_0_OTPT_STTNG_STEPS

    MAX_PHASE_SHIFTS_STEPS

    MAX_PHASE_SHIFTS_STEPS

    8

    WAIT_TME_US_FR_ACQDONE_REG

    WAIT_TME_US_FR_ACQDONE_REG

    100

    WAIT_TIME_US_PLL

    WAIT_TIME_US_PLL

    10 * 1000

    WAIT_TIME_US_STP_ACQ

    WAIT_TIME_US_STP_ACQ

    100

    WAIT_TIME_CONFIGURE_MAC

    WAIT_TIME_CONFIGURE_MAC

    2 * 1000 * 1000

    WAIT_TIME_PATTERN_READ

    WAIT_TIME_PATTERN_READ

    10

    WAIT_TIME_1US_FOR_LOOP_CNT

    WAIT_TIME_1US_FOR_LOOP_CNT

    50

    MSB_OF_64_BIT_REG_OFST

    MSB_OF_64_BIT_REG_OFST

    32

    LSB_OF_64_BIT_REG_OFST

    LSB_OF_64_BIT_REG_OFST

    0

    BIT32_MSK

    BIT32_MSK

    0xFFFFFFFF

    BIT16_MASK

    BIT16_MASK

    0xFFFF

    MAXIMUM_ADC_CLK

    MAXIMUM_ADC_CLK

    65

    PLL_VCO_FREQ_MHZ

    PLL_VCO_FREQ_MHZ

    800

    IP_HEADER_SIZE

    IP_HEADER_SIZE

    20

    UDP_IP_HEADER_LENGTH_BYTES

    UDP_IP_HEADER_LENGTH_BYTES

    28

    CTRL_SRVR_INIT_TIME_US

    4 * 1000 * 1000

    CTRL_SRVR_INIT_TIME_US

    300 * 1000

    NCHAN

    NCHAN

    256 * 256

    NCHIP

    NCHIP

    8

    NDAC

    NDAC

    8

    DYNAMIC_RANGE

    DYNAMIC_RANGE

    16

    NUM_BYTES_PER_PIXEL

    NUM_BYTES_PER_PIXEL

    DYNAMIC_RANGE / 8

    DATA_BYTES

    DATA_BYTES

    NCHIP * NCHAN * NUM_BYTES_PER_PIXEL

    CLK_RUN

    CLK_RUN

    40

    CLK_SYNC

    CLK_SYNC

    20

    ADC_CLK_INDEX

    ADC_CLK_INDEX

    1

    DBIT_CLK_INDEX

    DBIT_CLK_INDEX

    0

    CONFIG_FILE

    CONFIG_FILE

    config_jungfrau.txt

    DEFAULT_NUM_FRAMES

    DEFAULT_NUM_FRAMES

    100 * 1000 * 1000

    DEFAULT_STARTING_FRAME_NUMBER

    DEFAULT_STARTING_FRAME_NUMBER

    1

    DEFAULT_NUM_CYCLES

    DEFAULT_NUM_CYCLES

    1

    DEFAULT_EXPTIME

    DEFAULT_EXPTIME

    10 * 1000

    DEFAULT_PERIOD

    DEFAULT_PERIOD

    2 * 1000 * 1000

    DEFAULT_DELAY

    DEFAULT_DELAY

    0

    DEFAULT_HIGH_VOLTAGE

    DEFAULT_HIGH_VOLTAGE

    0

    DEFAULT_TIMING_MODE

    DEFAULT_TIMING_MODE

    AUTO_TIMING

    DEFAULT_SETTINGS

    DEFAULT_SETTINGS

    GAIN0

    DEFAULT_GAINMODE

    DEFAULT_GAINMODE

    DYNAMIC

    DEFAULT_TX_UDP_PORT

    DEFAULT_TX_UDP_PORT

    0x7e9a

    DEFAULT_TMP_CNTRL

    1

    DEFAULT_TMP_THRSHLD

    65 * 1000

    DEFAULT_PEDESTAL_LOOPS

    1

    HIGHVOLTAGE_MIN

    DEFAULT_TIMING_INFO_DECODER

    SWISSFEL

    DEFAULT_ELECTRON_COLLECTION_MODE

    0

    MAX_PEDESTAL_LOOPS

    0xFF

    HIGHVOLTAGE_MIN

    60

    HIGHVOLTAGE_MAX

    HIGHVOLTAGE_MAX

    200

    DAC_MIN_MV

    DAC_MIN_MV

    0

    DAC_MAX_MV

    DAC_MAX_MV

    2500

    MAX_FILTER_CELL_VAL

    MAX_FILTER_CELL_VAL

    12

    MIN_ROWS_PER_READOUT

    MIN_ROWS_PER_READOUT

    8

    MAX_ROWS_PER_READOUT

    MAX_ROWS_PER_READOUT

    512

    READ_N_ROWS_MULTIPLE

    READ_N_ROWS_MULTIPLE

    8

    MAX_TIMESLOT_VAL

    MAX_TIMESLOT_VAL

    0x1F

    MAX_THRESHOLD_TEMP_VAL

    MAX_THRESHOLD_TEMP_VAL

    127999

    MAX_STORAGE_CELL_VAL

    MAX_STORAGE_CELL_VAL

    15

    MAX_STORAGE_CELL_CHIP11_VAL

    MAX_STORAGE_CELL_CHIP11_VAL

    3

    MAX_STORAGE_CELL_DLY_NS_VAL

    MAX_STORAGE_CELL_DLY_NS_VAL

    ASIC_CTRL_EXPSRE_TMR_MAX_VAL

    ACQ_TIME_MIN_CLOCK

    ACQ_TIME_MIN_CLOCK

    2

    ASIC_FILTER_MAX_RES_VALUE

    ASIC_FILTER_MAX_RES_VALUE

    1

    MAX_SELECT_CHIP10_VAL

    MAX_SELECT_CHIP10_VAL

    63

    MAX_PHASE_SHIFTS

    MAX_PHASE_SHIFTS

    240

    BIT16_MASK

    BIT16_MASK

    0xFFFF

    GAIN_VAL_OFST

    GAIN_VAL_OFST

    14

    GAIN_VAL_MSK

    GAIN_VAL_MSK

    0x3 << GAIN_VAL_OFST

    ADC_PORT_INVERT_VAL

    ADC_PORT_INVERT_VAL

    0x5A5A5A5A

    ADC_PORT_INVERT_BOARD2_VAL

    ADC_PORT_INVERT_BOARD2_VAL

    0x453b2a9c

    SAMPLE_ADC_FULL_SPEED_CHIP11

    SAMPLE_ADC_FULL_SPEED_CHIP11

    SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + SAMPLE_DGTL_SAMPLE_0_VAL + SAMPLE_DECMT_FACTOR_FULL_VAL

    SAMPLE_ADC_HALF_SPEED_CHIP11

    SAMPLE_ADC_HALF_SPEED_CHIP11

    SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + SAMPLE_DGTL_SAMPLE_1_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL

    SAMPLE_ADC_QUARTER_SPEED_CHIP11

    SAMPLE_ADC_QUARTER_SPEED_CHIP11

    SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_3_VAL + SAMPLE_DGTL_SAMPLE_2_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL

    ADC_PHASE_FULL_SPEED_CHIP11

    ADC_PHASE_FULL_SPEED_CHIP11

    160

    ADC_PHASE_HALF_SPEED_CHIP11

    ADC_PHASE_HALF_SPEED_CHIP11

    160

    ADC_PHASE_QUARTER_SPEED_CHIP11

    ADC_PHASE_QUARTER_SPEED_CHIP11

    160

    DBIT_PHASE_FULL_SPEED_CHIP11

    DBIT_PHASE_FULL_SPEED_CHIP11

    80

    DBIT_PHASE_HALF_SPEED_CHIP11

    DBIT_PHASE_HALF_SPEED_CHIP11

    135

    DBIT_PHASE_QUARTER_SPEED_CHIP11

    DBIT_PHASE_QUARTER_SPEED_CHIP11

    135

    ADC_OFST_FULL_SPEED_VAL_CHIP11

    ADC_OFST_FULL_SPEED_VAL_CHIP11

    0x10

    ADC_OFST_HALF_SPEED_VAL_CHIP11

    ADC_OFST_HALF_SPEED_VAL_CHIP11

    0x08

    ADC_OFST_QUARTER_SPEED_VAL_CHIP11

    ADC_OFST_QUARTER_SPEED_VAL_CHIP11

    0x04

    SAMPLE_ADC_FULL_SPEED_CHIP10

    SAMPLE_ADC_FULL_SPEED_CHIP10

    SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + SAMPLE_DGTL_SAMPLE_1_VAL + SAMPLE_DECMT_FACTOR_FULL_VAL

    SAMPLE_ADC_HALF_SPEED_CHIP10

    SAMPLE_ADC_HALF_SPEED_CHIP10

    SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + SAMPLE_DGTL_SAMPLE_3_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL

    SAMPLE_ADC_QUARTER_SPEED_CHIP10

    SAMPLE_ADC_QUARTER_SPEED_CHIP10

    SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_3_VAL + SAMPLE_DGTL_SAMPLE_6_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL

    ADC_PHASE_FULL_SPEED_CHIP10

    ADC_PHASE_FULL_SPEED_CHIP10

    160

    ADC_PHASE_HALF_SPEED_CHIP10

    ADC_PHASE_HALF_SPEED_CHIP10

    160

    ADC_PHASE_QUARTER_SPEED_CHIP10

    ADC_PHASE_QUARTER_SPEED_CHIP10

    160

    DBIT_PHASE_FULL_SPEED_CHIP10

    DBIT_PHASE_FULL_SPEED_CHIP10

    125

    DBIT_PHASE_HALF_SPEED_CHIP10

    DBIT_PHASE_HALF_SPEED_CHIP10

    175

    DBIT_PHASE_QUARTER_SPEED_CHIP10

    DBIT_PHASE_QUARTER_SPEED_CHIP10

    175

    ADC_OFST_FULL_SPEED_VAL_CHIP10

    ADC_OFST_FULL_SPEED_VAL_CHIP10

    0x10

    ADC_OFST_HALF_SPEED_VAL_CHIP10

    ADC_OFST_HALF_SPEED_VAL_CHIP10

    0x08

    ADC_OFST_QUARTER_SPEED_VAL_CHIP10

    ADC_OFST_QUARTER_SPEED_VAL_CHIP10

    0x04

    SAMPLE_ADC_HALF_SPEED_BOARD2

    SAMPLE_ADC_HALF_SPEED_BOARD2

    SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + SAMPLE_DGTL_SAMPLE_3_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL

    SAMPLE_ADC_QUARTER_SPEED_BOARD2

    SAMPLE_ADC_QUARTER_SPEED_BOARD2

    SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + SAMPLE_DGTL_SAMPLE_6_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL

    ADC_PHASE_HALF_SPEED_BOARD2

    ADC_PHASE_HALF_SPEED_BOARD2

    110

    ADC_PHASE_QUARTER_SPEED_BOARD2

    ADC_PHASE_QUARTER_SPEED_BOARD2

    220

    DBIT_PHASE_HALF_SPEED_BOARD2

    DBIT_PHASE_HALF_SPEED_BOARD2

    150

    DBIT_PHASE_QUARTER_SPEED_BOARD2

    DBIT_PHASE_QUARTER_SPEED_BOARD2

    150

    ADC_OFST_HALF_SPEED_BOARD2_VAL

    ADC_OFST_HALF_SPEED_BOARD2_VAL

    0x10

    ADC_OFST_QUARTER_SPEED_BOARD2_VAL

    ADC_OFST_QUARTER_SPEED_BOARD2_VAL

    0x08

    IP_HEADER_SIZE

    IP_HEADER_SIZE

    20

    UDP_IP_HEADER_LENGTH_BYTES

    UDP_IP_HEADER_LENGTH_BYTES

    28

    MASTER_NAMES

    MASTER_NAMES

    hardware, master, slave

    NUMSETTINGS

    NUMSETTINGS

    2

    NSPECIALDACS

    NSPECIALDACS

    3

    SPECIALDACINDEX

    SPECIALDACINDEX

    {J_VREF_PRECH, J_VREF_DS, J_VREF_COMP};

    SPECIAL_DEFAULT_DYNAMIC_GAIN_VALS

    SPECIAL_DEFAULT_DYNAMIC_GAIN_VALS

    { 1450, 480, 420 }

    SPECIAL_DEFAULT_DYNAMICHG0_GAIN_VALS

    SPECIAL_DEFAULT_DYNAMICHG0_GAIN_VALS

    { 1550, 450, 620 }

    CTRL_SRVR_INIT_TIME_US

    2 * 1000 * 1000

    CTRL_SRVR_INIT_TIME_US

    300 * 1000

    CONFIG_FILE

    CONFIG_FILE

    config_gotthard.txt

    NCHAN

    NCHAN

    128

    NCHIP

    NCHIP

    10

    NDAC

    NDAC

    8

    NCHIPS_PER_ADC

    NCHIPS_PER_ADC

    2

    NCHAN_PER_ADC

    NCHAN_PER_ADC

    256

    DYNAMIC_RANGE

    DYNAMIC_RANGE

    16

    NUM_BITS_PER_PIXEL

    NUM_BITS_PER_PIXEL

    DYNAMIC_RANGE / 8

    DATA_BYTES

    DATA_BYTES

    NCHIP * NCHAN * NUM_BITS_PER_PIXEL

    CLK_FREQ

    CLK_FREQ

    32007729

    MAX_EXT_SIGNALS

    MAX_EXT_SIGNALS

    1

    IP_PACKET_SIZE_NO_ROI

    IP_PACKET_SIZE_NO_ROI

    NCHIP * (NCHAN / 2) * 2 + 14 + 20

    IP_PACKET_SIZE_ROI

    IP_PACKET_SIZE_ROI

    NCHIPS_PER_ADC * NCHAN * 2 + 14 + 20

    UDP_PACKETSIZE_NO_ROI

    UDP_PACKETSIZE_NO_ROI

    NCHIP * (NCHAN / 2) * 2 + 4 + 8 + 2

    UDP_PACKETSIZE_ROI

    UDP_PACKETSIZE_ROI

    NCHIPS_PER_ADC * NCHAN * 2 + 4 + 8 + 2

    DEFAULT_NUM_FRAMES

    DEFAULT_NUM_FRAMES

    1

    DEFAULT_NUM_CYCLES

    DEFAULT_NUM_CYCLES

    1

    DEFAULT_EXPTIME

    DEFAULT_EXPTIME

    1 * 1000 * 1000

    DEFAULT_PERIOD

    DEFAULT_PERIOD

    1 * 1000 * 1000 * 1000

    DEFAULT_DELAY

    DEFAULT_DELAY

    0

    DEFAULT_SETTINGS

    DEFAULT_SETTINGS

    DYNAMICGAIN

    DEFAULT_TIMING_MODE

    DEFAULT_TIMING_MODE

    AUTO_TIMING

    DEFAULT_TRIGGER_MODE

    DEFAULT_TRIGGER_MODE

    TRIGGER_IN_RISING_EDGE

    DEFAULT_HIGH_VOLTAGE

    DEFAULT_HIGH_VOLTAGE

    0

    DEFAULT_PHASE_SHIFT

    DEFAULT_PHASE_SHIFT

    120

    DEFAULT_TX_UDP_PORT

    DEFAULT_TX_UDP_PORT

    0xE185

    DAC_MIN_MV

    DAC_MIN_MV

    0

    DAC_MAX_MV

    DAC_MAX_MV

    2500

    ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Field

    Description

    jsonversion

    Version of the json header. -Value at 4 for v6.x.x and v7.x.x

    bitmode

    Bits per pixel [4|8|16|32]

    fileIndex

    Current file acquisition index

    detshape

    Geometry of the entire detector

    shape

    Geometry of the current port streamed out

    size

    Size of image of current port in bytesout

    acqIndex

    Frame number from the detector (redundant)

    frameIndex

    Frame number of current acquisition -(Starting at 0)

    progress

    Progress of current acquisition in %

    fname

    Current file name

    data

    1 if there is data following -0 if dummy header

    completeImage

    1 if no missing packets for this frame -in this port, else 0

    frameNumber

    Frame number -[From detector udp header]

    expLength

    subframe number (32 bit eiger) -or real time exposure time in 100ns (others) -[From detector udp header]

    packetNumber

    Number of packets caught for that frame

    detSpec1

    See here -[From detector udp header]

    timestamp

    Timestamp with 10 MHz clock -[From detector udp header]

    modId

    Module Id -[From detector udp header]

    row

    Row number in detector -[From detector udp header]

    column

    Column number in detector -[From detector udp header]

    detSpec2

    See here -[From detector udp header]

    detSpec3

    See here -[From detector udp header]

    detSpec4

    See here -[From detector udp header]

    detType -detSpec3

    Detector type enum -See Detector enum -[From detector udp header]

    version

    Detector header version. At 2 -[From detector udp header]

    flipRows

    1 if rows should be flipped. -Usually for Eiger bottom.

    quad

    1 if its an Eiger quad.

    addJsonHeader

    Optional custom parameters that is required -for processing code.

    -
    -
    -
    -

    SLS Receiver Header Format

    -
    -
    It is 112 bytes and consists of:
    -
    -
    -
    typedef struct {
    -    uint64_t frameNumber;
    -    uint32_t expLength;
    -    uint32_t packetNumber;
    -    uint64_t detSpec1;
    -    uint64_t timestamp;
    -    uint16_t modId;
    -    uint16_t row;
    -    uint16_t column;
    -    uint16_t detSpec2;
    -    uint32_t detSpec3;
    -    uint16_t detSpec4;
    -    uint8_t detType;
    -    uint8_t version;
    -} sls_detector_header;
    -
    -struct sls_receiver_header {
    -    sls_detector_header detHeader; /**< is the detector header */
    -    sls_bitset packetsMask;        /**< is the packets caught bit mask */
    -};
    -
    -
    -
    -

    Note

    -
    -
    The packetNumber in the SLS Receiver Header will be modified to number of packets caught by receiver for that frame. For eg. Jungfrau will have 128 packets per frame. If it is less, then this is a partial frame due to missing packets.
    -
    -
    -
    Furthermore, the bit mask will specify which packets have been received.
    -
    -
    -
    -
    -

    File format

    -

    Master file is in json format.

    -

    The file name format is [fpath]/[fname]_dx_fy_[findex].raw, where x is module index and y is file index. fname is file name prefix and by default “run”. fpath is ‘/’ by default.

    -

    Each acquisition will have an increasing acquisition index or findex (if file write enabled). This can be retrieved by using findex command.

    -

    Each acquisition can have multiple files (the file index number y), with rx_framesperfile being the maximum number of frames per file. The default varies for each detector type.

    -

    Some file name examples:

    -
    -
    # first file
    -path-to-file/run_d0_f0_0.raw
    -
    -# second file after reaching max frames in first file
    -path-to-file/run_d0_f1_0.raw
    -
    -# second acquisition, first file
    -path-to-file/run_d0_f0_1.raw
    -
    -
    -
    -

    Each acquisition will create a master file that can be enabled/disabled using fmaster. This should have parameters relevant to the acquisition.

    -

    Binary file format

    -

    This is the default file format.

    -

    Each data file will consist of frames, each consisting of slsReceiver Header followed by data for 1 frame.

    -

    Master file is of ASCII format and will also include the format of the slsReceiver Header.

    -

    HDF5 file formats

    -
      -
    1. Compile the package with HDF5 option enabled

      -
      -
        -
      1. Using cmk script: ./cmk.sh -hj9 -d [path of hdf5 dir]

      2. -
      3. Enable using cmake -DCMAKE_INSTALL_PREFIX=/path/to/hdf/installation and -DSLS_USE_HDF5=ON

      4. -
      -
      -
    2. -
    3. Start Receiver process

    4. -
    5. Load config file

    6. -
    7. -
      Set file format from client or in config file
      sls_detector_put fformat hdf5
      -
      -
      -
      -
      -
    8. -
    -
    -
    For multiple, modules, a virtual file linking all the modules is created. Both the data files and virtual files are linked in the master file.
    -
    -

    Performance

    Please refer to Receiver PC Tuning options and slsReceiver Tuning under Troubleshooting.

    @@ -532,7 +282,7 @@

    Using Callbacks - +
    diff --git a/slsreceiverheaderformat.html b/slsreceiverheaderformat.html new file mode 100644 index 0000000..e3725b6 --- /dev/null +++ b/slsreceiverheaderformat.html @@ -0,0 +1,220 @@ + + + + + + + SLS Receiver Header Format — slsDetectorPackage documentation + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    SLS Receiver Header Format

    +
    +
    It is 112 bytes and consists of:
      +
    • 48 bytes of the SLS Detector Header

    • +
    • 64 bytes of packet mask

    • +
    +
    +
    +
    typedef struct {
    +    uint64_t frameNumber;
    +    uint32_t expLength;
    +    uint32_t packetNumber;
    +    uint64_t detSpec1;
    +    uint64_t timestamp;
    +    uint16_t modId;
    +    uint16_t row;
    +    uint16_t column;
    +    uint16_t detSpec2;
    +    uint32_t detSpec3;
    +    uint16_t detSpec4;
    +    uint8_t detType;
    +    uint8_t version;
    +} sls_detector_header;
    +
    +struct sls_receiver_header {
    +    sls_detector_header detHeader; /**< is the detector header */
    +    sls_bitset packetsMask;        /**< is the packets caught bit mask */
    +};
    +
    +
    +
    +
    sls_detector_header (described in the current detector header)
    +
    +
    +
    The packetNumber from detector UDP header is modified in sls_receiver_header to number of packets caught by receiver for that frame and the bit mask for each packet caught is the packetsMask. The packetsMask is a total of 512 bits due to the largest number of packets per frame among our detectors.
    +
    +
    +
    For eg. Jungfrau has 128 packets per frame. If packetNumeber is 128, then this frame is complete. If it is 127 or less, it is a partial frame due to missing packets. If one would still like to use it, the packetsMask will specify which packet has been received or is missing.
    +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/troubleshooting.html b/troubleshooting.html index 803d70b..cff6532 100644 --- a/troubleshooting.html +++ b/troubleshooting.html @@ -1,13 +1,15 @@ - + Troubleshooting — slsDetectorPackage documentation - - - + + + + + @@ -21,7 +23,7 @@ - + @@ -36,7 +38,7 @@ slsDetectorPackage
    - 8.0.2 + 9.0.0
    @@ -99,6 +101,19 @@
  • Receivers
  • slsReceiver/ slsMultiReceiver
  • +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    Jungfrau

    @@ -764,7 +790,7 @@

    Temperature event occured - +
    diff --git a/type_traits.html b/type_traits.html index cc72b48..badbb8c 100644 --- a/type_traits.html +++ b/type_traits.html @@ -1,13 +1,15 @@ - + TypeTraits — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
    - 8.0.2 + 9.0.0
    @@ -100,6 +102,19 @@
  • Receivers
  • slsReceiver/ slsMultiReceiver
  • +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    diff --git a/udpconfig.html b/udpconfig.html index 303b98b..35f8152 100644 --- a/udpconfig.html +++ b/udpconfig.html @@ -1,13 +1,15 @@ - + Config file — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
    - 8.0.2 + 9.0.0
    @@ -108,6 +110,19 @@
  • Receivers
  • slsReceiver/ slsMultiReceiver
  • +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    • Troubleshooting
    • diff --git a/udpdetspec.html b/udpdetspec.html index ef227fc..499cbec 100644 --- a/udpdetspec.html +++ b/udpdetspec.html @@ -1,13 +1,15 @@ - + Detector Specific Fields — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
      - 8.0.2 + 9.0.0
    +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    • Troubleshooting
    • diff --git a/udpheader.html b/udpheader.html index 7514ffe..774ff2a 100644 --- a/udpheader.html +++ b/udpheader.html @@ -1,13 +1,15 @@ - + Format — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
      - 8.0.2 + 9.0.0
    +

    Receiver Files

    + +

    Receiver ZMQ Stream

    +

    Troubleshooting

    • Troubleshooting
    • @@ -137,12 +152,29 @@

      Format

      -

      The UDP data format for the packets consist of a common header for all detectors, followed by the data for that one packet.

      +

      The UDP data format for the packets consist of a common header of 48 bytes for all detectors, followed by the data for that one packet.

      Current Version

      v2.0 (slsDetectorPackage v7.0.0+)

      - - +
      typedef struct {
      +    uint64_t frameNumber;
      +    uint32_t expLength;
      +    uint32_t packetNumber;
      +    uint64_t detSpec1;
      +    uint64_t timestamp;
      +    uint16_t modId;
      +    uint16_t row;
      +    uint16_t column;
      +    uint16_t detSpec2;
      +    uint32_t detSpec3;
      +    uint16_t detSpec4;
      +    uint8_t detType;
      +    uint8_t version;
      +} sls_detector_header;
      +
      +
      +
      <—————————————————- 8 bytes per row ———————————————>
      +@@ -195,7 +227,7 @@

      Description -

      Detector Enum

      +

      Detector Enum

      <—————————————————- 8 bytes per row ———————————————>
      @@ -239,8 +271,8 @@

      Detector Enum

      Previous Versions

      v2.0 (Package v4.0.0 - 6.x.x)

      -

      - +
      <—————————————————- 8 bytes —————————————————->
      +@@ -271,8 +303,8 @@

      Previous Versions -

      +
      <—————————————————- 8 bytes —————————————————-> <—————————————————- 8 bytes —————————————————->
      +diff --git a/virtualserver.html b/virtualserver.html index 9ac80a6..d352407 100644 --- a/virtualserver.html +++ b/virtualserver.html @@ -1,13 +1,15 @@ - + Simulators — slsDetectorPackage documentation - - - + + + + + @@ -37,7 +39,7 @@ slsDetectorPackage
      - 8.0.2 + 9.0.0
      @@ -114,6 +116,19 @@
    • Receivers
    • slsReceiver/ slsMultiReceiver
    • +

      Receiver Files

      + +

      Receiver ZMQ Stream

      +

      Troubleshooting

      <—————————————————- 8 bytes —————————————————->
      ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      Field

      Description

      jsonversion

      Version of the json header. +Value at 4 for v6.x.x and v7.x.x

      bitmode

      Bits per pixel [4|8|16|32]

      fileIndex

      Current file acquisition index

      detshape

      Geometry of the entire detector

      shape

      Geometry of the current port streamed out

      size

      Size of image of current port in bytesout

      acqIndex

      Frame number from the detector (redundant)

      frameIndex

      Frame number of current acquisition +(Starting at 0)

      progress

      Progress of current acquisition in %

      fname

      Current file name

      data

      1 if there is data following +0 if dummy header

      completeImage

      1 if no missing packets for this frame +in this port, else 0

      frameNumber

      Frame number +[From detector udp header]

      expLength

      subframe number (32 bit eiger) +or real time exposure time in 100ns (others) +[From detector udp header]

      packetNumber

      Number of packets caught for that frame

      detSpec1

      See here +[From detector udp header]

      timestamp

      Timestamp with 10 MHz clock +[From detector udp header]

      modId

      Module Id +[From detector udp header]

      row

      Row number in detector +[From detector udp header]

      column

      Column number in detector +[From detector udp header]

      detSpec2

      See here +[From detector udp header]

      detSpec3

      See here +[From detector udp header]

      detSpec4

      See here +[From detector udp header]

      detType +detSpec3

      Detector type enum +See Detector enum +[From detector udp header]

      version

      Detector header version. At 2 +[From detector udp header]

      flipRows

      1 if rows should be flipped. +Usually for Eiger bottom.

      quad

      1 if its an Eiger quad.

      addJsonHeader

      Optional custom parameters that is required +for processing code.

      +
    +

    + + + + + + + +
    + + + + + \ No newline at end of file