Merge: Use random number generator with fixed seed to assign half-datasets. Also make it per image, not per reflection
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 13m40s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 15m13s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 15m37s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 16m6s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 16m3s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 16m52s
Build Packages / build:rpm (rocky8) (push) Successful in 10m24s
Build Packages / XDS test (durin plugin) (push) Successful in 10m4s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 12m40s
Build Packages / build:rpm (rocky9) (push) Successful in 13m33s
Build Packages / Generate python client (push) Successful in 31s
Build Packages / Create release (push) Skipped
Build Packages / build:rpm (ubuntu2404) (push) Successful in 12m49s
Build Packages / Build documentation (push) Successful in 48s
Build Packages / DIALS test (push) Successful in 15m15s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 7m19s
Build Packages / XDS test (neggia plugin) (push) Successful in 5m32s
Build Packages / Unit tests (push) Failing after 58m36s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 13m40s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 15m13s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 15m37s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 16m6s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 16m3s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 16m52s
Build Packages / build:rpm (rocky8) (push) Successful in 10m24s
Build Packages / XDS test (durin plugin) (push) Successful in 10m4s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 12m40s
Build Packages / build:rpm (rocky9) (push) Successful in 13m33s
Build Packages / Generate python client (push) Successful in 31s
Build Packages / Create release (push) Skipped
Build Packages / build:rpm (ubuntu2404) (push) Successful in 12m49s
Build Packages / Build documentation (push) Successful in 48s
Build Packages / DIALS test (push) Successful in 15m15s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 7m19s
Build Packages / XDS test (neggia plugin) (push) Successful in 5m32s
Build Packages / Unit tests (push) Failing after 58m36s
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
#include <random>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "../../common/ResolutionShells.h"
|
||||
@@ -25,7 +26,13 @@ std::vector<uint8_t> CalcMergeMask(const DiffractionExperiment &x,
|
||||
std::vector<MergedReflection> MergeAll(const DiffractionExperiment &x,
|
||||
const std::vector<std::vector<Reflection> > &reflections,
|
||||
const std::vector<uint8_t> &merge_mask) {
|
||||
if (!merge_mask.empty() && merge_mask.size() < reflections.size())
|
||||
|
||||
// To select images for half-datasets to calculate CC1/2, I use a random number generator with a fixed seed.
|
||||
// This makes sure that images are selected randomly, but in a fully reproducible manner (at least for the same binary)
|
||||
std::mt19937 rng(123456789u);
|
||||
std::bernoulli_distribution half_dist(0.5);
|
||||
|
||||
if (!merge_mask.empty() && merge_mask.size() != reflections.size())
|
||||
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Merge mask size mismatch");
|
||||
|
||||
auto scaling_settings = x.GetScalingSettings();
|
||||
@@ -48,8 +55,11 @@ std::vector<MergedReflection> MergeAll(const DiffractionExperiment &x,
|
||||
std::unordered_map<uint64_t, Accum> acc;
|
||||
|
||||
for (int i = 0; i < reflections.size(); ++i) {
|
||||
const int half = half_dist(rng);
|
||||
if (!merge_mask.empty() && merge_mask[i] == 0)
|
||||
continue;
|
||||
if (reflections[i].empty())
|
||||
continue;
|
||||
for (const auto &r: reflections[i]) {
|
||||
if (r.image_scale_corr <= 0.0 || !std::isfinite(r.image_scale_corr))
|
||||
continue;
|
||||
@@ -80,7 +90,6 @@ std::vector<MergedReflection> MergeAll(const DiffractionExperiment &x,
|
||||
it->second.sum_wI += wI;
|
||||
it->second.sum_w += w;
|
||||
|
||||
const int half = ((it->second.n_half[0] + it->second.n_half[1]) % 2 == 0) ? 0 : 1;
|
||||
it->second.sum_wI_half[half] += wI;
|
||||
it->second.sum_w_half[half] += w;
|
||||
it->second.n_half[half]++;
|
||||
@@ -125,7 +134,7 @@ MergeStatistics MergeStats(const DiffractionExperiment &x,
|
||||
const std::vector<std::vector<Reflection> > &reflections,
|
||||
const std::vector<uint8_t> &merge_mask) {
|
||||
|
||||
if (!merge_mask.empty() && merge_mask.size() < reflections.size())
|
||||
if (!merge_mask.empty() && merge_mask.size() != reflections.size())
|
||||
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Merge mask size mismatch");
|
||||
|
||||
constexpr int n_shells = 10;
|
||||
|
||||
Reference in New Issue
Block a user