v1.0.0-rc.140 (#50)
Build Packages / Unit tests (push) Successful in 1h20m34s
Build Packages / build:rpm (rocky8) (push) Successful in 13m32s
Build Packages / Generate python client (push) Successful in 24s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 13m6s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 11m32s
Build Packages / XDS test (durin plugin) (push) Successful in 10m49s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 14m8s
Build Packages / DIALS test (push) Successful in 14m57s
Build Packages / Build documentation (push) Successful in 47s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 13m30s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 14m23s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 14m40s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 13m14s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 11m55s
Build Packages / build:rpm (rocky9) (push) Successful in 14m23s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 9m48s
Build Packages / XDS test (neggia plugin) (push) Successful in 7m10s

This is an UNSTABLE release. The release has significant modifications and bug fixes, if things go wrong, it is better to revert to 1.0.0-rc.132.

* jfjoch_broker: For DECTRIS detectors, ZeroMQ link is persistent, to save time for establishing new connection
* jfjoch_broker: Minor bug fixes for rare conditions

Reviewed-on: #50
This commit was merged in pull request #50.
This commit is contained in:
2026-04-29 21:40:22 +02:00
parent 4878318c27
commit 239a441ee6
145 changed files with 366 additions and 230 deletions
+35 -18
View File
@@ -101,7 +101,7 @@ void JFJochHDF5Reader::ReadFile(const std::string& filename) {
std::unique_lock ul(hdf5_mutex);
try {
auto dataset = std::make_shared<JFJochReaderDataset>();
master_file = std::make_unique<HDF5ReadOnlyFile>(filename);
master_file = std::make_shared<HDF5ReadOnlyFile>(filename);
dataset->experiment = default_experiment;
dataset->arm_date = master_file->GetString("/entry/start_time");
@@ -493,11 +493,43 @@ CompressedImage JFJochHDF5Reader::LoadImageDataset(std::vector<uint8_t> &tmp, HD
if (datatype.IsFloat())
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,"Float datasets not supported at this time");
return {tmp, dim[1], dim[2],
return {tmp, dim[2], dim[1],
CalcImageMode(datatype.GetElemSize(), datatype.IsFloat(), datatype.IsSigned()),
algorithm};
}
std::pair<std::shared_ptr<HDF5ReadOnlyFile>, uint32_t> JFJochHDF5Reader::GetImageLocation(int64_t image_number) {
if (image_number >= number_of_images || image_number < 0)
throw JFJochException(JFJochExceptionCategory::HDF5, "Image out of bounds");
uint32_t image_id;
std::shared_ptr<HDF5ReadOnlyFile> data_file;
if (format == FileWriterFormat::NXmxLegacy) {
uint32_t file_id = image_number / images_per_file;
image_id = image_number % images_per_file;
data_file = std::make_shared<HDF5ReadOnlyFile>(legacy_format_files.at(file_id));
} else {
image_id = image_number;
data_file = master_file;
}
return {std::move(data_file), image_id};
}
std::shared_ptr<JFJochReaderRawImage> JFJochHDF5Reader::GetRawImage(int64_t image_number) {
std::unique_lock ul(hdf5_mutex);
if (!master_file)
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Cannot load image if file not loaded");
auto [source_file, image_id] = GetImageLocation(image_number);
auto ret = std::make_shared<JFJochReaderRawImage>();
ret->image = LoadImageDataset(ret->image_buffer, *source_file, image_id);
return ret;
}
bool JFJochHDF5Reader::LoadImage_i(std::shared_ptr<JFJochReaderDataset> &dataset,
DataMessage &message,
std::vector<uint8_t> &buffer,
@@ -512,22 +544,7 @@ bool JFJochHDF5Reader::LoadImage_i(std::shared_ptr<JFJochReaderDataset> &dataset
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Cannot load image if file not loaded");
if (image_number >= number_of_images)
throw JFJochException(JFJochExceptionCategory::HDF5, "Image out of bounds");
std::unique_ptr<HDF5ReadOnlyFile> tmp_data_file;
uint32_t image_id;
HDF5Object *source_file;
if (format == FileWriterFormat::NXmxLegacy) {
uint32_t file_id = image_number / images_per_file;
image_id = image_number % images_per_file;
tmp_data_file = std::make_unique<HDF5ReadOnlyFile>(legacy_format_files.at(file_id));
source_file = tmp_data_file.get();
} else {
image_id = image_number;
source_file = master_file.get();
}
auto [source_file, image_id] = GetImageLocation(image_number);
message.image = LoadImageDataset(buffer, *source_file, image_id);
message.number = image_number;