JFJOchReader: Add ReadAllSpots option to handle reading just spot finding result

This commit is contained in:
2026-06-02 09:39:26 +02:00
parent 55b65381db
commit 527d239d53
9 changed files with 155 additions and 2 deletions
+27
View File
@@ -98,3 +98,30 @@ void JFJochReader::UpdateUserMask(const std::vector<uint32_t> &mask) {
new_dataset->pixel_mask.LoadUserMask(dataset->experiment, mask);
dataset = new_dataset;
}
std::shared_ptr<JFJochReaderSpots> JFJochReader::ReadAllSpots(int64_t start_image, int64_t end_image,
int64_t stride) const {
if (start_image < 0)
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Start image must be non-negative");
if (start_image > end_image)
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Start image number is greater than end image number");
if (stride == 0)
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Stride cannot be zero");
size_t nelems = (end_image - start_image) / stride + 1;
auto ret = std::make_shared<JFJochReaderSpots>();
ret->start_image = static_cast<int64_t>(start_image);
ret->stride = static_cast<int64_t>(stride);
ret->spots.reserve(nelems);
for (int i = 0; i < nelems; i++)
ret->spots.emplace_back(ReadSpots(start_image + i * stride));
return ret;
}