28 #include "cif++/pdb/pdb2cif_remark_3.hpp" 43 std::initializer_list<const char *>
items;
51 { R
"(DATA USED IN REFINEMENT\.)", 1 }, 52 { R
"(RESOLUTION RANGE HIGH \(ANGSTROMS\) :\s+(.+?))", 1, "refine", {
"ls_d_res_high" } },
53 { R
"(RESOLUTION RANGE LOW \(ANGSTROMS\) :\s+(.+?))", 1, "refine", {
"ls_d_res_low" } },
54 { R
"(DATA CUTOFF \(SIGMA\(F\)\) :\s+(.+?))", 1, "refine", {
"pdbx_ls_sigma_F" } },
55 { R
"(COMPLETENESS FOR RANGE \(%\) :\s+(.+?))", 1, "refine", {
"ls_percent_reflns_obs" } },
56 { R
"(NUMBER OF REFLECTIONS :\s+(.+?))", 1, "refine", {
"ls_number_reflns_obs" } },
57 { R
"(FIT TO DATA USED IN REFINEMENT\.)", 1 }, 58 { R
"(CROSS-VALIDATION METHOD :\s+(.+?))", 1, "refine", {
"pdbx_ls_cross_valid_method" } },
59 { R
"(FREE R VALUE TEST SET SELECTION :\s+(.+?))", 1, "refine", {
"pdbx_R_Free_selection_details" } },
60 { R
"(R VALUE \(WORKING ?\+ ?TEST SET\) :\s+(.+?))", 1, "refine", {
"ls_R_factor_obs" } },
61 { R
"(R VALUE \(WORKING SET\) :\s+(.+?))", 1, "refine", {
"ls_R_factor_R_work" } },
62 { R
"(FREE R VALUE :\s+(.+?))", 1, "refine", {
"ls_R_factor_R_free" } },
63 { R
"(FREE R VALUE TEST SET SIZE \(%\) :\s+(.+?))", 1, "refine", {
"ls_percent_reflns_R_free" } },
64 { R
"(FREE R VALUE TEST SET COUNT :\s+(.+?))", 1, "refine", {
"ls_number_reflns_R_free" } },
65 { R
"(ESTIMATED ERROR OF FREE R VALUE :\s+(.+?))", 1, "refine", {
"ls_R_factor_R_free_error" } },
66 { R
"(FIT IN THE HIGHEST RESOLUTION BIN\.)", 1 }, 67 { R
"(TOTAL NUMBER OF BINS USED :\s+(.+?))", 1, "refine_ls_shell", {
"pdbx_total_number_of_bins_used" } },
68 { R
"(BIN RESOLUTION RANGE HIGH \(A(?:NGSTROMS)?\) :\s+(.+?))", 1, "refine_ls_shell", {
"d_res_high" } },
69 { R
"(BIN RESOLUTION RANGE LOW \(A(?:NGSTROMS)?\) :\s+(.+?))", 1, "refine_ls_shell", {
"d_res_low" } },
70 { R
"(BIN COMPLETENESS \(WORKING\+TEST\) \(%\) :\s+(.+?))", 1, "refine_ls_shell", {
"percent_reflns_obs" } },
71 { R
"(REFLECTIONS IN BIN \(WORKING ?\+ ?TEST(?: SET)?\) :\s+(.+?))", 1, "refine_ls_shell", {
"number_reflns_all" } },
72 { R
"(BIN R VALUE \(WORKING ?\+ ?TEST(?: SET)?\) :\s+(.+?))", 1, "refine_ls_shell", {
"R_factor_all" } },
73 { R
"(REFLECTIONS IN BIN \(WORKING SET\) :\s+(.+?))", 1, "refine_ls_shell", {
"number_reflns_R_work" } },
74 { R
"(BIN R VALUE \(WORKING SET\) :\s+(.+?))", 1, "refine_ls_shell", {
"R_factor_R_work" } },
75 { R
"(BIN FREE R VALUE :\s+(.+?))", 1, "refine_ls_shell", {
"R_factor_R_free" } },
76 { R
"(BIN FREE R VALUE TEST SET SIZE \(%\) :\s+(.+?))", 1, "refine_ls_shell", {
"percent_reflns_R_free" } },
77 { R
"(BIN FREE R VALUE TEST SET COUNT :\s+(.+?))", 1, "refine_ls_shell", {
"number_reflns_R_free" } },
78 { R
"(ESTIMATED ERROR OF BIN FREE R VALUE :\s+(.+?))", 1, "refine_ls_shell", {
"R_factor_R_free_error" } },
79 { R
"(NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT\.)", 1 }, 80 { R
"(PROTEIN ATOMS :\s+(.+?))", 1, "refine_hist", {
"pdbx_number_atoms_protein" } },
81 { R
"(NUCLEIC ACID ATOMS :\s+(.+?))", 1, "refine_hist", {
"pdbx_number_atoms_nucleic_acid" } },
82 { R
"(HETEROGEN ATOMS :\s+(.+?))", 1, "refine_hist", {
"pdbx_number_atoms_ligand" } },
83 { R
"(SOLVENT ATOMS :\s+(.+?))", 1, "refine_hist", {
"number_atoms_solvent" } },
84 { R
"(B VALUES\.)", 1 }, 85 { R
"(B VALUE TYPE :\s+(.+?))", 1, "refine", {
"pdbx_TLS_residual_ADP_flag" } },
86 { R
"(FROM WILSON PLOT \(A\*\*2\) :\s+(.+?))", 1, "reflns", {
"B_iso_Wilson_estimate" } },
87 { R
"(MEAN B VALUE \(OVERALL, A\*\*2\) :\s+(.+?))", 1, "refine", {
"B_iso_mean" } },
88 { R
"(OVERALL ANISOTROPIC B VALUE\.)", 1 }, 89 { R
"(B11 \(A\*\*2\) :\s+(.+?))", 1, "refine", {
"aniso_B[1][1]" } },
90 { R
"(B22 \(A\*\*2\) :\s+(.+?))", 1, "refine", {
"aniso_B[2][2]" } },
91 { R
"(B33 \(A\*\*2\) :\s+(.+?))", 1, "refine", {
"aniso_B[3][3]" } },
92 { R
"(B12 \(A\*\*2\) :\s+(.+?))", 1, "refine", {
"aniso_B[1][2]" } },
93 { R
"(B13 \(A\*\*2\) :\s+(.+?))", 1, "refine", {
"aniso_B[1][3]" } },
94 { R
"(B23 \(A\*\*2\) :\s+(.+?))", 1, "refine", {
"aniso_B[2][3]" } },
95 { R
"(ESTIMATED COORDINATE ERROR\.)", 1 }, 96 { R
"(ESD FROM LUZZATI PLOT \(A\) :\s+(.+?))", 1, "refine_analyze", {
"Luzzati_coordinate_error_obs" } },
97 { R
"(DPI \(BLOW EQ-10\) BASED ON R VALUE \(A\) :\s+(.+?))", 1, "refine", {
"pdbx_overall_SU_R_Blow_DPI" } },
98 { R
"(DPI \(BLOW EQ-9\) BASED ON FREE R VALUE \(A\) :\s+(.+?))", 1, "refine", {
"pdbx_overall_SU_R_free_Blow_DPI" } },
99 { R
"(DPI \(CRUICKSHANK\) BASED ON R VALUE \(A\) :\s+(.+?))", 1, "refine", {
"overall_SU_R_Cruickshank_DPI" } },
100 { R
"(DPI \(CRUICKSHANK\) BASED ON FREE R VALUE \(A\) :\s+(.+?))", 1, "refine", {
"pdbx_overall_SU_R_free_Cruickshank_DPI" } },
101 { R
"(REFERENCES: BLOW.+)", 1 }, 102 { R
"(CORRELATION COEFFICIENTS\.)", 1 }, 103 { R
"(CORRELATION COEFFICIENT FO-FC :\s+(.+?))", 1, "refine", {
"correlation_coeff_Fo_to_Fc" } },
104 { R
"(CORRELATION COEFFICIENT FO-FC FREE :\s+(.+?))", 1, "refine", {
"correlation_coeff_Fo_to_Fc_free" } },
105 { R
"(NUMBER OF GEOMETRIC FUNCTION TERMS DEFINED : 15)", 1 }, 106 { R
"(TERM COUNT WEIGHT FUNCTION\.)", 1 }, 107 { R
"(BOND LENGTHS :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_bond_d",
true },
108 { R
"(BOND ANGLES :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_angle_deg",
true },
109 { R
"(TORSION ANGLES :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_dihedral_angle_d",
true },
110 { R
"(TRIGONAL CARBON PLANES :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_trig_c_planes",
true },
111 { R
"(GENERAL PLANES :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_gen_planes",
true },
112 { R
"(ISOTROPIC THERMAL FACTORS :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_it",
true },
113 { R
"(BAD NON-BONDED CONTACTS :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_nbd",
true },
114 { R
"(IMPROPER TORSIONS :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_improper_torsion",
true },
115 { R
"(PSEUDOROTATION ANGLES :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_pseud_angle",
true },
116 { R
"(CHIRAL IMPROPER TORSION :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_chiral_improper_torsion",
true },
117 { R
"(SUM OF OCCUPANCIES :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_sum_occupancies",
true },
118 { R
"(UTILITY DISTANCES :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_utility_distance",
true },
119 { R
"(UTILITY ANGLES :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_utility_angle",
true },
120 { R
"(UTILITY TORSION :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_utility_torsion",
true },
121 { R
"(IDEAL-DIST CONTACT TERM :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"number",
"weight",
"pdbx_restraint_function" },
"t_ideal_dist_contact",
true },
122 { R
"(RMS DEVIATIONS FROM IDEAL VALUES\.)", 1 }, 123 { R
"(BOND LENGTHS \(A\) :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_bond_d",
false },
124 { R
"(BOND ANGLES \(DEGREES\) :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_angle_deg",
false },
125 { R
"(TORSION ANGLES \(DEGREES\) :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_dihedral_angle_d",
false },
126 { R
"(PSEUDO ROTATION ANGLES \(DEGREES\) :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_pseud_angle",
false },
127 { R
"(TRIGONAL CARBON PLANES \(A\) :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_trig_c_planes",
false },
128 { R
"(GENERAL PLANES \(A\) :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_gen_planes",
false },
129 { R
"(ISOTROPIC THERMAL FACTORS \(A\*\*2\) :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_it",
false },
130 { R
"(NON-BONDED CONTACTS \(A\) :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_nbd",
false },
131 { R
"(PEPTIDE OMEGA TORSION ANGLES \(DEGREES\) :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_omega_torsion",
false },
132 { R
"(OTHER TORSION ANGLES \(DEGREES\) :\s+(.+?);\s+(.+?);\s+(.+?))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_other_torsion",
false },
133 { R
"(TLS DETAILS\.?)", 1 }, 134 { R
"(NUMBER OF TLS GROUPS :.+)", 1 }, 135 { R
"(TLS GROUP :\s*(\d+))", 1, "pdbx_refine_tls", {
"id" },
nullptr,
true },
136 { R
"((?:SELECTION|SET) *:\s+(.+?))", 1, "pdbx_refine_tls_group", {
"selection_details" },
nullptr,
true },
137 { R
"(ORIGIN FOR THE GROUP \(A\):\s+(.+?)\s+(.+?)\s+(.+?))", 1, "pdbx_refine_tls", {
"origin_x",
"origin_y",
"origin_z" } },
138 { R
"(T TENSOR)", 1 }, 139 { R
"(T11:\s+(.+?) T22:\s+(.+?))", 1, "pdbx_refine_tls", {
"T[1][1]",
"T[2][2]" } },
140 { R
"(T33:\s+(.+?) T12:\s+(.+?))", 1, "pdbx_refine_tls", {
"T[3][3]",
"T[1][2]" } },
141 { R
"(T13:\s+(.+?) T23:\s+(.+?))", 1, "pdbx_refine_tls", {
"T[1][3]",
"T[2][3]" } },
142 { R
"(L TENSOR)", 1 }, 143 { R
"(L11:\s+(.+?) L22:\s+(.+?))", 1, "pdbx_refine_tls", {
"L[1][1]",
"L[2][2]" } },
144 { R
"(L33:\s+(.+?) L12:\s+(.+?))", 1, "pdbx_refine_tls", {
"L[3][3]",
"L[1][2]" } },
145 { R
"(L13:\s+(.+?) L23:\s+(.+?))", 1, "pdbx_refine_tls", {
"L[1][3]",
"L[2][3]" } },
146 { R
"(S TENSOR)", 1 }, 147 { R
"(S11:\s+(.+?) S12:\s+(.+?) S13:\s+(.+?))", 1, "pdbx_refine_tls", {
"S[1][1]",
"S[1][2]",
"S[1][3]" } },
148 { R
"(S21:\s+(.+?) S22:\s+(.+?) S23:\s+(.+?))", 1, "pdbx_refine_tls", {
"S[2][1]",
"S[2][2]",
"S[2][3]" } },
149 { R
"(S31:\s+(.+?) S32:\s+(.+?) S33:\s+(.+?))", 84 - 98, "pdbx_refine_tls", {
"S[3][1]",
"S[3][2]",
"S[3][3]" } },
156 : Remark3Parser(name, expMethod, r, db,
157 kBusterTNT_Template, sizeof(kBusterTNT_Template) / sizeof(
TemplateLine),
158 std::regex(R
"((BUSTER(?:-TNT)?)(?: (\d+(?:\..+)?))?)")) 164 { R
"(REFINEMENT TARGET\s*:\s*(.+))", 1, "refine", {
"pdbx_stereochemistry_target_values" } },
165 { R
"(DATA USED IN REFINEMENT\.)", 1 }, 166 { R
"(RESOLUTION RANGE HIGH \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_high" } },
167 { R
"(RESOLUTION RANGE LOW \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_low" } },
168 { R
"(DATA CUTOFF \(SIGMA\(F\)\)\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_sigma_F" } },
169 { R
"(DATA CUTOFF HIGH \(ABS\(F\)\)\s*:\s*(.+))", 1, "refine", {
"pdbx_data_cutoff_high_absF" } },
170 { R
"(DATA CUTOFF LOW \(ABS\(F\)\)\s*:\s*(.+))", 1, "refine", {
"pdbx_data_cutoff_low_absF" } },
171 { R
"(COMPLETENESS \(WORKING\+TEST\) \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_obs" } },
172 { R
"(NUMBER OF REFLECTIONS\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_obs" } },
173 { R
"(FIT TO DATA USED IN REFINEMENT\.)", 1 }, 174 { R
"(CROSS-VALIDATION METHOD\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_cross_valid_method" } },
175 { R
"(FREE R VALUE TEST SET SELECTION\s*:\s*(.+))", 1, "refine", {
"pdbx_R_Free_selection_details" } },
176 { R
"(R VALUE \(WORKING \+ TEST SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_obs" } },
177 { R
"(R VALUE \(WORKING SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_work" } },
178 { R
"(FREE R VALUE\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_free" } },
179 { R
"(FREE R VALUE TEST SET SIZE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_R_free" } },
180 { R
"(FREE R VALUE TEST SET COUNT\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_R_free" } },
181 { R
"(ESTIMATED ERROR OF FREE R VALUE\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_free_error" } },
182 { R
"(FIT/AGREEMENT OF MODEL WITH ALL DATA\.)", 1 }, 183 { R
"(R VALUE \(WORKING \+ TEST SET, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"R_factor_all_no_cutoff" } },
184 { R
"(R VALUE \(WORKING SET, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"R_factor_obs_no_cutoff" } },
185 { R
"(FREE R VALUE \(NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_factor_no_cutoff" } },
186 { R
"(FREE R VALUE TEST SET SIZE \(%, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_val_test_set_size_perc_no_cutoff" } },
187 { R
"(FREE R VALUE TEST SET COUNT \(NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_val_test_set_ct_no_cutoff" } },
188 { R
"(ESTIMATED ERROR OF FREE R VALUE \(NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_error_no_cutoff" } },
189 { R
"(TOTAL NUMBER OF REFLECTIONS \(NO CUTOFF\)\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_all" } },
190 { R
"(FIT IN THE HIGHEST RESOLUTION BIN\.)", 1 }, 191 { R
"(TOTAL NUMBER OF BINS USED\s*:\s*(.+))", 1, "refine_ls_shell", {
"pdbx_total_number_of_bins_used" } },
192 { R
"(BIN RESOLUTION RANGE HIGH \(A\)\s*:\s*(.+))", 1, "refine_ls_shell", {
"d_res_high" } },
193 { R
"(BIN RESOLUTION RANGE LOW \(A\)\s*:\s*(.+))", 1, "refine_ls_shell", {
"d_res_low" } },
194 { R
"(BIN COMPLETENESS \(WORKING\+TEST\) \(%\)\s*:\s*(.+))", 1, "refine_ls_shell", {
"percent_reflns_obs" } },
195 { R
"(REFLECTIONS IN BIN \(WORKING SET\)\s*:\s*(.+))", 1, "refine_ls_shell", {
"number_reflns_R_work" } },
196 { R
"(BIN R VALUE \(WORKING SET\)\s*:\s*(.+))", 1, "refine_ls_shell", {
"R_factor_R_work" } },
197 { R
"(BIN FREE R VALUE\s*:\s*(.+))", 1, "refine_ls_shell", {
"R_factor_R_free" } },
198 { R
"(BIN FREE R VALUE TEST SET SIZE \(%\)\s*:\s*(.+))", 1, "refine_ls_shell", {
"percent_reflns_R_free" } },
199 { R
"(BIN FREE R VALUE TEST SET COUNT\s*:\s*(.+))", 1, "refine_ls_shell", {
"number_reflns_R_free" } },
200 { R
"(ESTIMATED ERROR OF BIN FREE R VALUE\s*:\s*(.+))", 1, "refine_ls_shell", {
"R_factor_R_free_error" } },
201 { R
"(NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT\.)", 1 }, 202 { R
"(PROTEIN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_protein" } },
203 { R
"(NUCLEIC ACID ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_nucleic_acid" } },
204 { R
"(HETEROGEN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_ligand" } },
205 { R
"(SOLVENT ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"number_atoms_solvent" } },
206 { R
"(B VALUES\.)", 1 }, 207 { R
"(B VALUE TYPE\s*:\s*(.+))", 1, "refine", {
"pdbx_TLS_residual_ADP_flag" } },
208 { R
"(FROM WILSON PLOT \(A\*\*2\)\s*:\s*(.+))", 1, "reflns", {
"B_iso_Wilson_estimate" } },
209 { R
"(MEAN B VALUE \(OVERALL, A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"B_iso_mean" } },
210 { R
"(OVERALL ANISOTROPIC B VALUE\.)", 1 }, 211 { R
"(B11 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][1]" } },
212 { R
"(B22 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[2][2]" } },
213 { R
"(B33 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[3][3]" } },
214 { R
"(B12 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][2]" } },
215 { R
"(B13 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][3]" } },
216 { R
"(B23 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[2][3]" } },
217 { R
"(ESTIMATED COORDINATE ERROR\.)", 1 }, 218 { R
"(ESD FROM LUZZATI PLOT \(A\)\s*:\s*(.+))", 1, "refine_analyze", {
"Luzzati_coordinate_error_obs" } },
219 { R
"(ESD FROM SIGMAA \(A\)\s*:\s*(.+))", 1, "refine_analyze", {
"Luzzati_sigma_a_obs" } },
220 { R
"(LOW RESOLUTION CUTOFF \(A\)\s*:\s*(.+))", 1, "refine_analyze", {
"Luzzati_d_res_low_obs" } },
221 { R
"(CROSS-VALIDATED ESTIMATED COORDINATE ERROR\.)", 1 }, 222 { R
"(ESD FROM C-V LUZZATI PLOT \(A\)\s*:\s*(.+))", 1, "refine_analyze", {
"Luzzati_coordinate_error_free" } },
223 { R
"(ESD FROM C-V SIGMAA \(A\)\s*:\s*(.+))", 1, "refine_analyze", {
"Luzzati_sigma_a_free" } },
224 { R
"(RMS DEVIATIONS FROM IDEAL VALUES\.)", 1 }, 225 { R
"(BOND LENGTHS \(A\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"c_bond_d",
false },
226 { R
"(BOND ANGLES \(DEGREES\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"c_angle_deg",
false },
227 { R
"(DIHEDRAL ANGLES \(DEGREES\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"c_dihedral_angle_d",
false },
228 { R
"(IMPROPER ANGLES \(DEGREES\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"c_improper_angle_d",
false },
229 { R
"(ISOTROPIC THERMAL MODEL\s*:\s*(.+))", 1, "refine", {
"pdbx_isotropic_thermal_model" } },
230 { R
"(ISOTROPIC THERMAL FACTOR RESTRAINTS\. RMS SIGMA)", 1 }, 231 { R
"(MAIN-CHAIN BOND \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"c_mcbond_it",
false },
232 { R
"(MAIN-CHAIN ANGLE \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"c_mcangle_it",
false },
233 { R
"(SIDE-CHAIN BOND \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"c_scbond_it",
false },
234 { R
"(SIDE-CHAIN ANGLE \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"c_scangle_it",
false },
235 { R
"(BULK SOLVENT MODELING\.)", 1 }, 236 { R
"(METHOD USED\s*:\s*(.+))", 1, "refine", {
"solvent_model_details" } },
237 { R
"(KSOL\s*:\s*(.+))", 1, "refine", {
"solvent_model_param_ksol" } },
238 { R
"(BSOL\s*:\s*(.+))", 1, "refine", {
"solvent_model_param_bsol" } },
239 { R
"(NCS MODEL\s*:\s*(.+))", 1, },
240 { R
"(NCS RESTRAINTS\. RMS SIGMA/WEIGHT)", 1 }, 241 { R
"(GROUP (\d+) POSITIONAL \(A\)\s*:\s*(.+))", 1, },
242 { R
"(GROUP (\d+) B-FACTOR \(A\*\*2\)\s*:\s*(.+))", 1, },
243 { R
"(PARAMETER FILE (\d+) :\s+(.+))", 1, },
244 { R
"(TOPOLOGY FILE (\d+) :\s+(.+))", 1, },
250 CNS_Remark3Parser(
const std::string &name,
const std::string &expMethod, PDBRecord *r, cif::datablock &db)
251 : Remark3Parser(name, expMethod, r, db, kCNS_Template,
252 sizeof(kCNS_Template) / sizeof(
TemplateLine),
std::regex(R
"((CN[SX])(?: (\d+(?:\.\d+)?))?)")) 258 { R
"(REFINEMENT TARGET\s*:\s*(.+))", 1, "refine", {
"pdbx_stereochemistry_target_values" } },
259 { R
"(DATA USED IN REFINEMENT\.)", 1 }, 260 { R
"(RESOLUTION RANGE HIGH \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_high" } },
261 { R
"(RESOLUTION RANGE LOW \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_low" } },
262 { R
"(MIN\(FOBS/SIGMA_FOBS\)\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_sigma_F" } },
263 { R
"(COMPLETENESS FOR RANGE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_obs" } },
264 { R
"(NUMBER OF REFLECTIONS\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_obs" } },
265 { R
"(FIT TO DATA USED IN REFINEMENT\.)", 1 }, 266 { R
"(R VALUE \(WORKING \+ TEST SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_obs" } },
267 { R
"(R VALUE \(WORKING SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_work" } },
268 { R
"(FREE R VALUE\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_free" } },
269 { R
"(FREE R VALUE TEST SET SIZE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_R_free" } },
270 { R
"(FREE R VALUE TEST SET COUNT\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_R_free" } },
271 { R
"(FIT TO DATA USED IN REFINEMENT \(IN BINS\)\.)", 1 }, 272 { R
"(BIN RESOLUTION RANGE COMPL\. NWORK NFREE RWORK RFREE)", 1 }, 273 { R
"(\d+ (\d+(?:\.\d+)?) - (\d+(?:\.\d+)?) (\d+(?:\.\d+)?) (\d+) (\d+) (\d+(?:\.\d+)?) (\d+(?:\.\d+)?))", 0, "refine_ls_shell", {
"d_res_low",
"d_res_high",
"percent_reflns_obs",
"number_reflns_R_work",
"number_reflns_R_free",
"R_factor_R_work",
"R_factor_R_free" },
nullptr,
true },
274 { R
"(BULK SOLVENT MODELLING\.)", 1 }, 275 { R
"(METHOD USED\s*:\s*(.+))", 1, "refine", {
"solvent_model_details" } },
276 { R
"(SOLVENT RADIUS\s*:\s*(.+))", 1, "refine", {
"pdbx_solvent_vdw_probe_radii" } },
277 { R
"(SHRINKAGE RADIUS\s*:\s*(.+))", 1, "refine", {
"pdbx_solvent_shrinkage_radii" } },
278 { R
"(K_SOL\s*:\s*(.+))", 1, "refine", {
"solvent_model_param_ksol" } },
279 { R
"(B_SOL\s*:\s*(.+))", 1, "refine", {
"solvent_model_param_bsol" } },
280 { R
"(ERROR ESTIMATES\.)", 1 }, 281 { R
"(COORDINATE ERROR \(MAXIMUM-LIKELIHOOD BASED\)\s*:\s*(.+))", 1, "refine", {
"overall_SU_ML" } },
282 { R
"(PHASE ERROR \(DEGREES, MAXIMUM-LIKELIHOOD BASED\)\s*:\s*(.+))", 1, "refine", {
"pdbx_overall_phase_error" } },
283 { R
"(B VALUES\.)", 1 }, 284 { R
"(B VALUE TYPE\s*:\s*(.+))", 1, "refine", {
"pdbx_TLS_residual_ADP_flag" } },
285 { R
"(FROM WILSON PLOT \(A\*\*2\)\s*:\s*(.+))", 1, "reflns", {
"B_iso_Wilson_estimate" } },
286 { R
"(MEAN B VALUE \(OVERALL, A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"B_iso_mean" } },
287 { R
"(OVERALL ANISOTROPIC B VALUE\.)", 1 }, 288 { R
"(B11 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][1]" } },
289 { R
"(B22 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[2][2]" } },
290 { R
"(B33 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[3][3]" } },
291 { R
"(B12 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][2]" } },
292 { R
"(B13 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][3]" } },
293 { R
"(B23 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[2][3]" } },
294 { R
"(TWINNING INFORMATION\.)", 1 }, 295 { R
"(FRACTION:\s*(.+))", 1, "pdbx_reflns_twin", {
"fraction" } },
296 { R
"(OPERATOR:\s*(.+))", 1, "pdbx_reflns_twin", {
"operator" } },
297 { R
"(DEVIATIONS FROM IDEAL VALUES\.)", 1 }, 298 { R
"(RMSD COUNT)", 1 }, 299 { R
"(BOND\s*:\s*(\d+(?:\.\d+))\s+(\d+))", 1, "refine_ls_restr", {
"dev_ideal",
"number" },
"f_bond_d",
false },
300 { R
"(ANGLE\s*:\s*(\d+(?:\.\d+))\s+(\d+))", 1, "refine_ls_restr", {
"dev_ideal",
"number" },
"f_angle_d",
false },
301 { R
"(CHIRALITY\s*:\s*(\d+(?:\.\d+))\s+(\d+))", 1, "refine_ls_restr", {
"dev_ideal",
"number" },
"f_chiral_restr",
false },
302 { R
"(PLANARITY\s*:\s*(\d+(?:\.\d+))\s+(\d+))", 1, "refine_ls_restr", {
"dev_ideal",
"number" },
"f_plane_restr",
false },
303 { R
"(DIHEDRAL\s*:\s*(\d+(?:\.\d+))\s+(\d+))", 1, "refine_ls_restr", {
"dev_ideal",
"number" },
"f_dihedral_angle_d",
false },
304 { R
"(TLS DETAILS)", 1 }, 305 { R
"(NUMBER OF TLS GROUPS\s*:\s*(.+))", 1 }, 306 { R
"(TLS GROUP\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"id" },
nullptr,
true },
307 { R
"(SELECTION:\s*(.+))", 1, "pdbx_refine_tls_group", {
"selection_details" },
nullptr,
true },
308 { R
"(ORIGIN FOR THE GROUP(?:\s*\(A\))?\s*:\s*(\S+)\s+(\S+)\s+(\S+))", 1, "pdbx_refine_tls", {
"origin_x",
"origin_y",
"origin_z" } },
309 { R
"(T TENSOR)", 1 }, 310 { R
"(T11\s*:\s*(.+) T22\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"T[1][1]",
"T[2][2]" } },
311 { R
"(T33\s*:\s*(.+) T12\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"T[3][3]",
"T[1][2]" } },
312 { R
"(T13\s*:\s*(.+) T23\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"T[1][3]",
"T[2][3]" } },
313 { R
"(L TENSOR)", 1 }, 314 { R
"(L11\s*:\s*(.+) L22\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"L[1][1]",
"L[2][2]" } },
315 { R
"(L33\s*:\s*(.+) L12\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"L[3][3]",
"L[1][2]" } },
316 { R
"(L13\s*:\s*(.+) L23\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"L[1][3]",
"L[2][3]" } },
317 { R
"(S TENSOR)", 1 }, 318 { R
"(S11\s*:\s*(.+) S12\s*:\s*(.+) S13\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"S[1][1]",
"S[1][2]",
"S[1][3]" } },
319 { R
"(S21\s*:\s*(.+) S22\s*:\s*(.+) S23\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"S[2][1]",
"S[2][2]",
"S[2][3]" } },
320 { R
"(S31\s*:\s*(.+) S32\s*:\s*(.+) S33\s*:\s*(.+))", 48 - 62, "pdbx_refine_tls", {
"S[3][1]",
"S[3][2]",
"S[3][3]" } },
321 { R
"(ANOMALOUS SCATTERER GROUPS DETAILS\.)", 1 }, 322 { R
"(NUMBER OF ANOMALOUS SCATTERER GROUPS\s*:\s*\d+)", 1 }, 323 { R
"(ANOMALOUS SCATTERER GROUP\s*:\s*\d+)", 1 }, 324 { R
"(SELECTION: .+)", 1 }, 325 { R
"(fp\s*:\s*.+)", 1 }, 326 { R
"(fdp\s*:\s*.+)", 63 - 68 }, 327 { R
"(NCS DETAILS)", 1 }, 328 { R
"(NUMBER OF NCS GROUPS\s*:\s*(.+))", 1 }, 335 : Remark3Parser(name, expMethod, r, db, kPHENIX_Template, sizeof(kPHENIX_Template) / sizeof(
TemplateLine),
336 std::regex(R
"((PHENIX)(?: \(PHENIX\.REFINE:) (\d+(?:\.[^)]+)?)\)?)")) 340 virtual void fixup();
345 for (
auto r : mDb[
"refine_ls_shell"])
349 float val = r[
"percent_reflns_obs"].as<
float>();
350 int perc =
static_cast<int>(val * 100);
351 r[
"percent_reflns_obs"] = perc;
360 { R
"(DATA USED IN REFINEMENT\.)", 1 }, 361 { R
"(RESOLUTION RANGE HIGH \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_high" } },
362 { R
"(RESOLUTION RANGE LOW \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_low" } },
363 { R
"(DATA CUTOFF \(SIGMA\(F\)\)\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_sigma_F" } },
364 { R
"(COMPLETENESS FOR RANGE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_obs" } },
365 { R
"(NUMBER OF REFLECTIONS\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_obs" } },
366 { R
"(FIT TO DATA USED IN REFINEMENT\.)", 1 }, 367 { R
"(CROSS-VALIDATION METHOD\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_cross_valid_method" } },
368 { R
"(FREE R VALUE TEST SET SELECTION\s*:\s*(.+))", 1, "refine", {
"pdbx_R_Free_selection_details" } },
369 { R
"(R VALUE \(WORKING \+ TEST SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_obs" } },
370 { R
"(R VALUE \(WORKING SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_work" } },
371 { R
"(FREE R VALUE\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_free" } },
372 { R
"(FREE R VALUE TEST SET SIZE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_R_free" } },
373 { R
"(FREE R VALUE TEST SET COUNT\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_R_free" } },
374 { R
"(FIT/AGREEMENT OF MODEL WITH ALL DATA\.)", 1 }, 375 { R
"(R VALUE \(WORKING \+ TEST SET, NO CUTOFF\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_all" } },
376 { R
"(R VALUE \(WORKING SET, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"R_factor_obs_no_cutoff" } },
377 { R
"(FREE R VALUE \(NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_factor_no_cutoff" } },
378 { R
"(FREE R VALUE TEST SET SIZE \(%, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_val_test_set_size_perc_no_cutoff" } },
379 { R
"(FREE R VALUE TEST SET COUNT \(NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_val_test_set_ct_no_cutoff" } },
380 { R
"(TOTAL NUMBER OF REFLECTIONS \(NO CUTOFF\)\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_all" } },
381 { R
"(NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT\.)", 1 }, 382 { R
"(PROTEIN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_protein" } },
383 { R
"(NUCLEIC ACID ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_nucleic_acid" } },
384 { R
"(HETEROGEN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_ligand" } },
385 { R
"(SOLVENT ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"number_atoms_solvent" } },
386 { R
"(B VALUES\.)", 1 }, 387 { R
"(B VALUE TYPE\s*:\s*(.+))", 1, "refine", {
"pdbx_TLS_residual_ADP_flag" } },
388 { R
"(FROM WILSON PLOT \(A\*\*2\)\s*:\s*(.+))", 1, "reflns", {
"B_iso_Wilson_estimate" } },
389 { R
"(MEAN B VALUE \(OVERALL, A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"B_iso_mean" } },
390 { R
"(OVERALL ANISOTROPIC B VALUE\.)", 1 }, 391 { R
"(B11 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][1]" } },
392 { R
"(B22 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[2][2]" } },
393 { R
"(B33 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[3][3]" } },
394 { R
"(B12 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][2]" } },
395 { R
"(B13 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][3]" } },
396 { R
"(B23 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[2][3]" } },
397 { R
"(ESTIMATED COORDINATE ERROR\.)", 1 }, 398 { R
"(ESD FROM LUZZATI PLOT \(A\)\s*:\s*(.+))", 1, "refine_analyze", {
"Luzzati_coordinate_error_obs" } },
399 { R
"(ESD FROM SIGMAA \(A\)\s*:\s*(.+))", 1, "refine_analyze", {
"Luzzati_sigma_a_obs" } },
400 { R
"(LOW RESOLUTION CUTOFF \(A\)\s*:\s*(.+))", 1, "refine_analyze", {
"Luzzati_d_res_low_obs" } },
401 { R
"(RMS DEVIATIONS FROM IDEAL VALUES\.)", 1 }, 402 { R
"(DISTANCE RESTRAINTS\. RMS SIGMA)", 1 }, 403 { R
"(SUGAR-BASE BOND DISTANCE \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"n_sugar_bond_d",
false },
404 { R
"(SUGAR-BASE BOND ANGLE DISTANCE \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"n_sugar_bond_angle_d",
false },
405 { R
"(PHOSPHATE BONDS DISTANCE \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"n_phos_bond_d",
false },
406 { R
"(PHOSPHATE BOND ANGLE, H-BOND \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"n_phos_bond_angle_d",
false },
407 { R
"(PLANE RESTRAINT \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"n_plane_restr",
false },
408 { R
"(CHIRAL-CENTER RESTRAINT \(A\*\*3\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"n_chiral_restr",
false },
409 { R
"(NON-BONDED CONTACT RESTRAINTS\.)", 1 }, 410 { R
"(SINGLE TORSION \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"n_singtor_nbd",
false },
411 { R
"(MULTIPLE TORSION \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"n_multtor_nbd",
false },
412 { R
"(ISOTROPIC THERMAL FACTOR RESTRAINTS\. RMS SIGMA)", 1 }, 413 { R
"(SUGAR-BASE BONDS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"n_sugar_bond_it",
false },
414 { R
"(SUGAR-BASE ANGLES \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"n_sugar_angle_it",
false },
415 { R
"(PHOSPHATE BONDS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"n_phos_bond_it",
false },
416 { R
"(PHOSPHATE BOND ANGLE, H-BOND \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"n_phos_angle_it",
false },
423 : Remark3Parser(name, expMethod, r, db, kNUCLSQ_Template, sizeof(kNUCLSQ_Template) / sizeof(
TemplateLine),
424 std::regex(R
"((NUCLSQ)(?: (\d+(?:\.\d+)?))?)")) 430 for (
auto r : mDb[
"refine_hist"])
435 cif::tie(p, n, h, s) = r.get(
"pdbx_number_atoms_protein",
"pdbx_number_atoms_nucleic_acid",
"pdbx_number_atoms_ligand",
"number_atoms_solvent");
436 r[
"number_atoms_total"] = p + n + h + s;
446 { R
"(DATA USED IN REFINEMENT\.)", 1 }, 447 { R
"(RESOLUTION RANGE HIGH \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_high" } },
448 { R
"(RESOLUTION RANGE LOW \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_low" } },
449 { R
"(DATA CUTOFF \(SIGMA\(F\)\)\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_sigma_F" } },
450 { R
"(COMPLETENESS FOR RANGE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_obs" } },
451 { R
"(NUMBER OF REFLECTIONS\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_obs" } },
452 { R
"(FIT TO DATA USED IN REFINEMENT\.)", 1 }, 453 { R
"(CROSS-VALIDATION METHOD\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_cross_valid_method" } },
454 { R
"(FREE R VALUE TEST SET SELECTION\s*:\s*(.+))", 1, "refine", {
"pdbx_R_Free_selection_details" } },
455 { R
"(R VALUE \(WORKING \+ TEST SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_obs" } },
456 { R
"(R VALUE \(WORKING SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_work" } },
457 { R
"(FREE R VALUE\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_free" } },
458 { R
"(FREE R VALUE TEST SET SIZE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_R_free" } },
459 { R
"(FREE R VALUE TEST SET COUNT\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_R_free" } },
460 { R
"(FIT/AGREEMENT OF MODEL WITH ALL DATA\.)", 1 }, 461 { R
"(R VALUE \(WORKING \+ TEST SET, NO CUTOFF\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_all" } },
462 { R
"(R VALUE \(WORKING SET, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"R_factor_obs_no_cutoff" } },
463 { R
"(FREE R VALUE \(NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_factor_no_cutoff" } },
464 { R
"(FREE R VALUE TEST SET SIZE \(%, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_val_test_set_size_perc_no_cutoff" } },
465 { R
"(FREE R VALUE TEST SET COUNT \(NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_val_test_set_ct_no_cutoff" } },
466 { R
"(TOTAL NUMBER OF REFLECTIONS \(NO CUTOFF\)\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_all" } },
467 { R
"(NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT\.)", 1 }, 468 { R
"(PROTEIN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_protein" } },
469 { R
"(NUCLEIC ACID ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_nucleic_acid" } },
470 { R
"(HETEROGEN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_ligand" } },
471 { R
"(SOLVENT ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"number_atoms_solvent" } },
472 { R
"(B VALUES\.)", 1 }, 473 { R
"(B VALUE TYPE\s*:\s*(.+))", 1, "refine", {
"pdbx_TLS_residual_ADP_flag" } },
474 { R
"(FROM WILSON PLOT \(A\*\*2\)\s*:\s*(.+))", 1, "reflns", {
"B_iso_Wilson_estimate" } },
475 { R
"(MEAN B VALUE \(OVERALL, A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"B_iso_mean" } },
476 { R
"(OVERALL ANISOTROPIC B VALUE\.)", 1 }, 477 { R
"(B11 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][1]" } },
478 { R
"(B22 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[2][2]" } },
479 { R
"(B33 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[3][3]" } },
480 { R
"(B12 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][2]" } },
481 { R
"(B13 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][3]" } },
482 { R
"(B23 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[2][3]" } },
483 { R
"(ESTIMATED COORDINATE ERROR\.)", 1 }, 484 { R
"(ESD FROM LUZZATI PLOT \(A\)\s*:\s*(.+))", 1, "refine_analyze", {
"Luzzati_coordinate_error_obs" } },
485 { R
"(ESD FROM SIGMAA \(A\)\s*:\s*(.+))", 1, "refine_analyze", {
"Luzzati_sigma_a_obs" } },
486 { R
"(LOW RESOLUTION CUTOFF \(A\)\s*:\s*(.+))", 1, "refine_analyze", {
"Luzzati_d_res_low_obs" } },
487 { R
"(RMS DEVIATIONS FROM IDEAL VALUES\.)", 1 }, 488 { R
"(DISTANCE RESTRAINTS\. RMS SIGMA)", 1 }, 489 { R
"(BOND LENGTH \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_bond_d",
false },
490 { R
"(ANGLE DISTANCE \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_angle_d",
false },
491 { R
"(INTRAPLANAR 1-4 DISTANCE \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_planar_d",
false },
492 { R
"(H-BOND OR METAL COORDINATION \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_hb_or_metal_coord",
false },
493 { R
"(PLANE RESTRAINT \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_plane_restr",
false },
494 { R
"(CHIRAL-CENTER RESTRAINT \(A\*\*3\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_chiral_restr",
false },
495 { R
"(NON-BONDED CONTACT RESTRAINTS\.)", 1 }, 496 { R
"(SINGLE TORSION \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_singtor_nbd",
false },
497 { R
"(MULTIPLE TORSION \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_multtor_nbd",
false },
498 { R
"(H-BOND \(X\.\.\.Y\) \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_xyhbond_nbd",
false },
499 { R
"(H-BOND \(X-H\.\.\.Y\) \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_xhyhbond_nbd",
false },
500 { R
"(CONFORMATIONAL TORSION ANGLE RESTRAINTS\.)", 1 }, 501 { R
"(SPECIFIED \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_special_tor",
false },
502 { R
"(PLANAR \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_planar_tor",
false },
503 { R
"(STAGGERED \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_staggered_tor",
false },
504 { R
"(TRANSVERSE \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_transverse_tor",
false },
505 { R
"(ISOTROPIC THERMAL FACTOR RESTRAINTS\. RMS SIGMA)", 1 }, 506 { R
"(MAIN-CHAIN BOND \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_mcbond_it",
false },
507 { R
"(MAIN-CHAIN ANGLE \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_mcangle_it",
false },
508 { R
"(SIDE-CHAIN BOND \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_scbond_it",
false },
509 { R
"(SIDE-CHAIN ANGLE \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_scangle_it",
false },
516 : Remark3Parser(name, expMethod, r, db, kPROLSQ_Template, sizeof(kPROLSQ_Template) / sizeof(
TemplateLine),
517 std::regex(R
"((PROLSQ)(?: (\d+(?:\.\d+)?))?)")) 523 for (
auto r : mDb[
"refine_hist"])
528 cif::tie(p, n, h, s) = r.get(
"pdbx_number_atoms_protein",
"pdbx_number_atoms_nucleic_acid",
"pdbx_number_atoms_ligand",
"number_atoms_solvent");
529 r[
"number_atoms_total"] = p + n + h + s;
539 {
"DATA USED IN REFINEMENT.", 1 },
540 { R
"(RESOLUTION RANGE HIGH \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_high" } },
541 { R
"(RESOLUTION RANGE LOW \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_low" } },
542 { R
"(DATA CUTOFF \(SIGMA\(F\)\)\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_sigma_F" } },
543 { R
"(COMPLETENESS FOR RANGE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_obs" } },
544 { R
"(NUMBER OF REFLECTIONS\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_obs" } },
545 { R
"(FIT TO DATA USED IN REFINEMENT.)", 1 }, 546 { R
"(CROSS-VALIDATION METHOD\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_cross_valid_method" } },
547 { R
"(FREE R VALUE TEST SET SELECTION\s*:\s*(.+))", 1, "refine", {
"pdbx_R_Free_selection_details" } },
548 { R
"(R VALUE \(WORKING \+ TEST SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_obs" } },
549 { R
"(R VALUE \(WORKING SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_work" } },
550 { R
"(FREE R VALUE\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_free" } },
551 { R
"(FREE R VALUE TEST SET SIZE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_R_free" } },
552 { R
"(FREE R VALUE TEST SET COUNT\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_R_free" } },
553 { R
"(NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT.)", 1 }, 554 { R
"(PROTEIN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_protein" } },
555 { R
"(NUCLEIC ACID ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_nucleic_acid" } },
556 { R
"(HETEROGEN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_ligand" } },
557 { R
"(SOLVENT ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"number_atoms_solvent" } },
558 { R
"(ALL ATOMS\s*:\s*(.+))", 1, },
559 { R
"(B VALUES\..*)", 1 }, 560 { R
"(B VALUE TYPE\s*:\s*(.+))", 1, "refine", {
"pdbx_TLS_residual_ADP_flag" } },
561 { R
"(FROM WILSON PLOT \(A\*\*2\)\s*:\s*(.+))", 1, "reflns", {
"B_iso_Wilson_estimate" } },
562 { R
"(MEAN B VALUE \(OVERALL, A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"B_iso_mean" } },
563 { R
"(OVERALL ANISOTROPIC B VALUE.)", 1 }, 564 { R
"(B11 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][1]" } },
565 { R
"(B22 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[2][2]" } },
566 { R
"(B33 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[3][3]" } },
567 { R
"(B12 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][2]" } },
568 { R
"(B13 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][3]" } },
569 { R
"(B23 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[2][3]" } },
570 { R
"(ESTIMATED OVERALL COORDINATE ERROR.)", 1 }, 571 { R
"(ESU BASED ON R VALUE(?:\s*\(A\))?\s*:\s*(.+))", 1, "refine", {
"pdbx_overall_ESU_R" } },
572 { R
"(ESU BASED ON FREE R VALUE(?:\s*\(A\))?\s*:\s*(.+))", 1, "refine", {
"pdbx_overall_ESU_R_Free" } },
573 { R
"(ESU BASED ON MAXIMUM LIKELIHOOD(?:\s*\(A\))?\s*:\s*(.+))", 1, "refine", {
"overall_SU_ML" } },
574 { R
"(ESU FOR B VALUES BASED ON MAXIMUM LIKELIHOOD \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"overall_SU_B" } },
575 { R
"(RMS DEVIATIONS FROM IDEAL VALUES.)", 1 }, 576 { R
"(DISTANCE RESTRAINTS. RMS SIGMA)", 1 }, 577 { R
"(BOND LENGTH \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_bond_d",
false },
578 { R
"(ANGLE DISTANCE \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_angle_d",
false },
579 { R
"(INTRAPLANAR 1-4 DISTANCE \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_planar_d",
false },
580 { R
"(H-BOND OR METAL COORDINATION \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_hb_or_metal_coord",
false },
581 { R
"(PLANE RESTRAINT \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_plane_restr",
false },
582 { R
"(CHIRAL-CENTER RESTRAINT \(A\*\*3\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_chiral_restr",
false },
583 { R
"(NON-BONDED CONTACT RESTRAINTS.)", 1 }, 584 { R
"(SINGLE TORSION \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_singtor_nbd",
false },
585 { R
"(MULTIPLE TORSION \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_multtor_nbd",
false },
586 { R
"(H-BOND \(X\.\..Y\) \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_xyhbond_nbd",
false },
587 { R
"(H-BOND \(X-H\.\.\.Y\) \(A\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_xhyhbond_nbd",
false },
588 { R
"(CONFORMATIONAL TORSION ANGLE RESTRAINTS.)", 1 }, 589 { R
"(SPECIFIED \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_special_tor",
false },
590 { R
"(PLANAR \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_planar_tor",
false },
591 { R
"(STAGGERED \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_staggered_tor",
false },
592 { R
"(TRANSVERSE \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_transverse_tor",
false },
593 { R
"(ISOTROPIC THERMAL FACTOR RESTRAINTS. RMS SIGMA)", 1 }, 594 { R
"(MAIN-CHAIN BOND \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_mcbond_it",
false },
595 { R
"(MAIN-CHAIN ANGLE \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_mcangle_it",
false },
596 { R
"(SIDE-CHAIN BOND \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_scbond_it",
false },
597 { R
"(SIDE-CHAIN ANGLE \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"p_scangle_it",
false },
604 : Remark3Parser(name, expMethod, r, db, kREFMAC_Template, sizeof(kREFMAC_Template) / sizeof(
TemplateLine),
609 virtual std::string
program() {
return "REFMAC"; }
614 { R
"(REFINEMENT TARGET\s*:\s*(.+))", 1, "refine", {
"pdbx_stereochemistry_target_values" } },
615 { R
"(DATA USED IN REFINEMENT\.)", 1 }, 616 { R
"(RESOLUTION RANGE HIGH \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_high" } },
617 { R
"(RESOLUTION RANGE LOW \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_low" } },
618 { R
"(DATA CUTOFF \(SIGMA\(F\)\)\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_sigma_F" } },
619 { R
"(COMPLETENESS FOR RANGE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_obs" } },
620 { R
"(NUMBER OF REFLECTIONS\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_obs" } },
621 { R
"(FIT TO DATA USED IN REFINEMENT.)", 1 }, 622 { R
"(CROSS-VALIDATION METHOD\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_cross_valid_method" } },
623 { R
"(FREE R VALUE TEST SET SELECTION\s*:\s*(.+))", 1, "refine", {
"pdbx_R_Free_selection_details" } },
624 { R
"(R VALUE \(WORKING \+ TEST SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_obs" } },
625 { R
"(R VALUE \(WORKING SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_work" } },
626 { R
"(FREE R VALUE\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_free" } },
627 { R
"(FREE R VALUE TEST SET SIZE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_R_free" } },
628 { R
"(FREE R VALUE TEST SET COUNT\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_R_free" } },
629 { R
"(FIT IN THE HIGHEST RESOLUTION BIN.)", 1 }, 630 { R
"(TOTAL NUMBER OF BINS USED\s*:\s*(.+))", 1, "refine_ls_shell", {
"pdbx_total_number_of_bins_used" } },
631 { R
"(BIN RESOLUTION RANGE HIGH(?:\s*\(A\))?\s*:\s*(.+))", 1, "refine_ls_shell", {
"d_res_high" } },
632 { R
"(BIN RESOLUTION RANGE LOW(?:\s*\(A\))?\s*:\s*(.+))", 1, "refine_ls_shell", {
"d_res_low" } },
633 { R
"(REFLECTION IN BIN \(WORKING SET\)\s*:\s*(.+))", 1, "refine_ls_shell", {
"number_reflns_R_work" } },
634 { R
"(BIN COMPLETENESS \(WORKING\+TEST\) \(%\)\s*:\s*(.+))", 1, "refine_ls_shell", {
"percent_reflns_obs" } },
635 { R
"(BIN R VALUE \(WORKING SET\)\s*:\s*(.+))", 1, "refine_ls_shell", {
"R_factor_R_work" } },
636 { R
"(BIN FREE R VALUE SET COUNT\s*:\s*(.+))", 1, "refine_ls_shell", {
"number_reflns_R_free" } },
637 { R
"(BIN FREE R VALUE\s*:\s*(.+))", 1, "refine_ls_shell", {
"R_factor_R_free" } },
638 { R
"(NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT.)", 1 }, 639 { R
"(PROTEIN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_protein" } },
640 { R
"(NUCLEIC ACID ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_nucleic_acid" } },
641 { R
"(HETEROGEN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_ligand" } },
642 { R
"(SOLVENT ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"number_atoms_solvent" } },
643 { R
"(ALL ATOMS\s*:\s*(.+))", 1, },
644 { R
"(B VALUES\..*)", 1 }, 645 { R
"(B VALUE TYPE\s*:\s*(.+))", 1, "refine", {
"pdbx_TLS_residual_ADP_flag" } },
646 { R
"(FROM WILSON PLOT \(A\*\*2\)\s*:\s*(.+))", 1, "reflns", {
"B_iso_Wilson_estimate" } },
647 { R
"(MEAN B VALUE \(OVERALL, A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"B_iso_mean" } },
648 { R
"(OVERALL ANISOTROPIC B VALUE.)", 1 }, 649 { R
"(B11 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][1]" } },
650 { R
"(B22 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[2][2]" } },
651 { R
"(B33 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[3][3]" } },
652 { R
"(B12 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][2]" } },
653 { R
"(B13 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[1][3]" } },
654 { R
"(B23 \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"aniso_B[2][3]" } },
655 { R
"(ESTIMATED OVERALL COORDINATE ERROR.)", 1 }, 656 { R
"(ESU BASED ON R VALUE(?:\s*\(A\))?\s*:\s*(.+))", 1, "refine", {
"pdbx_overall_ESU_R" } },
657 { R
"(ESU BASED ON FREE R VALUE(?:\s*\(A\))?\s*:\s*(.+))", 1, "refine", {
"pdbx_overall_ESU_R_Free" } },
658 { R
"(ESU BASED ON MAXIMUM LIKELIHOOD(?:\s*\(A\))?\s*:\s*(.+))", 1, "refine", {
"overall_SU_ML" } },
659 { R
"(ESU FOR B VALUES BASED ON MAXIMUM LIKELIHOOD \(A\*\*2\)\s*:\s*(.+))", 1, "refine", {
"overall_SU_B" } },
660 { R
"(CORRELATION COEFFICIENTS.)", 1 }, 661 { R
"(CORRELATION COEFFICIENT FO-FC\s*:\s*(.+))", 1, "refine", {
"correlation_coeff_Fo_to_Fc" } },
662 { R
"(CORRELATION COEFFICIENT FO-FC FREE\s*:\s*(.+))", 1, "refine", {
"correlation_coeff_Fo_to_Fc_free" } },
663 { R
"(RMS DEVIATIONS FROM IDEAL VALUES COUNT RMS WEIGHT)", 1 }, 664 { R
"(BOND LENGTHS REFINED ATOMS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_bond_refined_d",
false },
665 { R
"(BOND LENGTHS OTHERS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_bond_other_d",
false },
666 { R
"(BOND ANGLES REFINED ATOMS \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_angle_refined_deg",
false },
667 { R
"(BOND ANGLES OTHERS \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_angle_other_deg",
false },
668 { R
"(TORSION ANGLES, PERIOD 1 \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_dihedral_angle_1_deg",
false },
669 { R
"(TORSION ANGLES, PERIOD 2 \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_dihedral_angle_2_deg",
false },
670 { R
"(TORSION ANGLES, PERIOD 3 \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_dihedral_angle_3_deg",
false },
671 { R
"(TORSION ANGLES, PERIOD 4 \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_dihedral_angle_4_deg",
false },
672 { R
"(CHIRAL-CENTER RESTRAINTS \(A\*\*3\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_chiral_restr",
false },
673 { R
"(GENERAL PLANES REFINED ATOMS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_gen_planes_refined",
false },
674 { R
"(GENERAL PLANES OTHERS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_gen_planes_other",
false },
675 { R
"(NON-BONDED CONTACTS REFINED ATOMS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_nbd_refined",
false },
676 { R
"(NON-BONDED CONTACTS OTHERS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_nbd_other",
false },
677 { R
"(NON-BONDED TORSION REFINED ATOMS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_nbtor_refined",
false },
678 { R
"(NON-BONDED TORSION OTHERS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_nbtor_other",
false },
679 { R
"(H-BOND \(X...Y\) REFINED ATOMS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_xyhbond_nbd_refined",
false },
680 { R
"(H-BOND \(X...Y\) OTHERS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_xyhbond_nbd_other",
false },
681 { R
"(POTENTIAL METAL-ION REFINED ATOMS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_metal_ion_refined",
false },
682 { R
"(POTENTIAL METAL-ION OTHERS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_metal_ion_other",
false },
683 { R
"(SYMMETRY VDW REFINED ATOMS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_symmetry_vdw_refined",
false },
684 { R
"(SYMMETRY VDW OTHERS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_symmetry_vdw_other",
false },
685 { R
"(SYMMETRY H-BOND REFINED ATOMS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_symmetry_hbond_refined",
false },
686 { R
"(SYMMETRY H-BOND OTHERS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_symmetry_hbond_other",
false },
687 { R
"(SYMMETRY METAL-ION REFINED ATOMS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_symmetry_metal_ion_refined",
false },
688 { R
"(SYMMETRY METAL-ION OTHERS(?:\s*\(A\))?\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_symmetry_metal_ion_other",
false },
689 { R
"(ISOTROPIC THERMAL FACTOR RESTRAINTS. COUNT RMS WEIGHT)", 1 }, 690 { R
"(MAIN-CHAIN BOND REFINED ATOMS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_mcbond_it",
false },
691 { R
"(MAIN-CHAIN BOND OTHER ATOMS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_mcbond_other",
false },
692 { R
"(MAIN-CHAIN ANGLE REFINED ATOMS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_mcangle_it",
false },
693 { R
"(MAIN-CHAIN ANGLE OTHER ATOMS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_mcangle_other",
false },
694 { R
"(SIDE-CHAIN BOND REFINED ATOMS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_scbond_it",
false },
695 { R
"(SIDE-CHAIN BOND OTHER ATOMS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_scbond_other",
false },
696 { R
"(SIDE-CHAIN ANGLE REFINED ATOMS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_scangle_it",
false },
697 { R
"(SIDE-CHAIN ANGLE OTHER ATOMS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_scangle_other",
false },
698 { R
"(LONG RANGE B REFINED ATOMS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_long_range_B_refined",
false },
699 { R
"(LONG RANGE B OTHER ATOMS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_long_range_B_other",
false },
700 { R
"(ANISOTROPIC THERMAL FACTOR RESTRAINTS. COUNT RMS WEIGHT)", 1 }, 701 { R
"(RIGID-BOND RESTRAINTS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_rigid_bond_restr",
false },
702 { R
"(SPHERICITY; FREE ATOMS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_sphericity_free",
false },
703 { R
"(SPHERICITY; BONDED ATOMS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"number",
"dev_ideal",
"dev_ideal_target" },
"r_sphericity_bonded",
false },
705 { R
"(NCS RESTRAINTS STATISTICS)", 1 }, 706 { R
"(NUMBER OF DIFFERENT NCS GROUPS\s*:\s*(.+))", 1 }, 707 { R
"(NCS GROUP NUMBER\s*:\s*(\d+))", 1, },
708 { R
"(CHAIN NAMES\s*:\s*(.+))", 1, },
709 { R
"(NUMBER OF COMPONENTS NCS GROUP\s*:\s*(\d+))", 1 }, 710 { R
"(COMPONENT C SSSEQI TO C SSSEQI CODE)", 1 }, 712 { R
"((\d+)\s+(.)\s+(\d+)(.)\s+(.)\s+(\d+)(.)\s+(.+))", 0 }, 713 { R
"((\d+)\s+(.)\s+(\d+)\s+(.)\s+(\d+)\s+(.+))", 0 }, 714 { R
"(GROUP CHAIN COUNT RMS WEIGHT)", 1 }, 715 { R
"(TIGHT POSITIONAL\s+\d+\s+(.)\s+\(A\):\s+(\d+)\s*;\s*(\d+(?:\.\d*)?)\s*;\s*(\d+(?:\.\d*)?))", 0 }, 716 { R
"(MEDIUM POSITIONAL\s+\d+\s+(.)\s+\(A\):\s+(\d+)\s*;\s*(\d+(?:\.\d*)?)\s*;\s*(\d+(?:\.\d*)?))", 0 }, 717 { R
"(LOOSE POSITIONAL\s+\d+\s+(.)\s+\(A\):\s+(\d+)\s*;\s*(\d+(?:\.\d*)?)\s*;\s*(\d+(?:\.\d*)?))", 0 }, 718 { R
"(TIGHT THERMAL\s+\d+\s+(.)\s+\(A\*\*2\):\s+(\d+)\s*;\s*(\d+(?:\.\d*)?)\s*;\s*(\d+(?:\.\d*)?))", 0 }, 719 { R
"(MEDIUM THERMAL\s+\d+\s+(.)\s+\(A\*\*2\):\s+(\d+)\s*;\s*(\d+(?:\.\d*)?)\s*;\s*(\d+(?:\.\d*)?))", 0 }, 720 { R
"(LOOSE THERMAL\s+\d+\s+(.)\s+\(A\*\*2\):\s+(\d+)\s*;\s*(\d+(?:\.\d*)?)\s*;\s*(\d+(?:\.\d*)?))", 0 }, 721 { R
"(NCS GROUP NUMBER\s*:\s*(\d+))", 93 - 105, },
722 { R
"(TWIN DETAILS)", 1 }, 723 { R
"(NUMBER OF TWIN DOMAINS\s*:\s*(\d*))", 1 }, 724 { R
"(TWIN DOMAIN\s*:\s*(.+))", 1, "pdbx_reflns_twin", {
"domain_id" },
nullptr,
true },
725 { R
"(TWIN OPERATOR\s*:\s*(.+))", 1, "pdbx_reflns_twin", {
"operator" } },
726 { R
"(TWIN FRACTION\s*:\s*(.+))", 108 - 110, "pdbx_reflns_twin", {
"fraction" } },
727 { R
"(TLS DETAILS)", 1 }, 728 { R
"(NUMBER OF TLS GROUPS\s*:\s*(.+))", 1 }, 729 { R
"(TLS GROUP\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"id" },
nullptr,
true },
730 { R
"(NUMBER OF COMPONENTS GROUP\s*:\s*(.+))", 1 }, 731 { R
"(COMPONENTS C SSSEQI TO C SSSEQI)", 1 }, 732 { R
"(RESIDUE RANGE\s*:\s+(\S+)\s+(\d*\S)\s+(\S+)\s+(\d*\S))", 0, "pdbx_refine_tls_group", {
"beg_auth_asym_id",
"beg_auth_seq_id",
"end_auth_asym_id",
"end_auth_seq_id" },
nullptr,
true },
733 { R
"(ORIGIN FOR THE GROUP(?:\s*\(A\))?\s*:\s*([-+]?\d+(?:\.\d+)?)\s*([-+]?\d+(?:\.\d+)?)\s*([-+]?\d+(?:\.\d+)?))", 1, "pdbx_refine_tls", {
"origin_x",
"origin_y",
"origin_z" } },
734 { R
"(T TENSOR)", 1 }, 735 { R
"(T11\s*:\s*(.+) T22\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"T[1][1]",
"T[2][2]" } },
736 { R
"(T33\s*:\s*(.+) T12\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"T[3][3]",
"T[1][2]" } },
737 { R
"(T13\s*:\s*(.+) T23\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"T[1][3]",
"T[2][3]" } },
738 { R
"(L TENSOR)", 1 }, 739 { R
"(L11\s*:\s*(.+) L22\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"L[1][1]",
"L[2][2]" } },
740 { R
"(L33\s*:\s*(.+) L12\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"L[3][3]",
"L[1][2]" } },
741 { R
"(L13\s*:\s*(.+) L23\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"L[1][3]",
"L[2][3]" } },
742 { R
"(S TENSOR)", 1 }, 743 { R
"(S11\s*:\s*(.+) S12\s*:\s*(.+) S13\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"S[1][1]",
"S[1][2]",
"S[1][3]" } },
744 { R
"(S21\s*:\s*(.+) S22\s*:\s*(.+) S23\s*:\s*(.+))", 1, "pdbx_refine_tls", {
"S[2][1]",
"S[2][2]",
"S[2][3]" } },
745 { R
"(S31\s*:\s*(.+) S32\s*:\s*(.+) S33\s*:\s*(.+))", 113 - 129, "pdbx_refine_tls", {
"S[3][1]",
"S[3][2]",
"S[3][3]" } },
746 { R
"(BULK SOLVENT MODELLING.)", 1 }, 747 { R
"(METHOD USED\s*:\s*(.+))", 1, "refine", {
"solvent_model_details" } },
748 { R
"(PARAMETERS FOR MASK CALCULATION)", 1 }, 749 { R
"(VDW PROBE RADIUS\s*:\s*(.+))", 1, "refine", {
"pdbx_solvent_vdw_probe_radii" } },
750 { R
"(ION PROBE RADIUS\s*:\s*(.+))", 1, "refine", {
"pdbx_solvent_ion_probe_radii" } },
751 { R
"(SHRINKAGE RADIUS\s*:\s*(.+))", 1, "refine", {
"pdbx_solvent_shrinkage_radii" } },
758 : Remark3Parser(name, expMethod, r, db, kREFMAC5_Template, sizeof(kREFMAC5_Template) / sizeof(
TemplateLine),
759 std::regex(R
"((REFMAC)(?: (\d+(?:\..+)?))?)")) 765 { R
"(DATA USED IN REFINEMENT\.)", 1 }, 766 { R
"(RESOLUTION RANGE HIGH \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_high" } },
767 { R
"(RESOLUTION RANGE LOW \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_low" } },
768 { R
"(DATA CUTOFF \(SIGMA\(F\)\)\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_sigma_F" } },
769 { R
"(COMPLETENESS FOR RANGE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_obs" } },
770 { R
"(CROSS-VALIDATION METHOD\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_cross_valid_method" } },
771 { R
"(FREE R VALUE TEST SET SELECTION\s*:\s*(.+))", 1, "refine", {
"pdbx_R_Free_selection_details" } },
772 { R
"(FIT TO DATA USED IN REFINEMENT \(NO CUTOFF\)\.)", 1 }, 773 { R
"(R VALUE \(WORKING \+ TEST SET, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"R_factor_all_no_cutoff" } },
774 { R
"(R VALUE \(WORKING SET, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"R_factor_obs_no_cutoff" } },
775 { R
"(FREE R VALUE \(NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_factor_no_cutoff" } },
776 { R
"(FREE R VALUE TEST SET SIZE \(%, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_val_test_set_size_perc_no_cutoff" } },
777 { R
"(FREE R VALUE TEST SET COUNT \(NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_val_test_set_ct_no_cutoff" } },
778 { R
"(TOTAL NUMBER OF REFLECTIONS \(NO CUTOFF\)\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_all" } },
779 { R
"(FIT/AGREEMENT OF MODEL FOR DATA WITH F>4SIG\(F\)\.)", 1 }, 780 { R
"(R VALUE \(WORKING \+ TEST SET, F>4SIG\(F\)\)\s*:\s*(.+))", 1, "pdbx_refine", {
"R_factor_all_4sig_cutoff" } },
781 { R
"(R VALUE \(WORKING SET, F>4SIG\(F\)\)\s*:\s*(.+))", 1, "pdbx_refine", {
"R_factor_obs_4sig_cutoff" } },
782 { R
"(FREE R VALUE \(F>4SIG\(F\)\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_factor_4sig_cutoff" } },
783 { R
"(FREE R VALUE TEST SET SIZE \(%, F>4SIG\(F\)\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_val_test_set_size_perc_4sig_cutoff" } },
784 { R
"(FREE R VALUE TEST SET COUNT \(F>4SIG\(F\)\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_val_test_set_ct_4sig_cutoff" } },
785 { R
"(TOTAL NUMBER OF REFLECTIONS \(F>4SIG\(F\)\)\s*:\s*(.+))", 1, "pdbx_refine", {
"number_reflns_obs_4sig_cutoff" } },
786 { R
"(NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT\.)", 1 }, 787 { R
"(PROTEIN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_protein" } },
788 { R
"(NUCLEIC ACID ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_nucleic_acid" } },
789 { R
"(HETEROGEN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_ligand" } },
790 { R
"(SOLVENT ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"number_atoms_solvent" } },
791 { R
"(MODEL REFINEMENT\.)", 1 }, 792 { R
"(OCCUPANCY SUM OF NON-HYDROGEN ATOMS\s*:\s*(.+))", 1, "refine_analyze", {
"occupancy_sum_non_hydrogen" } },
793 { R
"(OCCUPANCY SUM OF HYDROGEN ATOMS\s*:\s*(.+))", 1, "refine_analyze", {
"occupancy_sum_hydrogen" } },
794 { R
"(NUMBER OF DISCRETELY DISORDERED RESIDUES\s*:\s*(.+))", 1, "refine_analyze", {
"number_disordered_residues" } },
795 { R
"(NUMBER OF LEAST-SQUARES PARAMETERS\s*:\s*(.+))", 1, "refine", {
"ls_number_parameters" } },
796 { R
"(NUMBER OF RESTRAINTS\s*:\s*(.+))", 1, "refine", {
"ls_number_restraints" } },
797 { R
"(RMS DEVIATIONS FROM RESTRAINT TARGET VALUES\.)", 1 }, 798 { R
"(BOND LENGTHS \(A\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"s_bond_d",
false },
799 { R
"(ANGLE DISTANCES \(A\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"s_angle_d",
false },
800 { R
"(SIMILAR DISTANCES \(NO TARGET VALUES\) \(A\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"s_similar_dist",
false },
801 { R
"(DISTANCES FROM RESTRAINT PLANES \(A\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"s_from_restr_planes",
false },
802 { R
"(ZERO CHIRAL VOLUMES \(A\*\*3\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"s_zero_chiral_vol",
false },
803 { R
"(NON-ZERO CHIRAL VOLUMES \(A\*\*3\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"s_non_zero_chiral_vol",
false },
804 { R
"(ANTI-BUMPING DISTANCE RESTRAINTS \(A\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"s_anti_bump_dis_restr",
false },
805 { R
"(RIGID-BOND ADP COMPONENTS \(A\*\*2\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"s_rigid_bond_adp_cmpnt",
false },
806 { R
"(SIMILAR ADP COMPONENTS \(A\*\*2\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"s_similar_adp_cmpnt",
false },
807 { R
"(APPROXIMATELY ISOTROPIC ADPS \(A\*\*2\)\s*:\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal" },
"s_approx_iso_adps",
false },
808 { R
"(BULK SOLVENT MODELING\.)", 1 }, 809 { R
"(METHOD USED\s*:\s*(.+))", 1, "refine", {
"solvent_model_details" } },
810 { R
"(STEREOCHEMISTRY TARGET VALUES\s*:\s*(.+))", 1, "refine", {
"pdbx_stereochemistry_target_values" } },
811 { R
"(SPECIAL CASE\s*:\s*(.+))", 1, "refine", {
"pdbx_stereochem_target_val_spec_case" } },
818 : Remark3Parser(name, expMethod, r, db, kSHELXL_Template, sizeof(kSHELXL_Template) / sizeof(
TemplateLine),
819 std::regex(R
"((SHELXL)(?:-(\d+(?:\..+)?)))")) 825 { R
"(DATA USED IN REFINEMENT\.)", 1 }, 826 { R
"(RESOLUTION RANGE HIGH \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_high" } },
827 { R
"(RESOLUTION RANGE LOW \(ANGSTROMS\)\s*:\s*(.+))", 1, "refine", {
"ls_d_res_low" } },
828 { R
"(DATA CUTOFF \(SIGMA\(F\)\)\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_sigma_F" } },
829 { R
"(COMPLETENESS FOR RANGE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_obs" } },
830 { R
"(NUMBER OF REFLECTIONS\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_obs" } },
831 { R
"(USING DATA ABOVE SIGMA CUTOFF\.)", 1 }, 832 { R
"(CROSS-VALIDATION METHOD\s*:\s*(.+))", 1, "refine", {
"pdbx_ls_cross_valid_method" } },
833 { R
"(FREE R VALUE TEST SET SELECTION\s*:\s*(.+))", 1, "refine", {
"pdbx_R_Free_selection_details" } },
834 { R
"(R VALUE \(WORKING \+ TEST SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_obs" } },
835 { R
"(R VALUE \(WORKING SET\)\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_work" } },
836 { R
"(FREE R VALUE\s*:\s*(.+))", 1, "refine", {
"ls_R_factor_R_free" } },
837 { R
"(FREE R VALUE TEST SET SIZE \(%\)\s*:\s*(.+))", 1, "refine", {
"ls_percent_reflns_R_free" } },
838 { R
"(FREE R VALUE TEST SET COUNT\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_R_free" } },
839 { R
"(USING ALL DATA, NO SIGMA CUTOFF\.)", 1 }, 840 { R
"(R VALUE \(WORKING \+ TEST SET, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"R_factor_all_no_cutoff" } },
841 { R
"(R VALUE \(WORKING SET, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"R_factor_obs_no_cutoff" } },
842 { R
"(FREE R VALUE \(NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_factor_no_cutoff" } },
843 { R
"(FREE R VALUE TEST SET SIZE \(%, NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_val_test_set_size_perc_no_cutoff" } },
844 { R
"(FREE R VALUE TEST SET COUNT \(NO CUTOFF\)\s*:\s*(.+))", 1, "pdbx_refine", {
"free_R_val_test_set_ct_no_cutoff" } },
845 { R
"(TOTAL NUMBER OF REFLECTIONS \(NO CUTOFF\)\s*:\s*(.+))", 1, "refine", {
"ls_number_reflns_all" } },
846 { R
"(NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT\.)", 1 }, 847 { R
"(PROTEIN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_protein" } },
848 { R
"(NUCLEIC ACID ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_nucleic_acid" } },
849 { R
"(HETEROGEN ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"pdbx_number_atoms_ligand" } },
850 { R
"(SOLVENT ATOMS\s*:\s*(.+))", 1, "refine_hist", {
"number_atoms_solvent" } },
851 { R
"(WILSON B VALUE \(FROM FCALC, A\*\*2\)\s*:\s*(.+))", 1, "reflns", {
"B_iso_Wilson_estimate" } },
852 { R
"(RMS DEVIATIONS FROM IDEAL VALUES\. RMS WEIGHT COUNT)", 1 }, 853 { R
"(BOND LENGTHS \(A\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_bond_d",
false },
854 { R
"(BOND ANGLES \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_angle_deg",
false },
855 { R
"(TORSION ANGLES \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_dihedral_angle_d",
false },
856 { R
"(PSEUDOROTATION ANGLES \(DEGREES\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_pseud_angle",
false },
857 { R
"(TRIGONAL CARBON PLANES \(A\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_trig_c_planes",
false },
858 { R
"(GENERAL PLANES \(A\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_gen_planes",
false },
859 { R
"(ISOTROPIC THERMAL FACTORS \(A\*\*2\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_it",
false },
860 { R
"(NON-BONDED CONTACTS \(A\)\s*:\s*(.+)\s*;\s*(.+)\s*;\s*(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"weight",
"number" },
"t_nbd",
false },
861 { R
"(INCORRECT CHIRAL-CENTERS \(COUNT\)\s*:\s*(.+)\s*)", 1, "refine_ls_restr", {
"number" },
"t_incorr_chiral_ct",
false },
862 { R
"(BULK SOLVENT MODELING\.)", 1 }, 863 { R
"(METHOD USED\s*:\s*(.+))", 1, "refine", {
"solvent_model_details" } },
864 { R
"(KSOL\s*:\s*(.+))", 1, "refine", {
"solvent_model_param_ksol" } },
865 { R
"(BSOL\s*:\s*(.+))", 1, "refine", {
"solvent_model_param_bsol" } },
866 { R
"(RESTRAINT LIBRARIES\.)", 1 }, 867 { R
"(STEREOCHEMISTRY\s*:\s*(.+))", 1, "refine", {
"pdbx_stereochemistry_target_values" } },
868 { R
"(ISOTROPIC THERMAL FACTOR RESTRAINTS\s*:\s*(.+))", 1, "refine", {
"pdbx_isotropic_thermal_model" } },
874 TNT_Remark3Parser(
const std::string &name,
const std::string &expMethod, PDBRecord *r, cif::datablock &db)
875 : Remark3Parser(name, expMethod, r, db, kTNT_Template, sizeof(kTNT_Template) / sizeof(
TemplateLine),
876 std::regex(R
"((TNT)(?: V. (\d+.+)?)?)")) 882 { R
"(DATA USED IN REFINEMENT\.)", 1 }, 883 { R
"(RESOLUTION RANGE HIGH \(ANGSTROMS\) :\s+(.+))", 1, "refine", {
"ls_d_res_high" } },
884 { R
"(RESOLUTION RANGE LOW \(ANGSTROMS\) :\s+(.+))", 1, "refine", {
"ls_d_res_low" } },
885 { R
"(DATA CUTOFF \(SIGMA\(F\)\) :\s+(.+))", 1, "refine", {
"pdbx_ls_sigma_F" } },
886 { R
"(DATA CUTOFF HIGH \(ABS\(F\)\) :\s+(.+))", 1, "refine", {
"pdbx_data_cutoff_high_absF" } },
887 { R
"(DATA CUTOFF LOW \(ABS\(F\)\) :\s+(.+))", 1, "refine", {
"pdbx_data_cutoff_low_absF" } },
888 { R
"(COMPLETENESS \(WORKING\+TEST\) \(%\) :\s+(.+))", 1, "refine", {
"ls_percent_reflns_obs" } },
889 { R
"(NUMBER OF REFLECTIONS :\s+(.+))", 1, "refine", {
"ls_number_reflns_obs" } },
890 { R
"(FIT TO DATA USED IN REFINEMENT\.)", 1 }, 891 { R
"(CROSS-VALIDATION METHOD :\s+(.+))", 1, "refine", {
"pdbx_ls_cross_valid_method" } },
892 { R
"(FREE R VALUE TEST SET SELECTION :\s+(.+))", 1, "refine", {
"pdbx_R_Free_selection_details" } },
893 { R
"(R VALUE \(WORKING SET\) :\s+(.+))", 1, "refine", {
"ls_R_factor_R_work" } },
894 { R
"(FREE R VALUE :\s+(.+))", 1, "refine", {
"ls_R_factor_R_free" } },
895 { R
"(FREE R VALUE TEST SET SIZE \(%\) :\s+(.+))", 1, "refine", {
"ls_percent_reflns_R_free" } },
896 { R
"(FREE R VALUE TEST SET COUNT :\s+(.+))", 1, "refine", {
"ls_number_reflns_R_free" } },
897 { R
"(ESTIMATED ERROR OF FREE R VALUE :\s+(.+))", 1, "refine", {
"ls_R_factor_R_free_error" } },
898 { R
"(FIT IN THE HIGHEST RESOLUTION BIN\.)", 1 }, 899 { R
"(TOTAL NUMBER OF BINS USED :\s+(.+))", 1, "refine_ls_shell", {
"pdbx_total_number_of_bins_used" } },
900 { R
"(BIN RESOLUTION RANGE HIGH \(A\) :\s+(.+))", 1, "refine_ls_shell", {
"d_res_high" } },
901 { R
"(BIN RESOLUTION RANGE LOW \(A\) :\s+(.+))", 1, "refine_ls_shell", {
"d_res_low" } },
902 { R
"(BIN COMPLETENESS \(WORKING\+TEST\) \(%\) :\s+(.+))", 1, "refine_ls_shell", {
"percent_reflns_obs" } },
903 { R
"(REFLECTIONS IN BIN \(WORKING SET\) :\s+(.+))", 1, "refine_ls_shell", {
"number_reflns_R_work" } },
904 { R
"(BIN R VALUE \(WORKING SET\) :\s+(.+))", 1, "refine_ls_shell", {
"R_factor_R_work" } },
905 { R
"(BIN FREE R VALUE :\s+(.+))", 1, "refine_ls_shell", {
"R_factor_R_free" } },
906 { R
"(BIN FREE R VALUE TEST SET SIZE \(%\) :\s+(.+))", 1, "refine_ls_shell", {
"percent_reflns_R_free" } },
907 { R
"(BIN FREE R VALUE TEST SET COUNT :\s+(.+))", 1, "refine_ls_shell", {
"number_reflns_R_free" } },
908 { R
"(ESTIMATED ERROR OF BIN FREE R VALUE :\s+(.+))", 1, "refine_ls_shell", {
"R_factor_R_free_error" } },
909 { R
"(NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT\.)", 1 }, 910 { R
"(PROTEIN ATOMS :\s+(.+))", 1, "refine_hist", {
"pdbx_number_atoms_protein" } },
911 { R
"(NUCLEIC ACID ATOMS :\s+(.+))", 1, "refine_hist", {
"pdbx_number_atoms_nucleic_acid" } },
912 { R
"(HETEROGEN ATOMS :\s+(.+))", 1, "refine_hist", {
"pdbx_number_atoms_ligand" } },
913 { R
"(SOLVENT ATOMS :\s+(.+))", 1, "refine_hist", {
"number_atoms_solvent" } },
914 { R
"(B VALUES\.)", 1 }, 915 { R
"(B VALUE TYPE :\s+(.+))", 1, "refine", {
"pdbx_TLS_residual_ADP_flag" } },
916 { R
"(FROM WILSON PLOT \(A\*\*2\) :\s+(.+))", 1, "reflns", {
"B_iso_Wilson_estimate" } },
917 { R
"(MEAN B VALUE \(OVERALL, A\*\*2\) :\s+(.+))", 1, "refine", {
"B_iso_mean" } },
918 { R
"(OVERALL ANISOTROPIC B VALUE\.)", 1 }, 919 { R
"(B11 \(A\*\*2\) :\s+(.+))", 1, "refine", {
"aniso_B[1][1]" } },
920 { R
"(B22 \(A\*\*2\) :\s+(.+))", 1, "refine", {
"aniso_B[2][2]" } },
921 { R
"(B33 \(A\*\*2\) :\s+(.+))", 1, "refine", {
"aniso_B[3][3]" } },
922 { R
"(B12 \(A\*\*2\) :\s+(.+))", 1, "refine", {
"aniso_B[1][2]" } },
923 { R
"(B13 \(A\*\*2\) :\s+(.+))", 1, "refine", {
"aniso_B[1][3]" } },
924 { R
"(B23 \(A\*\*2\) :\s+(.+))", 1, "refine", {
"aniso_B[2][3]" } },
925 { R
"(ESTIMATED COORDINATE ERROR\.)", 1 }, 926 { R
"(ESD FROM LUZZATI PLOT \(A\) :\s+(.+))", 1, "refine_analyze", {
"Luzzati_coordinate_error_obs" } },
927 { R
"(ESD FROM SIGMAA \(A\) :\s+(.+))", 1, "refine_analyze", {
"Luzzati_sigma_a_obs" } },
928 { R
"(LOW RESOLUTION CUTOFF \(A\) :\s+(.+))", 1, "refine_analyze", {
"Luzzati_d_res_low_obs" } },
929 { R
"(CROSS-VALIDATED ESTIMATED COORDINATE ERROR\.)", 1 }, 930 { R
"(ESD FROM C-V LUZZATI PLOT \(A\) :\s+(.+))", 1, "refine_analyze", {
"Luzzati_coordinate_error_free" } },
931 { R
"(ESD FROM C-V SIGMAA \(A\) :\s+(.+))", 1, "refine_analyze", {
"Luzzati_sigma_a_free" } },
932 { R
"(RMS DEVIATIONS FROM IDEAL VALUES\..*)", 1 }, 933 { R
"(BOND LENGTHS \(A\) :\s+(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"x_bond_d",
false },
934 { R
"(BOND ANGLES \(DEGREES\) :\s+(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"x_angle_deg",
false },
935 { R
"(DIHEDRAL ANGLES \(DEGREES\) :\s+(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"x_dihedral_angle_d",
false },
936 { R
"(IMPROPER ANGLES \(DEGREES\) :\s+(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"x_improper_angle_d",
false },
937 { R
"(ISOTROPIC THERMAL MODEL :\s+(.+))", 1, "refine", {
"pdbx_isotropic_thermal_model" } },
938 { R
"(ISOTROPIC THERMAL FACTOR RESTRAINTS\. RMS SIGMA)", 1 }, 939 { R
"(MAIN-CHAIN BOND \(A\*\*2\) :\s+(.+?);\s+(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"x_mcbond_it",
false },
940 { R
"(MAIN-CHAIN ANGLE \(A\*\*2\) :\s+(.+?);\s+(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"x_mcangle_it",
false },
941 { R
"(SIDE-CHAIN BOND \(A\*\*2\) :\s+(.+?);\s+(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"x_scbond_it",
false },
942 { R
"(SIDE-CHAIN ANGLE \(A\*\*2\) :\s+(.+?);\s+(.+))", 1, "refine_ls_restr", {
"dev_ideal",
"dev_ideal_target" },
"x_scangle_it",
false },
943 { R
"(NCS MODEL :\s+(.+))", 1, },
944 { R
"(NCS RESTRAINTS\. RMS SIGMA/WEIGHT)", 1 }, 945 { R
"(GROUP (\d+) POSITIONAL \(A\) :\s+(.+?);\s+(.+))", 1, },
946 { R
"(GROUP (\d+) B-FACTOR \(A\*\*2\) :\s+(.+?);\s+(.+))", 63 - 64, },
947 { R
"(PARAMETER FILE (\d+) :\s+(.+))", 0, },
948 { R
"(TOPOLOGY FILE (\d+) :\s+(.+))", 0, },
954 XPLOR_Remark3Parser(
const std::string &name,
const std::string &expMethod, PDBRecord *r, cif::datablock &db)
955 : Remark3Parser(name, expMethod, r, db, kXPLOR_Template, sizeof(kXPLOR_Template) / sizeof(
TemplateLine),
956 std::regex(R
"((X-PLOR)(?: (\d+(?:\.\d+)?))?)")) 963 Remark3Parser::Remark3Parser(
const std::string &name,
const std::string &expMethod, PDBRecord *r, cif::datablock &db,
964 const TemplateLine templatelines[], uint32_t templateLineCount, std::regex programversion)
966 , mExpMethod(expMethod)
969 , mTemplate(templatelines)
970 , mTemplateCount(templateLineCount)
971 , mProgramVersion(programversion)
973 mDb.set_validator(db.get_validator());
976 std::string Remark3Parser::nextLine()
980 while (mRec !=
nullptr and mRec->is(
"REMARK 3"))
982 size_t valueIndent = 0;
983 for (
size_t i = 4;
i < mRec->mVlen; ++
i)
985 if (mRec->mValue[
i] ==
' ')
988 if (mRec->mValue[
i] ==
':')
991 while (valueIndent < mRec->mVlen and mRec->mValue[
i] ==
' ')
997 mLine = mRec->vS(12);
1005 if (valueIndent > 4)
1007 std::string indent(valueIndent - 4,
' ');
1009 while (mRec->is(
"REMARK 3") and mRec->mVlen > valueIndent)
1011 std::string v(mRec->mValue + 4, mRec->mValue + mRec->mVlen);
1012 if (not cif::starts_with(v, indent))
1016 mLine.append(mRec->mValue + valueIndent, mRec->mValue + mRec->mVlen);
1024 auto i = mLine.begin(),
j =
i;
1026 while (
i != mLine.end())
1028 bool nspace = isspace(*
i);
1030 if (nspace ==
false)
1039 mLine.erase(
j, mLine.end());
1045 std::cerr <<
"RM3: " << mLine << std::endl;
1050 bool Remark3Parser::match(
const char *expr,
int nextState)
1052 std::regex
rx(expr);
1054 bool result = regex_match(mLine, mM, rx);
1059 std::cerr << cif::coloured(
"No match:", cif::scWHITE, cif::scRED) <<
" '" << expr <<
'\'' << std::endl;
1064 float Remark3Parser::parse()
1066 int lineCount = 0, dropped = 0;
1067 std::string remarks;
1070 while (mRec !=
nullptr)
1080 if (mState == 0 and match(R
"(AUTHORS\s*:.+)", 0)) 1083 auto state = mState;
1084 for (state = mState; state < mTemplateCount; ++state)
1103 if (state < mTemplateCount)
1106 if (state == mTemplateCount and match(R
"(OTHER REFINEMENT REMARKS\s*:\s*(.*))", mTemplateCount + 1)) 1108 remarks = mM[1].str(); 1112 if (state == mTemplateCount + 1)
1114 remarks = remarks +
'\n' + mLine;
1119 std::cerr << cif::coloured(
"Dropping line:", cif::scWHITE, cif::scRED) <<
" '" << mLine <<
'\'' << std::endl;
1124 if (not remarks.empty() and not
iequals(remarks,
"NULL"))
1126 if (not mDb[
"refine"].empty())
1127 mDb[
"refine"].front()[
"details"] = remarks;
1130 float score = float(lineCount - dropped) / lineCount;
1135 std::string Remark3Parser::program()
1137 std::string result = mName;
1140 if (regex_match(mName, m, mProgramVersion))
1141 result = m[1].str();
1146 std::string Remark3Parser::version()
1151 if (regex_match(mName, m, mProgramVersion))
1152 result = m[2].str();
1157 void Remark3Parser::storeCapture(
const char *
category, std::initializer_list<const char *>
items,
bool createNew)
1160 for (
auto item : items)
1164 std::string value = mM[capture].str();
1171 std::cerr <<
"storing: '" << value <<
"' in _" << category <<
'.' << item << std::endl;
1176 if (
iequals(category,
"refine"))
1177 cat.emplace({ {
"pdbx_refine_id", mExpMethod },
1178 {
"entry_id", mDb.name() },
1180 {
"pdbx_diffrn_id", 1 } });
1181 else if (
iequals(category,
"refine_analyze")
or iequals(category,
"pdbx_refine"))
1183 {
"pdbx_refine_id", mExpMethod },
1184 {
"entry_id", mDb.name() },
1187 else if (
iequals(category,
"refine_hist"))
1189 std::string dResHigh, dResLow;
1190 for (
auto r : mDb[
"refine"])
1192 cif::tie(dResHigh, dResLow) = r.get(
"ls_d_res_high",
"ls_d_res_low");
1196 cat.emplace({ {
"pdbx_refine_id", mExpMethod },
1197 {
"cycle_id",
"LAST" },
1198 {
"d_res_high", dResHigh.empty() ?
"." : dResHigh },
1199 {
"d_res_low", dResLow.empty() ?
"." : dResLow } });
1201 else if (
iequals(category,
"refine_ls_shell"))
1204 {
"pdbx_refine_id", mExpMethod },
1207 else if (
iequals(category,
"pdbx_refine_tls_group"))
1210 if (not mDb[
"pdbx_refine_tls"].empty())
1211 tlsID = mDb[
"pdbx_refine_tls"].back()[
"id"].as<std::string>();
1212 std::string tlsGroupID = cat.get_unique_id(
"");
1215 {
"pdbx_refine_id", mExpMethod },
1216 {
"id", tlsGroupID },
1217 {
"refine_tls_id", tlsID } });
1219 else if (
iequals(category,
"pdbx_refine_tls"))
1221 cat.emplace({ {
"pdbx_refine_id", mExpMethod },
1222 {
"method",
"refined" } });
1232 else if (
iequals(category,
"pdbx_reflns_twin"))
1235 {
"crystal_id", 1 },
1236 {
"diffrn_id", 1 } });
1238 else if (
iequals(category,
"reflns"))
1239 cat.emplace({ {
"pdbx_ordinal", cat.size() + 1 },
1240 {
"entry_id", mDb.name() },
1241 {
"pdbx_diffrn_id", 1 } });
1248 cat.back()[item] = value;
1252 void Remark3Parser::storeRefineLsRestr(
const char *
type, std::initializer_list<const char *>
items)
1257 for (
auto item : items)
1261 std::string value = mM[capture].str();
1268 r = mDb[
"refine_ls_restr"].emplace({
1269 {
"pdbx_refine_id", mExpMethod},
1278 void Remark3Parser::updateRefineLsRestr(
const char *
type, std::initializer_list<const char *>
items)
1280 auto rows = mDb[
"refine_ls_restr"].find(cif::key(
"type") ==
type and cif::key(
"pdbx_refine_id") == mExpMethod);
1282 storeRefineLsRestr(
type, items);
1288 for (
auto item : items)
1292 std::string value = mM[capture].str();
1294 if (
iequals(value,
"NULL")
or iequals(value, std::string(value.length(),
'*')))
1307 bool Remark3Parser::parse(
const std::string &expMethod, PDBRecord *r, cif::datablock &db)
1310 auto getNextLine = [&]()
1314 while (result.empty() and r !=
nullptr and r->is(
"REMARK 3"))
1325 std::string line = getNextLine();
1327 if (line !=
"REFINEMENT.")
1330 std::cerr <<
"Unexpected data in REMARK 3" << std::endl;
1334 line = getNextLine();
1336 std::regex rxp(R
"(^PROGRAM\s*:\s*(.+))"); 1339 if (not std::regex_match(line, m, rxp))
1342 std::cerr <<
"Expected valid PROGRAM line in REMARK 3" << std::endl;
1350 programScore(
const std::string &program, Remark3Parser *parser,
float score)
1357 std::string program;
1358 std::unique_ptr<Remark3Parser> parser;
1361 bool operator<(
const programScore &rhs)
const 1363 return score > rhs.score;
1367 std::vector<programScore> scores;
1369 auto tryParser = [&](Remark3Parser *p)
1371 std::unique_ptr<Remark3Parser> parser(p);
1376 score = parser->parse();
1378 catch (
const std::exception &e)
1381 std::cerr <<
"Error parsing REMARK 3 with " << parser->program() << std::endl
1382 << e.what() <<
'\n';
1387 std::cerr <<
"Score for " << parser->program() <<
": " << score << std::endl;
1391 std::string program = parser->program();
1392 std::string version = parser->version();
1394 scores.emplace_back(program, parser.release(), score);
1398 for (
auto program : cif::split<std::string>(line,
", ",
true))
1400 if (cif::starts_with(program,
"BUSTER"))
1402 else if (cif::starts_with(program,
"CNS")
or cif::starts_with(program,
"CNX"))
1404 else if (cif::starts_with(program,
"PHENIX"))
1406 else if (cif::starts_with(program,
"NUCLSQ"))
1408 else if (cif::starts_with(program,
"PROLSQ"))
1410 else if (cif::starts_with(program,
"REFMAC"))
1416 else if (cif::starts_with(program,
"SHELXL"))
1418 else if (cif::starts_with(program,
"TNT"))
1420 else if (cif::starts_with(program,
"X-PLOR"))
1423 std::cerr <<
"Skipping unknown program (" << program <<
") in REMARK 3" << std::endl;
1426 sort(scores.begin(), scores.end());
1428 bool guessProgram = scores.empty()
or scores.front().score < 0.9f;
1432 std::cerr <<
"Unknown or untrusted program in REMARK 3, trying all parsers to see if there is a match" << std::endl;
1446 bool result =
false;
1448 if (not scores.empty())
1452 sort(scores.begin(), scores.end());
1454 auto &best = scores.front();
1457 std::cerr <<
"Choosing " << best.parser->program() <<
" version '" << best.parser->version() <<
"' as refinement program. Score = " << best.score << std::endl;
1459 auto &software = db[
"software"];
1460 std::string program = best.parser->program();
1461 std::string version = best.parser->version();
1463 software.emplace({ {
"name", program },
1464 {
"classification",
"refinement" },
1465 {
"version", version },
1466 {
"pdbx_ordinal", software.size() + 1 } });
1468 best.parser->fixup();
1470 for (
auto &cat1 : best.parser->mDb)
1472 auto &cat2 = db[cat1.name()];
1475 if (cat1.name() ==
"reflns" or cat1.name() ==
"refine")
1478 cat2.emplace(cat1.front());
1482 auto r1 = cat1.front();
1483 auto r2 = cat2.front();
1485 for (
auto column : cat1.key_fields())
1486 r2[column] =
r1[column].text();
1491 for (
auto rs : cat1)
const TemplateLine kSHELXL_Template[]
void trim(std::string &s)
const TemplateLine kPHENIX_Template[]
std::initializer_list< const char * > items
bool iequals(std::string_view a, std::string_view b)
const TemplateLine kREFMAC_Template[]
void sort(struct DCEL_T *dcel)
const TemplateLine kNUCLSQ_Template[]
const TemplateLine kBusterTNT_Template[]
const TemplateLine kCNS_Template[]
const TemplateLine kXPLOR_Template[]
const TemplateLine kREFMAC5_Template[]
const TemplateLine kTNT_Template[]
bool operator<(const SparseElement &_x, const SparseElement &_y)
const TemplateLine kPROLSQ_Template[]