Rugnux report: low warning thresholds, worded as prompts to check; ice apart from powder
Build Packages / Create release (push) Successful in 15s
Build Packages / build:rugnux:aarch64 (cross) (push) Successful in 7m56s
Build Packages / build:rugnux-tgz (x86_64) (push) Successful in 8m39s
Build Packages / build:viewer-tgz:cpu (push) Successful in 10m23s
Build Packages / build:viewer-tgz:cuda (push) Successful in 12m48s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 15m22s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 16m11s
Build Packages / build:windows:nocuda (push) Successful in 18m24s
Build Packages / build:windows:cuda (push) Successful in 20m42s
Build Packages / HDF5 consumer tests (DIALS, XDS) (push) Successful in 24m38s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 19m11s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 19m24s
Build Packages / Generate python client (push) Successful in 45s
Build Packages / build:rugnux:windows (push) Successful in 11m0s
Build Packages / Build documentation (push) Successful in 1m22s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 20m36s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 19m52s
Build Packages / build:rpm (rocky8) (push) Successful in 18m15s
Build Packages / build:rpm (rocky9) (push) Successful in 18m10s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 14m2s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 12m29s
Build Packages / Unit tests (push) Successful in 1h14m50s
Build Packages / Create release (push) Successful in 15s
Build Packages / build:rugnux:aarch64 (cross) (push) Successful in 7m56s
Build Packages / build:rugnux-tgz (x86_64) (push) Successful in 8m39s
Build Packages / build:viewer-tgz:cpu (push) Successful in 10m23s
Build Packages / build:viewer-tgz:cuda (push) Successful in 12m48s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 15m22s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 16m11s
Build Packages / build:windows:nocuda (push) Successful in 18m24s
Build Packages / build:windows:cuda (push) Successful in 20m42s
Build Packages / HDF5 consumer tests (DIALS, XDS) (push) Successful in 24m38s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 19m11s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 19m24s
Build Packages / Generate python client (push) Successful in 45s
Build Packages / build:rugnux:windows (push) Successful in 11m0s
Build Packages / Build documentation (push) Successful in 1m22s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 20m36s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 19m52s
Build Packages / build:rpm (rocky8) (push) Successful in 18m15s
Build Packages / build:rpm (rocky9) (push) Successful in 18m10s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 14m2s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 12m29s
Build Packages / Unit tests (push) Successful in 1h14m50s
Owner decision: a warning is a prompt to check and must catch the real cases (9min) at the cost of some spurious ones. The physically motivated corrections stay (<|L|> outside its physical range is not twinning; a single sweep's indexing choice; NO_LATTICE on rotation; the no-crystal report); thresholds raised only to cut noise come back down: - SUPERCELL_POSSIBLE warns wherever the class measures and rocks (as before rc173's audit fix), worded as "check the cell", naming weak ordered intensity of a correct cell and spots of further lattice domains as the other readings. 9min (rock 4.2%) warns again. - LATTICE_TRANSLATION warns on every admitted vector (>=75% of the origin); below 90% the wording names a very strong pseudo-translation as the other reading. - PSEUDO_TRANSLATION warns on every detection; below a 20% peak it is worded as weak, check. - SWEEP_GAPS warns where the degraded ranges cover at least 1% of the sweep (the 4 sets of 77 below that had 1-2 frames, 0.4-0.6% of the sweep). - Powder rings are split between hexagonal-ice positions and the rest (MeasurePowderRings, report-only fields); ICE_RINGS and POWDER_RINGS warn separately from 5% of the spots, and ICE_RINGS also where the merge's ice gate found ice. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D1G8gJVAy6gp1K5Dz3NE5C
This commit is contained in:
+31
-22
@@ -824,23 +824,22 @@ TEST_CASE("ResultReport_TranslationalNCS", "[Diagnostics]") {
|
||||
CHECK(lat.find("\nPATHOLOGY_FLAGS= LATTICE_TRANSLATION\n") != std::string::npos);
|
||||
CHECK(lat.find("\nTNCS_SUBLATTICE=") == std::string::npos);
|
||||
|
||||
// Admitted at 75% but short of a lattice translation's height: the claim is a very strong
|
||||
// pseudo-translation, which is what molecular replacement has to be told.
|
||||
// Admitted at 75% but short of a lattice translation's height: still a prompt to check, and the
|
||||
// wording names the very strong pseudo-translation as the other reading.
|
||||
result.tncs.undeclared_lattice_translation_pct = {80.0};
|
||||
const auto strong = RenderResultReport("prefix", "in.h5", x, result);
|
||||
CHECK(strong.find("\nPATHOLOGY_FLAGS= PSEUDO_TRANSLATION\n") != std::string::npos);
|
||||
CHECK(strong.find("VERY STRONG, nearly a lattice translation") != std::string::npos);
|
||||
CHECK(strong.find("invariant under the translation") == std::string::npos);
|
||||
CHECK(strong.find("\nPATHOLOGY_FLAGS= LATTICE_TRANSLATION\n") != std::string::npos);
|
||||
CHECK(strong.find("or a very strong pseudo-translation") != std::string::npos);
|
||||
|
||||
// Significant, but a peak this weak is not one molecular replacement needs declared.
|
||||
// Significant but weak: warned about, and worded as a check.
|
||||
result.tncs.undeclared_lattice_translations.clear();
|
||||
result.tncs.undeclared_lattice_translation_pct.clear();
|
||||
result.tncs.detected = true;
|
||||
result.tncs.peak_percent = 8.1;
|
||||
const auto weak = RenderResultReport("prefix", "in.h5", x, result);
|
||||
CHECK(weak.find("\nTNCS_DETECTED= TRUE\n") != std::string::npos);
|
||||
CHECK(weak.find("PSEUDO_TRANSLATION") == std::string::npos);
|
||||
CHECK(weak.find("weak - below the 20% that matters for molecular replacement") != std::string::npos);
|
||||
CHECK(weak.find("\nPATHOLOGY_FLAGS= PSEUDO_TRANSLATION\n") != std::string::npos);
|
||||
CHECK(weak.find("significant but weak; check whether molecular replacement needs it declared") != std::string::npos);
|
||||
}
|
||||
|
||||
TEST_CASE("ResultReport_GeometryNotConverged", "[Diagnostics]") {
|
||||
@@ -982,7 +981,7 @@ TEST_CASE("ResultReport_Mosaicity", "[Diagnostics]") {
|
||||
CHECK(text.find("Mosaicity 0.091 deg") != std::string::npos);
|
||||
}
|
||||
|
||||
TEST_CASE("ResultReport_SupercellDemoted", "[Diagnostics]") {
|
||||
TEST_CASE("ResultReport_SupercellCheck", "[Diagnostics]") {
|
||||
DiffractionExperiment x(DetJF(1));
|
||||
ProcessResult result;
|
||||
result.consensus_cell = UnitCell{.a = 50.0f, .b = 60.0f, .c = 70.0f,
|
||||
@@ -997,11 +996,12 @@ TEST_CASE("ResultReport_SupercellDemoted", "[Diagnostics]") {
|
||||
sc.doubled_cell = UnitCell{.a = 50.0f, .b = 60.0f, .c = 140.0f, .alpha = 90.0f, .beta = 90.0f, .gamma = 90.0f};
|
||||
result.supercell = sc;
|
||||
|
||||
// Possible, as correct sub-cells also read: stated, not warned about.
|
||||
// A weak rocking part, as a real doubled cell can show: a prompt to check, worded as one.
|
||||
auto text = RenderResultReport("p", "in.h5", x, result);
|
||||
CHECK(text.find("\nSUPERCELL_POSSIBLE= TRUE\n") != std::string::npos);
|
||||
CHECK(text.find("\nPATHOLOGY_FLAGS= NONE\n") != std::string::npos);
|
||||
CHECK(text.find("weak Bragg-like intensity in class 0 0 1") != std::string::npos);
|
||||
CHECK(text.find("\nPATHOLOGY_FLAGS= SUPERCELL_POSSIBLE\n") != std::string::npos);
|
||||
CHECK(text.find("POSSIBLE, check - class 0 0 1") != std::string::npos);
|
||||
CHECK(text.find("WARNING: Check the cell") != std::string::npos);
|
||||
CHECK(text.find("may put spots there") == std::string::npos);
|
||||
|
||||
// Further domains of the crystal can put spots on the half-integer nodes, and the line says so.
|
||||
@@ -1013,12 +1013,13 @@ TEST_CASE("ResultReport_SupercellDemoted", "[Diagnostics]") {
|
||||
result.leftover_lattices = census;
|
||||
text = RenderResultReport("p", "in.h5", x, result);
|
||||
CHECK(text.find("the further lattice domains found may put spots there") != std::string::npos);
|
||||
CHECK(text.find("spots of the further lattice domains found landing on those positions") != std::string::npos);
|
||||
|
||||
// A rocking part no correct sub-cell reached is a condition.
|
||||
result.supercell->rock_pct = 29.0;
|
||||
// Not measured to rock: no indication.
|
||||
result.supercell->rock_pct = 1.0;
|
||||
text = RenderResultReport("p", "in.h5", x, result);
|
||||
CHECK(text.find("\nPATHOLOGY_FLAGS= SUPERCELL_POSSIBLE\n") != std::string::npos);
|
||||
CHECK(text.find("POSSIBLE - class 0 0 1 rocks like Bragg reflections (29.0%)") != std::string::npos);
|
||||
CHECK(text.find("Supercell no indication") != std::string::npos);
|
||||
CHECK(text.find("\nPATHOLOGY_FLAGS= NONE\n") != std::string::npos);
|
||||
}
|
||||
|
||||
TEST_CASE("ResultReport_TwinningOutsidePhysicalRange", "[Diagnostics]") {
|
||||
@@ -1099,23 +1100,31 @@ TEST_CASE("ResultReport_PowderAndIce", "[Diagnostics]") {
|
||||
CHECK(text.find("ICE_RINGS_DETECTED") == std::string::npos);
|
||||
|
||||
result.powder.rings_q_recipA = {1.61f, 1.71f, 1.82f};
|
||||
result.powder.spot_fraction = 0.20f;
|
||||
result.powder.spot_fraction = 0.04f;
|
||||
result.powder.ice_ring_count = 2;
|
||||
result.powder.ice_spot_fraction = 0.03f;
|
||||
result.powder.non_ice_spot_fraction = 0.01f;
|
||||
result.ice_ring_score = 2.69f;
|
||||
result.ice_spot_ratio = 1.08f;
|
||||
result.ice_rings_detected = true;
|
||||
result.ice_flagged_fraction = 0.257;
|
||||
text = RenderResultReport("p", "in.h5", x, result);
|
||||
CHECK(text.find("Powder 3 rings holding 20% of the spots found") != std::string::npos);
|
||||
CHECK(text.find("Powder 3 rings holding 4% of the spots found - 2 ice (3%), 1 other (1%)") != std::string::npos);
|
||||
CHECK(text.find("\nICE_RINGS_DETECTED= TRUE\n") != std::string::npos);
|
||||
CHECK(text.find("\nICE_REFLECTIONS_ON_RINGS_PCT= 25.7\n") != std::string::npos);
|
||||
CHECK(text.find("Ice rings DETECTED: the 25.7% of the reflections") != std::string::npos);
|
||||
CHECK(text.find("POWDER_RINGS ") == std::string::npos);
|
||||
CHECK(text.find("\nPATHOLOGY_FLAGS= NONE\n") != std::string::npos);
|
||||
// The merge found ice: a prompt to check the ice shells, and not a powder warning.
|
||||
CHECK(text.find("\nPATHOLOGY_FLAGS= ICE_RINGS\n") != std::string::npos);
|
||||
|
||||
// Most of the spots on rings is a condition.
|
||||
result.powder.spot_fraction = 0.74f;
|
||||
// Rings that are not ice are a separate prompt, in their own words.
|
||||
result.ice_rings_detected = false;
|
||||
result.powder.non_ice_spot_fraction = 0.20f;
|
||||
text = RenderResultReport("p", "in.h5", x, result);
|
||||
CHECK(text.find("\nPATHOLOGY_FLAGS= POWDER_RINGS\n") != std::string::npos);
|
||||
CHECK(text.find("Powder rings that are not ice: 1 rings hold 20%") != std::string::npos);
|
||||
result.powder.ice_spot_fraction = 0.30f;
|
||||
text = RenderResultReport("p", "in.h5", x, result);
|
||||
CHECK(text.find("\nPATHOLOGY_FLAGS= ICE_RINGS POWDER_RINGS\n") != std::string::npos);
|
||||
}
|
||||
|
||||
TEST_CASE("ResultReport_SweepGapsMaterial", "[Diagnostics]") {
|
||||
|
||||
Reference in New Issue
Block a user