mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-05-10 14:50:02 +02:00
509 lines
15 KiB
Plaintext
509 lines
15 KiB
Plaintext
SLS Detector Package 4.0.0 released on 27.09.2018
|
|
=================================================
|
|
|
|
|
|
|
|
INTRODUCTION
|
|
|
|
This document describes the differences between 4.0.0 and 3.1.4 releases.
|
|
|
|
Download
|
|
--------
|
|
|
|
The Source Code (Default C++ API):
|
|
https://github.com/slsdetectorgroup/slsDetectorPackage
|
|
|
|
The Conda Lib Package:
|
|
https://github.com/slsdetectorgroup/sls_detector_lib
|
|
|
|
The Conda GUI Package:
|
|
https://github.com/slsdetectorgroup/sls_detector_gui
|
|
|
|
The Python Interface (including the package):
|
|
https://github.com/slsdetectorgroup/sls_detector
|
|
|
|
|
|
Documentation
|
|
-------------
|
|
|
|
Manual (HTML & PDF):
|
|
https://www.psi.ch/detectors/documentation
|
|
slsDetectorPackage/manual/docs/
|
|
|
|
Command Line Documentation:
|
|
manual/docs/html/slsDetectorClientDocs/index.html
|
|
manual/docs/pdf/slsDetectorClientDocs.pdf
|
|
|
|
C++ API Documentation:
|
|
manual/docs/html/slsDetectorUsersDocs/index.html
|
|
manual/docs/pdf/slsDetectorUsersDocs.pdf
|
|
|
|
C++ API Example:
|
|
manual/manual-api/mainClient.cpp
|
|
manual/manual-api/mainReceiver.cpp
|
|
|
|
Python API Documentation:
|
|
https://slsdetectorgroup.github.io/sls_detector/
|
|
|
|
Further Documentation:
|
|
https://www.psi.ch/detectors/users-support
|
|
|
|
|
|
Support
|
|
-------
|
|
|
|
General Software related:
|
|
dhanya.thattil@psi.ch
|
|
anna.bergamaschi@psi.ch
|
|
|
|
Python related:
|
|
erik.frojdh@psi.ch
|
|
|
|
|
|
|
|
CONTENTS
|
|
|
|
1. Firmware Requirements
|
|
2. Changes in User Interface
|
|
3. New/Modified Commands
|
|
4. Other New Features
|
|
5. Resolved Issues
|
|
6. Known Issues
|
|
7. Next Major Release Plans
|
|
|
|
|
|
|
|
1. Firmware Requirements
|
|
========================
|
|
|
|
Gotthard
|
|
========
|
|
Minimum compatible version : 11.01.2013
|
|
Latest version : 08.02.2018 (50um and 25um Master)
|
|
09.02.2018 (25 um Slave)
|
|
Eiger
|
|
=====
|
|
Minimum compatible version : 22
|
|
Latest version : 22
|
|
|
|
Jungfrau
|
|
========
|
|
Minimum compatible version : 15.06.2018
|
|
Latest version : 15.06.2018
|
|
|
|
|
|
Detector Upgrade
|
|
================
|
|
Gotthard Cannot be upgraded remotely. Requires programming via USB blaster
|
|
Eiger Can be upgraded remotely via bit files
|
|
Jungfrau Can be upgraded remotely using sls_detector_put programfpga <pof>
|
|
|
|
Instructions available at
|
|
https://www.psi.ch/detectors/installation-instructions
|
|
under Detector Upgrade -> [Detector Type] -> Firmware.
|
|
|
|
|
|
Please refer to the link below for more details on the firmware versions.
|
|
https://www.psi.ch/detectors/firmware.
|
|
|
|
|
|
|
|
2. Changes in User Interface
|
|
============================
|
|
|
|
Client
|
|
------
|
|
|
|
1. Shared Memory:
|
|
|
|
POSIX shared memory has been implemented and they are typically created in
|
|
/dev/shm/ folder.
|
|
|
|
A multiSlsDetector object will create a shared memory segment with naming style:
|
|
slsDetectorPackage_x_[_z]
|
|
and an slsDetector object will create a shared memory segment with naming style:
|
|
slsDetectorPackage_x_sls_y[_z]
|
|
|
|
where
|
|
x is the multi detector id
|
|
y is the sls detector id
|
|
z is the environment variable SLSDETNAME, if set.
|
|
They can be deleted directly.
|
|
|
|
Environment variable SLSDETNAME included for user-friendliness
|
|
of using 2 different detectors from the same client pc. One needn't use
|
|
different multi detector id if the SLSDETNAME is different for both consoles.
|
|
|
|
Constructor will fail if shared memory size is different (different package
|
|
releases/detectors). Loading config file cleans shared memory.
|
|
|
|
|
|
2. Exceptions in constructors:
|
|
|
|
All constructors that have an error throws an exception. For this release,
|
|
this is caught within the package and interfaced as error codes or messages
|
|
to the users using command line or API.
|
|
|
|
As a result:
|
|
- slsDetectorsUsers constructor signature now includes a success flag.
|
|
- If one uses multiSlsDetector, slsDetector, ZmqSocket classes directly,
|
|
catch exceptions from constructors.
|
|
- In future releases, the exception will be thrown
|
|
outside the package for the users to handle it.
|
|
|
|
|
|
3. API Compatibility:
|
|
|
|
Client now checks API version of Detector Server - Client and Receiver - Client
|
|
when connecting for the first time to detector server or receiver server
|
|
and the online flags have not been set in shm.
|
|
|
|
Upon failure, error messages will ensue and further commands will not
|
|
be executed. Detector servers referred to are only for Eiger, Jungfrau and Gotthard.
|
|
|
|
Previously, the detector server would exit on mismatched Firmware-Detector
|
|
server mismatch. They now wait for client to ask for compatibility check,
|
|
which is done the first time client connects to the detector and the
|
|
online flag in shm has not been set.
|
|
|
|
|
|
4. Commands "type", "id" and "replace" are removed.
|
|
|
|
|
|
Receiver
|
|
--------
|
|
|
|
1. Reciever Header Structure in file writing and call back:
|
|
|
|
sls_receiver_header structure added to sls_receiver_defs.h for image headers
|
|
in file writing.
|
|
|
|
#define MAX_NUM_PACKETS 512
|
|
typedef std::bitset<MAX_NUM_PACKETS> sls_bitset;
|
|
typedef struct {
|
|
sls_detector_header detHeader; /**< is the detector header */
|
|
sls_bitset packetsMask; /**< is the packets caught bit mask */
|
|
} sls_receiver_header;
|
|
|
|
It includes the detector header structure + bitmask of 512 bits,
|
|
where each bit represents a packet caught. This is useful in saving time
|
|
in writing to file by not padding missing packets and still retaining useful data.
|
|
|
|
The binary and HDF5 writer version number changed from 1.0 to 2.0.
|
|
The detector header version remains as 1.0.
|
|
|
|
registerCallBackRawDataReady modified to give this structure pointer,
|
|
instead of individual structure member pointers.
|
|
|
|
|
|
2. ZmqSocket class:
|
|
|
|
If one uses ZmqSocket.h, then the json header has to be parsed outside
|
|
the class to allow the user to remove the restriction in extracting all data
|
|
from the json header.
|
|
|
|
|
|
3. Receiver Call back with modified size:
|
|
|
|
registerCallBackRawDataModifyReady call back that is similar to the receiver
|
|
registerCallBackRawDataReady has been added to allow the call back to
|
|
specify an updated size of image after call back. This is in view to process
|
|
an image in call back (including extract only a region of the image) and
|
|
provide this updated size in callback. This new resized/processed image
|
|
will be written to file or streamed out via zmq. This is useful in ROI
|
|
selection in the receiver.
|
|
|
|
This also means that the call back is now called before writing to file.
|
|
|
|
|
|
|
|
3. New/Modified Commands
|
|
========================
|
|
|
|
Client
|
|
------
|
|
|
|
1. add (modified):
|
|
appends detector to end of multi detector list.
|
|
|
|
2. replace:
|
|
sets hostname/ip address for a single detector.
|
|
|
|
3. user:
|
|
get user details from shared memory.
|
|
|
|
4. checkdetversion:
|
|
checks client version compatibility with detector server.
|
|
|
|
5. checkrecversion:
|
|
checks client version compatibility with receiver server.
|
|
|
|
|
|
Receiver
|
|
--------
|
|
|
|
1. rx_zmqip:
|
|
sets/gets the zmq (TCP) ip of the receiver from where data is streamed
|
|
out from. (Eg. to the gui or intermediate process). By default, it is
|
|
the same as the zmqip.
|
|
|
|
2. zmqip:
|
|
sets/gets the zmq (TCP) ip, where client listens to, to reconstuct images.
|
|
(Eg. from receiver or intermediate process). By default, it is the same
|
|
as rx_zmqip.
|
|
|
|
3. rx_jsonaddheader:
|
|
sets/gets additional json header to be streamed out with the zmq from
|
|
receiver. Default is empty. Eg. p rx_jsonaddheader \"what\":\"nothing\"
|
|
|
|
4. r_discardpolicy:
|
|
sets/gets the frame discard policy in the receiver.
|
|
nodiscard - no discard (default),
|
|
discardempty - discard only empty frames,
|
|
discardpartial - discard any partial frame(fastest)
|
|
|
|
5. r_padding:
|
|
sets/gets the frame padding in the receiver.
|
|
0 does not pad partial frames(fastest),
|
|
1 (default) pads partial frames.
|
|
One can look at bitmask in the sls_receiver_header to process the unpadded
|
|
partial frames later.
|
|
|
|
6. activate (modified):
|
|
Extra option added to pad or unpad images in receivers when deactivated.
|
|
activate i [padding option], where i is activate/deactivate and padding
|
|
option is "padding" (default) or "nopadding".
|
|
|
|
7. rx_udpsocksize:
|
|
sets/gets the UDP socket buffer size. Already attempts to set by default
|
|
to 100mb, 2gb for Jungfrau. Does not remember custom values in client
|
|
shared memory, so must be initialized each time after setting receiver
|
|
hostname in config file.
|
|
|
|
8. rx_realudpsocksize:
|
|
gets the actual UDP socket buffer size. Usually double the set udp socket
|
|
buffer size due to kernel bookkeeping.
|
|
|
|
9. r_framesperfile:
|
|
sets/gets the frames per file in receiver. 0 means infinite or all frames
|
|
in a single file. Default of Eiger changed from 2k to 10k.
|
|
|
|
|
|
Eiger Specific
|
|
--------------
|
|
|
|
1. status trigger:
|
|
To trigger internally via software, one can use "status trigger".
|
|
|
|
2. subdeadtime:
|
|
sets/gets sub frame dead time in s in 32 bit mode. Subperiod is set in
|
|
the detector by subexptime + subdeadtime. This value is normally a
|
|
constant set by an expert catered to individual detector modules in the
|
|
config file. Receiver files writes master file metadata subperiod
|
|
instead of subdeadtime.
|
|
|
|
3. gappixels:
|
|
enables/disables gap pixels in system (detector & receiver). 1 sets,
|
|
0 unsets. In Receiver, 4 bit gap pixels mode is not implemented, but is
|
|
implemented in client data call back. Gap pixels are at module level
|
|
and not at multi module level.
|
|
|
|
4. measuredperiod:
|
|
gets the measured frame period (time between last frame and the previous
|
|
one) in s. Makes sense only for acquisitions of more than 1 frame.
|
|
|
|
5. measuredsubperiod:
|
|
gets the measured subframe period (time between last subframe and the
|
|
previous one) in s in 32 bit mode.
|
|
|
|
6. flags(modified):
|
|
extra flags "nooverflow" (default) and "overflow" for sub images in 32
|
|
bit mode. If set to overflow, it will set MSB of pixel data high if
|
|
there was any saturation in any of the sub images 32 bit mode.
|
|
|
|
|
|
Jungfrau Specific
|
|
-----------------
|
|
|
|
1. storagecells:
|
|
sets/gets number of additional storage cells per acquisition. For very
|
|
advanced users only. Range: 0-15. Default: 0.
|
|
The #images = #frames * #cycles * (#storagecells +1).
|
|
|
|
2. storage_start:
|
|
sets/gets the storage cell that stores the first acquisition of the series.
|
|
For very advanced users only. Range: 0-15. Default: 15(0xf).
|
|
|
|
|
|
|
|
4. Other New Features
|
|
=====================
|
|
|
|
Client
|
|
------
|
|
|
|
1. (Jungfrau & Gotthard) Settingsdir and caldir is removed from config file.
|
|
Default dacs are stored in detector server. Hence, these folders
|
|
are also removed from slsDetectorPackage/settingsdir. Eiger and Mythen
|
|
continue to have them.
|
|
|
|
2. Depending on 1d position of detectors and detsizechan in config file,
|
|
row and column (previously xcoord and ycoord) are given to detector
|
|
servers (Eiger and Jungfrau) to encode into the udp header.
|
|
|
|
3. (Eiger) Setting threshold energy changes such as CAL dac is irrelevant
|
|
when interpolating between two energies and VRS dac is interpolated, not copied.
|
|
|
|
4. Users API updated with the following functions:
|
|
- setReceiverFramesDiscardPolicy
|
|
- setReceiverPartialFramesPadding
|
|
- setReceiverFramesPerFile
|
|
- sendSoftwareTrigger
|
|
- setSubFrameExposureDeadTime
|
|
- setSubFrameExposureTime
|
|
- enableGapPixels
|
|
- getMeasuredPeriod
|
|
- getMeasuredSubFramePeriod
|
|
- setOverflowMode
|
|
- setNumberOfStorageCells
|
|
- setStoragecellStart
|
|
- setThresholdEnergy (overloaded)
|
|
- resetFramesCaughtInReceiver
|
|
- setReceiverFifoDepth
|
|
- setFlowControl10G
|
|
- setTenGigabitEthernet
|
|
- getNMods
|
|
- setReceiverDataStreamingOutIP
|
|
- setClientDataStreamingInIP
|
|
|
|
SlsReceiver
|
|
-----------
|
|
|
|
1. slsMultiReceiver executable added that creates multiple receiver child processes.
|
|
./slsMultiReceiver [start_tcp_port] [num_receivers] [1 for call back, 0 for none]
|
|
|
|
2. Default row and column (previously xcoord and ycoord) are hardcoded
|
|
for missing packets. (Eiger and Jungfrau)
|
|
|
|
|
|
Gui
|
|
---
|
|
|
|
1. (Jungfrau) Gain plot included. Option under 2D options in Plot tab.
|
|
|
|
2. Option to maintain aspect ratio
|
|
|
|
3. Start and Stop separated to prevent multiple click syndrome.
|
|
|
|
|
|
Detector Server
|
|
---------------
|
|
|
|
1. (Jungfrau) To use programfpga command, one must start server with -update
|
|
mode and then restart server without -update mode.
|
|
|
|
2. (Jungfrau) ASIC Timer configured at server start up and changed a few
|
|
startup values for firmware v0.7 such as adc phase, ADC_PORT_INVERT_VAL
|
|
and ADC offset half speed value.
|
|
|
|
3. (Jungfrau) Minimum exposure time of 50 us was implemented.
|
|
|
|
4. (Eiger and Jungfrau) They can be configured to have x and y coord values
|
|
of the detector in their udp header.
|
|
|
|
|
|
|
|
|
|
5. Resolved Issues
|
|
==================
|
|
|
|
Client
|
|
------
|
|
memory leak for multi threading
|
|
|
|
1. Compiler flag -std=c++98 enforced. Debug flag removed.
|
|
|
|
2. If trimen gives different list from different detectors, it returns a -1.
|
|
|
|
3. Version format for each submodule of the package changed to just date YYMMDD.
|
|
Users class fixed to give correct version, instead of -1.
|
|
|
|
4. Getting settings in users class gave -1. Fixed now.
|
|
|
|
5. (Jungfrau) Programming FPGA now creates the rawbin file from pof in tmp
|
|
rather than source file location (for permission issues).
|
|
|
|
6. (Gotthard) ROI segmentation fault fixed.
|
|
|
|
Receiver
|
|
--------
|
|
|
|
1. Silent feature of receiver fixed.
|
|
|
|
2. Socket descriptor misused earlier for success flag, instead exceptions
|
|
used that are handled inside the package.
|
|
|
|
3. Global optind variable initialized to instantiate multiple receivers
|
|
in same process. Also removed static members to enable this feature.
|
|
|
|
4. Socket buffer size attempts to set for each acquiistion and provide
|
|
warning if no capabilities. Warnings can be removed using instruction with
|
|
error provided. Default Jungfrau UDP socket buffer size if 2 GB, default is
|
|
100 MB.
|
|
|
|
5. Refactored code a bit for performance and robustness, blocking push
|
|
in buffer between listener and dataprocessor
|
|
|
|
|
|
Detector Server
|
|
---------------
|
|
|
|
1. (Jungfrau) Stop server also mapped during a reset. Reading power status
|
|
instead of user input register for power.
|
|
|
|
2. (Eiger) Bug fix for saving trimbits to file (Advanced users).
|
|
|
|
3. (Gotthard 25um) config.txt is not read again after detector startup,
|
|
no matter the number of times the detector server is restarted.
|
|
|
|
|
|
6. Known Issues
|
|
===============
|
|
|
|
Receiver
|
|
--------
|
|
|
|
1. HDF5 compression and filters are not implemented yet.
|
|
|
|
|
|
Detector Server
|
|
---------------
|
|
|
|
1. (Eiger) Registers mapped differently between firmware v20 and v22.
|
|
So, please ensure correct on-board server before switching between
|
|
firmware versions. Else one cannot ping it anymore. Will need to flash firmware
|
|
again to recover.
|
|
|
|
2. (Gotthard) To switch back to all ADC from single ADC ROI, one must take
|
|
even number of images for the receiver to understand complete images.
|
|
This will be fixed in the next firmware upgrade.
|
|
|
|
|
|
|
|
7. Next Major Release Plans
|
|
===========================
|
|
|
|
Client
|
|
------
|
|
|
|
1. Exceptions thrown to the user to be handled.
|
|
|
|
2. Compilation using c++11.
|
|
|
|
3. Support of Mythen II restricted to this major and its minor releases.
|
|
|
|
4. Restructuring and refactoring of client code.
|
|
|
|
|
|
|