2024-06-13 (Thu)

0:15 ごろに寝ているのだが、4 時とか 5 時台に目が覚めることが多く、二度寝もうまく行かず、午後になってすごく眠くなったり頭痛がして困る。

EIGER 検出器のデータを binning する

EIGER 16 M のデータが無駄に大きい(特に SMX だと一度のビームタイムで 15 TB とかになってしまう)ので、binning することを考えた。2x binning なので、元の 4 pixels が新しい 1 pixel に寄与する。EIGER には module gap などの invalid pixel が多数存在する。Binning の結果、valid pixel と invalid pixel が混ざってしまうと厄介なことになるので、そういうケースがどのくらいあるか数えた。

import h5py
import hdf5plugin

f = h5py.File("scan01_master.h5", "r") # SPring-8 BL41XU EIGER 16M
mask = f["/entry/instrument/detector/detectorSpecific/pixel_mask"][()]

np.sum(mask != 0) # 1251259
mask.shape # (4362, 4148) = 18093576 pixels

mask = mask.astype(np.int64) # originally np.uint32
mask[mask != 0] = -1
binned = np.zeros((mask.shape[0] // 2, mask.shape[1] // 2))
binned += mask[0::2, 0::2]
binned += mask[0::2, 1::2]
binned += mask[1::2, 1::2]
binned += mask[1::2, 0::2]
np.sum(binned != 0) # 312987
np.sum(binned == -4) # 312720
np.sum(binned == -3) # 22  
np.sum(binned == -2) # 87  
np.sum(binned == -1) # 158

見ての通り、ほとんどは 4 pixels 全部が invalid だった。1-3 pixel(s) が invalid だったやつを全部 invalid にしてもほとんどロスはない。

読んだ