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
46 lines
1.7 KiB
C++
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;
|
|
}
|