finalcif 157__tar.gz → 159__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {finalcif-157 → finalcif-159}/.gitignore +2 -0
- {finalcif-157 → finalcif-159}/.run/compile_ui_files.run.xml +3 -0
- finalcif-159/AGENTS.md +31 -0
- {finalcif-157 → finalcif-159}/PKG-INFO +7 -6
- {finalcif-157 → finalcif-159}/README.md +3 -3
- finalcif-159/finalcif/__init__.py +2 -0
- {finalcif-157 → finalcif-159}/finalcif/appwindow.py +337 -232
- {finalcif-157 → finalcif-159}/finalcif/cif/checkcif/checkcif.py +25 -22
- {finalcif-157 → finalcif-159}/finalcif/cif/cif_file_io.py +28 -1
- {finalcif-157 → finalcif-159}/finalcif/cif/text.py +11 -2
- finalcif-159/finalcif/cif/vrf_entry.py +92 -0
- {finalcif-157 → finalcif-159}/finalcif/equip_property/author_loop_templates.py +81 -51
- {finalcif-157 → finalcif-159}/finalcif/equip_property/equipment.py +4 -3
- {finalcif-157 → finalcif-159}/finalcif/equip_property/properties.py +2 -3
- {finalcif-157 → finalcif-159}/finalcif/finalcif_start.py +11 -3
- finalcif-159/finalcif/gui/cif_table_model.py +247 -0
- finalcif-159/finalcif/gui/cif_table_view.py +392 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/combobox.py +4 -4
- finalcif-159/finalcif/gui/custom_classes.py +44 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/finalcif_gui_ui.py +56 -127
- {finalcif-157 → finalcif-159}/finalcif/gui/finalcif_gui_ui.ui +35 -178
- {finalcif-157 → finalcif-159}/finalcif/gui/import_selector.py +3 -2
- {finalcif-157 → finalcif-159}/finalcif/gui/loop_creator.py +3 -0
- finalcif-159/finalcif/gui/loops.py +555 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/plaintextedit.py +25 -9
- {finalcif-157 → finalcif-159}/finalcif/gui/playground.py +2 -2
- {finalcif-157 → finalcif-159}/finalcif/gui/syntax_highlighter.py +8 -1
- {finalcif-157 → finalcif-159}/finalcif/gui/vrf_classes.py +72 -75
- {finalcif-157 → finalcif-159}/finalcif/report/templated_report.py +3 -1
- finalcif-159/finalcif/template/report_default.docx +0 -0
- {finalcif-157 → finalcif-159}/finalcif/tools/download.py +1 -1
- {finalcif-157 → finalcif-159}/finalcif/tools/platon.py +1 -1
- finalcif-159/finalcif/tools/settings.py +507 -0
- {finalcif-157 → finalcif-159}/platon/platon_special.exe +0 -0
- {finalcif-157 → finalcif-159}/pyproject.toml +11 -2
- finalcif-159/screenshots/finalcif_details.png +0 -0
- finalcif-159/screenshots/finalcif_main.png +0 -0
- finalcif-159/screenshots/loops_column_buttons.png +0 -0
- finalcif-159/uv.lock +1300 -0
- finalcif-157/Hydrogen_solution_type.cif +0 -14
- finalcif-157/finalcif/__init__.py +0 -2
- finalcif-157/finalcif/displaymol/molecule2D.py +0 -313
- finalcif-157/finalcif/displaymol/sdm.py +0 -308
- finalcif-157/finalcif/gui/custom_classes.py +0 -309
- finalcif-157/finalcif/gui/loops.py +0 -332
- finalcif-157/finalcif/template/report_default.docx +0 -0
- finalcif-157/finalcif/tools/settings.py +0 -231
- finalcif-157/requirements.txt +0 -22
- finalcif-157/requirements_devel.txt +0 -11
- finalcif-157/requirements_doku.txt +0 -5
- finalcif-157/screenshots/finalcif_details.png +0 -0
- finalcif-157/screenshots/finalcif_main.png +0 -0
- finalcif-157/uv.lock +0 -1422
- {finalcif-157 → finalcif-159}/.gitattributes +0 -0
- {finalcif-157 → finalcif-159}/.python-version +0 -0
- {finalcif-157 → finalcif-159}/.ruff.toml +0 -0
- {finalcif-157 → finalcif-159}/.run/Make Documentation MAC.run.xml +0 -0
- {finalcif-157 → finalcif-159}/.run/make documentation Windows.run.xml +0 -0
- {finalcif-157 → finalcif-159}/CODE_OF_CONDUCT.md +0 -0
- {finalcif-157 → finalcif-159}/CONTRIBUTING.md +0 -0
- {finalcif-157 → finalcif-159}/Finalcif_installer_win.spec +0 -0
- {finalcif-157 → finalcif-159}/Finalcif_linux_onefile.spec +0 -0
- {finalcif-157 → finalcif-159}/Finalcif_mac.spec +0 -0
- {finalcif-157 → finalcif-159}/LICENSE +0 -0
- {finalcif-157 → finalcif-159}/finalcif/app_path.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/all_cif_dicts.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/atoms.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/checkcif/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/cif_dict_foo.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/cif_order.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/cod/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/cod/deposit.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/cod/deposit_check.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/cod/deposition_list.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/cod/doi.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/cod/upload.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/cod/website_parser.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/core_dict.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/hkl.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/modulation_dict.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/powder_dict.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/reference.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/restraints_dict.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/cif/twin_dict.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/ciforder/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/ciforder/order.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/ciforder/order_ui.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/ciforder/order_ui.ui +0 -0
- {finalcif-157 → finalcif-159}/finalcif/datafiles/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/datafiles/bruker_data.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/datafiles/bruker_frame.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/datafiles/ccdc_mail.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/datafiles/data.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/datafiles/p4p_reader.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/datafiles/sadabs.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/datafiles/saint.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/datafiles/shelx_lst.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/datafiles/utils.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/displaymol/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/displaymol/vtk_molecule.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/equip_property/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/equip_property/tools.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/block_combobox.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/dialogs.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/edit_button.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/equipmenttable.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/file_editor.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/import_selector_ui.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/import_selector_ui.ui +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/loop_creator_ui.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/loop_creator_ui.ui +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/mainstackwidget.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/mixins.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/new_key_dialog.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/new_key_dialog_ui.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/new_key_dialog_ui.ui +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/propertytable.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/spell_check_edit.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/text_templates_ui.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/text_templates_ui.ui +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/text_value_editor.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/validators.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/gui/vzs_viewer.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/icon/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/icon/finalcif.png +0 -0
- {finalcif-157 → finalcif-159}/finalcif/icon/finalcif2.ico +0 -0
- {finalcif-157 → finalcif-159}/finalcif/icon/finalcif2.png +0 -0
- {finalcif-157 → finalcif-159}/finalcif/icon/multitable.ico +0 -0
- {finalcif-157 → finalcif-159}/finalcif/icon/multitable.png +0 -0
- {finalcif-157 → finalcif-159}/finalcif/icon/multitable.xcf +0 -0
- {finalcif-157 → finalcif-159}/finalcif/report/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/report/archive_report.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/report/gui/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/report/gui/mainwindow.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/report/gui/mainwindow.ui +0 -0
- {finalcif-157 → finalcif-159}/finalcif/report/mtools.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/report/references.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/report/report_text.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/report/symm.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/report/tables.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/template/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/template/bootstrap/bootstrap.min.css +0 -0
- {finalcif-157 → finalcif-159}/finalcif/template/machines/D8_VENTURE.cif +0 -0
- {finalcif-157 → finalcif-159}/finalcif/template/mathml2omml.xsl +0 -0
- {finalcif-157 → finalcif-159}/finalcif/template/report.tmpl +0 -0
- {finalcif-157 → finalcif-159}/finalcif/template/template1.docx +0 -0
- {finalcif-157 → finalcif-159}/finalcif/template/template_for_multitable.docx +0 -0
- {finalcif-157 → finalcif-159}/finalcif/template/template_text.docx +0 -0
- {finalcif-157 → finalcif-159}/finalcif/template/template_without_text.docx +0 -0
- {finalcif-157 → finalcif-159}/finalcif/template/templates.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/template/xsl/convert.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/template/xsl/xmltohtml.xsl +0 -0
- {finalcif-157 → finalcif-159}/finalcif/tools/__init__.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/tools/chemparse.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/tools/dsrmath.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/tools/misc.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/tools/options.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/tools/pupdate.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/tools/shred.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/tools/space_groups.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/tools/spgr_format.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/tools/statusbar.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif/tools/sumformula.py +0 -0
- {finalcif-157 → finalcif-159}/finalcif.exe +0 -0
- {finalcif-157 → finalcif-159}/platon/README.txt +0 -0
- {finalcif-157 → finalcif-159}/platon/compile_platon.bat +0 -0
- {finalcif-157 → finalcif-159}/platon/platon_special.f +0 -0
- {finalcif-157 → finalcif-159}/pylock.toml +0 -0
- {finalcif-157 → finalcif-159}/run_finalcif +0 -0
- {finalcif-157 → finalcif-159}/run_finalcif.bat +0 -0
- {finalcif-157 → finalcif-159}/screenshots/finalcif_checkcif.png +0 -0
- {finalcif-157 → finalcif-159}/screenshots/finalcif_loops.png +0 -0
- {finalcif-157 → finalcif-159}/screenshots/finalcif_loops2.png +0 -0
- {finalcif-157 → finalcif-159}/screenshots/finalcif_report.png +0 -0
- {finalcif-157 → finalcif-159}/screenshots/finalcif_responses.png +0 -0
- {finalcif-157 → finalcif-159}/update.exe +0 -0
|
@@ -235,3 +235,5 @@ finalcif_keys_order.cif
|
|
|
235
235
|
/tests/examples/work/cu_BruecknerJK_153F40_0m-finalcif-2.zip
|
|
236
236
|
/tests/examples/work/cu_BruecknerJK_153F40_0m_video-finalcif.png
|
|
237
237
|
/tests/examples/work/report_cu_BruecknerJK_153F40_0m-finalcif.html
|
|
238
|
+
/test-data/checkcif-DK_Zucker2_0m-finalcif.html
|
|
239
|
+
/test-data/report_DK_Zucker2_0m-finalcif.html
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<component name="ProjectRunConfigurationManager">
|
|
2
2
|
<configuration default="false" name="compile_ui_files" type="PythonConfigurationType" factoryName="Python" activateToolWindowBeforeRun="false" nameIsGenerated="true">
|
|
3
3
|
<module name="FinalCif" />
|
|
4
|
+
<option name="ENV_FILES" value="" />
|
|
4
5
|
<option name="INTERPRETER_OPTIONS" value="" />
|
|
5
6
|
<option name="PARENT_ENVS" value="true" />
|
|
6
7
|
<envs>
|
|
@@ -11,7 +12,9 @@
|
|
|
11
12
|
<option name="IS_MODULE_SDK" value="true" />
|
|
12
13
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
|
13
14
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
|
15
|
+
<option name="DEBUG_JUST_MY_CODE" value="true" />
|
|
14
16
|
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
|
17
|
+
<option name="RUN_TOOL" value="true" />
|
|
15
18
|
<option name="SCRIPT_NAME" value="scripts/compile_ui_files.py" />
|
|
16
19
|
<option name="PARAMETERS" value="" />
|
|
17
20
|
<option name="SHOW_COMMAND_LINE" value="false" />
|
finalcif-159/AGENTS.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# FinalCif AI Developer Instructions
|
|
2
|
+
|
|
3
|
+
## General Principles
|
|
4
|
+
- **No Assumptions:** If information or code is missing, ask for it. Do not make assumptions.
|
|
5
|
+
- **Refuse over Guessing:** Prefer refusing over guessing. If you don't know how to complete the code, say you don't know.
|
|
6
|
+
- **Require Specifications:** If the user asks you to write code, ask for a detailed specification first. Do not write code until you have a detailed specification.
|
|
7
|
+
- **Quality Standards:** Follow the rules of 'Refactoring' and 'Clean Code' as described by Martin Fowler and Robert C. Martin, respectively.
|
|
8
|
+
|
|
9
|
+
## Core Setup Conventions
|
|
10
|
+
- **Language/Runtime:** Use Python >=3.12 (`pyproject.toml`), with CI tested on 3.12/3.13/3.14 (`.github/workflows/python_tests.yml`).
|
|
11
|
+
- **UI Framework:** Assume PySide6. UI imports in the codebase are typically routed through `qtpy` (note that UI files are compiled locally via bindings).
|
|
12
|
+
- **Qt Binding Selection:** Set `QT_API=pyside6` before `qtpy` imports (see `finalcif/finalcif_start.py`).
|
|
13
|
+
|
|
14
|
+
## Architecture
|
|
15
|
+
- **Desktop Application:** FinalCif is a crystallographic information file (CIF) editor built with a Qt frontend.
|
|
16
|
+
- **Entry Point:** The application starts from `finalcif/finalcif_start.py` (registered as `finalcif` in `pyproject.toml`).
|
|
17
|
+
- **External Tool Integration:** Offline CheckCIF uses PLATON via `finalcif/tools/platon.py`; executable resolution checks bundled `platon/platon_special.exe`, then `C:\pwt\platon.exe` (Windows), then `platon` on `PATH`.
|
|
18
|
+
|
|
19
|
+
## Workflow & Commands
|
|
20
|
+
- **Dependency Management:** The project uses `uv` for package management (e.g., `uv.lock`, `pyproject.toml`).
|
|
21
|
+
- *Setup:* `uv sync --all-extras --dev`
|
|
22
|
+
- **Testing:**
|
|
23
|
+
- *Command:* `uv run pytest tests`
|
|
24
|
+
- *CI/Linux Headless:* run tests with `QT_QPA_PLATFORM=offscreen` (see `.github/workflows/python_tests.yml`).
|
|
25
|
+
- *Network-Gated Tests:* set `NO_NETWORK=1` to skip network-dependent checks (see `tests/test_checkcif.py`, `tests/test_doi.py`).
|
|
26
|
+
- **Linting:**
|
|
27
|
+
- *Command:* `ruff check .`
|
|
28
|
+
- *CI Lint:* GitHub Actions currently runs `flake8` in `.github/workflows/python_tests.yml`.
|
|
29
|
+
- **UI Compilation:**
|
|
30
|
+
- *Command:* `python scripts/compile_ui_files.py` (this discovers `.ui` files, compiles them, and hot-fixes imports to `qtpy`).
|
|
31
|
+
- **Build/Releases:** Packaged with `hatchling`. Desktop releases use scripts in the `scripts/` directory (like `make_win_release.bat`).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: finalcif
|
|
3
|
-
Version:
|
|
3
|
+
Version: 159
|
|
4
4
|
Summary: CIF file editor
|
|
5
5
|
Project-URL: Homepage, https://dkratzert.de/finalcif.html
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/dkratzert/FinalCif/issues
|
|
@@ -11,17 +11,18 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
11
11
|
Classifier: Operating System :: OS Independent
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
13
|
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
14
|
-
Requires-Python: >=3.
|
|
14
|
+
Requires-Python: >=3.12
|
|
15
15
|
Requires-Dist: certifi
|
|
16
16
|
Requires-Dist: chardet
|
|
17
17
|
Requires-Dist: charset-normalizer
|
|
18
18
|
Requires-Dist: crossrefapi
|
|
19
19
|
Requires-Dist: docxtpl[subdoc]>=0.20.2
|
|
20
|
+
Requires-Dist: fastmolwidget
|
|
20
21
|
Requires-Dist: gemmi>=0.7.5
|
|
21
22
|
Requires-Dist: hatchling
|
|
22
23
|
Requires-Dist: html2text
|
|
23
24
|
Requires-Dist: lxml==6.0.2
|
|
24
|
-
Requires-Dist: numpy
|
|
25
|
+
Requires-Dist: numpy<2.4,>=2.3.5
|
|
25
26
|
Requires-Dist: packaging
|
|
26
27
|
Requires-Dist: pefile
|
|
27
28
|
Requires-Dist: pybind11
|
|
@@ -37,8 +38,8 @@ Requires-Dist: urllib3
|
|
|
37
38
|
Requires-Dist: wheel
|
|
38
39
|
Description-Content-Type: text/markdown
|
|
39
40
|
|
|
40
|
-

