mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-16 14:57:13 +02:00
Merge branch 'developer' into rr_rxr
This commit is contained in:
26
RELEASE.txt
26
RELEASE.txt
@ -23,13 +23,13 @@ This document describes the differences between v6.0.0 and v5.1.0.
|
|||||||
Client
|
Client
|
||||||
------
|
------
|
||||||
1. Shared libraries
|
1. Shared libraries
|
||||||
They are versioned from this release on.
|
They are versioned from this release on (6.0.0).
|
||||||
|
|
||||||
2. [Jungfrau] Chip version
|
2. [Jungfrau] Chip version
|
||||||
Features for chipv1.1 incorporated
|
Features for chipv1.1 incorporated
|
||||||
Command line: chipversion, API: getchipVersion
|
Command line: chipversion, API: getchipVersion
|
||||||
gets chip version (1.0 or 1.1)
|
gets chip version (1.0 or 1.1)
|
||||||
chipv1.1 requires config_jungfrau.txt on detector server.
|
chipv1.1 requires config_jungfrau.txt on detector server and HW 2.0.
|
||||||
|
|
||||||
3. [Jungfrau] Chip configuration (only chipv1.1)
|
3. [Jungfrau] Chip configuration (only chipv1.1)
|
||||||
powering on the chip and changing settings will configure the chip.
|
powering on the chip and changing settings will configure the chip.
|
||||||
@ -39,13 +39,15 @@ This document describes the differences between v6.0.0 and v5.1.0.
|
|||||||
Settings can be gain0 and highgain0. Gain mode can be dynamicgain,
|
Settings can be gain0 and highgain0. Gain mode can be dynamicgain,
|
||||||
forceswitchg1, forceswitchg2, fixg1, fixg2, fixg0. fixg0 must be
|
forceswitchg1, forceswitchg2, fixg1, fixg2, fixg0. fixg0 must be
|
||||||
used with EXTRA caution as you can damage the detector.
|
used with EXTRA caution as you can damage the detector.
|
||||||
Changing settings also changes dac values of 3 dacs () and reconfigures
|
Changing settings also changes dac values of 3 dacs
|
||||||
chip (only v1.1)
|
(vref_prech, vref_ds and vref_comp) and reconfigures chip (only v1.1)
|
||||||
|
|
||||||
5. [Jungfrau] Storage cells (only chipv1.1)
|
5. [Jungfrau] Storage cells (only chipv1.1)
|
||||||
Additional number of storage cells not applicable for chipv1.1.
|
Additional number of storage cells not applicable for chipv1.1.
|
||||||
Storage cell start is only allowed from 0 - 3 for chipv1.1
|
Storage cell start is only allowed from 0 - 3 for chipv1.1
|
||||||
(0 - 15 for chipv1.0).
|
(0 - 15 for chipv1.0).
|
||||||
|
Command line: extrastoragecells, Previous Command line: storagecells
|
||||||
|
API: remains the same.
|
||||||
|
|
||||||
6. [Gotthard2][Jungfrau] Filter Resistor
|
6. [Gotthard2][Jungfrau] Filter Resistor
|
||||||
Command line: filterresistor, API: getFilterResistor/ setFilterResistor
|
Command line: filterresistor, API: getFilterResistor/ setFilterResistor
|
||||||
@ -55,11 +57,11 @@ This document describes the differences between v6.0.0 and v5.1.0.
|
|||||||
[Gotthard2] Options: [0|1|2|3]. Default is 0.
|
[Gotthard2] Options: [0|1|2|3]. Default is 0.
|
||||||
|
|
||||||
7. [Jungfrau] Filter cell (only chipv1.1)
|
7. [Jungfrau] Filter cell (only chipv1.1)
|
||||||
Command line: filtercell, API: getFilterCell/ setFilterCell
|
Command line: filtercells, API: getNumberOfFilterCells/ setNumberOfFilterCells
|
||||||
Set filter cell. Options: [0-12]. Advanced user command.
|
Set filter cell. Options: [0-12]. Advanced user command.
|
||||||
|
|
||||||
8. [Jungfrau] Comparator disable time (only chipv1.1)
|
8. [Jungfrau] Comparator disable time (only chipv1.1)
|
||||||
Command line: comp_disable_time, API: getComparatorDisableTime/
|
Command line: compdisabletime, API: getComparatorDisableTime/
|
||||||
setComparatorDisableTime
|
setComparatorDisableTime
|
||||||
One can customize the period to disable comparator.
|
One can customize the period to disable comparator.
|
||||||
|
|
||||||
@ -174,6 +176,10 @@ This document describes the differences between v6.0.0 and v5.1.0.
|
|||||||
slsReceiver and slsDetectorGui will not flip them again.
|
slsReceiver and slsDetectorGui will not flip them again.
|
||||||
[Eiger] same as before.
|
[Eiger] same as before.
|
||||||
|
|
||||||
|
28. [Jungfrau]
|
||||||
|
Command line changes: autocompdisable, Previous command line: auto_comp_disable
|
||||||
|
|
||||||
|
|
||||||
Detector servers
|
Detector servers
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
@ -244,7 +250,7 @@ This document describes the differences between v6.0.0 and v5.1.0.
|
|||||||
7. [Eiger] fast quad fix for loading trimbits
|
7. [Eiger] fast quad fix for loading trimbits
|
||||||
|
|
||||||
8. [Eiger] Can also use copydetectorserver command.
|
8. [Eiger] Can also use copydetectorserver command.
|
||||||
[All] copydetectorserver command also creates a link to the binary compied
|
[All] copydetectorserver command also creates a link to the binary copied
|
||||||
with a shorter name ([detector]DetectorServer only)
|
with a shorter name ([detector]DetectorServer only)
|
||||||
|
|
||||||
Receiver
|
Receiver
|
||||||
@ -263,7 +269,7 @@ This document describes the differences between v6.0.0 and v5.1.0.
|
|||||||
1. It does not handle readnrows or partial readout. Only the summary
|
1. It does not handle readnrows or partial readout. Only the summary
|
||||||
is adjusted to print in red. However, it will still write complete
|
is adjusted to print in red. However, it will still write complete
|
||||||
images with missing data padded. Roi will be implemented in future
|
images with missing data padded. Roi will be implemented in future
|
||||||
that can be complimented with this feature to remove the additional
|
that can be complemented with this feature to remove the additional
|
||||||
data in files.
|
data in files.
|
||||||
|
|
||||||
2. Round robin is not implemented in receiver side, ie. one cannot configure
|
2. Round robin is not implemented in receiver side, ie. one cannot configure
|
||||||
@ -301,11 +307,11 @@ This document describes the differences between v6.0.0 and v5.1.0.
|
|||||||
|
|
||||||
Mythen3
|
Mythen3
|
||||||
=======
|
=======
|
||||||
Compatible version : 10.09.2021 (development)
|
Compatible version : 10.09.2021 (v1.1)
|
||||||
|
|
||||||
Gotthard2
|
Gotthard2
|
||||||
=========
|
=========
|
||||||
Compatible version : 27.05.2021 (v1.0)
|
Compatible version : 27.05.2021 (v0.1)
|
||||||
|
|
||||||
Moench
|
Moench
|
||||||
======
|
======
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
Firmware Upgrade
|
Firmware Upgrade
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Eiger
|
Eiger
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
@ -18,30 +16,9 @@ Upgrade
|
|||||||
^^^^^^^^
|
^^^^^^^^
|
||||||
#. Tftp must be already installed on your pc to use the bcp script.
|
#. Tftp must be already installed on your pc to use the bcp script.
|
||||||
|
|
||||||
#. Kill the on-board servers and copy new servers to the board.
|
#. Copy new servers to the board. See :ref:`how to upgrade detector servers<Detector Server Upgrade>` for more detals. A reboot should have started the new linked servers automatically. For Eiger, do not reboot yet as we need to program the firmware via bit files.
|
||||||
|
|
||||||
.. code-block:: bash
|
* This step is crucial when registers between firmwares change. Failure to do so will result in linux on boards to crash and boards can't be pinged anymore.
|
||||||
|
|
||||||
# Option 1: from detector console
|
|
||||||
# kill old server
|
|
||||||
ssh root@bebxxx
|
|
||||||
killall eigerDetectorServer
|
|
||||||
|
|
||||||
# copy new server
|
|
||||||
cd executables
|
|
||||||
scp user@pc:/path/eigerDetectorServerxxx .
|
|
||||||
chmod 777 eigerDetectorServerxxx
|
|
||||||
ln -sf eigerDetectorServerxxx eigerDetectorServer
|
|
||||||
sync
|
|
||||||
|
|
||||||
# Options 2: from client console for multiple modules
|
|
||||||
for i in bebxxx bebyyy;
|
|
||||||
do ssh root@$i killall eigerDetectorServer;
|
|
||||||
scp eigerDetectorServerxxx root@$i:~/executables/eigerDetectorServer;
|
|
||||||
ssh root@$i sync; done
|
|
||||||
|
|
||||||
|
|
||||||
* This is crucial when registers between firmwares change. Failure to do so will result in linux on boards to crash and boards can't be pinged anymore.
|
|
||||||
|
|
||||||
#. Bring the board into programmable mode using either of the 2 ways. Both methods result in only the central LED blinking.
|
#. Bring the board into programmable mode using either of the 2 ways. Both methods result in only the central LED blinking.
|
||||||
|
|
||||||
@ -50,8 +27,13 @@ Upgrade
|
|||||||
Do a hard reset for each half module on back panel boards, between the LEDs, closer to each of the 1G ethernet connectors. Push until all LEDs start to blink.
|
Do a hard reset for each half module on back panel boards, between the LEDs, closer to each of the 1G ethernet connectors. Push until all LEDs start to blink.
|
||||||
|
|
||||||
* Software:
|
* Software:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# Option 1: if the old server is still running:
|
||||||
|
sls_detector_put execcommand "./boot_recovery"
|
||||||
|
|
||||||
|
# Option 2:
|
||||||
ssh root@bebxxx
|
ssh root@bebxxx
|
||||||
cd executables
|
cd executables
|
||||||
./boot_recovery
|
./boot_recovery
|
||||||
@ -79,11 +61,24 @@ Upgrade
|
|||||||
#update front right fpga
|
#update front right fpga
|
||||||
bcp download.bit bebxxx:/febr
|
bcp download.bit bebxxx:/febr
|
||||||
|
|
||||||
#update kernel (only if required by the SLS Detector Group)
|
#update kernel (only if required by us)
|
||||||
bcp download.bit bebxxx:/kernel
|
bcp download.bit bebxxx:/kernel
|
||||||
|
|
||||||
#. Reboot the detector.
|
#. Reboot the detector.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# In the first terminal where we saw "Succeess"
|
||||||
|
# reconfig febX is necessary only if you have flashed a new feb firmware
|
||||||
|
reconfig febl
|
||||||
|
reconfig febr
|
||||||
|
# will reboot controller
|
||||||
|
reconfig fw0
|
||||||
|
|
||||||
|
.. note ::
|
||||||
|
|
||||||
|
If the detector servers did not start up automatically after reboot, you need to add scripts to do that. See :ref:`Automatic start<Automatic start servers>` for more details.
|
||||||
|
|
||||||
Jungfrau
|
Jungfrau
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
@ -94,75 +89,26 @@ Download
|
|||||||
- `pof files <https://github.com/slsdetectorgroup/slsDetectorFirmware>`__
|
- `pof files <https://github.com/slsdetectorgroup/slsDetectorFirmware>`__
|
||||||
|
|
||||||
|
|
||||||
Upgrade (from v4.x.x)
|
Upgrade
|
||||||
^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^
|
||||||
|
|
||||||
Check :ref:`firmware troubleshooting <blackfin firmware troubleshooting>` if you run into issues while programming firmware.
|
.. note ::
|
||||||
|
|
||||||
#. Tftp must be installed on pc.
|
These instructions are for upgrades from v5.0.0. For earlier versions, contact us.
|
||||||
|
|
||||||
#. Update client package to the latest (5.x.x).
|
|
||||||
|
|
||||||
#. Disable server respawning or kill old server
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
# Option 1: if respawning enabled
|
|
||||||
telnet bchipxxx
|
|
||||||
# edit /etc/inittab
|
|
||||||
# comment out line #ttyS0::respawn:/jungfrauDetectorServervxxx
|
|
||||||
reboot
|
|
||||||
# ensure servers did not start up after reboot
|
|
||||||
telnet bchipxxx
|
|
||||||
ps
|
|
||||||
|
|
||||||
# Option 2: if respawning already disabled
|
|
||||||
telnet bchipxxx
|
|
||||||
killall jungfrauDetectorServerv*
|
|
||||||
|
|
||||||
#. Copy new server and start in update mode
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
tftp pcxxx -r jungfrauDetectorServervxxx -g
|
|
||||||
chmod 777 jungfrauDetectorServervxxx
|
|
||||||
./jungfrauDetectorServervxxx -u
|
|
||||||
|
|
||||||
#. Program fpga from the client console
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
sls_detector_get free
|
|
||||||
# Crucial that the next command executes without any errors
|
|
||||||
sls_detector_put hostname bchipxxx
|
|
||||||
sls_detector_put programfpga xxx.pof
|
|
||||||
|
|
||||||
#. After programming, kill 'update server' using Ctrl + C in server console.
|
|
||||||
|
|
||||||
#. Enable server respawning if needed
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
telnet bchipxxx
|
|
||||||
# edit /etc/inittab
|
|
||||||
# uncomment out line #ttyS0::respawn:/jungfrauDetectorServervxxx
|
|
||||||
# ensure the line has the new server name
|
|
||||||
reboot
|
|
||||||
# ensure both servers are running using ps
|
|
||||||
jungfrauDetectorServervxxx
|
|
||||||
jungfrauDetectorServervxxx --stop-server 1953
|
|
||||||
|
|
||||||
|
|
||||||
Upgrade (from v5.0.0)
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Check :ref:`firmware troubleshooting <blackfin firmware troubleshooting>` if you run into issues while programming firmware.
|
Check :ref:`firmware troubleshooting <blackfin firmware troubleshooting>` if you run into issues while programming firmware.
|
||||||
|
|
||||||
Always ensure that the client and server software are of the same release.
|
Always ensure that the client and server software are of the same release.
|
||||||
|
|
||||||
|
|
||||||
#. Program from console
|
Program from console
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
# copies server from tftp folder of pc, programs fpga,
|
# copies server from tftp folder of pc, links new server to jungfrauDetectorServer,
|
||||||
# removes old server from respawn, sets up new server to respawn
|
# removes old server from respawn, sets up new lnked server to respawn
|
||||||
# and reboots
|
# programs fpga,
|
||||||
|
# reboots
|
||||||
sls_detector_put update jungfrauDetectorServervxxx pcxxx xx.pof
|
sls_detector_put update jungfrauDetectorServervxxx pcxxx xx.pof
|
||||||
|
|
||||||
# Or only program firmware
|
# Or only program firmware
|
||||||
@ -170,8 +116,8 @@ Always ensure that the client and server software are of the same release.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Gotthard
|
Gotthard I
|
||||||
---------
|
-----------
|
||||||
|
|
||||||
Download
|
Download
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
@ -186,7 +132,7 @@ Upgrade
|
|||||||
^^^^^^^^
|
^^^^^^^^
|
||||||
.. warning ::
|
.. warning ::
|
||||||
| Gotthard firmware cannot be upgraded remotely and requires the use of USB-Blaster.
|
| Gotthard firmware cannot be upgraded remotely and requires the use of USB-Blaster.
|
||||||
| It is generally updated by the SLS Detector group.
|
| It is generally updated by us.
|
||||||
|
|
||||||
#. Download `Altera Quartus software or Quartus programmer <https://fpgasoftware.intel.com/20.1/?edition=standard&platform=linux&product=qprogrammer#tabs-4>`__.
|
#. Download `Altera Quartus software or Quartus programmer <https://fpgasoftware.intel.com/20.1/?edition=standard&platform=linux&product=qprogrammer#tabs-4>`__.
|
||||||
|
|
||||||
@ -197,7 +143,7 @@ Upgrade
|
|||||||
|
|
||||||
#. Plug the end of your USB-Blaster with the adaptor provided to the connector 'AS config' on the Gotthard board.
|
#. Plug the end of your USB-Blaster with the adaptor provided to the connector 'AS config' on the Gotthard board.
|
||||||
|
|
||||||
#. Click on 'Add file'. Select programming (pof) file provided by the SLS Detector group.
|
#. Click on 'Add file'. Select programming (pof) file provided by us.
|
||||||
|
|
||||||
#. Check "Program/Configure" and "Verify". Push the start button. Wait until the programming process is finished.
|
#. Check "Program/Configure" and "Verify". Push the start button. Wait until the programming process is finished.
|
||||||
|
|
||||||
@ -206,68 +152,69 @@ Upgrade
|
|||||||
#. Reboot the detector.
|
#. Reboot the detector.
|
||||||
|
|
||||||
|
|
||||||
Mythen3
|
Mythen III
|
||||||
-------
|
-----------
|
||||||
|
|
||||||
.. note ::
|
.. note ::
|
||||||
|
|
||||||
As it is still in developement, the rbf files must be picked up from the SLS Detector Group.
|
As it is still in development, the rbf files must be picked up from us.
|
||||||
|
|
||||||
Download
|
Download
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
- detector server corresponding to package in slsDetectorPackage/serverBin
|
- detector server corresponding to package in slsDetectorPackage/serverBin
|
||||||
|
|
||||||
- rbf files (in developement)
|
- `rbf files <https://github.com/slsdetectorgroup/slsDetectorFirmware>`__
|
||||||
|
|
||||||
|
|
||||||
Upgrade (from v5.0.0)
|
Upgrade
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^
|
||||||
|
|
||||||
Always ensure that the client and server software are of the same release.
|
Always ensure that the client and server software are of the same release.
|
||||||
|
|
||||||
#. Program from console
|
Program from console
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
# copies server from tftp folder of pc, programs fpga,
|
# copies server from tftp folder of pc, links new server to mythen3DetectorServer,
|
||||||
# and reboots (new server not respawned currently)
|
# programs fpga,
|
||||||
|
# reboots
|
||||||
sls_detector_put update mythen3DetectorServervxxx pcxxx xxx.rbf
|
sls_detector_put update mythen3DetectorServervxxx pcxxx xxx.rbf
|
||||||
|
|
||||||
# Or only program firmware
|
# Or only program firmware
|
||||||
sls_detector_put programfpga xxx.rbf
|
sls_detector_put programfpga xxx.rbf
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Gotthard2
|
|
||||||
-------------
|
|
||||||
|
|
||||||
.. note ::
|
.. note ::
|
||||||
|
|
||||||
As it is still in developement, the rbf files must be picked up from the SLS Detector Group.
|
If the detector servers did not start up automatically after reboot, you need to add scripts to do that. See :ref:`Automatic start<Automatic start servers>` for more details.
|
||||||
|
|
||||||
|
Gotthard II
|
||||||
|
-------------
|
||||||
|
|
||||||
Download
|
Download
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
- detector server corresponding to package in slsDetectorPackage/serverBin
|
- detector server corresponding to package in slsDetectorPackage/serverBin
|
||||||
|
|
||||||
- rbf files (in development)
|
- `rbf files <https://github.com/slsdetectorgroup/slsDetectorFirmware>`__
|
||||||
|
|
||||||
|
Upgrade
|
||||||
Upgrade (from v5.0.0)
|
^^^^^^^^
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Always ensure that the client and server software are of the same release.
|
Always ensure that the client and server software are of the same release.
|
||||||
|
|
||||||
#. Program from console
|
Program from console
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
# copies server from tftp folder of pc, programs fpga,
|
# copies server from tftp folder of pc, links new server to gotthard2DetectorServer,
|
||||||
# and reboots (new server not respawned currently)
|
# programs fpga,
|
||||||
|
# reboots
|
||||||
sls_detector_put update gotthard2DetectorServervxxx pcxxx xxx.rbf
|
sls_detector_put update gotthard2DetectorServervxxx pcxxx xxx.rbf
|
||||||
|
|
||||||
# Or only program firmware
|
# Or only program firmware
|
||||||
sls_detector_put programfpga xxx.rbf
|
sls_detector_put programfpga xxx.rbf
|
||||||
|
|
||||||
|
.. note ::
|
||||||
|
|
||||||
|
If the detector servers did not start up automatically after reboot, you need to add scripts to do that. See :ref:`Automatic start<Automatic start servers>` for more details.
|
||||||
|
|
||||||
Moench
|
Moench
|
||||||
-------
|
-------
|
||||||
@ -279,19 +226,21 @@ Download
|
|||||||
- `pof files <https://github.com/slsdetectorgroup/slsDetectorFirmware>`__
|
- `pof files <https://github.com/slsdetectorgroup/slsDetectorFirmware>`__
|
||||||
|
|
||||||
|
|
||||||
Upgrade (from v5.0.0)
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
Upgrade
|
||||||
|
^^^^^^^^
|
||||||
|
|
||||||
Check :ref:`firmware troubleshooting <blackfin firmware troubleshooting>` if you run into issues while programming firmware.
|
Check :ref:`firmware troubleshooting <blackfin firmware troubleshooting>` if you run into issues while programming firmware.
|
||||||
|
|
||||||
Always ensure that the client and server software are of the same release.
|
Always ensure that the client and server software are of the same release.
|
||||||
|
|
||||||
#. Program from console
|
Program from console
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
# copies server from tftp folder of pc, programs fpga,
|
# copies server from tftp folder of pc, links new server to moenchDetectorServer,
|
||||||
# removes old server from respawn, sets up new server to respawn
|
# removes old server from respawn, sets up new lnked server to respawn
|
||||||
# and reboots
|
# programs fpga,
|
||||||
|
# reboots
|
||||||
sls_detector_put update moenchDetectorServervxxx pcxxx xx.pof
|
sls_detector_put update moenchDetectorServervxxx pcxxx xx.pof
|
||||||
|
|
||||||
# Or only program firmware
|
# Or only program firmware
|
||||||
@ -307,19 +256,21 @@ Download
|
|||||||
- `pof files <https://github.com/slsdetectorgroup/slsDetectorFirmware>`__
|
- `pof files <https://github.com/slsdetectorgroup/slsDetectorFirmware>`__
|
||||||
|
|
||||||
|
|
||||||
Upgrade (from v5.0.0)
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
Upgrade
|
||||||
|
^^^^^^^^
|
||||||
|
|
||||||
Check :ref:`firmware troubleshooting <blackfin firmware troubleshooting>` if you run into issues while programming firmware.
|
Check :ref:`firmware troubleshooting <blackfin firmware troubleshooting>` if you run into issues while programming firmware.
|
||||||
|
|
||||||
Always ensure that the client and server software are of the same release.
|
Always ensure that the client and server software are of the same release.
|
||||||
|
|
||||||
#. Program from console
|
Program from console
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
# copies server from tftp folder of pc, programs fpga,
|
# copies server from tftp folder of pc, links new server to ctbDetectorServer,
|
||||||
# removes old server from respawn, sets up new server to respawn
|
# removes old server from respawn, sets up new lnked server to respawn
|
||||||
# and reboots
|
# programs fpga,
|
||||||
|
# reboots
|
||||||
sls_detector_put update ctbDetectorServervxxx pcxxx xx.pof
|
sls_detector_put update ctbDetectorServervxxx pcxxx xx.pof
|
||||||
|
|
||||||
# Or only program firmware
|
# Or only program firmware
|
||||||
|
@ -72,3 +72,18 @@ exposed to Python through pybind11.
|
|||||||
|
|
||||||
.. autoclass:: timingSourceType
|
.. autoclass:: timingSourceType
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
|
|
||||||
|
.. autoclass:: M3_GainCaps
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. autoclass:: portPosition
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. autoclass:: streamingInterface
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. autoclass:: vetoAlgorithm
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. autoclass:: gainMode
|
||||||
|
:undoc-members:
|
@ -36,6 +36,7 @@ Detector Servers include:
|
|||||||
When using a blocking acquire command (sls_detector_acquire or Detector::acquire), the control server is blocked until end of acquisition. However, stop server commands could be used in parallel.
|
When using a blocking acquire command (sls_detector_acquire or Detector::acquire), the control server is blocked until end of acquisition. However, stop server commands could be used in parallel.
|
||||||
|
|
||||||
|
|
||||||
|
.. _Automatic start servers:
|
||||||
Automatic start
|
Automatic start
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
@ -1,114 +1,44 @@
|
|||||||
|
.. _Detector Server Upgrade:
|
||||||
Detector Server Upgrade
|
Detector Server Upgrade
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Eiger
|
|
||||||
-------------
|
|
||||||
|
|
||||||
|
|
||||||
**Location:** slsDetectorPackage/serverBin/ folder for every release.
|
**Location:** slsDetectorPackage/serverBin/ folder for every release.
|
||||||
|
|
||||||
|
|
||||||
#. Kill old server and copy new server
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
# Option 1: from detector console
|
|
||||||
# kill old server
|
|
||||||
ssh root@bebxxx
|
|
||||||
killall eigerDetectorServer
|
|
||||||
|
|
||||||
# copy new server
|
|
||||||
cd executables
|
|
||||||
scp user@pc:/path/eigerDetectorServerxxx .
|
|
||||||
chmod 777 eigerDetectorServerxxx
|
|
||||||
ln -sf eigerDetectorServerxxx eigerDetectorServer
|
|
||||||
sync
|
|
||||||
|
|
||||||
# Options 2: from client console for multiple modules
|
|
||||||
for i in bebxxx bebyyy;
|
|
||||||
do ssh root@$i killall eigerDetectorServer;
|
|
||||||
scp eigerDetectorServerxxx root@$i:~/executables/eigerDetectorServer;
|
|
||||||
ssh root@$i sync; done
|
|
||||||
|
|
||||||
|
|
||||||
#. Reboot the detector.
|
|
||||||
|
|
||||||
|
|
||||||
Jungfrau
|
|
||||||
-------------
|
|
||||||
|
|
||||||
**Location:** slsDetectorPackage/serverBin/ folder for every release.
|
|
||||||
|
|
||||||
#. Install tftp and copy detector server binary to tftp folder
|
#. Install tftp and copy detector server binary to tftp folder
|
||||||
#. Program from console (only from 5.0.0-rcx)
|
#. Program from console
|
||||||
|
|
||||||
|
.. note ::
|
||||||
|
|
||||||
|
These instructions are for upgrades from v5.0.0. For earlier versions, contact us.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
# copies new server from pc tftp folder, respawns and reboots
|
# copies new server from pc tftp folder, creates a soft link to xxxDetectorServerxxx
|
||||||
sls_detector_put copydetectorserver jungfrauDetectorServerxxx pcxxx
|
# [Jungfrau][CTB][Moench] also edits initttab to respawn server on reboot
|
||||||
|
# Then, the detector controller will reboot (except Eiger)
|
||||||
|
sls_detector_put copydetectorserver xxxDetectorServerxxx pcxxx
|
||||||
|
|
||||||
|
#. Copy the detector server specific config files or any others required to the detector:
|
||||||
|
|
||||||
Gotthard
|
|
||||||
---------
|
|
||||||
|
|
||||||
**Location:** slsDetectorPackage/serverBin/ folder for every release.
|
|
||||||
|
|
||||||
#. Install tftp and copy detector server binary to tftp folder
|
|
||||||
#. Program from console (only from 5.0.0-rcx)
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
# copies new server from pc tftp folder, respawns and reboots
|
sls_detector_put execcommand "tftp pcxxx -r configxxx -g"
|
||||||
sls_detector_put copydetectorserver gotthardDetectorServerxxx pcxxx
|
|
||||||
|
|
||||||
|
|
||||||
|
.. note ::
|
||||||
|
|
||||||
Mythen3
|
For Mythen3, Gotthard2 and Eiger, you need to add scripts to automatically start detector server upon power on. See :ref:`Automatic start<Automatic start servers>` for more details.
|
||||||
-------
|
|
||||||
|
|
||||||
**Location:** slsDetectorPackage/serverBin/ folder for every release.
|
.. note ::
|
||||||
|
|
||||||
#. Install tftp and copy detector server binary to tftp folder
|
Eiger requires a manual reboot. Or killall the servers and restart the new linked one. If you are in the process of updating firmware, then don't reboot yet.
|
||||||
#. Program from console (only from 5.0.0-rcx)
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
# copies new server from pc tftp folder and reboots (does not respawn)
|
|
||||||
sls_detector_put copydetectorserver mythen3DetectorServerxxx pcxxx
|
|
||||||
|
|
||||||
|
|
||||||
Gotthard2
|
Errors
|
||||||
----------
|
|
||||||
|
|
||||||
**Location:** slsDetectorPackage/serverBin/ folder for every release.
|
|
||||||
|
|
||||||
#. Install tftp and copy detector server binary to tftp folder
|
|
||||||
#. Program from console (only from 5.0.0-rcx)
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
# copies new server from pc tftp folder and reboots (does not respawn)
|
|
||||||
sls_detector_put copydetectorserver gotthard2DetectorServerxxx pcxxx
|
|
||||||
|
|
||||||
|
|
||||||
Moench
|
|
||||||
------
|
------
|
||||||
|
|
||||||
**Location:** slsDetectorPackage/serverBin/ folder for every release.
|
#. tftp write error: There is no space left. Please delete some old binaries and try again.
|
||||||
|
|
||||||
#. Install tftp and copy detector server binary to tftp folder
|
#. text file busy: You are trying to copy the same server.
|
||||||
#. Program from console (only from 5.0.0-rcx)
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
# copies new server from pc tftp folder, respawns and reboots
|
|
||||||
sls_detector_put copydetectorserver moenchDetectorServerxxx pcxxx
|
|
||||||
|
|
||||||
|
|
||||||
Ctb
|
|
||||||
---
|
|
||||||
|
|
||||||
**Location:** slsDetectorPackage/serverBin/ folder for every release.
|
|
||||||
|
|
||||||
#. Install tftp and copy detector server binary to tftp folder
|
|
||||||
#. Program from console (only from 5.0.0-rcx)
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
# copies new server from pc tftp folder, respawns and reboots
|
|
||||||
sls_detector_put copydetectorserver ctbDetectorServerxxx pcxxx
|
|
@ -124,7 +124,6 @@ class Detector(CppDetectorApi):
|
|||||||
-----
|
-----
|
||||||
Equivalent to config, but does not free shared memory.
|
Equivalent to config, but does not free shared memory.
|
||||||
|
|
||||||
|
|
||||||
:getter: Not implemented
|
:getter: Not implemented
|
||||||
:setter: loads parameters file
|
:setter: loads parameters file
|
||||||
|
|
||||||
@ -146,6 +145,7 @@ class Detector(CppDetectorApi):
|
|||||||
def hostname(self):
|
def hostname(self):
|
||||||
"""Frees shared memory and sets hostname (or IP address) of all modules concatenated by +
|
"""Frees shared memory and sets hostname (or IP address) of all modules concatenated by +
|
||||||
Virtual servers can already use the port in hostname separated by ':' and ports incremented by 2 to accomodate the stop server as well.
|
Virtual servers can already use the port in hostname separated by ':' and ports incremented by 2 to accomodate the stop server as well.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.hostname = 'beb031+beb032+'
|
>>> d.hostname = 'beb031+beb032+'
|
||||||
@ -170,6 +170,7 @@ class Detector(CppDetectorApi):
|
|||||||
def port(self):
|
def port(self):
|
||||||
"""
|
"""
|
||||||
Port number of the control server on detector for detector-client tcp interface.
|
Port number of the control server on detector for detector-client tcp interface.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Default is 1952. Normally unchanged. \n
|
Default is 1952. Normally unchanged. \n
|
||||||
@ -185,6 +186,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def stopport(self):
|
def stopport(self):
|
||||||
"""Port number of the stop server on detector for detector-client tcp interface.
|
"""Port number of the stop server on detector for detector-client tcp interface.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Default is 1953. Normally unchanged.
|
Default is 1953. Normally unchanged.
|
||||||
@ -201,6 +203,7 @@ class Detector(CppDetectorApi):
|
|||||||
def firmwareversion(self):
|
def firmwareversion(self):
|
||||||
"""
|
"""
|
||||||
Fimware version of detector in format [0xYYMMDD] or an increasing 2 digit number for Eiger.
|
Fimware version of detector in format [0xYYMMDD] or an increasing 2 digit number for Eiger.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.firmwareversion
|
>>> d.firmwareversion
|
||||||
@ -213,6 +216,7 @@ class Detector(CppDetectorApi):
|
|||||||
def detectorserverversion(self):
|
def detectorserverversion(self):
|
||||||
"""
|
"""
|
||||||
On-board detector server software version in format [0xYYMMDD]
|
On-board detector server software version in format [0xYYMMDD]
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.detectorserverversion
|
>>> d.detectorserverversion
|
||||||
@ -223,6 +227,7 @@ class Detector(CppDetectorApi):
|
|||||||
@property
|
@property
|
||||||
def clientversion(self):
|
def clientversion(self):
|
||||||
"""Client software version in format [YYMMDD]
|
"""Client software version in format [YYMMDD]
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.clientversion
|
>>> d.clientversion
|
||||||
@ -241,9 +246,11 @@ class Detector(CppDetectorApi):
|
|||||||
def rx_threads(self):
|
def rx_threads(self):
|
||||||
"""
|
"""
|
||||||
Get thread ids from the receiver in order of [parent, tcp, listener 0, processor 0, streamer 0, listener 1, processor 1, streamer 1].
|
Get thread ids from the receiver in order of [parent, tcp, listener 0, processor 0, streamer 0, listener 1, processor 1, streamer 1].
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
If no streamer yet or there is no second interface, it gives 0 in its place.
|
If no streamer yet or there is no second interface, it gives 0 in its place.
|
||||||
|
|
||||||
:setter: Not Implemented
|
:setter: Not Implemented
|
||||||
"""
|
"""
|
||||||
return self.getRxThreadIds()
|
return self.getRxThreadIds()
|
||||||
@ -285,10 +292,12 @@ class Detector(CppDetectorApi):
|
|||||||
def detsize(self):
|
def detsize(self):
|
||||||
"""
|
"""
|
||||||
Sets the detector size in both dimensions (number of channels).
|
Sets the detector size in both dimensions (number of channels).
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
This value is used to calculate row and column positions for each module and included into udp data packet header. \n
|
This value is used to calculate row and column positions for each module and included into udp data packet header. \n
|
||||||
By default, it adds modules in y dimension for 2d detectors and in x dimension for 1d detectors.
|
By default, it adds modules in y dimension for 2d detectors and in x dimension for 1d detectors.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.detsize
|
>>> d.detsize
|
||||||
@ -309,6 +318,7 @@ class Detector(CppDetectorApi):
|
|||||||
def settings(self):
|
def settings(self):
|
||||||
"""
|
"""
|
||||||
Detector settings. Enum: detectorSettings
|
Detector settings. Enum: detectorSettings
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
@ -348,6 +358,7 @@ class Detector(CppDetectorApi):
|
|||||||
"""
|
"""
|
||||||
[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Number of frames left in acquisition.\n
|
[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Number of frames left in acquisition.\n
|
||||||
[Gotthard2] only in continuous auto mode.
|
[Gotthard2] only in continuous auto mode.
|
||||||
|
|
||||||
:setter: Not Implemented
|
:setter: Not Implemented
|
||||||
"""
|
"""
|
||||||
return self.getNumberOfFramesLeft()
|
return self.getNumberOfFramesLeft()
|
||||||
@ -357,9 +368,11 @@ class Detector(CppDetectorApi):
|
|||||||
def framecounter(self):
|
def framecounter(self):
|
||||||
"""
|
"""
|
||||||
[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Number of frames from start run control.
|
[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Number of frames from start run control.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
[Gotthard2] only in continuous mode.
|
[Gotthard2] only in continuous mode.
|
||||||
|
|
||||||
:setter: Not Implemented
|
:setter: Not Implemented
|
||||||
"""
|
"""
|
||||||
return self.getNumberOfFramesFromStart()
|
return self.getNumberOfFramesFromStart()
|
||||||
@ -384,6 +397,7 @@ class Detector(CppDetectorApi):
|
|||||||
def powerchip(self):
|
def powerchip(self):
|
||||||
"""
|
"""
|
||||||
[Jungfrau][Mythen3][Gotthard2][Moench] Power the chip.
|
[Jungfrau][Mythen3][Gotthard2][Moench] Power the chip.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
[Moench] Default is disabled. \n
|
[Moench] Default is disabled. \n
|
||||||
@ -476,11 +490,14 @@ class Detector(CppDetectorApi):
|
|||||||
def periodl(self):
|
def periodl(self):
|
||||||
"""
|
"""
|
||||||
[Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] Period left for current frame.
|
[Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] Period left for current frame.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
[Gotthard2] only in continuous mode.
|
[Gotthard2] only in continuous mode.
|
||||||
|
|
||||||
:getter: always returns in seconds. To get in datetime.delta, use getPeriodLeft
|
:getter: always returns in seconds. To get in datetime.delta, use getPeriodLeft
|
||||||
:setter: Not Implemented
|
:setter: Not Implemented
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-----------
|
-----------
|
||||||
>>> d.periodl
|
>>> d.periodl
|
||||||
@ -498,6 +515,7 @@ class Detector(CppDetectorApi):
|
|||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:getter: always returns in seconds. To get in datetime.delta, use getDelayAfterTrigger
|
:getter: always returns in seconds. To get in datetime.delta, use getDelayAfterTrigger
|
||||||
|
|
||||||
Example
|
Example
|
||||||
@ -524,8 +542,10 @@ class Detector(CppDetectorApi):
|
|||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
[Gotthard2] only in continuous mdoe.
|
[Gotthard2] only in continuous mdoe.
|
||||||
|
|
||||||
:getter: always returns in seconds. To get in datetime.delta, use getDelayAfterTriggerLeft
|
:getter: always returns in seconds. To get in datetime.delta, use getDelayAfterTriggerLeft
|
||||||
:setter: Not Implemented
|
:setter: Not Implemented
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-----------
|
-----------
|
||||||
>>> d.delayl
|
>>> d.delayl
|
||||||
@ -573,6 +593,7 @@ class Detector(CppDetectorApi):
|
|||||||
def txndelay_frame(self):
|
def txndelay_frame(self):
|
||||||
"""
|
"""
|
||||||
[Eiger][Jungfrau][Mythen3] Transmission delay of first udp packet being streamed out of the module.\n
|
[Eiger][Jungfrau][Mythen3] Transmission delay of first udp packet being streamed out of the module.\n
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
[Jungfrau] [0-31] Each value represents 1 ms. \n
|
[Jungfrau] [0-31] Each value represents 1 ms. \n
|
||||||
@ -589,6 +610,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def txndelay_left(self):
|
def txndelay_left(self):
|
||||||
"""[Eiger] Transmission delay of first packet in an image being streamed out of the module's left UDP port.
|
"""[Eiger] Transmission delay of first packet in an image being streamed out of the module's left UDP port.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Each value represents 10ns. Typical value is 50000.
|
Each value represents 10ns. Typical value is 50000.
|
||||||
@ -604,6 +626,7 @@ class Detector(CppDetectorApi):
|
|||||||
def txndelay_right(self):
|
def txndelay_right(self):
|
||||||
"""
|
"""
|
||||||
[Eiger] Transmission delay of first packet in an image being streamed out of the module's right UDP port.
|
[Eiger] Transmission delay of first packet in an image being streamed out of the module's right UDP port.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Each value represents 10ns. Typical value is 50000.
|
Each value represents 10ns. Typical value is 50000.
|
||||||
@ -623,11 +646,13 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def rx_hostname(self):
|
def rx_hostname(self):
|
||||||
""" Sets receiver hostname or IP address. Used for TCP control communication between client and receiver to configure receiver. Also updates receiver with detector parameters.
|
""" Sets receiver hostname or IP address. Used for TCP control communication between client and receiver to configure receiver. Also updates receiver with detector parameters.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Also resets any prior receiver property (not on detector). \n
|
Also resets any prior receiver property (not on detector). \n
|
||||||
Can concatenate receiver hostnames for every module. \n
|
Can concatenate receiver hostnames for every module. \n
|
||||||
If port included, then its the receiver tcp port for every receiver hostname.
|
If port included, then its the receiver tcp port for every receiver hostname.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
--------
|
--------
|
||||||
>>> d.rx_hostname
|
>>> d.rx_hostname
|
||||||
@ -651,12 +676,14 @@ class Detector(CppDetectorApi):
|
|||||||
def rx_tcpport(self):
|
def rx_tcpport(self):
|
||||||
"""
|
"""
|
||||||
TCP port for client-receiver communication.
|
TCP port for client-receiver communication.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Default is 1954. \n
|
Default is 1954. \n
|
||||||
Must be different if multiple receivers on same pc. \n
|
Must be different if multiple receivers on same pc. \n
|
||||||
Must be first command to set a receiver parameter to be able to communicate. \n
|
Must be first command to set a receiver parameter to be able to communicate. \n
|
||||||
Multi command will automatically increment port for individual modules, which must be set via setRxPort.
|
Multi command will automatically increment port for individual modules, which must be set via setRxPort.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.rx_tcpport
|
>>> d.rx_tcpport
|
||||||
@ -695,6 +722,7 @@ class Detector(CppDetectorApi):
|
|||||||
def rx_discardpolicy(self):
|
def rx_discardpolicy(self):
|
||||||
"""
|
"""
|
||||||
Frame discard policy of receiver. Enum: frameDiscardPolicy
|
Frame discard policy of receiver. Enum: frameDiscardPolicy
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Options: NO_DISCARD, DISCARD_EMPTY_FRAMES, DISCARD_PARTIAL_FRAMES \n
|
Options: NO_DISCARD, DISCARD_EMPTY_FRAMES, DISCARD_PARTIAL_FRAMES \n
|
||||||
@ -717,6 +745,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def rx_padding(self):
|
def rx_padding(self):
|
||||||
"""Partial frames padding enable in the receiver.
|
"""Partial frames padding enable in the receiver.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
------
|
------
|
||||||
Default: enabled \n
|
Default: enabled \n
|
||||||
@ -750,6 +779,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def numinterfaces(self):
|
def numinterfaces(self):
|
||||||
"""[Jungfrau][Gotthard2] Number of udp interfaces to stream data from detector. Default is 1.
|
"""[Jungfrau][Gotthard2] Number of udp interfaces to stream data from detector. Default is 1.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Also enables second interface in receiver for listening (Writes a file per interface if writing enabled). \n
|
Also enables second interface in receiver for listening (Writes a file per interface if writing enabled). \n
|
||||||
@ -788,6 +818,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def findex(self):
|
def findex(self):
|
||||||
"""File or Acquisition index in receiver.
|
"""File or Acquisition index in receiver.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
File name: [file name prefix]_d[detector index]_f[sub file index]_[acquisition/file index].[raw/h5].
|
File name: [file name prefix]_d[detector index]_f[sub file index]_[acquisition/file index].[raw/h5].
|
||||||
@ -822,6 +853,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def fpath(self):
|
def fpath(self):
|
||||||
"""Directory where output data files are written in receiver. Default is "/".
|
"""Directory where output data files are written in receiver. Default is "/".
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
If path does not exist, it will try to create it.
|
If path does not exist, it will try to create it.
|
||||||
@ -903,6 +935,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def rx_zmqfreq(self):
|
def rx_zmqfreq(self):
|
||||||
"""Frequency of frames streamed out from receiver via zmq.
|
"""Frequency of frames streamed out from receiver via zmq.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Default: 1, Means every frame is streamed out. \n
|
Default: 1, Means every frame is streamed out. \n
|
||||||
@ -920,6 +953,7 @@ class Detector(CppDetectorApi):
|
|||||||
def rx_zmqport(self):
|
def rx_zmqport(self):
|
||||||
"""
|
"""
|
||||||
Zmq port for data to be streamed out of the receiver.
|
Zmq port for data to be streamed out of the receiver.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Also restarts receiver zmq streaming if enabled. \n
|
Also restarts receiver zmq streaming if enabled. \n
|
||||||
@ -954,12 +988,14 @@ class Detector(CppDetectorApi):
|
|||||||
def zmqport(self):
|
def zmqport(self):
|
||||||
"""
|
"""
|
||||||
Port number to listen to zmq data streamed out from receiver or intermediate process.
|
Port number to listen to zmq data streamed out from receiver or intermediate process.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Also restarts client zmq streaming if enabled. \n
|
Also restarts client zmq streaming if enabled. \n
|
||||||
Default connects to receiver zmq streaming out port (30001). \n
|
Default connects to receiver zmq streaming out port (30001). \n
|
||||||
Must be different for every detector (and udp port). \n
|
Must be different for every detector (and udp port). \n
|
||||||
Multi command will automatically increment for individual modules, use setClientZmqPort.
|
Multi command will automatically increment for individual modules, use setClientZmqPort.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
--------
|
--------
|
||||||
>>> d.zmqport
|
>>> d.zmqport
|
||||||
@ -986,6 +1022,7 @@ class Detector(CppDetectorApi):
|
|||||||
def rx_zmqip(self):
|
def rx_zmqip(self):
|
||||||
"""
|
"""
|
||||||
Zmq Ip Address from which data is to be streamed out of the receiver.
|
Zmq Ip Address from which data is to be streamed out of the receiver.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Also restarts receiver zmq streaming if enabled. \n
|
Also restarts receiver zmq streaming if enabled. \n
|
||||||
@ -1010,6 +1047,7 @@ class Detector(CppDetectorApi):
|
|||||||
def zmqip(self):
|
def zmqip(self):
|
||||||
"""
|
"""
|
||||||
Ip Address to listen to zmq data streamed out from receiver or intermediate process.
|
Ip Address to listen to zmq data streamed out from receiver or intermediate process.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Also restarts client zmq streaming if enabled. \n
|
Also restarts client zmq streaming if enabled. \n
|
||||||
@ -1060,10 +1098,12 @@ class Detector(CppDetectorApi):
|
|||||||
def udp_dstip(self):
|
def udp_dstip(self):
|
||||||
"""
|
"""
|
||||||
Ip address of the receiver (destination) udp interface.
|
Ip address of the receiver (destination) udp interface.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
If 'auto' used, then ip is set to ip of rx_hostname. \n
|
If 'auto' used, then ip is set to ip of rx_hostname. \n
|
||||||
To set IPs for individual modules, use setDestinationUDPIP.
|
To set IPs for individual modules, use setDestinationUDPIP.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
------
|
------
|
||||||
>>> d.udp_dstip = '192.168.1.110'
|
>>> d.udp_dstip = '192.168.1.110'
|
||||||
@ -1085,12 +1125,14 @@ class Detector(CppDetectorApi):
|
|||||||
def udp_dstip2(self):
|
def udp_dstip2(self):
|
||||||
"""
|
"""
|
||||||
[Jungfrau][Gotthard2] Ip address of the receiver (destination) udp interface 2.
|
[Jungfrau][Gotthard2] Ip address of the receiver (destination) udp interface 2.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
[Jungfrau] bottom half \n
|
[Jungfrau] bottom half \n
|
||||||
[Gotthard2] veto debugging \n
|
[Gotthard2] veto debugging \n
|
||||||
If 'auto' used, then ip is set to ip of rx_hostname. \n
|
If 'auto' used, then ip is set to ip of rx_hostname. \n
|
||||||
To set IPs for individual modules, use setDestinationUDPIP2.
|
To set IPs for individual modules, use setDestinationUDPIP2.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
------
|
------
|
||||||
>>> d.udp_dstip2 = '10.1.1.185'
|
>>> d.udp_dstip2 = '10.1.1.185'
|
||||||
@ -1111,10 +1153,12 @@ class Detector(CppDetectorApi):
|
|||||||
def udp_dstmac(self):
|
def udp_dstmac(self):
|
||||||
"""
|
"""
|
||||||
Mac address of the receiver (destination) udp interface.
|
Mac address of the receiver (destination) udp interface.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Not mandatory to set as udp_dstip retrieves it from slsReceiver process but must be set if you use a custom receiver (not slsReceiver). \n
|
Not mandatory to set as udp_dstip retrieves it from slsReceiver process but must be set if you use a custom receiver (not slsReceiver). \n
|
||||||
To set MACs for individual modules, use setDestinationUDPMAC.
|
To set MACs for individual modules, use setDestinationUDPMAC.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.udp_dstmac = '00:1b:31:01:8a:de'
|
>>> d.udp_dstmac = '00:1b:31:01:8a:de'
|
||||||
@ -1133,12 +1177,14 @@ class Detector(CppDetectorApi):
|
|||||||
def udp_dstmac2(self):
|
def udp_dstmac2(self):
|
||||||
"""
|
"""
|
||||||
[Jungfrau][Gotthard2] Mac address of the receiver (destination) udp interface 2.
|
[Jungfrau][Gotthard2] Mac address of the receiver (destination) udp interface 2.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Not mandatory to set as udp_dstip2 retrieves it from slsReceiver process but must be set if you use a custom receiver (not slsReceiver). \n
|
Not mandatory to set as udp_dstip2 retrieves it from slsReceiver process but must be set if you use a custom receiver (not slsReceiver). \n
|
||||||
To set MACs for individual modules, use setDestinationUDPMAC2. \n
|
To set MACs for individual modules, use setDestinationUDPMAC2. \n
|
||||||
[Jungfrau] bottom half \n
|
[Jungfrau] bottom half \n
|
||||||
[Gotthard2] veto debugging \n
|
[Gotthard2] veto debugging \n
|
||||||
|
|
||||||
Example
|
Example
|
||||||
------
|
------
|
||||||
>>> d.udp_dstmac2 = '00:1b:31:01:8a:de'
|
>>> d.udp_dstmac2 = '00:1b:31:01:8a:de'
|
||||||
@ -1157,10 +1203,12 @@ class Detector(CppDetectorApi):
|
|||||||
def udp_srcmac(self):
|
def udp_srcmac(self):
|
||||||
"""
|
"""
|
||||||
Mac address of the receiver (source) udp interface.
|
Mac address of the receiver (source) udp interface.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
[Eiger] Do not set as detector will replace with its own DHCP Mac (1G) or DHCP Mac + 1 (10G). \n
|
[Eiger] Do not set as detector will replace with its own DHCP Mac (1G) or DHCP Mac + 1 (10G). \n
|
||||||
To set MACs for individual modules, use setSourceUDPMAC.
|
To set MACs for individual modules, use setSourceUDPMAC.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.udp_srcmac = '00:1b:31:01:8a:de'
|
>>> d.udp_srcmac = '00:1b:31:01:8a:de'
|
||||||
@ -1179,11 +1227,13 @@ class Detector(CppDetectorApi):
|
|||||||
def udp_srcmac2(self):
|
def udp_srcmac2(self):
|
||||||
"""
|
"""
|
||||||
[Jungfrau][Gotthard2] Mac address of the receiver (source) udp interface 2.
|
[Jungfrau][Gotthard2] Mac address of the receiver (source) udp interface 2.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
[Jungfrau] bottom half \n
|
[Jungfrau] bottom half \n
|
||||||
[Gotthard2] veto debugging \n
|
[Gotthard2] veto debugging \n
|
||||||
To set MACs for individual modules, use setSourceUDPMAC2.
|
To set MACs for individual modules, use setSourceUDPMAC2.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.udp_srcmac2 = '00:1b:31:01:8a:de'
|
>>> d.udp_srcmac2 = '00:1b:31:01:8a:de'
|
||||||
@ -1202,11 +1252,13 @@ class Detector(CppDetectorApi):
|
|||||||
def udp_srcip(self):
|
def udp_srcip(self):
|
||||||
"""
|
"""
|
||||||
Ip address of the detector (source) udp interface.
|
Ip address of the detector (source) udp interface.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Must be same subnet as destination udp ip.\n
|
Must be same subnet as destination udp ip.\n
|
||||||
[Eiger] Set only for 10G. For 1G, detector will replace with its own DHCP IP address. \n
|
[Eiger] Set only for 10G. For 1G, detector will replace with its own DHCP IP address. \n
|
||||||
To set IPs for individual modules, use setSourceUDPIP.
|
To set IPs for individual modules, use setSourceUDPIP.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.udp_srcip = '192.168.1.127'
|
>>> d.udp_srcip = '192.168.1.127'
|
||||||
@ -1225,12 +1277,14 @@ class Detector(CppDetectorApi):
|
|||||||
def udp_srcip2(self):
|
def udp_srcip2(self):
|
||||||
"""
|
"""
|
||||||
[Jungfrau][Gotthard2] Ip address of the detector (source) udp interface 2.
|
[Jungfrau][Gotthard2] Ip address of the detector (source) udp interface 2.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
[Jungfrau] bottom half \n
|
[Jungfrau] bottom half \n
|
||||||
[Gotthard2] veto debugging \n
|
[Gotthard2] veto debugging \n
|
||||||
Must be same subnet as destination udp ip2.\n
|
Must be same subnet as destination udp ip2.\n
|
||||||
To set IPs for individual modules, use setSourceUDPIP2.
|
To set IPs for individual modules, use setSourceUDPIP2.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.udp_srcip2 = '192.168.1.127'
|
>>> d.udp_srcip2 = '192.168.1.127'
|
||||||
@ -1249,6 +1303,7 @@ class Detector(CppDetectorApi):
|
|||||||
def udp_dstport(self):
|
def udp_dstport(self):
|
||||||
"""
|
"""
|
||||||
Port number of the receiver (destination) udp interface.
|
Port number of the receiver (destination) udp interface.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Default is 50001. \n
|
Default is 50001. \n
|
||||||
@ -1266,6 +1321,7 @@ class Detector(CppDetectorApi):
|
|||||||
def udp_dstport2(self):
|
def udp_dstport2(self):
|
||||||
"""
|
"""
|
||||||
Port number of the receiver (destination) udp interface.
|
Port number of the receiver (destination) udp interface.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Default is 50002. \n
|
Default is 50002. \n
|
||||||
@ -1320,6 +1376,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def status(self):
|
def status(self):
|
||||||
"""Gets detector status. Enum: runStatus
|
"""Gets detector status. Enum: runStatus
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Options: IDLE, ERROR, WAITING, RUN_FINISHED, TRANSMITTING, RUNNING, STOPPED \n
|
Options: IDLE, ERROR, WAITING, RUN_FINISHED, TRANSMITTING, RUNNING, STOPPED \n
|
||||||
@ -1333,6 +1390,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def rx_status(self):
|
def rx_status(self):
|
||||||
"""Gets receiver listener status. Enum: runStatus
|
"""Gets receiver listener status. Enum: runStatus
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Options: IDLE, TRANSMITTING, RUNNING
|
Options: IDLE, TRANSMITTING, RUNNING
|
||||||
@ -1361,10 +1419,13 @@ class Detector(CppDetectorApi):
|
|||||||
def trimbits(self):
|
def trimbits(self):
|
||||||
"""
|
"""
|
||||||
[Eiger][Mythen3] Loads custom trimbit file to detector.
|
[Eiger][Mythen3] Loads custom trimbit file to detector.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
If no extension specified, serial number of each module is attached.
|
If no extension specified, serial number of each module is attached.
|
||||||
|
|
||||||
:getter: Not implemented
|
:getter: Not implemented
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.trimbits = '/path_to_file/noise'
|
>>> d.trimbits = '/path_to_file/noise'
|
||||||
@ -1420,6 +1481,7 @@ class Detector(CppDetectorApi):
|
|||||||
def rx_zmqstartfnum(self):
|
def rx_zmqstartfnum(self):
|
||||||
"""
|
"""
|
||||||
The starting frame index to stream out.
|
The starting frame index to stream out.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
0 by default, which streams the first frame in an acquisition, and then depending on the rx zmq frequency/ timer.
|
0 by default, which streams the first frame in an acquisition, and then depending on the rx zmq frequency/ timer.
|
||||||
@ -1453,6 +1515,7 @@ class Detector(CppDetectorApi):
|
|||||||
def slowadc(self):
|
def slowadc(self):
|
||||||
"""
|
"""
|
||||||
[Ctb] Slow ADC channel in uV of all channels or specific ones from 0-7.
|
[Ctb] Slow ADC channel in uV of all channels or specific ones from 0-7.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.slowadc
|
>>> d.slowadc
|
||||||
@ -1521,6 +1584,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def adcinvert(self):
|
def adcinvert(self):
|
||||||
"""[Ctb][Moench][Jungfrau] ADC Inversion Mask.
|
"""[Ctb][Moench][Jungfrau] ADC Inversion Mask.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
[Jungfrau][Moench] Inversions on top of the default mask.
|
[Jungfrau][Moench] Inversions on top of the default mask.
|
||||||
@ -1536,9 +1600,11 @@ class Detector(CppDetectorApi):
|
|||||||
def triggersl(self):
|
def triggersl(self):
|
||||||
"""
|
"""
|
||||||
[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Number of triggers left in acquisition.\n
|
[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Number of triggers left in acquisition.\n
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Only when external trigger used.
|
Only when external trigger used.
|
||||||
|
|
||||||
:setter: Not Implemented
|
:setter: Not Implemented
|
||||||
"""
|
"""
|
||||||
return self.getNumberOfTriggersLeft()
|
return self.getNumberOfTriggersLeft()
|
||||||
@ -1547,6 +1613,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def frametime(self):
|
def frametime(self):
|
||||||
"""[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Timestamp at a frame start.
|
"""[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Timestamp at a frame start.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
[Gotthard2] not in burst and auto mode.
|
[Gotthard2] not in burst and auto mode.
|
||||||
@ -1566,6 +1633,7 @@ class Detector(CppDetectorApi):
|
|||||||
def acquire(self):
|
def acquire(self):
|
||||||
"""
|
"""
|
||||||
Run the configured measurement
|
Run the configured measurement
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Blocking command, where control server is blocked and cannot accept other commands until acquisition is done. \n
|
Blocking command, where control server is blocked and cannot accept other commands until acquisition is done. \n
|
||||||
@ -1594,9 +1662,11 @@ class Detector(CppDetectorApi):
|
|||||||
def virtual(self):
|
def virtual(self):
|
||||||
"""
|
"""
|
||||||
Setup with n virtual servers running on localhost starting with control port p
|
Setup with n virtual servers running on localhost starting with control port p
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Every virtual server will have a stop port (control port + 1)
|
Every virtual server will have a stop port (control port + 1)
|
||||||
|
|
||||||
Example
|
Example
|
||||||
---------
|
---------
|
||||||
>>> d.virtual = n, p
|
>>> d.virtual = n, p
|
||||||
@ -1626,11 +1696,11 @@ class Detector(CppDetectorApi):
|
|||||||
|
|
||||||
Known Issue
|
Known Issue
|
||||||
------------
|
------------
|
||||||
|
|
||||||
:getter: Always give 0 due to the microseconds precision.
|
:getter: Always give 0 due to the microseconds precision.
|
||||||
:setter: Use scientific notation to set custom rate correction, since timedelta resolution is 1 microseconds. \n
|
:setter: Use scientific notation to set custom rate correction, since timedelta resolution is 1 microseconds. \n
|
||||||
Or use setDefaultRateCorrection to set the default one from trimbit file
|
Or use setDefaultRateCorrection to set the default one from trimbit file
|
||||||
|
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-----------
|
-----------
|
||||||
>>> d.ratecorr = 10e-9
|
>>> d.ratecorr = 10e-9
|
||||||
@ -1650,6 +1720,7 @@ class Detector(CppDetectorApi):
|
|||||||
def readoutspeed(self):
|
def readoutspeed(self):
|
||||||
"""
|
"""
|
||||||
[Eiger][Jungfrau|Gotthard2] Readout speed of chip. Enum: speedLevel
|
[Eiger][Jungfrau|Gotthard2] Readout speed of chip. Enum: speedLevel
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
[Jungfrau] FULL_SPEED, HALF_SPEED (Default), QUARTER_SPEED
|
[Jungfrau] FULL_SPEED, HALF_SPEED (Default), QUARTER_SPEED
|
||||||
@ -1668,11 +1739,13 @@ class Detector(CppDetectorApi):
|
|||||||
def rx_jsonpara(self):
|
def rx_jsonpara(self):
|
||||||
"""
|
"""
|
||||||
Set the receiver additional json parameter.
|
Set the receiver additional json parameter.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Use only if to be processed by an intermediate user process listening to receiver zmq packets, such as Moench \n
|
Use only if to be processed by an intermediate user process listening to receiver zmq packets, such as Moench \n
|
||||||
If not found, the pair is appended. Empty value deletes parameter. Max 20 characters for each key/value.\n
|
If not found, the pair is appended. Empty value deletes parameter. Max 20 characters for each key/value.\n
|
||||||
On setting the value is automatically, it is converted to a string.
|
On setting the value is automatically, it is converted to a string.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-----------
|
-----------
|
||||||
>>> d.rx_jsonpara['emin']
|
>>> d.rx_jsonpara['emin']
|
||||||
@ -1690,11 +1763,13 @@ class Detector(CppDetectorApi):
|
|||||||
def rx_jsonaddheader(self):
|
def rx_jsonaddheader(self):
|
||||||
"""
|
"""
|
||||||
Additional json header to be streamed out from receiver via zmq.
|
Additional json header to be streamed out from receiver via zmq.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Default is empty. Max 20 characters for each key/value\n
|
Default is empty. Max 20 characters for each key/value\n
|
||||||
Use only if to be processed by an intermediate user process listening to receiver zmq packets, such as Moench \n
|
Use only if to be processed by an intermediate user process listening to receiver zmq packets, such as Moench \n
|
||||||
Empty value deletes header.
|
Empty value deletes header.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.rx_jsonaddheader
|
>>> d.rx_jsonaddheader
|
||||||
@ -1713,9 +1788,11 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def threshold(self):
|
def threshold(self):
|
||||||
"""[Eiger] Threshold in eV
|
"""[Eiger] Threshold in eV
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
To change settings as well or set threshold without trimbits, use setThresholdEnergy.
|
To change settings as well or set threshold without trimbits, use setThresholdEnergy.
|
||||||
|
|
||||||
:setter: It loads trim files from settingspath.
|
:setter: It loads trim files from settingspath.
|
||||||
"""
|
"""
|
||||||
if self.type == detectorType.MYTHEN3:
|
if self.type == detectorType.MYTHEN3:
|
||||||
@ -1731,6 +1808,7 @@ class Detector(CppDetectorApi):
|
|||||||
def timing(self):
|
def timing(self):
|
||||||
"""
|
"""
|
||||||
Set Timing Mode of detector. Enum: timingMode
|
Set Timing Mode of detector. Enum: timingMode
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Default: AUTO_TIMING \n
|
Default: AUTO_TIMING \n
|
||||||
@ -1749,6 +1827,7 @@ class Detector(CppDetectorApi):
|
|||||||
def trimen(self):
|
def trimen(self):
|
||||||
"""
|
"""
|
||||||
[Eiger] List of trim energies, where corresponding default trim files exist in corresponding trim folders.
|
[Eiger] List of trim energies, where corresponding default trim files exist in corresponding trim folders.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
------
|
------
|
||||||
>>> d.trimen
|
>>> d.trimen
|
||||||
@ -1768,6 +1847,7 @@ class Detector(CppDetectorApi):
|
|||||||
def vthreshold(self):
|
def vthreshold(self):
|
||||||
"""
|
"""
|
||||||
[Eiger][Mythen3] Detector threshold voltage for single photon counters in dac units.
|
[Eiger][Mythen3] Detector threshold voltage for single photon counters in dac units.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
[Eiger] Sets vcmp_ll, vcmp_lr, vcmp_rl, vcmp_rr and vcp to the same value. \n
|
[Eiger] Sets vcmp_ll, vcmp_lr, vcmp_rl, vcmp_rr and vcp to the same value. \n
|
||||||
@ -1788,8 +1868,10 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def type(self):
|
def type(self):
|
||||||
""" Returns detector type. Enum: detectorType
|
""" Returns detector type. Enum: detectorType
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
|
|
||||||
:setter: Not implemented
|
:setter: Not implemented
|
||||||
Values: EIGER, JUNGFRAU, GOTTHARD, MOENCH, MYTHEN3, GOTTHARD2, CHIPTESTBOARD
|
Values: EIGER, JUNGFRAU, GOTTHARD, MOENCH, MYTHEN3, GOTTHARD2, CHIPTESTBOARD
|
||||||
"""
|
"""
|
||||||
@ -1842,9 +1924,11 @@ class Detector(CppDetectorApi):
|
|||||||
def subexptime(self):
|
def subexptime(self):
|
||||||
"""
|
"""
|
||||||
[Eiger] Exposure time of EIGER subframes in 32 bit mode.
|
[Eiger] Exposure time of EIGER subframes in 32 bit mode.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Subperiod = subexptime + subdeadtime.
|
Subperiod = subexptime + subdeadtime.
|
||||||
|
|
||||||
:getter: always returns in seconds. To get in datetime.delta, use getSubExptime
|
:getter: always returns in seconds. To get in datetime.delta, use getSubExptime
|
||||||
|
|
||||||
Example
|
Example
|
||||||
@ -1869,6 +1953,7 @@ class Detector(CppDetectorApi):
|
|||||||
"""
|
"""
|
||||||
[Eiger] Number of rows to read out per half module starting from the centre.
|
[Eiger] Number of rows to read out per half module starting from the centre.
|
||||||
[Jungfrau] Number of rows to read per module starting from the centre.
|
[Jungfrau] Number of rows to read per module starting from the centre.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
[Eiger] Options: 1 - 256. 256 is default. \n
|
[Eiger] Options: 1 - 256. 256 is default. \n
|
||||||
@ -1886,9 +1971,11 @@ class Detector(CppDetectorApi):
|
|||||||
def subdeadtime(self):
|
def subdeadtime(self):
|
||||||
"""
|
"""
|
||||||
[Eiger] Dead time of EIGER subframes in 32 bit mode, accepts either a value in seconds or datetime.timedelta
|
[Eiger] Dead time of EIGER subframes in 32 bit mode, accepts either a value in seconds or datetime.timedelta
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Subperiod = subexptime + subdeadtime.
|
Subperiod = subexptime + subdeadtime.
|
||||||
|
|
||||||
:getter: always returns in seconds. To get in datetime.delta, use getSubDeadTime
|
:getter: always returns in seconds. To get in datetime.delta, use getSubDeadTime
|
||||||
|
|
||||||
Example
|
Example
|
||||||
@ -1912,6 +1999,7 @@ class Detector(CppDetectorApi):
|
|||||||
def parallel(self):
|
def parallel(self):
|
||||||
"""
|
"""
|
||||||
[Eiger][Mythen3] Enable or disable the parallel readout mode of detector.
|
[Eiger][Mythen3] Enable or disable the parallel readout mode of detector.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
[Mythen3] If exposure time is too short, acquisition will return with an ERROR and take fewer frames than expected.
|
[Mythen3] If exposure time is too short, acquisition will return with an ERROR and take fewer frames than expected.
|
||||||
@ -1926,6 +2014,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def partialreset(self):
|
def partialreset(self):
|
||||||
"""[Eiger] Sets up detector to do partial or complete reset at start of acquisition. 0 complete reset, 1 partial reset. Default is complete reset.
|
"""[Eiger] Sets up detector to do partial or complete reset at start of acquisition. 0 complete reset, 1 partial reset. Default is complete reset.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Advanced Function!
|
Advanced Function!
|
||||||
@ -1994,6 +2083,7 @@ class Detector(CppDetectorApi):
|
|||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Can be measured with minimum 2 frames in an acquisition.
|
Can be measured with minimum 2 frames in an acquisition.
|
||||||
|
|
||||||
:setter: Not implemented
|
:setter: Not implemented
|
||||||
"""
|
"""
|
||||||
return ut.reduce_time(self.getMeasuredPeriod())
|
return ut.reduce_time(self.getMeasuredPeriod())
|
||||||
@ -2003,8 +2093,10 @@ class Detector(CppDetectorApi):
|
|||||||
def measuredsubperiod(self):
|
def measuredsubperiod(self):
|
||||||
"""
|
"""
|
||||||
[Eiger] Measured sub frame period between last sub frame and previous one.
|
[Eiger] Measured sub frame period between last sub frame and previous one.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:setter: Not implemented
|
:setter: Not implemented
|
||||||
"""
|
"""
|
||||||
return ut.reduce_time(self.getMeasuredSubFramePeriod())
|
return ut.reduce_time(self.getMeasuredSubFramePeriod())
|
||||||
@ -2029,7 +2121,7 @@ class Detector(CppDetectorApi):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
@element
|
@element
|
||||||
def auto_comp_disable(self):
|
def autocompdisable(self):
|
||||||
"""[Jungfrau] Enable or disable auto comparator disable mode.
|
"""[Jungfrau] Enable or disable auto comparator disable mode.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
@ -2039,33 +2131,34 @@ class Detector(CppDetectorApi):
|
|||||||
"""
|
"""
|
||||||
return self.getAutoComparatorDisable()
|
return self.getAutoComparatorDisable()
|
||||||
|
|
||||||
@auto_comp_disable.setter
|
@autocompdisable.setter
|
||||||
def auto_comp_disable(self, value):
|
def autocompdisable(self, value):
|
||||||
ut.set_using_dict(self.setAutoComparatorDisable, value)
|
ut.set_using_dict(self.setAutoComparatorDisable, value)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@element
|
@element
|
||||||
def comp_disable_time(self):
|
def compdisabletime(self):
|
||||||
"""[Jungfrau] Time before end of exposure when comparator is disabled.
|
"""[Jungfrau] Time before end of exposure when comparator is disabled.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
It is only possible for chipv1.1.
|
It is only possible for chipv1.1.
|
||||||
|
|
||||||
:getter: always returns in seconds. To get in datetime.delta, use getComparatorDisableTime
|
:getter: always returns in seconds. To get in datetime.delta, use getComparatorDisableTime
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-----------
|
-----------
|
||||||
>>> d.comp_disable_time = 1.05
|
>>> d.compdisabletime = 1.05
|
||||||
>>> d.comp_disable_time = datetime.timedelta(minutes = 3, seconds = 1.23)
|
>>> d.compdisabletime = datetime.timedelta(minutes = 3, seconds = 1.23)
|
||||||
>>> d.comp_disable_time
|
>>> d.compdisabletime
|
||||||
181.23
|
181.23
|
||||||
>>> d.getComparatorDisableTime()
|
>>> d.getComparatorDisableTime()
|
||||||
[datetime.timedelta(seconds=181, microseconds=230000)]
|
[datetime.timedelta(seconds=181, microseconds=230000)]
|
||||||
"""
|
"""
|
||||||
return ut.reduce_time(self.getComparatorDisableTime())
|
return ut.reduce_time(self.getComparatorDisableTime())
|
||||||
|
|
||||||
@comp_disable_time.setter
|
@compdisabletime.setter
|
||||||
def comp_disable_time(self, value):
|
def compdisabletime(self, value):
|
||||||
ut.set_time_using_dict(self.setComparatorDisableTime, value)
|
ut.set_time_using_dict(self.setComparatorDisableTime, value)
|
||||||
|
|
||||||
|
|
||||||
@ -2073,6 +2166,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def runtime(self):
|
def runtime(self):
|
||||||
"""[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Time from detector start up.
|
"""[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Time from detector start up.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
[Gotthard2] not in burst and auto mode.
|
[Gotthard2] not in burst and auto mode.
|
||||||
@ -2081,19 +2175,20 @@ class Detector(CppDetectorApi):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
@element
|
@element
|
||||||
def storagecells(self):
|
def extrastoragecells(self):
|
||||||
"""
|
"""
|
||||||
[Jungfrau] Number of additional storage cells.
|
[Jungfrau] Number of additional storage cells.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Only for chip v1.0. For advanced users only. \n
|
Only for chip v1.0. For advanced users only. \n
|
||||||
Options: 0 - 15. Default is 0.
|
Options: 0 - 15. Default is 0.
|
||||||
The #images = #frames x #triggers x (#storagecells + 1)
|
The #images = #frames x #triggers x (#extrastoragecells + 1)
|
||||||
"""
|
"""
|
||||||
return self.getNumberOfAdditionalStorageCells()
|
return self.getNumberOfAdditionalStorageCells()
|
||||||
|
|
||||||
@storagecells.setter
|
@extrastoragecells.setter
|
||||||
def storagecells(self, n_cells):
|
def extrastoragecells(self, n_cells):
|
||||||
ut.set_using_dict(self.setNumberOfAdditionalStorageCells, n_cells)
|
ut.set_using_dict(self.setNumberOfAdditionalStorageCells, n_cells)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -2117,10 +2212,12 @@ class Detector(CppDetectorApi):
|
|||||||
def storagecell_delay(self):
|
def storagecell_delay(self):
|
||||||
"""
|
"""
|
||||||
[Jungfrau] Additional time delay between 2 consecutive exposures in burst mode, accepts either a value in seconds or datetime.timedelta
|
[Jungfrau] Additional time delay between 2 consecutive exposures in burst mode, accepts either a value in seconds or datetime.timedelta
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Only applicable for chipv1.0. For advanced users only \n
|
Only applicable for chipv1.0. For advanced users only \n
|
||||||
Value: 0-1638375 ns (resolution of 25ns) \n
|
Value: 0-1638375 ns (resolution of 25ns)
|
||||||
|
|
||||||
:getter: always returns in seconds. To get in datetime.delta, use getStorageCellDelay
|
:getter: always returns in seconds. To get in datetime.delta, use getStorageCellDelay
|
||||||
|
|
||||||
Example
|
Example
|
||||||
@ -2143,6 +2240,7 @@ class Detector(CppDetectorApi):
|
|||||||
def temp_threshold(self):
|
def temp_threshold(self):
|
||||||
"""
|
"""
|
||||||
[Jungfrau] Threshold temperature in degrees.
|
[Jungfrau] Threshold temperature in degrees.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
If temperature crosses threshold temperature and temperature control is enabled, power to chip will be switched off and temperature event occurs. \n
|
If temperature crosses threshold temperature and temperature control is enabled, power to chip will be switched off and temperature event occurs. \n
|
||||||
@ -2159,10 +2257,12 @@ class Detector(CppDetectorApi):
|
|||||||
def temp_event(self):
|
def temp_event(self):
|
||||||
"""
|
"""
|
||||||
[Jungfrau] 1, if a temperature event occured. \n
|
[Jungfrau] 1, if a temperature event occured. \n
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
If temperature crosses threshold temperature and temperature control is enabled, power to chip will be switched off and temperature event occurs. \n
|
If temperature crosses threshold temperature and temperature control is enabled, power to chip will be switched off and temperature event occurs. \n
|
||||||
To power on chip again, temperature has to be less than threshold temperature and temperature event has to be cleared/reset.
|
To power on chip again, temperature has to be less than threshold temperature and temperature event has to be cleared/reset.
|
||||||
|
|
||||||
:setter: To clear the event, set it to 0.
|
:setter: To clear the event, set it to 0.
|
||||||
"""
|
"""
|
||||||
return self.getTemperatureEvent()
|
return self.getTemperatureEvent()
|
||||||
@ -2185,6 +2285,7 @@ class Detector(CppDetectorApi):
|
|||||||
def temp_control(self):
|
def temp_control(self):
|
||||||
"""
|
"""
|
||||||
[Jungfrau] Temperature control enable.
|
[Jungfrau] Temperature control enable.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Default is 0 (disabled). \n
|
Default is 0 (disabled). \n
|
||||||
@ -2201,6 +2302,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def selinterface(self):
|
def selinterface(self):
|
||||||
"""[Jungfrau] The udp interface to stream data from detector.
|
"""[Jungfrau] The udp interface to stream data from detector.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Effective only when number of interfaces is 1. Default: 0 (outer). Inner is 1.
|
Effective only when number of interfaces is 1. Default: 0 (outer). Inner is 1.
|
||||||
@ -2265,9 +2367,11 @@ class Detector(CppDetectorApi):
|
|||||||
def burstsl(self):
|
def burstsl(self):
|
||||||
"""
|
"""
|
||||||
[Gotthard2] Number of bursts left in acquisition.\n
|
[Gotthard2] Number of bursts left in acquisition.\n
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Only in burst auto mode.
|
Only in burst auto mode.
|
||||||
|
|
||||||
:setter: Not Implemented
|
:setter: Not Implemented
|
||||||
"""
|
"""
|
||||||
return self.getNumberOfBurstsLeft()
|
return self.getNumberOfBurstsLeft()
|
||||||
@ -2278,6 +2382,7 @@ class Detector(CppDetectorApi):
|
|||||||
"""
|
"""
|
||||||
[Gotthard2][Jungfrau] Set filter resistor. Increasing values for increasing "
|
[Gotthard2][Jungfrau] Set filter resistor. Increasing values for increasing "
|
||||||
"resistance.
|
"resistance.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Advanced user command.
|
Advanced user command.
|
||||||
@ -2292,26 +2397,30 @@ class Detector(CppDetectorApi):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
@element
|
@element
|
||||||
def filtercell(self):
|
def filtercells(self):
|
||||||
"""
|
"""
|
||||||
[Jungfrau] Set filter capacitor.
|
[Jungfrau] Set filter capacitor.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
[Jungfrau] Options: 0-12. Default: 0. Advanced user command. Only for chipv1.1.
|
[Jungfrau] Options: 0-12. Default: 0. Advanced user command. Only for chipv1.1.
|
||||||
"""
|
"""
|
||||||
return self.getFilterCell()
|
return self.getNumberOfFilterCells()
|
||||||
|
|
||||||
@filtercell.setter
|
@filtercells.setter
|
||||||
def filtercell(self, value):
|
def filtercells(self, value):
|
||||||
ut.set_using_dict(self.setFilterCell, value)
|
ut.set_using_dict(self.setNumberOfFilterCells, value)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def maxclkphaseshift(self):
|
def maxclkphaseshift(self):
|
||||||
"""
|
"""
|
||||||
[Gotthard2][Mythen3] Absolute maximum Phase shift of clocks.
|
[Gotthard2][Mythen3] Absolute maximum Phase shift of clocks.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
|
|
||||||
:setter: Not Implemented
|
:setter: Not Implemented
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.maxclkphaseshift
|
>>> d.maxclkphaseshift
|
||||||
@ -2328,6 +2437,7 @@ class Detector(CppDetectorApi):
|
|||||||
def timingsource(self):
|
def timingsource(self):
|
||||||
"""
|
"""
|
||||||
[Gotthard2] Timing source. Enum: timingSourceType
|
[Gotthard2] Timing source. Enum: timingSourceType
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
Options: TIMING_INTERNAL, TIMING_EXTERNAL \n
|
Options: TIMING_INTERNAL, TIMING_EXTERNAL \n
|
||||||
@ -2345,6 +2455,7 @@ class Detector(CppDetectorApi):
|
|||||||
def veto(self):
|
def veto(self):
|
||||||
"""
|
"""
|
||||||
[Gotthard2] Enable or disable veto data from chip.
|
[Gotthard2] Enable or disable veto data from chip.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Default is 0.
|
Default is 0.
|
||||||
@ -2370,6 +2481,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def burstmode(self):
|
def burstmode(self):
|
||||||
"""[Gotthard2] Burst mode of detector. Enum: burstMode
|
"""[Gotthard2] Burst mode of detector. Enum: burstMode
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
BURST_INTERNAL (default), BURST_EXTERNAL, CONTINUOUS_INTERNAL, CONTINUOUS_EXTERNAL
|
BURST_INTERNAL (default), BURST_EXTERNAL, CONTINUOUS_INTERNAL, CONTINUOUS_EXTERNAL
|
||||||
@ -2384,8 +2496,10 @@ class Detector(CppDetectorApi):
|
|||||||
def burstperiod(self):
|
def burstperiod(self):
|
||||||
"""
|
"""
|
||||||
[Gotthard2] Period between 2 bursts. Only in burst mode and auto timing mode.
|
[Gotthard2] Period between 2 bursts. Only in burst mode and auto timing mode.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:getter: always returns in seconds. To get in datetime.delta, use getBurstPeriod
|
:getter: always returns in seconds. To get in datetime.delta, use getBurstPeriod
|
||||||
|
|
||||||
Example
|
Example
|
||||||
@ -2430,10 +2544,13 @@ class Detector(CppDetectorApi):
|
|||||||
"""
|
"""
|
||||||
[Gotthard2] Set veto reference for 128 channels for chip ichip according to reference file
|
[Gotthard2] Set veto reference for 128 channels for chip ichip according to reference file
|
||||||
and #photons and energy in keV.
|
and #photons and energy in keV.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Arguments: (chip_index, n_photons, photon_energy, fname)
|
Arguments: (chip_index, n_photons, photon_energy, fname)
|
||||||
|
|
||||||
:getter: Not Implemented
|
:getter: Not Implemented
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.vetophoton = (2, 24, 2560, '/tmp/bla.txt')
|
>>> d.vetophoton = (2, 24, 2560, '/tmp/bla.txt')
|
||||||
@ -2451,6 +2568,7 @@ class Detector(CppDetectorApi):
|
|||||||
def vetoref(self):
|
def vetoref(self):
|
||||||
"""
|
"""
|
||||||
[Gotthard2] Set veto reference for all 128 channels for all chips.
|
[Gotthard2] Set veto reference for all 128 channels for all chips.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
----------
|
----------
|
||||||
>>> d.vetoref = chip, value
|
>>> d.vetoref = chip, value
|
||||||
@ -2468,6 +2586,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def vetostream(self):
|
def vetostream(self):
|
||||||
"""[Gotthard2] Enabling/ disabling veto interface
|
"""[Gotthard2] Enabling/ disabling veto interface
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Default: both off
|
Default: both off
|
||||||
@ -2485,11 +2604,13 @@ class Detector(CppDetectorApi):
|
|||||||
@property
|
@property
|
||||||
def vetoalg(self):
|
def vetoalg(self):
|
||||||
"""[Gotthard2] Algorithm used for veto. Enum: vetoAlgorithm, streamingInterface
|
"""[Gotthard2] Algorithm used for veto. Enum: vetoAlgorithm, streamingInterface
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Options:
|
Options:
|
||||||
(vetoAlgorithm): ALG_HITS (default), ALG_RAW
|
(vetoAlgorithm): ALG_HITS (default), ALG_RAW
|
||||||
(streamingInterface): ETHERNET_10GB, LOW_LATENCY_LINK
|
(streamingInterface): ETHERNET_10GB, LOW_LATENCY_LINK
|
||||||
|
|
||||||
Example
|
Example
|
||||||
----------
|
----------
|
||||||
>>> d.vetoalg = defs.ALG_HITS, defs.ETHERNET_10GB
|
>>> d.vetoalg = defs.ALG_HITS, defs.ETHERNET_10GB
|
||||||
@ -2593,6 +2714,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def adcenable10g(self):
|
def adcenable10g(self):
|
||||||
"""[Ctb][Moench] ADC Enable Mask for 10Gb mode for each 32 ADC channel.
|
"""[Ctb][Moench] ADC Enable Mask for 10Gb mode for each 32 ADC channel.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
If any of a consecutive 4 bits are enabled, the complete 4 bits are enabled."""
|
If any of a consecutive 4 bits are enabled, the complete 4 bits are enabled."""
|
||||||
@ -2698,6 +2820,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def dbitpipeline(self):
|
def dbitpipeline(self):
|
||||||
"""[Ctb][Gotthard2] Pipeline of the clock for latching digital bits.
|
"""[Ctb][Gotthard2] Pipeline of the clock for latching digital bits.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
[CTB] Options: 0 - 255
|
[CTB] Options: 0 - 255
|
||||||
@ -2713,8 +2836,10 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def maxdbitphaseshift(self):
|
def maxdbitphaseshift(self):
|
||||||
"""[CTB][Jungfrau] Absolute maximum Phase shift of of the clock to latch digital bits.
|
"""[CTB][Jungfrau] Absolute maximum Phase shift of of the clock to latch digital bits.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:setter: Not Implemented
|
:setter: Not Implemented
|
||||||
"""
|
"""
|
||||||
return self.getMaxDBITPhaseShift()
|
return self.getMaxDBITPhaseShift()
|
||||||
@ -2758,8 +2883,10 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def maxadcphaseshift(self):
|
def maxadcphaseshift(self):
|
||||||
"""[Jungfrau][CTB][Moench] Absolute maximum Phase shift of ADC clock.
|
"""[Jungfrau][CTB][Moench] Absolute maximum Phase shift of ADC clock.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:setter: Not Implemented
|
:setter: Not Implemented
|
||||||
"""
|
"""
|
||||||
return self.getMaxADCPhaseShift()
|
return self.getMaxADCPhaseShift()
|
||||||
@ -2808,8 +2935,10 @@ class Detector(CppDetectorApi):
|
|||||||
def syncclk(self):
|
def syncclk(self):
|
||||||
"""
|
"""
|
||||||
[Ctb][Moench] Sync clock in MHz.
|
[Ctb][Moench] Sync clock in MHz.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:setter: Not implemented
|
:setter: Not implemented
|
||||||
"""
|
"""
|
||||||
return self.getSYNCClock()
|
return self.getSYNCClock()
|
||||||
@ -2817,9 +2946,12 @@ class Detector(CppDetectorApi):
|
|||||||
@property
|
@property
|
||||||
def pattern(self):
|
def pattern(self):
|
||||||
"""[Mythen3][Moench][Ctb] Loads ASCII pattern file directly to server (instead of executing line by line).
|
"""[Mythen3][Moench][Ctb] Loads ASCII pattern file directly to server (instead of executing line by line).
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
|
|
||||||
:getter: Not Implemented
|
:getter: Not Implemented
|
||||||
|
|
||||||
Example
|
Example
|
||||||
---------
|
---------
|
||||||
>>> d.pattern = '/tmp/pat.txt'
|
>>> d.pattern = '/tmp/pat.txt'
|
||||||
@ -3140,6 +3272,7 @@ class Detector(CppDetectorApi):
|
|||||||
@element
|
@element
|
||||||
def v_io(self):
|
def v_io(self):
|
||||||
"""[Ctb] Voltage supply io in mV. Minimum 1200 mV.
|
"""[Ctb] Voltage supply io in mV. Minimum 1200 mV.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
Must be the first power regulator to be set after fpga reset (on-board detector server start up).
|
Must be the first power regulator to be set after fpga reset (on-board detector server start up).
|
||||||
@ -3170,6 +3303,7 @@ class Detector(CppDetectorApi):
|
|||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:setter: Not implemented
|
:setter: Not implemented
|
||||||
"""
|
"""
|
||||||
return self.getMeasuredCurrent(dacIndex.I_POWER_A)
|
return self.getMeasuredCurrent(dacIndex.I_POWER_A)
|
||||||
@ -3181,6 +3315,7 @@ class Detector(CppDetectorApi):
|
|||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:setter: Not implemented
|
:setter: Not implemented
|
||||||
"""
|
"""
|
||||||
return self.getMeasuredCurrent(dacIndex.I_POWER_B)
|
return self.getMeasuredCurrent(dacIndex.I_POWER_B)
|
||||||
@ -3192,6 +3327,7 @@ class Detector(CppDetectorApi):
|
|||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:setter: Not implemented
|
:setter: Not implemented
|
||||||
"""
|
"""
|
||||||
return self.getMeasuredCurrent(dacIndex.I_POWER_C)
|
return self.getMeasuredCurrent(dacIndex.I_POWER_C)
|
||||||
@ -3203,6 +3339,7 @@ class Detector(CppDetectorApi):
|
|||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:setter: Not implemented
|
:setter: Not implemented
|
||||||
"""
|
"""
|
||||||
return self.getMeasuredCurrent(dacIndex.I_POWER_D)
|
return self.getMeasuredCurrent(dacIndex.I_POWER_D)
|
||||||
@ -3214,6 +3351,7 @@ class Detector(CppDetectorApi):
|
|||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:setter: Not implemented
|
:setter: Not implemented
|
||||||
"""
|
"""
|
||||||
return self.getMeasuredCurrent(dacIndex.I_POWER_IO)
|
return self.getMeasuredCurrent(dacIndex.I_POWER_IO)
|
||||||
@ -3223,6 +3361,7 @@ class Detector(CppDetectorApi):
|
|||||||
def clkdiv(self):
|
def clkdiv(self):
|
||||||
"""
|
"""
|
||||||
[Gotthard2][Mythen3] Clock Divider of all clocks. Must be greater than 1.
|
[Gotthard2][Mythen3] Clock Divider of all clocks. Must be greater than 1.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.clkdiv[0] = 20
|
>>> d.clkdiv[0] = 20
|
||||||
@ -3244,10 +3383,13 @@ class Detector(CppDetectorApi):
|
|||||||
@property
|
@property
|
||||||
def exptimel(self):
|
def exptimel(self):
|
||||||
"""[Gotthard] Exposure time left for current frame.
|
"""[Gotthard] Exposure time left for current frame.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:getter: always returns in seconds. To get in datetime.delta, use getExptimeLeft
|
:getter: always returns in seconds. To get in datetime.delta, use getExptimeLeft
|
||||||
:setter: Not Implemented
|
:setter: Not Implemented
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-----------
|
-----------
|
||||||
>>> d.exptimel
|
>>> d.exptimel
|
||||||
@ -3278,9 +3420,12 @@ class Detector(CppDetectorApi):
|
|||||||
def clkfreq(self):
|
def clkfreq(self):
|
||||||
"""
|
"""
|
||||||
[Gotthard2][Mythen3] Frequency of clock in Hz.
|
[Gotthard2][Mythen3] Frequency of clock in Hz.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
-----
|
-----
|
||||||
|
|
||||||
:setter: Not implemented. Use clkdiv to set frequency
|
:setter: Not implemented. Use clkdiv to set frequency
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
>>> d.clkfreq[0]
|
>>> d.clkfreq[0]
|
||||||
@ -3304,6 +3449,7 @@ class Detector(CppDetectorApi):
|
|||||||
def initialchecks(self):
|
def initialchecks(self):
|
||||||
"""
|
"""
|
||||||
Enable or disable intial compatibility and other checks at detector start up.
|
Enable or disable intial compatibility and other checks at detector start up.
|
||||||
|
|
||||||
Note
|
Note
|
||||||
----
|
----
|
||||||
It is enabled by default. Must come before 'hostname' command to take effect. \n
|
It is enabled by default. Must come before 'hostname' command to take effect. \n
|
||||||
|
@ -1072,13 +1072,13 @@ void init_det(py::module &m) {
|
|||||||
(void (Detector::*)(const defs::gainMode, sls::Positions)) &
|
(void (Detector::*)(const defs::gainMode, sls::Positions)) &
|
||||||
Detector::setGainMode,
|
Detector::setGainMode,
|
||||||
py::arg(), py::arg() = Positions{})
|
py::arg(), py::arg() = Positions{})
|
||||||
.def("getFilterCell",
|
.def("getNumberOfFilterCells",
|
||||||
(Result<int>(Detector::*)(sls::Positions) const) &
|
(Result<int>(Detector::*)(sls::Positions) const) &
|
||||||
Detector::getFilterCell,
|
Detector::getNumberOfFilterCells,
|
||||||
py::arg() = Positions{})
|
py::arg() = Positions{})
|
||||||
.def("setFilterCell",
|
.def("setNumberOfFilterCells",
|
||||||
(void (Detector::*)(int, sls::Positions)) &
|
(void (Detector::*)(int, sls::Positions)) &
|
||||||
Detector::setFilterCell,
|
Detector::setNumberOfFilterCells,
|
||||||
py::arg(), py::arg() = Positions{})
|
py::arg(), py::arg() = Positions{})
|
||||||
.def("getROI",
|
.def("getROI",
|
||||||
(Result<defs::ROI>(Detector::*)(sls::Positions) const) &
|
(Result<defs::ROI>(Detector::*)(sls::Positions) const) &
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
|
/* WARINING This file is auto generated any edits might be overwritten without warning */
|
||||||
|
|
||||||
// SPDX-License-Identifier: LGPL-3.0-or-other
|
// SPDX-License-Identifier: LGPL-3.0-or-other
|
||||||
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||||
/* WARINING This file is auto generated any edits might be overwritten without
|
|
||||||
* warning */
|
|
||||||
|
|
||||||
#include <pybind11/chrono.h>
|
#include <pybind11/chrono.h>
|
||||||
#include <pybind11/numpy.h>
|
#include <pybind11/numpy.h>
|
||||||
#include <pybind11/operators.h>
|
#include <pybind11/operators.h>
|
||||||
@ -43,19 +42,15 @@ void init_enums(py::module &m) {
|
|||||||
|
|
||||||
py::enum_<slsDetectorDefs::frameDiscardPolicy>(Defs, "frameDiscardPolicy")
|
py::enum_<slsDetectorDefs::frameDiscardPolicy>(Defs, "frameDiscardPolicy")
|
||||||
.value("NO_DISCARD", slsDetectorDefs::frameDiscardPolicy::NO_DISCARD)
|
.value("NO_DISCARD", slsDetectorDefs::frameDiscardPolicy::NO_DISCARD)
|
||||||
.value("DISCARD_EMPTY_FRAMES",
|
.value("DISCARD_EMPTY_FRAMES", slsDetectorDefs::frameDiscardPolicy::DISCARD_EMPTY_FRAMES)
|
||||||
slsDetectorDefs::frameDiscardPolicy::DISCARD_EMPTY_FRAMES)
|
.value("DISCARD_PARTIAL_FRAMES", slsDetectorDefs::frameDiscardPolicy::DISCARD_PARTIAL_FRAMES)
|
||||||
.value("DISCARD_PARTIAL_FRAMES",
|
.value("NUM_DISCARD_POLICIES", slsDetectorDefs::frameDiscardPolicy::NUM_DISCARD_POLICIES)
|
||||||
slsDetectorDefs::frameDiscardPolicy::DISCARD_PARTIAL_FRAMES)
|
|
||||||
.value("NUM_DISCARD_POLICIES",
|
|
||||||
slsDetectorDefs::frameDiscardPolicy::NUM_DISCARD_POLICIES)
|
|
||||||
.export_values();
|
.export_values();
|
||||||
|
|
||||||
py::enum_<slsDetectorDefs::fileFormat>(Defs, "fileFormat")
|
py::enum_<slsDetectorDefs::fileFormat>(Defs, "fileFormat")
|
||||||
.value("BINARY", slsDetectorDefs::fileFormat::BINARY)
|
.value("BINARY", slsDetectorDefs::fileFormat::BINARY)
|
||||||
.value("HDF5", slsDetectorDefs::fileFormat::HDF5)
|
.value("HDF5", slsDetectorDefs::fileFormat::HDF5)
|
||||||
.value("NUM_FILE_FORMATS",
|
.value("NUM_FILE_FORMATS", slsDetectorDefs::fileFormat::NUM_FILE_FORMATS)
|
||||||
slsDetectorDefs::fileFormat::NUM_FILE_FORMATS)
|
|
||||||
.export_values();
|
.export_values();
|
||||||
|
|
||||||
py::enum_<slsDetectorDefs::dimension>(Defs, "dimension")
|
py::enum_<slsDetectorDefs::dimension>(Defs, "dimension")
|
||||||
@ -64,25 +59,19 @@ void init_enums(py::module &m) {
|
|||||||
.export_values();
|
.export_values();
|
||||||
|
|
||||||
py::enum_<slsDetectorDefs::externalSignalFlag>(Defs, "externalSignalFlag")
|
py::enum_<slsDetectorDefs::externalSignalFlag>(Defs, "externalSignalFlag")
|
||||||
.value("TRIGGER_IN_RISING_EDGE",
|
.value("TRIGGER_IN_RISING_EDGE", slsDetectorDefs::externalSignalFlag::TRIGGER_IN_RISING_EDGE)
|
||||||
slsDetectorDefs::externalSignalFlag::TRIGGER_IN_RISING_EDGE)
|
.value("TRIGGER_IN_FALLING_EDGE", slsDetectorDefs::externalSignalFlag::TRIGGER_IN_FALLING_EDGE)
|
||||||
.value("TRIGGER_IN_FALLING_EDGE",
|
.value("INVERSION_ON", slsDetectorDefs::externalSignalFlag::INVERSION_ON)
|
||||||
slsDetectorDefs::externalSignalFlag::TRIGGER_IN_FALLING_EDGE)
|
.value("INVERSION_OFF", slsDetectorDefs::externalSignalFlag::INVERSION_OFF)
|
||||||
.value("INVERSION_ON",
|
|
||||||
slsDetectorDefs::externalSignalFlag::INVERSION_ON)
|
|
||||||
.value("INVERSION_OFF",
|
|
||||||
slsDetectorDefs::externalSignalFlag::INVERSION_OFF)
|
|
||||||
.export_values();
|
.export_values();
|
||||||
|
|
||||||
py::enum_<slsDetectorDefs::timingMode>(Defs, "timingMode")
|
py::enum_<slsDetectorDefs::timingMode>(Defs, "timingMode")
|
||||||
.value("AUTO_TIMING", slsDetectorDefs::timingMode::AUTO_TIMING)
|
.value("AUTO_TIMING", slsDetectorDefs::timingMode::AUTO_TIMING)
|
||||||
.value("TRIGGER_EXPOSURE",
|
.value("TRIGGER_EXPOSURE", slsDetectorDefs::timingMode::TRIGGER_EXPOSURE)
|
||||||
slsDetectorDefs::timingMode::TRIGGER_EXPOSURE)
|
|
||||||
.value("GATED", slsDetectorDefs::timingMode::GATED)
|
.value("GATED", slsDetectorDefs::timingMode::GATED)
|
||||||
.value("BURST_TRIGGER", slsDetectorDefs::timingMode::BURST_TRIGGER)
|
.value("BURST_TRIGGER", slsDetectorDefs::timingMode::BURST_TRIGGER)
|
||||||
.value("TRIGGER_GATED", slsDetectorDefs::timingMode::TRIGGER_GATED)
|
.value("TRIGGER_GATED", slsDetectorDefs::timingMode::TRIGGER_GATED)
|
||||||
.value("NUM_TIMING_MODES",
|
.value("NUM_TIMING_MODES", slsDetectorDefs::timingMode::NUM_TIMING_MODES)
|
||||||
slsDetectorDefs::timingMode::NUM_TIMING_MODES)
|
|
||||||
.export_values();
|
.export_values();
|
||||||
|
|
||||||
py::enum_<slsDetectorDefs::dacIndex>(Defs, "dacIndex")
|
py::enum_<slsDetectorDefs::dacIndex>(Defs, "dacIndex")
|
||||||
@ -170,16 +159,13 @@ void init_enums(py::module &m) {
|
|||||||
.value("HIGH_VOLTAGE", slsDetectorDefs::dacIndex::HIGH_VOLTAGE)
|
.value("HIGH_VOLTAGE", slsDetectorDefs::dacIndex::HIGH_VOLTAGE)
|
||||||
.value("TEMPERATURE_ADC", slsDetectorDefs::dacIndex::TEMPERATURE_ADC)
|
.value("TEMPERATURE_ADC", slsDetectorDefs::dacIndex::TEMPERATURE_ADC)
|
||||||
.value("TEMPERATURE_FPGA", slsDetectorDefs::dacIndex::TEMPERATURE_FPGA)
|
.value("TEMPERATURE_FPGA", slsDetectorDefs::dacIndex::TEMPERATURE_FPGA)
|
||||||
.value("TEMPERATURE_FPGAEXT",
|
.value("TEMPERATURE_FPGAEXT", slsDetectorDefs::dacIndex::TEMPERATURE_FPGAEXT)
|
||||||
slsDetectorDefs::dacIndex::TEMPERATURE_FPGAEXT)
|
|
||||||
.value("TEMPERATURE_10GE", slsDetectorDefs::dacIndex::TEMPERATURE_10GE)
|
.value("TEMPERATURE_10GE", slsDetectorDefs::dacIndex::TEMPERATURE_10GE)
|
||||||
.value("TEMPERATURE_DCDC", slsDetectorDefs::dacIndex::TEMPERATURE_DCDC)
|
.value("TEMPERATURE_DCDC", slsDetectorDefs::dacIndex::TEMPERATURE_DCDC)
|
||||||
.value("TEMPERATURE_SODL", slsDetectorDefs::dacIndex::TEMPERATURE_SODL)
|
.value("TEMPERATURE_SODL", slsDetectorDefs::dacIndex::TEMPERATURE_SODL)
|
||||||
.value("TEMPERATURE_SODR", slsDetectorDefs::dacIndex::TEMPERATURE_SODR)
|
.value("TEMPERATURE_SODR", slsDetectorDefs::dacIndex::TEMPERATURE_SODR)
|
||||||
.value("TEMPERATURE_FPGA2",
|
.value("TEMPERATURE_FPGA2", slsDetectorDefs::dacIndex::TEMPERATURE_FPGA2)
|
||||||
slsDetectorDefs::dacIndex::TEMPERATURE_FPGA2)
|
.value("TEMPERATURE_FPGA3", slsDetectorDefs::dacIndex::TEMPERATURE_FPGA3)
|
||||||
.value("TEMPERATURE_FPGA3",
|
|
||||||
slsDetectorDefs::dacIndex::TEMPERATURE_FPGA3)
|
|
||||||
.value("TRIMBIT_SCAN", slsDetectorDefs::dacIndex::TRIMBIT_SCAN)
|
.value("TRIMBIT_SCAN", slsDetectorDefs::dacIndex::TRIMBIT_SCAN)
|
||||||
.value("V_POWER_A", slsDetectorDefs::dacIndex::V_POWER_A)
|
.value("V_POWER_A", slsDetectorDefs::dacIndex::V_POWER_A)
|
||||||
.value("V_POWER_B", slsDetectorDefs::dacIndex::V_POWER_B)
|
.value("V_POWER_B", slsDetectorDefs::dacIndex::V_POWER_B)
|
||||||
@ -218,20 +204,15 @@ void init_enums(py::module &m) {
|
|||||||
.value("VERYLOWGAIN", slsDetectorDefs::detectorSettings::VERYLOWGAIN)
|
.value("VERYLOWGAIN", slsDetectorDefs::detectorSettings::VERYLOWGAIN)
|
||||||
.value("G1_HIGHGAIN", slsDetectorDefs::detectorSettings::G1_HIGHGAIN)
|
.value("G1_HIGHGAIN", slsDetectorDefs::detectorSettings::G1_HIGHGAIN)
|
||||||
.value("G1_LOWGAIN", slsDetectorDefs::detectorSettings::G1_LOWGAIN)
|
.value("G1_LOWGAIN", slsDetectorDefs::detectorSettings::G1_LOWGAIN)
|
||||||
.value("G2_HIGHCAP_HIGHGAIN",
|
.value("G2_HIGHCAP_HIGHGAIN", slsDetectorDefs::detectorSettings::G2_HIGHCAP_HIGHGAIN)
|
||||||
slsDetectorDefs::detectorSettings::G2_HIGHCAP_HIGHGAIN)
|
.value("G2_HIGHCAP_LOWGAIN", slsDetectorDefs::detectorSettings::G2_HIGHCAP_LOWGAIN)
|
||||||
.value("G2_HIGHCAP_LOWGAIN",
|
.value("G2_LOWCAP_HIGHGAIN", slsDetectorDefs::detectorSettings::G2_LOWCAP_HIGHGAIN)
|
||||||
slsDetectorDefs::detectorSettings::G2_HIGHCAP_LOWGAIN)
|
.value("G2_LOWCAP_LOWGAIN", slsDetectorDefs::detectorSettings::G2_LOWCAP_LOWGAIN)
|
||||||
.value("G2_LOWCAP_HIGHGAIN",
|
|
||||||
slsDetectorDefs::detectorSettings::G2_LOWCAP_HIGHGAIN)
|
|
||||||
.value("G2_LOWCAP_LOWGAIN",
|
|
||||||
slsDetectorDefs::detectorSettings::G2_LOWCAP_LOWGAIN)
|
|
||||||
.value("G4_HIGHGAIN", slsDetectorDefs::detectorSettings::G4_HIGHGAIN)
|
.value("G4_HIGHGAIN", slsDetectorDefs::detectorSettings::G4_HIGHGAIN)
|
||||||
.value("G4_LOWGAIN", slsDetectorDefs::detectorSettings::G4_LOWGAIN)
|
.value("G4_LOWGAIN", slsDetectorDefs::detectorSettings::G4_LOWGAIN)
|
||||||
.value("GAIN0", slsDetectorDefs::detectorSettings::GAIN0)
|
.value("GAIN0", slsDetectorDefs::detectorSettings::GAIN0)
|
||||||
.value("UNDEFINED", slsDetectorDefs::detectorSettings::UNDEFINED)
|
.value("UNDEFINED", slsDetectorDefs::detectorSettings::UNDEFINED)
|
||||||
.value("UNINITIALIZED",
|
.value("UNINITIALIZED", slsDetectorDefs::detectorSettings::UNINITIALIZED)
|
||||||
slsDetectorDefs::detectorSettings::UNINITIALIZED)
|
|
||||||
.export_values();
|
.export_values();
|
||||||
|
|
||||||
py::enum_<slsDetectorDefs::clockIndex>(Defs, "clockIndex")
|
py::enum_<slsDetectorDefs::clockIndex>(Defs, "clockIndex")
|
||||||
@ -244,8 +225,7 @@ void init_enums(py::module &m) {
|
|||||||
py::enum_<slsDetectorDefs::readoutMode>(Defs, "readoutMode")
|
py::enum_<slsDetectorDefs::readoutMode>(Defs, "readoutMode")
|
||||||
.value("ANALOG_ONLY", slsDetectorDefs::readoutMode::ANALOG_ONLY)
|
.value("ANALOG_ONLY", slsDetectorDefs::readoutMode::ANALOG_ONLY)
|
||||||
.value("DIGITAL_ONLY", slsDetectorDefs::readoutMode::DIGITAL_ONLY)
|
.value("DIGITAL_ONLY", slsDetectorDefs::readoutMode::DIGITAL_ONLY)
|
||||||
.value("ANALOG_AND_DIGITAL",
|
.value("ANALOG_AND_DIGITAL", slsDetectorDefs::readoutMode::ANALOG_AND_DIGITAL)
|
||||||
slsDetectorDefs::readoutMode::ANALOG_AND_DIGITAL)
|
|
||||||
.export_values();
|
.export_values();
|
||||||
|
|
||||||
py::enum_<slsDetectorDefs::speedLevel>(Defs, "speedLevel")
|
py::enum_<slsDetectorDefs::speedLevel>(Defs, "speedLevel")
|
||||||
@ -259,18 +239,14 @@ void init_enums(py::module &m) {
|
|||||||
py::enum_<slsDetectorDefs::burstMode>(Defs, "burstMode")
|
py::enum_<slsDetectorDefs::burstMode>(Defs, "burstMode")
|
||||||
.value("BURST_INTERNAL", slsDetectorDefs::burstMode::BURST_INTERNAL)
|
.value("BURST_INTERNAL", slsDetectorDefs::burstMode::BURST_INTERNAL)
|
||||||
.value("BURST_EXTERNAL", slsDetectorDefs::burstMode::BURST_EXTERNAL)
|
.value("BURST_EXTERNAL", slsDetectorDefs::burstMode::BURST_EXTERNAL)
|
||||||
.value("CONTINUOUS_INTERNAL",
|
.value("CONTINUOUS_INTERNAL", slsDetectorDefs::burstMode::CONTINUOUS_INTERNAL)
|
||||||
slsDetectorDefs::burstMode::CONTINUOUS_INTERNAL)
|
.value("CONTINUOUS_EXTERNAL", slsDetectorDefs::burstMode::CONTINUOUS_EXTERNAL)
|
||||||
.value("CONTINUOUS_EXTERNAL",
|
|
||||||
slsDetectorDefs::burstMode::CONTINUOUS_EXTERNAL)
|
|
||||||
.value("NUM_BURST_MODES", slsDetectorDefs::burstMode::NUM_BURST_MODES)
|
.value("NUM_BURST_MODES", slsDetectorDefs::burstMode::NUM_BURST_MODES)
|
||||||
.export_values();
|
.export_values();
|
||||||
|
|
||||||
py::enum_<slsDetectorDefs::timingSourceType>(Defs, "timingSourceType")
|
py::enum_<slsDetectorDefs::timingSourceType>(Defs, "timingSourceType")
|
||||||
.value("TIMING_INTERNAL",
|
.value("TIMING_INTERNAL", slsDetectorDefs::timingSourceType::TIMING_INTERNAL)
|
||||||
slsDetectorDefs::timingSourceType::TIMING_INTERNAL)
|
.value("TIMING_EXTERNAL", slsDetectorDefs::timingSourceType::TIMING_EXTERNAL)
|
||||||
.value("TIMING_EXTERNAL",
|
|
||||||
slsDetectorDefs::timingSourceType::TIMING_EXTERNAL)
|
|
||||||
.export_values();
|
.export_values();
|
||||||
|
|
||||||
py::enum_<slsDetectorDefs::M3_GainCaps>(Defs, "M3_GainCaps")
|
py::enum_<slsDetectorDefs::M3_GainCaps>(Defs, "M3_GainCaps")
|
||||||
@ -289,23 +265,14 @@ void init_enums(py::module &m) {
|
|||||||
.value("BOTTOM", slsDetectorDefs::portPosition::BOTTOM)
|
.value("BOTTOM", slsDetectorDefs::portPosition::BOTTOM)
|
||||||
.export_values();
|
.export_values();
|
||||||
|
|
||||||
py::enum_<slsDetectorDefs::streamingInterface>(Defs, "streamingInterface",
|
py::enum_<slsDetectorDefs::streamingInterface>(Defs, "streamingInterface", py::arithmetic())
|
||||||
py::arithmetic())
|
|
||||||
.value("NONE", slsDetectorDefs::streamingInterface::NONE)
|
.value("NONE", slsDetectorDefs::streamingInterface::NONE)
|
||||||
.value("LOW_LATENCY_LINK",
|
.value("LOW_LATENCY_LINK", slsDetectorDefs::streamingInterface::LOW_LATENCY_LINK)
|
||||||
slsDetectorDefs::streamingInterface::LOW_LATENCY_LINK)
|
.value("ETHERNET_10GB", slsDetectorDefs::streamingInterface::ETHERNET_10GB)
|
||||||
.value("ETHERNET_10GB",
|
|
||||||
slsDetectorDefs::streamingInterface::ETHERNET_10GB)
|
|
||||||
.value("ALL", slsDetectorDefs::streamingInterface::ALL)
|
.value("ALL", slsDetectorDefs::streamingInterface::ALL)
|
||||||
.export_values()
|
.export_values()
|
||||||
.def("__or__",
|
.def("__or__", py::overload_cast<const slsDetectorDefs::streamingInterface &, const slsDetectorDefs::streamingInterface &>(&operator|))
|
||||||
py::overload_cast<const slsDetectorDefs::streamingInterface &,
|
.def("__and__", py::overload_cast<const slsDetectorDefs::streamingInterface &, const slsDetectorDefs::streamingInterface &>(&operator&));
|
||||||
const slsDetectorDefs::streamingInterface &>(
|
|
||||||
&operator|))
|
|
||||||
.def("__and__",
|
|
||||||
py::overload_cast<const slsDetectorDefs::streamingInterface &,
|
|
||||||
const slsDetectorDefs::streamingInterface &>(
|
|
||||||
&operator&));
|
|
||||||
|
|
||||||
py::enum_<slsDetectorDefs::vetoAlgorithm>(Defs, "vetoAlgorithm")
|
py::enum_<slsDetectorDefs::vetoAlgorithm>(Defs, "vetoAlgorithm")
|
||||||
.value("ALG_HITS", slsDetectorDefs::vetoAlgorithm::ALG_HITS)
|
.value("ALG_HITS", slsDetectorDefs::vetoAlgorithm::ALG_HITS)
|
||||||
|
1
serverBin/ctbDetectorServerv6.0.0
Symbolic link
1
serverBin/ctbDetectorServerv6.0.0
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServerv6.0.0
|
@ -1 +0,0 @@
|
|||||||
../slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServerv6.0.0-rc1
|
|
1
serverBin/eigerDetectorServerv6.0.0
Symbolic link
1
serverBin/eigerDetectorServerv6.0.0
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServerv6.0.0
|
@ -1 +0,0 @@
|
|||||||
../slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServerv6.0.0-rc2
|
|
1
serverBin/gotthard2DetectorServerv6.0.0
Symbolic link
1
serverBin/gotthard2DetectorServerv6.0.0
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServerv6.0.0
|
@ -1 +0,0 @@
|
|||||||
../slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServerv6.0.0-rc1
|
|
1
serverBin/gotthardDetectorServerv6.0.0
Symbolic link
1
serverBin/gotthardDetectorServerv6.0.0
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServerv6.0.0
|
@ -1 +0,0 @@
|
|||||||
../slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServerv6.0.0-rc1
|
|
1
serverBin/jungfrauDetectorServerv6.0.0
Symbolic link
1
serverBin/jungfrauDetectorServerv6.0.0
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServerv6.0.0
|
1
serverBin/moenchDetectorServerv6.0.0
Symbolic link
1
serverBin/moenchDetectorServerv6.0.0
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServerv6.0.0
|
@ -1 +0,0 @@
|
|||||||
../slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServerv6.0.0-rc1
|
|
1
serverBin/mythen3DetectorServerv6.0.0
Symbolic link
1
serverBin/mythen3DetectorServerv6.0.0
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv6.0.0
|
@ -1 +0,0 @@
|
|||||||
../slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv6.0.0-rc1
|
|
@ -1201,7 +1201,7 @@ Exposure Time of a sub frame. Only for Eiger in 32 bit mode
|
|||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body><p>Number of additional storage cells. For Jungfrau only. </p><p>Default: 0. </p><p>Number of Images received: #frames * #triggers * (#storagecells+1) </p><p> #storagecells#</p><p><br/></p></body></html></string>
|
<string><html><head/><body><p>Number of additional storage cells. For Jungfrau only. </p><p>Default: 0. </p><p>Number of Images received: #frames * #triggers * (#storagecells+1) </p><p>#<span style=" font-family:'Droid Sans Mono,monospace,monospace,Droid Sans Fallback'; font-size:14px; color:#ce9178;">extrastoragecells#</span></p><p><br/></p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Number of Storage cells:</string>
|
<string>Number of Storage cells:</string>
|
||||||
@ -1402,7 +1402,7 @@ Default value is 0. A value less than the required minimum is ignored.
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body><p>Number of additional storage cells. For Jungfrau only. </p><p>Default: 0. </p><p>Number of Images received: #frames * #triggers * (#storagecells+1) </p><p> #storagecells#</p><p><br/></p></body></html></string>
|
<string><html><head/><body><p>Number of additional storage cells. For Jungfrau only. </p><p>Default: 0. </p><p>Number of Images received: #frames * #triggers * (#storagecells+1) </p><p>#<span style=" font-family:'Droid Sans Mono,monospace,monospace,Droid Sans Fallback'; font-size:14px; color:#ce9178;">extrastoragecells</span>#</p><p><br/></p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
<property name="statusTip">
|
<property name="statusTip">
|
||||||
<string/>
|
<string/>
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -452,6 +452,7 @@ Time before end of exposure when comparator is disabled */
|
|||||||
#define ASIC_CTRL_DS_TMR_OFST (8)
|
#define ASIC_CTRL_DS_TMR_OFST (8)
|
||||||
#define ASIC_CTRL_DS_TMR_MSK (0x000000FF << ASIC_CTRL_DS_TMR_OFST)
|
#define ASIC_CTRL_DS_TMR_MSK (0x000000FF << ASIC_CTRL_DS_TMR_OFST)
|
||||||
#define ASIC_CTRL_DS_TMR_VAL ((0x1F << ASIC_CTRL_DS_TMR_OFST) & ASIC_CTRL_DS_TMR_MSK)
|
#define ASIC_CTRL_DS_TMR_VAL ((0x1F << ASIC_CTRL_DS_TMR_OFST) & ASIC_CTRL_DS_TMR_MSK)
|
||||||
|
#define ASIC_CTRL_DS_TMR_CHIP1_1_VAL ((0xFF << ASIC_CTRL_DS_TMR_OFST) & ASIC_CTRL_DS_TMR_MSK)
|
||||||
// tET = (ET + 1) * 25ns (increase timeout range between 2 consecutive storage
|
// tET = (ET + 1) * 25ns (increase timeout range between 2 consecutive storage
|
||||||
// cells)
|
// cells)
|
||||||
#define ASIC_CTRL_EXPSRE_TMR_OFST (16)
|
#define ASIC_CTRL_EXPSRE_TMR_OFST (16)
|
||||||
|
Binary file not shown.
BIN
slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServerv6.0.0
Executable file
BIN
slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServerv6.0.0
Executable file
Binary file not shown.
@ -498,7 +498,7 @@ void setupDetector() {
|
|||||||
setFlipRows(DEFAULT_FLIP_ROWS);
|
setFlipRows(DEFAULT_FLIP_ROWS);
|
||||||
if (getChipVersion() == 11) {
|
if (getChipVersion() == 11) {
|
||||||
setFilterResistor(DEFAULT_FILTER_RESISTOR);
|
setFilterResistor(DEFAULT_FILTER_RESISTOR);
|
||||||
setFilterCell(DEFAULT_FILTER_CELL);
|
setNumberOfFilterCells(DEFAULT_FILTER_CELL);
|
||||||
}
|
}
|
||||||
setReadNRows(MAX_ROWS_PER_READOUT);
|
setReadNRows(MAX_ROWS_PER_READOUT);
|
||||||
}
|
}
|
||||||
@ -842,7 +842,14 @@ int selectStoragecellStart(int pos) {
|
|||||||
offset = CONFIG_V11_STATUS_STRG_CLL_OFST;
|
offset = CONFIG_V11_STATUS_STRG_CLL_OFST;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
int retval = ((bus_r(addr) & mask) >> offset);
|
uint32_t regval = bus_r(addr);
|
||||||
|
#ifndef VIRTUAL
|
||||||
|
// flip all contents of register //TODO FIRMWARE FIX
|
||||||
|
if (getChipVersion() == 11) {
|
||||||
|
regval ^= BIT32_MASK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
uint32_t retval = ((regval & mask) >> offset);
|
||||||
if (getChipVersion() == 11) {
|
if (getChipVersion() == 11) {
|
||||||
// get which bit
|
// get which bit
|
||||||
int max = getMaxStoragecellStart();
|
int max = getMaxStoragecellStart();
|
||||||
@ -1822,11 +1829,15 @@ int64_t getComparatorDisableTime() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void configureASICTimer() {
|
void configureASICTimer() {
|
||||||
LOG(logINFO, ("Configuring ASIC Timer\n"));
|
|
||||||
bus_w(ASIC_CTRL_REG, (bus_r(ASIC_CTRL_REG) & ~ASIC_CTRL_PRCHRG_TMR_MSK) |
|
bus_w(ASIC_CTRL_REG, (bus_r(ASIC_CTRL_REG) & ~ASIC_CTRL_PRCHRG_TMR_MSK) |
|
||||||
ASIC_CTRL_PRCHRG_TMR_VAL);
|
ASIC_CTRL_PRCHRG_TMR_VAL);
|
||||||
bus_w(ASIC_CTRL_REG, (bus_r(ASIC_CTRL_REG) & ~ASIC_CTRL_DS_TMR_MSK) |
|
|
||||||
ASIC_CTRL_DS_TMR_VAL);
|
uint32_t val = ASIC_CTRL_DS_TMR_VAL;
|
||||||
|
if (getChipVersion() == 11) {
|
||||||
|
val = ASIC_CTRL_DS_TMR_CHIP1_1_VAL;
|
||||||
|
}
|
||||||
|
bus_w(ASIC_CTRL_REG, (bus_r(ASIC_CTRL_REG) & ~ASIC_CTRL_DS_TMR_MSK) | val);
|
||||||
|
LOG(logINFO, ("Configured ASIC Timer [0x%x]\n", bus_r(ASIC_CTRL_REG)));
|
||||||
}
|
}
|
||||||
|
|
||||||
int setReadoutSpeed(int val) {
|
int setReadoutSpeed(int val) {
|
||||||
@ -2165,7 +2176,7 @@ int getFilterResistor() {
|
|||||||
#else
|
#else
|
||||||
uint32_t addr = CONFIG_V11_STATUS_REG;
|
uint32_t addr = CONFIG_V11_STATUS_REG;
|
||||||
#endif
|
#endif
|
||||||
// 0 for lower value, 1 for higher value
|
// return 0 for lower value, 1 for higher value
|
||||||
if (bus_r(addr) & CONFIG_V11_STATUS_FLTR_RSSTR_SMLR_MSK) {
|
if (bus_r(addr) & CONFIG_V11_STATUS_FLTR_RSSTR_SMLR_MSK) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2191,19 +2202,24 @@ int setFilterResistor(int value) {
|
|||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getFilterCell() {
|
int getNumberOfFilterCells() {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
uint32_t addr = CONFIG_V11_REG;
|
uint32_t addr = CONFIG_V11_REG;
|
||||||
#else
|
#else
|
||||||
uint32_t addr = CONFIG_V11_STATUS_REG;
|
uint32_t addr = CONFIG_V11_STATUS_REG;
|
||||||
#endif
|
#endif
|
||||||
uint32_t value =
|
uint32_t regval = bus_r(addr);
|
||||||
(bus_r(addr) & CONFIG_V11_FLTR_CLL_MSK) >> CONFIG_V11_FLTR_CLL_OFST;
|
#ifndef VIRTUAL
|
||||||
|
// flip all contents of register //TODO FIRMWARE FIX
|
||||||
|
regval ^= BIT32_MASK;
|
||||||
|
#endif
|
||||||
|
uint32_t retval =
|
||||||
|
(regval & CONFIG_V11_FLTR_CLL_MSK) >> CONFIG_V11_FLTR_CLL_OFST;
|
||||||
// count number of bits = which icell
|
// count number of bits = which icell
|
||||||
return (__builtin_popcount(value));
|
return (__builtin_popcount(retval));
|
||||||
}
|
}
|
||||||
|
|
||||||
void setFilterCell(int iCell) {
|
void setNumberOfFilterCells(int iCell) {
|
||||||
if (iCell > MAX_FILTER_CELL_VAL) {
|
if (iCell > MAX_FILTER_CELL_VAL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2220,8 +2236,8 @@ void setFilterCell(int iCell) {
|
|||||||
bus_w(addr, bus_r(addr) | ((value << CONFIG_V11_FLTR_CLL_OFST) &
|
bus_w(addr, bus_r(addr) | ((value << CONFIG_V11_FLTR_CLL_OFST) &
|
||||||
CONFIG_V11_FLTR_CLL_MSK));
|
CONFIG_V11_FLTR_CLL_MSK));
|
||||||
}
|
}
|
||||||
LOG(logINFO,
|
LOG(logINFO, ("Setting Number of Filter Cells to %d [Reg:0x%x]\n", iCell,
|
||||||
("Setting Filter Cell to %d [Reg:0x%x]\n", iCell, bus_r(addr)));
|
bus_r(addr)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void disableCurrentSource() {
|
void disableCurrentSource() {
|
||||||
|
@ -73,7 +73,7 @@ enum DACINDEX {
|
|||||||
#define SPECIAL_DEFAULT_DYNAMIC_GAIN_VALS \
|
#define SPECIAL_DEFAULT_DYNAMIC_GAIN_VALS \
|
||||||
{ 1450, 480, 420 }
|
{ 1450, 480, 420 }
|
||||||
#define SPECIAL_DEFAULT_DYNAMICHG0_GAIN_VALS \
|
#define SPECIAL_DEFAULT_DYNAMICHG0_GAIN_VALS \
|
||||||
{ 1450, 480, 420 }
|
{ 1550, 450, 620 }
|
||||||
|
|
||||||
enum NETWORKINDEX { TXN_FRAME, FLOWCTRL_10G };
|
enum NETWORKINDEX { TXN_FRAME, FLOWCTRL_10G };
|
||||||
enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS };
|
enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS };
|
||||||
@ -154,7 +154,7 @@ enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS };
|
|||||||
#define ADC_PHASE_HALF_SPEED_CHIP11 (160)
|
#define ADC_PHASE_HALF_SPEED_CHIP11 (160)
|
||||||
#define ADC_PHASE_QUARTER_SPEED_CHIP11 (160)
|
#define ADC_PHASE_QUARTER_SPEED_CHIP11 (160)
|
||||||
|
|
||||||
#define DBIT_PHASE_FULL_SPEED_CHIP11 (75)
|
#define DBIT_PHASE_FULL_SPEED_CHIP11 (80)
|
||||||
#define DBIT_PHASE_HALF_SPEED_CHIP11 (135)
|
#define DBIT_PHASE_HALF_SPEED_CHIP11 (135)
|
||||||
#define DBIT_PHASE_QUARTER_SPEED_CHIP11 (135)
|
#define DBIT_PHASE_QUARTER_SPEED_CHIP11 (135)
|
||||||
|
|
||||||
@ -177,9 +177,9 @@ enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS };
|
|||||||
#define ADC_PHASE_HALF_SPEED_CHIP10 (160)
|
#define ADC_PHASE_HALF_SPEED_CHIP10 (160)
|
||||||
#define ADC_PHASE_QUARTER_SPEED_CHIP10 (160)
|
#define ADC_PHASE_QUARTER_SPEED_CHIP10 (160)
|
||||||
|
|
||||||
#define DBIT_PHASE_FULL_SPEED_CHIP10 (100)
|
#define DBIT_PHASE_FULL_SPEED_CHIP10 (125)
|
||||||
#define DBIT_PHASE_HALF_SPEED_CHIP10 (150)
|
#define DBIT_PHASE_HALF_SPEED_CHIP10 (175)
|
||||||
#define DBIT_PHASE_QUARTER_SPEED_CHIP10 (150)
|
#define DBIT_PHASE_QUARTER_SPEED_CHIP10 (175)
|
||||||
|
|
||||||
#define ADC_OFST_FULL_SPEED_VAL_CHIP10 (0x10)
|
#define ADC_OFST_FULL_SPEED_VAL_CHIP10 (0x10)
|
||||||
#define ADC_OFST_HALF_SPEED_VAL_CHIP10 (0x08)
|
#define ADC_OFST_HALF_SPEED_VAL_CHIP10 (0x08)
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -486,8 +486,8 @@ int getFlipRows();
|
|||||||
void setFlipRows(int arg);
|
void setFlipRows(int arg);
|
||||||
int setFilterResistor(int value);
|
int setFilterResistor(int value);
|
||||||
int getFilterResistor();
|
int getFilterResistor();
|
||||||
int getFilterCell();
|
int getNumberOfFilterCells();
|
||||||
void setFilterCell(int iCell);
|
void setNumberOfFilterCells(int iCell);
|
||||||
void disableCurrentSource();
|
void disableCurrentSource();
|
||||||
void enableCurrentSource(int fix, uint64_t select, int normal);
|
void enableCurrentSource(int fix, uint64_t select, int normal);
|
||||||
int getCurrentSource();
|
int getCurrentSource();
|
||||||
|
@ -262,8 +262,8 @@ int get_comp_disable_time(int);
|
|||||||
int set_comp_disable_time(int);
|
int set_comp_disable_time(int);
|
||||||
int get_flip_rows(int);
|
int get_flip_rows(int);
|
||||||
int set_flip_rows(int);
|
int set_flip_rows(int);
|
||||||
int get_filter_cell(int);
|
int get_num_filter_cells(int);
|
||||||
int set_filter_cell(int);
|
int set_num_filter_cells(int);
|
||||||
int set_adc_pipeline(int);
|
int set_adc_pipeline(int);
|
||||||
int get_adc_pipeline(int);
|
int get_adc_pipeline(int);
|
||||||
int set_dbit_pipeline(int);
|
int set_dbit_pipeline(int);
|
||||||
|
@ -399,8 +399,8 @@ void function_table() {
|
|||||||
flist[F_SET_COMP_DISABLE_TIME] = &set_comp_disable_time;
|
flist[F_SET_COMP_DISABLE_TIME] = &set_comp_disable_time;
|
||||||
flist[F_GET_FLIP_ROWS] = &get_flip_rows;
|
flist[F_GET_FLIP_ROWS] = &get_flip_rows;
|
||||||
flist[F_SET_FLIP_ROWS] = &set_flip_rows;
|
flist[F_SET_FLIP_ROWS] = &set_flip_rows;
|
||||||
flist[F_GET_FILTER_CELL] = &get_filter_cell;
|
flist[F_GET_NUM_FILTER_CELLS] = &get_num_filter_cells;
|
||||||
flist[F_SET_FILTER_CELL] = &set_filter_cell;
|
flist[F_SET_NUM_FILTER_CELLS] = &set_num_filter_cells;
|
||||||
flist[F_SET_ADC_PIPELINE] = &set_adc_pipeline;
|
flist[F_SET_ADC_PIPELINE] = &set_adc_pipeline;
|
||||||
flist[F_GET_ADC_PIPELINE] = &get_adc_pipeline;
|
flist[F_GET_ADC_PIPELINE] = &get_adc_pipeline;
|
||||||
flist[F_SET_DBIT_PIPELINE] = &set_dbit_pipeline;
|
flist[F_SET_DBIT_PIPELINE] = &set_dbit_pipeline;
|
||||||
@ -8886,31 +8886,31 @@ int set_flip_rows(int file_des) {
|
|||||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
return Server_SendResult(file_des, INT32, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int get_filter_cell(int file_des) {
|
int get_num_filter_cells(int file_des) {
|
||||||
ret = OK;
|
ret = OK;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
int retval = -1;
|
int retval = -1;
|
||||||
|
|
||||||
LOG(logDEBUG1, ("Getting filter cell\n"));
|
LOG(logDEBUG1, ("Getting number of filter cellsn"));
|
||||||
|
|
||||||
#ifndef JUNGFRAUD
|
#ifndef JUNGFRAUD
|
||||||
functionNotImplemented();
|
functionNotImplemented();
|
||||||
#else
|
#else
|
||||||
// get only
|
// get only
|
||||||
retval = getFilterCell();
|
retval = getNumberOfFilterCells();
|
||||||
LOG(logDEBUG1, ("filter cell retval: %u\n", retval));
|
LOG(logDEBUG1, ("num filter cells retval: %u\n", retval));
|
||||||
#endif
|
#endif
|
||||||
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
|
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
|
||||||
}
|
}
|
||||||
|
|
||||||
int set_filter_cell(int file_des) {
|
int set_num_filter_cells(int file_des) {
|
||||||
ret = OK;
|
ret = OK;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
int arg = -1;
|
int arg = -1;
|
||||||
|
|
||||||
if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0)
|
if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0)
|
||||||
return printSocketReadError();
|
return printSocketReadError();
|
||||||
LOG(logDEBUG1, ("Setting filter cell: %u\n", (int)arg));
|
LOG(logDEBUG1, ("Setting number of filter cells: %u\n", (int)arg));
|
||||||
|
|
||||||
#ifndef JUNGFRAUD
|
#ifndef JUNGFRAUD
|
||||||
functionNotImplemented();
|
functionNotImplemented();
|
||||||
@ -8921,7 +8921,8 @@ int set_filter_cell(int file_des) {
|
|||||||
if (arg < 0 || arg > MAX_FILTER_CELL_VAL) {
|
if (arg < 0 || arg > MAX_FILTER_CELL_VAL) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess,
|
sprintf(mess,
|
||||||
"Could not set filter cell. Invalid argument %d. Options: "
|
"Could not set number of filter cells. Invalid argument "
|
||||||
|
"%d. Options: "
|
||||||
"0 - %d\n",
|
"0 - %d\n",
|
||||||
arg, MAX_FILTER_CELL_VAL);
|
arg, MAX_FILTER_CELL_VAL);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
@ -8929,11 +8930,12 @@ int set_filter_cell(int file_des) {
|
|||||||
// only for chipv1.1
|
// only for chipv1.1
|
||||||
else if (getChipVersion() == 10) {
|
else if (getChipVersion() == 10) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
strcpy(mess, "Could not set filter cell. Only available for "
|
strcpy(mess,
|
||||||
|
"Could not set number of filter cells. Only available for "
|
||||||
"chip version 1.1\n");
|
"chip version 1.1\n");
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else {
|
} else {
|
||||||
setFilterCell(arg);
|
setNumberOfFilterCells(arg);
|
||||||
// no validation as it might take time to update status register if
|
// no validation as it might take time to update status register if
|
||||||
// acquiring
|
// acquiring
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,14 @@ class Detector {
|
|||||||
std::unique_ptr<DetectorImpl> pimpl;
|
std::unique_ptr<DetectorImpl> pimpl;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/** @name Configuration */
|
||||||
|
///@{
|
||||||
|
/**************************************************
|
||||||
|
* *
|
||||||
|
* Configuration *
|
||||||
|
* *
|
||||||
|
* ************************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param shm_id detector shared memory id
|
* @param shm_id detector shared memory id
|
||||||
* Default value is 0. Can be set to more values for
|
* Default value is 0. Can be set to more values for
|
||||||
@ -38,13 +46,6 @@ class Detector {
|
|||||||
*/
|
*/
|
||||||
Detector(int shm_id = 0);
|
Detector(int shm_id = 0);
|
||||||
~Detector();
|
~Detector();
|
||||||
/** @name Configuration */
|
|
||||||
///@{
|
|
||||||
/**************************************************
|
|
||||||
* *
|
|
||||||
* Configuration *
|
|
||||||
* *
|
|
||||||
* ************************************************/
|
|
||||||
|
|
||||||
/** Free the shared memory of this detector and all modules
|
/** Free the shared memory of this detector and all modules
|
||||||
belonging to it */
|
belonging to it */
|
||||||
@ -191,7 +192,7 @@ class Detector {
|
|||||||
void setFlipRows(bool value, Positions pos = {});
|
void setFlipRows(bool value, Positions pos = {});
|
||||||
|
|
||||||
Result<bool> isVirtualDetectorServer(Positions pos = {}) const;
|
Result<bool> isVirtualDetectorServer(Positions pos = {}) const;
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Callbacks */
|
/** @name Callbacks */
|
||||||
///@{
|
///@{
|
||||||
@ -222,7 +223,7 @@ class Detector {
|
|||||||
void registerDataCallback(void (*func)(detectorData *, uint64_t, uint32_t,
|
void registerDataCallback(void (*func)(detectorData *, uint64_t, uint32_t,
|
||||||
void *),
|
void *),
|
||||||
void *pArg);
|
void *pArg);
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Acquisition Parameters */
|
/** @name Acquisition Parameters */
|
||||||
///@{
|
///@{
|
||||||
@ -526,7 +527,7 @@ class Detector {
|
|||||||
*/
|
*/
|
||||||
void setReadNRows(const int lines, Positions pos = {});
|
void setReadNRows(const int lines, Positions pos = {});
|
||||||
|
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Acquisition */
|
/** @name Acquisition */
|
||||||
///@{
|
///@{
|
||||||
@ -613,7 +614,7 @@ class Detector {
|
|||||||
/** Gets Scan error message if scan ended in error for non blocking
|
/** Gets Scan error message if scan ended in error for non blocking
|
||||||
* acquisitions.*/
|
* acquisitions.*/
|
||||||
Result<std::string> getScanErrorMessage(Positions pos = {}) const;
|
Result<std::string> getScanErrorMessage(Positions pos = {}) const;
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Network Configuration (Detector<->Receiver) */
|
/** @name Network Configuration (Detector<->Receiver) */
|
||||||
///@{
|
///@{
|
||||||
@ -802,7 +803,7 @@ class Detector {
|
|||||||
* port
|
* port
|
||||||
*/
|
*/
|
||||||
void setTransmissionDelayRight(int value, Positions pos = {});
|
void setTransmissionDelayRight(int value, Positions pos = {});
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Receiver Configuration */
|
/** @name Receiver Configuration */
|
||||||
///@{
|
///@{
|
||||||
@ -893,7 +894,7 @@ class Detector {
|
|||||||
* streamer yet or there is no second interface, it gives 0 in its place. */
|
* streamer yet or there is no second interface, it gives 0 in its place. */
|
||||||
Result<std::array<pid_t, NUM_RX_THREAD_IDS>>
|
Result<std::array<pid_t, NUM_RX_THREAD_IDS>>
|
||||||
getRxThreadIds(Positions pos = {}) const;
|
getRxThreadIds(Positions pos = {}) const;
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name File */
|
/** @name File */
|
||||||
///@{
|
///@{
|
||||||
@ -949,7 +950,7 @@ class Detector {
|
|||||||
/** Default depends on detector type. \n 0 will set frames per file in an
|
/** Default depends on detector type. \n 0 will set frames per file in an
|
||||||
* acquisition to unlimited */
|
* acquisition to unlimited */
|
||||||
void setFramesPerFile(int n, Positions pos = {});
|
void setFramesPerFile(int n, Positions pos = {});
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name ZMQ Streaming Parameters (Receiver<->Client) */
|
/** @name ZMQ Streaming Parameters (Receiver<->Client) */
|
||||||
///@{
|
///@{
|
||||||
@ -1058,7 +1059,7 @@ class Detector {
|
|||||||
*/
|
*/
|
||||||
void setRxZmqHwm(const int limit);
|
void setRxZmqHwm(const int limit);
|
||||||
|
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Eiger Specific */
|
/** @name Eiger Specific */
|
||||||
///@{
|
///@{
|
||||||
@ -1157,7 +1158,7 @@ class Detector {
|
|||||||
void setDataStream(const defs::portPosition port, const bool enable,
|
void setDataStream(const defs::portPosition port, const bool enable,
|
||||||
Positions pos = {});
|
Positions pos = {});
|
||||||
|
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Jungfrau Specific */
|
/** @name Jungfrau Specific */
|
||||||
///@{
|
///@{
|
||||||
@ -1257,13 +1258,13 @@ class Detector {
|
|||||||
void setGainMode(const defs::gainMode mode, Positions pos = {});
|
void setGainMode(const defs::gainMode mode, Positions pos = {});
|
||||||
|
|
||||||
/** [Jungfrau] Advanced */
|
/** [Jungfrau] Advanced */
|
||||||
Result<int> getFilterCell(Positions pos = {}) const;
|
Result<int> getNumberOfFilterCells(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Jungfrau] Advanced Options[0-12], only for chip v1.1
|
/** [Jungfrau] Advanced Options[0-12], only for chip v1.1
|
||||||
*/
|
*/
|
||||||
void setFilterCell(int cell, Positions pos = {});
|
void setNumberOfFilterCells(int cell, Positions pos = {});
|
||||||
|
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Gotthard Specific */
|
/** @name Gotthard Specific */
|
||||||
///@{
|
///@{
|
||||||
@ -1290,7 +1291,7 @@ class Detector {
|
|||||||
|
|
||||||
/** [Gotthard] */
|
/** [Gotthard] */
|
||||||
Result<ns> getExptimeLeft(Positions pos = {}) const;
|
Result<ns> getExptimeLeft(Positions pos = {}) const;
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Gotthard2 Specific */
|
/** @name Gotthard2 Specific */
|
||||||
///@{
|
///@{
|
||||||
@ -1407,7 +1408,7 @@ class Detector {
|
|||||||
|
|
||||||
/** [Gotthard2] */
|
/** [Gotthard2] */
|
||||||
void setBadChannels(const std::string &fname, Positions pos = {});
|
void setBadChannels(const std::string &fname, Positions pos = {});
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Mythen3 Specific */
|
/** @name Mythen3 Specific */
|
||||||
///@{
|
///@{
|
||||||
@ -1464,7 +1465,7 @@ class Detector {
|
|||||||
|
|
||||||
Result<int> getGainCaps(Positions pos = {});
|
Result<int> getGainCaps(Positions pos = {});
|
||||||
|
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name CTB / Moench Specific */
|
/** @name CTB / Moench Specific */
|
||||||
///@{
|
///@{
|
||||||
@ -1523,7 +1524,7 @@ class Detector {
|
|||||||
/** [CTB][Moench] If any of a consecutive 4 bits are enabled, the "
|
/** [CTB][Moench] If any of a consecutive 4 bits are enabled, the "
|
||||||
"complete 4 bits are enabled */
|
"complete 4 bits are enabled */
|
||||||
void setTenGigaADCEnableMask(uint32_t mask, Positions pos = {});
|
void setTenGigaADCEnableMask(uint32_t mask, Positions pos = {});
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name CTB Specific */
|
/** @name CTB Specific */
|
||||||
///@{
|
///@{
|
||||||
@ -1605,7 +1606,7 @@ class Detector {
|
|||||||
|
|
||||||
/** [CTB] Default is enabled. */
|
/** [CTB] Default is enabled. */
|
||||||
void setLEDEnable(bool enable, Positions pos = {});
|
void setLEDEnable(bool enable, Positions pos = {});
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Pattern */
|
/** @name Pattern */
|
||||||
///@{
|
///@{
|
||||||
@ -1692,7 +1693,7 @@ class Detector {
|
|||||||
|
|
||||||
/** [Mythen3] */
|
/** [Mythen3] */
|
||||||
void startPattern(Positions pos = {});
|
void startPattern(Positions pos = {});
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Moench specific */
|
/** @name Moench specific */
|
||||||
///@{
|
///@{
|
||||||
@ -1726,7 +1727,7 @@ class Detector {
|
|||||||
void setAdditionalJsonParameter(const std::string &key,
|
void setAdditionalJsonParameter(const std::string &key,
|
||||||
const std::string &value,
|
const std::string &value,
|
||||||
Positions pos = {});
|
Positions pos = {});
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Advanced */
|
/** @name Advanced */
|
||||||
///@{
|
///@{
|
||||||
@ -1823,7 +1824,7 @@ class Detector {
|
|||||||
/** [CTB][Moench][Jungfrau] Advanced user Function! \n
|
/** [CTB][Moench][Jungfrau] Advanced user Function! \n
|
||||||
[Jungfrau] Inversions on top of default mask */
|
[Jungfrau] Inversions on top of default mask */
|
||||||
void setADCInvert(uint32_t value, Positions pos = {});
|
void setADCInvert(uint32_t value, Positions pos = {});
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
/** @name Insignificant */
|
/** @name Insignificant */
|
||||||
///@{
|
///@{
|
||||||
@ -1875,7 +1876,7 @@ class Detector {
|
|||||||
std::string getUserDetails() const;
|
std::string getUserDetails() const;
|
||||||
|
|
||||||
Result<uint64_t> getRxCurrentFrameIndex(Positions pos = {}) const;
|
Result<uint64_t> getRxCurrentFrameIndex(Positions pos = {}) const;
|
||||||
///@{
|
///@}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<int> getPortNumbers(int start_port);
|
std::vector<int> getPortNumbers(int start_port);
|
||||||
|
@ -82,9 +82,14 @@ std::map<std::string, std::string> CmdProxy::GetDepreciatedCommands() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CmdProxy::WrongNumberOfParameters(size_t expected) {
|
void CmdProxy::WrongNumberOfParameters(size_t expected) {
|
||||||
throw RuntimeError(
|
if (expected == 0) {
|
||||||
"Command " + cmd + " expected <=" + std::to_string(expected) +
|
throw RuntimeError("Command " + cmd +
|
||||||
" parameter/s but got " + std::to_string(args.size()) + "\n");
|
" expected no parameter/s but got " +
|
||||||
|
std::to_string(args.size()) + "\n");
|
||||||
|
}
|
||||||
|
throw RuntimeError("Command " + cmd + " expected (or >=) " +
|
||||||
|
std::to_string(expected) + " parameter/s but got " +
|
||||||
|
std::to_string(args.size()) + "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************
|
/************************************************
|
||||||
|
@ -725,6 +725,10 @@ class CmdProxy {
|
|||||||
{"resmat", "partialreset"},
|
{"resmat", "partialreset"},
|
||||||
|
|
||||||
/* Jungfrau Specific */
|
/* Jungfrau Specific */
|
||||||
|
{"storagecells", "extrastoragecells"},
|
||||||
|
{"auto_comp_disable", "autocompdisable"},
|
||||||
|
{"comp_disable_time", "compdisabletime"},
|
||||||
|
|
||||||
/* Gotthard Specific */
|
/* Gotthard Specific */
|
||||||
/* Gotthard2 Specific */
|
/* Gotthard2 Specific */
|
||||||
/* Mythen3 Specific */
|
/* Mythen3 Specific */
|
||||||
@ -942,13 +946,13 @@ class CmdProxy {
|
|||||||
{"temp_threshold", &CmdProxy::temp_threshold},
|
{"temp_threshold", &CmdProxy::temp_threshold},
|
||||||
{"temp_control", &CmdProxy::temp_control},
|
{"temp_control", &CmdProxy::temp_control},
|
||||||
{"temp_event", &CmdProxy::TemperatureEvent},
|
{"temp_event", &CmdProxy::TemperatureEvent},
|
||||||
{"auto_comp_disable", &CmdProxy::auto_comp_disable},
|
{"autocompdisable", &CmdProxy::autocompdisable},
|
||||||
{"comp_disable_time", &CmdProxy::comp_disable_time},
|
{"compdisabletime", &CmdProxy::compdisabletime},
|
||||||
{"storagecells", &CmdProxy::storagecells},
|
{"extrastoragecells", &CmdProxy::extrastoragecells},
|
||||||
{"storagecell_start", &CmdProxy::storagecell_start},
|
{"storagecell_start", &CmdProxy::storagecell_start},
|
||||||
{"storagecell_delay", &CmdProxy::storagecell_delay},
|
{"storagecell_delay", &CmdProxy::storagecell_delay},
|
||||||
{"gainmode", &CmdProxy::gainmode},
|
{"gainmode", &CmdProxy::gainmode},
|
||||||
{"filtercell", &CmdProxy::filtercell},
|
{"filtercells", &CmdProxy::filtercells},
|
||||||
|
|
||||||
/* Gotthard Specific */
|
/* Gotthard Specific */
|
||||||
{"roi", &CmdProxy::ROI},
|
{"roi", &CmdProxy::ROI},
|
||||||
@ -1905,30 +1909,30 @@ class CmdProxy {
|
|||||||
"cleared.");
|
"cleared.");
|
||||||
|
|
||||||
INTEGER_COMMAND_VEC_ID(
|
INTEGER_COMMAND_VEC_ID(
|
||||||
auto_comp_disable, getAutoComparatorDisable, setAutoComparatorDisable,
|
autocompdisable, getAutoComparatorDisable, setAutoComparatorDisable,
|
||||||
StringTo<int>,
|
StringTo<int>,
|
||||||
"[0, 1]\n\t[Jungfrau] Auto comparator disable mode. By default, the "
|
"[0, 1]\n\t[Jungfrau] Auto comparator disable mode. By default, the "
|
||||||
"on-chip gain switching is active during the entire exposure.This mode "
|
"on-chip gain switching is active during the entire exposure.This mode "
|
||||||
"disables the on - chip gain switching comparator automatically after "
|
"disables the on - chip gain switching comparator automatically after "
|
||||||
"93.75% (only for chipv1.0) of exposure time (only for longer than "
|
"93.75% (only for chipv1.0) of exposure time (only for longer than "
|
||||||
"100us). It is possible to set the duration for chipv1.1 using "
|
"100us). It is possible to set the duration for chipv1.1 using "
|
||||||
"comp_disable_time command.\n\tDefault is 0 or this mode "
|
"compdisabletime command.\n\tDefault is 0 or this mode "
|
||||||
"disabled(comparator enabled throughout). 1 enables mode. 0 disables "
|
"disabled(comparator enabled throughout). 1 enables mode. 0 disables "
|
||||||
"mode. ");
|
"mode. ");
|
||||||
|
|
||||||
TIME_COMMAND(comp_disable_time, getComparatorDisableTime,
|
TIME_COMMAND(compdisabletime, getComparatorDisableTime,
|
||||||
setComparatorDisableTime,
|
setComparatorDisableTime,
|
||||||
"[duration] [(optional unit) ns|us|ms|s]\n\t[Jungfrau] Time "
|
"[duration] [(optional unit) ns|us|ms|s]\n\t[Jungfrau] Time "
|
||||||
"before end of exposure when comparator is disabled. It is "
|
"before end of exposure when comparator is disabled. It is "
|
||||||
"only possible for chipv1.1.");
|
"only possible for chipv1.1.");
|
||||||
|
|
||||||
INTEGER_COMMAND_SET_NOID_GET_ID(
|
INTEGER_COMMAND_SET_NOID_GET_ID(
|
||||||
storagecells, getNumberOfAdditionalStorageCells,
|
extrastoragecells, getNumberOfAdditionalStorageCells,
|
||||||
setNumberOfAdditionalStorageCells, StringTo<int>,
|
setNumberOfAdditionalStorageCells, StringTo<int>,
|
||||||
"[0-15]\n\t[Jungfrau] Only for chipv1.0. Number of additional storage "
|
"[0-15]\n\t[Jungfrau] Only for chipv1.0. Number of additional storage "
|
||||||
"cells. Default is "
|
"cells. Default is "
|
||||||
"0. For advanced users only. \n\tThe #images = #frames x #triggers x "
|
"0. For advanced users only. \n\tThe #images = #frames x #triggers x "
|
||||||
"(#storagecells + 1).");
|
"(#extrastoragecells + 1).");
|
||||||
|
|
||||||
INTEGER_COMMAND_VEC_ID(
|
INTEGER_COMMAND_VEC_ID(
|
||||||
storagecell_start, getStorageCellStart, setStorageCellStart,
|
storagecell_start, getStorageCellStart, setStorageCellStart,
|
||||||
@ -1951,8 +1955,8 @@ class CmdProxy {
|
|||||||
"Jungfrau] Gain mode.\n\tCAUTION: Do not use fixg0 without caution, "
|
"Jungfrau] Gain mode.\n\tCAUTION: Do not use fixg0 without caution, "
|
||||||
"you can damage the detector!!!");
|
"you can damage the detector!!!");
|
||||||
|
|
||||||
INTEGER_COMMAND_VEC_ID(filtercell, getFilterCell, setFilterCell,
|
INTEGER_COMMAND_VEC_ID(filtercells, getNumberOfFilterCells,
|
||||||
sls::StringTo<int>,
|
setNumberOfFilterCells, sls::StringTo<int>,
|
||||||
"[0-12]\n\t[Jungfrau] Set Filter Cell. Only for "
|
"[0-12]\n\t[Jungfrau] Set Filter Cell. Only for "
|
||||||
"chipv1.1. Advanced user Command");
|
"chipv1.1. Advanced user Command");
|
||||||
|
|
||||||
|
@ -1582,12 +1582,12 @@ void Detector::setGainMode(const defs::gainMode mode, Positions pos) {
|
|||||||
pimpl->Parallel(&Module::setGainMode, pos, mode);
|
pimpl->Parallel(&Module::setGainMode, pos, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<int> Detector::getFilterCell(Positions pos) const {
|
Result<int> Detector::getNumberOfFilterCells(Positions pos) const {
|
||||||
return pimpl->Parallel(&Module::getFilterCell, pos);
|
return pimpl->Parallel(&Module::getNumberOfFilterCells, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Detector::setFilterCell(int cell, Positions pos) {
|
void Detector::setNumberOfFilterCells(int cell, Positions pos) {
|
||||||
pimpl->Parallel(&Module::setFilterCell, pos, cell);
|
pimpl->Parallel(&Module::setNumberOfFilterCells, pos, cell);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gotthard Specific
|
// Gotthard Specific
|
||||||
@ -2161,7 +2161,9 @@ void Detector::resetFPGA(Positions pos) {
|
|||||||
void Detector::copyDetectorServer(const std::string &fname,
|
void Detector::copyDetectorServer(const std::string &fname,
|
||||||
const std::string &hostname, Positions pos) {
|
const std::string &hostname, Positions pos) {
|
||||||
pimpl->Parallel(&Module::copyDetectorServer, pos, fname, hostname);
|
pimpl->Parallel(&Module::copyDetectorServer, pos, fname, hostname);
|
||||||
|
if (getDetectorType().squash() != defs::EIGER) {
|
||||||
rebootController(pos);
|
rebootController(pos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Detector::rebootController(Positions pos) {
|
void Detector::rebootController(Positions pos) {
|
||||||
|
@ -1855,12 +1855,12 @@ void Module::setGainMode(const slsDetectorDefs::gainMode mode) {
|
|||||||
sendToDetector(F_SET_GAIN_MODE, mode, nullptr);
|
sendToDetector(F_SET_GAIN_MODE, mode, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Module::getFilterCell() const {
|
int Module::getNumberOfFilterCells() const {
|
||||||
return sendToDetector<int>(F_GET_FILTER_CELL);
|
return sendToDetector<int>(F_GET_NUM_FILTER_CELLS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Module::setFilterCell(int value) {
|
void Module::setNumberOfFilterCells(int value) {
|
||||||
sendToDetector(F_SET_FILTER_CELL, value, nullptr);
|
sendToDetector(F_SET_NUM_FILTER_CELLS, value, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gotthard Specific
|
// Gotthard Specific
|
||||||
|
@ -395,8 +395,8 @@ class Module : public virtual slsDetectorDefs {
|
|||||||
void setStorageCellDelay(int64_t value);
|
void setStorageCellDelay(int64_t value);
|
||||||
gainMode getGainMode() const;
|
gainMode getGainMode() const;
|
||||||
void setGainMode(const gainMode mode);
|
void setGainMode(const gainMode mode);
|
||||||
int getFilterCell() const;
|
int getNumberOfFilterCells() const;
|
||||||
void setFilterCell(int value);
|
void setNumberOfFilterCells(int value);
|
||||||
|
|
||||||
/**************************************************
|
/**************************************************
|
||||||
* *
|
* *
|
||||||
|
@ -255,7 +255,7 @@ TEST_CASE("temp_event", "[.cmd]") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("auto_comp_disable", "[.cmd]") {
|
TEST_CASE("autocompdisable", "[.cmd]") {
|
||||||
Detector det;
|
Detector det;
|
||||||
CmdProxy proxy(&det);
|
CmdProxy proxy(&det);
|
||||||
auto det_type = det.getDetectorType().squash();
|
auto det_type = det.getDetectorType().squash();
|
||||||
@ -263,29 +263,29 @@ TEST_CASE("auto_comp_disable", "[.cmd]") {
|
|||||||
auto prev_val = det.getAutoComparatorDisable();
|
auto prev_val = det.getAutoComparatorDisable();
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("auto_comp_disable", {"0"}, -1, PUT, oss);
|
proxy.Call("autocompdisable", {"0"}, -1, PUT, oss);
|
||||||
REQUIRE(oss.str() == "auto_comp_disable 0\n");
|
REQUIRE(oss.str() == "autocompdisable 0\n");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("auto_comp_disable", {"1"}, -1, PUT, oss);
|
proxy.Call("autocompdisable", {"1"}, -1, PUT, oss);
|
||||||
REQUIRE(oss.str() == "auto_comp_disable 1\n");
|
REQUIRE(oss.str() == "autocompdisable 1\n");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("auto_comp_disable", {}, -1, GET, oss);
|
proxy.Call("autocompdisable", {}, -1, GET, oss);
|
||||||
REQUIRE(oss.str() == "auto_comp_disable 1\n");
|
REQUIRE(oss.str() == "autocompdisable 1\n");
|
||||||
}
|
}
|
||||||
for (int i = 0; i != det.size(); ++i) {
|
for (int i = 0; i != det.size(); ++i) {
|
||||||
det.setAutoComparatorDisable(prev_val[i], {i});
|
det.setAutoComparatorDisable(prev_val[i], {i});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
REQUIRE_THROWS(proxy.Call("auto_comp_disable", {}, -1, GET));
|
REQUIRE_THROWS(proxy.Call("autocompdisable", {}, -1, GET));
|
||||||
REQUIRE_THROWS(proxy.Call("auto_comp_disable", {"0"}, -1, PUT));
|
REQUIRE_THROWS(proxy.Call("autocompdisable", {"0"}, -1, PUT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("comp_disable_time", "[.cmd]") {
|
TEST_CASE("compdisabletime", "[.cmd]") {
|
||||||
Detector det;
|
Detector det;
|
||||||
CmdProxy proxy(&det);
|
CmdProxy proxy(&det);
|
||||||
auto det_type = det.getDetectorType().squash();
|
auto det_type = det.getDetectorType().squash();
|
||||||
@ -294,29 +294,29 @@ TEST_CASE("comp_disable_time", "[.cmd]") {
|
|||||||
auto prev_val = det.getComparatorDisableTime();
|
auto prev_val = det.getComparatorDisableTime();
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("comp_disable_time", {"125ns"}, -1, PUT, oss);
|
proxy.Call("compdisabletime", {"125ns"}, -1, PUT, oss);
|
||||||
REQUIRE(oss.str() == "comp_disable_time 125ns\n");
|
REQUIRE(oss.str() == "compdisabletime 125ns\n");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("comp_disable_time", {}, -1, GET, oss);
|
proxy.Call("compdisabletime", {}, -1, GET, oss);
|
||||||
REQUIRE(oss.str() == "comp_disable_time 125ns\n");
|
REQUIRE(oss.str() == "compdisabletime 125ns\n");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("comp_disable_time", {"0"}, -1, PUT, oss);
|
proxy.Call("compdisabletime", {"0"}, -1, PUT, oss);
|
||||||
REQUIRE(oss.str() == "comp_disable_time 0\n");
|
REQUIRE(oss.str() == "compdisabletime 0\n");
|
||||||
}
|
}
|
||||||
for (int i = 0; i != det.size(); ++i) {
|
for (int i = 0; i != det.size(); ++i) {
|
||||||
det.setComparatorDisableTime(prev_val[i], {i});
|
det.setComparatorDisableTime(prev_val[i], {i});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
REQUIRE_THROWS(proxy.Call("comp_disable_time", {}, -1, GET));
|
REQUIRE_THROWS(proxy.Call("compdisabletime", {}, -1, GET));
|
||||||
REQUIRE_THROWS(proxy.Call("comp_disable_time", {"0"}, -1, PUT));
|
REQUIRE_THROWS(proxy.Call("compdisabletime", {"0"}, -1, PUT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("storagecells", "[.cmd]") {
|
TEST_CASE("extrastoragecells", "[.cmd]") {
|
||||||
Detector det;
|
Detector det;
|
||||||
CmdProxy proxy(&det);
|
CmdProxy proxy(&det);
|
||||||
auto det_type = det.getDetectorType().squash();
|
auto det_type = det.getDetectorType().squash();
|
||||||
@ -327,35 +327,35 @@ TEST_CASE("storagecells", "[.cmd]") {
|
|||||||
"inconsistent #additional storage cells to test");
|
"inconsistent #additional storage cells to test");
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("storagecells", {"1"}, -1, PUT, oss);
|
proxy.Call("extrastoragecells", {"1"}, -1, PUT, oss);
|
||||||
REQUIRE(oss.str() == "storagecells 1\n");
|
REQUIRE(oss.str() == "extrastoragecells 1\n");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("storagecells", {"15"}, -1, PUT, oss);
|
proxy.Call("extrastoragecells", {"15"}, -1, PUT, oss);
|
||||||
REQUIRE(oss.str() == "storagecells 15\n");
|
REQUIRE(oss.str() == "extrastoragecells 15\n");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("storagecells", {"0"}, -1, PUT, oss);
|
proxy.Call("extrastoragecells", {"0"}, -1, PUT, oss);
|
||||||
REQUIRE(oss.str() == "storagecells 0\n");
|
REQUIRE(oss.str() == "extrastoragecells 0\n");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("storagecells", {}, -1, GET, oss);
|
proxy.Call("extrastoragecells", {}, -1, GET, oss);
|
||||||
REQUIRE(oss.str() == "storagecells 0\n");
|
REQUIRE(oss.str() == "extrastoragecells 0\n");
|
||||||
}
|
}
|
||||||
REQUIRE_THROWS(proxy.Call("storagecells", {"16"}, -1, PUT));
|
REQUIRE_THROWS(proxy.Call("extrastoragecells", {"16"}, -1, PUT));
|
||||||
det.setNumberOfAdditionalStorageCells(prev_val);
|
det.setNumberOfAdditionalStorageCells(prev_val);
|
||||||
}
|
}
|
||||||
// chip version 1.1
|
// chip version 1.1
|
||||||
else {
|
else {
|
||||||
// cannot set number of addl. storage cells
|
// cannot set number of addl. storage cells
|
||||||
REQUIRE_THROWS(proxy.Call("storagecells", {"1"}, -1, PUT));
|
REQUIRE_THROWS(proxy.Call("extrastoragecells", {"1"}, -1, PUT));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
REQUIRE_THROWS(proxy.Call("storagecells", {}, -1, GET));
|
REQUIRE_THROWS(proxy.Call("extrastoragecells", {}, -1, GET));
|
||||||
REQUIRE_THROWS(proxy.Call("storagecells", {"0"}, -1, PUT));
|
REQUIRE_THROWS(proxy.Call("extrastoragecells", {"0"}, -1, PUT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -494,47 +494,47 @@ TEST_CASE("gainmode", "[.cmd]") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("filtercell", "[.cmd]") {
|
TEST_CASE("filtercells", "[.cmd]") {
|
||||||
Detector det;
|
Detector det;
|
||||||
CmdProxy proxy(&det);
|
CmdProxy proxy(&det);
|
||||||
auto det_type = det.getDetectorType().squash();
|
auto det_type = det.getDetectorType().squash();
|
||||||
if (det_type == defs::JUNGFRAU) {
|
if (det_type == defs::JUNGFRAU) {
|
||||||
// chip version 1.1
|
// chip version 1.1
|
||||||
if (det.getChipVersion().squash() * 10 == 11) {
|
if (det.getChipVersion().squash() * 10 == 11) {
|
||||||
auto prev_val = det.getFilterCell();
|
auto prev_val = det.getNumberOfFilterCells();
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("filtercell", {"1"}, -1, PUT, oss);
|
proxy.Call("filtercells", {"1"}, -1, PUT, oss);
|
||||||
REQUIRE(oss.str() == "filtercell 1\n");
|
REQUIRE(oss.str() == "filtercells 1\n");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("filtercell", {"12"}, -1, PUT, oss);
|
proxy.Call("filtercells", {"12"}, -1, PUT, oss);
|
||||||
REQUIRE(oss.str() == "filtercell 12\n");
|
REQUIRE(oss.str() == "filtercells 12\n");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("filtercell", {"0"}, -1, PUT, oss);
|
proxy.Call("filtercells", {"0"}, -1, PUT, oss);
|
||||||
REQUIRE(oss.str() == "filtercell 0\n");
|
REQUIRE(oss.str() == "filtercells 0\n");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
proxy.Call("filtercell", {}, -1, GET, oss);
|
proxy.Call("filtercells", {}, -1, GET, oss);
|
||||||
REQUIRE(oss.str() == "filtercell 0\n");
|
REQUIRE(oss.str() == "filtercells 0\n");
|
||||||
}
|
}
|
||||||
REQUIRE_THROWS(proxy.Call("filtercell", {"13"}, -1, PUT));
|
REQUIRE_THROWS(proxy.Call("filtercells", {"13"}, -1, PUT));
|
||||||
for (int i = 0; i != det.size(); ++i) {
|
for (int i = 0; i != det.size(); ++i) {
|
||||||
det.setFilterCell(prev_val[i], {i});
|
det.setNumberOfFilterCells(prev_val[i], {i});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// chip version 1.0
|
// chip version 1.0
|
||||||
else {
|
else {
|
||||||
// cannot set/get filter cell
|
// cannot set/get filter cell
|
||||||
REQUIRE_THROWS(proxy.Call("filtercell", {"1"}, -1, PUT));
|
REQUIRE_THROWS(proxy.Call("filtercells", {"1"}, -1, PUT));
|
||||||
REQUIRE_THROWS(proxy.Call("filtercell", {}, -1, GET));
|
REQUIRE_THROWS(proxy.Call("filtercells", {}, -1, GET));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
REQUIRE_THROWS(proxy.Call("filtercell", {}, -1, GET));
|
REQUIRE_THROWS(proxy.Call("filtercells", {}, -1, GET));
|
||||||
REQUIRE_THROWS(proxy.Call("filtercell", {"0"}, -1, PUT));
|
REQUIRE_THROWS(proxy.Call("filtercells", {"0"}, -1, PUT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -238,8 +238,8 @@ enum detFuncs {
|
|||||||
F_SET_COMP_DISABLE_TIME,
|
F_SET_COMP_DISABLE_TIME,
|
||||||
F_GET_FLIP_ROWS,
|
F_GET_FLIP_ROWS,
|
||||||
F_SET_FLIP_ROWS,
|
F_SET_FLIP_ROWS,
|
||||||
F_GET_FILTER_CELL,
|
F_GET_NUM_FILTER_CELLS,
|
||||||
F_SET_FILTER_CELL,
|
F_SET_NUM_FILTER_CELLS,
|
||||||
F_SET_ADC_PIPELINE,
|
F_SET_ADC_PIPELINE,
|
||||||
F_GET_ADC_PIPELINE,
|
F_GET_ADC_PIPELINE,
|
||||||
F_SET_DBIT_PIPELINE,
|
F_SET_DBIT_PIPELINE,
|
||||||
@ -593,8 +593,8 @@ const char* getFunctionNameFromEnum(enum detFuncs func) {
|
|||||||
case F_SET_COMP_DISABLE_TIME: return "F_SET_COMP_DISABLE_TIME";
|
case F_SET_COMP_DISABLE_TIME: return "F_SET_COMP_DISABLE_TIME";
|
||||||
case F_GET_FLIP_ROWS: return "F_GET_FLIP_ROWS";
|
case F_GET_FLIP_ROWS: return "F_GET_FLIP_ROWS";
|
||||||
case F_SET_FLIP_ROWS: return "F_SET_FLIP_ROWS";
|
case F_SET_FLIP_ROWS: return "F_SET_FLIP_ROWS";
|
||||||
case F_GET_FILTER_CELL: return "F_GET_FILTER_CELL";
|
case F_GET_NUM_FILTER_CELLS: return "F_GET_NUM_FILTER_CELLS";
|
||||||
case F_SET_FILTER_CELL: return "F_SET_FILTER_CELL";
|
case F_SET_NUM_FILTER_CELLS: return "F_SET_NUM_FILTER_CELLS";
|
||||||
case F_SET_ADC_PIPELINE: return "F_SET_ADC_PIPELINE";
|
case F_SET_ADC_PIPELINE: return "F_SET_ADC_PIPELINE";
|
||||||
case F_GET_ADC_PIPELINE: return "F_GET_ADC_PIPELINE";
|
case F_GET_ADC_PIPELINE: return "F_GET_ADC_PIPELINE";
|
||||||
case F_SET_DBIT_PIPELINE: return "F_SET_DBIT_PIPELINE";
|
case F_SET_DBIT_PIPELINE: return "F_SET_DBIT_PIPELINE";
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
// SPDX-License-Identifier: LGPL-3.0-or-other
|
// SPDX-License-Identifier: LGPL-3.0-or-other
|
||||||
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||||
/** API versions */
|
/** API versions */
|
||||||
#define GITBRANCH "6.0.0-rc1"
|
#define GITBRANCH "6.0.0"
|
||||||
|
|
||||||
#define APILIB 0x211008
|
#define APILIB 0x211021
|
||||||
#define APIRECEIVER 0x211007
|
#define APIRECEIVER 0x211020
|
||||||
#define APIGUI 0x210819
|
#define APIGUI 0x211021
|
||||||
#define APICTB 0x211019
|
#define APICTB 0x211021
|
||||||
#define APIGOTTHARD 0x211019
|
#define APIGOTTHARD 0x211021
|
||||||
#define APIGOTTHARD2 0x211019
|
#define APIGOTTHARD2 0x211021
|
||||||
#define APIJUNGFRAU 0x211019
|
#define APIJUNGFRAU 0x211021
|
||||||
#define APIMYTHEN3 0x211019
|
#define APIMYTHEN3 0x211021
|
||||||
#define APIMOENCH 0x211019
|
#define APIMOENCH 0x211021
|
||||||
#define APIEIGER 0x211019
|
#define APIEIGER 0x211021
|
||||||
|
Reference in New Issue
Block a user