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.
diff --git a/read_structure_step/formats/cif/cif.py b/read_structure_step/formats/cif/cif.py
index a203e58..7066fe2 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,48 @@ 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
+ n_errors = 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 +176,15 @@ 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 = []
+ lines.append(line)
+ continue
+
structure_no += 1
if structure_no > 1:
if subsequent_as_configurations:
@@ -146,91 +193,137 @@ 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}")
+ 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)
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 * " "))
+ 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("".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)
+ # 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)
+
+ 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/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 0000000..3378376
Binary files /dev/null and b/tests/data/tmQM_test.cif.bz2 differ
diff --git a/tests/data/tmQM_test.cif.gz b/tests/data/tmQM_test.cif.gz
new file mode 100644
index 0000000..0cfd74f
Binary files /dev/null and b/tests/data/tmQM_test.cif.gz differ
diff --git a/tests/test_cif.py b/tests/test_cif.py
new file mode 100644
index 0000000..dfe0981
--- /dev/null
+++ b/tests/test_cif.py
@@ -0,0 +1,72 @@
+#!/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):
+ """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
+ 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.configuration
+
+ atoms = configuration.atoms
+ assert atoms.n_atoms == 48
+ bonds = configuration.bonds
+ 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 d938dc5..893a174 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 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
-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 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
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..c75e71f 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -10,9 +10,9 @@
from molsystem.system_db import SystemDB
bond_string = """\
- i j bondorder
-1 1 2 1
-2 1 3 1"""
+ i j bondorder symop1 symop2
+1 1 2 1 . .
+2 1 3 1 . ."""
@pytest.fixture(scope="module")