crystal_cif_io/grammar/structures/data_block/
mod.rs

1use std::fmt::Display;
2
3use winnow::{
4    combinator::{preceded, repeat},
5    Parser,
6};
7
8use crate::{
9    grammar::{tags_values::Value, whitespace_comments::WhiteSpace, SyntacticUnit},
10    LoopColumn,
11};
12
13pub use self::{heading::DataBlockHeading, members::DataBlockMember};
14
15use super::SingleLineData;
16
17mod heading;
18mod members;
19
20#[derive(Debug, Clone)]
21pub struct DataBlock {
22    heading: DataBlockHeading,
23    members: Vec<DataBlockMember>,
24}
25
26impl DataBlock {
27    pub fn from_heading_members(heading_member: (DataBlockHeading, Vec<DataBlockMember>)) -> Self {
28        let (heading, members) = heading_member;
29        Self { heading, members }
30    }
31
32    pub fn find_loop_column_by_tag<T: AsRef<str>>(&self, tag: T) -> Option<LoopColumn> {
33        self.members.iter().find_map(|member| {
34            if let DataBlockMember::DataItems(data_item) = member {
35                data_item.get_loop_column_values_by_tag(&tag)
36            } else {
37                None
38            }
39        })
40    }
41
42    pub fn find_single_value_by_tag<T: AsRef<str>>(&self, tag: T) -> Option<&SingleLineData> {
43        self.members.iter().find_map(|member| {
44            if let DataBlockMember::DataItems(data_item) = member {
45                data_item.get_single_value_by_tag(&tag)
46            } else {
47                None
48            }
49        })
50    }
51
52    pub fn heading(&self) -> &str {
53        self.heading.as_ref()
54    }
55
56    pub fn members(&self) -> &[DataBlockMember] {
57        &self.members
58    }
59
60    pub fn members_mut(&mut self) -> &mut Vec<DataBlockMember> {
61        &mut self.members
62    }
63}
64
65impl SyntacticUnit for DataBlock {
66    type ParseResult = Self;
67
68    type FormatOutput = String;
69
70    fn parser(input: &mut &str) -> winnow::prelude::PResult<Self::ParseResult> {
71        (
72            DataBlockHeading::parser,
73            repeat(0.., preceded(WhiteSpace::parser, DataBlockMember::parser)),
74        )
75            .map(Self::from_heading_members)
76            .parse_next(input)
77    }
78
79    fn formatted_output(&self) -> Self::FormatOutput {
80        let members = self
81            .members
82            .iter()
83            .map(|m| m.to_string())
84            .collect::<Vec<String>>()
85            .join("\n");
86        [self.heading.to_string(), members].join("\n")
87    }
88}
89
90impl Display for DataBlock {
91    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
92        write!(f, "{}", self.formatted_output())
93    }
94}
95
96#[cfg(test)]
97mod test {
98    use winnow::{
99        combinator::{peek, preceded},
100        Parser,
101    };
102
103    use crate::grammar::{
104        structures::{
105            data_block::members::DataBlockMember, data_items::DataItems,
106            tag_value_line::SingleLineData,
107        },
108        tags_values::Tag,
109        whitespace_comments::WhiteSpace,
110        SyntacticUnit,
111    };
112
113    use super::DataBlock;
114
115    #[test]
116    fn datablock_test() {
117        let mut input = r#"data_I
118
119# kfb29 (mar)
120
121#=====================================================================
122_vrf_PLAT_111_I
123;
124PROBLEM: _A ADDSYM Detects (Pseudo) Centre of Symmetry ...        100 Perc Fit
125RESPONSE:  The acid used was enantiopure (S)-malic acid and the 
126ADDSYM result is an artefact of the anion disorder.  ADDSYM reaches 
127its conclusion having excluded all the atoms of the disordered 
128anion, i.e. of the very component which is chiral. See Comment text.  
129;
130_vrf_PLAT_113_I
131;
132PROBLEM: _A ADDSYM Suggests Possible Pseudo/New Spacegroup       P-1          
133RESPONSE: .See above
134;
135
136
137# 5. Chemical Data
138_chemical_name_systematic
139;
140meso-5,5,7,12,12,14-Hexamethyl-4,11-diaza-1,8-diazoniacyclotetradecane 
141(S)-malate(2-) methanol disolvate
142;
143_chemical_name_common             ?
144_chemical_melting_point           ?
145_chemical_formula_iupac          'C16 H38 N4 2+, C4 H4 O5 2-, 2C H4 O'
146_chemical_formula_moiety         'C16 H38 N4 2+, C4 H4 O5 2-, 2C H4 O'
147_chemical_formula_sum            'C22 H50 N4 O7'
148_chemical_formula_weight          482.66
149_chemical_compound_source        'synthesised by authors, see text'
150_chemical_absolute_configuration  rm # known chiral centre
151
152loop_
153 _atom_type_symbol
154 _atom_type_description
155 _atom_type_scat_dispersion_real
156 _atom_type_scat_dispersion_imag
157 _atom_type_scat_source
158 'C'  'C'   0.0033   0.0000
159 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4'
160 'H'  'H'   0.0000   0.0000
161 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4'
162 'N'  'N'   0.0061   0.0000
163 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4'
164 'O'  'O'   0.0106   0.0000
165 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4'
166
167_symmetry_cell_setting            triclinic
168_symmetry_space_group_name_H-M    'P 1'
169_symmetry_space_group_name_Hall   'P 1'
170
171loop_
172 _symmetry_equiv_pos_as_xyz
173 'x, y, z'
174
175_cell_length_a                    8.6559(9)
176_cell_length_b                    9.3275(9)
177_cell_length_c                    10.1044(12)
178_cell_angle_alpha                 113.379(5)
179_cell_angle_beta                  108.908(4)
180_cell_angle_gamma                 100.345(4)
181_cell_volume                      662.31(12)
182_cell_formula_units_Z             1
183_cell_measurement_temperature       150(1)
184_cell_measurement_reflns_used        8456
185_cell_measurement_theta_min          3.54
186_cell_measurement_theta_max          27.61
187
188_exptl_crystal_description        plate
189_exptl_crystal_colour             colourless
190_exptl_crystal_size_max           0.30
191_exptl_crystal_size_mid           0.28
192_exptl_crystal_size_min           0.10
193_exptl_crystal_density_meas       ?
194_exptl_crystal_density_diffrn     1.210
195_exptl_crystal_density_method     'not measured'
196_exptl_crystal_F_000              266
197_exptl_absorpt_coefficient_mu     0.089
198_exptl_absorpt_correction_type    Multi-scan
199_exptl_absorpt_process_details    '(DENZO-SMN; Otwinowski & Minor, 1997)'
200_exptl_absorpt_correction_T_min   0.950  
201_exptl_absorpt_correction_T_max   0.988 
202
203_exptl_special_details
204;
205?
206;
207
208_diffrn_ambient_temperature       150(1)
209_diffrn_radiation_wavelength      0.71073
210_diffrn_radiation_type            MoK\a
211_diffrn_radiation_source          'fine-focus sealed X-ray tube'
212_diffrn_radiation_monochromator   graphite
213_diffrn_measurement_device_type   'Nonius KappaCCD'
214_diffrn_measurement_method        '\f scans, and \w scans with \k offsets'
215_diffrn_standards_decay_%         0
216_diffrn_reflns_number             8456
217_diffrn_reflns_av_R_equivalents   0.064
218_diffrn_reflns_av_sigmaI/netI     0.0848
219_diffrn_reflns_limit_h_min        -11
220_diffrn_reflns_limit_h_max        11
221_diffrn_reflns_limit_k_min        -12
222_diffrn_reflns_limit_k_max        12
223_diffrn_reflns_limit_l_min        -12
224_diffrn_reflns_limit_l_max        13
225_diffrn_reflns_theta_min          3.54
226_diffrn_reflns_theta_max          27.61
227_diffrn_reflns_theta_full              27.61
228_diffrn_measured_fraction_theta_max    0.985
229_diffrn_measured_fraction_theta_full   0.985
230_reflns_number_total              3022
231_reflns_number_gt                 1802
232_reflns_threshold_expression      I>2\s(I)
233
234_computing_data_collection        'KappaCCD Server Software (Nonius, 1997)'
235_computing_cell_refinement        'DENZO-SMN (Otwinowski & Minor, 1997)'
236_computing_data_reduction         'DENZO-SMN'
237_computing_structure_solution     'SHELXS97 (Sheldrick, 1997)'
238_computing_structure_refinement   'SHELXL97 (Sheldrick, 1997)'
239_computing_molecular_graphics     'PLATON (Spek, 2003)'
240_computing_publication_material   'SHELXL97 and PRPKAPPA (Ferguson, 1999)'
241
242#=========================================================================
243
244# 8. Refinement Data
245
246_refine_ls_structure_factor_coef  Fsqd
247_refine_ls_matrix_type            full
248_refine_ls_weighting_scheme       calc
249_refine_ls_weighting_details
250 'w = 1/[\s^2^(Fo^2^)+(0.1019P)^2^+0.0709P] where P = (Fo^2^+2Fc^2^)/3'
251_atom_sites_solution_primary      direct
252_atom_sites_solution_secondary    difmap
253_atom_sites_solution_hydrogens    geom
254_refine_ls_hydrogen_treatment     constr
255_refine_ls_extinction_method      SHELXL97
256_refine_ls_extinction_coef        0.08(2)
257_refine_ls_extinction_expression
258 'Fc^*^=kFc[1+0.001xFc^2^\l^3^/sin(2\q)]^-1/4^'
259_refine_ls_number_reflns          3022
260_refine_ls_number_parameters      333
261_refine_ls_number_restraints      23
262_refine_ls_R_factor_all           0.1174
263_refine_ls_R_factor_gt            0.0640
264_refine_ls_wR_factor_ref          0.2015
265_refine_ls_wR_factor_gt           0.1680
266_refine_ls_goodness_of_fit_ref    1.033
267_refine_ls_restrained_S_all       1.032
268_refine_ls_shift/su_max           0.001
269_refine_ls_shift/su_mean          0.000
270_refine_diff_density_max          0.360
271_refine_diff_density_min         -0.319
272
273#=========================================================================
274# 9. Atomic Coordinates and Displacement Parameters
275
276loop_
277 _atom_site_label
278 _atom_site_type_symbol
279 _atom_site_fract_x
280 _atom_site_fract_y
281 _atom_site_fract_z
282 _atom_site_U_iso_or_equiv
283 _atom_site_adp_type
284 _atom_site_occupancy
285 _atom_site_symmetry_multiplicity
286 _atom_site_calc_flag
287 _atom_site_refinement_flags
288 _atom_site_disorder_assembly
289 _atom_site_disorder_group
290N1 N 0.3490(7) 0.5886(7) 0.6152(6) 0.0348(12) Uani 1 1 d . . .
291C2 C 0.2646(9) 0.6456(9) 0.5044(8) 0.0417(17) Uani 1 1 d . . .
292C3 C 0.2031(9) 0.5122(10) 0.3277(9) 0.0454(18) Uani 1 1 d . . .
293N4 N 0.3509(7) 0.4851(7) 0.2942(6) 0.0351(13) Uani 1 1 d . . .
294C5 C 0.3038(9) 0.3576(8) 0.1258(8) 0.0427(17) Uani 1 1 d . . .
295C51 C 0.2029(11) 0.4108(11) 0.0063(8) 0.052(2) Uani 1 1 d . . .
296C52 C 0.1843(9) 0.1879(9) 0.0882(9) 0.051(2) Uani 1 1 d . . .
297C6 C 0.4699(9) 0.3468(8) 0.1112(7) 0.0409(17) Uani 1 1 d . . .
298C7 C 0.5846(9) 0.2865(9) 0.2113(8) 0.0392(16) Uani 1 1 d . . .
299C71 C 0.7346(11) 0.2657(11) 0.1687(10) 0.054(2) Uani 1 1 d . . .
300N8 N 0.6494(8) 0.4112(7) 0.3859(6) 0.0406(14) Uani 1 1 d . . .
301C9 C 0.7363(9) 0.3547(9) 0.5016(8) 0.0429(18) Uani 1 1 d . . .
302C10 C 0.8003(8) 0.4854(9) 0.6700(8) 0.0396(16) Uani 1 1 d . . .
303N11 N 0.6540(7) 0.5162(8) 0.7066(6) 0.0395(14) Uani 1 1 d . . .
304C12 C 0.7037(8) 0.6402(9) 0.8750(8) 0.0406(17) Uani 1 1 d . . .
305C121 C 0.7940(10) 0.5848(12) 0.9938(9) 0.057(2) Uani 1 1 d . . .
306C122 C 0.8195(10) 0.8099(10) 0.9186(10) 0.057(2) Uani 1 1 d . . .
307C13 C 0.5337(9) 0.6519(9) 0.8909(8) 0.0427(18) Uani 1 1 d . . .
308C14 C 0.4196(9) 0.7124(9) 0.7900(8) 0.0404(16) Uani 1 1 d . . .
309C141 C 0.2675(10) 0.7357(11) 0.8319(10) 0.055(2) Uani 1 1 d . . .
310O21 O 0.8761(18) 0.6984(15) 0.4528(14) 0.055(3) Uani 0.702(8) 1 d PD A -1
311O22 O 0.6487(12) 0.767(2) 0.352(2) 0.060(3) Uani 0.702(8) 1 d PD A -1
312O23 O 1.1226(15) 1.2848(13) 0.5314(17) 0.053(2) Uani 0.702(8) 1 d PD A -1
313O24 O 1.3506(8) 1.2325(8) 0.6507(9) 0.0422(17) Uani 0.702(8) 1 d PD A -1
314O25 O 0.8473(7) 0.9921(7) 0.3250(7) 0.0543(16) Uani 0.702(8) 1 d P A -1
315C21 C 0.8080(11) 0.7899(11) 0.4108(12) 0.042(3) Uani 0.702(8) 1 d PD A -1
316C22 C 0.9351(13) 0.9296(15) 0.4161(15) 0.0670(17) Uani 0.702(8) 1 d PD A -1
317C23 C 1.0659(14) 1.0562(15) 0.5800(15) 0.0670(17) Uani 0.702(8) 1 d PD A -1
318C24 C 1.1900(8) 1.2041(11) 0.5920(12) 0.045(3) Uani 0.702(8) 1 d PD A -1
319O41 O 0.4707(9) 0.9442(8) 0.2526(8) 0.0758(19) Uani 1 1 d . B -1
320C42 C 0.3300(13) 0.8999(12) 0.2782(10) 0.069(2) Uani 1 1 d . B -1
321O51 O 1.5287(9) 1.0569(8) 0.7487(8) 0.0758(18) Uani 1 1 d . . .
322C53 C 1.6701(12) 1.0910(10) 0.7186(10) 0.063(2) Uani 1 1 d . . .
323C31 C 0.829(3) 0.820(3) 0.461(3) 0.074(3) Uiso 0.298(8) 1 d PD A -2
324C32 C 0.956(2) 0.995(3) 0.538(2) 0.074(3) Uiso 0.298(8) 1 d PD A -2
325C33 C 1.062(3) 1.010(2) 0.450(2) 0.074(3) Uiso 0.298(8) 1 d PD A -2
326C34 C 1.179(2) 1.186(2) 0.519(2) 0.074(3) Uiso 0.298(8) 1 d PD A -2
327O31 O 0.891(6) 0.719(5) 0.490(5) 0.074(3) Uiso 0.298(8) 1 d PD A -2
328O32 O 0.671(4) 0.782(6) 0.372(6) 0.074(3) Uiso 0.298(8) 1 d PD A -2
329O33 O 1.127(5) 1.305(4) 0.531(4) 0.074(3) Uiso 0.298(8) 1 d PD A -2
330O34 O 1.337(2) 1.203(2) 0.561(2) 0.074(3) Uiso 0.298(8) 1 d PD A -2
331O35 O 1.100(2) 1.028(2) 0.679(2) 0.074(3) Uiso 0.298(8) 1 d PD A -2
332H1A H 0.4394 0.5615 0.5957 0.042 Uiso 1 1 calc R . .
333H1B H 0.2694 0.4927 0.5932 0.042 Uiso 1 1 calc R . .
334H2A H 0.3479 0.7505 0.5285 0.050 Uiso 1 1 calc R . .
335H2B H 0.1629 0.6693 0.5198 0.050 Uiso 1 1 calc R . .
336H3A H 0.1248 0.4056 0.3055 0.054 Uiso 1 1 calc R . .
337H3B H 0.1357 0.5488 0.2557 0.054 Uiso 1 1 calc R . .
338H4 H 0.4233 0.5853 0.3166 0.042 Uiso 1 1 calc R . .
339H51A H 0.0864 0.3997 0.0020 0.078 Uiso 1 1 calc R . .
340H51B H 0.1917 0.3389 -0.1006 0.078 Uiso 1 1 calc R . .
341H51C H 0.2669 0.5273 0.0421 0.078 Uiso 1 1 calc R . .
342H52A H 0.2320 0.1680 0.1788 0.076 Uiso 1 1 calc R . .
343H52B H 0.1787 0.0981 -0.0083 0.076 Uiso 1 1 calc R . .
344H52C H 0.0667 0.1901 0.0702 0.076 Uiso 1 1 calc R . .
345H6A H 0.5417 0.4591 0.1393 0.049 Uiso 1 1 calc R . .
346H6B H 0.4379 0.2715 -0.0029 0.049 Uiso 1 1 calc R . .
347H7 H 0.5120 0.1761 0.1891 0.047 Uiso 1 1 calc R . .
348H71A H 0.8043 0.3725 0.1864 0.082 Uiso 1 1 calc R . .
349H71B H 0.6883 0.1812 0.0558 0.082 Uiso 1 1 calc R . .
350H71C H 0.8083 0.2301 0.2365 0.082 Uiso 1 1 calc R . .
351H8A H 0.7276 0.5086 0.4090 0.049 Uiso 1 1 calc R . .
352H8B H 0.5564 0.4351 0.4021 0.049 Uiso 1 1 calc R . .
353H9A H 0.6518 0.2523 0.4807 0.052 Uiso 1 1 calc R . .
354H9B H 0.8356 0.3269 0.4841 0.052 Uiso 1 1 calc R . .
355H10A H 0.8688 0.4500 0.7427 0.048 Uiso 1 1 calc R . .
356H10B H 0.8784 0.5903 0.6890 0.048 Uiso 1 1 calc R . .
357H11 H 0.5790 0.4165 0.6825 0.047 Uiso 1 1 calc R . .
358H12A H 0.9022 0.5736 0.9875 0.086 Uiso 1 1 calc R . .
359H12B H 0.7162 0.4771 0.9670 0.086 Uiso 1 1 calc R . .
360H12C H 0.8214 0.6684 1.1028 0.086 Uiso 1 1 calc R . .
361H12D H 0.9325 0.8051 0.9210 0.086 Uiso 1 1 calc R . .
362H12E H 0.8375 0.8932 1.0245 0.086 Uiso 1 1 calc R . .
363H12F H 0.7634 0.8413 0.8386 0.086 Uiso 1 1 calc R . .
364H13A H 0.4617 0.5399 0.8632 0.051 Uiso 1 1 calc R . .
365H13B H 0.5661 0.7278 1.0049 0.051 Uiso 1 1 calc R . .
366H14 H 0.4930 0.8220 0.8112 0.048 Uiso 1 1 calc R . .
367H14A H 0.2035 0.7844 0.7728 0.082 Uiso 1 1 calc R . .
368H14B H 0.3131 0.8105 0.9474 0.082 Uiso 1 1 calc R . .
369H14C H 0.1886 0.6271 0.8022 0.082 Uiso 1 1 calc R . .
370H25 H 0.9017 1.0949 0.3674 0.081 Uiso 0.702(8) 1 calc PR A -1
371H22 H 1.0025 0.8756 0.3607 0.080 Uiso 0.702(8) 1 calc PR A -1
372H23A H 1.1360 1.0012 0.6275 0.080 Uiso 0.702(8) 1 calc PR A -1
373H23B H 1.0038 1.0989 0.6452 0.080 Uiso 0.702(8) 1 calc PR A -1
374H41 H 0.5415 0.9003 0.2832 0.114 Uiso 1 1 calc R B -1
375H42D H 0.3664 0.9442 0.3935 0.103 Uiso 1 1 calc R B -1
376H42E H 0.2773 0.7778 0.2229 0.103 Uiso 1 1 calc R B -1
377H42F H 0.2443 0.9455 0.2367 0.103 Uiso 1 1 calc R B -1
378H51 H 1.4668 1.1114 0.7266 0.114 Uiso 1 1 calc R . .
379H53A H 1.6645 1.1695 0.6769 0.095 Uiso 1 1 calc R . .
380H53B H 1.6697 0.9873 0.6393 0.095 Uiso 1 1 calc R . .
381H53C H 1.7776 1.1407 0.8182 0.095 Uiso 1 1 calc R . .
382H32 H 0.8992 1.0809 0.5596 0.089 Uiso 0.298(8) 1 calc PR A -2
383H33A H 1.1340 0.9393 0.4530 0.089 Uiso 0.298(8) 1 calc PR A -2
384H33B H 0.9819 0.9676 0.3363 0.089 Uiso 0.298(8) 1 calc PR A -2
385H35 H 1.0814 0.9467 0.6964 0.111 Uiso 0.298(8) 1 calc PRD A -2
386
387loop_
388 _atom_site_aniso_label
389 _atom_site_aniso_U_11
390 _atom_site_aniso_U_22
391 _atom_site_aniso_U_33
392 _atom_site_aniso_U_23
393 _atom_site_aniso_U_13
394 _atom_site_aniso_U_12
395N1 0.026(3) 0.034(3) 0.038(3) 0.014(2) 0.012(2) 0.012(2)
396C2 0.033(4) 0.044(4) 0.052(4) 0.026(4) 0.018(3) 0.016(3)
397C3 0.035(4) 0.049(4) 0.045(4) 0.022(4) 0.012(3) 0.014(3)
398N4 0.027(3) 0.031(3) 0.043(3) 0.017(3) 0.014(3) 0.006(2)
399C5 0.046(4) 0.036(4) 0.047(4) 0.019(3) 0.023(4) 0.016(3)
400C51 0.067(5) 0.057(5) 0.036(4) 0.023(4) 0.024(4) 0.027(4)
401C52 0.042(4) 0.029(3) 0.063(5) 0.014(3) 0.019(4) -0.001(3)
402C6 0.037(4) 0.034(4) 0.037(4) 0.011(3) 0.012(3) 0.006(3)
403C7 0.038(4) 0.035(3) 0.042(4) 0.018(3) 0.017(3) 0.008(3)
404C71 0.060(5) 0.065(5) 0.058(5) 0.037(5) 0.032(5) 0.038(5)
405N8 0.041(3) 0.041(3) 0.045(3) 0.028(3) 0.017(3) 0.013(3)
406C9 0.044(4) 0.050(4) 0.046(4) 0.031(4) 0.018(3) 0.024(3)
407C10 0.026(4) 0.049(4) 0.047(4) 0.029(4) 0.013(3) 0.013(3)
408N11 0.033(3) 0.041(3) 0.041(3) 0.022(3) 0.012(3) 0.010(2)
409C12 0.027(3) 0.043(4) 0.038(4) 0.019(3) 0.002(3) 0.006(3)
410C121 0.042(4) 0.074(5) 0.056(5) 0.039(4) 0.009(4) 0.027(4)
411C122 0.044(5) 0.055(5) 0.062(5) 0.025(4) 0.016(4) 0.014(4)
412C13 0.048(5) 0.050(4) 0.042(4) 0.032(4) 0.020(4) 0.021(3)
413C14 0.039(4) 0.042(4) 0.044(4) 0.022(3) 0.018(3) 0.020(3)
414C141 0.048(5) 0.073(6) 0.047(5) 0.029(4) 0.022(4) 0.026(4)
415O21 0.039(4) 0.047(5) 0.075(7) 0.039(5) 0.017(5) 0.003(4)
416O22 0.040(5) 0.039(5) 0.087(8) 0.029(6) 0.018(5) 0.007(4)
417O23 0.030(4) 0.035(4) 0.082(5) 0.034(4) 0.010(3) 0.000(3)
418O24 0.039(4) 0.029(3) 0.050(4) 0.015(3) 0.019(3) 0.006(3)
419O25 0.044(3) 0.045(3) 0.058(3) 0.029(3) 0.005(2) 0.006(2)
420C21 0.050(7) 0.025(5) 0.046(6) 0.018(5) 0.025(5) -0.002(4)
421C22 0.047(3) 0.065(3) 0.064(3) 0.045(3) -0.003(2) -0.013(2)
422C23 0.047(3) 0.065(3) 0.064(3) 0.045(3) -0.003(2) -0.013(2)
423C24 0.027(5) 0.041(5) 0.045(6) 0.016(5) 0.002(4) 0.002(4)
424O41 0.071(5) 0.068(4) 0.075(4) 0.041(4) 0.015(3) 0.017(3)
425C42 0.068(6) 0.061(5) 0.059(5) 0.024(5) 0.017(5) 0.017(5)
426O51 0.086(5) 0.071(4) 0.083(4) 0.048(4) 0.039(4) 0.025(4)
427C53 0.083(7) 0.053(5) 0.069(6) 0.043(5) 0.034(5) 0.027(5)
428
429#=========================================================================
430
431# 10. Molecular Geometry
432
433loop_
434 _geom_bond_atom_site_label_1
435 _geom_bond_atom_site_label_2
436 _geom_bond_distance
437 _geom_bond_site_symmetry_2
438 _geom_bond_publ_flag
439N1 C2 1.466(7) . no
440N1 C14 1.502(8) . no
441N1 H1A 0.92 . no
442N1 H1B 0.92 . no
443C2 C3 1.550(9) . no
444C2 H2A 0.99 . no
445C2 H2B 0.99 . no
446C3 N4 1.465(8) . no
447C3 H3A 0.99 . no
448C3 H3B 0.99 . no
449N4 C5 1.499(8) . no
450N4 H4 0.92 . no
451C5 C6 1.509(9) . no
452C5 C52 1.549(9) . no
453C5 C51 1.554(9) . no
454C51 H51A 0.98 . no
455C51 H51B 0.98 . no
456C51 H51C 0.98 . no
457C52 H52A 0.98 . no
458C52 H52B 0.98 . no
459C52 H52C 0.98 . no
460C6 C7 1.525(9) . no
461C6 H6A 0.99 . no
462C6 H6B 0.99 . no
463C7 N8 1.509(9) . no
464C7 C71 1.515(10) . no
465C7 H7 1.00 . no
466C71 H71A 0.98 . no
467C71 H71B 0.98 . no
468C71 H71C 0.98 . no
469N8 C9 1.507(7) . no
470N8 H8A 0.92 . no
471N8 H8B 0.92 . no
472C9 C10 1.480(9) . no
473C9 H9A 0.99 . no
474C9 H9B 0.99 . no
475C10 N11 1.474(8) . no
476C10 H10A 0.99 . no
477C10 H10B 0.99 . no
478N11 C12 1.484(8) . no
479N11 H11 0.92 . no
480C12 C122 1.515(10) . no
481C12 C121 1.531(8) . no
482C12 C13 1.549(9) . no
483C121 H12A 0.98 . no
484C121 H12B 0.98 . no
485C121 H12C 0.98 . no
486C122 H12D 0.98 . no
487C122 H12E 0.98 . no
488C122 H12F 0.98 . no
489C13 C14 1.529(9) . no
490C13 H13A 0.99 . no
491C13 H13B 0.99 . no
492C14 C141 1.533(10) . no
493C14 H14 1.00 . no
494C141 H14A 0.98 . no
495C141 H14B 0.98 . no
496C141 H14C 0.98 . no
497O21 C21 1.250(5) . no
498O22 C21 1.250(5) . no
499O23 C24 1.254(5) . no
500O24 C24 1.250(5) . no
501O25 C22 1.377(11) . no
502O25 H25 0.84 . no
503C21 C22 1.518(7) . no
504C22 C23 1.474(7) . no
505C22 H22 1.00 . no
506C23 C24 1.524(8) . no
507C23 H23A 0.99 . no
508C23 H23B 0.99 . no
509O41 C42 1.352(10) . no
510O41 H41 0.84 . no
511C42 H42D 0.98 . no
512C42 H42E 0.98 . no
513C42 H42F 0.98 . no
514O51 C53 1.367(9) . no
515O51 H51 0.84 . no
516C53 H53A 0.98 . no
517C53 H53B 0.98 . no
518C53 H53C 0.98 . no
519C31 O31 1.250(5) . no
520C31 O32 1.251(5) . no
521C31 C32 1.504(5) . no
522C32 O35 1.432(10) . no
523C32 C33 1.498(5) . no
524C32 H32 1.00 . no
525C33 C34 1.498(5) . no
526C33 H33A 0.99 . no
527C33 H33B 0.99 . no
528C34 O33 1.249(5) . no
529C34 O34 1.249(5) . no
530O35 H35 0.84 . no
531
532loop_
533 _geom_angle_atom_site_label_1
534 _geom_angle_atom_site_label_2
535 _geom_angle_atom_site_label_3
536 _geom_angle
537 _geom_angle_site_symmetry_1
538 _geom_angle_site_symmetry_3
539 _geom_angle_publ_flag
540C2 N1 C14 115.2(5) . . no
541C2 N1 H1A 108.5 . . no
542C14 N1 H1A 108.5 . . no
543C2 N1 H1B 108.5 . . no
544C14 N1 H1B 108.5 . . no
545H1A N1 H1B 107.5 . . no
546N1 C2 C3 111.2(5) . . no
547N1 C2 H2A 109.4 . . no
548C3 C2 H2A 109.4 . . no
549N1 C2 H2B 109.4 . . no
550C3 C2 H2B 109.4 . . no
551H2A C2 H2B 108.0 . . no
552N4 C3 C2 111.6(5) . . no
553N4 C3 H3A 109.3 . . no
554C2 C3 H3A 109.3 . . no
555N4 C3 H3B 109.3 . . no
556C2 C3 H3B 109.3 . . no
557H3A C3 H3B 108.0 . . no
558C3 N4 C5 115.4(5) . . no
559C3 N4 H4 108.4 . . no
560C5 N4 H4 108.4 . . no
561N4 C5 C6 108.6(5) . . no
562N4 C5 C52 108.7(5) . . no
563C6 C5 C52 111.6(5) . . no
564N4 C5 C51 109.9(5) . . no
565C6 C5 C51 109.2(5) . . no
566C52 C5 C51 108.8(6) . . no
567C5 C51 H51A 109.5 . . no
568C5 C51 H51B 109.5 . . no
569H51A C51 H51B 109.5 . . no
570C5 C51 H51C 109.5 . . no
571H51A C51 H51C 109.5 . . no
572H51B C51 H51C 109.5 . . no
573C5 C52 H52A 109.5 . . no
574C5 C52 H52B 109.5 . . no
575H52A C52 H52B 109.5 . . no
576C5 C52 H52C 109.5 . . no
577H52A C52 H52C 109.5 . . no
578H52B C52 H52C 109.5 . . no
579C5 C6 C7 118.0(6) . . no
580C5 C6 H6A 107.8 . . no
581C7 C6 H6A 107.8 . . no
582C5 C6 H6B 107.8 . . no
583C7 C6 H6B 107.8 . . no
584H6A C6 H6B 107.1 . . no
585N8 C7 C71 111.5(6) . . no
586N8 C7 C6 108.0(5) . . no
587C71 C7 C6 110.9(5) . . no
588N8 C7 H7 108.8 . . no
589C71 C7 H7 108.8 . . no
590C6 C7 H7 108.8 . . no
591C7 C71 H71A 109.5 . . no
592C7 C71 H71B 109.5 . . no
593H71A C71 H71B 109.5 . . no
594C7 C71 H71C 109.5 . . no
595H71A C71 H71C 109.5 . . no
596H71B C71 H71C 109.5 . . no
597C9 N8 C7 114.8(5) . . no
598C9 N8 H8A 108.6 . . no
599C7 N8 H8A 108.6 . . no
600C9 N8 H8B 108.6 . . no
601C7 N8 H8B 108.6 . . no
602H8A N8 H8B 107.5 . . no
603C10 C9 N8 111.5(5) . . no
604C10 C9 H9A 109.3 . . no
605N8 C9 H9A 109.3 . . no
606C10 C9 H9B 109.3 . . no
607N8 C9 H9B 109.3 . . no
608H9A C9 H9B 108.0 . . no
609N11 C10 C9 111.1(5) . . no
610N11 C10 H10A 109.4 . . no
611C9 C10 H10A 109.4 . . no
612N11 C10 H10B 109.4 . . no
613C9 C10 H10B 109.4 . . no
614H10A C10 H10B 108.0 . . no
615C10 N11 C12 115.5(5) . . no
616C10 N11 H11 108.4 . . no
617C12 N11 H11 108.4 . . no
618N11 C12 C122 110.7(6) . . no
619N11 C12 C121 112.2(6) . . no
620C122 C12 C121 110.2(6) . . no
621N11 C12 C13 107.8(5) . . no
622C122 C12 C13 109.8(6) . . no
623C121 C12 C13 106.0(5) . . no
624C12 C121 H12A 109.5 . . no
625C12 C121 H12B 109.5 . . no
626H12A C121 H12B 109.5 . . no
627C12 C121 H12C 109.5 . . no
628H12A C121 H12C 109.5 . . no
629H12B C121 H12C 109.5 . . no
630C12 C122 H12D 109.5 . . no
631C12 C122 H12E 109.5 . . no
632H12D C122 H12E 109.5 . . no
633C12 C122 H12F 109.5 . . no
634H12D C122 H12F 109.5 . . no
635H12E C122 H12F 109.5 . . no
636C14 C13 C12 117.5(5) . . no
637C14 C13 H13A 107.9 . . no
638C12 C13 H13A 107.9 . . no
639C14 C13 H13B 107.9 . . no
640C12 C13 H13B 107.9 . . no
641H13A C13 H13B 107.2 . . no
642N1 C14 C13 109.6(5) . . no
643N1 C14 C141 109.5(6) . . no
644C13 C14 C141 111.5(5) . . no
645N1 C14 H14 108.7 . . no
646C13 C14 H14 108.7 . . no
647C141 C14 H14 108.7 . . no
648C14 C141 H14A 109.5 . . no
649C14 C141 H14B 109.5 . . no
650H14A C141 H14B 109.5 . . no
651C14 C141 H14C 109.5 . . no
652H14A C141 H14C 109.5 . . no
653H14B C141 H14C 109.5 . . no
654O21 C21 O22 126.8(11) . . no
655O21 C21 C22 114.1(10) . . no
656O22 C21 C22 118.7(10) . . no
657O25 C22 C23 115.1(7) . . no
658O25 C22 C21 110.8(8) . . no
659C23 C22 C21 113.2(7) . . no
660O25 C22 H22 105.6 . . no
661C23 C22 H22 105.6 . . no
662C21 C22 H22 105.6 . . no
663C22 C23 C24 115.1(7) . . no
664C22 C23 H23A 108.5 . . no
665C24 C23 H23A 108.5 . . no
666C22 C23 H23B 108.5 . . no
667C24 C23 H23B 108.5 . . no
668H23A C23 H23B 107.5 . . no
669O24 C24 O23 123.2(9) . . no
670O24 C24 C23 119.4(8) . . no
671O23 C24 C23 117.2(8) . . no
672C53 O51 H51 109.5 . . no
673O51 C53 H53A 109.5 . . no
674O51 C53 H53B 109.5 . . no
675H53A C53 H53B 109.5 . . no
676O51 C53 H53C 109.5 . . no
677H53A C53 H53C 109.5 . . no
678H53B C53 H53C 109.5 . . no
679O31 C31 O32 123(4) . . no
680O31 C31 C32 116(3) . . no
681O32 C31 C32 121(3) . . no
682O35 C32 C33 95.1(15) . . no
683O35 C32 C31 110(2) . . no
684C33 C32 C31 112.7(5) . . no
685O35 C32 H32 112.8 . . no
686C33 C32 H32 112.8 . . no
687C31 C32 H32 112.8 . . no
688C34 C33 C32 113.1(5) . . no
689C34 C33 H33A 109.0 . . no
690C32 C33 H33A 109.0 . . no
691C34 C33 H33B 109.0 . . no
692C32 C33 H33B 109.0 . . no
693H33A C33 H33B 107.8 . . no
694O33 C34 O34 122(3) . . no
695O33 C34 C33 124(3) . . no
696O34 C34 C33 113.2(19) . . no
697C32 O35 H35 109.5 . . no
698
699
700loop_
701 _geom_torsion_atom_site_label_1
702 _geom_torsion_atom_site_label_2
703 _geom_torsion_atom_site_label_3
704 _geom_torsion_atom_site_label_4
705 _geom_torsion
706 _geom_torsion_site_symmetry_1
707 _geom_torsion_site_symmetry_2
708 _geom_torsion_site_symmetry_3
709 _geom_torsion_site_symmetry_4
710 _geom_torsion_publ_flag
711N1 C2 C3 N4 -65.0(9) . . . . y
712C2 C3 N4 C5 179.9(7) . . . . y
713C3 N4 C5 C6 179.2(7) . . . . y
714N4 C5 C6 C7 63.6(9) . . . . y
715C5 C6 C7 N8 -63.6(9) . . . . y
716C6 C7 N8 C9 168.9(7) . . . . y
717C7 N8 C9 C10 178.4(7) . . . . y
718O22 C21 C22 C23 119.7(14) . . . . y
719C21 C22 C23 C24 -176.7(10) . . . . y
720N8 C9 C10 N11 65.8(9) . . . . y
721C9 C10 N11 C12 177.4(7) . . . . y
722C10 N11 C12 C13 -178.5(7) . . . . y
723N11 C12 C13 C14 -62.2(9) . . . . y
724C12 C13 C14 N1 64.9(9) . . . . y
725C13 C14 N1 C2 -169.1(7) . . . . y
726C14 N1 C2 C3 177.7(7) . . . . y
727O25 C22 C23 C24 -47.8(15) . . . . y
728C22 C23 C24 O23 55.5(16) . . . . y
729
730
731
732loop_
733_geom_hbond_atom_site_label_D
734_geom_hbond_atom_site_label_H
735_geom_hbond_atom_site_label_A
736_geom_hbond_distance_DH
737_geom_hbond_distance_HA
738_geom_hbond_distance_DA
739_geom_hbond_angle_DHA
740_geom_hbond_site_symmetry_A
741_geom_hbond_publ_flag
742#
743# Hydrogen bonding scheme
744# ======== ======= ======
745#
746# D   H   A    D-H  H...A  D...A     D-H...A  symm  publ
747# -   -   -    ---  -----  -----     -------  ----  ----
748  N1  H1A N11  0.92 2.05   2.799(8)   138      .     y
749  N8  H8B N4   0.92 2.00   2.758(8)   138      .     y
750  O25 H25 O23  0.84 1.98   2.721(12)  146      .     y
751  O35 H35 O31  0.84 2.14   2.60(5)    114      .     n
752  N4  H4  O22  0.92 2.17   3.046(15)  160      .     y
753  N4  H4  O32  0.92 2.29   3.17(4)    159      .     n
754  N8  H8A O21  0.92 1.78   2.702(14)  179      .     y
755  N8  H8A O31  0.92 1.87   2.78(5)    171      .     n
756  O41 H41 O22  0.84 1.89   2.708(16)  165      .     y
757  O51 H51 O24  0.84 1.86   2.691(9)   168      .     y
758  O51 H51 O34  0.84 2.25   3.005(18)  150      .     n
759  N1  H1B O23  0.92 1.85   2.760(11)  172  1_445 y
760  N1  H1B O33  0.92 1.68   2.60(4)    173  1_445 n
761  N11 H11 O24  0.92 2.21   3.094(8)   161  1_445 y
762  N11 H11 O34  0.92 2.18   3.06(2)    158  1_445 n
763  C2  H2B O21  0.99 2.45   3.39(2)    159  1_455 n
764####################################################################
765#                         END of CIF
766####################################################################
767"#;
768        let parse_result = DataBlock::parser(&mut input);
769        match parse_result {
770            Ok(d) => {
771                println!(
772                    "{}",
773                    d.find_single_value_by_tag("chemical_formula_sum").unwrap()
774                )
775                // println!(
776                //     "{:?}",
777                //     preceded(WhiteSpace::parser, SingleLineData::parser).parse_next(&mut input)
778                // );
779                // println!("{:?}", input.lines().next())
780            }
781            Err(e) => {
782                println!("{e}");
783                println!(
784                    "{:?}",
785                    preceded(WhiteSpace::parser, SingleLineData::parser).parse_next(&mut input)
786                );
787            }
788        }
789    }
790}