diff --git a/image_analysis/WriteReflections.cpp b/image_analysis/WriteReflections.cpp index 15348a57..c2e10d7d 100644 --- a/image_analysis/WriteReflections.cpp +++ b/image_analysis/WriteReflections.cpp @@ -119,8 +119,11 @@ void WriteMmcifReflections(const std::vector &reflections, // ---------- merging statistics (_reflns overall + _reflns_shell loop) ---------- // cc_half and r_meas are stored as fractions (0-1), which is the mmCIF convention. ISa (the - // Diederichs asymptotic I/sigma, 1/b of the a*sigma^2 + (b*I)^2 error model) has no standard CIF - // item, so it is written as a free-text pdbx value. + // Diederichs asymptotic I/sigma, 1/b of the a*sigma^2 + (b*I)^2 error model) and the twinning + // indicators below have no standard mmCIF item. They are written under the "jfjoch" reserved + // prefix (_reflns.jfjoch_*), the IUCr-sanctioned local-data-name extension for private items - + // NOT the "pdbx_" prefix, which is owned by the wwPDB PDBx/mmCIF dictionary and must not label + // items that dictionary does not define. (The other pdbx_ items here are genuine PDBx items.) const auto mult = [](const MergeStatisticsShell &s) { return s.unique_reflections > 0 ? static_cast(s.total_observations) / s.unique_reflections : 0.0; }; const auto compl_pct = [](const MergeStatisticsShell &s) { @@ -137,16 +140,16 @@ void WriteMmcifReflections(const std::vector &reflections, out << "_reflns.pdbx_netI_over_sigmaI " << Fmt(ov.mean_i_over_sigma, 2) << "\n"; out << "_reflns.pdbx_Rrim_I_all " << Fmt(ov.r_meas, 4) << "\n"; out << "_reflns.pdbx_CC_half " << Fmt(ov.cc_half, 4) << "\n"; - out << "_reflns.pdbx_diffrn_ISa " << CifStr(isa) << " # asymptotic I/sigma (Diederichs)\n"; - // Twinning indicators (no standard CIF item, written as free-text pdbx values like ISa above). + out << "_reflns.jfjoch_diffrn_ISa " << CifStr(isa) << " # asymptotic I/sigma (Diederichs)\n"; + // Twinning indicators (no standard mmCIF item; same jfjoch local prefix as ISa above). if (twinning.l_test_pairs > 0) { - out << "_reflns.pdbx_L_test_mean_abs_L " << Fmt(twinning.mean_abs_l, 3) + out << "_reflns.jfjoch_L_test_mean_abs_L " << Fmt(twinning.mean_abs_l, 3) << " # Padilla-Yeates <|L|> (untwinned 0.500, perfect twin 0.375)\n"; - out << "_reflns.pdbx_L_test_mean_L_squared " << Fmt(twinning.mean_l_squared, 3) + out << "_reflns.jfjoch_L_test_mean_L_squared " << Fmt(twinning.mean_l_squared, 3) << " # (untwinned 0.333, perfect twin 0.200)\n"; } if (twinning.moment_reflections > 0) - out << "_reflns.pdbx_second_moment_I " << Fmt(twinning.second_moment, 3) + out << "_reflns.jfjoch_second_moment_I " << Fmt(twinning.second_moment, 3) << " # /^2 (untwinned 2.00, perfect twin 1.50)\n"; out << "#\n";