Merge: Add partiality limit

This commit is contained in:
2026-05-13 14:36:41 +02:00
parent 6aa6890a8b
commit e70d71912b
4 changed files with 15 additions and 4 deletions
+3 -1
View File
@@ -97,4 +97,6 @@ std::optional<double> ScalingSettings::GetRotationWedgeForScaling() const {
return wedge_for_scaling;
}
double ScalingSettings::GetMinPartiality() const {
return min_partiality;
}
+3
View File
@@ -20,6 +20,7 @@ class ScalingSettings {
bool merge_friedel = true;
std::optional<double> high_resolution_limit_A;
std::optional<double> wedge_for_scaling;
constexpr static double min_partiality = 0.02;
public:
ScalingSettings& SetPartialityModel(PartialityModel mode);
ScalingSettings& RefineB(bool input);
@@ -46,4 +47,6 @@ public:
[[nodiscard]] std::optional<PartialityModel> GetPartialityModel() const;
[[nodiscard]] std::optional<double> GetHighResolutionLimit_A() const;
[[nodiscard]] double GetMinPartiality() const;
};
+6
View File
@@ -15,6 +15,7 @@ std::vector<MergedReflection> MergeAll(const DiffractionExperiment &x, const std
auto scaling_settings = x.GetScalingSettings();
HKLKeyGenerator key_generator(scaling_settings.GetMergeFriedel(), x.GetSpaceGroupNumber().value_or(1));
const std::optional<double> high_resolution_limit = scaling_settings.GetHighResolutionLimit_A();
auto min_partiality = scaling_settings.GetMinPartiality();
struct Accum {
// Keep anomalous + / - together, but separate
@@ -37,6 +38,8 @@ std::vector<MergedReflection> MergeAll(const DiffractionExperiment &x, const std
continue;
if (!AcceptReflection(r, high_resolution_limit))
continue;
if (r.partiality < min_partiality)
continue;
const float I_corr = r.I * r.scaling_correction;
const float sigma_corr = r.sigma * r.scaling_correction;
@@ -106,6 +109,7 @@ MergeStatistics MergeStats(const DiffractionExperiment &x,
float d_min = std::numeric_limits<float>::max();
float d_max = 0.0f;
auto min_partiality = x.GetScalingSettings().GetMinPartiality();
auto d_min_limit_A = x.GetScalingSettings().GetHighResolutionLimit_A();
for (const auto &m: merged) {
if (!std::isfinite(m.d) || m.d <= 0.0f)
@@ -159,6 +163,8 @@ MergeStatistics MergeStats(const DiffractionExperiment &x,
if (!AcceptReflection(r, d_min_limit_A))
continue;
if (r.partiality < min_partiality)
continue;;
const auto shell = shells.GetShell(r.d);
if (!shell.has_value())
+3 -3
View File
@@ -33,8 +33,8 @@ struct MergeResult {
};
std::vector<MergedReflection> MergeAll(const DiffractionExperiment &x,
const std::vector<std::vector<Reflection> > &reflections);
const std::vector<std::vector<Reflection> > &reflections);
MergeStatistics MergeStats(const DiffractionExperiment &x,
const std::vector<MergedReflection> &merged,
const std::vector<std::vector<Reflection> > &reflections);
const std::vector<MergedReflection> &merged,
const std::vector<std::vector<Reflection> > &reflections);