The jungfrau_utils library provides tools for processing of data from the Jungfrau detectors.
The most common way to utilize it is to open a raw Jungfrau file with jungfrau_utils.File()
wrapper, which provides a similar interface to h5py.File(). To read images one can directly
index or slice the resulting object. Any metadata entry is accessed via the same object, but using
the metadata's name as a key in a standart python dictionary style.
A typical extraction patterns for data and metadata:
import jungfrau_utils as ju
with ju.File("<path_to_a_file>") as juf:
first_image = juf[0] # a first image in a file
roi_all_images = juf[:, 100:200, :100] # all images, rows from 100 to 200, first 100 columns
all_pulse_ids = juf["pulse_id"][:] # all `pulse_id` valuesBy default, it will try to auto-locate the corresponding pedestal (and gain) file, based on the file creation time stamp, but the pedestal path can also be provided explicitly:
with ju.File("<path_to_a_file>", pedestal_file="<gain_file_path>") as juf:
...Finally, it's possible to control conversion (adc to keV), masking, gap pixels and geometry corrections via the corresponding flags:
with ju.File("<path_to_a_file>", conversion=True, mask=True, gap_pixels=True, geometry=True) as juf:
...The full reference could be found here: https://jungfrau-utils.readthedocs.io/en/latest/
The package is created with a conda recipe, and uploaded to the paulscherrerinstitute Anaconda
channel. Thus, the easiest way to install is:
conda install -c paulscherrerinstitute jungfrau_utils
For testing, the git repo can also be simply cloned.
There are several channels (conda-forge, paulscherrerinstitute) where bitshuffle package is released. It's better to not use bitshuffle from paulscherrerinstitute channel (have compatibility problem with h5py/hdf). Starting from 3.14.4 version, bitshuffle version >=0.5 is requested for jungfrau_utils. This version may have a problem on nodes, since compiled with AVX512 instructions, which are not available for processors like (Intel(R) Xeon(R) CPU E5-2697A v4) or (AMD EPYC 7453). Problem with such bitshuffle will be "Illegal instruction" message when reading or writing of compressed files via jungfrau_utils is done. To fix this problem, reinstall bitshuffle in your conda environment with the recompilation:
conda remove bitshuffle --force # remove bitshuffle from conda environment
pip install bitshuffle --no-binary=bitshuffle # install bitshuffle with recompilation in the current conda environment
To check if bitshuffle compiled with AVX512 support:
python -c "import bitshuffle; print(bitshuffle.using_AVX512())"
List of supported processors instructions can be found in /proc/cpuinfo
grep -i avx512 /proc/cpuinfo
The build is triggered via the Github Actions script upon pushing a tag into a master branch.
It builds a package and uploads it to paulscherrerinstitute Anaconda channel. A tagged release
commit can be created with make_release.py script.