Merge: Add partiality limit
This commit is contained in:
@@ -97,4 +97,6 @@ std::optional<double> ScalingSettings::GetRotationWedgeForScaling() const {
|
||||
return wedge_for_scaling;
|
||||
}
|
||||
|
||||
|
||||
double ScalingSettings::GetMinPartiality() const {
|
||||
return min_partiality;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user