|
|
42
|
+
[](https://github.com/dkratzert/FinalCif/actions/workflows/python_tests.yml)
|
|
42
43
|

|
|
43
44
|
[](https://repology.org/project/python:finalcif/versions)
|
|
44
45
|
<a href="https://repology.org/project/finalcif/versions">
|
|
@@ -48,7 +49,7 @@ Description-Content-Type: text/markdown
|
|
|
48
49
|
|
|
49
50
|
# FinalCif
|
|
50
51
|
|
|
51
|
-
FinalCif helps you to get a complete [CIF](https://www.iucr.org/resources/cif) file from a single-
|
|
52
|
+
FinalCif helps you to get a complete [CIF](https://www.iucr.org/resources/cif) file from a single-crystal X-ray diffraction experiment. See here [https://dkratzert.de/finalcif.html](https://dkratzert.de/finalcif.html) for details.
|
|
52
53
|
|
|
53
54
|
For tables from multiple CIF files, you may want to use the program [multitable](https://github.com/dkratzert/multitable).
|
|
54
55
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-

|
|
2
|
+
[](https://github.com/dkratzert/FinalCif/actions/workflows/python_tests.yml)
|
|
3
3
|

|
|
4
4
|
[](https://repology.org/project/python:finalcif/versions)
|
|
5
5
|
<a href="https://repology.org/project/finalcif/versions">
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
# FinalCif
|
|
11
11
|
|
|
12
|
-
FinalCif helps you to get a complete [CIF](https://www.iucr.org/resources/cif) file from a single-
|
|
12
|
+
FinalCif helps you to get a complete [CIF](https://www.iucr.org/resources/cif) file from a single-crystal X-ray diffraction experiment. See here [https://dkratzert.de/finalcif.html](https://dkratzert.de/finalcif.html) for details.
|
|
13
13
|
|
|
14
14
|
For tables from multiple CIF files, you may want to use the program [multitable](https://github.com/dkratzert/multitable).
|
|
15
15
|
|