Skip to content

Major Release Candidate: 7.0.0.rc1

Pre-release
Pre-release
Compare
Choose a tag to compare
@thattil thattil released this 12 Dec 11:47
· 290 commits to main since this release
  1. New or Changed Features

1.1. Compilation

General:


*   Custom location to find ZeroMQ
    Option to provide a custom location to look for ZeroMQ, if not found 
    using FindZeroMQ.cmake
    
    For example, to use the system installed zmq:
    Using cmake: -DZeroMQ_HINT=/usr/lib64 
    Using cmk.sh script: -q /usr/lib64


*   Support external build 
    Assuming already installed version of the slsDetectorPacakge exists, 
    external build of python bindings, gui, ctbgui and moench has been added.


*   Catch updated to latest 2.x version due to build failure in fedora



Gui:


*   Qt5 and in-built compressed Qwt 6.1.5
    Ported from Qt4 to Qt5. Minimum requirement: Qt 5.9
    Compressed Qwt 6.1.5 added into the package in libs. It is unpacked and built
    as a static library.This allows us to remove qwt as an external dependency
    and reduces the risk of picking up the wrong version.


Python:


*   Install python extension
    Option to copy the python extension (slsdet folder and _slsdet-..so)
    to CMAKE_INSTALL_PREFIX/python using
    -DSLS_INSTALL_PYTHONEXT


*   Pybind11 (v2.10.0)
    Pybind11 is removed as a submodule and instead built into package to
    simplify for users. Now, there is no more need to clone with the '--recursive'
    argument or to update submodule when switching to this package version 
    and above.


*   Conda packages
    Removed conda packages for python 3.6 and 3.7. Added for python 3.11.

1.2. Callback

*   Datatype of Metadata [registerCallBackRawDataReady, registerCallBackRawDataModifyReady]
    Datatype changed from char* to sls_receiver_header.


*   Datatype of Size [registerCallBackRawDataReady, registerCallBackRawDataModifyReady]
    Datatype changed from uint32_t to size_t


*   Datatype of file name and file path [registerCallBackStartAcquisition]
    Datatype changed from string to const string reference.


*   Incorrect image size [registerCallBackStartAcquisition]
    Fixed. It used to give +120 bytes.


*   [Gotthard2] 25um Image reconstruction for 2 modules
    First module (master) interleaves with second modules(slave). First channel
    of master is first channel of detector. 

    Requires firmware update to reverse channels of slaves.

1.3. Python

*   Defines in sls_detector_defs
    sls_detetor_defs parsed and #defines extracted into defines.py
    For exmaple, one can use slsdet.LOCALHOST_IP


*   Python sub-microsecond resolution
    Reading back sub-microsecond exposure times from the Python API fixed by 
    addig Python datetime supports only micro seconds as lowest unit. 
    
    This is fixed by introducing a new C++ type (DurationWrapper), which 
    holds number of nanoseconds as a uint64_t (only in python bindings) and 
    custom typecaster to convert to and from std::chrono::nanoseconds.

    A get using API now returns in DurationWrapper, instead of datetime.
    Refer exptime help for examples.

1.4. Client

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

    Header version number stays the same in the UDP header as there is no
    difference in the format from the detector. Only the structure memeber names
    have changed in sls_detector_defs.h

    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:


*   [Jungfrau][Gotthard2][Mythen3][Gotthard][Moench][Ctb] Can't stop
    This bug was introduced in 6.1.1, when stopping an acquisition saying it 
    cannot stop, even though it was successful. It is fixed now.


*   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
  1. On-board Detector Server Compatibility

    Eiger 7.0.0
    Jungfrau 7.0.0
    Mythen3 7.0.0
    Gotthard2 7.0.0
    Gotthard 7.0.0
    Moench 7.0.0
    Ctb 7.0.0

    On-board Detector Server Upgrade

    From v6.1.0 (without tftp):
    Using command 'updatedetectorserver'
    From 5.0.0 (with tftp):
    Using command 'copydetectorserver'

    Instructions available at
    https://slsdetectorgroup.github.io/devdoc/serverupgrade.html

  2. Firmware Requirements

    Eiger 17.02.2022 (v30)

    Jungfrau 04.11.2022 (v1.4, HW v1.0)
    03.11.2022 (v2.4, HW v2.0)

    Mythen3 05.12.2022 (v1.4)

    Gotthard2 23.11.2022 (v0.3)

    Gotthard 08.02.2018 (50um and 25um Master)
    09.02.2018 (25 um Slave)

    Moench 05.12.2022 (v0.3)

    Ctb 05.12.2022 (v1.1)

    Detector Upgrade

    The following can be upgraded remotely:

    Eiger via bit files
    Jungfrau via command <.pof>
    Mythen3 via command <.rbf>
    Gotthard2 via command <.rbf>
    Moench via command <.pof>
    Ctb via command <.pof>

    Gotthard cannot be upgraded remotely

    Except Eiger,
    upgrade
    Using command 'programfpga' or

     udpate both server and firmware simultaneously
         Using command 'update'
    

    Instructions available at
    https://slsdetectorgroup.github.io/devdoc/firmware.html

  3. Kernel Requirements

    Blackfin

    Latest version: Fri Oct 29 00:00:00 2021

    Older ones will work, but might have issues with programming firmware via
    the package.

    Nios

    Compatible version: Mon May 10 18:00:21 CEST 2021

    Kernel Upgrade

    Eiger via bit files
    Others via command

    Commands: udpatekernel, kernelversion
    Instructions available at
    https://slsdetectorgroup.github.io/devdoc/commandline.html
    https://slsdetectorgroup.github.io/devdoc/detector.html
    https://slsdetectorgroup.github.io/devdoc/pydetector.html