mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-02 08:00:41 +02:00
added docs for SLSDETNAME
This commit is contained in:
parent
e77fd8d85d
commit
7d05cc750c
@ -42,6 +42,7 @@ set(SPHINX_SOURCE_FILES
|
|||||||
src/pyexamples.rst
|
src/pyexamples.rst
|
||||||
src/pyPatternGenerator.rst
|
src/pyPatternGenerator.rst
|
||||||
src/servers.rst
|
src/servers.rst
|
||||||
|
src/multidet.rst
|
||||||
src/receiver_api.rst
|
src/receiver_api.rst
|
||||||
src/result.rst
|
src/result.rst
|
||||||
src/type_traits.rst
|
src/type_traits.rst
|
||||||
|
@ -28,6 +28,12 @@ Welcome to slsDetectorPackage's documentation!
|
|||||||
receiver_api
|
receiver_api
|
||||||
examples
|
examples
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:caption: how to
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
multidet
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:caption: Python API
|
:caption: Python API
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
181
docs/src/multidet.rst
Normal file
181
docs/src/multidet.rst
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
Using multiple detectors
|
||||||
|
==========================
|
||||||
|
|
||||||
|
The slsDetectorPackage supports using several detectors on the same computer.
|
||||||
|
This can either be two users, that needs to use the same computer without interfering
|
||||||
|
with each other, or the same user that wants to use multiple detectors at the same time.
|
||||||
|
The detectors in turn can consist of multiple modules.
|
||||||
|
|
||||||
|
In order to do this we have two tools to our disposal:
|
||||||
|
|
||||||
|
#. Detector index
|
||||||
|
#. The SLSDETNAME environment variable
|
||||||
|
|
||||||
|
They can be used together or separately depending on the use case.
|
||||||
|
|
||||||
|
Detector index
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
When configuring a detector you can specify a detector index. The default is 0.
|
||||||
|
|
||||||
|
**Command line**
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# Configure detector with index 0
|
||||||
|
$ sls_detector_put hostname my-det
|
||||||
|
|
||||||
|
# Set number of frames for detector 0 to 19
|
||||||
|
$ sls_detector_put frames 10
|
||||||
|
|
||||||
|
|
||||||
|
# Configure detector with index 1 (notice the 1- before hostname)
|
||||||
|
$ sls_detector_put 1-hostname my-det2
|
||||||
|
|
||||||
|
|
||||||
|
# Further configuration
|
||||||
|
...
|
||||||
|
|
||||||
|
# Set number of frames for detector 1 to 19
|
||||||
|
$ sls_detector_put 1-frames 19
|
||||||
|
|
||||||
|
# Note that if we call sls_detector_get without specifying the index,
|
||||||
|
# it will return the configuration of detector 0
|
||||||
|
$ sls_detector_get frames
|
||||||
|
10
|
||||||
|
|
||||||
|
**Python**
|
||||||
|
|
||||||
|
The main difference between the command line and the Python API is that you set the index
|
||||||
|
when you create the detector object and you don't have to repeat it for every call.
|
||||||
|
|
||||||
|
The C++ API works int the same way.
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from slsdet import Detector
|
||||||
|
|
||||||
|
# Configure detector with index 0
|
||||||
|
d = Detector()
|
||||||
|
|
||||||
|
# If the detector has already been configured and has a shared memory
|
||||||
|
# segment, you can omit setting the hostname again
|
||||||
|
d.hostname = 'my-det'
|
||||||
|
|
||||||
|
#Further configuration
|
||||||
|
...
|
||||||
|
|
||||||
|
# Configure a second detector with index 1
|
||||||
|
d2 = Detector(1)
|
||||||
|
d2.hostname = 'my-det2'
|
||||||
|
|
||||||
|
d.frames = 10
|
||||||
|
d2.frames = 19
|
||||||
|
|
||||||
|
|
||||||
|
$SLSDETNAME
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
To avoid interfering with other users on shared PCs it is best to always set the SLSDETNAME environmental variable.
|
||||||
|
Imagining a fictive user: Anna, we can set SLSDETNAME from the shell before configuring the detector:
|
||||||
|
|
||||||
|
**Command line**
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# Set the SLSDETNAME variable
|
||||||
|
$ export SLSDETNAME=Anna
|
||||||
|
|
||||||
|
# You can check that it is set
|
||||||
|
$ echo $SLSDETNAME
|
||||||
|
Anna
|
||||||
|
|
||||||
|
# Now configures a detector with index 0 and prefixed with the name Anna
|
||||||
|
# /dev/shm/slsDetectorPackage_detector_0_Anna
|
||||||
|
$ sls_detector_put hostname my-det
|
||||||
|
|
||||||
|
|
||||||
|
.. tip ::
|
||||||
|
|
||||||
|
Set SLSDETNAME in your .bashrc in order to not forget it when opening a new terminal.
|
||||||
|
|
||||||
|
|
||||||
|
**Python**
|
||||||
|
|
||||||
|
With python the best way is to set the SLSDETNAME from the command line before starting the python interpreter.
|
||||||
|
|
||||||
|
Bash:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ export SLSDETNAME=Anna
|
||||||
|
|
||||||
|
Python:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from slsdet import Detector
|
||||||
|
|
||||||
|
# Now configures a detector with index 0 and prefixed with the name Anna
|
||||||
|
# /dev/shm/slsDetectorPackage_detector_0_Anna
|
||||||
|
d = Detector()
|
||||||
|
d.hostname = 'my-det'
|
||||||
|
|
||||||
|
You can also set SLSDETNAME from within the Python interpreter, but you have to be aware that it will only
|
||||||
|
affect the current process and not the whole shell session.
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
import os
|
||||||
|
os.environ['SLSDETNAME'] = 'Anna'
|
||||||
|
|
||||||
|
# You can check that it is set
|
||||||
|
print(os.environ['SLSDETNAME']) # Output: Anna
|
||||||
|
|
||||||
|
#Now SLSDETNAME is set to Anna but as soon as you exit the python interpreter
|
||||||
|
# it will not be set anymore
|
||||||
|
|
||||||
|
.. note ::
|
||||||
|
|
||||||
|
Python has two ways of reading environment variables: `**os.environ**` as shown above which throws a
|
||||||
|
KeyError if the variable is not set and `os.getenv('SLSDETNAME')` which returns None if the variable is not set.
|
||||||
|
|
||||||
|
For more details see the official python documentation on: https://docs.python.org/3/library/os.html#os.environ
|
||||||
|
|
||||||
|
|
||||||
|
Checking for other detectors
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
If using shared accounts on a shared computer (which you anyway should not do), it is good practice to check
|
||||||
|
if there are other detectors configured by other users before configuring your own detector.
|
||||||
|
|
||||||
|
You can do this by listing the files in the shared memory directory `/dev/shm/` that start with `sls`. In this
|
||||||
|
example we can see that two single module detectors are configured one with index 0 and one with index 1.
|
||||||
|
SLSDETNAME is set to `Anna` so it makes sense to assume that she is the user that configured these detectors.
|
||||||
|
|
||||||
|
|
||||||
|
.. code-block :: bash
|
||||||
|
|
||||||
|
# List the files in /dev/shm that starts with sls
|
||||||
|
$ ls /dev/shm/sls*
|
||||||
|
/dev/shm/slsDetectorPackage_detector_0_Anna
|
||||||
|
/dev/shm/slsDetectorPackage_detector_0_module_0_Anna
|
||||||
|
/dev/shm/slsDetectorPackage_detector_1_Anna
|
||||||
|
/dev/shm/slsDetectorPackage_detector_1_module_0_Anna
|
||||||
|
|
||||||
|
|
||||||
|
Other considerations
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
The shared memory is not the only way to interfere with other users. You also need to make sure that you are not
|
||||||
|
using the same:
|
||||||
|
|
||||||
|
* rx_tcpport
|
||||||
|
* udp_dstport
|
||||||
|
* rx_zmqport
|
||||||
|
* zmqport
|
||||||
|
|
||||||
|
.. attention ::
|
||||||
|
|
||||||
|
The computer that you are using need to have enough resources to run multiple detectors at the same time.
|
||||||
|
This includes CPU and network bandwidth. Please coordinate with the other users!
|
Loading…
x
Reference in New Issue
Block a user