From c8c31892ef2ade3be130c6bb368fdced4e745195 Mon Sep 17 00:00:00 2001 From: Paul Saxe Date: Wed, 9 Aug 2023 09:47:01 -0400 Subject: [PATCH 1/3] Adding more support for bz2 files, and cleaning up definition of ranges of structures. --- read_structure_step/formats/cif/cif.py | 156 +++- read_structure_step/formats/mop/obabel.py | 18 +- read_structure_step/formats/sdf/sdf.py | 74 +- read_structure_step/formats/xyz/xyz.py | 38 +- read_structure_step/read.py | 2 +- .../read_structure_parameters.py | 4 +- read_structure_step/utils.py | 40 + tests/data/ABENEB01.cif | 748 ++++++++++++++++ tests/data/benzene.cif | 230 +++++ tests/data/tmQM_test.cif | 804 ++++++++++++++++++ tests/data/tmQM_test.cif.bz2 | Bin 0 -> 7033 bytes tests/data/tmQM_test.cif.gz | Bin 0 -> 8007 bytes tests/test_cif.py | 50 ++ tests/test_formats.py | 69 +- tests/test_utils.py | 7 +- 15 files changed, 2114 insertions(+), 126 deletions(-) create mode 100644 tests/data/ABENEB01.cif create mode 100644 tests/data/benzene.cif create mode 100644 tests/data/tmQM_test.cif create mode 100644 tests/data/tmQM_test.cif.bz2 create mode 100644 tests/data/tmQM_test.cif.gz create mode 100644 tests/test_cif.py diff --git a/read_structure_step/formats/cif/cif.py b/read_structure_step/formats/cif/cif.py index a203e58..98eeb98 100644 --- a/read_structure_step/formats/cif/cif.py +++ b/read_structure_step/formats/cif/cif.py @@ -2,13 +2,17 @@ The cif/mmcif reader/writer """ +import bz2 +import gzip import logging from pathlib import Path +import time from ..registries import register_format_checker from ..registries import register_reader from ..registries import set_format_metadata from seamm_util.printing import FormattedText as __ +from ...utils import parse_indices logger = logging.getLogger(__name__) @@ -56,7 +60,7 @@ def load_cif( add_hydrogens=False, system_db=None, system=None, - indices="1:end", + indices="1-end", subsequent_as_configurations=False, system_name="from file", configuration_name="sequential", @@ -90,7 +94,7 @@ def load_cif( system : System = None The system to use if adding subsequent structures as configurations. - indices : str = "1:end" + indices : str = "1-end" The generalized indices (slices, SMARTS, etc.) to select structures from a file containing multiple structures. @@ -123,14 +127,47 @@ def load_cif( if isinstance(path, str): path = Path(path) - path.expanduser().resolve() + path = path.expanduser().resolve() + + # Get the information for progress output, if requested. + n_records = 0 + with ( + gzip.open(path, mode="rt") + if path.suffix == ".gz" + else bz2.open(path, mode="rt") + if path.suffix == ".bz2" + else open(path, "r") + ) as fd: + for line in fd: + if line[0:5] == "data_": + n_records += 1 + if printer is not None: + printer("") + printer(f" The CIF file contains {n_records} data blocks.") + last_percent = 0 + t0 = time.time() + last_t = t0 + + # Get the indices to pick + indices = parse_indices(indices, n_records) + n_structures = len(indices) + if n_structures == 0: + return + stop = indices[-1] configurations = [] + record_no = 0 structure_no = 0 lines = [] in_block = False block_name = "" - with open(path, "r") as fd: + with ( + gzip.open(path, mode="rt") + if path.suffix == ".gz" + else bz2.open(path, mode="rt") + if path.suffix == ".bz2" + else open(path, "r") + ) as fd: for line in fd: if line[0:5] == "data_": logger.debug(f"Found block {line}") @@ -138,6 +175,14 @@ def load_cif( in_block = True block_name = line[5:].strip() else: + record_no += 1 + if record_no > stop: + lines = [] + break + if record_no not in indices: + lines = [] + continue + structure_no += 1 if structure_no > 1: if subsequent_as_configurations: @@ -183,54 +228,71 @@ def load_cif( else: configuration.name = str(configuration_name) logger.debug(f" added system {system_db.n_systems}: {block_name}") + + if printer: + percent = int(100 * structure_no / n_structures) + if percent > last_percent: + t1 = time.time() + if t1 - last_t >= 60: + t = int(t1 - t0) + rate = structure_no / (t1 - t0) + t_left = int((n_structures - structure_no) / rate) + printer( + f"\t{structure_no:6} ({percent}%) structures read " + f"in {t} seconds. About {t_left} seconds remaining." + ) + last_t = t1 + last_percent = percent block_name = line[5:].strip() lines = [] lines.append(line) if len(lines) > 0: # The last block just ends at the end of the file - structure_no += 1 - if structure_no > 1: - if subsequent_as_configurations: - configuration = system.create_configuration() - else: - system = system_db.create_system() - configuration = system.create_configuration() - - text = configuration.from_cif_text("\n".join(lines)) - logger.debug(f" added system {system_db.n_systems}: {block_name}") - if text != "": - printer("\n") - printer(__(text, indent=4 * " ")) - - configurations.append(configuration) - - # Set the system name - if system_name is not None and system_name != "": - lower_name = str(system_name).lower() - if "from file" in lower_name: - system.name = block_name - elif "file name" in lower_name: - system.name = path.stem - elif "formula" in lower_name: - system.name = configuration.formula()[0] - elif "empirical formula" in lower_name: - system.name = configuration.formula()[1] - else: - system.name = str(system_name) - - # And the configuration name - if configuration_name is not None and configuration_name != "": - lower_name = str(configuration_name).lower() - if "from file" in lower_name: - configuration.name = block_name - elif "file name" in lower_name: - configuration.name = path.stem - elif "formula" in lower_name: - configuration.name = configuration.formula()[0] - elif "empirical formula" in lower_name: - configuration.name = configuration.formula()[1] - else: - configuration.name = str(configuration_name) + record_no += 1 + if record_no in indices: + structure_no += 1 + if structure_no > 1: + if subsequent_as_configurations: + configuration = system.create_configuration() + else: + system = system_db.create_system() + configuration = system.create_configuration() + + text = configuration.from_cif_text("\n".join(lines)) + logger.debug(f" added system {system_db.n_systems}: {block_name}") + if text != "": + printer("\n") + printer(__(text, indent=4 * " ")) + + configurations.append(configuration) + + # Set the system name + if system_name is not None and system_name != "": + lower_name = str(system_name).lower() + if "from file" in lower_name: + system.name = block_name + elif "file name" in lower_name: + system.name = path.stem + elif "formula" in lower_name: + system.name = configuration.formula()[0] + elif "empirical formula" in lower_name: + system.name = configuration.formula()[1] + else: + system.name = str(system_name) + + # And the configuration name + if configuration_name is not None and configuration_name != "": + lower_name = str(configuration_name).lower() + if "from file" in lower_name: + configuration.name = block_name + elif "file name" in lower_name: + configuration.name = path.stem + elif "formula" in lower_name: + configuration.name = configuration.formula()[0] + elif "empirical formula" in lower_name: + configuration.name = configuration.formula()[1] + else: + configuration.name = str(configuration_name) return configurations diff --git a/read_structure_step/formats/mop/obabel.py b/read_structure_step/formats/mop/obabel.py index 6871a12..4d9d181 100644 --- a/read_structure_step/formats/mop/obabel.py +++ b/read_structure_step/formats/mop/obabel.py @@ -17,6 +17,7 @@ from openbabel import openbabel from read_structure_step.formats.registries import register_reader import seamm +from seamm_util import Q_ from .find_mopac import find_mopac if "OpenBabel_version" not in globals(): @@ -239,6 +240,8 @@ def load_mop( # Finally, the MOPAC test data usually has three comment lines to start, with a # single number on the second line, which is the heat of formation calculated by # MOPAC. If this format is found the HOF is captured. + kcal2kJ = Q_(1, "kcal").m_as("kJ") + run_mopac = False keywords = [] description_lines = [] @@ -605,9 +608,10 @@ def load_mop( key, "float", description="The reference energy from MOPAC", + units="kJ/mol", noerror=True, ) - properties.put(key, energy) + properties.put(key, energy * kcal2kJ) # Handle properties encoded in the description if len(description_lines) == 2 and "=" in description_lines[1]: @@ -651,7 +655,19 @@ def load_mop( description=f"stderr for the {keyword}.", noerror=True, ) + if ( + "heat capacity" in keyword + or "enthalpy" in keyword + or "entropy" in keyword + ): + stderr = float(stderr) * kcal2kJ system_properties.put(new_keyword, stderr) + if ( + "heat capacity" in keyword + or "enthalpy" in keyword + or "entropy" in keyword + ): + value = float(value) * kcal2kJ system_properties.put(keyword, value) except Exception as e: print(f"{e}: {key}") diff --git a/read_structure_step/formats/sdf/sdf.py b/read_structure_step/formats/sdf/sdf.py index 416da91..1859598 100644 --- a/read_structure_step/formats/sdf/sdf.py +++ b/read_structure_step/formats/sdf/sdf.py @@ -16,6 +16,7 @@ from ..registries import register_reader from ..registries import register_writer from ..registries import set_format_metadata +from ...utils import parse_indices if "OpenBabel_version" not in globals(): OpenBabel_version = None @@ -61,7 +62,7 @@ def load_sdf( add_hydrogens=True, system_db=None, system=None, - indices="1:end", + indices="1-end", subsequent_as_configurations=False, system_name="Canonical SMILES", configuration_name="sequential", @@ -96,7 +97,7 @@ def load_sdf( system : System = None The system to use if adding subsequent structures as configurations. - indices : str = "1:end" + indices : str = "1-end" The generalized indices (slices, SMARTS, etc.) to select structures from a file containing multiple structures. @@ -131,10 +132,10 @@ def load_sdf( if isinstance(path, str): path = Path(path) - path.expanduser().resolve() + path = path.expanduser().resolve() # Get the information for progress output, if requested. - n_structures = 0 + n_records = 0 with ( gzip.open(path, mode="rt") if path.suffix == ".gz" @@ -144,32 +145,26 @@ def load_sdf( ) as fd: for line in fd: if line[0:4] == "$$$$": - n_structures += 1 + n_records += 1 if printer is not None: printer("") - printer(f" The SDF file contains {n_structures} structures.") + printer(f" The SDF file contains {n_records} structures.") last_percent = 0 t0 = time.time() last_t = t0 # Get the indices to pick - tmp = indices.replace("end", str(n_structures + 1)) - tmp = tmp.split(":") - start = int(tmp[0]) - if len(tmp) == 3: - step = int(tmp[2]) - else: - step = 1 - if len(tmp) == 2: - stop = int(tmp[1]) - else: - stop = start + 1 - indices = list(range(start, stop, step)) + indices = parse_indices(indices, n_records) + n_structures = len(indices) + if n_structures == 0: + return + stop = indices[-1] obConversion = openbabel.OBConversion() obConversion.SetInAndOutFormats("sdf", "smi") configurations = [] + record_no = 0 structure_no = 0 n_errors = 0 obMol = openbabel.OBMol() @@ -187,22 +182,45 @@ def load_sdf( if line[0:4] != "$$$$": continue - structure_no += 1 - if structure_no >= stop: + record_no += 1 + if record_no > stop: + text = "" break - if structure_no not in indices: + if record_no not in indices: + text = "" continue obConversion.ReadString(obMol, text) + # See if the system and configuration names are encoded in the title + title = obMol.GetTitle() + sysname = title + confname = title + have_sysname = False + if "SEAMM=" in title: + for tmp in title.split("|"): + if "SEAMM=" in tmp and "/" in tmp: + sysname, confname = tmp.split("=", 1)[1].split("/") + sysname = sysname.strip() + confname = confname.strip() + have_sysname = True + if add_hydrogens: obMol.AddHydrogens() + structure_no += 1 if structure_no > 1: if subsequent_as_configurations: configuration = system.create_configuration() else: - system = system_db.create_system() + if have_sysname and "from file" in system_name.lower(): + # Reuse the system if it exists + if system_db.system_exists(sysname): + system = system_db.get_system(sysname) + else: + system = system_db.create_system() + else: + system = system_db.create_system() configuration = system.create_configuration() try: @@ -210,7 +228,7 @@ def load_sdf( except Exception as e: n_errors += 1 printer("") - printer(f" Error handling entry {structure_no} in the SDF file:") + printer(f" Error handling entry {record_no} in the SDF file:") printer(" " + str(e)) printer(" Text of the entry is") printer(" " + 60 * "-") @@ -228,7 +246,7 @@ def load_sdf( if system_name is not None and system_name != "": lower_name = system_name.lower() if "from file" in lower_name: - system.name = obMol.GetTitle() + system.name = sysname elif "canonical smiles" in lower_name: system.name = configuration.canonical_smiles elif "smiles" in lower_name: @@ -240,13 +258,13 @@ def load_sdf( if configuration_name is not None and configuration_name != "": lower_name = configuration_name.lower() if "from file" in lower_name: - configuration.name = obMol.GetTitle() + configuration.name = confname elif "canonical smiles" in lower_name: configuration.name = configuration.canonical_smiles elif "smiles" in lower_name: configuration.name = configuration.smiles elif lower_name == "sequential": - configuration.name = str(structure_no) + configuration.name = str(record_no) else: configuration.name = configuration_name @@ -269,7 +287,7 @@ def load_sdf( t1 = time.time() rate = structure_no / (t1 - t0) printer( - f" Read {structure_no - n_errors - 1} structures in {t1 - t0:.1f} " + f" Read {structure_no - n_errors} structures in {t1 - t0:.1f} " f"seconds = {rate:.2f} per second" ) if n_errors > 0: @@ -396,7 +414,7 @@ def write_sdf( obMol = configuration.to_OBMol(properties="all") system = configuration.system - title = f"{system.name}/{configuration.name}" + title = f"SEAMM={system.name}/{configuration.name}" obMol.SetTitle(title) if remove_hydrogens == "nonpolar": diff --git a/read_structure_step/formats/xyz/xyz.py b/read_structure_step/formats/xyz/xyz.py index bd9f9df..deb78ea 100644 --- a/read_structure_step/formats/xyz/xyz.py +++ b/read_structure_step/formats/xyz/xyz.py @@ -17,6 +17,7 @@ from openbabel import openbabel from read_structure_step.formats.registries import register_reader +from ...utils import parse_indices if "OpenBabel_version" not in globals(): OpenBabel_version = None @@ -114,7 +115,7 @@ def load_xyz( add_hydrogens=True, system_db=None, system=None, - indices="1:end", + indices="1-end", subsequent_as_configurations=False, system_name="Canonical SMILES", configuration_name="sequential", @@ -145,7 +146,7 @@ def load_xyz( system : System = None The system to use if adding subsequent structures as configurations. - indices : str = "1:end" + indices : str = "1-end" The generalized indices (slices, SMARTS, etc.) to select structures from a file containing multiple structures. @@ -217,7 +218,7 @@ def load_xyz( path = path.expanduser().resolve() # Get the information for progress output, if requested. - n_structures = 0 + n_records = 0 last_line = 0 with ( gzip.open(path, mode="rt") @@ -229,35 +230,29 @@ def load_xyz( for line in fd: last_line += 1 if line.strip() == "": - n_structures += 1 + n_records += 1 # may not have blank line at end if line.strip() != "": - n_structures += 1 + n_records += 1 if printer is not None: printer("") - printer(f" The XYZ file contains {n_structures} structures.") + printer(f" The XYZ file contains {n_records} structures.") last_percent = 0 t0 = time.time() last_t = t0 # Get the indices to pick - tmp = indices.replace("end", str(n_structures + 1)) - tmp = tmp.split(":") - start = int(tmp[0]) - if len(tmp) == 3: - step = int(tmp[2]) - else: - step = 1 - if len(tmp) == 2: - stop = int(tmp[1]) - else: - stop = start + 1 - indices = list(range(start, stop, step)) + indices = parse_indices(indices, n_records) + n_structures = len(indices) + if n_structures == 0: + return + stop = indices[-1] obConversion = openbabel.OBConversion() obConversion.SetInFormat("xyz") configurations = [] + record_no = 0 structure_no = 0 n_errors = 0 obMol = openbabel.OBMol() @@ -278,10 +273,10 @@ def load_xyz( line_no += 1 lines.append(line) if total_lines == last_line or line_no > 3 and line.strip() == "": - structure_no += 1 - if structure_no >= stop: + record_no += 1 + if record_no > stop: break - if structure_no not in indices: + if record_no not in indices: continue # End of block, so examine the first lines and see which format @@ -382,6 +377,7 @@ def load_xyz( if add_hydrogens: obMol.AddHydrogens() + structure_no += 1 if structure_no > 1: if subsequent_as_configurations: configuration = system.create_configuration() diff --git a/read_structure_step/read.py b/read_structure_step/read.py index 11db8c7..299b76d 100644 --- a/read_structure_step/read.py +++ b/read_structure_step/read.py @@ -14,7 +14,7 @@ def read( add_hydrogens=False, system_db=None, system=None, - indices="1:end", + indices="1-end", subsequent_as_configurations=False, system_name=None, configuration_name=None, diff --git a/read_structure_step/read_structure_parameters.py b/read_structure_step/read_structure_parameters.py index 4660a9f..03fb5b0 100644 --- a/read_structure_step/read_structure_parameters.py +++ b/read_structure_step/read_structure_parameters.py @@ -66,10 +66,10 @@ class ReadStructureParameters(seamm.Parameters): "help_text": ("Whether to add missing hydrogen atoms."), }, "indices": { - "default": "1:end", + "default": "1-end", "kind": "string", "default_units": "", - "enumeration": tuple(), + "enumeration": ("1-end",), "format_string": "s", "description": "Structures to read:", "help_text": ("The set of structures to read"), diff --git a/read_structure_step/utils.py b/read_structure_step/utils.py index 87cc655..f61995f 100644 --- a/read_structure_step/utils.py +++ b/read_structure_step/utils.py @@ -74,3 +74,43 @@ def sanitize_file_format(file_format): file_format = "." + file_format return file_format + + +def parse_indices(text, maximum): + """Return a list of values in the given index expression. + + Handles expressions like "1-10 by 2, 20-end" which would result in + 1,3,5,7,9,20,21,22,23,24,25 if there were 25 items in the list. + """ + result = set() + for indices in text.split(","): + increment = 1 + if "to" in indices: + tmp = indices.split("to") + else: + if ":" in indices: + tmp = indices.split(":") + increment = 0 + else: + tmp = indices.split("-") + if len(tmp) == 1: + if tmp[0].strip() == "end": + result.add(maximum) + else: + result.add(int(tmp[0].strip())) + else: + start = int(tmp[0].strip()) + end = tmp[1] + if "by" in end: + end, by = end.split("by") + by = int(by.strip()) + else: + by = 1 + end = end.strip() + if end == "end": + end = maximum + increment = 1 + else: + end = int(end) + result.update(range(start, end + increment, by)) + return sorted(result) diff --git a/tests/data/ABENEB01.cif b/tests/data/ABENEB01.cif new file mode 100644 index 0000000..828b735 --- /dev/null +++ b/tests/data/ABENEB01.cif @@ -0,0 +1,748 @@ +####################################################################### +# +# This file contains crystal structure data downloaded from the +# Cambridge Structural Database (CSD) hosted by the Cambridge +# Crystallographic Data Centre (CCDC). +# +# Full information about CCDC data access policies and citation +# guidelines are available at http://www.ccdc.cam.ac.uk/access/V1 +# +# Audit and citation data items may have been added by the CCDC. +# Please retain this information to preserve the provenance of +# this file and to allow appropriate attribution of the data. +# +####################################################################### + +data_I +_audit_block_doi 10.5517/ccdc.csd.cc1q96qy +_database_code_depnum_ccdc_archive 'CCDC 1587780' +loop_ +_citation_id +_citation_doi +_citation_year +1 10.1107/S2053229617017077 2018 +#Added by publCIF + +_audit_update_record +; +2017-11-28 deposited with the CCDC. 2023-08-02 downloaded from the CCDC. +; +_iucr_compatibility_tag ACTA95 + +#============================================================================== + + +# start Validation Reply Form +_vrf_DIFF019_I +; +PROBLEM: _diffrn_standards_number is missing +RESPONSE: area detector data +; +_vrf_DIFF020_I +; +PROBLEM: _diffrn_standards_interval_count and +RESPONSE: area detector data +; +_vrf_DIFF022_I +; +PROBLEM: _diffrn_standards_decay_% is missing +RESPONSE: area detector data +; +#Added by publCIF + +loop_ +_geom_extra_tableC_col_1 +_geom_extra_tableC_col_2 +_geom_extra_tableC_col_3 +_geom_extra_tableC_col_4 +_geom_extra_tableC_col_5 +'T (K)' O11...O21^i^ O12...O22^iii^ O31...F11^ii^ O32...F12^iv^ +210(2) 2.645(5) 2.661(5) 3.054(5) 3.322(6) +190(2) 2.648(5) 2.660(5) 3.050(5) 3.315(5) +170(2) 2.652(4) 2.657(5) 3.047(4) 3.307(5) +150(2) 2.643(4) 2.659(4) 3.044(4) 3.297(4) +130(2) 2.645(4) 2.658(4) 3.037(4) 3.294(4) +110(2) 2.647(4) 2.659(4) 3.030(3) 3.287(4) + +_geom_extra_table_head_C +; +Temperature-dependent intermolecular hydrogen-bond distances +; + +_geom_table_footnote_C +; +Symmetry codes: (i) -x+1, -y+1, -z; +(ii) x, -y+3/2, z-1/2; +(iii) -x, -y, -z; +(iv) x, -y+1/2, z-1/2. +; + +loop_ +_geom_extra_tableB_col_1 +_geom_extra_tableB_col_2 +_geom_extra_tableB_col_3 +_geom_extra_tableB_col_4 +_geom_extra_tableB_col_5 +_geom_extra_tableB_col_6 +_geom_extra_tableB_col_7 +'T (K)' 'a (\%A)' 'b (\%A)' 'c (\%A)' '\b (\%)' +'V (\%A^3^)' 'Twin obliquity (\%)' +210(2) 23.241(4) 3.7219(10) 15.684(2) 109.742(9) 1276.9(5) 0.022 +190(2) 23.229(5) 3.7120(9) 15.6765(18) 109.750(10) 1272.2(4) 0.029 +170(2) 23.215(4) 3.7031(6) 15.6654(15) 109.765(8) 1267.4(3) 0.047 +150(2) 23.201(3) 3.6943(5) 15.6528(11) 109.759(7) 1262.6(2) 0.045 +130(2) 23.189(3) 3.6864(5) 15.6401(13) 109.746(8) 1258.3(2) 0.038 +110(2) 23.180(3) 3.6795(4) 15.6317(17) 109.735(8) 1254.9(3) 0.030 + +_geom_extra_table_head_B +; +Temperature-dependent unit-cell parameters of polymorph II +; + +_geom_table_footnote_B +; +The crystal was cooled from 210(2) to 110(2) K in steps of 20 K. Unit-cell +parameters were obtained from 360\% \f scans by post-refinement of integrated +data with EVAL15 (4148--5093 reflections; Schreurs et al., +2010). The +detector position was kept fixed during the measurement. +; + +_geom_table_footnote_A +; +Reflection indices are based on the orthorhombic unit cell setting with +a = 15.63, b = 43.63 and c = 3.68 \%A. Reflection +intensities were derived from calculated structure factors with the twin law +applied and a perfect twin fraction of 50%. +; + +loop_ +_geom_extra_tableA_col_1 +_geom_extra_tableA_col_2 +_geom_extra_tableA_col_3 +_geom_extra_tableA_col_4 +hkl 'h+k = 2n' hk0 +'h+k = 2n' +0kl 'k = 2n' h00 'h = 2n' +h0l 'h = 2n' 0k0 'k = 2n' +hk0 'h = 2n' 00l 'l = 2n' +hk0 'k = 2n' . . + + + + +_geom_extra_table_head_A +; +Reflection conditions in the twinned data set +; +_publcif_datablock.id {bb6a9713-0b45-4de2-98e9-1f53c436fa95} + +# publcif _publ_body_element loop end + +_audit_creation_method SHELXL-2017/1 +_shelx_SHELXL_version_number 2017/1 +_chemical_name_systematic +; +5-Fluorosalicylic acid +; +_chemical_name_common ? +_chemical_melting_point ? +_chemical_formula_iupac 'C7 H5 F O3' +_chemical_formula_moiety 'C7 H5 F O3' +_chemical_formula_sum 'C7 H5 F O3' +_chemical_formula_weight 156.11 + +loop_ +_atom_type_symbol +_atom_type_description +_atom_type_scat_dispersion_real +_atom_type_scat_dispersion_imag +_atom_type_scat_source +C C 0.0033 0.0016 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' +H H 0.0000 0.0000 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' +F F 0.0171 0.0103 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' +O O 0.0106 0.0060 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' + +_space_group_crystal_system monoclinic +_space_group_IT_number 14 +_space_group_name_H-M_alt 'P 21/c' +_space_group_name_Hall '-P 2ybc' + +_shelx_space_group_comment +; +The symmetry employed for this shelxl refinement is uniquely defined +by the following loop, which should always be used as a source of +symmetry information in preference to the above space-group names. +They are only intended as comments. +; + +loop_ +_space_group_symop_operation_xyz +'x, y, z' +'-x, y+1/2, -z+1/2' +'-x, -y, -z' +'x, -y-1/2, z-1/2' + +_cell_length_a 23.1729(14) +_cell_length_b 3.6802(3) +_cell_length_c 15.6312(8) +_cell_angle_alpha 90 +_cell_angle_beta 109.728(6) +_cell_angle_gamma 90 +_cell_volume 1254.79(15) +_cell_formula_units_Z 8 +_cell_measurement_temperature 110(2) +_cell_measurement_reflns_used 15239 +_cell_measurement_theta_min 1.83 +_cell_measurement_theta_max 27.48 + +loop_ +_diffrn_orient_matrix_type +_diffrn_orient_matrix_UB_11 +_diffrn_orient_matrix_UB_12 +_diffrn_orient_matrix_UB_13 +_diffrn_orient_matrix_UB_21 +_diffrn_orient_matrix_UB_22 +_diffrn_orient_matrix_UB_23 +_diffrn_orient_matrix_UB_31 +_diffrn_orient_matrix_UB_32 +_diffrn_orient_matrix_UB_33 +'Nonius RMAT' -0.0330460 0.1829725 -0.0060045 -0.0311950 -0.1744366 -0.0382383 +-0.0060666 -0.0997194 0.0558718 + +_exptl_crystal_description plate +_exptl_crystal_colour colourless +_exptl_crystal_density_meas ? +_exptl_crystal_density_method ? +_exptl_crystal_density_diffrn 1.653 +_exptl_crystal_F_000 640 +_exptl_transmission_factor_min ? +_exptl_transmission_factor_max ? +_exptl_crystal_size_max 0.27 +_exptl_crystal_size_mid 0.21 +_exptl_crystal_size_min 0.04 +_exptl_absorpt_coefficient_mu 0.148 +_shelx_estimated_absorpt_T_min ? +_shelx_estimated_absorpt_T_max ? +_exptl_absorpt_correction_type numerical +_exptl_absorpt_correction_T_min 0.6939 +_exptl_absorpt_correction_T_max 1.0000 +_exptl_absorpt_process_details +; +(SADABS; Krause et al., 2015) +; +_exptl_absorpt_special_details ? +_diffrn_ambient_temperature 110(2) +_diffrn_radiation_wavelength 0.71073 +_diffrn_radiation_type MoK\a +_diffrn_source 'sealed tube' +_diffrn_measurement_device_type 'Bruker Kappa APEXII' +_diffrn_measurement_method '\f and \w scans' +_diffrn_detector_area_resol_mean ? +_diffrn_reflns_number 30602 +_diffrn_reflns_av_unetI/netI 0.0347 +_diffrn_reflns_av_R_equivalents 0.0642 +_diffrn_reflns_limit_h_min -30 +_diffrn_reflns_limit_h_max 30 +_diffrn_reflns_limit_k_min -4 +_diffrn_reflns_limit_k_max 4 +_diffrn_reflns_limit_l_min -20 +_diffrn_reflns_limit_l_max 19 +_diffrn_reflns_theta_min 1.867 +_diffrn_reflns_theta_max 27.491 +_diffrn_reflns_theta_full 25.242 +_diffrn_measured_fraction_theta_max 1.000 +_diffrn_measured_fraction_theta_full 1.000 +_diffrn_reflns_Laue_measured_fraction_max 1.000 +_diffrn_reflns_Laue_measured_fraction_full 1.000 +_diffrn_reflns_point_group_measured_fraction_max 1.000 +_diffrn_reflns_point_group_measured_fraction_full 1.000 +_reflns_number_total 2884 +_reflns_number_gt 2386 +_reflns_threshold_expression 'I > 2\s(I)' +_reflns_Friedel_coverage 0.000 +_reflns_Friedel_fraction_max . +_reflns_Friedel_fraction_full . + +_reflns_special_details +; + Reflections were merged by SHELXL according to the crystal + class for the calculation of statistics and refinement. + + _reflns_Friedel_fraction is defined as the number of unique + Friedel pairs measured divided by the number that would be + possible theoretically, ignoring centric projections and + systematic absences. +; + +_computing_data_collection +; +APEX3 (Bruker, 2016) +; + +_computing_cell_refinement +; +PEAKREF (Schreurs, 2016) +; + +_computing_data_reduction +; +EVAL15 (Schreurs et al., 2010) and SADABS (Krause et al., +2015) +; + +_computing_structure_solution +; +SHELXT (Sheldrick, 2015a) +; + +_computing_structure_refinement +; +SHELXL2017 (Sheldrick, 2015b) +; + +_computing_molecular_graphics +; +PLATON (Spek, 2009) +; + +_computing_publication_material +; +publCIF (Westrip, 2010) +; + +_refine_special_details +; + efined as a 2-component twin +; +_refine_ls_structure_factor_coef Fsqd +_refine_ls_matrix_type full +_refine_ls_weighting_scheme calc +_refine_ls_weighting_details +'w=1/[\s^2^(Fo^2^)+(0.0731P)^2^+0.4868P] where P=(Fo^2^+2Fc^2^)/3' +_atom_sites_solution_primary dual +_atom_sites_solution_secondary difmap +_atom_sites_solution_hydrogens difmap +_refine_ls_hydrogen_treatment constr +_refine_ls_extinction_method none +_refine_ls_extinction_coef . +_refine_ls_number_reflns 2884 +_refine_ls_number_parameters 204 +_refine_ls_number_restraints 0 +_refine_ls_R_factor_all 0.0631 +_refine_ls_R_factor_gt 0.0473 +_refine_ls_wR_factor_ref 0.1226 +_refine_ls_wR_factor_gt 0.1133 +_refine_ls_goodness_of_fit_ref 1.053 +_refine_ls_restrained_S_all 1.053 +_refine_ls_shift/su_max 0.000 +_refine_ls_shift/su_mean 0.000 + +loop_ +_atom_site_label +_atom_site_type_symbol +_atom_site_fract_x +_atom_site_fract_y +_atom_site_fract_z +_atom_site_U_iso_or_equiv +_atom_site_adp_type +_atom_site_occupancy +_atom_site_site_symmetry_order +_atom_site_calc_flag +_atom_site_refinement_flags_posn +_atom_site_refinement_flags_adp +_atom_site_refinement_flags_occupancy +_atom_site_disorder_assembly +_atom_site_disorder_group +F11 F 0.37637(8) 0.4284(5) 0.32426(10) 0.0235(4) Uani 1 1 d . . . . . +O11 O 0.49467(9) 0.4087(5) 0.11432(12) 0.0198(5) Uani 1 1 d . . . . . +H11O H 0.518303 0.390822 0.083928 0.030 Uiso 1 1 calc R U . . . +O21 O 0.43470(9) 0.6756(6) -0.01370(14) 0.0189(5) Uani 1 1 d . . . . . +O31 O 0.32536(9) 0.9067(6) -0.02534(13) 0.0189(4) Uani 1 1 d . . . . . +H31O H 0.355419 0.882858 -0.043422 0.028 Uiso 1 1 calc R U . . . +C11 C 0.39756(12) 0.6221(7) 0.10943(18) 0.0137(5) Uani 1 1 d . . . . . +C21 C 0.34068(12) 0.7843(7) 0.06108(19) 0.0139(6) Uani 1 1 d . . . . . +C31 C 0.29715(12) 0.8263(7) 0.1037(2) 0.0170(6) Uani 1 1 d . . . . . +H31 H 0.258631 0.933751 0.071594 0.020 Uiso 1 1 calc R U . . . +C41 C 0.30959(12) 0.7131(8) 0.19201(19) 0.0160(6) Uani 1 1 d . . . . . +H41 H 0.280138 0.745701 0.221390 0.019 Uiso 1 1 calc R U . . . +C51 C 0.36549(12) 0.5513(7) 0.23758(18) 0.0166(6) Uani 1 1 d . . . . . +C61 C 0.40960(12) 0.5044(7) 0.19938(17) 0.0145(5) Uani 1 1 d . . . . . +H61 H 0.447691 0.394723 0.232620 0.017 Uiso 1 1 calc R U . . . +C71 C 0.44369(12) 0.5704(7) 0.06512(18) 0.0138(5) Uani 1 1 d . . . . . +F12 F 0.12270(8) -0.1498(5) 0.44878(11) 0.0271(5) Uani 1 1 d . . . . . +O12 O 0.00509(9) -0.1177(6) 0.11867(12) 0.0210(5) Uani 1 1 d . . . . . +H12O H -0.020011 -0.100787 0.065548 0.032 Uiso 1 1 calc R U . . . +O22 O 0.06700(9) 0.1506(6) 0.05439(14) 0.0202(5) Uani 1 1 d . . . . . +O32 O 0.17965(9) 0.2931(6) 0.15292(14) 0.0213(5) Uani 1 1 d . . . . . +H32O H 0.148360 0.312280 0.106257 0.032 Uiso 1 1 calc R U . . . +C12 C 0.10439(12) 0.0503(7) 0.21348(18) 0.0149(5) Uani 1 1 d . . . . . +C22 C 0.16289(13) 0.1804(7) 0.2237(2) 0.0157(6) Uani 1 1 d . . . . . +C32 C 0.20716(12) 0.1943(8) 0.3101(2) 0.0173(6) Uani 1 1 d . . . . . +H32 H 0.247111 0.281184 0.317137 0.021 Uiso 1 1 calc R U . . . +C42 C 0.19354(14) 0.0831(8) 0.3856(2) 0.0207(6) Uani 1 1 d . . . . . +H42 H 0.223687 0.092787 0.444439 0.025 Uiso 1 1 calc R U . . . +C52 C 0.13573(13) -0.0412(7) 0.37363(18) 0.0172(6) Uani 1 1 d . . . . . +C62 C 0.09072(12) -0.0621(7) 0.29029(19) 0.0159(5) Uani 1 1 d . . . . . +H62 H 0.051093 -0.150876 0.284567 0.019 Uiso 1 1 calc R U . . . +C72 C 0.05744(12) 0.0321(7) 0.12241(18) 0.0150(6) Uani 1 1 d . . . . . + +loop_ +_atom_site_aniso_label +_atom_site_aniso_U_11 +_atom_site_aniso_U_22 +_atom_site_aniso_U_33 +_atom_site_aniso_U_23 +_atom_site_aniso_U_13 +_atom_site_aniso_U_12 +F11 0.0365(10) 0.0293(9) 0.0086(9) 0.0004(7) 0.0126(7) -0.0006(7) +O11 0.0203(10) 0.0295(11) 0.0129(11) 0.0054(8) 0.0100(8) 0.0071(8) +O21 0.0215(11) 0.0258(11) 0.0119(11) 0.0068(8) 0.0089(8) 0.0058(8) +O31 0.0213(10) 0.0236(10) 0.0141(10) 0.0052(8) 0.0088(8) 0.0051(8) +C11 0.0193(13) 0.0119(12) 0.0104(13) -0.0022(9) 0.0059(10) -0.0026(10) +C21 0.0204(13) 0.0105(12) 0.0117(14) -0.0034(10) 0.0068(11) -0.0009(10) +C31 0.0208(14) 0.0125(13) 0.0170(15) -0.0004(10) 0.0055(12) 0.0023(10) +C41 0.0185(12) 0.0168(13) 0.0175(14) -0.0049(10) 0.0124(11) -0.0044(10) +C51 0.0264(14) 0.0158(12) 0.0084(12) -0.0006(10) 0.0068(11) -0.0058(11) +C61 0.0200(13) 0.0131(12) 0.0090(12) -0.0022(10) 0.0030(10) 0.0000(10) +C71 0.0177(13) 0.0126(12) 0.0116(13) -0.0031(10) 0.0058(10) -0.0008(10) +F12 0.0381(11) 0.0341(11) 0.0119(9) 0.0025(7) 0.0122(8) -0.0026(8) +O12 0.0216(11) 0.0300(12) 0.0122(11) 0.0000(8) 0.0066(8) -0.0046(8) +O22 0.0263(11) 0.0238(11) 0.0129(11) 0.0011(8) 0.0098(9) -0.0046(8) +O32 0.0216(10) 0.0299(12) 0.0149(11) 0.0011(8) 0.0095(9) -0.0050(9) +C12 0.0227(14) 0.0096(12) 0.0138(13) -0.0012(9) 0.0080(11) 0.0017(10) +C22 0.0202(14) 0.0125(13) 0.0175(15) -0.0015(10) 0.0103(12) -0.0002(10) +C32 0.0179(14) 0.0142(14) 0.0194(16) -0.0020(10) 0.0056(12) -0.0029(10) +C42 0.0308(16) 0.0146(14) 0.0155(15) -0.0012(10) 0.0061(12) 0.0017(11) +C52 0.0290(14) 0.0116(13) 0.0140(13) 0.0014(10) 0.0112(12) 0.0026(11) +C62 0.0218(14) 0.0114(12) 0.0167(13) -0.0016(10) 0.0095(12) -0.0003(10) +C72 0.0200(13) 0.0122(13) 0.0159(14) -0.0011(10) 0.0100(11) -0.0006(10) + +_geom_special_details +; + All esds (except the esd in the dihedral angle between two l.s. planes) + are estimated using the full covariance matrix. The cell esds are taken + into account individually in the estimation of esds in distances, angles + and torsion angles; correlations between esds in cell parameters are only + used when they are defined by crystal symmetry. An approximate (isotropic) + treatment of cell esds is used for estimating esds involving l.s. planes. +; + +loop_ +_geom_bond_atom_site_label_1 +_geom_bond_atom_site_label_2 +_geom_bond_distance +_geom_bond_site_symmetry_2 +_geom_bond_publ_flag +F11 C51 1.369(3) . y +O11 C71 1.314(3) . y +O11 H11O 0.8400 . ? +O21 C71 1.240(3) . y +O31 C21 1.353(3) . y +O31 H31O 0.8400 . ? +C11 C61 1.406(4) . ? +C11 C21 1.411(4) . ? +C11 C71 1.469(4) . ? +C21 C31 1.392(4) . ? +C31 C41 1.376(4) . ? +C31 H31 0.9500 . ? +C41 C51 1.385(4) . ? +C41 H41 0.9500 . ? +C51 C61 1.358(4) . ? +C61 H61 0.9500 . ? +F12 C52 1.367(3) . y +O12 C72 1.316(3) . y +O12 H12O 0.8400 . ? +O22 C72 1.236(3) . y +O32 C22 1.356(3) . y +O32 H32O 0.8400 . ? +C12 C22 1.395(4) . ? +C12 C62 1.404(4) . ? +C12 C72 1.473(4) . ? +C22 C32 1.394(4) . ? +C32 C42 1.382(4) . ? +C32 H32 0.9500 . ? +C42 C52 1.368(4) . ? +C42 H42 0.9500 . ? +C52 C62 1.369(4) . ? +C62 H62 0.9500 . ? + +loop_ +_geom_angle_atom_site_label_1 +_geom_angle_atom_site_label_2 +_geom_angle_atom_site_label_3 +_geom_angle +_geom_angle_site_symmetry_1 +_geom_angle_site_symmetry_3 +_geom_angle_publ_flag +C71 O11 H11O 109.5 . . ? +C21 O31 H31O 109.5 . . ? +C61 C11 C21 120.0(2) . . ? +C61 C11 C71 120.1(2) . . ? +C21 C11 C71 119.9(2) . . ? +O31 C21 C31 116.9(2) . . ? +O31 C21 C11 123.9(2) . . ? +C31 C21 C11 119.2(3) . . ? +C41 C31 C21 120.4(3) . . ? +C41 C31 H31 119.8 . . ? +C21 C31 H31 119.8 . . ? +C31 C41 C51 119.3(2) . . ? +C31 C41 H41 120.4 . . ? +C51 C41 H41 120.4 . . ? +C61 C51 F11 118.6(2) . . ? +C61 C51 C41 122.7(2) . . ? +F11 C51 C41 118.6(2) . . ? +C51 C61 C11 118.4(2) . . ? +C51 C61 H61 120.8 . . ? +C11 C61 H61 120.8 . . ? +O21 C71 O11 122.6(2) . . ? +O21 C71 C11 121.5(2) . . ? +O11 C71 C11 115.9(2) . . ? +C72 O12 H12O 109.5 . . ? +C22 O32 H32O 109.5 . . ? +C22 C12 C62 119.6(2) . . ? +C22 C12 C72 119.9(2) . . ? +C62 C12 C72 120.5(2) . . ? +O32 C22 C32 117.3(3) . . ? +O32 C22 C12 123.1(3) . . ? +C32 C22 C12 119.5(3) . . ? +C42 C32 C22 120.7(3) . . ? +C42 C32 H32 119.7 . . ? +C22 C32 H32 119.7 . . ? +C52 C42 C32 118.6(3) . . ? +C52 C42 H42 120.7 . . ? +C32 C42 H42 120.7 . . ? +F12 C52 C42 118.1(3) . . ? +F12 C52 C62 118.9(2) . . ? +C42 C52 C62 123.0(3) . . ? +C52 C62 C12 118.6(2) . . ? +C52 C62 H62 120.7 . . ? +C12 C62 H62 120.7 . . ? +O22 C72 O12 122.7(2) . . ? +O22 C72 C12 121.8(2) . . ? +O12 C72 C12 115.5(2) . . ? + +loop_ +_geom_torsion_atom_site_label_1 +_geom_torsion_atom_site_label_2 +_geom_torsion_atom_site_label_3 +_geom_torsion_atom_site_label_4 +_geom_torsion +_geom_torsion_site_symmetry_1 +_geom_torsion_site_symmetry_2 +_geom_torsion_site_symmetry_3 +_geom_torsion_site_symmetry_4 +_geom_torsion_publ_flag +C61 C11 C21 O31 179.7(2) . . . . ? +C71 C11 C21 O31 -1.5(4) . . . . ? +C61 C11 C21 C31 0.2(4) . . . . ? +C71 C11 C21 C31 179.1(2) . . . . ? +O31 C21 C31 C41 -179.1(2) . . . . ? +C11 C21 C31 C41 0.4(4) . . . . ? +C21 C31 C41 C51 -1.1(4) . . . . ? +C31 C41 C51 C61 1.3(4) . . . . ? +C31 C41 C51 F11 -177.7(2) . . . . ? +F11 C51 C61 C11 178.3(2) . . . . ? +C41 C51 C61 C11 -0.7(4) . . . . ? +C21 C11 C61 C51 -0.1(4) . . . . ? +C71 C11 C61 C51 -178.9(2) . . . . ? +C61 C11 C71 O21 -179.1(3) . . . . y +C21 C11 C71 O21 2.1(4) . . . . y +C61 C11 C71 O11 0.6(4) . . . . y +C21 C11 C71 O11 -178.3(2) . . . . y +C62 C12 C22 O32 179.8(2) . . . . ? +C72 C12 C22 O32 -0.2(4) . . . . ? +C62 C12 C22 C32 0.5(4) . . . . ? +C72 C12 C22 C32 -179.6(3) . . . . ? +O32 C22 C32 C42 -179.8(2) . . . . ? +C12 C22 C32 C42 -0.4(4) . . . . ? +C22 C32 C42 C52 0.1(4) . . . . ? +C32 C42 C52 F12 -179.9(2) . . . . ? +C32 C42 C52 C62 0.3(4) . . . . ? +F12 C52 C62 C12 179.9(2) . . . . ? +C42 C52 C62 C12 -0.2(4) . . . . ? +C22 C12 C62 C52 -0.2(4) . . . . ? +C72 C12 C62 C52 179.9(2) . . . . ? +C22 C12 C72 O22 -4.6(4) . . . . y +C62 C12 C72 O22 175.3(2) . . . . y +C22 C12 C72 O12 175.4(2) . . . . y +C62 C12 C72 O12 -4.7(4) . . . . y + +loop_ +_geom_hbond_atom_site_label_D +_geom_hbond_atom_site_label_H +_geom_hbond_atom_site_label_A +_geom_hbond_distance_DH +_geom_hbond_distance_HA +_geom_hbond_distance_DA +_geom_hbond_angle_DHA +_geom_hbond_site_symmetry_A +_geom_hbond_publ_flag +O11 H11O O21 0.84 1.81 2.643(3) 176 3_665 yes +O31 H31O O21 0.84 1.90 2.620(3) 144 . yes +O31 H31O F11 0.84 2.38 3.028(3) 134 4_575 yes +O12 H12O O22 0.84 1.83 2.659(3) 168 3 yes +O32 H32O O22 0.84 1.88 2.597(3) 143 . yes +O32 H32O F12 0.84 2.64 3.287(3) 135 4_565 yes + +_refine_diff_density_max 0.573 +_refine_diff_density_min -0.269 +_refine_diff_density_rms 0.078 + +_shelx_res_file +; +TITL m0189c + m0189c.res + created by SHELXL-2017/1 at 09:45:17 on 14-Aug-2017 +CELL 0.71073 23.17287 3.68017 15.63123 90.0 109.728 90.0 +ZERR 8 0.00142 0.00029 0.00078 0.0 0.006 0.0 +LATT 1 +SYMM -x, y+0.5, 0.5-z +SFAC C H F O +UNIT 56 40 8 24 +TEMP -163 +L.S. 15 +FMAP 2 +PLAN -20 +ACTA +BOND $H +CONF +EQIV $1 1-x, 1-y, -z +EQIV $2 x, 1.5-y, z-0.5 +EQIV $3 -x, -y, -z +EQIV $4 x, 0.5-y, z-0.5 +HTAB O11 O21_$1 +HTAB O31 O21 +HTAB O31 F11_$2 +HTAB O12 O22_$3 +HTAB O32 O22 +HTAB O32 F12_$4 +TWIN 1 0 1 0 -1 0 0 0 -1 +WGHT 0.073100 0.486800 +BASF 0.49483 +FVAR 0.73029 +F11 3 0.376370 0.428411 0.324257 11.00000 0.03647 0.02929 = + 0.00860 0.00042 0.01259 -0.00064 +O11 4 0.494666 0.408655 0.114316 11.00000 0.02026 0.02948 = + 0.01294 0.00540 0.01001 0.00710 +AFIX 147 +H11O 2 0.518303 0.390822 0.083928 11.00000 -1.50000 +AFIX 0 +O21 4 0.434698 0.675555 -0.013699 11.00000 0.02154 0.02576 = + 0.01188 0.00683 0.00892 0.00583 +O31 4 0.325363 0.906719 -0.025341 11.00000 0.02131 0.02360 = + 0.01409 0.00521 0.00881 0.00514 +AFIX 147 +H31O 2 0.355419 0.882858 -0.043422 11.00000 -1.50000 +AFIX 0 +C11 1 0.397563 0.622143 0.109434 11.00000 0.01933 0.01192 = + 0.01042 -0.00221 0.00587 -0.00257 +C21 1 0.340678 0.784283 0.061083 11.00000 0.02038 0.01054 = + 0.01171 -0.00344 0.00681 -0.00094 +C31 1 0.297152 0.826303 0.103689 11.00000 0.02084 0.01254 = + 0.01704 -0.00039 0.00551 0.00229 +AFIX 43 +H31 2 0.258631 0.933751 0.071594 11.00000 -1.20000 +AFIX 0 +C41 1 0.309586 0.713147 0.192009 11.00000 0.01853 0.01684 = + 0.01747 -0.00493 0.01239 -0.00440 +AFIX 43 +H41 2 0.280138 0.745701 0.221390 11.00000 -1.20000 +AFIX 0 +C51 1 0.365493 0.551307 0.237582 11.00000 0.02636 0.01581 = + 0.00838 -0.00059 0.00677 -0.00582 +C61 1 0.409600 0.504436 0.199379 11.00000 0.02002 0.01311 = + 0.00899 -0.00215 0.00305 -0.00002 +AFIX 43 +H61 2 0.447691 0.394723 0.232620 11.00000 -1.20000 +AFIX 0 +C71 1 0.443688 0.570400 0.065120 11.00000 0.01775 0.01258 = + 0.01163 -0.00310 0.00578 -0.00080 +F12 3 0.122701 -0.149812 0.448776 11.00000 0.03806 0.03405 = + 0.01195 0.00252 0.01215 -0.00259 +O12 4 0.005094 -0.117739 0.118665 11.00000 0.02156 0.03004 = + 0.01216 -0.00005 0.00659 -0.00463 +AFIX 147 +H12O 2 -0.020011 -0.100787 0.065548 11.00000 -1.50000 +AFIX 0 +O22 4 0.067000 0.150620 0.054394 11.00000 0.02627 0.02379 = + 0.01289 0.00113 0.00975 -0.00458 +O32 4 0.179649 0.293118 0.152916 11.00000 0.02155 0.02994 = + 0.01486 0.00110 0.00946 -0.00501 +AFIX 147 +H32O 2 0.148360 0.312280 0.106257 11.00000 -1.50000 +AFIX 0 +C12 1 0.104389 0.050320 0.213483 11.00000 0.02273 0.00959 = + 0.01380 -0.00121 0.00804 0.00172 +C22 1 0.162890 0.180370 0.223726 11.00000 0.02020 0.01250 = + 0.01748 -0.00154 0.01029 -0.00015 +C32 1 0.207159 0.194323 0.310075 11.00000 0.01793 0.01418 = + 0.01937 -0.00199 0.00559 -0.00291 +AFIX 43 +H32 2 0.247111 0.281184 0.317137 11.00000 -1.20000 +AFIX 0 +C42 1 0.193539 0.083090 0.385551 11.00000 0.03079 0.01458 = + 0.01553 -0.00118 0.00606 0.00167 +AFIX 43 +H42 2 0.223687 0.092787 0.444439 11.00000 -1.20000 +AFIX 0 +C52 1 0.135727 -0.041226 0.373627 11.00000 0.02898 0.01158 = + 0.01403 0.00144 0.01120 0.00255 +C62 1 0.090723 -0.062148 0.290295 11.00000 0.02175 0.01138 = + 0.01672 -0.00155 0.00947 -0.00027 +AFIX 43 +H62 2 0.051093 -0.150876 0.284567 11.00000 -1.20000 +AFIX 0 +C72 1 0.057438 0.032139 0.122412 11.00000 0.01999 0.01216 = + 0.01587 -0.00113 0.01005 -0.00064 +HKLF 4 + + + + +REM m0189c +REM R1 = 0.0473 for 2386 Fo > 4sig(Fo) and 0.0631 for all 2884 data +REM 204 parameters refined using 0 restraints + +END + +WGHT 0.0728 0.4978 + +REM Highest difference peak 0.573, deepest hole -0.269, 1-sigma level 0.078 +Q1 1 0.3781 0.0962 0.3279 11.00000 0.05 0.57 +Q2 1 0.0026 -0.4368 0.1191 11.00000 0.05 0.46 +Q3 1 0.4933 0.1114 0.1094 11.00000 0.05 0.43 +Q4 1 0.1204 -0.4077 0.4485 11.00000 0.05 0.41 +Q5 1 0.4296 0.9233 -0.0194 11.00000 0.05 0.40 +Q6 1 0.0696 0.3821 0.0470 11.00000 0.05 0.40 +Q7 1 0.3670 0.7177 0.0830 11.00000 0.05 0.36 +Q8 1 0.1053 0.4049 0.2044 11.00000 0.05 0.35 +Q9 1 0.0831 0.0525 0.1682 11.00000 0.05 0.35 +Q10 1 0.1834 0.1852 0.2629 11.00000 0.05 0.34 +Q11 1 0.0887 -0.4787 0.2889 11.00000 0.05 0.32 +Q12 1 0.4100 0.0482 0.2020 11.00000 0.05 0.31 +Q13 1 0.4427 0.9745 0.0670 11.00000 0.05 0.30 +Q14 1 0.3672 0.9642 0.2324 11.00000 0.05 0.30 +Q15 1 0.3156 0.6517 -0.0352 11.00000 0.05 0.30 +Q16 1 0.3993 0.8568 0.1178 11.00000 0.05 0.29 +Q17 1 0.1117 -0.0197 0.3357 11.00000 0.05 0.28 +Q18 1 0.1405 0.4456 0.3680 11.00000 0.05 0.27 +Q19 1 -0.0401 -0.2040 -0.0219 11.00000 0.05 0.27 +Q20 1 -0.0504 -0.1249 -0.0165 11.00000 0.05 0.27 +; +_shelx_res_checksum 70272 + +loop_ +_publcif_info_exptl_table_extra_item +sin_theta_over_lambda_max + +loop_ +_publcif_info_exptl_table_header_item +? + + + +_publcif_funding_html +;The X-ray diffractometer has been finanzed by the Netherlands Organization for +Scientific Research (NWO). +; diff --git a/tests/data/benzene.cif b/tests/data/benzene.cif new file mode 100644 index 0000000..e459b3f --- /dev/null +++ b/tests/data/benzene.cif @@ -0,0 +1,230 @@ +#------------------------------------------------------------------------------ +#$Date: 2019-11-28 16:15:34 +0200 (Thu, 28 Nov 2019) $ +#$Revision: 244091 $ +#$URL: file:///home/coder/svn-repositories/cod/cif/7/23/82/7238223.cif $ +#------------------------------------------------------------------------------ +# +# This file is available in the Crystallography Open Database (COD), +# http://www.crystallography.net/ +# +# All data on this site have been placed in the public domain by the +# contributors. +# +data_7238223 +loop_ +_publ_author_name +'Nayak, Susanta K.' +'Sathishkumar, Ranganathan' +'Row, T. N. Guru' +_publ_section_title +; + Directing role of functional groups in selective generation of + C--H⋯\p interactions: In situ cryo-crystallographic studies on + benzyl derivatives +; +_journal_issue 10 +_journal_name_full CrystEngComm +_journal_page_first 3112 +_journal_paper_doi 10.1039/c001190h +_journal_volume 12 +_journal_year 2010 +_chemical_compound_source 'see text' +_chemical_formula_moiety 'C6 H6' +_chemical_formula_sum 'C6 H6' +_chemical_formula_weight 78.11 +_chemical_name_common benzene +_chemical_name_systematic +; +benzene +; +_space_group_IT_number 61 +_space_group_name_Hall '-P 2ac 2ab' +_space_group_name_H-M_alt 'P b c a' +_symmetry_cell_setting orthorhombic +_symmetry_Int_Tables_number 61 +_symmetry_space_group_name_Hall '-P 2ac 2ab' +_symmetry_space_group_name_H-M 'P b c a' +_atom_sites_solution_hydrogens geom +_atom_sites_solution_primary direct +_atom_sites_solution_secondary difmap +_cell_angle_alpha 90 +_cell_angle_beta 90 +_cell_angle_gamma 90 +_cell_formula_units_Z 4 +_cell_length_a 6.914(2) +_cell_length_b 7.476(3) +_cell_length_c 9.563(1) +_cell_measurement_reflns_used 475 +_cell_measurement_temperature 150(2) +_cell_measurement_theta_max 27.97 +_cell_measurement_theta_min 0.97 +_cell_volume 494.3(2) +_computing_cell_refinement SMART +_computing_data_collection 'SMART (Bruker, 1998)' +_computing_data_reduction 'SAINT (Bruker, 1998)' +_computing_molecular_graphics +'Ortep-3 for Windows (Farrugia, 1997) and CAMERON (Watkin et al., 1993)' +_computing_publication_material 'PLATON (Spek, 2003)' +_computing_structure_refinement 'SHELXL-97 (Sheldrick, 1997)' +_computing_structure_solution 'SHELXTL V6.14 (Bruker, 2000)' +_diffrn_ambient_temperature 150(2) +_diffrn_measured_fraction_theta_full 1.000 +_diffrn_measured_fraction_theta_max 0.973 +_diffrn_measurement_device_type 'Bruker SMART CCD area detector' +_diffrn_measurement_method '\f and \w scans' +_diffrn_radiation_monochromator graphite +_diffrn_radiation_source 'fine-focus sealed tube' +_diffrn_radiation_type MoK\a +_diffrn_radiation_wavelength 0.71073 +_diffrn_reflns_av_R_equivalents 0.0747 +_diffrn_reflns_av_sigmaI/netI 0.0535 +_diffrn_reflns_limit_h_max 9 +_diffrn_reflns_limit_h_min -8 +_diffrn_reflns_limit_k_max 9 +_diffrn_reflns_limit_k_min -9 +_diffrn_reflns_limit_l_max 12 +_diffrn_reflns_limit_l_min -12 +_diffrn_reflns_number 4674 +_diffrn_reflns_reduction_process +; +; +_diffrn_reflns_theta_full 25.00 +_diffrn_reflns_theta_max 28.02 +_diffrn_reflns_theta_min 4.26 +_exptl_absorpt_coefficient_mu 0.059 +_exptl_absorpt_correction_T_max 0.9854 +_exptl_absorpt_correction_T_min 0.9808 +_exptl_absorpt_correction_type multi-scan +_exptl_absorpt_process_details 'SADABS, (Sheldrick, 1996)' +_exptl_crystal_colour colorless +_exptl_crystal_density_diffrn 1.050 +_exptl_crystal_density_method 'not measured' +_exptl_crystal_description plate +_exptl_crystal_F_000 168 +_exptl_crystal_size_max 0.33 +_exptl_crystal_size_mid 0.26 +_exptl_crystal_size_min 0.25 +_refine_diff_density_max 0.174 +_refine_diff_density_min -0.132 +_refine_diff_density_rms 0.030 +_refine_ls_goodness_of_fit_ref 1.061 +_refine_ls_hydrogen_treatment constr +_refine_ls_matrix_type full +_refine_ls_number_parameters 28 +_refine_ls_number_reflns 583 +_refine_ls_number_restraints 0 +_refine_ls_restrained_S_all 1.061 +_refine_ls_R_factor_all 0.1197 +_refine_ls_R_factor_gt 0.0554 +_refine_ls_shift/su_max 0.000 +_refine_ls_shift/su_mean 0.000 +_refine_ls_structure_factor_coef Fsqd +_refine_ls_weighting_details +'calc w=1/[\s^2^(Fo^2^)+(0.0488P)^2^+0.0119P] where P=(Fo^2^+2Fc^2^)/3' +_refine_ls_weighting_scheme calc +_refine_ls_wR_factor_gt 0.0991 +_refine_ls_wR_factor_ref 0.1159 +_reflns_number_gt 335 +_reflns_number_total 583 +_reflns_threshold_expression I>2\s(I) +_cod_data_source_file c001190h.txt +_cod_data_source_block a +_cod_depositor_comments +; +The following automatic conversions were performed: + +data item '_symmetry_cell_setting' value 'Orthorhombic' was changed +to 'orthorhombic' in accordance with the +/home/saulius/struct/COD-crude-data/automatic-downloads/DataCite-retrospective/RSC/depositions/lib/dictionaries/cif_core.dic +dictionary named 'cif_core.dic' version 2.4.2 last updated on +2011-04-26. + +Automatic conversion script +Id: cif_fix_values 6909 2019-04-08 15:41:33Z antanas +; +_cod_database_code 7238223 +loop_ +_symmetry_equiv_pos_site_id +_symmetry_equiv_pos_as_xyz +1 x,y,z +2 1/2-x,-y,1/2+z +3 1/2+x,1/2-y,-z +4 -x,1/2+y,1/2-z +5 -x,-y,-z +6 1/2+x,y,1/2-z +7 1/2-x,1/2+y,z +8 x,1/2-y,1/2+z +loop_ +_atom_site_label +_atom_site_type_symbol +_atom_site_fract_x +_atom_site_fract_y +_atom_site_fract_z +_atom_site_U_iso_or_equiv +_atom_site_adp_type +_atom_site_occupancy +_atom_site_symmetry_multiplicity +_atom_site_calc_flag +_atom_site_refinement_flags +C1 C 0.1297(2) 0.5762(2) 0.40803(18) 0.0490(5) Uani 1 1 d . +H1 H 0.2172 0.6275 0.3460 0.059 Uiso 1 1 calc R +C2 C 0.1235(3) 0.6328(2) 0.54518(17) 0.0499(5) Uani 1 1 d . +H2 H 0.2068 0.7225 0.5756 0.060 Uiso 1 1 calc R +C3 C 0.0057(2) 0.4432(2) 0.36289(17) 0.0492(5) Uani 1 1 d . +H3 H 0.0095 0.4051 0.2704 0.059 Uiso 1 1 calc R +loop_ +_atom_site_aniso_label +_atom_site_aniso_U_11 +_atom_site_aniso_U_22 +_atom_site_aniso_U_33 +_atom_site_aniso_U_23 +_atom_site_aniso_U_13 +_atom_site_aniso_U_12 +C1 0.0490(10) 0.0447(9) 0.0534(10) 0.0109(8) 0.0051(8) 0.0008(9) +C2 0.0504(9) 0.0399(9) 0.0594(11) -0.0026(8) -0.0070(10) -0.0044(8) +C3 0.0571(10) 0.0463(9) 0.0440(9) -0.0020(8) -0.0056(9) 0.0081(9) +loop_ +_atom_type_symbol +_atom_type_description +_atom_type_scat_dispersion_real +_atom_type_scat_dispersion_imag +_atom_type_scat_source +Cl Cl 0.1484 0.1585 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' +H H 0.0000 0.0000 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' +C C 0.0033 0.0016 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' +loop_ +_geom_angle_atom_site_label_1 +_geom_angle_atom_site_label_2 +_geom_angle_atom_site_label_3 +_geom_angle +_geom_angle_site_symmetry_1 +C2 C1 C3 119.90(15) . +C2 C1 H1 120.1 . +C3 C1 H1 120.1 . +C3 C2 C1 120.07(16) 5_566 +C3 C2 H2 120.0 5_566 +C1 C2 H2 120.0 . +C2 C3 C1 120.03(16) 5_566 +C2 C3 H3 120.0 5_566 +C1 C3 H3 120.0 . +loop_ +_geom_bond_atom_site_label_1 +_geom_bond_atom_site_label_2 +_geom_bond_distance +_geom_bond_site_symmetry_2 +C1 C2 1.379(3) . +C1 C3 1.382(2) . +C1 H1 0.9300 . +C2 C3 1.376(2) 5_566 +C2 H2 0.9300 . +C3 C2 1.376(2) 5_566 +C3 H3 0.9300 . +loop_ +_geom_torsion_atom_site_label_1 +_geom_torsion_atom_site_label_2 +_geom_torsion_atom_site_label_3 +_geom_torsion_atom_site_label_4 +_geom_torsion +_geom_torsion_site_symmetry_4 +C3 C1 C2 C3 0.1(3) 5_566 +C2 C1 C3 C2 -0.1(3) 5_566 diff --git a/tests/data/tmQM_test.cif b/tests/data/tmQM_test.cif new file mode 100644 index 0000000..c70917c --- /dev/null +++ b/tests/data/tmQM_test.cif @@ -0,0 +1,804 @@ + +####################################################################### +# +# Cambridge Crystallographic Data Centre +# CCDC +# +####################################################################### +# +# If this CIF has been generated from an entry in the Cambridge +# Structural Database, then it will include bibliographic, chemical, +# crystal, experimental, refinement or atomic coordinate data resulting +# from the CCDC's data processing and validation procedures. +# +####################################################################### + +data_AAZDCO +_audit_creation_date 1972-10-08 +_database_code_depnum_ccdc_archive 'CCDC 1100031' +_database_code_NBS 500023 +_database_code_CSD AAZDCO +_chemical_formula_moiety 'C8 H22 Co1 N6 O4 1+,Br1 1-' +_chemical_name_systematic +'(+)~546~-trans-Dinitro(1,10-diamino-4,7-diazadecane) cobalt(iii) bromide' +_journal_coden_Cambridge 9 +_journal_volume 11 +_journal_year 1972 +_journal_page_first 1376 +_journal_name_full Inorg.Chem. +_journal_paper_doi 10.1021/ic50112a043 +loop_ +_publ_author_name +N.C.Payne +_diffrn_ambient_temperature 295 +_exptl_crystal_density_diffrn 1.842 +#These two values have been output from a single CSD field. +_refine_ls_R_factor_gt 0.038 +_refine_ls_wR_factor_gt 0.038 +_diffrn_radiation_probe x-ray +_symmetry_cell_setting monoclinic +_symmetry_space_group_name_H-M 'P 21' +_symmetry_Int_Tables_number 4 +_space_group_name_Hall 'P 2yb' +loop_ +_symmetry_equiv_pos_site_id +_symmetry_equiv_pos_as_xyz +1 x,y,z +2 -x,1/2+y,-z +_cell_length_a 7.848(5) +_cell_length_b 14.756(12) +_cell_length_c 6.397(5) +_cell_angle_alpha 90 +_cell_angle_beta 99.5(1) +_cell_angle_gamma 90 +_cell_volume 730.645 +_cell_formula_units_Z 2 +loop_ +_atom_site_label +_atom_site_type_symbol +_atom_site_fract_x +_atom_site_fract_y +_atom_site_fract_z +Br1 Br 0.30487 0.47063 0.44233 +Co1 Co -0.08396 0.25000 0.21342 +C1 C -0.26480 0.43140 0.14510 +C2 C -0.38480 0.39430 -0.03870 +C3 C -0.43800 0.29870 0.00040 +C4 C -0.36220 0.13870 0.02670 +C5 C -0.21190 0.07610 0.07230 +C6 C 0.07560 0.06300 0.28090 +C7 C 0.20800 0.09960 0.45300 +C8 C 0.26990 0.19280 0.41730 +H1 H -0.03500 0.39700 0.05600 +H2 H -0.43700 0.12000 -0.10900 +H3 H -0.43100 0.13600 0.14500 +H4 H -0.15600 0.07000 -0.05600 +H5 H -0.25100 0.01500 0.11400 +H6 H -0.14000 0.11400 0.38200 +H7 H 0.12400 0.06400 0.14600 +H8 H 0.05000 -0.00100 0.31700 +H9 H 0.31000 0.05800 0.47100 +H10 H 0.15700 0.10000 0.58700 +H11 H 0.31200 0.19400 0.27900 +H12 H -0.02300 0.40900 0.31100 +H13 H 0.36800 0.20700 0.53400 +H14 H 0.18700 0.32200 0.38300 +H15 H 0.10400 0.26400 0.56000 +H16 H -0.24400 0.49700 0.11900 +H17 H -0.31900 0.42500 0.27500 +H18 H -0.32600 0.39500 -0.16600 +H19 H -0.49000 0.43300 -0.06600 +H20 H -0.53400 0.28100 -0.11500 +H21 H -0.48000 0.29700 0.14000 +H22 H -0.24700 0.23800 -0.12700 +N1 N -0.09240 0.38280 0.18000 +N2 N -0.29710 0.23300 0.00640 +N3 N -0.08820 0.11610 0.24950 +N4 N 0.13470 0.26230 0.41460 +N5 N -0.20330 0.26430 0.45450 +N6 N 0.05240 0.24530 -0.01760 +O1 O -0.15950 0.32780 0.57920 +O2 O -0.31440 0.21150 0.49190 +O3 O 0.14340 0.30880 -0.04600 +O4 O 0.04180 0.18130 -0.13870 +loop_ +_geom_bond_atom_site_label_1 +_geom_bond_atom_site_label_2 +_geom_bond_site_symmetry_1 +_geom_bond_site_symmetry_2 +Co1 N1 1_555 1_555 +C1 C2 1_555 1_555 +C2 C3 1_555 1_555 +C3 H20 1_555 1_555 +C4 C5 1_555 1_555 +C5 H4 1_555 1_555 +C6 C7 1_555 1_555 +C7 C8 1_555 1_555 +C8 H11 1_555 1_555 +H1 N1 1_555 1_555 +H2 C4 1_555 1_555 +H3 C4 1_555 1_555 +H5 C5 1_555 1_555 +H6 N3 1_555 1_555 +H7 C6 1_555 1_555 +H8 C6 1_555 1_555 +H9 C7 1_555 1_555 +H10 C7 1_555 1_555 +H12 N1 1_555 1_555 +H13 C8 1_555 1_555 +H14 N4 1_555 1_555 +H15 N4 1_555 1_555 +H16 C1 1_555 1_555 +H17 C1 1_555 1_555 +H18 C2 1_555 1_555 +H19 C2 1_555 1_555 +H21 C3 1_555 1_555 +H22 N2 1_555 1_555 +N1 C1 1_555 1_555 +N2 Co1 1_555 1_555 +N3 Co1 1_555 1_555 +N4 Co1 1_555 1_555 +N5 Co1 1_555 1_555 +N6 Co1 1_555 1_555 +O1 N5 1_555 1_555 +O2 N5 1_555 1_555 +O3 N6 1_555 1_555 +O4 N6 1_555 1_555 +C3 N2 1_555 1_555 +C4 N2 1_555 1_555 +C5 N3 1_555 1_555 +C6 N3 1_555 1_555 +C8 N4 1_555 1_555 + +#END + +####################################################################### +# +# Cambridge Crystallographic Data Centre +# CCDC +# +####################################################################### +# +# If this CIF has been generated from an entry in the Cambridge +# Structural Database, then it will include bibliographic, chemical, +# crystal, experimental, refinement or atomic coordinate data resulting +# from the CCDC's data processing and validation procedures. +# +####################################################################### + +data_ABAFOZ +_audit_creation_date 2004-11-10 +_database_code_depnum_ccdc_archive 'CCDC 243847' +_database_code_CSD ABAFOZ +_chemical_formula_moiety 'C40 H40 N2 O2 Pd1,2(C1 H2 Cl2)' +_chemical_name_systematic +"(N,N'-Dibenzyl-N,N'-dimethylethylenediamine)-(2,2'-dihydroxy-3,3'-dimethyl-1,1'-binaphthyl)-palladium(ii) dichloromethane solvate" +_journal_coden_Cambridge 579 +_journal_volume 23 +_journal_year 2004 +_journal_page_first 3210 +_journal_name_full Organometallics +_journal_paper_doi 10.1021/om0498495 +loop_ +_publ_author_name +K.A.Pelz +P.S.White +M.R.Gagne +_chemical_absolute_configuration unk +_diffrn_ambient_temperature 173 +_exptl_crystal_density_diffrn 1.411 +#These two values have been output from a single CSD field. +_refine_ls_R_factor_gt 0.046 +_refine_ls_wR_factor_gt 0.046 +_diffrn_radiation_probe x-ray +_symmetry_cell_setting trigonal +_symmetry_space_group_name_H-M 'P 32' +_symmetry_Int_Tables_number 145 +_space_group_name_Hall 'P 32' +loop_ +_symmetry_equiv_pos_site_id +_symmetry_equiv_pos_as_xyz +1 x,y,z +2 -y,x-y,2/3+z +3 -x+y,-x,1/3+z +_cell_length_a 10.4804(6) +_cell_length_b 10.4804(6) +_cell_length_c 31.8116(17) +_cell_angle_alpha 90 +_cell_angle_beta 90 +_cell_angle_gamma 120 +_cell_volume 3026.02 +_cell_formula_units_Z 3 +_exptl_crystal_recrystallization_method dichloromethane/hexanes +loop_ +_atom_site_label +_atom_site_type_symbol +_atom_site_fract_x +_atom_site_fract_y +_atom_site_fract_z +_atom_site_U_iso_or_equiv +_atom_site_thermal_displace_type +Pd1 Pd 0.53343(4) 0.46662(4) 0.11940 0.0258 Uani +C1 C 0.2068(8) 0.3226(11) 0.1231(3) 0.0720 Uani +N1 N 0.3405(6) 0.4394(6) 0.14479(18) 0.0396 Uani +C2 C 0.3490(10) 0.5854(10) 0.14007(23) 0.0600 Uani +C3 C 0.4153(9) 0.6515(10) 0.09811(23) 0.0578 Uani +N2 N 0.5596(7) 0.6595(6) 0.09416(17) 0.0394 Uani +C4 C 0.6744(11) 0.7927(8) 0.1159(3) 0.0657 Uani +O1 O 0.7430(4) 0.5254(4) 0.10336(12) 0.0262 Uani +O2 O 0.4747(4) 0.2562(4) 0.13527(12) 0.0277 Uani +C5 C 0.3284(6) 0.3946(7) 0.18942(23) 0.0423 Uani +C6 C 0.4487(6) 0.5050(6) 0.21770(18) 0.0281 Uani +C7 C 0.5827(7) 0.5113(7) 0.22004(20) 0.0342 Uani +C8 C 0.6947(7) 0.6156(8) 0.24459(21) 0.0427 Uani +C9 C 0.6728(7) 0.7166(7) 0.26735(21) 0.0450 Uani +C10 C 0.5374(7) 0.7091(7) 0.26591(21) 0.0382 Uani +C11 C 0.4274(7) 0.6057(7) 0.24136(19) 0.0346 Uani +C12 C 0.6065(7) 0.6718(6) 0.04904(21) 0.0398 Uani +C13 C 0.4941(6) 0.5510(6) 0.02065(18) 0.0292 Uani +C14 C 0.3956(7) 0.5735(7) -0.00263(19) 0.0336 Uani +C15 C 0.2900(8) 0.4617(8) -0.02751(21) 0.0411 Uani +C16 C 0.2836(7) 0.3284(7) -0.02835(21) 0.0443 Uani +C17 C 0.3821(8) 0.3050(7) -0.00602(21) 0.0436 Uani +C18 C 0.4893(7) 0.4175(7) 0.01886(20) 0.0334 Uani +C19 C 0.5192(6) 0.1934(6) 0.10594(18) 0.0252 Uani +C20 C 0.6655(5) 0.2288(5) 0.10359(17) 0.0198 Uani +C21 C 0.7138(6) 0.1691(6) 0.07077(17) 0.0244 Uani +C22 C 0.8632(6) 0.2064(6) 0.06615(18) 0.0302 Uani +C23 C 0.9071(7) 0.1496(7) 0.03410(22) 0.0416 Uani +C24 C 0.8056(8) 0.0586(7) 0.00439(20) 0.0406 Uani +C25 C 0.6628(7) 0.0205(6) 0.00662(18) 0.0348 Uani +C26 C 0.6099(7) 0.0720(6) 0.04076(18) 0.0263 Uani +C27 C 0.4608(7) 0.0300(6) 0.04639(19) 0.0289 Uani +C28 C 0.4126(6) 0.0850(6) 0.07756(19) 0.0279 Uani +C29 C 0.2529(7) 0.0398(7) 0.0816(3) 0.0503 Uani +C30 C 0.8077(6) 0.4808(6) 0.13305(18) 0.0253 Uani +C31 C 0.7719(6) 0.3346(6) 0.13467(17) 0.0210 Uani +C32 C 0.8304(5) 0.2857(6) 0.16771(16) 0.0234 Uani +C33 C 0.7928(6) 0.1364(6) 0.17235(19) 0.0310 Uani +C34 C 0.8504(7) 0.0924(7) 0.20477(21) 0.0393 Uani +C35 C 0.9418(7) 0.1946(8) 0.23441(21) 0.0437 Uani +C36 C 0.9783(6) 0.3371(7) 0.23160(19) 0.0368 Uani +C37 C 0.9281(6) 0.3904(7) 0.19810(18) 0.0272 Uani +C38 C 0.9704(6) 0.5394(7) 0.19257(19) 0.0304 Uani +C39 C 0.9137(6) 0.5857(6) 0.16125(19) 0.0292 Uani +C40 C 0.9603(7) 0.7459(7) 0.15726(24) 0.0473 Uani +H1 H 0.202 0.229 0.124 0.0842 Uiso +H2 H 0.122 0.316 0.137 0.0842 Uiso +H3 H 0.209 0.351 0.094 0.0842 Uiso +H4 H 0.409 0.651 0.162 0.0882 Uiso +H5 H 0.251 0.571 0.142 0.0882 Uiso +H6 H 0.425 0.747 0.095 0.0832 Uiso +H7 H 0.351 0.586 0.077 0.0832 Uiso +H8 H 0.769 0.801 0.113 0.0768 Uiso +H9 H 0.676 0.878 0.104 0.0768 Uiso +H10 H 0.651 0.785 0.145 0.0768 Uiso +H11 H 0.236 0.381 0.199 0.0532 Uiso +H12 H 0.328 0.303 0.191 0.0532 Uiso +H13 H 0.595 0.438 0.206 0.0451 Uiso +H14 H 0.789 0.621 0.245 0.0559 Uiso +H15 H 0.751 0.790 0.284 0.0515 Uiso +H16 H 0.521 0.779 0.281 0.0519 Uiso +H17 H 0.333 0.599 0.241 0.0461 Uiso +H18 H 0.698 0.671 0.048 0.0500 Uiso +H19 H 0.621 0.763 0.038 0.0500 Uiso +H20 H 0.400 0.667 -0.002 0.0450 Uiso +H21 H 0.224 0.478 -0.044 0.0542 Uiso +H22 H 0.207 0.249 -0.044 0.0505 Uiso +H23 H 0.377 0.211 -0.007 0.0549 Uiso +H24 H 0.560 0.402 0.034 0.0452 Uiso +H25 H 0.933 0.269 0.087 0.0421 Uiso +H26 H 1.009 0.178 0.032 0.0518 Uiso +H27 H 0.837 0.018 -0.018 0.0523 Uiso +H28 H 0.595 -0.038 -0.015 0.0437 Uiso +H29 H 0.388 -0.042 0.028 0.0370 Uiso +H30 H 0.243 0.092 0.105 0.0553 Uiso +H31 H 0.217 0.062 0.057 0.0553 Uiso +H32 H 0.197 -0.064 0.087 0.0553 Uiso +H33 H 0.730 0.066 0.152 0.0437 Uiso +H34 H 0.824 -0.009 0.208 0.0505 Uiso +H35 H 0.978 0.163 0.257 0.0553 Uiso +H36 H 1.043 0.405 0.252 0.0464 Uiso +H37 H 1.038 0.611 0.212 0.0393 Uiso +H38 H 0.914 0.762 0.134 0.0524 Uiso +H39 H 0.931 0.774 0.182 0.0524 Uiso +H40 H 1.065 0.804 0.154 0.0524 Uiso +C41 C 0.5994(9) 0.0753(8) 0.3567(3) 0.0548 Uani +Cl1 Cl 0.52493(24) -0.09988(22) 0.37954(8) 0.0703 Uani +Cl2 Cl 0.7195(3) 0.1031(3) 0.31553(8) 0.0865 Uani +H41 H 0.651 0.149 0.378 0.0500 Uiso +H42 H 0.520 0.086 0.346 0.0500 Uiso +C42 C 0.4744(8) 0.0752(8) 0.21500(24) 0.0520 Uani +Cl3 Cl 0.3841(3) 0.1039(3) 0.25664(8) 0.0851 Uani +Cl4 Cl 0.3752(3) -0.09991(22) 0.19264(8) 0.0693 Uani +H43 H 0.567 0.088 0.225 0.0456 Uiso +H44 H 0.494 0.147 0.194 0.0455 Uiso +loop_ +_atom_site_aniso_label +_atom_site_aniso_U_11 +_atom_site_aniso_U_22 +_atom_site_aniso_U_33 +_atom_site_aniso_U_23 +_atom_site_aniso_U_13 +_atom_site_aniso_U_12 +Pd1 0.03223(25) 0.03202(25) 0.02089(21) -0.00569(18) -0.00581(18) 0.02180(20) +C1 0.034(4) 0.125(7) 0.064(6) -0.057(5) -0.021(4) 0.045(4) +N1 0.038(3) 0.059(3) 0.032(3) -0.020(3) -0.0125(24) 0.032(3) +C2 0.100(6) 0.102(6) 0.032(4) -0.018(4) -0.016(4) 0.091(6) +C3 0.090(6) 0.101(6) 0.028(4) -0.018(4) -0.019(4) 0.082(5) +N2 0.064(4) 0.039(3) 0.033(3) -0.0111(24) -0.020(3) 0.039(3) +C4 0.109(7) 0.035(4) 0.057(5) -0.021(3) -0.044(5) 0.039(4) +O1 0.0298(19) 0.0253(19) 0.0240(22) 0.0060(16) 0.0027(16) 0.0141(16) +O2 0.0295(20) 0.0288(19) 0.0262(22) 0.0028(16) 0.0078(16) 0.0156(17) +C5 0.028(3) 0.050(4) 0.051(5) -0.017(3) -0.003(3) 0.021(3) +C6 0.031(3) 0.036(3) 0.019(3) -0.0027(25) 0.0030(24) 0.018(3) +C7 0.040(3) 0.038(3) 0.028(4) 0.003(3) -0.001(3) 0.022(3) +C8 0.045(4) 0.065(4) 0.028(4) -0.003(3) -0.006(3) 0.035(3) +C9 0.051(4) 0.047(4) 0.027(4) -0.004(3) -0.008(3) 0.017(3) +C10 0.054(4) 0.044(4) 0.028(4) -0.004(3) 0.001(3) 0.033(3) +C11 0.042(3) 0.046(3) 0.021(3) -0.002(3) 0.002(3) 0.026(3) +C12 0.047(4) 0.031(3) 0.042(4) -0.002(3) -0.014(3) 0.020(3) +C13 0.038(3) 0.030(3) 0.021(3) 0.0039(24) 0.006(3) 0.018(3) +C14 0.046(3) 0.037(3) 0.022(3) 0.000(3) 0.002(3) 0.024(3) +C15 0.049(4) 0.058(4) 0.026(4) 0.000(3) -0.001(3) 0.034(4) +C16 0.045(4) 0.047(4) 0.029(4) -0.009(3) -0.003(3) 0.014(3) +C17 0.069(5) 0.042(4) 0.024(4) -0.006(3) -0.002(3) 0.031(3) +C18 0.043(3) 0.039(3) 0.023(3) -0.003(3) -0.002(3) 0.024(3) +C19 0.033(3) 0.025(3) 0.018(3) -0.0037(22) -0.0051(23) 0.0147(24) +C20 0.022(3) 0.0187(24) 0.020(3) 0.0003(21) 0.0000(22) 0.0112(21) +C21 0.029(3) 0.024(3) 0.018(3) -0.0004(21) -0.0047(22) 0.0116(23) +C22 0.035(3) 0.037(3) 0.024(3) 0.0007(25) 0.0047(24) 0.022(3) +C23 0.042(3) 0.053(4) 0.030(4) 0.003(3) 0.009(3) 0.024(3) +C24 0.065(4) 0.043(4) 0.019(3) -0.001(3) 0.015(3) 0.031(3) +C25 0.059(4) 0.027(3) 0.015(3) -0.0019(23) -0.003(3) 0.019(3) +C26 0.040(3) 0.023(3) 0.016(3) -0.0012(22) -0.0028(24) 0.0159(24) +C27 0.033(3) 0.018(3) 0.030(4) -0.0029(24) -0.014(3) 0.0085(24) +C28 0.027(3) 0.020(3) 0.029(3) -0.0004(24) -0.010(3) 0.0059(23) +C29 0.030(3) 0.040(4) 0.067(5) -0.010(3) -0.012(3) 0.007(3) +C30 0.026(3) 0.024(3) 0.022(3) -0.0042(23) 0.0025(23) 0.0096(23) +C31 0.022(3) 0.023(3) 0.021(3) 0.0029(22) -0.0001(22) 0.0135(22) +C32 0.023(3) 0.030(3) 0.015(3) -0.0009(22) 0.0005(21) 0.0116(23) +C33 0.038(3) 0.033(3) 0.029(3) 0.005(3) 0.003(3) 0.023(3) +C34 0.048(4) 0.043(3) 0.030(4) 0.010(3) 0.003(3) 0.025(3) +C35 0.046(4) 0.067(5) 0.023(4) 0.015(3) 0.003(3) 0.032(4) +C36 0.028(3) 0.059(4) 0.021(3) -0.003(3) -0.0007(25) 0.020(3) +C37 0.023(3) 0.041(3) 0.019(3) -0.0084(25) -0.0053(22) 0.0170(25) +C38 0.021(3) 0.041(4) 0.026(3) -0.011(3) -0.0019(24) 0.013(3) +C39 0.022(3) 0.027(3) 0.032(4) -0.007(3) 0.0043(24) 0.0074(23) +C40 0.041(4) 0.028(3) 0.058(5) -0.010(3) -0.010(3) 0.006(3) +C41 0.061(5) 0.050(4) 0.051(5) -0.003(3) 0.011(4) 0.026(4) +Cl1 0.0675(13) 0.0481(11) 0.0807(17) -0.0022(10) 0.0075(11) 0.0179(10) +Cl2 0.0729(14) 0.0873(15) 0.0679(16) -0.0247(13) 0.0254(11) 0.0164(12) +C42 0.063(4) 0.056(4) 0.040(5) 0.010(3) 0.017(4) 0.032(4) +Cl3 0.1225(20) 0.0874(15) 0.0655(16) 0.0247(13) 0.0474(15) 0.0675(16) +Cl4 0.0753(14) 0.0452(10) 0.0839(17) 0.0034(10) 0.0106(12) 0.0274(10) +loop_ +_geom_bond_atom_site_label_1 +_geom_bond_atom_site_label_2 +_geom_bond_site_symmetry_1 +_geom_bond_site_symmetry_2 +Pd1 N1 1_555 1_555 +C1 N1 1_555 1_555 +N1 C2 1_555 1_555 +C2 C3 1_555 1_555 +C3 N2 1_555 1_555 +N2 Pd1 1_555 1_555 +C4 N2 1_555 1_555 +O1 Pd1 1_555 1_555 +O2 Pd1 1_555 1_555 +C5 N1 1_555 1_555 +C6 C5 1_555 1_555 +C7 C6 1_555 1_555 +C8 C7 1_555 1_555 +C9 C8 1_555 1_555 +C10 C9 1_555 1_555 +C11 C6 1_555 1_555 +C12 N2 1_555 1_555 +C13 C12 1_555 1_555 +C14 C13 1_555 1_555 +C15 C14 1_555 1_555 +C16 C15 1_555 1_555 +C17 C16 1_555 1_555 +C18 C13 1_555 1_555 +C19 O2 1_555 1_555 +C20 C19 1_555 1_555 +C21 C20 1_555 1_555 +C22 C21 1_555 1_555 +C23 C22 1_555 1_555 +C24 C23 1_555 1_555 +C25 C24 1_555 1_555 +C26 C21 1_555 1_555 +C27 C26 1_555 1_555 +C28 C19 1_555 1_555 +C29 C28 1_555 1_555 +C30 O1 1_555 1_555 +C31 C20 1_555 1_555 +C32 C31 1_555 1_555 +C33 C32 1_555 1_555 +C34 C33 1_555 1_555 +C35 C34 1_555 1_555 +C36 C35 1_555 1_555 +C37 C32 1_555 1_555 +C38 C37 1_555 1_555 +C39 C30 1_555 1_555 +C40 C39 1_555 1_555 +H1 C1 1_555 1_555 +H2 C1 1_555 1_555 +H3 C1 1_555 1_555 +H4 C2 1_555 1_555 +H5 C2 1_555 1_555 +H6 C3 1_555 1_555 +H7 C3 1_555 1_555 +H8 C4 1_555 1_555 +H9 C4 1_555 1_555 +H10 C4 1_555 1_555 +H11 C5 1_555 1_555 +H12 C5 1_555 1_555 +H13 C7 1_555 1_555 +H14 C8 1_555 1_555 +H15 C9 1_555 1_555 +H16 C10 1_555 1_555 +H17 C11 1_555 1_555 +H18 C12 1_555 1_555 +H19 C12 1_555 1_555 +H20 C14 1_555 1_555 +H21 C15 1_555 1_555 +H22 C16 1_555 1_555 +H23 C17 1_555 1_555 +H24 C18 1_555 1_555 +H25 C22 1_555 1_555 +H26 C23 1_555 1_555 +H27 C24 1_555 1_555 +H28 C25 1_555 1_555 +H29 C27 1_555 1_555 +H30 C29 1_555 1_555 +H31 C29 1_555 1_555 +H32 C29 1_555 1_555 +H33 C33 1_555 1_555 +H34 C34 1_555 1_555 +H35 C35 1_555 1_555 +H36 C36 1_555 1_555 +H37 C38 1_555 1_555 +H38 C40 1_555 1_555 +H39 C40 1_555 1_555 +H40 C40 1_555 1_555 +C41 Cl1 1_555 1_555 +Cl2 C41 1_555 1_555 +H41 C41 1_555 1_555 +H42 C41 1_555 1_555 +C42 Cl3 1_555 1_555 +Cl4 C42 1_555 1_555 +H43 C42 1_555 1_555 +H44 C42 1_555 1_555 +C10 C11 1_555 1_555 +C17 C18 1_555 1_555 +C25 C26 1_555 1_555 +C27 C28 1_555 1_555 +C30 C31 1_555 1_555 +C36 C37 1_555 1_555 +C38 C39 1_555 1_555 + +#END + +####################################################################### +# +# Cambridge Crystallographic Data Centre +# CCDC +# +####################################################################### +# +# If this CIF has been generated from an entry in the Cambridge +# Structural Database, then it will include bibliographic, chemical, +# crystal, experimental, refinement or atomic coordinate data resulting +# from the CCDC's data processing and validation procedures. +# +####################################################################### + +data_ABAFUF +_audit_creation_date 2004-11-10 +_database_code_depnum_ccdc_archive 'CCDC 243848' +_database_code_CSD ABAFUF +_chemical_name_common +'Teaching Subset: Fundamental Chemistry, Symmetry' +_chemical_formula_moiety 'C18 H24 Cl2 N2 Pd1' +_chemical_name_systematic +(R,R)-Dichloro-(N,N'-dibenzyl-N,N'-dimethylethylenediamine)-palladium(ii) +_journal_coden_Cambridge 579 +_journal_volume 23 +_journal_year 2004 +_journal_page_first 3210 +_journal_name_full Organometallics +_journal_paper_doi 10.1021/om0498495 +loop_ +_publ_author_name +K.A.Pelz +P.S.White +M.R.Gagne +_chemical_absolute_configuration unk +_diffrn_ambient_temperature 173 +_exptl_crystal_density_diffrn 1.539 +#These two values have been output from a single CSD field. +_refine_ls_R_factor_gt 0.028 +_refine_ls_wR_factor_gt 0.028 +_diffrn_radiation_probe x-ray +_symmetry_cell_setting monoclinic +_symmetry_space_group_name_H-M 'P c' +_symmetry_Int_Tables_number 7 +_space_group_name_Hall 'P -2yc' +loop_ +_symmetry_equiv_pos_site_id +_symmetry_equiv_pos_as_xyz +1 x,y,z +2 x,-y,1/2+z +_cell_length_a 14.8129(3) +_cell_length_b 9.52300(20) +_cell_length_c 14.1217(3) +_cell_angle_alpha 90 +_cell_angle_beta 105.076(1) +_cell_angle_gamma 90 +_cell_volume 1923.49 +_exptl_crystal_colour yellow +_exptl_crystal_description block +_cell_formula_units_Z 4 +_exptl_crystal_recrystallization_method dichloromethane/hexanes +loop_ +_atom_site_label +_atom_site_type_symbol +_atom_site_fract_x +_atom_site_fract_y +_atom_site_fract_z +_atom_site_U_iso_or_equiv +_atom_site_thermal_displace_type +Pd1 Pd 0.36742 0.419637(22) 0.25696 0.0173 Uani +Cl1 Cl 0.27133(7) 0.31830(9) 0.34246(7) 0.0343 Uani +Cl2 Cl 0.49828(7) 0.35337(8) 0.37690(7) 0.0329 Uani +C1 C 0.2141(3) 0.6093(4) 0.1867(4) 0.0434 Uani +N1 N 0.25297(20) 0.4837(3) 0.14623(20) 0.0236 Uani +C2 C 0.2899(3) 0.5242(4) 0.0608(3) 0.0332 Uani +C3 C 0.3803(3) 0.6027(4) 0.0971(3) 0.0343 Uani +N2 N 0.44701(21) 0.5189(3) 0.17488(21) 0.0239 Uani +C4 C 0.4907(3) 0.4056(4) 0.1284(4) 0.0407 Uani +C5 C 0.17347(24) 0.3802(4) 0.1116(3) 0.0277 Uani +C6 C 0.19776(22) 0.2511(3) 0.0606(3) 0.0260 Uani +C7 C 0.2523(3) 0.1434(4) 0.1138(3) 0.0317 Uani +C8 C 0.2695(3) 0.0239(4) 0.0653(4) 0.0411 Uani +C9 C 0.2324(3) 0.0077(5) -0.0344(4) 0.0461 Uani +C10 C 0.1769(3) 0.1140(5) -0.0870(3) 0.0447 Uani +C11 C 0.1601(3) 0.2336(4) -0.0394(3) 0.0361 Uani +C12 C 0.5244(3) 0.6137(4) 0.2301(3) 0.0282 Uani +C13 C 0.49032(25) 0.7395(3) 0.2757(3) 0.0236 Uani +C14 C 0.4554(3) 0.7282(3) 0.3578(3) 0.0275 Uani +C15 C 0.4248(3) 0.8454(4) 0.3992(3) 0.0327 Uani +C16 C 0.4311(3) 0.9783(4) 0.3597(3) 0.0351 Uani +C17 C 0.4669(3) 0.9912(4) 0.2804(3) 0.0336 Uani +C18 C 0.4969(3) 0.8734(4) 0.2375(3) 0.0288 Uani +H1 H 0.191 0.580 0.241 0.0502 Uiso +H2 H 0.262 0.679 0.208 0.0502 Uiso +H3 H 0.163 0.648 0.137 0.0502 Uiso +H4 H 0.300 0.441 0.026 0.0417 Uiso +H5 H 0.245 0.583 0.018 0.0417 Uiso +H6 H 0.369 0.692 0.123 0.0432 Uiso +H7 H 0.408 0.617 0.043 0.0432 Uiso +H8 H 0.532 0.352 0.179 0.0544 Uiso +H9 H 0.443 0.345 0.090 0.0544 Uiso +H10 H 0.525 0.447 0.086 0.0544 Uiso +H11 H 0.122 0.428 0.067 0.0362 Uiso +H12 H 0.154 0.349 0.168 0.0362 Uiso +H13 H 0.277 0.153 0.183 0.0406 Uiso +H14 H 0.307 -0.050 0.102 0.0509 Uiso +H15 H 0.245 -0.075 -0.067 0.0579 Uiso +H16 H 0.151 0.105 -0.156 0.0551 Uiso +H17 H 0.121 0.306 -0.075 0.0455 Uiso +H18 H 0.566 0.560 0.281 0.0385 Uiso +H19 H 0.558 0.647 0.185 0.0385 Uiso +H20 H 0.453 0.637 0.387 0.0368 Uiso +H21 H 0.400 0.835 0.455 0.0436 Uiso +H22 H 0.410 1.060 0.387 0.0445 Uiso +H23 H 0.472 1.083 0.254 0.0425 Uiso +H24 H 0.522 0.884 0.182 0.0386 Uiso +Pd2 Pd 0.834050(19) 0.083268(22) 0.614726(19) 0.0178 Uani +Cl3 Cl 0.93421(8) 0.18070(10) 0.75136(7) 0.0386 Uani +Cl4 Cl 0.70721(7) 0.15266(8) 0.66835(8) 0.0337 Uani +C19 C 0.9856(3) -0.1059(4) 0.6218(4) 0.0427 Uani +N3 N 0.94502(20) 0.0181(3) 0.56134(22) 0.0256 Uani +C20 C 0.9049(3) -0.0221(4) 0.4573(3) 0.0398 Uani +C21 C 0.8145(3) -0.0981(4) 0.4459(3) 0.0388 Uani +N4 N 0.75065(21) -0.0108(3) 0.48992(21) 0.0250 Uani +C22 C 0.7080(3) 0.1066(4) 0.4218(3) 0.0423 Uani +C23 C 1.0246(3) 0.1202(4) 0.5685(3) 0.0320 Uani +C24 C 0.99919(24) 0.2498(4) 0.5061(3) 0.0303 Uani +C25 C 0.9439(3) 0.3564(4) 0.5305(3) 0.0361 Uani +C26 C 0.9242(3) 0.4754(4) 0.4717(4) 0.0486 Uani +C27 C 0.9592(4) 0.4937(5) 0.3921(4) 0.0540 Uani +C28 C 1.0159(4) 0.3899(6) 0.3689(4) 0.0589 Uani +C29 C 1.0350(3) 0.2695(5) 0.4246(3) 0.0427 Uani +C30 C 0.6708(3) -0.1010(3) 0.5028(3) 0.0287 Uani +C31 C 0.7011(3) -0.2312(4) 0.5636(3) 0.0257 Uani +C32 C 0.7359(3) -0.2249(3) 0.6653(3) 0.0297 Uani +C33 C 0.7643(3) -0.3449(4) 0.7205(3) 0.0408 Uani +C34 C 0.7556(3) -0.4764(4) 0.6743(3) 0.0391 Uani +C35 C 0.7191(3) -0.4847(4) 0.5746(4) 0.0387 Uani +C36 C 0.6925(3) -0.3629(4) 0.5189(3) 0.0317 Uani +H25 H 1.010 -0.077 0.689 0.0548 Uiso +H26 H 0.938 -0.176 0.619 0.0548 Uiso +H27 H 1.035 -0.145 0.597 0.0548 Uiso +H28 H 0.894 0.061 0.418 0.0528 Uiso +H29 H 0.949 -0.081 0.436 0.0528 Uiso +H30 H 0.826 -0.187 0.479 0.0506 Uiso +H31 H 0.785 -0.114 0.378 0.0506 Uiso +H32 H 0.668 0.161 0.452 0.0493 Uiso +H33 H 0.756 0.166 0.410 0.0493 Uiso +H34 H 0.672 0.069 0.361 0.0493 Uiso +H35 H 1.046 0.150 0.636 0.0428 Uiso +H36 H 1.074 0.072 0.549 0.0428 Uiso +H37 H 0.921 0.347 0.588 0.0463 Uiso +H38 H 0.884 0.546 0.487 0.0568 Uiso +H39 H 0.945 0.577 0.353 0.0602 Uiso +H40 H 1.042 0.402 0.314 0.0676 Uiso +H41 H 1.074 0.198 0.408 0.0530 Uiso +H42 H 0.634 -0.045 0.535 0.0371 Uiso +H43 H 0.634 -0.129 0.439 0.0371 Uiso +H44 H 0.739 -0.136 0.698 0.0394 Uiso +H45 H 0.789 -0.338 0.790 0.0495 Uiso +H46 H 0.776 -0.560 0.712 0.0487 Uiso +H47 H 0.710 -0.575 0.543 0.0488 Uiso +H48 H 0.669 -0.369 0.449 0.0406 Uiso +loop_ +_atom_site_aniso_label +_atom_site_aniso_U_11 +_atom_site_aniso_U_22 +_atom_site_aniso_U_33 +_atom_site_aniso_U_23 +_atom_site_aniso_U_13 +_atom_site_aniso_U_12 +Pd1 0.02088(14) 0.01582(12) 0.01486(14) -0.00017(9) 0.00386(11) -0.00022(10) +Cl1 0.0454(5) 0.0386(4) 0.0229(4) -0.0001(3) 0.0160(4) -0.0128(4) +Cl2 0.0348(5) 0.0245(4) 0.0312(5) 0.0012(3) -0.0061(4) 0.0058(3) +C1 0.0336(22) 0.0296(18) 0.058(3) -0.0115(19) -0.0044(21) 0.0112(17) +N1 0.0235(14) 0.0214(13) 0.0229(15) 0.0023(11) 0.0008(12) -0.0008(11) +C2 0.0422(22) 0.0361(18) 0.0170(17) 0.0059(15) 0.0000(15) -0.0117(17) +C3 0.0406(24) 0.0382(19) 0.0208(19) 0.0063(15) 0.0023(17) -0.0123(17) +N2 0.0285(16) 0.0251(13) 0.0206(14) -0.0061(11) 0.0110(12) -0.0070(12) +C4 0.0398(23) 0.0406(20) 0.053(3) -0.0243(19) 0.0321(21) -0.0147(17) +C5 0.0206(16) 0.0280(16) 0.0301(19) -0.0048(14) -0.0013(14) -0.0001(14) +C6 0.0171(15) 0.0302(17) 0.0310(18) -0.0089(15) 0.0069(13) -0.0072(14) +C7 0.0250(18) 0.0317(18) 0.0350(20) -0.0084(16) 0.0017(15) -0.0068(15) +C8 0.0308(21) 0.0292(18) 0.063(3) -0.0132(19) 0.0114(20) -0.0030(17) +C9 0.0309(24) 0.046(3) 0.067(3) -0.0321(24) 0.0228(23) -0.0151(20) +C10 0.0383(23) 0.063(3) 0.0334(23) -0.0183(21) 0.0105(19) -0.0133(21) +C11 0.0307(20) 0.0460(21) 0.0298(20) -0.0065(17) 0.0047(16) -0.0045(17) +C12 0.0228(18) 0.0312(16) 0.0316(20) -0.0066(15) 0.0088(15) -0.0042(14) +C13 0.0184(17) 0.0197(16) 0.0312(22) -0.0030(14) 0.0040(15) -0.0038(13) +C14 0.0278(18) 0.0192(15) 0.0334(19) -0.0027(13) 0.0042(15) -0.0021(13) +C15 0.0350(20) 0.0314(18) 0.0345(21) -0.0024(15) 0.0139(17) 0.0030(15) +C16 0.0317(20) 0.0243(17) 0.0475(25) -0.0081(16) 0.0071(18) 0.0028(15) +C17 0.0292(21) 0.0188(17) 0.049(3) 0.0047(16) 0.0031(19) -0.0011(15) +C18 0.0277(19) 0.0294(16) 0.0287(19) 0.0004(15) 0.0065(15) -0.0059(15) +Pd2 0.01969(14) 0.01722(12) 0.01697(14) -0.00147(10) 0.00566(11) -0.00027(10) +Cl3 0.0471(6) 0.0463(5) 0.0197(4) -0.0076(4) 0.0041(4) -0.0174(4) +Cl4 0.0357(5) 0.0250(4) 0.0482(6) -0.0009(4) 0.0250(4) 0.0052(4) +C19 0.0421(25) 0.0294(18) 0.063(3) 0.0073(19) 0.0253(24) 0.0089(17) +N3 0.0256(15) 0.0233(13) 0.0315(16) -0.0014(12) 0.0139(13) -0.0012(12) +C20 0.053(3) 0.0413(20) 0.0341(22) -0.0149(18) 0.0276(20) -0.0137(19) +C21 0.051(3) 0.0414(21) 0.0289(22) -0.0175(16) 0.0191(20) -0.0171(18) +N4 0.0300(16) 0.0228(13) 0.0200(14) 0.0016(11) 0.0028(12) -0.0081(12) +C22 0.050(3) 0.0398(20) 0.0279(21) 0.0118(17) -0.0061(19) -0.0132(18) +C23 0.0189(16) 0.0353(18) 0.0440(23) 0.0038(16) 0.0119(16) -0.0022(14) +C24 0.0214(17) 0.0392(18) 0.0292(19) 0.0016(15) 0.0048(14) -0.0071(15) +C25 0.0305(20) 0.0329(19) 0.0454(24) 0.0064(17) 0.0105(18) -0.0054(16) +C26 0.0349(23) 0.0348(21) 0.071(3) 0.0116(21) 0.0046(23) -0.0046(19) +C27 0.040(3) 0.052(3) 0.058(3) 0.0266(25) -0.0089(24) -0.0197(23) +C28 0.048(3) 0.088(4) 0.037(3) 0.021(3) 0.0042(22) -0.024(3) +C29 0.0378(22) 0.056(3) 0.0351(22) 0.0071(19) 0.0110(18) -0.0117(20) +C30 0.0223(17) 0.0257(16) 0.0332(20) 0.0042(14) -0.0018(15) -0.0066(13) +C31 0.0201(17) 0.0234(16) 0.0321(21) 0.0019(14) 0.0043(15) -0.0054(13) +C32 0.0358(20) 0.0225(16) 0.0298(20) -0.0008(14) 0.0068(17) 0.0001(14) +C33 0.056(3) 0.0297(19) 0.0332(22) 0.0033(16) 0.0052(20) 0.0006(18) +C34 0.0470(24) 0.0213(17) 0.048(3) 0.0035(16) 0.0103(20) 0.0018(17) +C35 0.0410(25) 0.0198(18) 0.056(3) -0.0083(17) 0.0137(22) -0.0045(17) +C36 0.0336(20) 0.0274(16) 0.0309(20) -0.0039(15) 0.0027(16) -0.0062(15) +loop_ +_geom_bond_atom_site_label_1 +_geom_bond_atom_site_label_2 +_geom_bond_site_symmetry_1 +_geom_bond_site_symmetry_2 +Pd1 Cl1 1_555 1_555 +Cl2 Pd1 1_555 1_555 +C1 N1 1_555 1_555 +N1 Pd1 1_555 1_555 +C2 N1 1_555 1_555 +C3 C2 1_555 1_555 +N2 Pd1 1_555 1_555 +C4 N2 1_555 1_555 +C5 N1 1_555 1_555 +C6 C5 1_555 1_555 +C7 C6 1_555 1_555 +C8 C7 1_555 1_555 +C9 C8 1_555 1_555 +C10 C9 1_555 1_555 +C11 C6 1_555 1_555 +C12 N2 1_555 1_555 +C13 C12 1_555 1_555 +C14 C13 1_555 1_555 +C15 C14 1_555 1_555 +C16 C15 1_555 1_555 +C17 C16 1_555 1_555 +C18 C13 1_555 1_555 +H1 C1 1_555 1_555 +H2 C1 1_555 1_555 +H3 C1 1_555 1_555 +H4 C2 1_555 1_555 +H5 C2 1_555 1_555 +H6 C3 1_555 1_555 +H7 C3 1_555 1_555 +H8 C4 1_555 1_555 +H9 C4 1_555 1_555 +H10 C4 1_555 1_555 +H11 C5 1_555 1_555 +H12 C5 1_555 1_555 +H13 C7 1_555 1_555 +H14 C8 1_555 1_555 +H15 C9 1_555 1_555 +H16 C10 1_555 1_555 +H17 C11 1_555 1_555 +H18 C12 1_555 1_555 +H19 C12 1_555 1_555 +H20 C14 1_555 1_555 +H21 C15 1_555 1_555 +H22 C16 1_555 1_555 +H23 C17 1_555 1_555 +H24 C18 1_555 1_555 +Pd2 Cl3 1_555 1_555 +Cl4 Pd2 1_555 1_555 +C19 N3 1_555 1_555 +N3 Pd2 1_555 1_555 +C20 N3 1_555 1_555 +C21 C20 1_555 1_555 +N4 Pd2 1_555 1_555 +C22 N4 1_555 1_555 +C23 N3 1_555 1_555 +C24 C23 1_555 1_555 +C25 C24 1_555 1_555 +C26 C25 1_555 1_555 +C27 C26 1_555 1_555 +C28 C27 1_555 1_555 +C29 C24 1_555 1_555 +C30 N4 1_555 1_555 +C31 C30 1_555 1_555 +C32 C31 1_555 1_555 +C33 C32 1_555 1_555 +C34 C33 1_555 1_555 +C35 C34 1_555 1_555 +C36 C31 1_555 1_555 +H25 C19 1_555 1_555 +H26 C19 1_555 1_555 +H27 C19 1_555 1_555 +H28 C20 1_555 1_555 +H29 C20 1_555 1_555 +H30 C21 1_555 1_555 +H31 C21 1_555 1_555 +H32 C22 1_555 1_555 +H33 C22 1_555 1_555 +H34 C22 1_555 1_555 +H35 C23 1_555 1_555 +H36 C23 1_555 1_555 +H37 C25 1_555 1_555 +H38 C26 1_555 1_555 +H39 C27 1_555 1_555 +H40 C28 1_555 1_555 +H41 C29 1_555 1_555 +H42 C30 1_555 1_555 +H43 C30 1_555 1_555 +H44 C32 1_555 1_555 +H45 C33 1_555 1_555 +H46 C34 1_555 1_555 +H47 C35 1_555 1_555 +H48 C36 1_555 1_555 +C3 N2 1_555 1_555 +C10 C11 1_555 1_555 +C17 C18 1_555 1_555 +C21 N4 1_555 1_555 +C28 C29 1_555 1_555 +C35 C36 1_555 1_555 + +#END diff --git a/tests/data/tmQM_test.cif.bz2 b/tests/data/tmQM_test.cif.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..33783762ff877c567d4b7465a8cc8015d7fa2a33 GIT binary patch literal 7033 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 X@(CJYyy$)&-~KM-ig2MJw)8ggk75_a literal 0 HcmV?d00001 diff --git a/tests/data/tmQM_test.cif.gz b/tests/data/tmQM_test.cif.gz new file mode 100644 index 0000000000000000000000000000000000000000..0cfd74fa8e199be7145b53dd96c39c9d56f95f1b GIT binary patch literal 8007 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 JOOv#1007?O-hluB literal 0 HcmV?d00001 diff --git a/tests/test_cif.py b/tests/test_cif.py new file mode 100644 index 0000000..7a9abcf --- /dev/null +++ b/tests/test_cif.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Tests for CIF files.""" + +import pytest # noqa: F401 +import read_structure_step # noqa: F401 +from . import build_filenames + +from molsystem.system_db import SystemDB + +@pytest.fixture() +def configuration(): + """Create a system db, system and configuration.""" + db = SystemDB(filename="file:seamm_db?mode=memory&cache=shared") + system = db.create_system(name="default") + configuration = system.create_configuration(name="default") + + yield configuration + + db.close() + try: + del db + except Exception: + print("Caught error deleting the database") + +# "ABENEB01.cif", + +@pytest.mark.parametrize( + "structure", + [ + "benzene.cif", + ], +) +def test_cif(configuration, structure): + file_name = build_filenames.build_data_filename(structure) + system = configuration.system + system_db = system.system_db + read_structure_step.read( + file_name, + configuration, + system_db=system_db, + system=system, + subsequent_as_configurations=False, + ) + + assert system_db.n_systems == 1 + configuration = system_db.system.configuration + bonds = configuration.bonds + assert bonds.n_bonds == 12 * 4 diff --git a/tests/test_formats.py b/tests/test_formats.py index d938dc5..e98e191 100644 --- a/tests/test_formats.py +++ b/tests/test_formats.py @@ -10,29 +10,31 @@ from molsystem.system_db import SystemDB bond_string = """\ - i j bondorder -1 1 2 1 -2 1 5 1 -3 1 7 1 -4 2 3 2 -5 3 4 1 -6 3 6 1 -7 4 5 2 -8 5 8 1 -9 6 9 1 -10 6 10 1""" + i j bondorder offset1 offset2 offset3 +1 1 2 1 0 0 0 +2 1 5 1 0 0 0 +3 1 7 1 0 0 0 +4 2 3 2 0 0 0 +5 3 4 1 0 0 0 +6 3 6 1 0 0 0 +7 4 5 2 0 0 0 +8 5 8 1 0 0 0 +9 6 9 1 0 0 0 +10 6 10 1 0 0 0""" + xyz_bond_string = """\ - i j bondorder -1 1 7 1 -2 5 8 1 -3 1 5 1 -4 1 2 1 -5 4 5 2 -6 2 3 2 -7 3 4 1 -8 3 6 1 -9 6 10 1 -10 6 9 1""" + i j bondorder offset1 offset2 offset3 +1 1 7 1 0 0 0 +2 5 8 1 0 0 0 +3 1 5 1 0 0 0 +4 1 2 1 0 0 0 +5 4 5 2 0 0 0 +6 2 3 2 0 0 0 +7 3 4 1 0 0 0 +8 3 6 1 0 0 0 +9 6 10 1 0 0 0 +10 6 9 1 0 0 0""" + acetonitrile_bonds = """\ i j bondorder 1 2 5 1 @@ -394,3 +396,26 @@ def test_compressed(configuration, structure): ) assert system_db.n_systems == 7 + + +@pytest.mark.parametrize( + "structure", + [ + "tmQM_test.cif", + "tmQM_test.cif.gz", + "tmQM_test.cif.bz2", + ], +) +def test_cif(configuration, structure): + file_name = build_filenames.build_data_filename(structure) + system = configuration.system + system_db = system.system_db + read_structure_step.read( + file_name, + configuration, + system_db=system_db, + system=system, + subsequent_as_configurations=False, + ) + + assert system_db.n_systems == 3 diff --git a/tests/test_utils.py b/tests/test_utils.py index 70305c5..79bc2a6 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -10,10 +10,9 @@ from molsystem.system_db import SystemDB bond_string = """\ - i j bondorder -1 1 2 1 -2 1 3 1""" - + i j bondorder offset1 offset2 offset3 +1 1 2 1 0 0 0 +2 1 3 1 0 0 0""" @pytest.fixture(scope="module") def configuration(): From b2c42be4cd848b44278078bb0c4fdf89f2894aed Mon Sep 17 00:00:00 2001 From: Paul Saxe Date: Wed, 30 Aug 2023 16:10:18 -0400 Subject: [PATCH 2/3] Supporting spacegroup symmetry --- read_structure_step/formats/cif/cif.py | 139 +++++++++++++++---------- tests/test_cif.py | 26 ++++- tests/test_formats.py | 44 ++++---- tests/test_utils.py | 7 +- 4 files changed, 135 insertions(+), 81 deletions(-) diff --git a/read_structure_step/formats/cif/cif.py b/read_structure_step/formats/cif/cif.py index 98eeb98..7066fe2 100644 --- a/read_structure_step/formats/cif/cif.py +++ b/read_structure_step/formats/cif/cif.py @@ -158,6 +158,7 @@ def load_cif( configurations = [] record_no = 0 structure_no = 0 + n_errors = 0 lines = [] in_block = False block_name = "" @@ -181,6 +182,7 @@ def load_cif( break if record_no not in indices: lines = [] + lines.append(line) continue structure_no += 1 @@ -191,58 +193,77 @@ def load_cif( system = system_db.create_system() configuration = system.create_configuration() - text = configuration.from_cif_text("\n".join(lines)) - if text != "": - printer("\n") - printer(__(text, indent=4 * " ")) - - configurations.append(configuration) - - logger.debug(f" added system {system_db.n_systems}: {block_name}") - - # Set the system name - if system_name is not None and system_name != "": - lower_name = str(system_name).lower() - if "from file" in lower_name: - system.name = block_name - elif "file name" in lower_name: - system.name = path.stem - elif "formula" in lower_name: - system.name = configuration.formula()[0] - elif "empirical formula" in lower_name: - system.name = configuration.formula()[1] - else: - system.name = str(system_name) - - # And the configuration name - if configuration_name is not None and configuration_name != "": - lower_name = str(configuration_name).lower() - if "from file" in lower_name: - configuration.name = block_name - elif "file name" in lower_name: - configuration.name = path.stem - elif "formula" in lower_name: - configuration.name = configuration.formula()[0] - elif "empirical formula" in lower_name: - configuration.name = configuration.formula()[1] - else: - configuration.name = str(configuration_name) - logger.debug(f" added system {system_db.n_systems}: {block_name}") - - if printer: - percent = int(100 * structure_no / n_structures) - if percent > last_percent: - t1 = time.time() - if t1 - last_t >= 60: - t = int(t1 - t0) - rate = structure_no / (t1 - t0) - t_left = int((n_structures - structure_no) / rate) - printer( - f"\t{structure_no:6} ({percent}%) structures read " - f"in {t} seconds. About {t_left} seconds remaining." - ) - last_t = t1 - last_percent = percent + try: + text = configuration.from_cif_text("".join(lines)) + if text != "": + printer("\n") + printer(__(text, indent=4 * " ")) + except Exception as e: + n_errors += 1 + printer("") + printer(f" Error handling entry {record_no} in the CIF file:") + printer(" " + str(e)) + printer(" Text of the entry is") + printer(" " + 60 * "-") + for tmp in lines: + printer(" " + tmp.rstrip()) + printer(" " + 60 * "-") + printer("") + if n_structures <= 1: + raise + else: + configurations.append(configuration) + + logger.debug( + f" added system {system_db.n_systems}: {block_name}" + ) + + # Set the system name + if system_name is not None and system_name != "": + lower_name = str(system_name).lower() + if "from file" in lower_name: + system.name = block_name + elif "file name" in lower_name: + system.name = path.stem + elif "formula" in lower_name: + system.name = configuration.formula()[0] + elif "empirical formula" in lower_name: + system.name = configuration.formula()[1] + else: + system.name = str(system_name) + + # And the configuration name + if configuration_name is not None and configuration_name != "": + lower_name = str(configuration_name).lower() + if "from file" in lower_name: + configuration.name = block_name + elif "file name" in lower_name: + configuration.name = path.stem + elif "formula" in lower_name: + configuration.name = configuration.formula()[0] + elif "empirical formula" in lower_name: + configuration.name = configuration.formula()[1] + else: + configuration.name = str(configuration_name) + logger.debug( + f" added system {system_db.n_systems}: {block_name}" + ) + + if printer: + percent = int(100 * structure_no / n_structures) + if percent > last_percent: + t1 = time.time() + if t1 - last_t >= 60: + t = int(t1 - t0) + rate = structure_no / (t1 - t0) + t_left = int((n_structures - structure_no) / rate) + printer( + f"\t{structure_no:6} ({percent}%) structures " + f"read in {t} seconds. About {t_left} seconds " + "remaining." + ) + last_t = t1 + last_percent = percent block_name = line[5:].strip() lines = [] lines.append(line) @@ -259,13 +280,13 @@ def load_cif( system = system_db.create_system() configuration = system.create_configuration() - text = configuration.from_cif_text("\n".join(lines)) + text = configuration.from_cif_text("".join(lines)) logger.debug(f" added system {system_db.n_systems}: {block_name}") if text != "": printer("\n") printer(__(text, indent=4 * " ")) - configurations.append(configuration) + configurations.append(configuration) # Set the system name if system_name is not None and system_name != "": @@ -295,4 +316,14 @@ def load_cif( else: configuration.name = str(configuration_name) + if printer: + t1 = time.time() + rate = structure_no / (t1 - t0) + printer( + f" Read {structure_no - n_errors} structures in {t1 - t0:.1f} " + f"seconds = {rate:.2f} per second" + ) + if n_errors > 0: + printer(f" {n_errors} structures could not be read due to errors.") + return configurations diff --git a/tests/test_cif.py b/tests/test_cif.py index 7a9abcf..dfe0981 100644 --- a/tests/test_cif.py +++ b/tests/test_cif.py @@ -9,6 +9,7 @@ from molsystem.system_db import SystemDB + @pytest.fixture() def configuration(): """Create a system db, system and configuration.""" @@ -24,8 +25,10 @@ def configuration(): except Exception: print("Caught error deleting the database") + # "ABENEB01.cif", + @pytest.mark.parametrize( "structure", [ @@ -33,6 +36,16 @@ def configuration(): ], ) def test_cif(configuration, structure): + """Test the bonds in a benzene crystal.""" + correct = ( + "1.3788 1.3788 1.3788 1.3788 1.3788 1.3788 1.3788 1.3788 " + "1.3820 1.3820 1.3820 1.3820 1.3820 1.3820 1.3820 1.3820 " + "0.9300 0.9300 0.9300 0.9300 0.9300 0.9300 0.9300 0.9300 " + "1.3761 1.3761 1.3761 1.3761 1.3761 1.3761 1.3761 1.3761 " + "0.9306 0.9306 0.9306 0.9306 0.9306 0.9306 0.9306 0.9306 " + "0.9296 0.9296 0.9296 0.9296 0.9296 0.9296 0.9296 0.9296" + ) + file_name = build_filenames.build_data_filename(structure) system = configuration.system system_db = system.system_db @@ -45,6 +58,15 @@ def test_cif(configuration, structure): ) assert system_db.n_systems == 1 - configuration = system_db.system.configuration + configuration = system.configuration + + atoms = configuration.atoms + assert atoms.n_atoms == 48 bonds = configuration.bonds - assert bonds.n_bonds == 12 * 4 + assert bonds.n_bonds == 48 + + lengths = " ".join([f"{r:.4f}" for r in bonds.get_lengths()]) + if lengths != correct: + print(lengths) + + assert lengths == correct diff --git a/tests/test_formats.py b/tests/test_formats.py index e98e191..893a174 100644 --- a/tests/test_formats.py +++ b/tests/test_formats.py @@ -10,30 +10,30 @@ from molsystem.system_db import SystemDB bond_string = """\ - i j bondorder offset1 offset2 offset3 -1 1 2 1 0 0 0 -2 1 5 1 0 0 0 -3 1 7 1 0 0 0 -4 2 3 2 0 0 0 -5 3 4 1 0 0 0 -6 3 6 1 0 0 0 -7 4 5 2 0 0 0 -8 5 8 1 0 0 0 -9 6 9 1 0 0 0 -10 6 10 1 0 0 0""" + i j bondorder symop1 symop2 +1 1 2 1 . . +2 1 5 1 . . +3 1 7 1 . . +4 2 3 2 . . +5 3 4 1 . . +6 3 6 1 . . +7 4 5 2 . . +8 5 8 1 . . +9 6 9 1 . . +10 6 10 1 . .""" xyz_bond_string = """\ - i j bondorder offset1 offset2 offset3 -1 1 7 1 0 0 0 -2 5 8 1 0 0 0 -3 1 5 1 0 0 0 -4 1 2 1 0 0 0 -5 4 5 2 0 0 0 -6 2 3 2 0 0 0 -7 3 4 1 0 0 0 -8 3 6 1 0 0 0 -9 6 10 1 0 0 0 -10 6 9 1 0 0 0""" + i j bondorder symop1 symop2 +1 1 7 1 . . +2 5 8 1 . . +3 1 5 1 . . +4 1 2 1 . . +5 4 5 2 . . +6 2 3 2 . . +7 3 4 1 . . +8 3 6 1 . . +9 6 10 1 . . +10 6 9 1 . .""" acetonitrile_bonds = """\ i j bondorder diff --git a/tests/test_utils.py b/tests/test_utils.py index 79bc2a6..c75e71f 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -10,9 +10,10 @@ from molsystem.system_db import SystemDB bond_string = """\ - i j bondorder offset1 offset2 offset3 -1 1 2 1 0 0 0 -2 1 3 1 0 0 0""" + i j bondorder symop1 symop2 +1 1 2 1 . . +2 1 3 1 . .""" + @pytest.fixture(scope="module") def configuration(): From 4593bf4ba92c46b57a600d626693f367e82b9a1b Mon Sep 17 00:00:00 2001 From: Paul Saxe Date: Wed, 30 Aug 2023 16:14:03 -0400 Subject: [PATCH 3/3] Supporting spacegroup symmetry --- HISTORY.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/HISTORY.rst b/HISTORY.rst index 9b294a5..a5776d8 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -2,6 +2,8 @@ History ======= +2023.8.30 -- Support for spacegroup symmetry + 2023.7.28 -- Implemented ranges for reading XYZ and SDF files. 2023.7.27.1 -- Removed debug printing.