Merge branch '7.0.0.rc' into developer

This commit is contained in:
maliakal_d 2022-12-06 11:30:14 +01:00
commit 50f2165c55
6 changed files with 851 additions and 135 deletions

View File

@ -2,7 +2,7 @@
# Copyright (C) 2021 Contributors to the SLS Detector Package # Copyright (C) 2021 Contributors to the SLS Detector Package
cmake_minimum_required(VERSION 3.12) cmake_minimum_required(VERSION 3.12)
project(slsDetectorPackage) project(slsDetectorPackage)
set(PROJECT_VERSION 6.1.1) set(PROJECT_VERSION 7.0.0)
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")

View File

@ -1,144 +1,828 @@
SLS Detector Package Minor Release 7.0.0 released on 25.11.2021 SLS Detector Package Minor Release 7.0.0.rc1 released on xx.11.2021
=============================================================== ===================================================================
This document describes the differences between v7.0.0 and v6.x.x This document describes the differences between v7.0.0.rc1 and v6.1.2
CONTENTS CONTENTS
-------- --------
1. New or Changed Features 1. New, Changed or Resolved Features
2. Resolved Issues 1.1. Compilation
3. Firmware Requirements 1.2. Callback
4. Kernel Requirements 1.3. Python
5. Download, Documentation & Support 1.4. Client
1.5. Detector Server
1.6. Simulator
1.7. Receiver
2. Firmware Requirements
3. Kernel Requirements
4. Download, Documentation & Support
@Erik:- adding LTO to test and disable them for Debug builds?
@Erik:- support external build of python lib,
1. New or Changed Features 1. New or Changed Features
========================== ==========================
- Fixed minor warnings (will fix commandline print of excess packets for missing packets)
- ctb slow adcs and any other adcs (other than temp) goes to the control Server 1.1. Compilation
- number of udp interfaces is 2 for Eiger (CHANGE IN API??) ----------------
- added module id for virtual servers into the udp header
- refactoring (rxr)
- fixed patsetbit and patsetmask for moench General:
- changed default vref of adc9257 to 2V for moench (from 1.33V)
- moench and ctb - can set the starting frame number of next acquisition
- mythen server kernel check incompatible (cet timezone) * Custom location to find ZeroMQ
- rx_arping Option to provide a custom location to look for ZeroMQ, if not found
- rx_threadsids max is now 9 (breaking api) using FindZeroMQ.cmake
- fixed datastream disabling for eiger. Its only available in 10g mode.
- m3 server crash (vthrehsold dac names were not provided)
- allow vtrim to be interpolated for Eiger settings For example, to use the system installed zmq:
- m3 setThresholdEnergy and setAllThresholdEnergy was overwriting gaincaps with settings enum Using cmake: -DZeroMQ_HINT=/usr/lib64
- can set localhost with virtual server with minimum configuration: (hostname localhost, rx_hostname localhost, udp_dstip auto) Using cmk.sh script: -q /usr/lib64
- increases the progress according to listened index. (not processed index)
- current frame index points to listened frame index (not processed index)
- when in discard partial frames or empty mode, the frame number doesnt increase by 1, it increases to that number (so its faster) * Support external build
- file write disabled by default Assuming already installed version of the slsDetectorPacakge exists,
- eiger 12 bit mode external build of python bindings, gui, ctbgui and moench has been added.
- start non blocking acquisition at modular level
- connect master commands to api (allow set master for eiger)
--ignore-config command line * Catch updated to latest 2.x version due to build failure in fedora
- command line argument 'master' mainly for virtual servers (also master/top for real eiger), only one virtual server for eiger, use command lines for master/top
- stop servers also check for errors at startup( in case it was running with an older version)
- hostname cmd failed when connecting to servers in update mode (ctb, moench, jungfrau, eiger)
- missingpackets signed (negative => extra packets) Gui:
- framescaught and frameindex now returns a vector for each port
- progress looks at activated or enabled ports, so progress does not stagnate
- (eiger) disable datastreaming also for virtual servers only for 10g * Qt5 and in-built compressed Qwt 6.1.5
- missing packets also takes care of disabled ports Ported from Qt4 to Qt5.
- added geometry to metadata Compressed Qwt 6.1.5 added into the package in libs. It is unpacked and built
- 10g eiger nextframenumber get fixed. as a static library.This allows us to remove qwt as an external dependency
- stop, able to set nextframenumber to a consistent (max + 1) for all modules if different (eiger/ctb/jungfrau/moench) and reduces the risk of picking up the wrong version.
- ctb: can set names for all the dacs
- fpga/kernel programming, checks if drive is a special file and not a normal file
- gotthard 25 um image reconstructed in gui and virtual hdf5 (firmware updated for slave to reverse channels) Python:
- master binary file in json format now
- fixed bug introduced in 6.0.0: hdf5 files created 1 file per frame after the initial file which had maxframesperfile
- rx_roi * Install python extension
- m3 polarity, interpolation (enables all counters when enabled), pump probe, analog pulsing, digital pulsing Option to copy the python extension (slsdet folder and _slsdet-..so)
- updatedetectorserver - removes old server current binary pointing to for blackfin to CMAKE_INSTALL_PREFIX/python using
- removing copydetectorserver using tftp -DSLS_INSTALL_PYTHONEXT
- registerCallBackRawDataReady and registerCallBackRawDataModifyReady now gives a sls_receiver_header* instead of a char*, and uint32_t to size_t
- registerCallBackStartAcquisition gave incorrect imagesize (+120 bytes). corrected.
- registerCallBackStartAcquisition parameter is a const string reference * Pybind11 (v2.10.0)
- m3 (runnig config second time with tengiga 0, dr !=32, counters !=0x7) calculated incorrect image size expected Pybind11 is removed as a submodule and instead built into package to
- fixed row column indexing (mainly for multi module Jungfrau 2 interfaces ) simplify for users. Now, there is no more need to clone with the '--recursive'
- eiger gui row indices not flipped anymore (fix in config) argument or to update submodule when switching to this package version
- m3 (settings dac check disabled temporarily?) and above.
- m3 virtual server sends the right pacets now
- gap pixels in gui enabled by default
- rxr src files and classes (detectordata, ZmqSocket, helpDacs) added to sls namespace, and macros (namely from logger (logINFO etc)), slsDetectorGui (make_unique in implemtnation requires sls nemspace (points to std otherwise) but not deectorImpl.cpp) * Conda packages
- blackfin programing made seamless (nCE fixed which helps) Removed conda packages for python 3.6 and 3.7. Added for python 3.11.
-save settings file for m3 and eiger
- m3 threshold changes
- g2 and m3 clkdiv 2 (system clock) change should affect time settings (g2: exptime, period, delayaftertrigger, burstperiod, m3: exptime, gatedelay, gateperiod, period, delayaftertrigger)
- g2 system frequency is the same irrespective of timing source 1.2. Callback
- (apparently) rxr doesnt get stuck anymore from 6.1.1 -------------
- rxr mem size changed (fifo header size from 8 to 16) due to sls rxr header = 112.. 112+ 16=128 (reduces packet losss especially for g2)
-udp_srcip and udp_Srcip2: can set to auto (for virtual or 1g data networks)
- set dataset name for all hdf5 files to "data" only * Datatype of Metadata [registerCallBackRawDataReady, registerCallBackRawDataModifyReady]
- number of storage cells is not updated in teh receiver. done. and also allowing it to be modified in running status Datatype changed from char* to sls_receiver_header.
- refactored memory structure in receiver and listener code (maybe resolves stuck issue, need to check)
- callback modified to have rx header and not rx header pointer
- adapted for g2 hdi v2.0. able to set master from server command line, server config file, and client. * Datatype of Size [registerCallBackRawDataReady, registerCallBackRawDataModifyReady]
- rx udp socket refactored (maybe resolves getting stuck?)remove check for eiger header and isntead checks for malformed packets for every detector Datatype changed from uint32_t to size_t
- jungfrau sw trigger , blocking trigger
-help should not create a new object
- jungfrau master * Datatype of file name and file path [registerCallBackStartAcquisition]
- g2 parallel command Datatype changed from string to const string reference.
- jungfrau sync
- m3 bad channels (badchannel file also for g2 extended to include commas and colons, remove duplicates)
- m3 fix for gain caps to invert where needed when loading from trimbit file (fix for feature might have been added only in developer branch) * Incorrect image size [registerCallBackStartAcquisition]
- pat loop and wait address default Fixed. It used to give +120 bytes.
- ctb and moench Fw fixed (to work with pattern commdand) )addreess length
- setting rx_hostname (or udp_dstip with rx_hostname not none) will always set udp_dstmac. solves problem of chaing udp_dstip and udp_dstmac stays the same
- jungfrau reset core and usleep removed (fix for 6.1.1 is now fixed in firmware) * [Gotthard2] 25um Image reconstruction for 2 modules
- m3 clock update, m3 clk 4 and 5 cannot be set First module (master) interleaves with second modules(slave). First channel
- g2 change clkdivs 2 3 4 to defaults for burst and cw mode. of master is first channel of detector.
- ctb and moench: allowing 1g non blocking acquire to send data
- m3 and g2 rr Requires firmware update to reverse channels of slaves.
- m3 and g2 temp
- gain plot zooming fixed (disabled, acc. to main plot)
- ctb, moench, jungfrau (pll reset at start fixed, before no defines)
- pybind built into package, no need to update submodule when previous release had different pybind version 1.3. Python
- adcvpp moved from dac.. and api added (ctb, moench) -----------
- qt4->qt5
- in built qt5 6.1.5 because rhel7 is not upto date with qt5, removed findqwt.cmake
- made a fix in qwt lib (qwt_plot_layout.h) to work with 5.15 and lower versions * Defines in sls_detector_defs
- qt5 forms fixed, qt4 many hard coding forms switched to forms including qtabwidget, scrolls etc, fonts moved to forms sls_detetor_defs parsed and #defines extracted into defines.py
- docking option enabled by default, removed option to disable docking feature from "Mode" For exmaple, one can use slsdet.LOCALHOST_IP
- added qVersionResolve utility functions to handle compatibility before and after qt5.12
- qtplots (ian's code) takes in gain mode enable to set some settings within the class, with proper gain plot ticks
- ensure gain plots have no zooming of z axis in 2d and y axis in 1d * Python sub-microsecond resolution
- fixed some error messages in server side that were empty for fail in funcs (mostly minor as if this error, major issues) Reading back sub-microsecond exposure times from the Python API fixed by
- eiger (removed feb reset in stop acquisition as it caused processing bit to randomly not go high (leads to infinite loop waiting for it to go high). This is anyway done at prepare acquisition and set trimbits. addig Python datetime supports only micro seconds as lowest unit.
- left AND right registers monitored for processing bit done
- febProcessinginprogress returns STATUS_IDLE and not IDLE This is fixed by introducing a new C++ type (DurationWrapper), which
- In feb stop acquisition, if processing bit is running forever, checks for 1 s, then if acq done bit is high, returns ok, else throws holds number of nanoseconds as a uint64_t (only in python bindings) and
- feb stop acquisition returns 1 if success and fucntion in list calling it compares properly instead of STATUS_IDLE (no effect, but incorrect logic) custom typecaster to convert to and from std::chrono::nanoseconds.
- chipsignals to trimquad should only monitor right fpga (not both as it will throw)
- fixed error messages of readregister inconsistent values A get using API now returns in DurationWrapper, instead of datetime.
- setmodule and read frame was returning fail without setting error messages (leading to broken tcp connection due to no error message) ) Refer exptime help for examples.
- gui nios temperature added
- detector header change (bunchid, reserved, debug, roundRnumber) ->detSpec1 - 4
-ctb and moench (allowing all clkdivs (totaldiv was a float instead of int)) 1.4. Client
- txndelay_ ->txdelay_ (also for python), txdelay = delay for all with step -----------
- hardwareversion
- jungfrau connected moduleid to detid_jungfrau.txt on board
Breaking API:
* Versioning
The client, receiver and detector servers now have semantic Versioning
along with the date and are managed with the Version class.
--version argument to the executable gives the complete versioning with date.
Using the client to get versions gives only the semantic version. An older
server will still give date. Hence, the return type is a string, breaking API.
Compatibility checks at hostname or rx_hostname command will only be for
backwards compatibility (ie. it only checks for the major version number).
If its an old server, then its expected to have the exact same date (as
before)
Setting intitialchecks to 0 also bypasses the receiver compatibility check.
* Detector Specific fields
bunchid ->detSpec1
reserved->detSpec2
debug->detSpec3
roundRnumber->detSpec4
Further details about each detector specific field can be found at:
https://slsdetectorgroup.github.io/devdoc/udpdetspec.html
* Namespace sls
All files in slsSupportLib and tests have now been moved to sls namespace
including macros. Using the LOG, for example, will require the sls qualifier.
* [Eiger] Number of UDP interfaces
Command line: numinterfaces, API: getNumberofUDPInterfaces
This command now reflects the actual number of udp interfaces for Eiger,
which is 2.
* [Eiger][Jungfrau] Row column
[Jungfrau] Fixed row column indexing for multi module 2 interfaces
[Eiger] The row indicies were switched across the Y axis for the callback
only for Eiger. This is now changed and kept similar to the other detectors.
The row indices would be in the order of the half modules in the hostname
command. Therefore, to keep the image from callback, invert the hostname
order in the config file.
* Deprecated CopyDetectorServer
Command line: copydetectorserver, API: copydetectorserver
Removed. Use updatedetectorserver
* [Eiger][Jugfrau][Mythen3] Deprecated specific transmission delay commands
txndelay_frame -> txdelay_frame
txndelay_left -> txdelay_left
txndelay_right -> txdelay_right
* [Eiger] Datastream only for 10GbE
Command line: datastream, API: getDataStream/ setDataStream
This command to enable/ disable data stream from left or right port
is now allowed only for 10GbE. Previously, it incorrectly allowed to do so.
* [Eiger][Jungfrau][Moench][Ctb] Stop command effect on next frame number
Stopping acquisition sometimes results in different next frame numbers
for different moduels. Hence, after a stop, if the next frame numbers are
different, they are all set to their maximum value + 1.
* Missing packets
Command line: rx_missingpackets, API: getNumMissingPackets
This now returns a signed 64 bit instead of unsigned. The negative polarity
depicts extra packets instead of missing packets and also takes care of
disabled ports.
* Frames caught and frame index
Command line rx_framescaught, rx_frameindex, API: getFramesCaught/ getRxCurrentFrameIndex
They now return a vector for each port when there are 2 udp interfaces
in the receiver.
* [Gotthard][Gotthard2] Num modules
Only 2 modules allowed maximum in a detector shared memory.
* [Moench][Ctb][Mythen3] Deprecated commands
Patloopx, patnloopx, patwaitx, patwaittimex
Please use instead patloop, patnloop, patwait and patwaittime commands
with the level as an argument.
Old commands work with warning, but the server expects the new ones
such as a default pattern file to be loaded at startup for Moench.
Renamed patternParameters struct member from 'loop' to 'startloop' and
'stoploop'.
* [Mythen3] Clock Divider 4 and 5
Cannot be set anymore. Only read back.
New commands:
* [Eiger][Gotthard][Gotthard2][Mythen3][Jungfrau] Master
Setting up from client:
[Eiger][Gotthard2][Jungfrau]
Command line: master, API: getMaster/ setMaster
All of them can get master mode from the client.
This can also be set up on the detector server. Please refer to notes
on that section.
* [Eiger] Top
Command line: top, API: getTop/ setTop
Sets the half module to top or bottom from the client.
This can also be set up on the detector server. Please refer to notes
on that section.
* [Mythen3][Eiger] Save settings file
Command line: trimbits (sls_detector_get), API: saveTrimbits
Added
* [Gotthard2] Parallel readout added
Command line: parallel, API: getParallelMode/ setParallelMode
Default for Gotthard2 is parallel. Non parallel mode only works in
continuous mode.
* [Jungfrau] Software trigger added
Command line: trigger, API: sendSoftwareTrigger
Send software trigger instead of harware trigger.
* [Eiger][Jungfrau] Blocking trigger
Commandline: blockingtrigger, API: sendSoftwareTrigger with argument true
Sends software trigger signal to detector and blocks until the frames
are sent out for that trigger.
* [Jungfrau] Sync
Command line: sync, API: getSynchronization/ setSynchronization
Enables or disables synchronization between modules
* [Gotthard2][Mythen3] Temperature readout
Command line: temp_fpga, API: getTemperature with TEMPERATURE_FPGA enum
Added
* [Gotthard2][Mythen3] Round robin added
Command line: udp_dstlist, API: getDestinationUDPList/ setDestinationUDPList
Command line: udp_numdst, API: getNumberofUDPDestinations
One can set up to 32 (64 for Mythen3) entries in the destination list.
* [Jungfrau] Module Id
Command line: moduleid, API: getModuleId
16 bit value (ideally unique) that is streamed out in the udp header of
the detector. The on-board detector server picks it up from a file
(if it exists) called detid_jungfrau.txt.
* [Jungfrau][[Gotthard2][Myhten3][Gotthard][Ctb][Moench] Hardware version
Command line: hardwareversion, API: getHardwareVersion
Gets the board or hardware version.
For example, Jungfrau returns 1.0 or 2.0.
It is also printed at on-board detector server start up.
Also printed before starting FPGA programming.
* [Eiger][Jugfrau][Mythen3] Transmission Delay
Command line: tx_delay, API: getTransmissionDelay/ setTransmissionDelay
Sets transmission delay for all modules in the detector using the step
size provided. Sets up for every module:
[Eiger] txdelay_left to (2 * mod_index * n_delay)
[Eiger] txdelay_right to ((2 * mod_index + 1) * n_delay)
[Eiger] txdelay_frame to (2 *num_modules * n_delay)
[Jungfrau][Mythen3] txdelay_frame to (num_modules * n_delay)
* [Mythen3] Bad channels
Command line: badchannels, API: getBadChannels/ setBadChannels
Set bad channels from file with a list of channels, which will be masked
out. Also does trimming. A detector level command will require the channel
numbers accordingly. The file also extended to include commas, colons range)
and removes duplicates.
* [Moench][Ctb] Starting frame number
Command line: nextframenumber, API: getNextFrameNumber/ setNextFrameNumber
Added and default set up on detector server start up.
* [Ctb] DAC names
Command line: daclist, API: getDacNames/ setDacNames
Can set and get dac names in the dac list now.
* [Mythen3] Polarity, interpolation, pump probe, analog pulsing, digital pulsing
Command line: polarity, interpolation, pumpprobe, apulse, dpulse
API: getPolarity/ setPolarity, getInterpolation/ setInterpolation,
getPumpProbe/ setPumpProbe, getAnalogPulsing/ setAnalogPulsing,
getDigitalPulsing/ setDigitalPulsing
Added these commands.
Enabling interpolation will also enable all counters and disable vth3.
Disabling sets to previous counter mask and previous vth values.
In pump probe mode, only vth2 enabled. Disabling sets vth2 to prevevious
value.
Setting counter mask will check interpolation and pump probe mode
requirements, else sets vthx dacs according to counter mask.
Direct overwrite of any dac (including vthx) allowed using dac command
(as before).
New commands for Receiver only:
* Arping for 10GbE
Command line: rx_arping API: getRxArping/ setRxArping
Starts a thread in the receiver to arping the interface it is listening
to in 10GbE mode every 60 s.
Changes NUM_RX_THREAD_IDS (sls_detector_defs.h) from 8 to 9.
* Receiver Region of Interest
Command line: rx_roi, API: getRxROI/ setRxROI
Command line: rx_clearroi, API: clearRxROI
One can set an ROI in the receiver to write to file. 1D detectors can set
xmin and xmax, whereas the 2D can also set ymin and ymax. -1 values signify
no ROI.
This is not at network level and can only be used to reduce size of file.
Virtual HDF5 files not created when this is enabled and also no link in
master file. No file created if module not in ROI.
There can only be one ROI per detector. Therefore, can be set only at
detector level, but can be retrieved at module level as well.
The GUI still shows the entire image, but has a yellow border around the
ROI. Status bar displays a message when Rx ROI enabled.
Additonal Features:
* Non-blocking start
Allowing non-blocking start at modular level again.
* [Jungfrau][Moench][Ctb] Additional programming checks
Also checks if the drive to write to is a special file or a normal
file. If its a normal file, it throws asking to redo the command with a
'--please-delete' argument to delete the normal file and create the device
drive and restart FPGA programming.
More readable error message insetad of "programfpga not implemented for
this detector'. This happens when 'hostname' command fails due to
server-firmware/client compatibility and the detector type becomes
'GENERIC'. Fixed to suggest if 'hostname' executed properly.
* Udp Source IP
Command line: udp_srcip(2), API: getSourceUDPIP(2)/ setSourceUDPIP(2)
One can also set this to 'auto' for 1 GbE data. It will set to IP of
rx_hostname (as in udp_dstip)
* Incrementing default receiver tcp port
Automatically incrementing the default receiver tcp port for every module
when creating shared memory.
Changes or Fixes:
* Free and config command fail
Free and config command checked mismatch of size of shared memory before
freeing or loading new config. Fixed.
* sls_detector_help or sls_detector_get -h
Should not create Detector object. Fixed.
* [Jungfrau] Storage cells in running receiver
Allowing the possibility to set this when receiver in running state.
* [Eiger] Vtr
Allow Vtrim to be interpolated for settings.
* [Mythen3] Incorrect gain caps when setting threshold energy
Gain caps overwritten with settings enum. Fixed.
* [Mythen3] Non blocking start acquisition
Non-blocking start acquisition was sent out twice to the master. Fixed.
* [Mythen3] Threshold
When settings trimbits or threshold, counter mask is set and hence,
vthx dacs are set accordingly.
setAllThresholdEnergy takes 3 values for each counter and if one of them
is -1, the trimbits and setings for that counter is picked up from the
detector.
* [Moench][Ctb] Pattern levels
Changed from 3 to 6.
* [Mythen3][Moench][Ctb] Default patwait and patloop addresses
Set default wait and loop addresses to 0x1fff (max value) for all levels
before loading pattern. Please use the pattern command instead of parameters.
This ensures defaults are set up and is faster.
* [Moench] Patsetbit and patsetmask
Command line: patsetbit API: getPatternBitMask/ setPatternBitMask
Command line: patmask API: getPatternMask/ setPatternMask
Exchanging the help and masks for patsetbit and patsetmask in the detector
server, especially in loading settings.
* [Moench][Ctb] ADC Vpp
Command line: adcvpp, API: getADCVpp/ setADCVpp
Moved from SetDAC function into into its own. One can use mV values or
option numbers as before.
* [Ctb] ADC command goes back to control server
Slow ADCs, slow ADC temperature, get measured current and voltage values
are requested via the control server again insetad of the stop server
due to configuration and definitions in the control server.
1.5. Detector Server
--------------------
Config file:
* [Eiger][Gotthard2][Gotthard] Master
Using config file with 'master' with argument (master=1, slave=0)
* [Eiger] Top
Using config file with 'top' with argument (top=1, bottom=0)
Command line arguments:
* They have precedence over config files.
* [Eiger][Gotthard2 Virtual][Mythen3 Virtual][Gotthard Virtual] Master
Using command line '--master = 1' or '-m = 1' with argument
(master = 1, slave = 0)
* [Eiger] Top
Using command line '--top = 1' or '-t = 1' with argument (top=1, bottom=0)
* Ignore config file
The config files can also be ignored by an argument from the command line,
'--ignore-config' or '-i'.
Fixes:
* [Jungfrau][Eiger] Clear UDP destination
Command line: udp_cleardst, API: clearUDPDestinations
Clearing udp destination also clears it in the FPGA now.
* [Eiger] Incorrect next frame number
Command line: nextframenumber, API: getNextFrameNumber/ setNextFrameNumber
Get next frame number for 10g was connected to 1g registers and gave
incorrect values. Fixed.
* [Mythen3][Gotthard2] System clock change effects
When changing the system clock (clkdiv 2), time settings should also be
affected (exptime, period etc.). Fixed.
[Gotthard2] System frequency should be same irrespective of timing source.
Fixed.
* [Mythen3] Kernel version compatibility test
Fix added to parse properly the kernel version with CET for corrected
version compatibility test.
* [Mythen3] Server crash for setting vthrehsold
Fixed.
* [Mythen3] Incorrect gaincaps
Setting threshold energy was overwriting gaincaps with settings enum. Fixed.
* [Ctb][Moench] Hostname fail in update mode.
Fixed
Changes:
* [Jungfrau] Temporary fix for stop in 6.1.1
Temporary fix introduced in 6.1.1 for not being able to start after a
stop command has been issued is removed. Reset core right after also has
been removed. It has been fixed in firmware instead.
* [Gotthard2] Clock Divider defaults
When chancing burst mode, clock dividers (2, 3 and 4) set to their
defaults according to burst mode.
* [Mythen3] DAC check for settings
Verify DAC values for each setting has been temporarily switched off
* [Mythen3] DAC min and max values
Vtrim minimum of 600 has been removed.
The threshold dacs minimum is 200 and maximum is 2400.
The other DACs minimum is 0 and maximum is 2800.
When out of range, will not throw, just a warning.
* [Mythen3] Vicin Dac changed to 800
* [Jungfrau][Moench][Ctb] PLL reset at server start up
PLL reset now at server start up.
* [Moench] ADC9257 Vref
ADC Vref voltage modified from 1.33V to 2V
* [Ctb] Allow all clock dividers for PLL
Fixed. For example, 133 MHz would not really be set previously. Fixed by
changing totaldiv from float to an integer.
Additional Features:
* Stop server startup errors
Stop servers now also check for errors at startup (including version
compatibility) and like the control server, it will translate to the
client when connecting for the first time (hostname command).
* [Jungfrau][Moench][Ctb] Additional server update process
Removes old server binary or target of linked file when updating
detector server for blackfin detectors as there is less space on blackfin.
Clearing up absolute and respawn path (removing double '/')
Raise error if server name to be copied is the same as final soft link name.
* [Moench][Ctb] 1 GbE Non blocking acquisition
Previously non blocking acquisition in 1 GbE would not send data.
This feature added now.
* [Gotthard2] Adapted to new HDI version
HDI module ID written to FPGA register
1.6. Simulator
--------------
* Command line arguments. Please refer to previous section on Detector Server.
* [Eiger] Only one executable
Only one executable for an Eiger virtual server. Master and top mode
can be provided via command line or config file to the detector server,
as well as via the client. See in Other New Features for more details.
One can start a module using:
eigerDetectorServer_virtual # reads default config file (top master)
eigerDetectorServer_virtual -i #ignores the config file (bottom slave)
* [Eiger][Junfrau][Gotthard2][Mythen3] Module Id
Added into udp header
* Minimum Configuration
One can setup with just:
hostname localhost
rx_hostname localhost
udp_dstip auto
* [Mythen3] Packet size
Fixed packet size calculation. Previously, sending only header with no data.
1.7. Receiver
-------------
Breaking API:
* Namespace sls
All the receiver source files have also been added to namespace sls.
* HDF5 and Binary writer version
Changed from 6.3 to 6.4
* Master file format to json
The format has been changed from ASCII to json.
* Geometry metadata
Added geometry (number of modules in each direction) to metadata in file.
* HDF5 Dataset name
Changed to just "data" to simplify for user
* File write
File write is disabled by default.
Fixes:
* Refactored and fixed minor issues
Including memory structure and udp sockets.
Fixed progress also in discard partial packaets mode and deactivated ports.
Fixed 200% progress.
Completely padded images now have detector type or version in metadata.
Fixed getting stuck at stop receiver when using zmq
Fixed clang compiler warnings
* Multiple files
This bug was introduced in v6.0.0, where 1 file was created per frame
after the first file. Fixed by resetting the number of frames in
current file when creating a new one.
* [Eiger] Datastream command order
The order of commands to set datastream from client mattered previously.
Datastream had to be set before 10GbE enable. Order does not matter anymore.
* Udp destination MAC
If it has been set before, changing udp_dstip will not update udp_dstmac.
Fixed to always set it in detector even if it had a value before.
Udp_dstmac can still be used to overwrite again. This is useful when
using a router for example.
* Stuck when using zmq
More often in 6.1.1, gets stuck at stop receiver.
* [Mythen3] Incorrect number of packets calculated or tengiga not set up
Runnig config second time (with tengiga=0, dr !=32, counters !=0x7)
calculated incorrect image size expected due to inconsistent copy of
detector parameters. Fixed
* Storage cells in receiver
Previously not updated in receiver. Fixed.
* Virtual HDF5 Parameter datasets
Corner case bug when frames caught is not a multiple of frames per file.
Not found in virtual image datasets. Fixed.
Changes:
* Master file created at end of acquisition
The file is now written at the end of acquisition. So if any metadata
is changed during an acquisition, it will reflect the last value.
* File name prefix
Slash '/' not allowed.
Additional Features:
* [Gotthard2] 25um image reconstruction in virtual HDF5
Virtual HDF5 reconstructs complete image by interleaving first module
(master) with second module (slave). First channel of master is first
channel of detector.
Requires firmware update to reverse channels of slaves.
* Memory size
Increased an internal fifo header by 8 bytes to align memory allocated for
to receive images for efficiency.
1.8. Gui
--------
* [Jungfrau][Eiger] Gap pixels
Enabled by default in the gui.
* High voltage moved from Developer tab to Settings tab.
* Gain plot zooming
Zooming disabled. Instead, it automatically zooms in when you zoom in
the main plot or if min and max of x and y axis set up in plot tab.
* [Mythen3] Inconsistent timing mode
Timing mode of the slaves should be discarded before squashing. Fixed.
* [Mythen3][Gotthard2] Crashes
Additional locking Added
2. Resolved Issues
==================
- Reading back sub-microsecond exposure times from the Python API.
3. Firmware Requirements 3. Firmware Requirements
======================== ========================
G2 Firmware update to reverse channels of slaves.
Eiger Eiger
===== =====
Compatible version : 08.10.2021 (v29) Compatible version : 08.10.2021 (v29)

View File

@ -131,6 +131,22 @@ Gotthard2
+----------+------------------------------+ +----------+------------------------------+
Mythen3
----------
.. table:: Detector Specific Field
+----------+------------------------------+
| detSpec1 | 0 |
+----------+------------------------------+
| detSpec2 | 0 |
+----------+------------------------------+
| detSpec3 | 0 |
+----------+------------------------------+
| detSpec4 | 0 |
+----------+------------------------------+
.. [#] **Bunch Id**: bunch identification number received by the detector at the moment of frame acquisition. .. [#] **Bunch Id**: bunch identification number received by the detector at the moment of frame acquisition.
.. [#] **Train Id**: train identification number received by the detector at the moment of frame acquisition. .. [#] **Train Id**: train identification number received by the detector at the moment of frame acquisition.
.. [#] **Bunch Id**: bunch identification number to identify every single exposure during a burst acquisition. .. [#] **Bunch Id**: bunch identification number to identify every single exposure during a burst acquisition.

View File

@ -466,16 +466,32 @@ class Detector(CppDetectorApi):
----- -----
[Mythen3] sets exposure time to all gate signals in auto and trigger mode (internal gating). To specify gateIndex, use getExptime or setExptime. [Mythen3] sets exposure time to all gate signals in auto and trigger mode (internal gating). To specify gateIndex, use getExptime or setExptime.
:getter: always returns in seconds. To get in datetime.delta, use getExptime :getter: always returns in seconds. To get in DurationWrapper, use getExptime
Example Example
----------- -----------
>>> # setting directly in seconds
>>> d.exptime = 1.05 >>> d.exptime = 1.05
>>> d.exptime = datetime.timedelta(minutes = 3, seconds = 1.23) >>>
>>> # using timedelta (up to microseconds precision)
>>> from datatime import timedelta
>>> d.exptime = timedelta(seconds = 1, microseconds = 3)
>>>
>>> # using DurationWrapper to set in seconds
>>> from slsdet import DurationWrapper
>>> d.exptime = DurationWrapper(1.2)
>>>
>>> # using DurationWrapper to set in ns
>>> t = DurationWrapper()
>>> t.set_count(500)
>>> d.exptime = t
>>>
>>> # to get in seconds
>>> d.exptime >>> d.exptime
181.23 181.23
>>>
>>> d.getExptime() >>> d.getExptime()
[datetime.timedelta(seconds=181, microseconds=230000)] [sls::DurationWrapper(total_seconds: 1e-08 count: 10)]
""" """
if self.type == detectorType.MYTHEN3: if self.type == detectorType.MYTHEN3:
res = self.getExptimeForAllGates() res = self.getExptimeForAllGates()

View File

@ -665,7 +665,7 @@ class Detector {
* * * *
* ************************************************/ * ************************************************/
/** [Jungfrau][Gotthard2] */ /** [Jungfrau][Gotthard2][Eiger] */
Result<int> getNumberofUDPInterfaces(Positions pos = {}) const; Result<int> getNumberofUDPInterfaces(Positions pos = {}) const;
/** [Jungfrau][Gotthard2] Number of udp interfaces to stream data from /** [Jungfrau][Gotthard2] Number of udp interfaces to stream data from

View File

@ -1242,7 +1242,7 @@ class CmdProxy {
"\n\tOn-board detector server software version"); "\n\tOn-board detector server software version");
GET_COMMAND(hardwareversion, getHardwareVersion, GET_COMMAND(hardwareversion, getHardwareVersion,
"\n\tJungfrau][Gotthard2][Myhten3][Gotthard][Ctb][Moench] " "\n\t[Jungfrau][Gotthard2][Myhten3][Gotthard][Ctb][Moench] "
"Hardware version of detector."); "Hardware version of detector.");
GET_COMMAND( GET_COMMAND(