Files
Jungfraujoch/image_analysis/rotation_indexer/RotationIndexerCounter.cpp
T
leonarski_f 6c8b2d4ddd
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 9m23s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 10m48s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 10m51s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 11m16s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 11m27s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 12m48s
Build Packages / build:rpm (rocky8) (push) Successful in 9m50s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 9m0s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 10m41s
Build Packages / XDS test (durin plugin) (push) Successful in 8m40s
Build Packages / Generate python client (push) Successful in 13s
Build Packages / Create release (push) Skipped
Build Packages / Build documentation (push) Successful in 37s
Build Packages / build:rpm (rocky9) (push) Successful in 11m31s
Build Packages / DIALS test (push) Successful in 11m27s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 6m9s
Build Packages / XDS test (neggia plugin) (push) Successful in 5m18s
Build Packages / Unit tests (push) Failing after 56m14s
jfjoch_process: Enable two-pass algorithm
2026-05-29 17:22:53 +02:00

46 lines
1.7 KiB
C++

// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
// SPDX-License-Identifier: GPL-3.0-only
#include "RotationIndexerCounter.h"
RotationIndexerCounter::RotationIndexerCounter(const DiffractionExperiment &x) {
const auto axis = x.GetGoniometer();
if (x.IsRotationIndexing() && axis.has_value()) {
float angle_norm_deg = std::fabs(axis->GetIncrement_deg());
if (angle_norm_deg >= 1e-6) {
if (x.GetImageNum() < min_images_for_indexing) {
// For short measurements - no trying to index during the measurement
image_to_try_indexing = x.GetImageNum();
image_stride = 1;
} else {
image_to_try_indexing = std::max<int64_t>(min_images_for_indexing,
x.GetIndexingSettings().
GetRotationIndexingMinAngularRange_deg() / angle_norm_deg);
image_stride = std::ceil(
x.GetIndexingSettings().GetRotationIndexingAngularStride_deg() / angle_norm_deg);
if (image_stride == 0)
image_stride = 1;
}
}
}
}
std::pair<bool, bool> RotationIndexerCounter::Process(int64_t image) {
std::unique_lock ul(m);
std::pair<bool, bool> ret = {false, false};
if (image_stride == 0)
return ret;
accumulated_images++;
ret.first = (image_stride == 1) || (image % image_stride == 0);
if (accumulated_images >= image_to_try_indexing) {
image_to_try_indexing += 10;
ret.second = true;
}
return ret;
}