From a2c5344aabc3b3e79a34462619337aac70a5c66e Mon Sep 17 00:00:00 2001 From: Stef Smeets Date: Mon, 9 May 2022 13:51:31 +0200 Subject: [PATCH] Add demo (#15) * adding demo; update readme with typical installation time * update demo briefly on how to run on own data; update readme for system requrements and system versions * fix links * Fine-tune notebook and add to docs * Embed images * Tweak styling * Fix formatting and typos Co-authored-by: BinWang --- .gitignore | 31 +- README.md | 20 +- docs/conf.py | 1 + docs/examples/edtools_demo.ipynb | 995 ++++++++++++++++++++++++++++ docs/examples/find_cell_step3.png | Bin 0 -> 19107 bytes docs/examples/find_cell_step5.png | Bin 0 -> 17561 bytes docs/examples/intensity_cluster.png | Bin 0 -> 15623 bytes docs/index.rst | 10 + docs/requirements.txt | 1 + 9 files changed, 1048 insertions(+), 10 deletions(-) create mode 100644 docs/examples/edtools_demo.ipynb create mode 100644 docs/examples/find_cell_step3.png create mode 100644 docs/examples/find_cell_step5.png create mode 100644 docs/examples/intensity_cluster.png diff --git a/.gitignore b/.gitignore index 47d9349..564013d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,14 +2,37 @@ *.bpc *.c *.dacs -*.egg-info *.log *.pptx *.prefs -*.pyc -*.pyd *.txt *.zip -.coverage .db +*.py[cod] +*.egg-info +*.eggs +.ipynb_checkpoints +*.vtk + +build +dist +.cache +__pycache__ + +htmlcov +.coverage +coverage.xml +.pytest_cache + +docs/_build +docs/apidocs +playground/ + +# ide +.idea +.eclipse +.vscode + +# Mac +.DS_Store diff --git a/README.md b/README.md index c4f7a00..fe2bbdd 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,9 @@ Collection of tools for automated processing and clustering of single-crystal electron diffraction data. -Install using `pip install edtools`. +Install using `pip install edtools`. Installation should take less than 20 seconds on a normal desktop. + +Find the latest [releases](https://github.com/instamatic-dev/edtools/releases) for the versions that have been tested on. [The source for this project is available here][src]. @@ -32,7 +34,7 @@ Looks files matching `CORRECT.LP` in all subdirectories and extracts unit cell/i ### find_cell.py -This program a cells.yaml file and shows histogram plots with the unit cell parameters. This program mimicks `CELLPARM` (http://xds.mpimf-heidelberg.mpg.de/html_doc/cellparm_program.html) and calculates the weighted mean lattice parameters, where the weight is typically the number of observed reflections (defaults to 1.0). For each lattice parameter, the mean is calculated in a given range (default range = median+-2). The range can be changed by dragging the cursor on the histogram plots. +This program a cells.yaml file and shows histogram plots with the unit cell parameters. This program mimicks [`CELLPARM`](http://xds.mpimf-heidelberg.mpg.de/html_doc/cellparm_program.html) and calculates the weighted mean lattice parameters, where the weight is typically the number of observed reflections (defaults to 1.0). For each lattice parameter, the mean is calculated in a given range (default range = median+-2). The range can be changed by dragging the cursor on the histogram plots. Alternatively, the unit cells can be clustered by giving the `--cluster` command, in which a dendrogram is shown. The cluster cutoff can be selected by clicking in the dendrogram. The clusters will be written to `cells_cluster_#.yaml`. @@ -109,13 +111,19 @@ Usage: edtools.find_rotation_axis [XDS.INP] ``` +## OS Requirement + +The package has been mainly developed and tested under windows 10. -## Requirements +## Software Requirements -- Python3.6 including `numpy`, `scipy`, `matplotlib`, and `pandas` libraries +- Python 3.6+ including `numpy`, `scipy`, `matplotlib`, and `pandas` libraries - `sginfo` or `cctbx.python` must be available on the system path for `edtools.make_shelx` -- (Windows 10) Access to [WSL](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux) -- (Windows 10) XDS and related tools must be available under WSL +- (Windows 10 or newer) Access to [WSL](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux) +- (Windows 10 or newer) XDS and related tools must be available under WSL + +## Package dependencies +Check [pyproject.toml](pyproject.toml) for the full dependency list and versions. [src]: https://github.com/instamatic-dev/edtools diff --git a/docs/conf.py b/docs/conf.py index 8fe2e3f..3f459eb 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -54,6 +54,7 @@ def setup(app): # 'nbsphinx_link', # 'sphinx.ext.todo', # 'sphinx.ext.viewcode', + 'nbsphinx', 'autodocsumm', ] diff --git a/docs/examples/edtools_demo.ipynb b/docs/examples/edtools_demo.ipynb new file mode 100644 index 0000000..5ef52d6 --- /dev/null +++ b/docs/examples/edtools_demo.ipynb @@ -0,0 +1,995 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "716302f5", + "metadata": {}, + "source": [ + "# *edtools* Demo\n", + "\n", + "**edtools** is a python package for automated processing of a large number of 3D electron diffraction (3D ED) datasets. It can be downloaded from https://doi.org/10.5281/zenodo.5727189. \n", + "\n", + "For runing *edtools*, *XDS* package for reduction of 3D ED datasets is required. *XDS* package is available at https://xds.mr.mpg.de/html_doc/downloading.html.\n", + "\n", + "A typical cycle of using *edtools* for processing batch 3D ED datasets goes through the following steps:\n", + "\n", + "- `edtools.autoindex`\n", + "- `edtools.extract_xds_info`\n", + "- `edtools.find_cell`\n", + "- `edtools.update_xds`\n", + "- `edtools.make_xscale`\n", + "- `edtools.cluster`\n", + " \n", + "Here we demonstrate the processing of batch 3D ED datasets for phase analysis and structure determination using *edtools*. The datasets for the demo can be downloaded from...\n", + " \n", + "The datasets were collected on a zeolite mixture sample using serial rotation electron diffraction (SerialRED) data collection technique implemented in the program **Instamatic** (available at https://doi.org/10.5281/zenodo.5175957), which runs on a JEOL JEM-2100-LaB6 at 200 kV equipped with a 512 x 512 Timepix hybrid pixel detector (55 x 55 µm pixel size, QTPX-262k, Amsterdam Scientific Instruments).\n", + "\n", + "The zeolite mixture sample contains phases **IWV**,**RTH**, and ***CTH**. The information of these three phases can be found from the structure database of zeolites (https://europe.iza-structure.org/IZA-SC/ftc_table.php).\n", + "\n", + "This demo takes around 5-10 min to run on a normal desktop computer with all the required packages installed properly beforehand.\n" + ] + }, + { + "cell_type": "markdown", + "id": "7e6d7456", + "metadata": {}, + "source": [ + "## 1. Indexing\n", + "\n", + "Automatically index the 3D ED datasets by running *XDS* in all subfolders (SMV) that contains file `XDS.INP`, which is automatically generated during data collection using *Instamatic*." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "41309fa9-9722-4574-9f92-9e0eb3b2ca74", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "16 files named XDS.INP (subdir: None) found.\n", + "\n", + " 0: C:\\Users\\yluo\\demo\\data\\stagepos_0067\\crystal_0001\\SMV # Tue May 3 19:58:34 2022\n", + "Spgr 5 - Cell 26.93 14.05 5.36 90.00 90.89 90.00 - Vol 2027.80\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + "---------------------------------------------------------------------------------\n", + " 0 4.35 0.80 583 324 15.0 4.59 13.7 98.6 7.47 6.72\n", + " - 0.85 0.80 54 42 12.5 1.96 26.8 91.2\n", + "\n", + "\n", + " 1: C:\\Users\\yluo\\demo\\data\\stagepos_0164\\crystal_0000\\SMV # Tue May 3 19:58:35 2022\n", + "Spgr 1 - Cell 9.49 9.90 12.47 66.56 89.45 86.35 - Vol 1072.59\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 1 6.39 0.80 229 209 4.8 24.01 22.3 96.2 50.00 4.74\n", + " - 0.91 0.85 31 29 4.5 12.16 21.3 0.0\n", + "\n", + "\n", + " 3: C:\\Users\\yluo\\demo\\data\\stagepos_0299\\crystal_0001\\SMV # Tue May 3 19:58:38 2022\n", + "Spgr 1 - Cell 4.83 14.83 16.03 115.66 89.61 94.16 - Vol 1031.87\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 3 2.05 0.80 400 312 7.5 2.44 20.6 95.4 4.24 6.11\n", + " - 0.84 0.80 27 26 4.7 1.79 11.2 0.0\n", + "\n", + "\n", + " 4: C:\\Users\\yluo\\demo\\data\\stagepos_0325\\crystal_0000\\SMV # Tue May 3 19:58:40 2022\n", + "Spgr 5 - Cell 13.69 25.42 14.90 90.00 115.84 90.00 - Vol 4666.87\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 4 11.09 0.79 3744 2147 42.8 3.44 13.1 99.6 13.90 8.10\n", + " - 0.97 0.90 623 336 47.9 1.32 68.9 84.2\n", + "\n", + "\n", + " 5: C:\\Users\\yluo\\demo\\data\\stagepos_0341\\crystal_0000\\SMV # Tue May 3 19:58:42 2022\n", + "Spgr 5 - Cell 25.67 13.50 17.73 90.00 132.44 90.00 - Vol 4534.43\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 5 6.86 0.80 2161 1081 21.8 4.23 10.5 100.0 33.30 8.74\n", + " - 0.97 0.90 342 159 23.3 0.83 130.3 69.8\n", + "\n", + "\n", + " 6: C:\\Users\\yluo\\demo\\data\\stagepos_0368\\crystal_0001\\SMV # Tue May 3 19:58:43 2022\n", + "Spgr 1 - Cell 10.17 10.36 12.16 93.71 113.40 98.01 - Vol 1154.16\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 6 10.17 0.80 611 443 9.4 3.17 14.9 97.5 5.07 4.64\n", + " - 0.85 0.80 56 53 7.0 1.96 73.1 6.4\n", + "\n", + "\n", + " 7: C:\\Users\\yluo\\demo\\data\\stagepos_0538\\crystal_0000\\SMV # Tue May 3 19:58:45 2022\n", + "Spgr 1 - Cell 10.55 10.52 11.81 80.39 66.60 75.74 - Vol 1162.33\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 7 5.10 0.80 443 330 7.0 3.80 10.7 99.4 8.61 5.62\n", + " - 0.85 0.80 38 36 4.8 1.80 76.5 0.0\n", + "\n", + "\n", + " 8: C:\\Users\\yluo\\demo\\data\\stagepos_0648\\crystal_0001\\SMV # Tue May 3 19:58:46 2022\n", + "Spgr 1 - Cell 13.82 14.32 16.18 86.20 111.75 116.39 - Vol 2645.41\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 8 6.37 0.80 1460 989 9.1 2.88 16.3 97.4 5.24 7.62\n", + " - 0.85 0.80 166 125 7.3 1.36 62.8 71.4\n", + "\n", + "\n", + " 9: C:\\Users\\yluo\\demo\\data\\stagepos_0849\\crystal_0000\\SMV # Tue May 3 19:58:48 2022\n", + "Spgr 5 - Cell 15.06 26.22 15.41 90.00 118.30 90.00 - Vol 5357.50\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 9 13.11 0.79 2063 1319 22.1 3.46 10.5 99.5 12.09 7.58\n", + " - 0.89 0.83 326 223 24.5 1.01 53.6 85.6\n", + "\n", + "\n", + " 10: C:\\Users\\yluo\\demo\\data\\stagepos_0905\\crystal_0000\\SMV # Tue May 3 19:58:49 2022\n", + "Spgr 3 - Cell 13.91 5.07 14.97 90.00 117.96 90.00 - Vol 932.53\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 10 12.33 0.80 479 300 13.8 3.68 13.4 99.5 16.07 9.46\n", + " - 1.20 1.07 58 35 14.6 4.72 24.9 91.2\n", + "\n", + "\n", + " 11: C:\\Users\\yluo\\demo\\data\\stagepos_0905\\crystal_0001\\SMV # Tue May 3 19:58:51 2022\n", + "Spgr 1 - Cell 13.71 14.57 15.77 83.07 68.29 62.34 - Vol 2587.36\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 11 11.49 0.80 1596 1144 10.7 3.30 12.4 98.5 7.24 7.18\n", + " - 0.85 0.80 124 121 7.0 0.94 22.6 83.4\n", + "\n", + "\n", + " 12: C:\\Users\\yluo\\demo\\data\\stagepos_0980\\crystal_0000\\SMV # Tue May 3 19:58:53 2022\n", + "Spgr 1 - Cell 14.56 15.00 15.27 97.22 105.97 120.36 - Vol 2621.77\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 12 7.54 0.80 1746 1222 11.3 4.00 13.3 98.5 8.77 5.85\n", + " - 0.85 0.80 164 146 8.4 1.48 36.5 88.0\n", + "\n", + "\n", + " 13: C:\\Users\\yluo\\demo\\data\\stagepos_1014\\crystal_0000\\SMV # Tue May 3 19:58:54 2022\n", + "Spgr 1 - Cell 5.30 14.56 15.04 112.06 93.44 86.65 - Vol 1072.87\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 13 5.01 0.81 447 328 7.5 4.11 10.9 98.5 6.65 6.67\n", + " - 0.85 0.80 51 44 6.3 2.11 18.7 92.7\n", + "\n", + "\n", + " 15: C:\\Users\\yluo\\demo\\data\\stagepos_1283\\crystal_0001\\SMV # Tue May 3 19:58:57 2022\n", + "Spgr 1 - Cell 13.64 15.02 25.09 93.07 91.13 114.33 - Vol 4672.25\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 15 6.60 0.80 3124 2149 11.3 3.54 8.4 99.5 12.64 6.94\n", + " - 0.85 0.80 346 280 9.2 1.24 56.2 85.0\n", + "\n" + ] + } + ], + "source": [ + "!edtools.autoindex" + ] + }, + { + "cell_type": "markdown", + "id": "3fa96297", + "metadata": {}, + "source": [ + "## 2. Extract cell\n", + "\n", + "Extract the determined unit cell parameters from the output files (`CORRECT.LP`) of *XDS* " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c4870424", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "14 files named CORRECT.LP (subdir: None) found.\n", + " 1: C:\\Users\\yluo\\demo\\data\\stagepos_0067\\crystal_0001\\SMV # Tue May 3 19:58:34 2022\n", + "Spgr 5 - Cell 26.93 14.05 5.36 90.00 90.89 90.00 - Vol 2027.80\n", + "\n", + " 2: C:\\Users\\yluo\\demo\\data\\stagepos_0164\\crystal_0000\\SMV # Tue May 3 19:58:35 2022\n", + "Spgr 1 - Cell 9.49 9.90 12.47 66.56 89.45 86.35 - Vol 1072.59\n", + "\n", + " 3: C:\\Users\\yluo\\demo\\data\\stagepos_0299\\crystal_0001\\SMV # Tue May 3 19:58:38 2022\n", + "Spgr 1 - Cell 4.83 14.83 16.03 115.66 89.61 94.16 - Vol 1031.87\n", + "\n", + " 4: C:\\Users\\yluo\\demo\\data\\stagepos_0325\\crystal_0000\\SMV # Tue May 3 19:58:40 2022\n", + "Spgr 5 - Cell 13.69 25.42 14.90 90.00 115.84 90.00 - Vol 4666.87\n", + "\n", + " 5: C:\\Users\\yluo\\demo\\data\\stagepos_0341\\crystal_0000\\SMV # Tue May 3 19:58:42 2022\n", + "Spgr 5 - Cell 25.67 13.50 17.73 90.00 132.44 90.00 - Vol 4534.43\n", + "\n", + " 6: C:\\Users\\yluo\\demo\\data\\stagepos_0368\\crystal_0001\\SMV # Tue May 3 19:58:43 2022\n", + "Spgr 1 - Cell 10.17 10.36 12.16 93.71 113.40 98.01 - Vol 1154.16\n", + "\n", + " 7: C:\\Users\\yluo\\demo\\data\\stagepos_0538\\crystal_0000\\SMV # Tue May 3 19:58:45 2022\n", + "Spgr 1 - Cell 10.55 10.52 11.81 80.39 66.60 75.74 - Vol 1162.33\n", + "\n", + " 8: C:\\Users\\yluo\\demo\\data\\stagepos_0648\\crystal_0001\\SMV # Tue May 3 19:58:46 2022\n", + "Spgr 1 - Cell 13.82 14.32 16.18 86.20 111.75 116.39 - Vol 2645.41\n", + "\n", + " 9: C:\\Users\\yluo\\demo\\data\\stagepos_0849\\crystal_0000\\SMV # Tue May 3 19:58:48 2022\n", + "Spgr 5 - Cell 15.06 26.22 15.41 90.00 118.30 90.00 - Vol 5357.50\n", + "\n", + " 10: C:\\Users\\yluo\\demo\\data\\stagepos_0905\\crystal_0000\\SMV # Tue May 3 19:58:49 2022\n", + "Spgr 3 - Cell 13.91 5.07 14.97 90.00 117.96 90.00 - Vol 932.53\n", + "\n", + " 11: C:\\Users\\yluo\\demo\\data\\stagepos_0905\\crystal_0001\\SMV # Tue May 3 19:58:51 2022\n", + "Spgr 1 - Cell 13.71 14.57 15.77 83.07 68.29 62.34 - Vol 2587.36\n", + "\n", + " 12: C:\\Users\\yluo\\demo\\data\\stagepos_0980\\crystal_0000\\SMV # Tue May 3 19:58:53 2022\n", + "Spgr 1 - Cell 14.56 15.00 15.27 97.22 105.97 120.36 - Vol 2621.77\n", + "\n", + " 13: C:\\Users\\yluo\\demo\\data\\stagepos_1014\\crystal_0000\\SMV # Tue May 3 19:58:54 2022\n", + "Spgr 1 - Cell 5.30 14.56 15.04 112.06 93.44 86.65 - Vol 1072.87\n", + "\n", + " 14: C:\\Users\\yluo\\demo\\data\\stagepos_1283\\crystal_0001\\SMV # Tue May 3 19:58:57 2022\n", + "Spgr 1 - Cell 13.64 15.02 25.09 93.07 91.13 114.33 - Vol 4672.25\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + "---------------------------------------------------------------------------------\n", + "\n", + " 1 4.35 0.80 583 324 15.0 4.59 13.7 98.6 7.47 6.72 # C:\\Users\\yluo\\demo\\data\\stagepos_0067\\crystal_0001\\SMV\\CORRECT.LP\n", + " - 0.85 0.80 54 42 12.5 1.96 26.8 91.2\n", + "\n", + " 2 6.39 0.80 229 209 4.8 24.01 22.3 96.2 50.00 4.74 # C:\\Users\\yluo\\demo\\data\\stagepos_0164\\crystal_0000\\SMV\\CORRECT.LP\n", + " - 0.91 0.85 31 29 4.5 12.16 21.3 0.0\n", + "\n", + " 3 2.05 0.80 400 312 7.5 2.44 20.6 95.4 4.24 6.11 # C:\\Users\\yluo\\demo\\data\\stagepos_0299\\crystal_0001\\SMV\\CORRECT.LP\n", + " - 0.84 0.80 27 26 4.7 1.79 11.2 0.0\n", + "\n", + " 4 11.09 0.79 3744 2147 42.8 3.44 13.1 99.6 13.90 8.10 # C:\\Users\\yluo\\demo\\data\\stagepos_0325\\crystal_0000\\SMV\\CORRECT.LP\n", + " - 0.97 0.90 623 336 47.9 1.32 68.9 84.2\n", + "\n", + " 5 6.86 0.80 2161 1081 21.8 4.23 10.5 100.0 33.30 8.74 # C:\\Users\\yluo\\demo\\data\\stagepos_0341\\crystal_0000\\SMV\\CORRECT.LP\n", + " - 0.97 0.90 342 159 23.3 0.83 130.3 69.8\n", + "\n", + " 6 10.17 0.80 611 443 9.4 3.17 14.9 97.5 5.07 4.64 # C:\\Users\\yluo\\demo\\data\\stagepos_0368\\crystal_0001\\SMV\\CORRECT.LP\n", + " - 0.85 0.80 56 53 7.0 1.96 73.1 6.4\n", + "\n", + " 7 5.10 0.80 443 330 7.0 3.80 10.7 99.4 8.61 5.62 # C:\\Users\\yluo\\demo\\data\\stagepos_0538\\crystal_0000\\SMV\\CORRECT.LP\n", + " - 0.85 0.80 38 36 4.8 1.80 76.5 0.0\n", + "\n", + " 8 6.37 0.80 1460 989 9.1 2.88 16.3 97.4 5.24 7.62 # C:\\Users\\yluo\\demo\\data\\stagepos_0648\\crystal_0001\\SMV\\CORRECT.LP\n", + " - 0.85 0.80 166 125 7.3 1.36 62.8 71.4\n", + "\n", + " 9 13.11 0.79 2063 1319 22.1 3.46 10.5 99.5 12.09 7.58 # C:\\Users\\yluo\\demo\\data\\stagepos_0849\\crystal_0000\\SMV\\CORRECT.LP\n", + " - 0.89 0.83 326 223 24.5 1.01 53.6 85.6\n", + "\n", + " 10 12.33 0.80 479 300 13.8 3.68 13.4 99.5 16.07 9.46 # C:\\Users\\yluo\\demo\\data\\stagepos_0905\\crystal_0000\\SMV\\CORRECT.LP\n", + " - 1.20 1.07 58 35 14.6 4.72 24.9 91.2\n", + "\n", + " 11 11.49 0.80 1596 1144 10.7 3.30 12.4 98.5 7.24 7.18 # C:\\Users\\yluo\\demo\\data\\stagepos_0905\\crystal_0001\\SMV\\CORRECT.LP\n", + " - 0.85 0.80 124 121 7.0 0.94 22.6 83.4\n", + "\n", + " 12 7.54 0.80 1746 1222 11.3 4.00 13.3 98.5 8.77 5.85 # C:\\Users\\yluo\\demo\\data\\stagepos_0980\\crystal_0000\\SMV\\CORRECT.LP\n", + " - 0.85 0.80 164 146 8.4 1.48 36.5 88.0\n", + "\n", + " 13 5.01 0.81 447 328 7.5 4.11 10.9 98.5 6.65 6.67 # C:\\Users\\yluo\\demo\\data\\stagepos_1014\\crystal_0000\\SMV\\CORRECT.LP\n", + " - 0.85 0.80 51 44 6.3 2.11 18.7 92.7\n", + "\n", + " 14 6.60 0.80 3124 2149 11.3 3.54 8.4 99.5 12.64 6.94 # C:\\Users\\yluo\\demo\\data\\stagepos_1283\\crystal_0001\\SMV\\CORRECT.LP\n", + " - 0.85 0.80 346 280 9.2 1.24 56.2 85.0\n", + "\n", + "Wrote 14 cells to file cells.xlsx\n", + "Wrote 14 cells to file cells.yaml\n", + "Wrote 8 entries to file filelist.txt (completeness > 10.0%, CC(1/2) > 90.0%)\n", + "\n", + "Most likely lattice types:\n", + " 1 Lattice type `aP` (spgr: 1) was found 9 times (score: 10056)\n", + " 2 Lattice type `mC` (spgr: 5) was found 4 times (score: 8551)\n", + " 3 Lattice type `mP` (spgr: 3) was found 1 times (score: 479)\n", + "\n", + " ** the score corresponds to the total number of indexed reflections.\n" + ] + } + ], + "source": [ + "!edtools.extract_xds_info" + ] + }, + { + "cell_type": "markdown", + "id": "2738796d", + "metadata": {}, + "source": [ + "## 3. Unit-cell-based clustering for phase analysis" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5c5caa88", + "metadata": {}, + "outputs": [], + "source": [ + "!edtools.find_cell cells.yaml -s --cluster --metric lcv" + ] + }, + { + "attachments": { + "find_cell_step3.png": { + "image/png": "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qVOnThfdH2AVjAACLrRo0SJt27ZNJSUlys3N1VdffaUlS5YoOjpaCxYscJxML/02h961116r1q1ba9iwYWrUqJFyc3O1atUq7du3r9RceH+mbt26GjVqlNLS0nTTTTepV69e+v7777Vo0aIKj6bVrVtXqampmjBhgnr06KE+ffpo+/bteuWVV3T11Vfrn//8p6Tfzgl88skn9dBDD+mGG27Q7bffrqysLGVkZKhx48YVPlfrpptu0sSJE5WUlKROnTrpxx9/1OzZs51GH6tS79695e3traVLlzrNfffoo49q/vz5GjBggO6++2516NBBeXl5WrBggdLT09W2bVu1bNlS11xzjVJTU5WXl6fQ0FC99957ZV540qFDB82dO1cpKSm6+uqrFRQUpJtvvln33nuvZsyYoSFDhmjDhg2KiYnR/PnztXLlSk2bNu2C59S70HMAO3bsqAEDBig1NVUHDx5UkyZN9NZbbykrK6vUKG1iYqK+/vprpwCfn5+vl156SdJvt9iTpJdfflk1a9ZUzZo1lZyc7LSPvLw8LVq0SLfddptjapyyLF26VIZh6JZbbvnLrwmwLHMuPgas5eyUIGcXX19fIyIiwrjxxhuNF154wWk6j3Pt2rXLSExMNCIiIgwfHx8jMjLSuOmmm4z58+eX2vcfp5gpa7oRm81mTJgwwahXr54REBBgdO3a1fjpp59K3Qnkz6atefnll41mzZoZPj4+Rnh4uHH//fcbR48eLbXeiy++aERHRxt+fn5GXFycsXLlSqNDhw5Gjx49StU5b968UtufPn3aeOSRRxz1/u1vfzNWrVpldOnSpcypZP64j/Jex/jx4w1JxqFDh8p8fefq06eP8fe//71U+5EjR4zk5GQjMjLS8PX1NRo0aGAMHjzYOHz4sGOdXbt2GQkJCYafn58RHh5uPP7448aSJUtKvS8nTpww7rzzTqNmzZqGJKcpYXJzc42kpCSjTp06hq+vr9G6dWtj1qxZper5K9PAXIzCwkJj1KhRRkREhOHn52dcffXVxuLFi0ut16VLF+OPXzHnm36mrGlw0tPTDUnGggULzlvTwIEDjWuvvfaiXhdgNdwLGIDL2O121a1bV7feeqtef/11s8upkLN3L9m2bVupK6hhvpycHDVs2FDvvfceI4DAX8A5gACqxOnTp0udv/f2228rLy/P6VZw1V3n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W4wA1qlTR15eXsrNzXVqz83NVURERKn1d+3apaysLN18882ONrvdLkny9vbW9u3b1bhx41LbpaamKiUlxfG4oKCAEAgAAC45pgbA3bt3a8WKFdqzZ49OnTqlunXrqn379oqPj5e/v3+F9+Pr66sOHTooMzPTMZWL3W5XZmamkpOTS63frFkz/fjjj05tY8aM0fHjx/XCCy+UG+r8/Pzk5+dX8RcIAABQDZkSAGfPnq0XXnhB69evV3h4uOrXr6+AgADl5eVp165d8vf316BBgzR69GhFR0dXaJ8pKSkaPHiwYmNjFRcXp2nTpunkyZNKSkqSJCUmJioyMlJpaWny9/dXq1atnLavWbOmJJVqBwAAcDcuD4Dt27eXr6+vhgwZog8++KDUaFtRUZFWrVql9957T7GxsXrllVc0YMCAP93vwIEDdejQIY0bN045OTlq166dFi9e7LgwZO/evfL0tOQpjwAAAE5cHgCffvppde/evdzn/fz81LVrV3Xt2lWTJ09WVlZWhfednJxc5iFfSVq+fPl5t83IyKhwPwAAAJcylwfA84W/P6pdu7Zq165dhdUAAABYj6nHRBMSEpSRkcF8egAAAC5kagBs2bKlUlNTFRERoQEDBuiTTz7RmTNnzCwJAADA7ZkaAF944QXt379fH3/8sWrUqKHExESFh4fr3nvv1ddff21maQAAAG7L9MtiPT091a1bN2VkZCg3N1czZszQ2rVrdcMNN5hdGgAAgFuqNncCycnJ0Xvvvad3331XP/zwg+Li4swuCQAAwC2ZOgJYUFCgWbNm6cYbb1RUVJReffVV9enTRzt27NDq1avNLA0AAMBtmToCGB4erlq1amngwIFKS0tTbGysmeUAAABYgqkBcMGCBfr73//OHToAAABcyNTk1aRJE+3atatU+44dO/7SHUAAAABQcaYGwCFDhui7774r1b5mzRoNGTLE9QUBAABYgKkB8Pvvv9ff/va3Uu3XXHONNm3a5PqCAAAALMDUAOjh4aHjx4+Xas/Pz5fNZjOhIgAAAPdnagC87rrrlJaW5hT2bDab0tLSdO2115pYGQAAgPsy9SrgZ555Rtddd52uvPJKde7cWZK0YsUKFRQU6KuvvjKzNAAAALdl6ghgixYt9MMPP+j222/XwYMHdfz4cSUmJmrbtm1q1aqVmaUBAAC4LdNvBVe/fn1N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HdN///tfl9XiTgiA1dCiRYt0+vRpbd26Ve+++65OnjxpdkkudeTIEY0bN05jx45V3bp1zS5HkjRixAj1799fv/76q95//33ZbDYVFxebXZYKCwslqcyA5+/v71jHFQFwzpw58vHx0e23317lfZUlJiZG1113nW677TbVrl1bn332maZMmaKIiAglJyebUtNZ27Zt04MPPqj4+HgNHjzY1FrKMmXKFC1dulSvvPKKatasWWX9lPdZPPez6koPPPCA7r//fg0dOlT/+te/ZLfbNWnSJMcfVq6upzrp1KmT06kCffr0Uf/+/dWmTRulpqZq8eLFLqvlxIkTOnXqlO677z7HVb+33nqriouLNWPGDE2cOFFNmzZ1WT3uggBYDV1//fWSpJ49e+qWW25Rq1atFBQUZPqXmKuMGTNGoaGheuihh8wuxaFZs2Zq1qyZJCkxMVHdunXTzTffrDVr1pg6Rc7Zw1dnR4zPdfbQiCvO5Txx4oQ++eQTde/e3el8Kld57733dO+99+qXX35RgwYNJP32BWG32zV69GjdcccdptQl/XZotXfv3goJCXGcA1edzJ07V2PGjNHQoUN1//33V2lfAQEBpn9Wz3XfffcpOztbzz33nN566y1JUmxsrP71r39p8uTJCgoKcmk91V2TJk10yy236MMPP3QaNa1qZz8Xd9xxh1P7nXfeqRkzZmjVqlUEwAvAOYDVXOPGjdW+fXvNnj3b7FJcYseOHXrttdc0fPhw/frrr8rKylJWVpZOnz6tM2fOKCsrS3l5eWaXqf79+2vdunWmTY9z1tlDZ2dHLM514MABhYaGumT07+OPP9apU6dMOfwrSa+88orat2/vCH9n9enTR6dOnXLpuZDnys/PV8+ePXXs2DEtXry4UqZyqkxLlixRYmKievfurfT09Crvr169euV+ViWZ8vuZPHmycnNztWLFCv3www9at26d4wKDK664wuX1VHdRUVEqLi526ZGps5+LP17kFRYWJkk6evSoy2pxJwTAS0BhYaHy8/PNLsMl9u/fL7vdruHDh6thw4aOZc2aNfrll1/UsGHDanEO1dlDQ2a/L5GRkapbt26ZJ2avXbtW7dq1c0kds2fPVlBQkPr06eOS/v4oNzdXNputVPuZM2ckyZQrGE+fPq2bb75Zv/zyixYuXKgWLVq4vIbzWbNmjfr166fY2Fi9//778vau+gNC7dq10y+//OK4avvcWs4+b4ZatWrp2muvdVxwtnTpUjVo0MAx6o/f/e9//5O/v79LR0c7dOggqfQ5mWfPGa0upwpdagiA1URJSUmZf8WsXbtWP/74Y5lXebqjVq1a6aOPPiq1tGzZUpdffrk++ugjDR061GX1HDx4sFTbmTNn9PbbbysgIKBafKnfdtttWrhwodMUGpmZmfrll180YMCAKu//0KFDWrp0qfr166fAwMAq768sV1xxhb7//vtSI7L//e9/5enpqTZt2ri0HpvNpoEDB2rVqlWaN2+e4uPjXdr/n9m6dat69+6tmJgYLVy40GWHXvv37y+bzabXXnvN0VZUVKRZs2apY8eOioqKckkd5zN37lytW7dOI0aMkKendb8iy7qT0ObNm7VgwQJ169bNpb+bs+cVv/nmm07tb7zxhry9vR2zAOCv4RxAF3n55Zd17Ngxx18sn376qWMG84ceekiGYSgqKkoDBw503D7qxx9/1KxZsxQSEqKxY8e6rJaQkBDt2bNH77zzjiQ5RpfOXk0ZHR2tu+66q9LqOVedOnXUt2/fUu1n5wIs67mq9H//938qKCjQddddp8jISOXk5Gj27Nnatm2b/v3vf1f5X8EVea8ef/xxzZs3T9dff70efvhhnThxQs8995xat27tmEaoKs2dO1clJSWmHf6VpEcffVSLFi1S586dlZycrNq1a2vhwoVatGiR7rnnHpcfWnzkkUe0YMEC3XzzzcrLy9O7777r9Pw///nPKuv7zz4znp6e6t69u44ePapHH31Un332mdP2jRs3rrLA2rFjRw0YMECpqak6ePCgmjRporfeektZWVmlvtxd4ZtvvtHEiRPVrVs31a5dW6tXr9asWbPUo0cPPfzwwy6vR6rYv3lXGDhwoAICAtSpUyeFhYVpy5Yteu211xQYGKinn37aJTWc1b59e919992aOXOmSkpK1KVLFy1fvlzz5s1TampqtTu14pJh9kzUVhEdHW1IKnPZvXu3UVRUZDz88MNGmzZtjODgYMPHx8eIjo42hg4dauzevdultRjG77PAl7V06dKlUuupCLPuBPLf//7XSEhIMMLDww1vb2+jVq1aRkJCgvHJJ5+4pP+KvFeGYRg//fST0a1bNyMwMNCoWbOmMWjQICMnJ8clNV5zzTVGWFiYUVJS4pL+yrNmzRqjZ8+eRkREhOHj42NcccUVxuTJk40zZ864vJYuXbqU+75V9f92/+wzs3v37vPWNnjw4Cqtr7Cw0Bg1apQRERFh+Pn5GVdffbWxePHiKu2zPDt37jS6detm1KlTx/Dz8zOaNWtmpKWllbqLiytV9N98VXvhhReMuLg4IzQ01PD29jbq1atn/POf/zR27NjhshrOVVxcbDz55JNGdHS04ePjYzRp0sT4z3/+Y0ot7sLDMAyjskMlAAAAqi/rnuAAAABgUQRAAAAAiyEAAgAAWAwBEAAAwGIIgAAAABZDAAQAALAYAiAAAIDFEAABAAAshgAIAGXw8PDQxx9/bHYZAFAlCIAA3M6QIUNcft9oALiUEAABAAAshgAIwK117dpVw4cP17/+9S+FhoYqIiJCTz75pNM6O3bs0HXXXSd/f3+1aNFCS5YsKbWf7Oxs3X777apZs6ZCQ0N1yy23KCsrS5K0bds2BQYGas6cOY7133//fQUEBGjLli1V+fIA4IIQAAG4vbfeeks1atTQmjVr9Oyzz2rixImOkGe323XrrbfK19dXa9asUXp6ukaPHu20/ZkzZ9S9e3dddtllWrFihVauXKmgoCD16NFDxcXFatasmZ5//nk98MAD2rt3r/bt26f77rtPzzzzjFq0aGHGSwaA8/IwDMMwuwgAqExDhgzRsWPH9PHHH6tr166y2WxasWKF4/m4uDjdcMMNevrpp/Xll1+qd+/e2rNnj+rXry9JWrx4sXr27KmPPvpIffv21bvvvqtJkyZp69at8vDwkCQVFxerZs2a+vjjj9WtWzdJ0k033aSCggL5+vrKy8tLixcvdqwPANWJt9kFAEBVa9OmjdPjevXq6eDBg5KkrVu3KioqyhH+JCk+Pt5p/c2bN2vnzp267LLLnNpPnz6tXbt2OR7PnDlTV1xxhTw9PfXzzz8T/gBUWwRAAG7Px8fH6bGHh4fsdnuFtz9x4oQ6dOig2bNnl3qubt26jp83b96skydPytPTUwcOHFC9evUuvGgAqEIEQACW1rx5c2VnZzsFttWrVzutc9VVV2nu3LkKCwtTcHBwmfvJy8vTkCFD9MQTT+jAgQMaNGiQNm7cqICAgCp/DQDwV3ERCABLS0hI0BVXXKHBgwdr8+bNWrFihZ544gmndQYNGqQ6derolltu0YoVK7R7924tX75cw4cP1759+yRJ9913n6KiojRmzBhNnTpVNptNo0aNMuMlAcCfIgACsDRPT0999NFHKiwsVFxcnO655x5NnjzZaZ3AwEB98803uvzyy3XrrbeqefPmGjp0qE6fPq3g4GC9/fbb+vzzz/XOO+/I29tbNWrU0LvvvqvXX39dixYtMumVAUD5uAoYAADAYhgBBAAAsBgCIAAAgMUQAAEAACyGAAgAAGAxBEAAAACLIQACAABYDAEQAADAYgiAAAAAFvP/ANQmjxOS6hu2AAAAAElFTkSuQmCC" + } + }, + "cell_type": "markdown", + "id": "b7020b02", + "metadata": {}, + "source": [ + "![find_cell_step3.png](attachment:find_cell_step3.png)" + ] + }, + { + "cell_type": "markdown", + "id": "2e15e134-bc0d-4bba-a0bb-49f385e26180", + "metadata": {}, + "source": [ + "Console Output\n", + "\n", + "```\n", + "Linkage method = average\n", + "Cutoff distance = 0.1735\n", + "Distance metric = lcv\n", + "\n", + "----------------------------------------\n", + "\n", + "Cluster #1 (6 items)\n", + " 4 [ 14.04 14.39 14.72 76.68 62.79 61.86] Vol.: 2331.3\n", + " 5 [ 13.50 14.38 14.63 75.73 64.60 63.07] Vol.: 2283.0\n", + " 8 [ 13.89 14.29 17.00 72.43 63.61 63.57] Vol.: 2684.8\n", + " 9 [ 14.81 15.07 15.52 62.45 74.78 62.16] Vol.: 2711.1\n", + " 11 [ 13.73 14.56 16.03 84.26 68.05 62.57] Vol.: 2629.5\n", + " 12 [ 14.43 14.90 15.40 81.24 74.01 61.15] Vol.: 2787.8\n", + " ---\n", + "Mean: [ 14.07 14.60 15.55 75.46 67.97 62.40] Vol.: 2571.3\n", + " Min: [ 13.50 14.29 14.63 62.45 62.79 61.15] Vol.: 2283.0\n", + " Max: [ 14.81 15.07 17.00 84.26 74.78 63.57] Vol.: 2787.8\n", + "\n", + "Cluster #3 (4 items)\n", + " 1 [ 5.47 14.07 15.30 63.22 87.59 88.58] Vol.: 1050.9\n", + " 3 [ 5.33 14.99 16.06 64.44 89.16 82.51] Vol.: 1144.9\n", + " 10 [ 5.05 14.37 14.53 62.13 88.52 89.11] Vol.: 932.0\n", + " 13 [ 5.30 14.89 15.18 66.79 86.51 86.59] Vol.: 1098.1\n", + " ---\n", + "Mean: [ 5.29 14.58 15.27 64.15 87.95 86.70] Vol.: 1056.5\n", + " Min: [ 5.05 14.07 14.53 62.13 86.51 82.51] Vol.: 932.0\n", + " Max: [ 5.47 14.99 16.06 66.79 89.16 89.11] Vol.: 1144.9\n", + "\n", + "Cluster #4 (3 items)\n", + " 2 [ 9.52 9.98 12.85 65.60 87.80 85.43] Vol.: 1107.8\n", + " 6 [ 10.21 10.36 12.08 85.86 67.02 81.83] Vol.: 1165.3\n", + " 7 [ 10.55 10.75 11.75 80.34 66.42 75.73] Vol.: 1179.4\n", + " ---\n", + "Mean: [ 10.09 10.36 12.23 77.27 73.75 81.00] Vol.: 1150.9\n", + " Min: [ 9.52 9.98 11.75 65.60 66.42 75.73] Vol.: 1107.8\n", + " Max: [ 10.55 10.75 12.85 85.86 87.80 85.43] Vol.: 1179.4\n", + "\n", + "Wrote cluster 3 to file `cells_cluster_3_4-items.yaml`\n", + "Wrote cluster 4 to file `cells_cluster_4_3-items.yaml`\n", + "Wrote cluster 1 to file `cells_cluster_1_6-items.yaml`\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "id": "5bbf31db-6b98-47ba-8f00-f549c7603da5", + "metadata": {}, + "source": [ + "The three resulted clusters 1, 3, 4 correspond to phases **IWV**, ***CTH**, and **RTH**, respectively.\n", + "\n", + "With the averaged primitive unit cell parameters of each cluster, one can use the online tool http://cci.lbl.gov/cctbx/lattice_symmetry.html to find unit cell with higher symmetry with a pre-set tolerance.\n", + "\n", + "We take cluster 1 (phase **IWV**) as an example. The averaged unit cell parameters are:\n", + "14.07, 14.6, 15.55, 75.46, 67.97, 62.4\n", + " \n", + "The unit cell parameters with a higher symmetry (space group: *Fmmm* (69)) are:\n", + "14.07, 25.8828, 28.9294, 90, 90, 90\n", + "\n", + "The same operation can be done for all the other clusters." + ] + }, + { + "cell_type": "markdown", + "id": "c59a8d2a", + "metadata": {}, + "source": [ + "## 4. Update the *XDS.INP* files\n", + "\n", + "This step used `edtools.update_xds` to update the XDS input files with the determined unit cell parameters and space group." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "2b5b8420", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "16 files named XDS.INP (subdir: None) found.\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0067\\crystal_0001\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0164\\crystal_0000\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0290\\crystal_0002\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0299\\crystal_0001\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0325\\crystal_0000\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0341\\crystal_0000\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0368\\crystal_0001\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0538\\crystal_0000\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0648\\crystal_0001\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0849\\crystal_0000\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0905\\crystal_0000\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0905\\crystal_0001\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_0980\\crystal_0000\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_1014\\crystal_0000\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_1261\\crystal_0001\\SMV\\XDS.INP\n", + "\u001b[K C:\\Users\\yluo\\demo\\data\\stagepos_1283\\crystal_0001\\SMV\\XDS.INP\n", + "\u001b[KUpdated 16 files\n" + ] + } + ], + "source": [ + "!edtools.update_xds -c 14.07 25.8828 28.9294 90 90 90 -s 69" + ] + }, + { + "cell_type": "markdown", + "id": "26c3ce5c", + "metadata": {}, + "source": [ + "## 5. Refine phases\n", + "\n", + "Rerun **autoindex**, **extract_xds_info** and **find_cell** for the desired phases to be successfully indexed by *XDS*. All the other phases are hopefully excluded in that a phase with different enough unit cell will not be indexed successfully. There are however cases when different phases have similar unit cells, which cannot be told apart during this step." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e49065f1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "16 files named XDS.INP (subdir: None) found.\n", + "\n", + " 4: C:\\Users\\yluo\\demo\\data\\stagepos_0325\\crystal_0000\\SMV # Tue May 3 20:16:50 2022\n", + "Spgr 69 - Cell 13.88 25.44 27.26 90.00 90.00 90.00 - Vol 9625.70\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 4 9.30 0.80 3938 1852 69.0 3.24 20.2 99.3 11.45 8.21\n", + " - 0.91 0.85 614 290 74.4 0.86 109.5 80.9\n", + "\n", + "\n", + " 5: C:\\Users\\yluo\\demo\\data\\stagepos_0341\\crystal_0000\\SMV # Tue May 3 20:16:52 2022\n", + "Spgr 69 - Cell 13.52 24.94 27.07 90.00 90.00 90.00 - Vol 9127.70\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 5 10.88 0.80 2203 1029 40.4 3.84 11.7 99.9 27.38 9.78\n", + " - 1.07 0.98 299 135 41.8 1.04 107.2 75.6\n", + "\n", + "\n", + " 8: C:\\Users\\yluo\\demo\\data\\stagepos_0648\\crystal_0001\\SMV # Tue May 3 20:16:57 2022\n", + "Spgr 69 - Cell 14.01 25.97 29.04 90.00 90.00 90.00 - Vol 10565.90\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 8 7.14 0.80 1466 781 26.2 2.61 18.2 97.1 4.73 7.15\n", + " - 0.84 0.80 142 92 19.9 0.98 62.3 52.0\n", + "\n", + "\n", + " 9: C:\\Users\\yluo\\demo\\data\\stagepos_0849\\crystal_0000\\SMV # Tue May 3 20:16:59 2022\n", + "Spgr 69 - Cell 15.10 26.02 26.72 90.00 90.00 90.00 - Vol 10498.34\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 9 7.24 0.80 1994 1126 38.5 3.27 11.9 99.5 12.91 8.08\n", + " - 0.98 0.90 322 166 41.2 1.27 70.2 90.6\n", + "\n", + " 10: C:\\Users\\yluo\\demo\\data\\stagepos_0905\\crystal_0000\\SMV -> Error in IDXREF: RETURN CODE IS IER= 0\n", + "\n", + " 11: C:\\Users\\yluo\\demo\\data\\stagepos_0905\\crystal_0001\\SMV # Tue May 3 20:17:03 2022\n", + "Spgr 69 - Cell 13.83 25.80 28.73 90.00 90.00 90.00 - Vol 10251.27\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 11 7.08 0.80 1591 808 28.2 2.88 17.1 97.8 6.24 7.63\n", + " - 0.90 0.85 254 128 30.4 1.17 42.6 93.7\n", + "\n", + "\n", + " 12: C:\\Users\\yluo\\demo\\data\\stagepos_0980\\crystal_0000\\SMV # Tue May 3 20:17:05 2022\n", + "Spgr 69 - Cell 14.39 25.16 28.10 90.00 90.00 90.00 - Vol 10173.67\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 12 5.12 0.80 1669 851 30.2 3.75 16.8 97.9 6.26 5.76\n", + " - 0.85 0.80 153 109 25.3 1.34 46.1 75.6\n", + "\n", + "\n", + " 15: C:\\Users\\yluo\\demo\\data\\stagepos_1283\\crystal_0001\\SMV # Tue May 3 20:17:10 2022\n", + "Spgr 69 - Cell 13.54 25.23 27.30 90.00 90.00 90.00 - Vol 9326.07\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + " 15 5.97 0.80 1620 563 21.7 6.15 8.4 99.8 11.79 7.17\n", + " - 0.85 0.80 187 78 19.1 2.24 45.1 97.9\n", + "\n" + ] + } + ], + "source": [ + "!edtools.autoindex" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "1347b809", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7 files named CORRECT.LP (subdir: None) found.\n", + " 1: C:\\Users\\yluo\\demo\\data\\stagepos_0325\\crystal_0000\\SMV # Tue May 3 20:16:50 2022\n", + "Spgr 69 - Cell 13.88 25.44 27.26 90.00 90.00 90.00 - Vol 9625.70\n", + "\n", + " 2: C:\\Users\\yluo\\demo\\data\\stagepos_0341\\crystal_0000\\SMV # Tue May 3 20:16:52 2022\n", + "Spgr 69 - Cell 13.52 24.94 27.07 90.00 90.00 90.00 - Vol 9127.70\n", + "\n", + " 3: C:\\Users\\yluo\\demo\\data\\stagepos_0648\\crystal_0001\\SMV # Tue May 3 20:16:57 2022\n", + "Spgr 69 - Cell 14.01 25.97 29.04 90.00 90.00 90.00 - Vol 10565.90\n", + "\n", + " 4: C:\\Users\\yluo\\demo\\data\\stagepos_0849\\crystal_0000\\SMV # Tue May 3 20:16:59 2022\n", + "Spgr 69 - Cell 15.10 26.02 26.72 90.00 90.00 90.00 - Vol 10498.34\n", + "\n", + " 5: C:\\Users\\yluo\\demo\\data\\stagepos_0905\\crystal_0001\\SMV # Tue May 3 20:17:03 2022\n", + "Spgr 69 - Cell 13.83 25.80 28.73 90.00 90.00 90.00 - Vol 10251.27\n", + "\n", + " 6: C:\\Users\\yluo\\demo\\data\\stagepos_0980\\crystal_0000\\SMV # Tue May 3 20:17:05 2022\n", + "Spgr 69 - Cell 14.39 25.16 28.10 90.00 90.00 90.00 - Vol 10173.67\n", + "\n", + " 7: C:\\Users\\yluo\\demo\\data\\stagepos_1283\\crystal_0001\\SMV # Tue May 3 20:17:10 2022\n", + "Spgr 69 - Cell 13.54 25.23 27.30 90.00 90.00 90.00 - Vol 9326.07\n", + "\n", + " # dmax dmin ntot nuniq compl i/sig rmeas CC(1/2) ISa B(ov)\n", + "---------------------------------------------------------------------------------\n", + "\n", + " 1 9.30 0.80 3938 1852 69.0 3.24 20.2 99.3 11.45 8.21 # C:\\Users\\yluo\\demo\\data\\stagepos_0325\\crystal_0000\\SMV\\CORRECT.LP\n", + " - 0.91 0.85 614 290 74.4 0.86 109.5 80.9\n", + "\n", + " 2 10.88 0.80 2203 1029 40.4 3.84 11.7 99.9 27.38 9.78 # C:\\Users\\yluo\\demo\\data\\stagepos_0341\\crystal_0000\\SMV\\CORRECT.LP\n", + " - 1.07 0.98 299 135 41.8 1.04 107.2 75.6\n", + "\n", + " 3 7.14 0.80 1466 781 26.2 2.61 18.2 97.1 4.73 7.15 # C:\\Users\\yluo\\demo\\data\\stagepos_0648\\crystal_0001\\SMV\\CORRECT.LP\n", + " - 0.84 0.80 142 92 19.9 0.98 62.3 52.0\n", + "\n", + " 4 7.24 0.80 1994 1126 38.5 3.27 11.9 99.5 12.91 8.08 # C:\\Users\\yluo\\demo\\data\\stagepos_0849\\crystal_0000\\SMV\\CORRECT.LP\n", + " - 0.98 0.90 322 166 41.2 1.27 70.2 90.6\n", + "\n", + " 5 7.08 0.80 1591 808 28.2 2.88 17.1 97.8 6.24 7.63 # C:\\Users\\yluo\\demo\\data\\stagepos_0905\\crystal_0001\\SMV\\CORRECT.LP\n", + " - 0.90 0.85 254 128 30.4 1.17 42.6 93.7\n", + "\n", + " 6 5.12 0.80 1669 851 30.2 3.75 16.8 97.9 6.26 5.76 # C:\\Users\\yluo\\demo\\data\\stagepos_0980\\crystal_0000\\SMV\\CORRECT.LP\n", + " - 0.85 0.80 153 109 25.3 1.34 46.1 75.6\n", + "\n", + " 7 5.97 0.80 1620 563 21.7 6.15 8.4 99.8 11.79 7.17 # C:\\Users\\yluo\\demo\\data\\stagepos_1283\\crystal_0001\\SMV\\CORRECT.LP\n", + " - 0.85 0.80 187 78 19.1 2.24 45.1 97.9\n", + "\n", + "Wrote 7 cells to file cells.xlsx\n", + "Wrote 7 cells to file cells.yaml\n", + "Wrote 7 entries to file filelist.txt (completeness > 10.0%, CC(1/2) > 90.0%)\n", + "\n", + "Most likely lattice types:\n", + " 1 Lattice type `oF` (spgr: 22) was found 7 times (score: 14481)\n", + "\n", + " ** the score corresponds to the total number of indexed reflections.\n" + ] + } + ], + "source": [ + "!edtools.extract_xds_info" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ffba629d", + "metadata": {}, + "outputs": [], + "source": [ + "!edtools.find_cell cells.yaml --cluster --metric lcv" + ] + }, + { + "attachments": { + "find_cell_step5.png": { + "image/png": "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m27S448/ruzsbCUkJKhBgwZ2YbLStGnT5OnpqXHjxqm0tFSenp7atWuXVqxYocTERDVv3lx5eXl688031bNnT+3atUthYWF2Y6SmpsrHx0dPPvmkfvzxR73++uvy8PCQq6urTpw4oaeeekrr1q3TggUL1Lx5c02ZMuW8P5e1a9cqKChIzZo1s2svKirSTTfdpN27d+v+++9Xp06dlJ+fr5UrV+rgwYMKDg4+77i/9Je//EUFBQU6ePCgXn31VUmSv7+/JOnMmTPq1auXfvzxR40ePVrNmzfXsmXLNHz4cJ08eVKPPfaYWrdurffee0+PP/64rrnmGj3xxBOSpI4dO9quBbz99tuVlJRkm7OiokLHjx+vUX2BgYG2n+nWrVt13XXXKSAgwK5Pt27dJEnbtm1TREREleNUVFRox44duv/++x22devWTV999ZVOnTqlq666Sl9//bUkKSQkRLfddpu++eYbubm56fbbb9cbb7xhF5AlqU2bNvLx8dF3333n8P8FgGqYvQQJWMH5TgFXCgwMNDp27Gj7/rbbbjOio6ONkpISW1tFRYXRo0cPIyoqymHsuLg4o6Kiwtb++OOPG25ubsbJkycNwzCMI0eOGJ6enkb//v3t+k2cONGQZHcKuHLMG2+80Th37pytvXKM3r17252inT17tiHJmD9/vmEYhlFaWmoEBQUZXbt2Nc6ePWvrt2DBAkOS0bNnT1vbqlWrDElGixYtHE6Bl5SUOJwK3rdvn+Hl5WU888wzDmO0a9fOKCsrs7UPGTLEcHFxMfr27Ws3RmxsbI1Oud54441G586dHdqnTJliSDI+/vhjh22V723le7hv3z677ZW1rlq1ytZW3SngmTNnGpKM999/39ZWVlZmxMbGGv7+/kZhYaGtvVmzZlWeApbkcAp43759hqQavX5ZZ9u2bY1bb73VYY7vv//ekGTMnTvXYVulo0ePGpLsfm6V5syZY0gysrKyDMMwjDFjxhiSjKCgIKNPnz7G0qVLjZdeesnw9/c3rr32WqO4uNhhjOuuu87h5wygepwCBuoIf39/293Ax48f1zfffKNBgwbp1KlTys/PV35+vo4dO6b4+Hjt2bNHhw4dstv/wQcftDvFd9NNN6m8vFz79++XJH399dcqKyvTo48+atev8nEhVRk1apTc3Nxs31eOMXbsWLm6utr1CwgI0Gef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QwMGDNCePXu0bt06Z00LAACAC3DaCmBISIgaNGigwYMHKzU1VV26dHHWVAAAALgITguAK1eu1G233SZXV6deZggAAICL5LR01rJlS+3du9ehfc+ePXwCCAAAgImcFgCHDx+utWvXOrSvX79ew4cPd9a0AAAAuACnBcCtW7fqd7/7nUN79+7dtW3bNmdNCwAAgAtwWgB0cXHRqVOnHNoLCgpUXl7urGkBAABwAU4LgDfffLNSU1Ptwl55eblSU1N14403OmtaAAAAXIDT7gKePn26br75Zl1//fW66aabJElr1qxRYWGhvvnmG2dNCwAAgAtw2gpgmzZttGPHDg0aNEhHjhzRqVOnlJSUpKysLLVr185Z0wIAAOACnPpRcGFhYXr++eedOQUAAAAuUq0GwB07dtS47w033FCbUwMAAKCGajUAdujQQS4uLjIM47z9XFxcuBMYAADAJLUaAPft21ebwwEAAMAJajUANmvWrDaHAwAAgBPU6l3A69atq3Hf06dP6/vvv6/N6QEAAFADtRoAhw4dqvj4eC1btkzFxcVV9tm1a5cmTpyoa6+9Vps3b67N6QEAAFADtXoKeNeuXXrjjTc0adIk3XvvvbruuusUFhYmb29vnThxQllZWSoqKtLvf/97ffXVV4qOjq7N6QEAAFADtRoAPTw8NGbMGI0ZM0abNm3Sv/71L+3fv19nzpxR+/bt9fjjj+uWW25Rw4YNa3NaAAAAXASnPQi6S5cu6tKli7OGBwAAwCVy2kfBAQAAoG4iAAIAAFgMARAAAMBiCIAAAAAWc1kCYElJyeWYBgAAADXgtABYUVGhadOmKTw8XP7+/vrvf/8rSZo8ebLefvttZ00LAACAC3BaAHz22We1YMECvfjii/L09LS1t2vXTn/729+cNS0AAAAuwGkBcOHChZo3b57uu+8+ubm52drbt2+vrKwsZ00LAACAC3BaADx06JBatmzp0F5RUaGzZ89e0phz5sxRZGSkvL29FRMTow0bNpy3/7Jly9SqVSt5e3srOjpan3/+ud32p556Sq1atZKfn58aNGiguLg4rV+//pJqAwAAqC+cFgDbtGmjNWvWOLQvX75cHTt2vOjxli5dquTkZE2dOlVbtmxR+/btFR8fryNHjlTZf+3atRoyZIhGjhyprVu3KiEhQQkJCdq5c6etz3XXXafZs2fr3//+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rVs3zZw5U8XFxRoxYoQkKSkpSeHh4UpNTZUkPfbYY+rZs6deeeUV9e/fX0uWLNGmTZs0b948SZKLi4vGjh2rZ599VlFRUWrevLkmT56ssLAwJSQkmHWYAAAATldvAuDgwYN19OhRTZkyRbm5uerQoYPS0tJsN3EcOHBArq7/W9Ds0aOHFi9erEmTJmnixImKiorSihUr1K5dO1ufP//5zyouLtaDDz6okydP6sYbb1RaWpq8vb0v+/EBAABcLi6Gle+BBgAAsKB6cQ0gAAAAag8BEAAAwGIIgAAAABZDAAQAALAYAmA9V1paqgkTJigsLEw+Pj6KiYlRenq62WXVCUVFRZo6dar69Omjhg0bysXFRQsWLDC7rDpjy5YtGjBggBo2bChfX1+1a9dOr732mtllmer7779XYmKiWrRoIV9fXwUHB+vmm2/WP/7xD7NLM93q1avl4uJS5WvdunVml2eqjRs3avTo0Wrbtq38/PzUtGlTDRo0SP/5z3/MLq3Oee655+Ti4mL3RA6Yo948BgZVGz58uJYvX66xY8cqKipKCxYsUL9+/bRq1SrdeOONZpdnqvz8fD3zzDNq2rSp2rdvr9WrV5tdUp3x1Vdf6c4771THjh01efJk+fv7a+/evTp48KDZpZlq//79OnXqlIYNG6awsDCdPn1aH330kQYMGKA333xTDz74oNklmm7MmDHq2rWrXVvLli1NqqZumD59ur777jslJibqhhtuUG5urmbPnq1OnTpp3bp1hJ3/7+DBg3r++efl5+dndikQj4Gp1zZs2KCYmBi99NJLGjdunCSppKRE7dq1U+PGjbV27VqTKzRXaWmpTpw4odDQUG3atEldu3bVO++8o+HDh5tdmqkKCwt13XXXqUePHlq+fLnd8zPhqLy8XJ07d1ZJSYmysrLMLsc0q1ev1i233KJly5Zp4MCBZpdTp6xdu1ZdunSRp6enrW3Pnj2Kjo7WwIED9f7775tYXd1xzz336OjRoyovL1d+fr527txpdkmWxt/89djy5cvl5uZmtyrh7e2tkSNHKjMzUzk5OSZWZz4vL69qPyvayhYvXqy8vDw999xzcnV1VXFxsSoqKswuq85yc3NTRESETp48aXYpdcapU6d07tw5s8uoM3r06GEX/iQpKipKbdu21e7du02qqm755z//qeXLl2vmzJlml4L/jwBY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NNGRI0ckSbt371ZERIQt/ElSbGysXf/t27frxx9/1FVXXWXXXlJSor1799q+nz9/vq677jq5urrq+++/J/wBqLMIgACueB4eHnbfu7i4qKKiosb7FxUVqXPnzlq0aJHDtkaNGtm+3r59u4qLi+Xq6qqffvpJTZo0ufSiAcCJCIAALK1169bKycmxC2zr1q2z69OpUyctXbpUjRs3VkBAQJXjHD9+XMOHD9df/vIX/fTTT7rvvvu0ZcsW+fj4OP0YAOBicRMIAEuLi4vTddddp2HDhmn79u1as2aN/vKXv9j1ue+++xQcHKy77rpLa9as0b59+7R69WqNGTNGBw8elCT96U9/UkREhCZNmqQZM2aovLxc48aNM+OQAOCCCIAALM3V1VWffPKJzpw5o27duumBBx7Qc889Z9fH19dX//znP9W0aVPdfffdat26tUaOHKmSkhIFBARo4cKF+vzzz/Xee+/J3d1dfn5+ev/99/XWW2/piy++MOnIAKB63AUMAABgMawAAgAAWAwBEAAAwGIIgAAAABZDAAQAALAYAiAAAIDFEAABAAAshgAIAABgMQRAAAAAi/l/b1dmDjps0D0AAAAASUVORK5CYII=" + } + }, + "cell_type": "markdown", + "id": "551ac6d9", + "metadata": {}, + "source": [ + "![find_cell_step5.png](attachment:find_cell_step5.png)" + ] + }, + { + "cell_type": "markdown", + "id": "a6d7a310-e206-480b-b729-8357742d09c0", + "metadata": {}, + "source": [ + "Console Output\n", + "\n", + "```\n", + "Linkage method = average\n", + "Cutoff distance = 0.0564\n", + "Distance metric = lcv\n", + "\n", + "----------------------------------------\n", + "\n", + "Cluster #1 (7 items)\n", + " 1 [ 13.97 25.49 27.12 90.00 90.00 90.00] Vol.: 9657.9\n", + " 2 [ 13.53 25.01 27.18 90.00 90.00 90.00] Vol.: 9195.6\n", + " 3 [ 14.03 26.02 29.55 90.00 90.00 90.00] Vol.: 10790.3\n", + " 4 [ 14.94 26.14 26.94 90.00 90.00 90.00] Vol.: 10522.3\n", + " 5 [ 13.85 25.79 29.03 90.00 90.00 90.00] Vol.: 10364.0\n", + " 6 [ 14.52 24.95 28.11 90.00 90.00 90.00] Vol.: 10184.6\n", + " 7 [ 13.53 25.13 27.15 90.00 90.00 90.00] Vol.: 9233.7\n", + " ---\n", + "Mean: [ 14.05 25.50 27.87 90.00 90.00 90.00] Vol.: 9992.6\n", + " Min: [ 13.53 24.95 26.94 90.00 90.00 90.00] Vol.: 9195.6\n", + " Max: [ 14.94 26.14 29.55 90.00 90.00 90.00] Vol.: 10790.3\n", + "\n", + "Wrote cluster 1 to file `cells_cluster_1_7-items.yaml`\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "aefbcba6", + "metadata": {}, + "source": [ + "## 6. Generate the input file for *XSCALE* \n", + "\n", + "This command generates the desired unit cell cluster for *XSCALE*." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "ec35604a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loaded 7 cells\n", + "Lowest possible symmetry for 69 (oF): 22\n", + "\n", + "Using:\n", + " SPACE_GROUP_NUMBER= 69\n", + " UNIT_CELL_CONSTANTS= 14.050 25.500 27.870 90.000 90.000 90.000\n", + "\n", + "Wrote file XSCALE.INP\n", + "Wrote file XDSCONV.INP\n" + ] + } + ], + "source": [ + "!edtools.make_xscale cells_cluster_1_7-items.yaml -c 14.05 25.50 27.87 90.00 90.00 90.00 -s 69" + ] + }, + { + "cell_type": "markdown", + "id": "dc563af6", + "metadata": {}, + "source": [ + "## 7. Run *XSCALE* \n", + "\n", + "*XSCALE* calculates the correlation coefficients between different datasets." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ad7be0a7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " ***** XSCALE ***** (VERSION Jan 10, 2022 BUILT=20220220) 3-May-2022\n", + " Author: Wolfgang Kabsch\n", + " Copy licensed until 31-Mar-2023 to\n", + " academic users for non-commercial applications\n", + " No redistribution.\n", + "\n", + "\n", + " ******************************************************************************\n", + " CONTROL CARDS\n", + " ******************************************************************************\n", + "\n", + " SAVE_CORRECTION_IMAGES= FALSE \n", + " SPACE_GROUP_NUMBER= 69 \n", + " UNIT_CELL_CONSTANTS= 14.050 25.500 27.870 90.000 90.000 90.000 \n", + " \n", + " OUTPUT_FILE= MERGED.HKL \n", + " \n", + " INPUT_FILE= data/stagepos_0325/crystal_0000/SMV/XDS_ASCII.HKL \n", + " INCLUDE_RESOLUTION_RANGE= 20 0.8 \n", + " \n", + " INPUT_FILE= data/stagepos_0341/crystal_0000/SMV/XDS_ASCII.HKL \n", + " INCLUDE_RESOLUTION_RANGE= 20 0.8 \n", + " \n", + " INPUT_FILE= data/stagepos_0648/crystal_0001/SMV/XDS_ASCII.HKL \n", + " INCLUDE_RESOLUTION_RANGE= 20 0.8 \n", + " \n", + " INPUT_FILE= data/stagepos_0849/crystal_0000/SMV/XDS_ASCII.HKL \n", + " INCLUDE_RESOLUTION_RANGE= 20 0.8 \n", + " \n", + " INPUT_FILE= data/stagepos_0905/crystal_0001/SMV/XDS_ASCII.HKL \n", + " INCLUDE_RESOLUTION_RANGE= 20 0.8 \n", + " \n", + " INPUT_FILE= data/stagepos_0980/crystal_0000/SMV/XDS_ASCII.HKL \n", + " INCLUDE_RESOLUTION_RANGE= 20 0.8 \n", + " \n", + " INPUT_FILE= data/stagepos_1283/crystal_0001/SMV/XDS_ASCII.HKL \n", + " INCLUDE_RESOLUTION_RANGE= 20 0.8 \n", + " \n", + "\n", + " THE DATA COLLECTION STATISTICS REPORTED BELOW ASSUMES:\n", + " SPACE_GROUP_NUMBER= 69\n", + " UNIT_CELL_CONSTANTS= 14.05 25.50 27.87 90.000 90.000 90.000\n", + "\n", + " \n", + "\n", + " ALL DATA SETS WILL BE SCALED TO data/stagepos_0325/crystal_0000/SMV/XDS_ASCII.HKL \n", + "\n", + "\n", + " ******************************************************************************\n", + " READING INPUT REFLECTION DATA FILES\n", + " ******************************************************************************\n", + "\n", + " DATA MEAN REFLECTIONS INPUT FILE NAME\n", + " SET# INTENSITY ACCEPTED REJECTED\n", + " 1 0.3010E+02 3938 0 data/stagepos_0325/crystal_0000/SMV/XDS_ASCII.HKL\n", + " 2 0.1368E+02 2205 0 data/stagepos_0341/crystal_0000/SMV/XDS_ASCII.HKL\n", + " 3 0.9168E+02 1453 0 data/stagepos_0648/crystal_0001/SMV/XDS_ASCII.HKL\n", + " 4 0.4279E+02 1931 0 data/stagepos_0849/crystal_0000/SMV/XDS_ASCII.HKL\n", + " 5 0.8542E+02 1590 0 data/stagepos_0905/crystal_0001/SMV/XDS_ASCII.HKL\n", + " 6 0.1676E+03 1662 0 data/stagepos_0980/crystal_0000/SMV/XDS_ASCII.HKL\n", + " 7 0.1915E+03 1620 0 data/stagepos_1283/crystal_0001/SMV/XDS_ASCII.HKL\n", + "\n", + "\n", + " ******************************************************************************\n", + " OVERALL SCALING AND CRYSTAL DISORDER CORRECTION\n", + " ******************************************************************************\n", + "\n", + " CORRELATIONS BETWEEN INPUT DATA SETS AFTER CORRECTIONS\n", + "\n", + " DATA SETS NUMBER OF COMMON CORRELATION RATIO OF COMMON B-FACTOR\n", + " #i #j REFLECTIONS BETWEEN i,j INTENSITIES (i/j) BETWEEN i,j\n", + "\n", + " 1 2 365 0.983 3.0178 0.0167\n", + " 1 3 239 0.980 0.5288 -0.4884\n", + " 2 3 426 0.941 0.1906 -0.5003\n", + " 1 4 548 0.906 1.1005 -0.6223\n", + " 2 4 343 0.972 0.3024 -0.3512\n", + " 3 4 359 0.900 1.6429 0.0764\n", + " 1 5 194 0.959 0.3817 0.1801\n", + " 2 5 412 0.966 0.1782 -0.2899\n", + " 3 5 496 0.985 0.9410 0.1110\n", + " 4 5 257 0.931 0.6070 0.0399\n", + " 1 6 533 0.941 0.1974 -0.6063\n", + " 2 6 219 0.896 0.1000 -0.8155\n", + " 3 6 201 0.939 0.6006 -0.2345\n", + " 4 6 247 0.844 0.2524 -0.1710\n", + " 5 6 168 0.878 0.5172 -0.1561\n", + " 1 7 65 0.968 0.4836 -1.1409\n", + " 2 7 317 0.978 0.1070 -0.9383\n", + " 3 7 348 0.984 0.5482 -0.3209\n", + " 4 7 122 0.771 0.3567 -0.6073\n", + " 5 7 376 0.988 0.5696 -0.4315\n", + " 6 7 122 0.843 1.5030 -0.3918\n", + "\n", + "\n", + " K*EXP(B*SS) = Factor applied to intensities\n", + " SS = (2sin(theta)/lambda)^2\n", + "\n", + " K B DATA SET NAME\n", + " 1.000E+00 0.000 data/stagepos_0325/crystal_0000/SMV/XDS_ASCII.HKL\n", + " 2.939E+00 0.046 data/stagepos_0341/crystal_0000/SMV/XDS_ASCII.HKL\n", + " 5.399E-01 -0.443 data/stagepos_0648/crystal_0001/SMV/XDS_ASCII.HKL\n", + " 9.548E-01 -0.410 data/stagepos_0849/crystal_0000/SMV/XDS_ASCII.HKL\n", + " 5.007E-01 -0.266 data/stagepos_0905/crystal_0001/SMV/XDS_ASCII.HKL\n", + " 2.389E-01 -0.615 data/stagepos_0980/crystal_0000/SMV/XDS_ASCII.HKL\n", + " 3.345E-01 -0.846 data/stagepos_1283/crystal_0001/SMV/XDS_ASCII.HKL\n", + "\n", + " ******************************************************************************\n", + " CORRECTION PARAMETERS FOR THE STANDARD ERROR OF REFLECTION INTENSITIES\n", + " ******************************************************************************\n", + "\n", + " The variance v0(I) of the intensity I obtained from counting statistics is\n", + " replaced by v(I)=a*(v0(I)+b*I^2). The model parameters a, b are chosen to\n", + " minimize the discrepancies between v(I) and the variance estimated from\n", + " sample statistics of symmetry related reflections. This model implicates\n", + " an asymptotic limit ISa=1/SQRT(a*b) for the highest I/Sigma(I) that the\n", + " experimental setup can produce (Diederichs (2010) Acta Cryst D66, 733-740).\n", + " Often the value of ISa is reduced from the initial value ISa0 due to systematic\n", + " errors showing up by comparison with other data sets in the scaling procedure.\n", + " (ISa=ISa0=-1 if v0 is unknown for a data set.)\n", + "\n", + " a b ISa ISa0 INPUT DATA SET\n", + " 2.787E+00 1.140E-02 5.61 11.45 data/stagepos_0325/crystal_0000/SMV/XDS_ASCII.HKL\n", + " 2.085E+00 3.701E-03 11.38 27.38 data/stagepos_0341/crystal_0000/SMV/XDS_ASCII.HKL\n", + " 7.984E+00 2.322E-02 2.32 4.73 data/stagepos_0648/crystal_0001/SMV/XDS_ASCII.HKL\n", + " 5.360E+00 1.192E-02 3.96 12.91 data/stagepos_0849/crystal_0000/SMV/XDS_ASCII.HKL\n", + " 6.750E+00 2.043E-02 2.69 6.25 data/stagepos_0905/crystal_0001/SMV/XDS_ASCII.HKL\n", + " 1.412E+01 9.586E-03 2.72 6.26 data/stagepos_0980/crystal_0000/SMV/XDS_ASCII.HKL\n", + " 1.003E+00 1.391E-01 2.68 11.79 data/stagepos_1283/crystal_0001/SMV/XDS_ASCII.HKL\n", + " \n", + "\n", + " FACTOR TO PLACE ALL DATA SETS TO AN APPROXIMATE ABSOLUTE SCALE 0.145870E+03\n", + " (ASSUMING A PROTEIN WITH 50% SOLVENT)\n", + "\n", + "\n", + "\n", + " ******************************************************************************\n", + " STATISTICS OF SCALED OUTPUT DATA SET : MERGED.HKL\n", + " FILE TYPE: XDS_ASCII MERGE=FALSE FRIEDEL'S_LAW=TRUE \n", + "\n", + " 9 OUT OF 14399 REFLECTIONS REJECTED\n", + " 14390 REFLECTIONS ON OUTPUT FILE \n", + "\n", + " ******************************************************************************\n", + " DEFINITIONS:\n", + " R-FACTOR\n", + " observed = (SUM(ABS(I(h,i)-I(h))))/(SUM(I(h,i)))\n", + " expected = expected R-FACTOR derived from Sigma(I)\n", + "\n", + " COMPARED = number of reflections used for calculating R-FACTOR\n", + " I/SIGMA = mean of intensity/Sigma(I) of unique reflections\n", + " (after merging symmetry-related observations)\n", + " Sigma(I) = standard deviation of reflection intensity I\n", + " estimated from sample statistics\n", + "\n", + " R-meas = redundancy independent R-factor (intensities)\n", + " Diederichs & Karplus (1997), Nature Struct. Biol. 4, 269-275.\n", + "\n", + " CC(1/2) = percentage of correlation between intensities from\n", + " random half-datasets. Correlation significant at\n", + " the 0.1% level is marked by an asterisk.\n", + " Karplus & Diederichs (2012), Science 336, 1030-33\n", + " Anomal = percentage of correlation between random half-sets\n", + " Corr of anomalous intensity differences. Correlation\n", + " significant at the 0.1% level is marked.\n", + " SigAno = mean anomalous difference in units of its estimated\n", + " standard deviation (|F(+)-F(-)|/Sigma). F(+), F(-)\n", + " are structure factor estimates obtained from the\n", + " merged intensity observations in each parity class.\n", + " Nano = Number of unique reflections used to calculate\n", + " Anomal_Corr & SigAno. At least two observations\n", + " for each (+ and -) parity are required.\n", + "\n", + "\n", + " cpu time used by XSCALE 0.2 sec\n", + " elapsed wall-clock time 0.2 sec\n" + ] + } + ], + "source": [ + "!wsl xscale" + ] + }, + { + "cell_type": "markdown", + "id": "2d5e0af1", + "metadata": {}, + "source": [ + "## 8. Intensity-based clustering\n", + "\n", + "Run intensity-based clustering to further filter out datasets with low correlation (to remove poor quality datasets), or from a different phase that with similar enough unit cell. Cut-off on the dendrogram is selected manually. A number below 0.4 can be a good starting choice.\n", + "\n", + "In the end, integration results from datasets corresponding to different clusters are automatically copied to different folders after running clustering. The merged intensities in file `shelx.hkl` can be used for structure determination." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5456d48e", + "metadata": {}, + "outputs": [], + "source": [ + "!edtools.cluster" + ] + }, + { + "attachments": { + "intensity_cluster.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA8dElEQVR4nO3deViU9eL+8XsA2UQwREELt7DcckMhLJeSpM1cjmllpmR2yqPVjyyPlUtmoVambW6llql1srLO+ZappGlJWqJZKqmVu4A7KggyPL8/OsxpBMwS5kE+79d1zXUxn2e7Z0y5e1aHZVmWAAAAYAwvuwMAAADAsyiAAAAAhqEAAgAAGIYCCAAAYBgKIAAAgGEogAAAAIahAAIAABiGAggAAGAYCiAAAIBhKIAAAACGoQACAAAYhgIIAABgGAogAACAYSiAAAAAhqEAAgAAGIYCCAAAYBgKIAAAgGEogAAAAIahAAIAABiGAggAAGAYCiAAAIBhKIAAAACGoQACAAAYhgIIAABgGAogAACAYSiAAAAAhqEAAgAAGIYCCAAAYBgKIAAAgGEogAAAAIahAAIAABiGAggAAGAYCiAAAIBhKIAAAACGoQACKDNjx46Vw+GwO0aFNmnSJDVu3FiFhYV2R7Hd9OnTVbduXeXl5dkdBTAOBRC4yMydO1cOh8P18vf3V506dZSQkKCXX35ZJ06csDsiSpGdna2JEydqxIgR8vL63z+/lmVp3LhxWr16dblnyMvL04gRI1SnTh0FBAQoNjZWy5Yt+8Plvv32Ww0dOlTNmjVT1apVVbduXfXp00fbtm0rdZm0tDTddtttCg0NVWBgoJo3b66XX37ZNX3gwIHKz8/XjBkzyuSzATh/FEDgIjVu3DjNmzdP06ZN07BhwyRJjzzyiK666ipt2rTJ5nQoyezZs1VQUKA777zTbXzbtm0aM2aMDhw4UO4ZBg4cqMmTJ6tfv36aOnWqvL29dfPNN+urr74653ITJ07UBx98oC5dumjq1Km6//77tWrVKrVp00Y//vhjsfmXLl2quLg4ZWVladSoUZo6dapuvfVW7d271zWPv7+/BgwYoMmTJ8uyrDL/rADOwQJwUZkzZ44lyfr222+LTUtJSbECAgKsevXqWTk5OR7PNmbMGOt8/lk5efKkB9J4flt/pEWLFtbdd99dbHz+/PmWJGv79u3luv21a9dakqznn3/eNZabm2tdfvnlVlxc3DmX/frrr628vDy3sW3btll+fn5Wv3793MaPHz9uhYeHWz179rScTuc51/vdd99ZkqyUlJQ/+WkAXAj2AAKVyPXXX69Ro0Zp165deuedd1zj+/bt07333qvw8HD5+fmpWbNmmj17drHli87h27FjhwYOHKjq1asrJCREiYmJysnJcZv3q6++Urt27eTv76/LL7+81MN4RevcsmWL7rrrLl1yySW69tprJUkbNmzQTTfdpODgYAUFBalLly765ptvSlzPypUr1bZtW7ftnX3O4bm2tWvXLg0ZMkRXXnmlAgICVKNGDd1+++3auXNniXm3bdumu+++WyEhIapZs6ZGjRoly7K0Z88ede/eXcHBwYqIiNCLL774x38wkn799Vdt2rRJ8fHxbuMxMTHq16+fJKlRo0ZyOByqXr36ea3zz1q0aJG8vb11//33u8b8/f01aNAgpaamas+ePaUu2759e/n6+rqNNWrUSM2aNdPWrVvdxhcsWKDMzEw9++yz8vLy0qlTp0o95zE6OlqhoaH6+OOPL+CTAfizfOwOAKBs9e/fX0888YSWLl2qwYMHKzMzU1dffbUcDoeGDh2qmjVr6rPPPtOgQYOUnZ2tRx55pNg6+vTpowYNGig5OVlpaWl64403VKtWLU2cOFGS9MMPP6hr166qWbOmxo4dq4KCAo0ZM0bh4eGl5rr99tvVqFEjPffcc7IsS5s3b1aHDh0UHBysxx9/XFWqVNGMGTPUuXNnffnll4qNjXUtu2HDBt14442qXbu2nn76aTmdTo0bN041a9Y8r21Jv53DtmbNGt1xxx267LLLtHPnTk2bNk2dO3fWli1bFBgY6LaOvn37qkmTJpowYYL+7//+T+PHj1doaKhmzJih66+/XhMnTtT8+fM1fPhwtWvXTh07djznn8uaNWskSW3atHEbHzFihMaOHau8vDyNHj1akkosgGfOnNHx48fPuY0ioaGhbucYFtmwYYOuuOIKBQcHu43HxMRIkjZu3KjIyMjz2ob027mLmZmZatasmdv48uXLFRwcrH379qlHjx7atm2bqlatqv79++ull16Sv7+/2/xt2rTR119/fd7bBVAG7N0BCeDPOtch4CIhISFW69atLcuyrEGDBlm1a9e2Dh065DbPHXfcYYWEhLgdKi46hHvvvfe6zduzZ0+rRo0arvc9evSw/P39rV27drnGtmzZYnl7exc7BFy0zjvvvNNtvEePHpavr6/1888/u8b2799vVatWzerYsaPbvN26dbMCAwOtffv2uca2b99u+fj4uG2vtG1ZllXiIfHU1FRLkvX2228XW8f999/vGisoKLAuu+wyy+FwWBMmTHCNHz161AoICLAGDBhQbN1ne+qppyxJ1okTJ4pNq1u3rjVw4MBzLr9ixQpL0nm9fv311xLX0axZM+v6668vNr5582ZLkjV9+vQ//By/N2/ePEuS9eabb7qNt2jRwgoMDLQCAwOtYcOGWR988IE1bNgwS5J1xx13FFvP/fffbwUEBPypbQO4MOwBBCqhoKAgnThxQpZl6YMPPlCfPn1kWZYOHTrkmichIUHvvvuu0tLSdM0117gt/8ADD7i979Chgz766CNlZ2eratWq+vzzz9WjRw/VrVvXNU+TJk2UkJCgTz/9tMRMv1+n0+nU0qVL1aNHDzVs2NA1Xrt2bd11112aNWuWsrOzFRwcLKfTqeXLl6tnz56qU6eOa96oqCjddNNN+ve//33ObRUJCAhw/XzmzBllZ2crKipK1atXV1pamvr37+82/3333ef62dvbW23bttXevXs1aNAg13j16tV15ZVX6pdffinxM//e4cOH5ePjo6CgILfx48ePa/fu3WrRosU5l2/ZsuV5Xa0rSRERESWO5+bmys/Pr9h40R653Nzc81q/JKWnp+sf//iH4uLiNGDAALdpJ0+eVE5Ojh544AHXVb+9evVyXfE7btw4NWrUyDX/JZdcotzcXOXk5BTbEwugfFAAgUro5MmTqlWrlg4ePKhjx45p5syZmjlzZonzZmVlFRv7fbGTfvsFLUlHjx5VTk6OcnNz3X6BF7nyyitLLYANGjRw/Xzw4EHl5OToyiuvLDZfkyZNVFhYqD179qhZs2bKyspSbm6uoqKiis1b0tjZ2yqSm5ur5ORkzZkzR/v27XO76rSkQ6tnfwchISHy9/dXWFhYsfHDhw+XmON8FF2x/UcF8JJLLil2/uCfFRAQUOI9906fPu2afj4yMjJ0yy23KCQkxHVe4dnbkVTsaue77rpLM2bMUGpqqtt/P0V/FtxDEvAcCiBQyezdu1fHjx9XVFSU68T7u+++u9hemiIlFY+zf6EXsS7gVh3nWy7KQknbGjZsmObMmaNHHnlEcXFxCgkJkcPh0B133FHiBQolfQcX8r3UqFFDBQUFOnHihKpVq+YaLyqALVu2POfy+fn5OnLkyB9uR5Jq1qxZYtbatWtr3759xcaLbj/z+z2spTl+/LhuuukmHTt2TKtXry5xmTp16mjz5s3FzgmtVauWpN/+R+L3jh49qsDAQI/+NwKYjgIIVDLz5s2T9Nsh3po1a6patWpyOp0XvPeoSM2aNRUQEKDt27cXm/bTTz+d9zoCAwNLnD89PV1eXl6uixFq1aolf39/7dixo9i8JY2VZtGiRRowYIDbVbunT5/WsWPHznsdF6Jx48aSfrsa+Pele9OmTapdu3axPYtnW7Nmja677rrz2tavv/6q+vXrFxtv1aqVVqxY4Tq8XmTt2rWu6edy+vRpdevWTdu2bdPy5cvVtGnTEueLjo7WsmXLtG/fPre9vPv375ekYhfv/Prrr2rSpMn5fDQAZYTbwACVyBdffKFnnnlGDRo0UL9+/eTt7a2//e1v+uCDD0q8We/Bgwf/9Da8vb2VkJCgxYsXa/fu3a7xrVu36vPPPz/vdXTt2lUff/yx221YMjMztWDBAl177bWuguLt7a34+HgtXrzYVSCk38rfZ5999qdyn72n7pVXXpHT6TzvdVyIuLg4SdJ3333nNr57925ddtllf7h80TmA5/Mq7RzA3r17y+l0up0OkJeXpzlz5ig2NtbtCuCcnBylp6e7zht1Op3q27evUlNT9f7777s+T0n69OkjSXrzzTfdxt944w35+Pioc+fObuNpaWlq3779H34HAMoOewCBi9Rnn32m9PR0FRQUKDMzU1988YWWLVumevXq6ZNPPnGd2D9hwgStWLFCsbGxGjx4sJo2baojR44oLS1Ny5cvP+/Dir/39NNPa8mSJerQoYOGDBmigoICvfLKK2rWrNl5P4Vk/PjxWrZsma699loNGTJEPj4+mjFjhvLy8jRp0iS3eceOHaulS5fqmmuu0YMPPiin06lXX31VzZs318aNG89re7feeqvmzZunkJAQNW3aVKmpqVq+fLlq1KjxZz/+X9KwYUM1b95cy5cv17333usab9Cggb744gtNmjRJderUUZMmTRQdHV1s+bI4BzA2Nla33367Ro4cqaysLEVFRemtt97Szp07i5W1devW6brrrtOYMWM0duxYPfroo/rkk0/U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DRt0xRVXKDg42G08JiZGkrRx40YbUgHnxjmAFzFfX1/97W9/080336ywsDBt2bJFL7zwgjp06KA1a9aodevWdke03aOPPqoZM2ZIkry8vNSrVy+9+uqrNqeqeObPn699+/Zp3LhxdkepEKZPn65du3Zp+fLldkepMLZv366CggJ1795dgwYNUnJyslauXKlXXnlFx44d08KFC+2OaJsDBw6odu3axcaLxvbv3+/pSMAfogBexNq3b6/27du73t92223q3bu3WrRooZEjR2rJkiU2pqsYHnnkEfXu3Vv79+/Xv/71LzmdTuXn59sdq0JJT0/XP/7xD8XFxWnAgAF2x7Hd4cOHNXr0aI0aNUo1a9a0O06FcfLkSeXk5OiBBx5wXfXbq1cv5efna8aMGRo3bpwaNWpkc0p75Obmys/Pr9i4v7+/azpQ0XAIuJKJiopS9+7dtWLFCjmdTrvj2K5x48aKj4/XPffco//85z86efKkunXrJq59+k1GRoZuueUWhYSEuM5jMt1TTz2l0NBQDRs2zO4oFUpAQIAk6c4773Qbv+uuuyRJqampHs9UUQQEBCgvL6/YeNGh8aLvDqhIKICVUGRkpPLz83Xq1Cm7o1Q4vXv31rfffss97yQdP35cN910k44dO6YlS5aoTp06dkey3fbt2zVz5kw99NBD2r9/v3bu3KmdO3fq9OnTOnPmjHbu3KkjR47YHdMWRf99hIeHu43XqlVLknT06FGPZ6ooateurQMHDhQbLxrj7xYqIgpgJfTLL7/I399fQUFBdkepcIoOxRw/ftzmJPY6ffq0unXrpm3btuk///mPmjZtanekCmHfvn0qLCzUQw89pAYNGrhea9eu1bZt29SgQQNjz5OMjo6W9Nt39HtF57eZfLi8VatW2rZtm7Kzs93G165d65oOVDQUwIvYwYMHi419//33+uSTT9S1a1ej79OVlZVVbOzMmTN6++23FRAQYHThcTqd6tu3r1JTU/X+++8rLi7O7kgVRvPmzfXRRx8VezVr1kx169bVRx99pEGDBtkd0xZ9+vSRJL355ptu42+88YZ8fHzUuXNnG1JVDL1795bT6dTMmTNdY3l5eZozZ45iY2MVGRlpYzqgZFwEchHr27evAgIC1L59e9WqVUtbtmzRzJkzFRgYqAkTJtgdz1Z///vflZ2drY4dO+rSSy9VRkaG5s+fr/T0dL344otG7x199NFH9cknn6hbt246cuRIsRs/33333TYls19YWJh69OhRbLzoXoAlTTNF69atde+992r27NkqKChQp06dtHLlSr3//vsaOXKk0Yc5Y2Njdfvtt2vkyJHKyspSVFSU3nrrLe3cubNYYTbRq6++qmPHjrn2Fv/73/92PT1m2LBhCgkJsTOeuSxctKZOnWrFxMRYoaGhlo+Pj1W7dm3r7rvvtrZv3253NNstXLjQio+Pt8LDwy0fHx/rkksuseLj462PP/7Y7mi269SpkyWp1BeK69Spk9WsWTO7Y9guPz/fGjt2rFWvXj2rSpUqVlRUlPXSSy/ZHatCyM3NtYYPH25FRERYfn5+Vrt27awlS5bYHatCqFevXqn/3vz66692xzMWj4IDAAAwjLkniQEAABiKAggAAGAYCiAAAIBhKIAAAACGoQACAAAYhgIIAABgGAogAACAYSiAAAAAhqEAAkAJHA6HFi9ebHcMACgXFEAAlc7AgQONfm4vAPwRCiAAAIBhKIAAKrXOnTvroYce0uOPP67Q0FBFRERo7NixbvNs375dHTt2lL+/v5o2baply5YVW8+ePXvUp08fVa9eXaGhoerevbt27twpSUpPT1dgYKAWLFjgmv9f//qXAgICtGXLlvL8eADwl1AAAVR6b731lqpWraq1a9dq0qRJGjdunKvkFRYWqlevXvL19dXatWs1ffp0jRgxwm35M2fOKCEhQdWqVdPq1av19ddfKygoSDfeeKPy8/PVuHFjvfDCCxoyZIh2796tvXv36oEHHtDEiRPVtGlTOz4yAJyTw7Isy+4QAFCWBg4cqGPHjmnx4sXq3LmznE6nVq9e7ZoeExOj66+/XhMmTNDSpUt1yy23aNeuXapTp44kacmSJbrpppv00UcfqUePHnrnnXc0fvx4bd26VQ6HQ5KUn5+v6tWra/Hixeratask6dZbb1V2drZ8fX3l7e2tJUuWuOYHgIrEx+4AAFDeWrRo4fa+du3aysrKkiRt3bpVkZGRrvInSXFxcW7zf//999qxY4eqVavmNn769Gn9/PPPrvezZ8/WFVdcIS8vL23evJnyB6DCogACqPSqVKni9t7hcKiwsPC8lz958qSio6M1f/78YtNq1qzp+vn777/XqVOn5OXlpQMHDqh27dp/PTQAlCMKIACjNWnSRHv27HErbN98843bPG3atNF7772nWrVqKTg4uMT1HDlyRAMHDtSTTz6pAwcOqF+/fkpLS1NAQEC5fwYA+LO4CASA0eLj43XFFVdowIAB+v7777V69Wo9+eSTbvP069dPYWFh6t69u1avXq1ff/1VK1eu1EMPPaS9e/dKkh544AFFRkbqqaee0uTJk+V0OjV8+HA7PhIA/CEKIACjeXl56aOPPlJubq5iYmJ033336dlnn3WbJzAwUKtWrVLdunXVq1cvNWnSRIMGDdLp06cVHByst99+W59++qnmzZsnHx8fVa1aVe+8845mzZqlzz77zKZPBgCl4ypgAAAAw7AHEAAAwDAUQAAAAMNQAAEAAAxDAQQAADAMBRAAAMAwFEAAAADDUAABAAAMQwEEAAAwzP8HqklGRHD3iMUAAAAASUVORK5CYII=" + } + }, + "cell_type": "markdown", + "id": "7b61c2d0", + "metadata": {}, + "source": [ + "![intensity_cluster.png](attachment:intensity_cluster.png)" + ] + }, + { + "cell_type": "markdown", + "id": "4657e4fd-8c7d-4d07-8984-d28cb7acba32", + "metadata": {}, + "source": [ + "Console Output\n", + "\n", + "```\n", + "Running XSCALE on cluster 1\n", + "\n", + "Clustering results\n", + "\n", + "Cutoff distance: 0.259\n", + "Equivalent CC(I): 0.966\n", + "Method: average\n", + "\n", + " # N_clust CC(1/2) N_obs N_uniq N_poss Compl. N_comp R_meas d_min i/sigma | Lauegr. prob. conf. idx\n", + " 1*** 5 96.6* 10778 2522 2690 93.8* 10458 0.285* 0.80 3.23\n", + "(Sorted by 'Completeness')\n", + "\n", + "Cluster 1: [1, 2, 3, 5, 7]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "2cb1d59a-8268-4bce-90a5-3b198791d3b1", + "metadata": {}, + "source": [ + "## Instruction for using on your own data\n", + "\n", + "- Install **edtools** and all software dependencies on your system\n", + "- Put all your 3D ED datasets in one folder. All the 3D ED datasets are expected to be in some *XDS* readable image format, e.g. SMV. A correctly configured *XDS.INP* file is also expected for each dataset.\n", + "- Open Windows command prompt from the root directory which contains all the datasets\n", + "- Follow the demo" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.11" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/examples/find_cell_step3.png b/docs/examples/find_cell_step3.png new file mode 100644 index 0000000000000000000000000000000000000000..98981e4a0ea94f82407b72aaadc8b70e2ecedb4a GIT binary patch literal 19107 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