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 0000000..98981e4 Binary files /dev/null and b/docs/examples/find_cell_step3.png differ diff --git a/docs/examples/find_cell_step5.png b/docs/examples/find_cell_step5.png new file mode 100644 index 0000000..495ef5a Binary files /dev/null and b/docs/examples/find_cell_step5.png differ diff --git a/docs/examples/intensity_cluster.png b/docs/examples/intensity_cluster.png new file mode 100644 index 0000000..5b42d1f Binary files /dev/null and b/docs/examples/intensity_cluster.png differ diff --git a/docs/index.rst b/docs/index.rst index 65115a1..46c8de1 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -12,6 +12,16 @@ API Reference edtools +Examples +======== +.. toctree:: + :maxdepth: 1 + :caption: Examples + :glob: + + examples/* + + Links ===== .. toctree:: diff --git a/docs/requirements.txt b/docs/requirements.txt index 7d7eb09..35e2727 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,5 +1,6 @@ sphinx sphinx_rtd_theme +nbsphinx readthedocs-sphinx-search autodocsumm lmfit