Files
Jungfraujoch/docs/PIXEL_MASK.md
T
leonarski_f 30b6800289
Build Packages / build:windows:nocuda (push) Successful in 17m20s
Build Packages / build:windows:cuda (push) Successful in 19m52s
Build Packages / build:viewer-tgz:cpu (push) Successful in 9m38s
Build Packages / build:viewer-tgz:cuda (push) Successful in 11m18s
Build Packages / build:rugnux-tgz (x86_64) (push) Successful in 9m34s
Build Packages / build:rugnux:aarch64 (cross) (push) Successful in 5m42s
Build Packages / HDF5 consumer tests (DIALS, XDS) (push) Successful in 20m33s
Build Packages / Create release (push) Successful in 33s
Build Packages / build:rugnux:windows (push) Successful in 12m0s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 15m42s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 14m59s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 16m8s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 14m35s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 16m55s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 16m58s
Build Packages / Generate python client (push) Successful in 16s
Build Packages / build:rpm (rocky8) (push) Successful in 15m21s
Build Packages / Build documentation (push) Successful in 54s
Build Packages / build:rpm (rocky9) (push) Successful in 16m23s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 12m2s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 10m6s
Build Packages / Unit tests (push) Successful in 1h10m26s
v1.0.0-rc.171 (#81)
* Rugnux: basic support for CCD images (marCCD, SMV) and for gzipped miniCBF.
* `jfjoch_viewer`: opens the CCD formats, and fixes to the dataset plots.
* Documentation updates.

Reviewed-on: #81
Co-authored-by: Filip Leonarski <filip.leonarski@psi.ch>
2026-09-17 14:42:52 +02:00

52 lines
2.0 KiB
Markdown

# Pixel mask
## Mask format
Jungfraujoch generally follows the [NXmx format](https://manual.nexusformat.org/classes/applications/NXmx.html) for the pixel mask.
The pixel mask is a 32-bit unsigned integer array of the same size as the image.
The conditions for masking a pixel are encoded by setting a particular bit to one. This makes it possible to record the reason why a pixel is included in the mask, and several reasons can be recorded for one pixel at the same time.
Bit values are set as follows:
Bit 0 - gap (pixel with no sensor)
Bit 1 - error pixel (for PSI JUNGFRAU: pixel doesn't set proper gain during pedestal, for DECTRIS: pixel is part of detector pixel mask)
Bit 4 - noisy pixel (for PSI JUNGFRAU: pixel pedestal G0 RMS is over threshold, for DECTRIS: pixel was flagged with signal during dark data collection at initialization)
Bit 8 - user defined mask
Bit 9 - beam stop shadow (found by `rugnux --detect-beam-stop`, on by default; see [Rugnux](RUGNUX.md)).
Unlike the other bits this one belongs to the run that found it, not to the dataset: Rugnux clears it
at the start of every run, so a mask read back from a file that carries one starts clear. The user
mask (bit 8) is left alone.
Bit 30 - module edge (only for PSI systems)
Bit 31 - chip edge interpolated pixel (multipixel)
## Custom user mask
Jungfraujoch allows a custom user mask to be uploaded. This happens in two steps. First create the mask in TIFF format:
```python
import numpy as np
import tifffile as tiff
# Create an array matching a 2068 x 2164 (width x height) image: 2164 rows, 2068 columns
array = np.zeros((2164, 2068), dtype=np.uint32)
# Mark the pixel at column 400, row 300 with the value 1
array[300, 400] = 1
# Save the array as a TIFF file
tiff.imwrite('mask.tiff', array)
```
Pixels with non-zero value in the TIFF file will be marked as belonging to the user mask (bit 8).
Then upload the mask to Jungfraujoch server:
```shell
curl -v http://<jfjoch_broker http address>/config/user_mask.tiff -XPUT --data-binary @mask.tiff
```