Files
Jungfraujoch/reader/CMakeLists.txt
T
leonarski_fandClaude Opus 5 dc16a00271 reader: read a PILATUS miniCBF sweep natively, without libcbf
Most facilities still archive rotation data as a directory of miniCBF frames, which until now had
to be converted to HDF5 before rugnux could see it. Nothing in that format needs a CIF parser or a
library: it is an ASCII header, four separator bytes, then one byte-offset compressed image, and
every value the reader wants sits on a "# " comment line or a MIME line.

MiniCBF holds the format itself - header parse and the byte-offset decoder, which is a running
value with deltas stored smallest-container-first. Verified byte-exact against dxtbx on PILATUS 6M,
6M-F, 300K, silicon and CdTe sensors, and three sensor thicknesses.

JFJochCBFReader is a sibling of JFJochHDF5Reader under the JFJochReader base. NAMING ANY FRAME
READS ITS WHOLE SWEEP: the sweep is identified by the template (prefix + digit count) the named
frame belongs to, not by "every .cbf in the directory", so a directory holding two sweeps does not
splice two crystals together. Naming a directory takes the sweep with the most frames in it.

Images decode on demand, one per call, so any number of workers can read at once - there is no
global lock as there is on the HDF5 path, HDF5 not being thread-safe. A raw CBF carries no analysis
results, so the dataset it builds is the geometry, the mask and nothing else, exactly as a plain
DECTRIS file with no /entry/MX gives.

Two header quirks are handled because real files have them: the sensor material is written
"Silicon" where the rest of the code compares against "CdTe", and the thickness unit is sometimes
omitted. Headers are not a fixed size either - one set carries 6335 bytes - so the parse runs to
the binary separator rather than over a fixed prefix.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 20:12:36 +02:00

28 lines
966 B
CMake

ADD_LIBRARY(JFJochReader STATIC
JFJochReader.cpp JFJochReader.h
JFJochHDF5Reader.cpp
JFJochHDF5Reader.h
MiniCBF.cpp
MiniCBF.h
JFJochCBFReader.cpp
JFJochCBFReader.h
HDF5ImageLocator.cpp
HDF5ImageLocator.h
HDF5ImageSource.cpp
HDF5ImageSource.h
HDF5MetadataSource.cpp
HDF5MetadataSource.h
JFJochReaderImage.cpp
JFJochReaderImage.h
JFJochReaderDataset.cpp
JFJochReaderDataset.h
JFJochReaderSpots.h
)
# NB: JFJochHttpReader (the viewer's live-broker HTTP client) lives in viewer/ and links libcurl;
# it is deliberately NOT part of this always-built library, so the broker/writer never pull in a
# TLS/Kerberos stack.
TARGET_LINK_LIBRARIES(JFJochReader JFJochImageAnalysis JFJochAPI JFJochCommon JFJochZMQ JFJochLogger
JFJochHDF5Wrappers CBORStream2FrameSerialize
${CMAKE_DL_LIBS})